6.2. Plug and Play Resource Data Types

Plug and Play resource data fully describes all resource requirements of a Plug and Play ISA card as well as resource programmability and interdependencies. Plug and Play resource data is supplied as a series of "tagged" data structures. To minimize the amount of storage needed on Plug and Play ISA cards two different data types are supported. These are called small items and large items. The general format of the structure is shown below. The first byte defines the type and size for most information and is followed by one or more bytes of the actual information. Bit[7] of the first byte is used as the tag identifier to differentiate between a small item or a large item data type.

6.2.1. Resource Data Requirements

The minimum level of functionality of Plug and Play cards was defined earlier. This implies that the Plug and Play version number data type (small item format), the identifier string data type (large item format) and all resource types to identify the fixed resources will always be present. The identifier string is used by the operating system for device related configuration and error messages. Card vendors may include several identifiers if they would like to support multiple text formats (ANSI, Unicode) and international languages. The description of an identifier string is included in the section on large item format.

It is recommended that configurable boot devices include all configuration information on their cards to allow Plug and Play BIOS to manage resources during boot time. Refer to the section on boot devices for more information.

A Plug and Play logical device may use any number of resources and any combination of small item or large item data types. The general format is :

  1. Plug and Play version number type
  2. Identifier string resource type
  3. Logical device ID resource type
    • Any compatible device ID resource type for this logical device
    • Resource data types to match what the function uses (IRQ, memory, I/O, DMA)-the order is not important.
    • Any dependent functions needed if the Plug and Play card is configurable. The order of the resource data establishes the binding to the configuration registers.

Note Step 3 is repeated for each logical device present on the Plug and Play card.

  1. End tag resource type to indicate the end of resources for this Plug and Play card.
The order of resource descriptors is significant because configuration registers are programmed in the same order that descriptors are read (see section 4.6.1). This may be important in some hardware implementations. Further, in the case of Dependent Functions it may be necessary to include null descriptors ('filler') in order to maintain the desired descriptor-to-register mapping regardless of which Dependent Function is programmed by the software. NULL descriptors are defined for each resource type (see resource descriptor sections).

6.2.2. Small Resource Data Type

A small resource data type may be 2-8 bytes in size and adheres to the following format:

Table 3. Small Resource Data Type Tag Bit Definitions

Offset

Field

Byte 0

Tag Bit[7]

Tag Bits[6:3]

Tag Bits [2:0]

Type = 0

Small item name

Length = n bytes

Bytes 1 to n

Actual information


The following small information items are currently defined for Plug and Play ISA devices:

Table 4. Small Resource Items

Small Item Name

Value

Plug and Play version number

0x1

Logical device ID

0x2

Compatible device ID

0x3

IRQ format

0x4

DMA format

0x5

Start dependent Function

0x6

End dependent Function

0x7

I/O port descriptor

0x8

Fixed location I/O port descriptor

0x9

Reserved

0xA - 0xD

Vendor defined

0xE

End tag

0xF


6.2.2.1. Plug and Play Version Number

The Plug and Play Version Number identifies the version of the Plug and Play specification with which this card is compatible. A vendor specific version number is included and may be used by a device driver to verify the version of the card.

Offset

Field Name

Byte 0

Value = 00001010B (Type = 0, small item name = 0x1, length = 2)

Byte 1

Plug and Play version number (in packed BCD format, major bits[7:4], minor bits[3:0]) Example: Version 1.0 = 0x10, Version 2.3 = 0x23, Version 2.91= 0x29

Byte 2

Vendor specific version number


6.2.2.2. Logical Device ID

The Logical Device ID provides a mechanism for uniquely identifying multiple logical devices embedded in a single physical board. The format of the logical device ID is identical to the Vendor ID field (see Sec. 6.1).

This identifier may be used to select a device driver for the device. Because of this, Logical Device IDs must be uniquely associated with a specific function. However, there is no need for the Logical Device ID itself to have a unique value, either on a card, or across cards. For instance, a card that implements two communications ports may use the exact same Logical Device ID for both. Similarly, two different products (different Vendor IDs) may both implement the same function, and therefore will use the same Logical Device ID for it. The Logical Device ID is required on all cards. On single-function cards, the Logical Device ID may be the same as the card's vendor ID

The Logical Device ID includes information about what optional commands are supported. Also, bit zero of the flags field is used to indicate that this device should be activated by the BIOS at boot time if this system includes a Plug and Play BIOS. Refer to the section on Plug and Play boot devices (Appendix C, Sec. C-2) for details.

Offset

Field Name

Byte 0

Value = 000101xxB (Type = 0, small item name = 0x2, length = (5 or 6))

Byte 1

Bit[7] 0

Bits[6:2] First character in compressed ASCII

Bits[1:0] Second character in compressed ASCII bits[4:3]

Byte 2

Bits[7:5] Second character in compressed ASCII bits[2:0]

Bits[4:0] Third character in compressed ASCII

Byte 3

(Vendor Assigned)

Bits[7:4] First hexadecimal digit of function number
(bit 7 is msb)

Bits[3:0] Second hexadecimal digit of function number
(bit 3 is msb)

Byte 4

(Vendor Assigned)

Bits[7:4] Third hexadecimal digit of function number
(bit 7 is msb)

Bits[3:0] Hexadecimal digit of revision level (bit 3 is msb)

Byte 5

Flags:
Bits[7:1], if set, indicate commands supported per logical device for registers in the range of 0x31 to 0x37 respectively.

Bit[0], if set, indicates this logical device is capable of participating in the boot process Note: Cards that power-up active MUST have this bit set. However, if this bit is set, the card may or may not power-up active.

Byte 6

Flags:
Bit[7:0], if set, indicate commands supported per logical device for registers in the range of 0x38 to 0x3F respectively.


6.2.2.3. Compatible Device ID

The compatible device ID provides the IDs of other devices with which this device is compatible. The operating system uses this information to load compatible device drivers if necessary. There can be several compatible device identifiers for each logical device. The order of these device IDs may be used by the operating system as a criteria for determining which driver should be searched for and loaded first.

Offset

Field Name

Byte 0

Value = 00011100B (Type = 0, small item name = 0x3, length = 4)

Byte 1

Bit[7] 0

Bits[6:2] First character in compressed ASCII

Bits[1:0] Second character in compressed ASCII bits[4:3]

Byte 2

Bits[7:5] Second character in compressed ASCII bits[2:0]

Bits[4:0] Third character in compressed ASCII

Byte 3

(Vendor Assigned)

Bits[7:4] First hexadecimal digit of function number
(bit 7 is msb)

Bits[3:0] Second hexadecimal digit of function number
(bit 3 is msb)

Byte 4

(Vendor Assigned)

Bits[7:4] Third hexadecimal digit of function number
(bit 7 is msb)

Bits[3:0] Hexadecimal digit of revision level (bit 3 is msb)


As an example of the use of compatible IDs, consider a card vendor who ships a device with logical ID 0xABCD0000. At a later date, this vendor ships a new device with a logical ID 0xABCD0001. This new device is 100% compatible with the old device but also has added functionality. For this device, the vendor could include the Compatible device ID 0xABCD0000. In this case, the exact driver for 0xABCD0001 will be loaded if it can be located. If the driver for 0xABCD0001 can not be found, the driver for device 0xABCD0000 will be loaded for the device.

A list of standard compatible device drivers is available from the Plug and Play Association as file "devids.txt" on the Association's Compuserve forum, PLUGPLAY.

6.2.2.4. IRQ Format

The IRQ data structure indicates that the device uses an interrupt level and supplies a mask with bits set indicating the levels implemented in this device. For standard ISA implementation there are 16 possible interrupt levels so a two byte field is used. This structure is repeated for each separate interrupt level required.

NULL IRQ Descriptor: IRQ mask bits set to all zero (no bits set to 1) (all other fields ignored).

PnP Software action: Corresponding IRQ level select register programmed to all zeros. The IRQ type select register is programmed to 0x02h (High-true, edge-sensitve interrupts).

Offset

Field Name

Byte 0

Value = 0010001XB (Type = 0, small item name = 0x4, length = (2 or 3))

Byte 1

IRQ mask bits[7:0]. Bit[0] represents IRQ0, bit[1] is IRQ1, and so on.

Byte 2

IRQ mask bits[15:8]. Bit[0] represents IRQ8, bit[1] is IRQ9, and so on.

Byte 3

IRQ Information. Each bit, when set, indicates this device is capable of driving a certain type of interrupt. (Optional--if not included then assume ISA compatible edge sensitive, high true interrupts)
Bit[7:4] Reserved and must be 0
Bit[3] Low true level sensitive
Bit[2] High true level sensitive
Bit[1] Low true edge sensitive
Bit[0] High true edge sensitive (Must be supported for ISA compatibility)


Note Low true, level sensitive interrupts may be electrically shared, the process of how this might work is beyond the scope of this specification. Only IRQs that exist on the ISA bus connectors are valid.

6.2.2.5. DMA Format

The DMA data structure indicates that the device uses a DMA channel and supplies a mask with bits set indicating the channels actually implemented in this device. This structure is repeated for each separate channel required.

NULL DMA Descriptor: DMA channel mask bits set to all zero (no bits set to 1) (all other fields ignored).

PnP Software action: Corresponding DMA channel select register programmed to 0x04h.

Offset

Field Name

Byte 0

Value = 00101010B (Type = 0, small item name = 0x5, length = 2)

Byte 1

DMA channel mask bits[7:0]. Bit[0] is channel 0.

Byte 2

Bit[7] Reserved and must be 0

Bits[6:5] DMA channel speed supported
Status
00 Indicates compatibility mode
01 Indicates Type A DMA as described in the EISA Specification
10 Indicates Type B DMA
11 Indicates Type F

Bit[4] DMA word mode
Status
0 DMA may not execute in count by word mode
1 DMA may execute in count by word mode

Bit[3] DMA byte mode status
Status
0 DMA may not execute in count by byte mode
1 DMA may execute in count by byte mode

Bit[2] Logical device bus master status
Status
0 Logical device is not a bus master
1 Logical device is a bus master

Bits[1:0] DMA transfer type preference
Status
00 8-bit only
01 8- and 16-bit
10 16-bit only
11 Reserved


6.2.2.6. Start Dependent Functions

Each logical device requires a set of resources. This set of resources may have interdependencies that need to be expressed to allow arbitration software to make resource allocation decisions about the logical device. Dependent functions are used to express these interdependencies. The data structure definitions for dependent functions are shown here. For a detailed description of the use of dependent functions refer to the next section.

Offset

Field Name

Byte 0

Value = 0011000xB (Type = 0, small item name = 0x6, length =(0 or 1))


Start Dependent Function fields may be of length 0 or 1 bytes. The extra byte is optionally used to denote priority for the resource group following the Start DF tag. If the extra byte is not included, this indicates the dependent function priority is 'acceptable'. If the Priority byte is included, the priorities are defined as:

Value

Definition

0

Good configuration - Highest Priority and preferred configuration

1

Acceptable configuration - Lower Priority but acceptable configuration

2

Sub-optimal configuration - Functional configuration but not optimal

3 - 255

Reserved


Note that if multiple Dependent Functions have the same priority, they are further prioritized by the order in which they appear in the resource data structure. The Dependent Function which appears earliest (nearest the beginning) in the structure has the highest priority, and so on.

6.2.2.7. End Dependent Functions

Offset

Field Name

Byte 0

Value = 00111000B (Type = 0, small item name = 0x7 length =0)


Note that only one End Dependent Function item is allowed per logical device. This enforces the fact that Dependent Functions are not nestable (see section 7.0).

6.2.2.8. I/O Port Descriptor

There are two types of descriptors for I/O ranges. The first descriptor is a full function descriptor for programmable ISA cards. The second descriptor is a minimal descriptor for old ISA cards with fixed I/O requirements that use a 10-bit ISA address decode. The first type descriptor can also be used to describe fixed I/O requirements for ISA cards that require a 16-bit address decode. This is accomplished by setting the range minimum base address and range maximum base address to the same fixed I/O value.\revauth1 \revdttm1709962031

NULL I/O Port Descriptor: Range Length field set to all zeros (all other fields ignored).

