Plug and Play for Device Configuration ROM

This section defines the Plug and Play requirements related to device configuration ROM.

13. Device provides a configuration ROM for unique device identification
Required

For Plug and Play device control, the device configuration ROM must provide configuration information as specified in the IEEE 1394-1995 standard and as outlined in Table 1 (see following). The configuration ROM is required for unique detection of the device and is used by a PC to enumerate the bus and to load the correct device driver. Table 1 provides an example ROM that combines all the elements outlined in the requirements listed in this section. For up-to-date information about the configuration ROM, see the web site at http://www.microsoft.com/hwdev/busbios/.

Table 1. Configuration ROM (located at FFFF F000 0400)


14. Device configuration ROM implements general ROM format
Required

The general configuration ROM format is specified in the IEEE 1394-1995 and ISO/IEC 13213:1994 standards. The general ROM format is an extensible tree structure that enables a managed environment by providing node-specific and unit-specific information as required for Plug and Play, power management, and isochronous data transfers. The general ROM format also provides for definition of multifunction device units. The bus information block and root directory of the general ROM format are required as specified in Table 1.

15. Bus information block implemented at a base address offset of 0404h
Required

The format of the bus information block is defined by the IEEE 1394-1995 standard. The first quadlet of the bus information block at offset 404h is the configuration ROM signature field used to identify an IEEE 1394 configuration ROM. This quadlet must contain the ASCII string “1394”. The second quadlet of the bus information block at offset 408h contains several bits that indicate node capabilities. These bits are defined as shown in the following table, together with their required values.

Bits Indicating Node Capabilities at Offset 408h
Bit or field Table 1 symbol Value and description
irmc bit m Must be 1. Indicates that the node supports isochronous resource manager capabilities.
cmc bit c Must be 1 if the node supports cycle master capabilities; otherwise, this value must be 0.
isc bit i Must be 1 if the node supports isochronous operations; otherwise, this value must be 0.
bmc bit b Must be 1. Indicates that the node supports bus manager capabilities.
pmc bit p Must be 1. Indicates that the node is power manager capable. The pmc bit is not defined by the IEEE 1394-1995 standard and is an extension created by this specification.
cyc_clk_acc field Specifies the accuracy of the node’s cycle master clock in parts per million. If the cmc bit is 1, the field’s value must be between 0 and 100. If the cmc bit is 0, this field must be all ones.
max_rec
field
Defines the maximum payload size of a block-write transaction addressed to the node. The range of the maximum payload size is from 4 to 2048 bytes. A max_rec value of 0 indicates that the maximum payload size is not specified. Otherwise, within the range of defined payload sizes, the maximum size is equal to 2 max_rec + 1. The max_rec field does not place any limits on the maximum payload size in asynchronous data packets—either requests or responses—that the node might transmit.

16. Configuration ROM provides globally unique device ID
Required

The third and fourth quadlets of the bus information block of the configuration ROM must provide a globally unique device ID, which appears in Table 1 beginning at offset 40Ch. This unique 64-bit node ID is the only way to recognize the presence of a given device, because the physical device addresses can change following a bus reset. The unique ID is required for device detection and PC device driver loading.

If a bus node supports multiple units, then the unique 64-bit ID must not be referential to any one unit directory in order to allow for unique identification of a unit in a multifunction device.

The globally unique device ID in the bus information block must be invariant when read with quadlet read requests. That is, it must not be alterable in any way by software.

17. Root directory is located at a fixed address following the bus information block
Required

The root directory must be located at a fixed address following the bus information block. For example, the root directory shown in Table 1 is fixed at offset 414h. All other directories and leaves are addressed by entries in their parent directories starting with the root directory. The root directory contains pointers to the root-dependent directory, a node-power directory as specified in 1394 Specification for Power Management, and unit directories for each independent device function.

18. Configuration ROM includes a unit directory for each independent device function
Required

A unit directory is required for independent function and control of each device unit. A valid pointer to a unit directory must be provided at offset 0x24h, as shown in Table 1, in compliance with the general ROM format specified in IEEE 1394-1995 and the directory format specified in ISO/IEC 13213:1994.

19. Each unit directory provides a valid Unit_Spec_Id and Unit_Sw_Version
Required

Within a unit directory, Unit_Spec_Id identifies the specification authority, and Unit_Sw_Version identifies the particular document describing the unit. When added to the beginning of Unit_Spec_Id, then Unit_Sw_Version uniquely identifies the unit’s software interface.

20. Each unit directory provides a pointer to a unit-dependent directory
Required

The unit-dependent leaf directory must provide additional information about the device unit’s vendor and model in associated leaf directories. The format of the information contained in the vendor and model leaves is specific to Unit_Spec_Id and Unit_Sw_Version.

A valid pointer to a unit-dependent directory must be in accordance with the generic directory format specified in ISO/IEC 13213:1994. The unit-dependent directory must provide valid pointers to vendor and model leaves.

21. Vendor and model leaves support textual descriptor leaf format
Required

Textual descriptors are required for Unit_Spec_ID and Unit_Sw_Version entries in the configuration ROM in order to display this information to the user. Textual descriptors are recommended for all other configuration ROM entries. Each textual descriptor points to a leaf that contains a single character string.

Alternately, the textual descriptor can point to a directory that points to one or more textual descriptor leaves corresponding to supported languages. Leaf format and textual descriptor leaves are specified in ISO/IEC 13213:1994.

Textual descriptor leaves must include the following:

  • The spec_type field must be “0” to correspond to a 24-bit specifier_id for a standards body, or “1” to correspond to a 24-bit specifier_id for a defining vendor company_id.

  • The language_id field must be derived from the Windows NT locale number (a quadlet), OR’d with 0x80000000.

  • Text string_info must be in ASCII for any language_id in the range 0–7fffffff or in Unicode for any language_id in the range 0x80000000–0xfffffff.

22. Unit-dependent directory provides a pointer to the unit’s CSRs

Required

Each unit’s CSRs must be in separate, non-overlapping address spaces to maintain independent device control. If CSRs can be used to interact with a device unit, the unit-dependent directory must provide a pointer to the base address of the unit’s CSRs. This provides an easy way for an application or a device driver to access the unit’s CSRs.