Memory range length [23:16] = 0xFF
Memory range length [15:8] = 0x00
This indicates that address bits[23:16] are used to compare for a matching address, address bits[15:8] and bits[7:0] are not used. This 64 KByte address range must be aligned on a 64 KByte or higher boundary.
Memory upper limit registers are defined as being one byte greater than the memory resource assigned. For example, a logical device that requests 64 Kbytes of memory that is assigned at a base address of 1 Mbyte would have:
Memory base [23:16] = 0x10
Memory base [15:8] = 0x00
Memory upper limit [23:16] = 0x11
Memory upper limit [15:8] = 0x00
The memory control register, 0x42 (or 0x7A for 32-bit memory), may be implemented as a read-only register in devices that do not support programmable 8/16/32 bit operation and use only one type of memory decode. Memory registers 0x43 and 0x44 (or 0x7B - 0x7E for 32-bit memory) do not need to be supported by devices that only support a fixed length memory range that is aligned on a natural boundary.
Mixing 24-bit and 32-bit memory descriptors is not allowed. For a given card, only one type of descriptor can be used. The type of the first memory descriptor in the resource data structure will determine which set of configuration registers is used (either 0x40-0x5F, or 0x76-0xA8).
Table A-3. Memory Space Configuration
Name | Register Index | Definition |
Memory base address bits[23:16] descriptor 0 | 0x40 | Read/write value indicating the selected memory base address bits[23:16] for memory descriptor 0. |
Memory base address bits[15:8] descriptor 0 | 0x41 | Read/write value indicating the selected memory base address bits[15:8] for memory descriptor 0. |
Memory control | 0x42 | Bit[1] specifies 8/16-bit control. This bit is set to indicate 16-bit memory, and cleared to indicate 8-bit memory.
Bit[0], if cleared, indicates the next field can be used as a range length for decode (implies range length and base alignment of memory descriptor are equal).
Bit[0], if set, indicates the next field is the upper limit for the address. Bit[0] is read-only. |
Memory upper limit address bits[23:16] or range length bits[23:16] for descriptor 0 | 0x43 | Read/write value indicating the selected memory high address bits[23:16] for memory descriptor 0. If bit[0] of memory control is 0, this is the range length. If bit[0] of memory control is 1, this is upper limit for memory address (equal to memory base address plus the range length allocated). |
Memory upper limit address bits[15:8] or range length bits[15:8] for descriptor 0 | 0x44 | Read/write value indicating the selected memory high address bits[15:8] for memory descriptor 0, either a memory address or a range length as described above. |
Filler | 0x45 - 0x47 | Reserved |
Memory descriptor 1 | 0x48 - 0x4C | Memory descriptor 1 |
Filler | 0x4D - 0x4F | Reserved |
Memory descriptor 2 | 0x50 - 0x54 | Memory descriptor 2 |
Filler | 0x55 - 0x57 | Reserved |
Memory descriptor 3 | 0x58 - 0x5C | Memory descriptor 3 |
Filler | 0x5D - 0x5F | Reserved |
Name | Register Index | Definition |
32 Bit Memory base address bits[31:24] descriptor 0 | 0x76 | Read/write value indicating the selected memory base address bits[31:24] for 32 bit memory descriptor 0. |
32 Bit Memory base address bits[23:16] descriptor 0 | 0x77 | Read/write value indicating the selected memory base address bits[23:16] for 32 bit memory descriptor 0. |
32 Bit Memory base address bits[15:8] descriptor 0 | 0x78 | Read/write value indicating the selected memory base address bits[15:8] for 32 bit memory descriptor 0. |
32 Bit Memory base address bits[7:0] descriptor 0 | 0x79 | Read/write value indicating the selected memory base address bits[7:0] for 32 bit memory descriptor 0. |
32 Bit Memory Control | 0x7A | Bits[7:3] Reserved and must return 0 on reads
Bits[2:1] Memory control. These bits indicate 8/16/32 bit memory as follows: 00 8-bit memory 01 16-bit memory 10 Reserved 11 32-bit memory If bit[0] of memory control is 0, this is the range length. If bit[0] of memory control is 1, this is upper limit for memory address (equal to memory base address plus the range length allocated). Bit[0] is read-only. |
Memory upper limit address bits[31:24] or range length bits[31:24] for descriptor 0 | 0x7B | Read/write value indicating the selected memory high address bits[31:24] for memory descriptor 0. If bit[0] of memory control is 0, this is the range length. If bit[0] of memory control is 1, this is upper limit for memory address (equal to memory base address plus the range length allocated). |
Memory upper limit address bits[23:16] or range length bits[23:16] for descriptor 0 | 0x7C | Read/write value indicating the selected memory high address bits[23:16] for memory descriptor 0, either a memory address or a range length as described above. |
Memory upper limit address bits[15:8] or range length bits[15:8] for descriptor 0 | 0x7D | Read/write value indicating the selected memory high address bits[15:8] for memory descriptor 0, either a memory address or a range length as described above. |
Memory upper limit address bits[7:0] or range length bits[7:0] for descriptor 0 | 0x7E | Read/write value indicating the selected memory high address bits[7:0] for memory descriptor 0, either a memory address or a range length as described above. |
Filler | 0x7F | Reserved |
32 Bit Memory descriptor 1 | 0x80 - 0x88 | 32 Bit Memory descriptor 1 |
Filler | 0x89 - 0x8F | Reserved |
32 Bit Memory descriptor 2 | 0x90 - 0x98 | 32 Bit Memory descriptor 2 |
Filler | 0x99 - 0x9F | Reserved |
32 Bit Memory descriptor 3 | 0xA0 - 0xA8 | 32 Bit Memory descriptor 3 |
Name | Register Index | Definition |
I/O port base address bits[15:8] descriptor 0 | 0x60 | Read/write value indicating the selected I/O lower limit address bits[15:8] for I/O descriptor 0. If a logical device indicates it only uses 10 bit decoding, then bits[15:10] do not need to be supported. |
I/O port base address bits [7:0] descriptor 0 | 0x61 | Read/write value indicating the selected I/O lower limit address bits[7:0] for I/O descriptor 0. |
I/O port address descriptors [1-6] | 0x62 - 0x6D | I/O base addresses for I/O descriptors 1 - 6 |
I/O port base address bits[15:8] descriptor 7 | 0x6E | Read/write value indicating the selected I/O base address bits[15:8] for I/O descriptor 7. If a logical device indicates it only uses 10 bit decoding, then bits[15:10] do not need to be supported. |
I/O port base address bits[7:0] descriptor 7 | 0x6F | Read/write value indicating the selected I/O base address bits[7:0] for I/O descriptor 7. |
Name | Register Index | Definition | |||||
Interrupt request level select 0 | 0x70 | Read/write value indicating selected interrupt level. Bits[3:0] select which interrupt level is used for Interrupt 0. One selects IRQL 1, fifteen selects IRQL fifteen. IRQL 0 is not a valid interrupt selection and represents no interrupt selection. | |||||
Interrupt request type select 0 | 0x71 | Read/write value indicating which type of interrupt is used for the Request Level selected above.
Bit[1] : Level, 1 = high, 0 = low Bit[0] : Type, 1 = level, 0 = edge If a card only supports 1 type of interrupt, this register may be read-only. | |||||
Interrupt request level select 1 | 0x72 | Read/write value indicating selected interrupt level. Bits[3:0] select which interrupt level is used for Interrupt 0. One selects IRQL 1, fifteen selects IRQL fifteen. IRQL 0 is not a valid interrupt selection and represents no interrupt selection. | |||||
Interrupt request type select 1 | 0x73 | Read/write value indicating which type of interrupt is used for the Request Level selected above.
Bit[1] : Level, 1 = high, 0 = low Bit[0] : Type, 1 = level, 0 = edge |
Name | Register Index | Definition | |||||
DMA channel select 0 | 0x74 | Read/write value indicating selected DMA channels. Bits[2:0] select which DMA channel is in use for DMA 0. Zero selects DMA channel 0, seven selects DMA channel 7. DMA channel 4, the cascade channel is used to indicate no DMA channel is active. | |||||
DMA channel select 1 | 0x75 | Read/write value indicating selected DMA channels. Bits[2:0] select which DMA channel is in use for DMA 1. Zero selects DMA channel 0, seven selects DMA channel seven. DMA channel 4, the cascade channel is used to indicate no DMA channel is active. |
Name | Register Index | Definition | |||
Logical device configuration reserved | 0xA9-0xEF | Reserved | |||
Logical device configuration vendor defined | 0xF0-0xFE | Vendor defined |