PnP Software action: Corresponding I/O port base address registers programmed to all zeros.

Offset

Field Name

Definition

Byte 0

I/O port descriptor

Value = 01000111B (Type = 0, Small item name = 0x8, Length = 7)

Byte 1

Information

Bits[7:1] are reserved and must be 0

Bit[0], if set, indicates the logical device decodes the full 16 bit ISA address. If bit[0] is not set, this indicates the logical device only decodes ISA address bits[9:0].

Byte 2

Range minimum base address
bits[7:0]

Address bits[7:0] of the minimum base I/O address that the card may be configured for.

Byte 3

Range minimum base address
bits[15:8]

Address bits[15:8] of the minimum base I/O address that the card may be configured for.

Byte 4

Range maximum base address
bits[7:0]

Address bits[7:0] of the maximum base I/O address that the card may be configured for.

Byte 5

Range maximum base address
bits[15:8]

Address bits[15:8] of the maximum base I/O address that the card may be configured for.

Byte 6

Base alignment

Alignment for minimum base address, increment in 1 byte blocks.

Byte 7

Range length

The number of contiguous I/O ports requested.


The minimum base address has to be aligned on the boundary specified by the alignment field.

6.2.2.9. Fixed Location I/O Port Descriptor

Offset

Field Name

Definition

Byte 0

Fixed Location I/O port descriptor

Value = 01001011B (Type = 0, Small item name = 0x9, Length = 3)

Byte 1

Range base address
bits[7:0]

Address bits[7:0] of the base I/O address that the card may be configured for. This descriptor assumes a 10 bit ISA address decode.

Byte 2

Range base address
bits[9:8]

Address bits[9:8] of the base I/O address that the card may be configured for. This descriptor assumes a 10 bit ISA address decode.

Byte 3

Range length

The number of contiguous I/O ports requested.


6.2.2.10. Vendor Defined

The vendor defined resource data type is for vendor use.

Offset

Field Name

Byte 0

Value = 01110xxxB (Type = 0, small item name = 0xE, length = (1-7))

Byte 1 to 7

Vendor defined


6.2.2.11. End Tag

The End tag identifies an end of resource data. Note: If the checksum field is zero, the resource data is treated as if it checksummed properly. Configuration proceeds normally.

Offset

Field Name

Byte 0

Value = 01111001B (Type = 0, small item name = 0xF, length = 1)

Byte 1

Check sum covering all resource data after the serial identifier. This check sum is generated such that adding it to the sum of all the data bytes will produce a zero sum.


6.2.3. Large Resource Data Type

To allow for larger amounts of data to be included in the configuration data structure the large format is shown below. This includes a 16-bit length field allowing up to 64 Kbytes of data.

Table 5. Large Resource Data Type Tag Bit Definitions

Offset

Field Name

Byte 0

Value = 1xxxxxxxB (Type = 1, Large item name = xxxxxxx)

Byte 1

Length of data items bits[7:0]

Byte 2

Length of data items bits[15:8]

Bytes 3 to n

Actual data items


The following large information items are currently defined for Plug and Play ISA devices:

Table 6. Large Resource Items

Large Item Name

Value

Memory range descriptor

0x1

Identifier string (ANSI)

0x2

Identifier string (Unicode)

0x3

Vendor defined

0x4

32-bit memory range descriptor

0x5

32-bit fixed location memory range descriptor

0x6

Reserved

0x7 - 0x7F


6.2.3.1. Memory Range Descriptor

NULL Memory Range Descriptor: Range Length field set to all zeros (all other fields ignored)

PnP Software action: Corresponding base address registers and limit address/range length registers programmed to all zeros.

Size

Field Name

Definition

Byte

Memory range descriptor

Value = 10000001B (Type = 1, Large item name = 1)

Byte

Length, bits[7:0]

Value = 00001001B (9)

Byte

Length, bits[15:8]

Value = 00000000B

Byte

Information

This field provides extra information about this memory.

