Commit 1d45f6e2 authored by Robert Sprowson's avatar Robert Sprowson
Browse files

Prised out the last remaining IOMD assumptions,now follows a policy of...

Prised out the last remaining IOMD assumptions,now follows a policy of autodetection described in "Docs.Policy",which included eliminating some static tables which were produced at runtime.

The static tables are now all in s.Tables.
The podule node list is generated at run time since so many of the node
entries needed correction depending on where "SSpaceStart" is.
Though not explicitly mentioned in the PRMs,where an IO area doesn't
exist for a given IOMD varient zero is returned by Podule_ReadInfo to
denote it does not exist
Support for Podule_SetSpeed helpers added,thus IOMD abstracting the way
you set EASI cycle speeds.

Version 1.60. Tagged as 'Podule-1_60'
parent e05681e4
Policy post Podule Manager 1.58
-------------------------------
Podule manager will ask the Kernel where 'S' space is.
If it gets an error,it assumes the Kernel is too old to understand OS_Memory and will substitute the
hardcoded IOMD_Base address for you.
If zero,or non zero but unknown then you don't get any EASI or MEMC or IOC podules at all.
If non zero and known then it'll magically update all the podule nodes according to what the tables tell it.
The assumption here is that podule manager's table of known devices will be updated on a 'per new IOMD
lookalike' basis.In a system with no IOMD but still some IO space,podule manager can be fooled into thinking
there're podules with some due care.
SUBT => &.Arthur.Podule.HelpTexts
SUBT => Podule.HelpTexts
[ International_Help <> 0
......
......@@ -17,12 +17,11 @@ BadPod:Bad expansion card identifier
InLdr:Unknown error in loader
NoLdr:No loader to call
NoPod:No installed expansion card
NotAcrn:Expansion card is non-conformant
NotAcrn:Expansion card is non conformant
NotExt:Expansion card identity is not extended
BadRead:Unknown bit set in ReadInfo
BdSpeed:Unknown value for speed setting
SpeedNo:Requested speed setting not available for this expansion card
ECNoSpd:This expansion card does not support speed setting
NotEASI:This expansion card has no EASI space
AddressRange:Address out of range for expansion card
PoduleReadOnly:Read only device
......
......@@ -11,13 +11,13 @@
GBLS Module_HelpVersion
GBLS Module_ComponentName
GBLS Module_ComponentPath
Module_MajorVersion SETS "1.59"
Module_Version SETA 159
Module_MajorVersion SETS "1.60"
Module_Version SETA 160
Module_MinorVersion SETS ""
Module_Date SETS "26 Oct 2002"
Module_ApplicationDate SETS "26-Oct-02"
Module_Date SETS "04 Nov 2002"
Module_ApplicationDate SETS "04-Nov-02"
Module_ComponentName SETS "Podule"
Module_ComponentPath SETS "RiscOS/Sources/HWSupport/Podule"
Module_FullVersion SETS "1.59"
Module_HelpVersion SETS "1.59 (26 Oct 2002)"
Module_FullVersion SETS "1.60"
Module_HelpVersion SETS "1.60 (04 Nov 2002)"
END
/* (1.59)
/* (1.60)
*
* This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.68.
*
*/
#define Module_MajorVersion_CMHG 1.59
#define Module_MajorVersion_CMHG 1.60
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 26 Oct 2002
#define Module_Date_CMHG 04 Nov 2002
#define Module_MajorVersion "1.59"
#define Module_Version 159
#define Module_MajorVersion "1.60"
#define Module_Version 160
#define Module_MinorVersion ""
#define Module_Date "26 Oct 2002"
#define Module_Date "04 Nov 2002"
#define Module_ApplicationDate "26-Oct-02"
#define Module_ApplicationDate "04-Nov-02"
#define Module_ComponentName "Podule"
#define Module_ComponentPath "RiscOS/Sources/HWSupport/Podule"
#define Module_FullVersion "1.59"
#define Module_HelpVersion "1.59 (26 Oct 2002)"
#define Module_LibraryVersionInfo "1:59"
#define Module_FullVersion "1.60"
#define Module_HelpVersion "1.60 (04 Nov 2002)"
#define Module_LibraryVersionInfo "1:60"
......@@ -61,7 +61,6 @@ DoStarPodules Entry "r7-r8", 8 ; Stack frame for text c
; Get Messages file open up front. This way we know we will not get
; "File not found" type errors when making Podule Manager SWIs.
BL open_message_file
SWIVC XPodule_ReturnNumber ; out: r0 = number of podules, r1 = number of extension ROMs
EXIT VS
......@@ -77,17 +76,18 @@ DoStarPodules Entry "r7-r8", 8 ; Stack frame for text c
next_podule_loop
TEQ r7, #1
ADRNE r4, Token_ExtROM ; or ExtROM as appropriate
[ {TRUE} ; get ReadInfo Description for extension ROMs just like podules
ADREQ r4, Token_PodStd ; Set MsgTrans token for PodStd
|
ADRNE r5, null_string
BNE got_podule_message
ADR r4, Token_PodStd ; Set MsgTrans token for PodStd
]
[ NetworkPodule
TEQ r6, #NumberOfPodules
ADREQ r4, Token_PodNet
LDR r0, Capabilities
ASSERT NumberOfNetworkPodule = MaximumPodule-1
LDR r1, [r0, #Capability_Features]
TST r1, #Capability_NIC
BEQ %FT10
LDR r1, [r0, #Capability_PodCount]
TEQ r6, r1
ADREQ r4, Token_PodNet ; NIC supported AND this is the highest podule number
]
10
MOV r0, #Podule_ReadInfo_Description
MOV r1, sp ; Place to return address
MOV r2, #4 ; Size of return buffer
......
......@@ -55,6 +55,7 @@ GetHelpTexts SETS "GET HelpTokens.s"
AREA Podule_code, CODE, READONLY
GET s.Module
GET s.Tables
GET s.Interface
GET s.Commands
GET s.Errors
......
This diff is collapsed.
This diff is collapsed.
......@@ -20,7 +20,6 @@
temp_block_size * 512
; OSS Print a GS Transed string from the Messages file, with four parameters.
; Temporarily claims a block of RMA for the buffer.
......@@ -207,7 +206,6 @@ SoftloadErrorMssg
; out: all registers preserved (except r0 if the message file is duff)
Entry "r0-r7"
BL open_message_file ; Ensure file is open
STRVS r0, [ sp, #0 ]
EXIT VS ; Return the error
......
......@@ -19,8 +19,8 @@
[ ExtensionROMs
; You must ask where the ROMs are,but this didn't seem worth updating
! 0, "StartOfROM and EndOfROM need defining at run time"
! 0, "Extension ROM support is very out of step"
! 0, "StartOfROM and EndOfROM now determined at run time"
! 0, "Extension ROM support will need updating"
; OSS *** NOTE. Throughout the entire of the code in this file, r12 points
; at the private word instead of pointing at the workspace held in the
......@@ -867,9 +867,9 @@ AddROMNode Entry "R0-R4, R9-R11"
; SWI Podule_ReturnNumber which returns the number of podules (ie. 4) and
; the number of extension ROMs. This is for the *Podules command.
LDR r0, [ r2, #:INDEX:number_of_extension_roms ]
LDR r0, [ r2, #:INDEX:NumberOfExtROMs ]
ADD r0, r0, #1
STR r0, [r2, #:INDEX:number_of_extension_roms]
STR r0, [r2, #:INDEX:NumberOfExtROMs]
EXIT
......
; Copyright 2002 Tematic Ltd
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
; http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
TTL The Podule manager.
SUBT Magic Tables => Podule.s.Tables
OPT OptPage
; Offsets used later for readability (different IOMDs may choose to space these differently)
PoduleBase0 * &033C0000-&03200000 ; IOC podules
PoduleBase4 * &033F0000-&03200000
ModuleBase0 * &03000000-&03200000 ; MEMC podules
ModuleBase4 * &03030000-&03200000
NetworkBaseROM * &0302B000-&03200000 ; NICs
NetworkBaseChip * &0302B800-&03200000
PoduleIntStatus * &03200020-&03200000 ; IRQB
PoduleIntRequest * &03200024-&03200000
PoduleIntMask * &03200028-&03200000
PoduleIntValue * &20
PoduleIntDeviceVector * &0D
PoduleFIQasIntStatus * &03200020-&03200000 ; IRQB
PoduleFIQasIntRequest * &03200024-&03200000
PoduleFIQasIntMask * &03200028-&03200000
PoduleFIQasIntValue * &01
PoduleFIQasIntDeviceVector * &08
PoduleFIQStatus * &03200030-&03200000 ; FIQ
PoduleFIQRequest * &03200034-&03200000
PoduleFIQMask * &03200038-&03200000
PoduleFIQValue * &40
NetworkIntStatus * &03200020-&03200000 ; IRQB
NetworkIntRequest * &03200024-&03200000
NetworkIntMask * &03200028-&03200000
NetworkIntValue * &08
NetworkIntDeviceVector * &0B
NetworkFIQasIntStatus * &03200020-&03200000 ; IRQB
NetworkFIQasIntRequest * &03200024-&03200000
NetworkFIQasIntMask * &03200028-&03200000
NetworkFIQasIntValue * &08
NetworkFIQasIntDeviceVector * &0B
NetworkFIQStatus * &03200030-&03200000 ; FIQ
NetworkFIQRequest * &03200034-&03200000
NetworkFIQMask * &03200038-&03200000
NetworkFIQValue * &02
; Precalculated tables of values to LDR then STR in order into the node (with address
; correction where non zero).Note that these could be calculated at run time,but their use allows
; future IOMDs to have their podules splattered anywhere relative to "SSpace"
B0
DCD PoduleBase0+&0000,ModuleBase0+&0000,PoduleBase0+&0000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleCMOS +0
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
B1
DCD PoduleBase0+&4000,ModuleBase0+&4000,PoduleBase0+&4000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleCMOS +4
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
B2
DCD PoduleBase0+&8000,ModuleBase0+&8000,PoduleBase0+&8000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleCMOS +8
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
B3
DCD PoduleBase0+&C000,ModuleBase0+&C000,PoduleBase0+&C000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleCMOS +12
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
B4
DCD PoduleBase4+&0000,ModuleBase4+&0000,PoduleBase4+&0000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleExtraCMOS +16
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
B5
DCD PoduleBase4+&4000,ModuleBase4+&4000,PoduleBase4+&4000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleExtraCMOS +12
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
B6
DCD PoduleBase4+&8000,ModuleBase4+&8000,PoduleBase4+&8000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleExtraCMOS +8
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
B7
DCD PoduleBase4+&C000,ModuleBase4+&C000,PoduleBase4+&C000
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleExtraCMOS +4
DCB 0,PoduleIntValue,PoduleFIQasIntValue,PoduleFIQValue
[ NetworkPodule
B8
DCD NetworkBaseChip,0,NetworkBaseROM
DCD PoduleFIQasIntMask,PoduleIntMask,PoduleFIQMask,PoduleFIQasIntStatus
DCD PoduleIntStatus,PoduleFIQStatus,PoduleFIQasIntRequest,PoduleIntRequest,PoduleFIQRequest
DCD PoduleFIQasIntDeviceVector,PoduleIntDeviceVector,PoduleExtraCMOS +0
DCB 0,NetworkIntValue,NetworkFIQasIntValue,NetworkFIQValue
]
; The top wedge of a podule node table
NodeStatics
DCD 0 ; Link (end of link)
DCD -1 ; LoaderOffset (none)
DCD Maxint ; PoduleLimit
DCD -1 ; EnumerationLimit
DCD 16 ; WordOffset
DCD 0, 4, 8 ,12 ; ByteOffsets
DCD 0 ; Description
DCW 0 ; Type
DCB 0 ; Flags
DCB 255 ; IDByte
NodeStaticsEnd
; What they can all do
IOMDCapabilities
IOMDUnknownCap
DCD -1,-1,-1,-1,-1,-1,-1,-1,-1 ; Definately no DMA
DCD 0,0 ; No capability or podules
B ExitSetSpeed
IOMD1Cap
DCD &000,&010,-1,-1,-1,-1,-1,-1,&105
[ NetworkPodule
DCD 2_00111111 ; We've included the NIC code,so declare it
DCD 9
|
DCD 2_00111110
DCD 8
]
B HelperIOMD1
DCD B0-IOMD1Cap,B1-IOMD1Cap,B2-IOMD1Cap,B3-IOMD1Cap
DCD B4-IOMD1Cap,B5-IOMD1Cap,B6-IOMD1Cap,B7-IOMD1Cap
[ NetworkPodule
DCD B8-IOMD1Cap
]
IOMD75Cap
DCD -1,-1,-1,-1,-1,-1,-1,-1,-1 ; No external DMA
[ NetworkPodule
DCD 2_00111111 ; We've included the NIC code,so declare it
|
DCD 2_00111110
]
DCD MaximumPodule
B HelperIOMD1
DCD B0-IOMD75Cap,B1-IOMD75Cap,B2-IOMD75Cap,B3-IOMD75Cap
DCD B4-IOMD75Cap,B5-IOMD75Cap,B6-IOMD75Cap,B7-IOMD75Cap
[ NetworkPodule
DCD B8-IOMD75Cap
]
IOMDTCap
DCD -1,-1,-1,-1,-1,-1,-1,-1,-1 ; No external DMA
DCD 2_00111110
DCD 4
B HelperIOMDT
DCD B0-IOMDTCap,B1-IOMDTCap,B2-IOMDTCap,B3-IOMDTCap
IOMDCapabilitiesEnd
; A table of the ID bytes of various ids and pointers to capabilities lists
KnownIOMDs
DCD 0 , IOMDUnknownCap-IOMDCapabilities ; Special entry
DCD IOMD_Original, IOMD1Cap -IOMDCapabilities ; Used on Risc PC
DCD IOMD_7500 , IOMD75Cap -IOMDCapabilities ; Used on A7000 only
DCD IOMD_7500FE , IOMD75Cap -IOMDCapabilities ; Used all over the place
DCD IOMD_2 , IOMDUnknownCap-IOMDCapabilities ; Understood,but not supported at present
DCD IOMD_Tungsten, IOMDTCap -IOMDCapabilities ; Used on Tungsten
KnownIOMDsEnd
END
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment