Calling VideoPortXxx from HwVidFindAdapter

Certain VideoPortXxx functions should be called only from the miniport driver’s HwVidFindAdapter function(s). A HwVidFindAdapter function would never call all of the following, but every HwVidFindAdapter function must call some of the following VideoPortXxx:

·VideoPortGetBusData to get bus-type-specific configuration information about an adapter on a particular I/O bus

·VideoPortSetBusData to set bus-specific configuration data for an adapter on a dynamically configurable I/O bus with a published standard interface, such as a PCI bus, if necessary

·VideoPortGetDeviceData to get VIDEO_DEVICE_DATA_TYPE-specific information from the registry and call a miniport-supplied HwVidQueryDeviceCallback function to process the information, as described in HwVidQueryDeviceCallback Routine.

·VideoPortGetAccessRanges to get bus-relative access ranges addresses, and possibly other hardware configuration values, and to claim them in the registry for use by the driver of an adapter, usually one on a configurable I/O bus

·VideoPortVerifyAccessRanges to determine whether bus-relative video memory and/or I/O ports for the adapter can be claimed by the miniport driver; otherwise, a previously loaded driver has already claimed the resource in the registry and the HwVidFindAdapter function must try to claim other access ranges if possible or return control and propagate the status value returned by VideoPortVerifyAccessRanges

·VideoPortGetDeviceBase to map each successfully claimed bus-relative base address and range size, as described in each VIDEO_ACCESS_RANGE-type element for the adapter, to a system-space logical address range

Each such (bus-relative) physical address range must be mapped with VideoPortGetDeviceBase before it is used to access an adapter. With mapped logical range addresses, the driver can call the VideoPortReadXxx and VideoPortWriteXxx functions to read from or write to an adapter. For a mapped range in I/O space, the miniport driver calls the VideoPortReadPortXxx and VideoPortWritePortXxx functions. For a mapped range in memory, the miniport driver calls the VideoPortReadRegisterXxx and VideoPortWriteRegisterXxx functions.

·VideoPortFreeDeviceBase to release such a mapped range if the HwVidFindAdapter or HwVidQueryDeviceCallback function does not find an adapter it can support on a given I/O bus, as indicated by the VIDEO_PORT_CONFIG_INFO SystemIoBusNumber value

If this occurs, the miniport also must call VideoPortVerifyAccessRanges to release its claims in the registry on the bus-relative access ranges for that adapter.

·VideoPortScanRom to determine whether a specific signature matches that of the machine ROM; in effect, this determines whether the miniport finds a specific adapter with a video chip it can support.

A HwVidFindAdapter routine also can call the VideoPortGetRegistryParameters and VideoPortSetRegistryParameters functions to get and set configuration information in the registry. For example, HwVidFindAdapter might call VideoPortSetRegistryParameters to set up nonvolatile configuration information in the registry for the next boot. It might call VideoPortGetRegistryParameters to get adapter-specific, bus-relative configuration parameters written into the registry by an installation program.

The HwVidInitialize function, described later in HwVidInitialize Functionality, also can call VideoPortGetRegistryParameters or VideoPortSetRegistryParameters.