Bit[7] Reserved and must be 0
Bit[6] Memory is an expansion ROM
Bit[5] Memory is shadowable.
Bits[4:3] Memory control.
Status
00 8-bit memory only
01 16-bit memory only
10 8- and 16-bit supported.
11 Reserved
Bit[2] Support type
Status
1 decode supports high address
0 decode supports range length.
Bit[1] Cache support type
Status
1 read cacheable, write-through
0 non-cacheable.
Bit[0] Write status
Status
1 writeable
0 non-writeable (ROM)

Byte

Range minimum base address
bits[7:0]

Address bits[15:8] of the minimum base memory address for which the card may be configured.

Byte

Range minimum base address
bits[15:8]

Address bits[23:16] of the minimum base memory address for which the card may be configured

Byte

Range maximum base address
bits[7:0]

Address bits[15:8] of the maximum base memory address for which the card may be configured.

Byte

Range maximum base address
bits[15:8]

Address bits[23:16] of the maximum base memory address for which the card may be configured


Byte


Base alignment bits[7:0]

This field contains the lower eight bits of the base alignment. The base alignment provides the increment for the minimum base address. (0x0000 = 64 KByte)


Byte


Base alignment bits[15:8]

This field contains the upper eight bits of the base alignment. The base alignment provides the increment for the minimum base address. (0x0000 = 64 KByte)


Byte


Range length bits[7:0]

This field contains the lower eight bits of the memory range length. The range length provides the length of the memory range in 256 byte blocks.


Byte


Range length bits[15:8]

This field contains the upper eight bits of the memory range length. The range length field provides the length of the memory range in 256 byte blocks.


The minimum value for a valid base alignment is 256. The minimum base address has to be aligned on the boundary specified by the alignment field.

Note Address bits [7:0] of memory base addresses are assumed to be 0.

Note A Memory range descriptor can be used to describe a fixed memory address by setting the range minimum base address and the range maximum base address to the same value.

Note Mixing of 24-bit and 32-bit memory descriptors is not allowed (see section A.3.1).

6.2.3.2. ANSI Identifier String

Size

Field Name

Definition

Byte

Identifier string

Value = 10000010B (Type = 1, Large item name = 2)

Byte

Length, bits[7:0]

Lower eight bits of identifier string length

Byte

Length, bits[15:8]

Upper eight bits of identifier string length

N * bytes

Identifier string

Device description as an ANSI string


The identifier string is 8-bit ANSI. The length of the string is defined in the structure so the string does not need to be zero terminated. Display software will insure the proper termination gets added to the string so that the termination byte does not need to be stored in the card's non-volatile storage. Each card is required to have an identifier string, each logical device may optionally have an identifier string.

6.2.3.3. Unicode Identifier String

Size

Field Name

Definition

Byte

Identifier string

Value = 10000011B (Type = 1, Large item name = 3)

Byte

Length, bits[7:0]

Lower eight bits of length of string plus four

Byte

Length, bits[15:8]

Upper eight bits of length of string plus four

Byte

Country identifier, bits[7:0]

To be determined

Byte

Country identifier, bits[15:8]

To be determined

N * bytes

Identifier string

Device description characters


Currently, only ANSI identifier strings are defined. The definition for Unicode will be added at a later time.

6.2.3.4. Vendor Defined

The vendor defined resource data type is for vendor use.

Size

Field Name

Definition

Byte

Vendor defined

Value = 10000100B (Type = 1, Large item name = 4)

Byte

Length, bits[7:0]

Lower eight bits of vendor defined data

Byte

Length, bits[15:8]

Upper eight bits of vendor defined data

N * bytes

Vendor Defined

Vendor defined data bytes


6.2.3.5. 32-bit Memory Range Descriptor

Size

Field Name

Definition

Byte

Memory range descriptor

Value = 10000101B (Type = 1, Large item name = 5)

Byte

Length, bits[7:0]

Value = 00010001B (17)

Byte

Length, bits[15:8]

Value = 00000000B

Byte

Information

This field provides extra information about this memory.

Bit[7] Reserved and must be 0
Bit[6] Memory is an expansion ROM
Bit[5] Memory is shadowable.
Bits[4:3] Memory control.
Status
00 8-bit memory only
01 16-bit memory only
10 8- and 16-bit supported.
11 32-bit memory only
Bit[2] Support type
Status
1 decode supports high address
0 decode supports range length
Bit[1] Cache support type
Status
1 read cacheable, write-through
0 non-cacheable.
Bit[0] Write status
Status
1 writeable
0 non-writeable (ROM)

