Specification for Use of PCI IDs with Windows Operating Systems — 1
Windows Platform Design Notes
Designing Hardware for the Microsoft Windows Family of Operating Systems
Specification for Use of PCI IDs with WindowsOperatingSystems
Abstract:This specification describes how PCI device identifiers are used in Microsoft® Windows® operating systems and defines the rules associated with assigning IDs for plug-in cards, motherboard implementations, and chipset integrations.
Version 1.1 — August 4, 2000
Contents
Introduction
Definition of Terms
Using PCI IDs with Windows
Rules for Assigning SIDs and SVIDs for Plugin Cards
Changes that Require an Update of the SID for Plug-in Cards
Rules for Assigning SIDs for Devices Integrated on a Motherboard
Changes that Require an Update of the SID for Motherboards
Rule for Assigning VIDs for PCI Devices
Rule for Assigning DIDs for PCI Devices
Changes that Require a DID Update
Rules for Assigning and Updating the REV for PCI Devices
Changes that Require an Update of the REV for PCIDevices
Rules for Assigning CCs for PCI Devices
Windows Logo Program Test Criteria and Driver Requirements for PCI IDs
The information contained in this document represents the current view of Microsoft Corporation on the issues discussed as of the date of publication. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information presented. This document is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS DOCUMENT.
Microsoft Corporation may have patents or pending patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. The furnishing of this document does not give you any license to the patents, trademarks, copyrights, or other intellectual property rights except as expressly provided in any written license agreement from Microsoft Corporation.
Microsoft does not make any representation or warranty regarding specifications in this document or any product or item developed based on these specifications. Microsoft disclaims all express and implied warranties, including but not limited to the implied warranties or merchantability, fitness for a particular purpose and freedom from infringement. Without limiting the generality of the foregoing, Microsoft does not make any warranty of any kind that any item developed based on these specifications, or any portion of a specification, will not infringe any copyright, patent, trade secret or other intellectual property right of any person or entity in any country. It is your responsibility to seek licenses for such intellectual property rights where appropriate. Microsoft shall not be liable for any damages arising out of or in connection with the use of these specifications, including liability for lost profit, business interruption, or any other damages whatsoever. Some states do not allow the exclusion or limitation of liability or consequential or incidental damages; the above limitation may not apply to you.
Microsoft, Win32, Windows, and WindowsNT are trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries. Other product and company names mentioned herein may be the trademarks of their respective owners.
©2000MicrosoftCorporation. All rights reserved.
Introduction
This specification describes the use of PCI IDs by Windows operating systems and highlights why these IDs are critical in providing a true Plug and Play experience to Windows users. It also explains the rules associated with assigning IDs and provides examples of id assignments for plug-in cards, motherboard implementations, and chipset integrations. In addition, it provides the testing criteria applied by Windows Hardware Quality Labs (WHQL) for the Microsoft Windows Logo program for hardware.
This specification includes and expands upon the PCI Local Bus Specification, Version2.2. For detailed information on the location of IDs referenced in this specification, see PCI 2.2.
This specification does not currently cover AC97 devices or riser cards.
For information about obtaining a PCI Vendor ID, or to obtain the PCI 2.2 specification, see
For more information about other issues related to PCI implementations for Windows operating systems, see
Definition of Terms
This document uses multiple acronyms and terms, as defined in this section.
Class Code – CC (24-bit value located at offset 9, divided into Base Class, Sub-Class, and Programming interface)
Device ID – DID (16-bit value located at offset 2)
PCI device – refers to an electrical component that conforms to the PCI specification
Revision ID – REV (8-bit value located at offset 8)
Subsystem ID – SID (16-bit value located at offset 2E)
The SID is the ID assigned by the manufacturer to uniquely identify the device.
Subsystem Vendor ID – SVID (16-bit value located at offset 2C)
The SVID is the ID assigned to the manufacturer by the PCI SIG.
Vendor ID – VID (16-bit value located at offset 0)
Using PCI IDs with Windows
The Microsoft Windows family of operating systems — including Windows 95/98/Me, Windows 2000, Windows XP, and later versions of these operating systems — use combinations of six PCI values to create an ID that is unique to the device. The operating system reads and concatenates the VID, DID, SID, SVID, REV, and CC to create a multiple ID assignment for each device.
The ID assignment will range from using all six components to using only the CC component, such as for bridges. The operating system will use these IDs to install (or not install) drivers, install different or special versions of drivers, identify broken devices or specific implementations of devices, apply any exception processing required, detect the presence of a new device, or remove a device.
The operating system follows this sequence to find and use the IDs:
- The PCI driver scans to find buses, devices, and functions.
- The PCI driver reads configuration space and creates IDs.
- The PCI driver applies any exceptions needed, which could include enabling and disabling features, applying workarounds, or setting flags in the exception table.
Note: Any exceptions applied here will be to the bus. - The PCI driver installs the device driver.
- The PCI driver loads the device driver.
- The device driver applies any exceptions needed to the device, which could include enabling or disabling features, applying workarounds, or setting flags.
- The PCI driver notifies the device driver to initialize the device.
The operating system inherently relies on the IDs of devices. A change in any of the IDs of a device between boots or sleep/resume cycles can have devastating effects. A change in an SID when resuming from sleep would, at a minimum, trigger a Plug and Play event. The operating system would detect the new device ID and install a new instance of the device; a best-case example would be that the same driver is loaded for this instance. However, if the device had a custom driver or exceptions had been applied, adverse effects would occur; a worst-case example would be if the SID of the primary video controller changed during a resume, causing a surprise removal of the device that has a driver loaded. A race condition would result between the loaded driver being unloaded and the new driver being loaded, which would cause the system to hang.
Note: The INF file parsing code for Windows95 (original and OEM Service Releases) will stop searching INF files once a match is found. If the DID&VID entry in an INF file is found before the DID&VID&SID&SVID entry is found, only the driver associated with the DID&VID entry will be loaded.
Rules for Assigning SIDs and SVIDs for Plugin Cards
There is one simple rule to be applied when assigning the SID and SVID for PCI and Mini PCI plug-in cards:
It is required that all new card designs must have a new, unique SID assigned by the card manufacturer.
A new card design is defined as any design that incorporates new devices requiring any circuit board or supporting component changes.
Changes that Require an Update of the SID for Plug-in Cards
Some events require the SID of a card to be updated. Use the following guideline to determine whether an updated SID is needed:
If anything changes external to the PCI devices (chips) on the plug-in card, then the SID must be updated.
Note: A change in a chip on a card does not require a change in SID; however, an installation of an updated chip that has followed the ID rules for devices can cause a change of the driver for that chip due to a new ID being read—for example, if the REV changed from 1 to 2.
Examples of when SID updates are needed:
- Any board layout changes, including bug fixes and cost-reduction changes.
- Any component value changes on the card, including resistors and capacitors.
- Any SKU change—for example, adding an S-Video connector to a card that had the capability but only had a VGA-out connector.
The following are examples of SID and SVID assignments for add-on cards using different manufacturers and devices.
Example: Add-on video card produced by manufacturer AAAA, using a device produced by company DDDD
Description / DID / VID / SID / SVIDVideo device on new video card model xx / 1111 / DDDD / 0001 / AAAA
Video device on model xx-s (addedSVideoout) / 1111 / DDDD / 0002 / AAAA
Example: Multifunction network/modem add-on card produced by manufacturer AAAA, using devices from company CCCC
Description / DID / VID / SID / SVIDNetwork PCI device / 2222 / CCCC / 0005 / AAAA
Modem PCI device / 1111 / CCCC / 0005 / AAAA
Example: Multifunction network/modem add-on card produced by manufacturer AAAA, using devices manufactured by AAAA
Description / DID / VID / SID / SVIDNetwork PCI device / 3333 / AAAA / 0010 / AAAA
Modem PCI device / 1111 / AAAA / 0010 / AAAA
Example: Multifunction network/modem add-on card produced by manufacturer AAAA, using devices from companies CCCC and DDDD
Description / DID / VID / SID / SVIDNetwork PCI device / 2222 / CCCC / 0007 / AAAA
Modem PCI device / 5555 / DDDD / 0007 / AAAA
Rules for Assigning SIDs for Devices Integrated on a Motherboard
There is one simple rule to be applied when assigning the SID and SVID for PCI devices integrated on a motherboard.
It is required that all new motherboard designs have a new, unique SID assigned by the manufacturer.
Note: It is recommended that all integrated devices on a motherboard are assigned the same SID value.
The operating system relies on being able to uniquely identify a device and each implementation of that device. For example, for form factor reasons, computer manufacturer AAAA decides not to connect the USB controller integrated in the south bridge of a specific design (a popular south bridge in current production). They inadvertently leave the pins as “no connects,” causing an interrupt storm under a certain condition. They ship 700,000 systems before the problem is discovered. In order to apply a fix for the Windows operating system that does not adversely affect every component using the south bridge, the device and implementation must be able to be uniquely identified.
Example: SID and SVID assignments of a motherboard produced by manufacturer AAAA, using devices produced by the companies CCCC, DDDD, EEEE, and TTTT
Description / DID / VID / SID / SVIDVideo PCI device / 1212 / CCCC / 0105 / AAAA
USB PCI device / 4545 / CCCC / 0105 / AAAA
Audio PCI device / 3434 / EEEE / 0105 / AAAA
Network PCI device / 2222 / CCCC / 0105 / AAAA
Modem PCI device / 1111 / DDDD / 0105 / AAAA
CardBus PCI device / 4444 / TTTT / 0105 / AAAA
Changes that Require an Update of the SID for Motherboards
Some events require the SID of a motherboard to be updated. Use the following guideline to determine whether an updated SID is needed:
If anything changes external to the PCI devices (chips) on the motherboard, then the SID of all devices must be updated.
Note: A change in a chip on a motherboard does not require a change in SID. However, an installation of an updated chip that has followed the ID rules for devices can cause a change of the driver for that chip due to a new Plug and Play ID being read, for example, if the REV value changed from 1 to 2.
Examples of when updates are needed:
- Any board layout changes including bug fixes and cost-reduction changes.
- Any component value changes on the motherboard, including resistors and capacitors.
- Any SKU change, for example, a motherboard SKU that removes an integrated modem that was on the board when the SIDs were originally assigned.
Rule for Assigning VIDs for PCI Devices
The VID is always the Vendor ID assigned by the PCI SIG for the device (chip) manufacturer.
Rule for Assigning DIDs for PCI Devices
The DID is a value assigned by the device manufacturer that, in conjunction with the VID and REV values, uniquely identifies the PCI device.This number must be tracked by the device manufacturer and never used again in combination with the VID.
Changes that Require a DID Update
Examples of when updates are needed:
- If the manufacturer makes a modification during the life of a PCI device that causes any change in any exposed registers or software interfaces, or makes a feature enhancement, the DID must be updated to a new, unique value.
- If an existing device is integrated into a new multifunction package, the DID for that device must change.
Rules for Assigning and Updating the REV for PCI Devices
The REV is a value assigned by the device manufacturer that identifies the revision number of the device.
The REV must be updated if any rules in the following section apply to changes made to the device.
Changes that Require an Update of the REV for PCIDevices
Examples of when updates are needed:
- Any bug fix, feature, or performance update that does not change the software interface.
Note: A software interface change requires a DID update. - Integration of device design into a multifunction packaging design.
Note: This causes all REV values for devices in the package to change. - Any change in process technology used in production or any change in package type that does not change the software interface, but changes the functionality with respect to system software.
Note: When changes in process technology or packaging do not result in changes to the system software interface or functionality, it is still recommended (but not required) that the REV be updated.
The following are examples of REV and DID assignments for integrating devices into an existing multifunction package.
Example: REV and DID assignments for a network device being integrated into a multifunction package already containing USB, ATA, and video devices by device manufacturer CCCC
Description / DID / VID / REVDevices before integration
Discrete network PCI device / 1111 / CCCC / 1
Integrated USB PCI device / 2222 / CCCC / 2
Integrated video PCI device / 3333 / CCCC / 2
Integrated ATA PCI device / 4444 / CCCC / 3
Devices after integration
Network PCI device in new package / 5555 / CCCC / 1
USB PCI device in new package / 2222 / CCCC / 3
Video PCI device in new package / 3333 / CCCC / 3
ATA PCI device in new package / 4444 / CCCC / 4
Example: REV and DID assignments for adding another USB device into a multifunction package already containing USB, ATA, and video devices by device manufacturer CCCC
Description / DID / VID / REVDevices before integration
Integrated USB PCI device / 2222 / CCCC / 2
Integrated video PCI device / 3333 / CCCC / 2
Integrated ATA PCI device / 4444 / CCCC / 3
Devices after integration
New USB PCI device in new package / 2222 / CCCC / 3
USB PCI device in new package / 2222 / CCCC / 3
Video PCI device in new package / 3333 / CCCC / 3
ATA PCI device in new package / 4444 / CCCC / 4
Rules for Assigning CCs for PCI Devices
CC assignments must comply with to the PCI 2.2 specification.
Windows Logo Program Test Criteria and Driver Requirements for PCI IDs
The following are test criteria that WHQL will use to develop tests for the Windows Logo Program for hardware:
- Test will read and properly concatenate PCI IDs and verify uniqueness
- Test will verify IDs after suspend/resume cycle
- Hot-plug test will be required for PCI devices that support hot-plug capabilities
- Submissions of a device that has only a REV update will also be validated using a previous version of the driver with the same DID and VID
This specification provides a hardware baseline that WHQL will use for testing. The driver requirements and rules are provided by the PCI ID requirements for PCI drivers published by Microsoft.
© 2000 Microsoft Corporation. All rights reserved.