Byte

Range minimum base address
bits[7:0]

Address bits[7:0] of the minimum base memory address for which the card may be configured.

Byte

Range minimum base address
bits[15:8]

Address bits[15:8] of the minimum base memory address for which the card may be configured

Byte

Range minimum base address
bits[23:16]

Address bits[23:16] of the minimum base memory address for which the card may be configured.

Byte

Range minimum base address
bits[31:24]

Address bits[31:24] of the minimum base memory address for which the card may be configured

Byte

Range maximum base address
bits[7:0]

Address bits[7:0] of the maximum base memory address for which the card may be configured.

Byte

Range maximum base address
bits[15:8]

Address bits[15:8] of the maximum base memory address for which the card may be configured

Byte

Range maximum base address
bits[23:16]

Address bits[23:16] of the maximum base memory address for which the card may be configured.

Byte

Range maximum base address
bits[31:24]

Address bits[31:24] of the maximum base memory address for which the card may be configured


Byte


Base alignment bits[7:0]

This field contains Bits[7:0] of the base alignment. The base alignment provides the increment for the minimum base address.


Byte


Base alignment bits[15:8]

This field contains Bits[15:8] of the base alignment. The base alignment provides the increment for the minimum base address.


Byte


Base alignment bits[23:16]

This field contains Bits[23:16] of the base alignment. The base alignment provides the increment for the minimum base address.


Byte


Base alignment bits[31:24]

This field contains Bits[31:24] of the base alignment. The base alignment provides the increment for the minimum base address.


Byte


Range length bits[7:0]

This field contains Bits[7:0] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


Byte


Range length bits[15:8]

This field contains Bits[15:8] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


Byte


Range length bits[23:16]

This field contains Bits[23:16] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


Byte


Range length bits[31:24]

This field contains Bits[31:24] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


Note Mixing of 24-bit and 32-bit memory descriptors is not allowed (see section A.3.1).

6.2.3.6. 32-bit Fixed Location Memory Range Descriptor

NULL Memory Range Descriptor: Range Length field set to all zeros (all other fields ignored).

PnP Software action: Corresponding base address registers and limit address/range length registers programmed to all zeros.

Size

Field Name

Definition

Byte

Memory range descriptor

Value = 10000110B (Type = 1, Large item name = 6)

Byte

Length, bits[7:0]

Value = 00001001B (9)

Byte

Length, bits[15:8]

Value = 00000000B

Byte

Information

This field provides extra information about this memory.

Bit[7] Reserved and must be 0
Bit[6] Memory is an expansion ROM
Bit[5] Memory is shadowable.
Bits[4:3] Memory control.
Status
00 8-bit memory only
01 16-bit memory only
10 8- and 16-bit supported.
11 32-bit memory only
Bit[2] Support type
Status
1 decode supports high address
0 decode supports range length
Bit[1] Cache support type
Status
1 read cacheable, write-through
0 non-cacheable.
Bit[0] Write status
Status
1 writeable
0 non-writeable (ROM)

Byte

Range base address
bits[7:0]

Address bits[7:0] of the base memory address for which the card may be configured.

Byte

Range base address
bits[15:8]

Address bits[15:8] of the base memory address for which the card may be configured

Byte

Range base address
bits[23:16]

Address bits[23:16] of the base memory address for which the card may be configured.

Byte

Range base address
bits[31:24]

Address bits[31:24] of the base memory address for which the card may be configured


Byte


Range length bits[7:0]

This field contains Bits[7:0] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


Byte


Range length bits[15:8]

This field contains Bits[15:8] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


Byte


Range length bits[23:16]

This field contains Bits[23:16] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


Byte


Range length bits[31:24]

This field contains Bits[31:24] of the memory range length. The range length provides the length of the memory range in 1 byte blocks.


The minimum base address has to be aligned on the boundary specified by the alignment field.

Note Mixing of 24-bit and 32-bit memory descriptors is not allowed (see section A.3.1).