This section describes the WDC API defined in the WinDriver/include/wdc_lib.h header file.
typedef DWORD WDC_DRV_OPEN_OPTIONS;
Preprocessor definitions of flags that describe tasks to be performed when
opening a handle to the WDC library (see
WDC_DriverOpen [B.3.2]):
| Name | Description |
|---|---|
| WDC_DRV_OPEN_CHECK_VER | Compare the version of the WinDriver source files used by the code with the version of the loaded WinDriver kernel |
| WDC_DRV_OPEN_REG_LIC | Register a WinDriver license registration string |
WDC_DriverOpen [B.3.2]:
| Name | Description |
|---|---|
| WDC_DRV_OPEN_BASIC | Instructs WDC_Driveropen [B.3.2] to perform only the basic WDC open tasks,
mainly open a handle to WinDriver's kernel module.NOTE: The value of this option is zero (<=> no driver open flags), therefore this option cannot be combined with any of the other WDC driver open options. |
| WDC_DRV_OPEN_KP | Convenience option when calling
WDC_DriverOpen [B.3.2] from
the Kernel PlugIn. This option is equivalent to setting the
WDC_DRV_OPEN_BASIC flag, which is the recommended option to
set when opening a handle to the WDC library from the Kernel PlugIn.
|
| WDC_DRV_OPEN_ALL | A convenience mask of all the basic WDC driver open flags –
WDC_DRV_OPEN_CHECK_VER and
WDC_DRV_OPEN_REG_REG_LIC. (The basic functionality of opening
a handle to WinDriver's kernel module is always performed by
WDC_DriverOpen [B.3.2], so
there is no need to also set the WDC_DRV_OPEN_BASIC flag).
|
| WDC_DRV_OPEN_DEFAULT | Use the default WDC open options: • For user-mode applications: equivalent to setting WDC_DRV_OPEN_ALL ;• For a Kernel PlugIn: equivalent to setting WDC_DRV_OPEN_KP
|
Enumeration of a device's address/register access directions:
| Enum Value | Description |
|---|---|
| WDC_READ | Read from the address |
| WDC_WRITE | Write to the address |
| WDC_READ_WRITE | Read from the address or write to it. This value is used, for example, in the WinDriver samples and generated DriverWizard diagnostics code in order to describe a register's access mode, indicating that the register can either be read from or written to. |
| Enum Value | Description |
|---|---|
| WDC_MODE_8 | 8 bits (1 byte) mode |
| WDC_MODE_16 | 16 bits (2 bytes) mode |
| WDC_MODE_32 | 32 bits (4 bytes) mode |
| WDC_MODE_64 | 64 bits (8 bytes) mode |
| Enum Value | Description |
|---|---|
| WDC_ADDR_RW_DEFAULT | Use the default read/write options: memory addresses are accessed
directly from the calling process; block transfers are performed from
subsequent addresses (automatic increment). NOTE: The value of this flag is zero (<=> no read/write flags), therefore it can not be combined in a bit-mask with any of the other read/write options flags. This option is used by the WDC_ReadAddr8/16/32/64 [B.3.21] and
WDC_WriteAddr8/16/32/64 [B.3.22] functions.
|
| WDC_ADDR_RW_NO_AUTOINC | Do no automatically increment the read/write address in block transfers, i.e. hold the device address constant while reading/writing a block of memory or I/O addresses (relevant only for block (string) transfers). |
typedef DWORD WDC_ADDR_SIZE;Preprocessor definitions that depict memory or I/O address/register sizes:
| Name | Description |
|---|---|
| WDC_SIZE_8 | 8 bits (1 byte) |
| WDC_SIZE_16 | 16 bits (2 bytes) |
| WDC_SIZE_32 | 32 bits (4 bytes) |
| WDC_SIZE_64 | 64 bits (8 bytes) |
typedef DWORD WDC_SLEEP_OPTIONS;Preprocessor definitions that depict the sleep options that can be passed to
WDC_Sleep [B.3.58]:
| Name | Description |
|---|---|
| WDC_SLEEP_BUSY | Delay execution, by consuming CPU cycles (busy sleep) |
| WDC_SLEEP_NON_BUSY | Delay execution, without consuming CPU cycles (non-busy sleep). Note: Minimum 17,000 microseconds. Less accurate than busy sleep. |
typedef DWORD WDC_DBG_OPTIONS;
Preprocessor definitions that depict the possible debug options for the WDC
library, which are passed to WDC_SetDebugOptions [B.3.52].
The following flags determine the output file for the WDC library's debug messages:
| Name | Description |
|---|---|
| WDC_DBG_OUT_DBM | Send debug messages from the WDC library to the Debug Monitor [6.2] |
| WDC_DBG_OUT_FILE | Send debug messages from the WDC library to a debug file. By default,
the debug file will be stderr, unless a
different file is set in the sDbgFile parameter of the
WDC_SetDebugOptions function [B.3.52].This option is only supported from the user mode (as opposed to the Kernel PlugIn). |
The following flags determine the debug level – i.e. what type of WDC debug messages to display, if at all:
| Name | Description |
|---|---|
| WDC_DBG_LEVEL_ERR | Display only WDC error debug messages |
| WDC_DBG_LEVEL_TRACE | Display both error and trace WDC debug messages |
| WDC_DBG_NONE | Do not display WDC debug messages |
The following preprocessor definitions provide convenient debug flags
combinations, which can be passed to
WDC_SetDebugOptions [B.3.52]:
| Name | Description |
|---|---|
| WDC_DBG_DEFAULT | WDC_DBG_OUT_DBM |
WDC_DBG_LEVEL_TRACE:Use the default debug options – send WDC error and trace messages to the Debug Monitor [6.2]. |
| WDC_DBG_DBM_ERR | WDC_DBG_OUT_DBM |
WDC_DBG_LEVEL_ERR:Send WDC error debug messages to the Debug Monitor [6.2]. |
| WDC_DBG_DBM_TRACE | WDC_DBG_OUT_DBM | WDC_DBG_LEVEL_TRACE:Send WDC error and trace debug messages to the Debug Monitor [6.2]. |
| WDC_DBG_FULL | Full WDC debugging: • From the user mode: WDC_DBG_OUT_DBM | WDC_DBG_OUT_FILE | WDC_DBG_LEVEL_TRACE:
Send WDC error and trace debug messages both to the Debug Monitor [6.2] and to a debug output file (default file: stderr) • From the Kernel PlugIn: WDC_DBG_OUT_DBM | WDC_DBG_LEVEL_TRACE:Send WDC error and trace messages to the Debug Monitor [6.2] |
| Name | Description |
|---|---|
| WDC_DBG_FILE_ERR | WDC_DBG_OUT_FILE | WDC_DBG_LEVEL_ERR:Send WDC error debug messages to a debug file (default file: stderr) |
| WDC_DBG_FILE_TRACE | WDC_DBG_OUT_FILE | WDC_DBG_LEVEL_TRACE:Send WDC error and trace debug messages to a debug file (default file: stderr) |
| WDC_DBG_DBM_FILE_ERR | WDC_DBG_OUT_DBM | WDC_DBG_OUT_FILE | WDC_DBG_LEVEL_ERR:
Send WDC error debug messages both to the Debug Monitor [6.2] and to a debug file (default file: stderr) |
| WDC_DBG_DBM_FILE_TRACE | WDC_DBG_OUT_DBM | WDC_DBG_OUT_FILE |
WDC_DBG_LEVEL_TRACE:Send WDC error and trace debug messages both to the Debug Monitor [6.2] and to a debug file (default file: stderr) |
WDC PCI/PCMCIA device location information union type:
Structure type for holding the results of a PCI bus scan (see
WDC_PciScanDevices [B.3.4]):
| Name | Type | Description |
|---|---|---|
| dwNumDevices | DWORD | Number of devices found on the PCI bus that match the search criteria (vendor & device IDs) |
| deviceId | WD_PCI_ID[WD_PCI_CARDS] | Array of matching vendor and device IDs found on the PCI bus [B.5.6] |
| deviceSlot | WD_PCI_SLOT[WD_PCI_CARDS] | Array of PCI device location information structures [B.5.8] for the detected devices matching the search criteria |
Structure type for holding the results of a PCMCIA bus scan (see
WDC_PcmciaScanDevices [B.3.7]):
| Name | Type | Description |
|---|---|---|
| dwNumDevices | DWORD | Number of devices found on the PCMCIA bus that match the search criteria (manufacturer & device IDs) |
| deviceId | WD_PCMCIA_ID[WD_PCMCIA_CARDS] | Array of matching vendor and device IDs found on the PCMCIA bus [B.5.7] |
| deviceSlot | WD_PCMCIA_SLOT[WD_PCMCIA_CARDS] | Array of PCMCIA device location information structures [B.5.9] for the detected devices matching the search criteria |
DWORD DLLCALLCONV WDC_DriverOpen(
WDC_DRV_OPEN_OPTIONS openOptions,
const CHAR *sLicense);
| Name | Type | Input/Output |
|---|---|---|
| openOptions | WDC_DRV_OPEN_OPTIONS | Input |
| sLicense | const CHAR* | Input |
| Name | Description |
|---|---|
| openOptions | A mask of any of the supported open flags [B.3.1.2], which determines the initialization actions that will be performed by the function. |
| sLicense | WinDriver license registration string. This argument is ignored if the WDC_DRV_OPEN_REG_LIC flag is
not [B.3.1.2] set in the
openOptions argument.If this parameter is a NULL pointer or an empty string, the
function will attempt to register the demo WinDriver evaluation license.
Therefore, when evaluating WinDriver pass NULL as this parameter.
After registering your WinDriver toolkit, modify the code to pass your WinDriver
license registration string.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
• Closes the WDC WinDriver handle (acquired and stored by a previous
call to WDC_DriverOpen [B.3.2])
and un-initializes the WDC library.
Every WDC_DriverOpen call should have a matching
WDC_DriverClose call, which should be issued when you no longer
need to use the WDC library.
DWORD DLLCALLCONV WDC_DriverClose(void);
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
![]() | |
|
DWORD DLLCALLCONV WDC_PciScanDevices(
DWORD dwVendorId,
DWORD dwDeviceId,
WDC_PCI_SCAN_RESULT *pPciScanResult);
| Name | Type | Input/Output |
|---|---|---|
| dwVendorId | DWORD | Input |
| dwDeviceId | DWORD | Input |
| pPciScanResult | WDC_PCI_SCAN_RESULT* | Output |
| Name | Description |
|---|---|
| dwVendorId | Vendor ID to search for (hexadecimal). Zero (0) – all vendor IDs. |
| dwDeviceId | Device ID to search for (hexadecimal). Zero (0) – all device IDs. |
| pPciScanResult | A pointer to a structure that will be updated by the function with the results of the PCI bus scan [B.3.1.10] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
![]() | |
|
DWORD DLLCALLCONV WDC_PciScanDevicesByTopology(
DWORD dwVendorId,
DWORD dwDeviceId,
WDC_PCI_SCAN_RESULT *pPciScanResult);
| Name | Type | Input/Output |
|---|---|---|
| dwVendorId | DWORD | Input |
| dwDeviceId | DWORD | Input |
| pPciScanResult | WDC_PCI_SCAN_RESULT* | Output |
| Name | Description |
|---|---|
| dwVendorId | Vendor ID to search for (hexadecimal). Zero (0) – all vendor IDs. |
| dwDeviceId | Device ID to search for (hexadecimal). Zero (0) – all device IDs. |
| pPciScanResult | A pointer to a structure that will be updated by the function with the results of the PCI bus scan [B.3.1.10] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
![]() | |
By default, use PciScanDevices [B.3.4] to scan the PCI bus, unless a device
malfunction intererferes – refer to the note in the description of
PciScanDevices.
|
DWORD DLLCALLCONV WDC_PciScanRegisteredDevices(
DWORD dwVendorId,
DWORD dwDeviceId,
WDC_PCI_SCAN_RESULT *pPciScanResult);
| Name | Type | Input/Output |
|---|---|---|
| dwVendorId | DWORD | Input |
| dwDeviceId | DWORD | Input |
| pPciScanResult | WDC_PCI_SCAN_RESULT* | Output |
| Name | Description |
|---|---|
| dwVendorId | Vendor ID to search for (hexadecimal). Zero (0) – all vendor IDs. |
| dwDeviceId | Device ID to search for (hexadecimal). Zero (0) – all device IDs. |
| pPciScanResult | A pointer to a structure that will be updated by the function with the results of the PCI bus scan [B.3.1.10] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PcmciaScanDevices(
WORD wManufacturerId,
WORD wDeviceId,
WDC_PCMCIA_SCAN_RESULT *pPcmciaScanResult);
| Name | Type | Input/Output |
|---|---|---|
| wManufacturerId | WORD | Input |
| wDeviceId | WORD | Input |
| pPcmciaScanResult | WDC_PCMCIA_SCAN_RESULT* | Output |
| Name | Description |
|---|---|
| wManufacturerId | Manufacturer ID to search for (hexadecimal). Zero (0) – all manufacturer IDs. |
| wDeviceId | Device ID to search for (hexadecimal). Zero (0) – all device IDs. |
| pPcmciaScanResult | A pointer to a structure that will be updated by the function with the results of the PCMCIA bus scan [B.3.1.11] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PciGetDeviceInfo(
WD_PCI_CARD_INFO *pDeviceInfo);
| Name | Type | Input/Output |
|---|---|---|
| pDeviceInfo | WD_PCI_CARD_INFO* | Input/Output |
| • pciSlot | WD_PCI_SLOT | Input |
| • Card | WD_CARD | Output |
| Name | Description |
|---|---|
| pDeviceInfo | Pointer to a PCI device information structure [B.5.12] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PcmciaGetDeviceInfo(
WD_PCMCIA_CARD_INFO *pDeviceInfo);
| Name | Type | Input/Output |
|---|---|---|
| pDeviceInfo | WD_PCMCIA_CARD_INFO* | Input/Output |
| • pcmciaSlot | WD_PCMCIA_SLOT | Input |
| • Card | WD_CARD | Output |
| • cVersion | CHAR [WD_PCMCIA_VERSION_LEN] | Output |
| • cManufacturer | CHAR [WD_PCMCIA_ MANUFACTURER_LEN] | Output |
| • cProductName | CHAR [WD_PCMCIA_ PRODUCTNAME_LEN] | Output |
| • wManufacturerId | WORD | Output |
| • wCardId | WORD | Output |
| • wFuncId | WORD | Output |
| Name | Description |
|---|---|
| pDeviceInfo | Pointer to a PCMCIA device information structure [B.5.13] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
• Allocates and initializes a WDC PCI device structure, registers the device with WinDriver, and returns a handle to the device.
Among the operations performed by this function:
• Verifies that a non-shareable memory or I/O resource on the device has not already been registered exclusively.
• Maps the physical memory ranges found on the device both to kernel-mode and user-mode address space, and stores the mapped addresses in the allocated device structure for future use.
• Saves device resources information required for supporting the communication with the device. For example, the function saves the Interrupt Request (IRQ) number and the interrupt type, as well as retrieves and saves an interrupt handle, and this information is later used when the user calls functions to handle the device's interrupts.
• If the caller selects to use a Kernel PlugIn driver to communicate with the device, the function opens a handle to this driver and stores it for future use.
DWORD DLLCALLCONV WDC_PciDeviceOpen(
WDC_DEVICE_HANDLE *phDev,
const WD_PCI_CARD_INFO *pDeviceInfo,
const PVOID pDevCtx,
PVOID reserved,
const CHAR *pcKPDriverName,
PVOID pKPOpenData);
| Name | Type | Input/Output |
|---|---|---|
| phDev | WDC_DEVICE_HANDLE* | Output |
| pDeviceInfo | const WD_PCI_CARD_INFO* | Input |
| • pciSlot | WD_PCI_SLOT | Input |
| • Card | WD_CARD | Input |
| * dwItems | DWORD | Input |
| * Item | WD_ITEMS[WD_CARD_ITEMS] | Input |
| • item | DWORD | Input |
| • fNotSharable | DWORD | Input |
| • I | union | Input |
| * Mem | struct | Input |
| • dwPhysicalAddr | DWORD | Input |
| • dwBytes | DWORD | Input |
| • dwTransAddr | DWORD | N/A |
| • dwUserDirectAddr | DWORD | N/A |
| • dwCpuPhysicalAddr | DWORD | N/A |
| • dwBar | DWORD | Input |
| * IO | struct | Input |
| • dwAddr | DWORD | Input |
| • dwBytes | DWORD | Input |
| • dwBar | DWORD | Input |
| * Int | struct | Input |
| • dwInterrupt | DWORD | Input |
| • dwOptions | DWORD | Input |
| • hInterrupt | DWORD | N/A |
| * Bus | struct | Input |
| • dwBusType | WD_BUS_TYPE | Input |
| • dwBusNum | DWORD | Input |
| • dwSlotFunc | DWORD | Input |
| * Val | struct | N/A |
| pDevCtx | const PVOID | Input |
| reserved | PVOID | |
| pcKPDriverName | const CHAR* | Input |
| pKPOpenData | PVOID | Input |
| Name | Description |
|---|---|
| phDev | Pointer to a handle to the WDC device allocated by the function |
| pDeviceInfo | Pointer to a PCI device information structure [B.5.12], which contains information regarding the device to open |
| pDevCtx | Pointer to device context information, which will be stored in the device structure |
| reserved | Reserved for future use |
| pcKPDriverName | Kernel PlugIn driver name. If your application does not use a Kernel PlugIn driver, pass a NULL pointer for this argument.
|
| pKPOpenData | Kernel PlugIn driver open data to be passed to
WD_KernelPlugInOpen (see the WinDriver PCI Low-Level API Reference).If your application does not use a Kernel PlugIn driver, pass a NULL pointer for this argument.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
If your card has a large memory range, which cannot be mapped entirely to
the kernel virtual address space, you can modify the relevant item for this
resource in the card resources information structure that you received from
WDC_PciGetDeviceInfo [B.3.8], and set the
WD_ITEM_DO_NOT_MAP_KERNEL flag in the item's
dwOptions field
(pDeviceInfo->Card.Item[i].dwOptions) before passing the
information structure (pDeviceInfo) to
WDC_PciDeviceOpen. This flag instructs the function to map
the relevant memory range only to the user-mode virtual address space but
not the kernel address space.
NOTE that if you select to set the
WD_ITEM_DO_NOT_MAP_KERNEL flag, the device information
structure that will be created by the function will not hold a
kernel-mapped address for this resource (pAddrDesc[i].kptAddr
in the WDC_DEVICE structure [B.4.3] for the relevant memory range will not be updated)
and you will therefore not be able to rely on this mapping in calls to
WinDriver's API or when accessing the memory from a Kernel PlugIn driver.
• Allocates and initializes a WDC PCMCIA device structure, registers the device with WinDriver, and returns a handle to the device.
Among the operations performed by this function:
• Verifies that a non-shareable memory or I/O resource on the device has not already been registered exclusively.
• Maps the device's physical memory ranges device both to kernel-mode and user-mode address space, and stores the mapped addresses in the allocated device structure for future use.
• Saves device resources information required for supporting the communication with the device. For example, the function saves the Interrupt Request (IRQ) number and the interrupt type, as well as retrieves and saves an interrupt handle, and this information is later used when the user calls functions to handle the device's interrupts.
• If the caller selects to use a Kernel PlugIn driver to communicate with the device, the function opens a handle to this driver and stores it for future use.
DWORD DLLCALLCONV WDC_PcmciaDeviceOpen(
WDC_DEVICE_HANDLE *phDev,
const WD_PCMCIA_CARD_INFO *pDeviceInfo,
const PVOID pDevCtx,
PVOID reserved,
const CHAR *pcKPDriverName,
PVOID pKPOpenData);
| Name | Type | Input/Output |
|---|---|---|
| phDev | WDC_DEVICE_HANDLE* | Output |
| pDeviceInfo | const WD_PCMCIA_CARD_INFO* | Input |
| • pcmciaSlot | WD_PCMCIA_SLOT | Input |
| • Card | WD_CARD | Input |
| * dwItems | DWORD | Input |
| * Item | WD_ITEMS[WD_CARD_ITEMS] | Input |
| • item | DWORD | Input |
| • fNotSharable | DWORD | Input |
| • I | union | Input |
| * Mem | struct | Input |
| • dwPhysicalAddr | DWORD | Input |
| • dwBytes | DWORD | Input |
| • dwTransAddr | DWORD | N/A |
| • dwUserDirectAddr | DWORD | N/A |
| • dwCpuPhysicalAddr | DWORD | N/A |
| • dwBar | DWORD | Input |
| * IO | struct | Input |
| • dwAddr | DWORD | Input |
| • dwBytes | DWORD | Input |
| • dwBar | DWORD | Input |
| * Int | struct | N/A |
| • dwInterrupt | DWORD | Input |
| • dwOptions | DWORD | Input |
| • hInterrupt | DWORD | N/A |
| * Bus | struct | Input |
| • dwBusType | WD_BUS_TYPE | Input |
| • dwBusNum | DWORD | Input |
| • dwSlotFunc | DWORD | Input |
| * Val | struct | N/A |
| • cVersion | CHAR [WD_PCMCIA_VERSION_LEN] | Input |
| • cManufacturer | CHAR [WD_PCMCIA_ MANUFACTURER_LEN] | Input |
| • cProductName | CHAR [WD_PCMCIA_ PRODUCTNAME_LEN] | Input |
| • wManufacturerId | WORD | Input |
| • wCardId | WORD | Input |
| • wFuncId | WORD | Input |
| pDevCtx | const PVOID | Input |
| reserved | PVOID | |
| pcKPDriverName | const CHAR* | Input |
| pKPOpenData | PVOID | Input |
| Name | Description |
|---|---|
| phDev | Pointer to a handle to the WDC device allocated by the function |
| pDeviceInfo | Pointer to a PCMCIA device information structure [B.5.13], which contains information regarding the device to open |
| pDevCtx | Pointer to device context information, which will be stored in the device structure |
| reserved | Reserved for future use |
| pcKPDriverName | Kernel PlugIn driver name. If your application does not use a Kernel PlugIn driver, pass a NULL pointer for this argument.
|
| pKPOpenData | Kernel PlugIn driver open data to be passed to
WD_KernelPlugInOpen (see the WinDriver PCI Low-Level API Reference).If your application does not use a Kernel PlugIn driver, pass a NULL pointer for this argument.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
If your card has a large memory range, which cannot be mapped entirely to
the kernel virtual address space, you can modify the relevant item for this
resource in the card resources information structure that you received from
WDC_PcmciaGetDeviceInfo [B.3.9], and set the
WD_ITEM_DO_NOT_MAP_KERNEL flag in the item's
dwOptions field
(pDeviceInfo->Card.Item[i].dwOptions) before passing the
information structure (pDeviceInfo) to
WDC_PcmciaDeviceOpen. This flag instructs the function to
map the relevant memory range only to the user-mode virtual address space
but not the kernel address space.
NOTE that if you select to set the
WD_ITEM_DO_NOT_MAP_KERNEL flag, the device information
structure that will be created by the function will not hold a
kernel-mapped address for this resource (pAddrDesc[i]kptAddr
in the WDC_DEVICE structure [B.4.3] for the relevant memory range will not be updated)
and you will therefore not be able to rely on this mapping in calls to
WinDriver's API or when accessing the memory from a Kernel PlugIn driver.
• Allocates and initializes a WDC ISA device structure, registers the device with WinDriver, and returns a handle to the device.
Among the operations performed by this function:
• Verifies that a non-shareable memory or I/O resource on the device has not already been registered exclusively.
• Maps the device's physical memory ranges device both to kernel-mode and user-mode address space, and stores the mapped addresses in the allocated device structure for future use.
• Saves device resources information required for supporting the communication with the device. For example, the function saves the Interrupt Request (IRQ) number and the interrupt type, as well as retrieves and saves an interrupt handle, and this information is later used when the user calls functions to handle the device's interrupts.
• If the caller selects to use a Kernel PlugIn driver to communicate with the device, the function opens a handle to this driver and stores it for future use.
DWORD DLLCALLCONV WDC_IsaDeviceOpen(
WDC_DEVICE_HANDLE *phDev,
const WD_CARD *pDeviceInfo,
const PVOID pDevCtx,
PVOID reserved,
const CHAR *pcKPDriverName,
PVOID pKPOpenData);
| Name | Type | Input/Output |
|---|---|---|
| phDev | WDC_DEVICE_HANDLE* | Output |
| pDeviceInfo | const WD_CARD* | Input |
| • dwItems | DWORD | Input |
| • Item | WD_ITEMS[WD_CARD_ITEMS] | Input |
| * item | DWORD | Input |
| * fNotSharable | DWORD | Input |
| * dwOptions | DWORD | Input |
| * I | union | Input |
| • Mem | struct | Input |
| * dwPhysicalAddr | DWORD | Input |
| * dwBytes | DWORD | Input |
| * dwTransAddr | DWORD | N/A |
| * dwUserDirectAddr | DWORD | N/A |
| * dwCpuPhysicalAddr | DWORD | N/A |
| * dwBar | DWORD | Input |
| • IO | struct | Input |
| * dwAddr | DWORD | Input |
| * dwBytes | DWORD | Input |
| * dwBar | DWORD | Input |
| • Int | struct | Input |
| * dwInterrupt | DWORD | Input |
| * dwOptions | DWORD | Input |
| * hInterrupt | DWORD | N/A |
| • Bus | struct | Input |
| * dwBusType | WD_BUS_TYPE | Input |
| * dwBusNum | DWORD | Input |
| * dwSlotFunc | DWORD | Input |
| • Val | struct | N/A |
| pDevCtx | const PVOID | Input |
| reserved | PVOID | N/A |
| pcKPDriverName | const CHAR* | Input |
| pKPOpenData | PVOID | Input |
| Name | Description |
|---|---|
| phDev | Pointer to a handle to the WDC device allocated by the function |
| pDeviceInfo | Pointer to a card information structure [B.5.11], which contains information regarding the device to open |
| pDevCtx | Pointer to device context information, which will be stored in the device structure |
| reserved | Reserved for future use |
| pcKPDriverName | Kernel PlugIn driver name. If your application does not use a Kernel PlugIn driver, pass a NULL pointer for this argument.
|
| pKPOpenData | Kernel PlugIn driver open data to be passed to
WD_KernelPlugInOpen (see the WinDriver PCI Low-Level API Reference).If your application does not use a Kernel PlugIn driver, pass a NULL pointer for this argument.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
If your card has a large memory range, which cannot be mapped entirely to
the kernel virtual address space, you can set the
WD_ITEM_DO_NOT_MAP_KERNEL flag for the relevant memory
WD_ITEMS structure [B.5.10]
(pDeviceInfo->Card.Item[i].dwOptions) in order to instruct
the function to map this memory range only to the user-mode virtual address
space but not the kernel address space.
NOTE that if you select to set the
WD_ITEM_DO_NOT_MAP_KERNEL flag, the device information
structure that will be created by the function will not hold a
kernel-mapped address for this resource (pAddrDesc[i]kptAddr
in the WDC_DEVICE structure [B.4.3] for the relevant memory range will not be
updated) and you will therefore not be able to rely on this mapping in
calls to WinDriver's API or when accessing the memory from a Kernel PlugIn
driver.
DWORD DLLCALLCONV WDC_PciDeviceClose(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCI device structure, returned by
WDC_PciDeviceOpen [B.3.10] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PcmciaDeviceClose(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCMCIA device structure,
returned by WDC_PcmciaDeviceOpen [B.3.11] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_IsaDeviceClose(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC ISA device structure, returned by
WDC_IsaDeviceOpen [B.3.12] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
bForceCleanup parameter is set to TRUE,
the cleanup commands will also be performed when the specified card is
closed.
DWORD WDC_CardCleanupSetup(
WDC_DEVICE_HANDLE hDev,
WD_TRANSFER *Cmd,
DWORD dwCmds,
BOOL bForceCleanup);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Cmd | WD_TRANSFER* | Input |
| dwCmds | DWORD | Input |
| bForceCleanup | BOOL | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| Cmd | Pointer to an array of cleanup transfer commands to be performed [B.5.15] |
| dwCmds | Number of cleanup commands in the Cmd array |
| bForceCleanup | If FALSE: The cleanup transfer commands
(Cmd) will be performed in either of the following cases:• When the application exist abnormally. • When the application exits normally without closing the card by calling the relevant WDC_xxxDeviceClose function
(PCI [B.3.13] / PCMCIA [B.3.14] / ISA [B.3.15]).If TRUE: The cleanup transfer commands will be performed
both in the two cases described above, as well as in the following case:
• When the relevant WD_xxxDeviceClose function is
called for the card.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_KernelPlugInOpen(
WDC_DEVICE_HANDLE hDev,
const CHAR *pcKPDriverName,
PVOID pKPOpenData);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input/Output |
| pcKPDriverName | const CHAR* | Input |
| pKPOpenData | PVOID | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| pcKPDriverName | Kernel PlugIn driver name |
| pKPOpenData | Kernel PlugIn driver open data to be passed to
WD_KernelPlugInOpen (see the WinDriver PCI Low-Level API Reference)
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_xxxDeviceOpen functions (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]).phDev parameter, also as the Kernel PlugIn's open data
parameter (pKPOpenData). This is not supported in .NET,
therefore the handle to the Kernel PlugIn is opened in a separate function
call.
KP_Call [B.6.4] function,
which should be implemented to handle the specified message ID, and returns
the result from the Kernel PlugIn to the user-mode application.
DWORD DLLCALLCONV WDC_CallKerPlug(
WDC_DEVICE_HANDLE hDev,
DWORD dwMsg,
PVOID pData,
PDWORD pdwResult);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwMsg | DWORD | Input |
| pData | PVOID | Input/Output |
| pdwResult | pdwResult | Output |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| dwMsg | A message ID to pass to the Kernel PlugIn driver (specifically to
KP_Call [B.6.4])
|
| pData | Pointer to data to pass between the Kernel PlugIn driver and the user-mode application |
| pdwResult | Result returned by the Kernel PlugIn driver (KP_Call)
for the operation performed in the kernel as a result of the message that
was sent
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_ReadMem8/16/32/64 reads 1 byte (8 bits) / 2
bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits), respectively, from a
specified memory address. The address is read directly in the calling
context (user mode / kernel mode).
BYTE WDC_ReadMem8(addr, off); WORD WDC_ReadMem16(addr, off); UINT32 WDC_ReadMem32(addr, off); UINT64 WDC_ReadMem64(addr, off);Note: The
WDC_ReadMemXXX APIs are implemented as macros. The
prototypes above use functions declaration syntax to emphasize the expected
return values.
| Name | Type | Input/Output |
|---|---|---|
| addr | DWORD | Input |
| off | DWORD | Input |
| Name | Description |
|---|---|
| addr | The memory address space to read from |
| off | The offset from the beginning of the specified address space
(addr) to read from
|
WDC_WriteMem8/16/32/64 writes 1 byte (8 bits) / 2
bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits), respectively, to a
specified memory address. The address is written to directly in the calling
context (user mode / kernel mode).
void WDC_WriteMem8(addr, off, val); void WDC_WriteMem16(addr, off, val); void WDC_WriteMem32(addr, off, val); void WDC_WriteMem64(addr, off, val);
Note: The WDC_WriteMemXXX APIs are implemented as macros. The
prototypes above use functions declaration syntax to emphasize the expected
return values.
| Name | Type | Input/Output |
|---|---|---|
| addr | DWORD | Input |
| off | DWORD | Input |
| val | BYTE / WORD / UINT32 / UINT64 | Input |
| Name | Description |
|---|---|
| addr | The memory address space to read from |
| off | The offset from the beginning of the specified address space
(addr) to read from
|
| val | The data to write to the specified address |
WDC_ReadAddr8/16/32/64 reads 1 byte (8 bits) / 2
bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits), respectively, from a
specified memory or I/O address.
DWORD DLLCALLCONV WDC_ReadAddr8(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, BYTE *val);
DWORD DLLCALLCONV WDC_ReadAddr16(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, WORD *val);
DWORD DLLCALLCONV WDC_ReadAddr32(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, UINT32 *val);
DWORD DLLCALLCONV WDC_ReadAddr64(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, UINT64 *val);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwAddrSpace | DWORD | Input |
| dwOffset | KPTR | Input |
| val | BYTE* / WORD* / UINT32* / UINT64* | Output |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| dwAddrSpace | The memory or I/O address space to read from |
| dwOffset | The offset from the beginning of the specified address space
(dwAddrSpace) to read from
|
| val | Pointer to a buffer to be filled with the data that is read from the specified address |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_WriteAddr8/16/32/64 writes 1 byte (8 bits) / 2
bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits), respectively, to a
specified memory or I/O address.
DWORD DLLCALLCONV WDC_WriteAddr8(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, BYTE val)
DWORD DLLCALLCONV WDC_WriteAddr16(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, WORD val);
DWORD DLLCALLCONV WDC_WriteAddr32(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, UINT32 val);
DWORD DLLCALLCONV WDC_WriteAddr64(WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace, KPTR dwOffset, UINT64 val);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwAddrSpace | DWORD | Input |
| dwOffset | KPTR | Input |
| val | BYTE / WORD / UINT32 / UINT64 | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| dwAddrSpace | The memory or I/O address space to write to |
| dwOffset | The offset from the beginning of the specified address space
(dwAddrSpace) to write to
|
| val | The data to write to the specified address |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_ReadAddrBlock(
WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace,
KPTR dwOffset,
DWORD dwBytes,
PVOID pData,
WDC_ADDR_MODE mode,
WDC_ADDR_RW_OPTIONS options);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwAddrSpace | DWORD | Input |
| dwOffset | KPTR | Input |
| dwBytes | DWORD | Input |
| pData | PVOID | Output |
| mode | WDC_ADDR_MODE | Input |
| options | WDC_ADDR_RW_OPTIONS | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| dwAddrSpace | The memory or I/O address space to read from |
| dwOffset | The offset from the beginning of the specified address space
(dwAddrSpace) to read from
|
| dwBytes | The number of bytes to read |
| pData | Pointer to a buffer to be filled with the data that is read from the device |
| mode | The read access mode – see
WDC_ADDR_MODE [B.3.1.4]
|
| options | A bit mask that determines how the data will be read – see
WDC_ADDR_RW_OPTIONS [B.3.1.5].The function automatically sets the WDC_RW_BLOCK flag.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_WriteAddrBlock(
WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace,
KPTR dwOffset,
DWORD dwBytes,
PVOID pData,
WDC_ADDR_MODE mode,
WDC_ADDR_RW_OPTIONS options);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwAddrSpace | DWORD | Input |
| dwOffset | KPTR | Input |
| dwBytes | DWORD | Input |
| pData | PVOID | Input |
| mode | WDC_ADDR_MODE | Input |
| options | WDC_ADDR_RW_OPTIONS | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| dwAddrSpace | The memory or I/O address space to write to |
| dwOffset | The offset from the beginning of the specified address space
(dwAddrSpace) to write to
|
| dwBytes | The number of bytes to write |
| pData | Pointer to a buffer that holds the data to write to the device |
| mode | The write access mode – see
WDC_ADDR_MODE [B.3.1.4]
|
| options | A bit mask that determines how the data will be written – see
WDC_ADDR_RW_OPTIONS [B.3.1.5].The function automatically sets the WDC_RW_BLOCK flag.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_MultiTransfer(
WD_TRANSFER *pTrans,
DWORD dwNumTrans);
| Name | Type | Input/Output |
|---|---|---|
| pTrans | WD_TRANSFER* | |
| dwNumTrans | DWORD | Input |
| Name | Description |
|---|---|
| pTrans | Pointer to an array of transfer commands information structures [B.5.15] |
| dwNumTrans | Number of transfer commands in the pTrans array |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WD_MultiTransfer WinDriver function, which reads/writes the
specified addresses in the kernel (see the WinDriver PCI Low-Level API Reference for details).
BOOL DLLCALLCONV WDC_AddrSpaceIsActive(
WDC_DEVICE_HANDLE hDev,
DWORD dwAddrSpace);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwAddrSpace | DWORD | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| dwAddrSpace | The memory or I/O address space to look for |
TRUE if the specified address space is active; otherwise
returns FALSE.
DWORD DLLCALLCONV WDC_PciReadCfgBySlot(
WD_PCI_SLOT *pPciSlot,
DWORD dwOffset,
PVOID pData,
DWORD dwBytes);
| Name | Type | Input/Output |
|---|---|---|
| pPciSlot | WD_PCI_SLOT* | Input |
| dwOffset | DWORD | Input |
| pData | PVOID | Output |
| dwBytes | DWORD | Input |
| Name | Description |
|---|---|
| pPciSlot | Pointer to a PCI device location information structure [B.5.8], which can be acquired by calling
WDC_PciScanDevices [B.3.4]
|
| dwOffset | The offset from the beginning of the PCI configuration space to read from |
| pData | Pointer to a buffer to be filled with the data that is read from the PCI configuration space |
| dwBytes | The number of bytes to read |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PciWriteCfgBySlot(
WD_PCI_SLOT *pPciSlot,
DWORD dwOffset,
PVOID pData,
DWORD dwBytes);
| Name | Type | Input/Output |
|---|---|---|
| pPciSlot | WD_PCI_SLOT* | Input |
| dwOffset | DWORD | Input |
| pData | PVOID | Input |
| dwBytes | DWORD | Input |
| Name | Description |
|---|---|
| pPciSlot | Pointer to a PCI device location information structure [B.5.8], which can be acquired by calling
WDC_PciScanDevices [B.3.4]
|
| dwOffset | The offset from the beginning of the PCI configuration space to write to |
| pData | Pointer to a data buffer that holds the data to write |
| dwBytes | The number of bytes to write |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PciReadCfg(
WDC_DEVICE_HANDLE hDev,
DWORD dwOffset,
PVOID pData,
DWORD dwBytes);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwOffset | DWORD | Input |
| pData | PVOID | Output |
| dwBytes | DWORD | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCI device structure, returned by
WDC_PciDeviceOpen [B.3.10] |
| dwOffset | The offset from the beginning of the PCI configuration space to read from |
| pData | Pointer to a buffer to be filled with the data that is read from the PCI configuration space |
| dwBytes | The number of bytes to read |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PciWriteCfg(
WDC_DEVICE_HANDLE hDev,
DWORD dwOffset,
PVOID pData,
DWORD dwBytes);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwOffset | DWORD | Input |
| pData | PVOID | Input |
| dwBytes | DWORD | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCI device structure, returned by
WDC_PciDeviceOpen [B.3.10] |
| dwOffset | The offset from the beginning of the PCI configuration space to write to |
| pData | Pointer to a data buffer that holds the data to write |
| dwBytes | The number of bytes to write |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_PciReadCfgBySlot8/16/32/64 reads 1 byte (8
bits) / 2 bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits),
respectively, from a specified offset in a PCI device's configuration space
or a PCI Express device's extended configuration space.DWORD DLLCALLCONV WDC_PciReadCfgRegBySlot8(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, BYTE *val);
DWORD DLLCALLCONV WDC_PciReadCfgReg1BySlot6(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, WORD *val);
DWORD DLLCALLCONV WDC_PciReadCfgReg32BySlot(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, UINT32 *val);
DWORD DLLCALLCONV WDC_PciReadCfgReg64BySlot(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, UINT64 *val);
| Name | Type | Input/Output |
|---|---|---|
| pPciSlot | WD_PCI_SLOT* | Input |
| dwOffset | DWORD | Input |
| val | BYTE* / WORD* / UINT32* / UINT64* | Output |
| Name | Description |
|---|---|
| pPciSlot | Pointer to a PCI device location information structure [B.5.8], which can be acquired by calling
WDC_PciScanDevices [B.3.4]
|
| dwOffset | The offset from the beginning of the PCI configuration space to read from |
| val | Pointer to a buffer to be filled with the data that is read from the PCI configuration space |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_PciWriteCfgBySlot8/16/32/64 writes 1 byte (8
bits) / 2 bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits),
respectively, to a specified offset in a PCI device's configuration space or
a PCI Express device's extended configuration space.DWORD DLLCALLCONV WDC_PciWriteCfgRegBySlot8(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, BYTE val);
DWORD DLLCALLCONV WDC_PciWriteCfgRegBySlot16(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, WORD val);
DWORD DLLCALLCONV WDC_PciWriteCfgRegBySlot32(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, UINT32 val);
DWORD DLLCALLCONV WDC_PciWriteCfgRegBySlot64(
WD_PCI_SLOT *pPciSlot, DWORD dwOffset, UINT64 val);
| Name | Type | Input/Output |
|---|---|---|
| pPciSlot | WD_PCI_SLOT* | Input |
| dwOffset | DWORD | Input |
| val | BYTE / WORD / UINT32 / UINT64 | Input |
| Name | Description |
|---|---|
| pPciSlot | Pointer to a PCI device location information structure [B.5.8], which can be acquired by calling
WDC_PciScanDevices [B.3.4]
|
| dwOffset | The offset from the beginning of the PCI configuration space to read from |
| val | The data to write to the PCI configuration space |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_PciReadCfg8/16/32/64 reads 1 byte (8 bits) / 2
bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits), respectively, from a
specified offset in a PCI device's configuration space or a PCI Express
device's extended configuration space .
Access to the PCI Express extended configuration space is supported on
target platforms that support such access (e.g.,
Windows and Linux). On such platforms, all references to 'PCI' in the
description below also include PCI Express.
DWORD DLLCALLCONV WDC_PciReadCfgReg8(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, BYTE *val);
DWORD DLLCALLCONV WDC_PciReadCfgReg16(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, WORD *val);
DWORD DLLCALLCONV WDC_PciReadCfgReg32(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, UINT32 *val);
DWORD DLLCALLCONV WDC_PciReadCfgReg64(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, UINT64 *val);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwOffset | DWORD | Input |
| val | BYTE* / WORD* / UINT32* / UINT64* | Output |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCI device structure, returned by
WDC_PciDeviceOpen [B.3.10] |
| dwOffset | The offset from the beginning of the PCI configuration space to read from |
| val | Pointer to a buffer to be filled with the data that is read from the PCI configuration space |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_PciWriteCfg8/16/32/64 writes 1 byte (8 bits) /
2 bytes (16 bits) / 4 bytes (32 bits) / 8 bytes (64 bits), respectively, to a
specified offset in a PCI device's configuration space or a PCI Express
device's extended configuration space.
Access to the PCI Express extended configuration space is supported on
target platforms that support such access (e.g.,
Windows and Linux). On such platforms, all references to 'PCI' in the
description below also include PCI Express.
DWORD DLLCALLCONV WDC_PciWriteCfgReg8(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, BYTE val);
DWORD DLLCALLCONV WDC_PciWriteCfgReg16(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, WORD val);
DWORD DLLCALLCONV WDC_PciWriteCfgReg32(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, UINT32 val);
DWORD DLLCALLCONV WDC_PciWriteCfgReg64(WDC_DEVICE_HANDLE hDev,
DWORD dwOffset, UINT64 val);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwOffset | DWORD | Input |
| val | BYTE / WORD / UINT32 / UINT64 | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCI device structure, returned by
WDC_PciDeviceOpen [B.3.10] |
| dwOffset | The offset from the beginning of the PCI configuration space to read from |
| val | The data to write to the PCI configuration space |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PcmciaReadAttribSpace(
WDC_DEVICE_HANDLE hDev,
DWORD dwOffset,
PVOID pData,
DWORD dwBytes);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwOffset | DWORD | Input |
| pData | PVOID | Output |
| dwBytes | DWORD | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCMCIA device structure,
returned by WDC_PcmciaDeviceOpen [B.3.11] |
| dwOffset | The offset from the beginning of the PCMCIA attribute space to read from |
| pData | Pointer to a buffer to be filled with the data that is read from the PCMCIA attribute space |
| dwBytes | The number of bytes to read |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PcmciaWriteAttribSpace(
WDC_DEVICE_HANDLE hDev,
DWORD dwOffset,
PVOID pData,
DWORD dwBytes);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwOffset | DWORD | Input |
| pData | PVOID | Input |
| dwBytes | DWORD | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCMCIA device structure,
returned by WDC_PcmciaDeviceOpen [B.3.11] |
| dwOffset | The offset from the beginning of the PCMCIA attribute space to write to |
| pData | Pointer to a data buffer that holds the data to write |
| dwBytes | The number of bytes to write |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PcmciaSetWindow(
WDC_DEVICE_HANDLE hDev,
WD_PCMCIA_ACC_SPEED speed,
WD_PCMCIA_ACC_WIDTH width,
DWORD dwCardBase);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| speed | WD_PCMCIA_ACC_SPEED | Input |
| width | WD_PCMCIA_ACC_WIDTH | Input |
| dwCardBase | DWORD | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCMCIA device structure,
returned by WDC_PcmciaDeviceOpen [B.3.11] |
| speed | The access speed to the PCMCIA bus – see the
WD_PCMCIA_ACC_SPEED enumeration [B.5.3]
|
| width | The PCMCIA bus width – see the WD_PCMCIA_ACC_WIDTH
enumeration [B.5.4]
|
| dwCardBase | The offset in the PCMCIA device's memory from which the memory mapping begins |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_PcmciaSetVpp(
WDC_DEVICE_HANDLE hDev,
WD_PCMCIA_VPP vpp);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| vpp | WD_PCMCIA_VPP | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC PCMCIA device structure,
returned by WDC_PcmciaDeviceOpen [B.3.11] |
| vpp | The power level of the PCMCIA controller's Voltage Power Pin (Vpp)
– see the WD_PCMCIA_VPP enumeration [B.5.5]
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_DMAContigBufLock(
WDC_DEVICE_HANDLE hDev,
PVOID *ppBuf,
DWORD dwOptions,
DWORD dwDMABufSize,
WD_DMA **ppDma);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| ppBuf | PVOID* | Output |
| dwOptions | DWORD | Input |
| dwDMABufSize | DWORD | Input |
| ppDma | WD_DMA** | Output |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]). |
| ppBuf | Pointer to a pointer to be filled by the function with the user-mode mapped address of the allocated DMA buffer |
| dwOptions | A bit mask of any of the following flags (defined in an enumeration in
windrvr.h): • DMA_FROM_DEVICE: Synchronize the DMA buffer for
transfers from the device to memory.• DMA_TO_DEVICE: Synchronize the DMA buffer for
transfers from memory to the device.• DMA_TO_FROM_DEVICE: Synchronize the DMA buffer
for transfers in both directions – i.e. from the device to memory
and from memory to the device (<=> DMA_FROM_DEVICE |
DMA_TO_DEVICE).• DMA_ALLOW_CACHE: Allow caching of the memory.
• DMA_KBUF_BELOW_16M: Allocate the physical DMA
buffer within the lower 16MB of the main memory.• DMA_ALLOW_64BIT_ADDRESS: Allow allocation of
64-bit DMA addresses, if supported by the target platform. This flag is
supported on Windows and Linux.
|
| dwDMABufSize | The size (in bytes) of the DMA buffer |
| ppDma | Pointer to a pointer to a DMA buffer information structure [B.5.14], which is allocated by the function. The pointer to this structure ( *ppDma) should be passed to
WDC_DMABufUnlock [B.3.41]
when the DMA buffer is no longer needed.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DMA_KERNEL_BUFFER_ALLOC flag, since the function sets this
flag automatically.
DMA_ALLOW_CACHE flag in the DMA options bitmask parameter
(dwOptions).
DWORD DLLCALLCONV WDC_DMASGBufLock(
WDC_DEVICE_HANDLE hDev,
PVOID pBuf,
DWORD dwOptions,
DWORD dwDMABufSize,
WD_DMA **ppDma);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| pBuf | PVOID | Input |
| dwOptions | DWORD | Input |
| dwDMABufSize | DWORD | Input |
| ppDma | WD_DMA** | Output |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| pBuf | Pointer to a user-mode buffer to be mapped to the allocated physical DMA buffer(s) |
| dwOptions | A bit mask of any of the following flags (defined in an enumeration in
windrvr.h): • DMA_FROM_DEVICE: Synchronize the DMA buffer for
transfers from the device to memory.• DMA_TO_DEVICE: Synchronize the DMA buffer for
transfers from memory to the device.• DMA_TO_FROM_DEVICE: Synchronize the DMA buffer
for transfers in both directions – i.e. from the device to memory
and from memory to the device (<=> DMA_FROM_DEVICE |
DMA_TO_DEVICE).• DMA_ALLOW_CACHE:
Allow caching of the memory.• DMA_ALLOW_64BIT_ADDRESS: Allow allocation of
64-bit DMA addresses, if supported by the target platform. This flag is
supported on Windows and Linux.
|
| dwDMABufSize | The size (in bytes) of the DMA buffer |
| ppDma | Pointer to a pointer to a DMA buffer information structure [B.5.14], which is allocated by the function. The pointer to this structure ( *ppDma) should be passed to
WDC_DMABufUnlock [B.3.41]
when the DMA buffer is no longer needed.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DMA_LARGE_BUFFER flag, which is
used for allocation of large Scatter/Gather DMA buffers using the
low-level WinDriver WD_DMALock function (see the
WinDriver PCI Low-Level API Reference), since WDC_DMASGBufLock handles this for
you.
DMA_ALLOW_CACHE flag in the DMA options bitmask parameter
(dwOptions).
WDC_DMAContigBufLock [B.3.39] or
WDC_DMASGBufLock [B.3.40].
DWORD DLLCALLCONV WDC_DMABufUnlock(WD_DMA *pDma);
| Name | Type | Input/Output |
|---|---|---|
| pDma | WD_DMA* | Input |
| Name | Description |
|---|---|
| pDma | Pointer to a DMA information structure [B.5.14], received from a previous call to
WDC_DMAContigBufLock [B.3.39] (for a Contiguous DMA buffer) or
WDC_DMASGBufLock [B.3.40]
(for a Scatter/Gather DMA buffer) – *ppDma returned by
these functions
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
• Synchronizes the cache of all CPUs with the DMA buffer, by flushing the data from the CPU caches.
NOTE: This function should be called before performing a DMA transfer (see Remarks below).
DWORD DLLCALLCONV WDC_DMASyncCpu(WD_DMA *pDma);
| Name | Type | Input/Output |
|---|---|---|
| pDma | WD_DMA* | Input |
| Name | Description |
|---|---|
| pDma | Pointer to a DMA information structure [B.5.14], received from a previous call to
WDC_DMAContigBufLock [B.3.39] (for a Contiguous DMA buffer) or
WDC_DMASGBufLock [B.3.40]
(for a Scatter/Gather DMA buffer) – *ppDma returned by
these functions
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_DMASyncCpu, just before a read transfer, the data
transferred into system memory by the DMA operation could be overwritten
with stale data if the CPU cache is flushed later. Unless the CPU cache has
been flushed by calling WDC_DMASyncCpu just before a write
transfer, the data in the CPU cache might be more up-to-date than the copy
in memory.
DWORD DLLCALLCONV WDC_DMASyncIo(WD_DMA *pDma);
| Name | Type | Input/Output |
|---|---|---|
| pDma | WD_DMA* | Input |
| Name | Description |
|---|---|
| pDma | Pointer to a DMA information structure, received from a previous call
to WDC_DMAContigBufLock [B.3.39] (for a Contiguous DMA buffer) or
WDC_DMASGBufLock [B.3.40]
(for a Scatter/Gather DMA buffer) – *ppDma returned by
these functions
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_DMASyncIo after a DMA transfer in order to flush the
data from the I/O cache and update the CPU cache with the new data. The
function also flushes additional caches and buffers between the device
and memory, such as caches associated with bus extenders or bridges.
![]() | |
| This function provides a useful method for sharing data between a user-mode application and a Kernel PlugIn driver. |
DWORD DLLCALLCONV WDC_SharedBufferAlloc(
PVOID *ppUserAddr,
KPTR *ppKernelAddr,
DWORD dwBufSize,
DWORD dwOptions,
HANDLE *phBuf);
| Name | Type | Input/Output |
|---|---|---|
| *ppUserAddr | PVOID* | Output |
| *ppKernelAddr | KPTR* | Output |
| dwBufSize | DWORD | Input |
| dwOptions | DWORD | Input |
| phBuf | HANDLE* | Output |
| Name | Description |
|---|---|
| ppUserAddr | Pointer to a pointer to be filled by the function with the user-mode mapped address of the allocated buffer |
| ppKernelAddr | Pointer to a pointer to be filled by the function with the kernel-mode mapped address of the allocated buffer |
| dwBufSize | The size of the buffer to allocate, in bytes |
| dwOptions | Reserved for future use. Initialize this field to 0. |
| phBuf | Pointer to a handle to the allocated buffer, to be filled by the
function. When the buffer is no longer needed, the handle to the buffer ( *phBuf) should be passed to
WDC_SharedBufferFree [B.3.45].
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_SharedBufferAlloc [B.3.44].
#define WDC_SharedBufferFree(hBuf)
| Name | Type | Input/Output |
|---|---|---|
| hBuf | HANDLE | Input |
| Name | Description |
|---|---|
| hBuf | Handle to a shared buffer, received within the *phBuf
parameter of a previous call to
WDC_SharedBufferAlloc [B.3.44]
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
• Enables interrupt handling for the device.
On Linux and Windows Vista and higher, when attempting to enable interrupts for a PCI device that
supports Extended Message-Signaled Interrupts (MSI-X) or Message-Signaled Interrupts (MSI) (and was installed with a relevant
INF file – on Windows Vista and higher [9.2.6.1]),
the function first tries to enable MSI-X or MSI; if this fails, or if the
target OS does not support MSI/MSI-X, the function attempts to enable legacy
level-sensitive interrupts (if supported by the device). For other types of
hardware (PCI with no MSI/MSI-X support / PCMCIA / ISA), the function
attempts to enable the legay interrupt type supported by the device (Level
Sensitive / Edge Triggered) – see further information in
section 9.2.
![]() | |
When enablding interrupts using a Kernel PlugIn driver
(fUseKP=TRUE), the Kernel PlugIn functions used to handle the
interrupts are derived from the type of interrupts enabled for the device:
for MSI/MSI-X, the KP_IntAtIrqlMSI and
KP_IntAtDpcMSI functions are used; otherwise, the
KP_IntAtIrql and KP_IntAtDpc functions are
used.
|
• If the caller selects to handle the interrupts in the kernel,
using a Kernel PlugIn driver, the Kernel PlugIn
KP_IntAtIrql [B.6.8] (legacy interrupts)
or KP_IntAtIrqlMSI [B.6.10] (MSI-MSI-X)
function, which runs at high Interrupt Request (IRQ) level,
will be invoked immediately when an an interrupt is received.
• The function can receive transfer commands information, which will
be performed by WinDriver at the kernel, at high IRQ level, when an interrupt
is received (see further information in section 9.2.5). If a Kernel PlugIn driver is used to
handle the interrupts, any transfer commands set by the caller will be
executed by WinDriver after the Kernel PlugIn KP_IntAtDpc or KP_IntAtDpcMSI function
completes its execution.
When handling level-sensitive interrupts (such as legacy PCI interrupts) from
the user mode, without a Kernel PlugIn driver, you must prepare and
pass to the function transfer commands for acknowledging the interrupt. When
using a Kernel PlugIn driver, the information for acknowledging the
interrupts should be implemented in the Kernel PlugIn
KP_IntAtIrql function [B.6.8],
so the transfer commands in the call to WDC_IntEnable are not
required (although they can still be used).
• The function receives a user-mode interrupt handler routine, which
will be called by WinDriver after the kernel-mode interrupt processing is
completed.
If the interrupts are handled using a Kernel PlugIn driver, the
return value of the Kernel PlugIn deferred interrupt handler function –
KP_IntAtDpc
[B.6.9]
(legacy interrupts) or KP_IntAtDpcMSI
[B.6.11]
(MSI-MSI-X) – will determine how many times (if at all) the
user-mode interrupt handler will be called (provided KP_IntAtDpc or KP_IntAtDpcMSI
itself is executed – which is determined by the return value of the
Kernel PlugIn KP_IntAtIrql [B.6.8]
or KP_IntAtIrqlMSI [B.6.10] function).
DWORD DLLCALLCONV WDC_IntEnable(
WDC_DEVICE_HANDLE hDev,
WD_TRANSFER *pTransCmds,
DWORD dwNumCmds,
DWORD dwOptions,
INT_HANDLER funcIntHandler,
PVOID pData,
BOOL fUseKP);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| pTransCmds | WD_TRANSFER* | Input |
| dwNumCmds | DWORD | Input |
| dwOptions | DWORD | Input |
| funcIntHandler | typedef void (*INT_HANDLER)( PVOID pData); | Input |
| pData | PVOID | Input |
| fUseKP | BOOL | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
| pTransCmds | An array of transfer commands information structures that define the
operations to be performed at the kernel level upon the detection of an
interrupt, or NULL if no transfer commands are required.NOTE: • Memory allocated for the transfer commands must remain available until the interrupts are disabled . • When handling level-sensitive interrupts (such as legacy PCI interrupts) without a Kernel PlugIn [11], you must use this array to define the hardware-specific commands for acknowledging the interrupts in the kernel, immediately when they are received – see further information in section 9.2. For an explanation on how to set the transfer commands, refer to the description of WD_TRANSFER in section B.5.15, and to the explanation in section 9.2.5.
|
| dwNumCmds | Number of transfer commands in the pTransCmds array
|
| dwOptions | A bit mask of interrupt handling flags. Can be zero for no option, or: • INTERRUPT_CMD_COPY: If set, WinDriver will copy any
data read in the kernel as a result of a read transfer command, and return it
to the user within the relevant transfer command structure.The user will be able to access the data from his user-mode interrupt handler routine ( funcIntHandler).
|
| funcIntHandler | A user-mode interrupt handler callback function, which will be
executed after an interrupt is received and processed in the kernel. (The
prototype of the interrupt handler – INT_HANDLER –
is defined in windrvr_int_thread.h).
|
| pData | Data for the user-mode interrupt handler callback routine
(funcIntHandler)
|
| fUseKP | If TRUE – The device's Kernel PlugIn driver's
KP_IntAtIrql [B.6.8]
or KP_IntAtIrqlMSI [B.6.10] function, which runs at high Interrupt Request (IRQ) level, will
be executed immediately when an interrupt is received. The Kernel PlugIn
driver to be used for the device is passed to
WDC_xxxDeviceOpen and stored in the WDC device
structure.If the caller also passes transfer commands to the function ( pTransCmds), these commands will be executed by WinDriver at
the kernel, at high IRQ level, after KP_IntAtIrql or KP_IntAtIrqlMSI completes
its execution.If the high-IRQL handler returns TRUE, the Kernel PlugIn
deferred interrupt processing routine – KP_IntAtDpc
[B.6.9] or
KP_IntAtDpcMSI
[B.6.11] –
will be invoked. The return value of this function determines how many
times (if at all) the user-mode interrupt handler
(funcIntHandler) will be executed once the control returns
to the user mode.If FALSE – When an interrupt is received, any transfer
commands set by the user in pTransCmds will be executed by
WinDriver at the kernel, at high IRQ level, and the user-mode interrupt
handler routine (funcIntHandler) will be executed when the
control returns to the user mode.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_IntDisable later on in the code, in order to disable the
interrupts.WDC_xxxDriverClose functions (PCI: [B.3.13], PCMCIA: [B.3.14], ISA: [B.3.15]) call WDC_IntDisable if the
device's interrupts are enabled.
WDC_IntEnable
will fail with a WD_NO_DEVICE_OBJECT error [B.9].
WDC_IntEnable [B.3.46].
DWORD DLLCALLCONV WDC_IntDisable(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
BOOL DLLCALLCONV WDC_IntIsEnabled(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
TRUE if the device's interrupts are enabled; otherwise
returns FALSE.
DWORD DLLCALLCONV WDC_EventRegister(
WDC_DEVICE_HANDLE hDev,
DWORD dwActions,
EVENT_HANDLER funcEventHandler,
PVOID pData,
BOOL fUseKP);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| dwActions | DWORD | Input |
| funcEventHandler | typedef void (*EVENT_HANDLER)( WD_EVENT *pEvent, void *pData); | Input |
| pData | PVOID | Input |
| fUseKP | BOOL | Input |
| Name | Description |
|---|---|
| hDev | Handle to a Plug-and-Play WDC device, returned by
WDC_PciDeviceOpen [B.3.10] or
WDC_PcmciaDeviceOpen [B.3.11] |
| dwActions | A bit mask of flags indicating which events to register to: Plug-and-Play events: • WD_INSERT
– Device inserted• WD_REMOVE – Device removedDevice power state change events: • WD_POWER_CHANGED_D0 – Full power• WD_POWER_CHANGED_D1 – Low sleep• WD_POWER_CHANGED_D2 – Medium sleep• WD_POWER_CHANGED_D3 – Full sleep• WD_POWER_SYSTEM_WORKING – Fully onSystems power state: • WD_POWER_SYSTEM_SLEEPING1 – Fully on but
sleeping• WD_POWER_SYSTEM_SLEEPING2 – CPU off,
memory on, PCI/PCMCIA on• WD_POWER_SYSTEM_SLEEPING3 – CPU off,
Memory is in refresh, PCI/PCMCIA on aux power• WD_POWER_SYSTEM_HIBERNATE – OS saves
context before shutdown• WD_POWER_SYSTEM_SHUTDOWN – No context
saved
|
| funcEventHandler | A user-mode event handler callback function, which will be called when
an event for which the caller registered to receive notifications (see
dwActions) occurs. (The prototype of the event handler
– EVENT_HANDLER – is defined in
windrvr_events.h).
|
| pData | Data for the user-mode event handler callback routine
(funcEventHandler)
|
| fUseKP | If TRUE – When an event for which the caller
registered to receive notifications (dwActions) occurs, the
device's Kernel PlugIn driver's KP_Event
function [B.6.5] will be called. (The Kernel
PlugIn driver to be used for the device is passed to
WDC_xxxDeviceOpen and stored in the WDC device
structure).If this function returns TRUE, the user-mode events handler
callback function (funcEventHandler) will be called when the
kernel-mode event processing is completed.If FALSE – When an event for which the caller
registered to receive notifications (dwActions) occurs, the
user-mode events handler callback function will be called.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_EventUnregister [B.3.50] later on in the code, in order to
un-register from receiving Plug-and-play and power management notifications
from the device.
WDC_EventRegister [B.3.49].
DWORD DLLCALLCONV WDC_EventUnregister(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a Plug-and-Play WDC device, returned by
WDC_PciDeviceOpen [B.3.10] or
WDC_PcmciaDeviceOpen [B.3.11] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
BOOL DLLCALLCONV WDC_EventIsRegistered(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a Plug-and-Play WDC device, returned by
WDC_PciDeviceOpen [B.3.10] or
WDC_PcmciaDeviceOpen [B.3.11] |
TRUE if the application is currently registered to receive
Plug-and-Play and power management notifications for the device; otherwise
returns FALSE.
• Sets debug options for the WDC library – see the description
of WDC_DBG_OPTIONS [B.3.1.8] for
details regarding the possible debug options to set.
• This function is typically called at the beginning of the
application, after the call to WDC_DriverOpen [B.3.2], and can be re-called at any time while the WDC
library is in use (i.e., WDC_DriverClose [B.3.3] has not been called) in order to change the
debug settings.
• Until the function is called, the WDC library uses the
default debug options – see WDC_DEBG_DEFAULT [B.3.1.8].
When the function is recalled, it performs any required cleanup for the previous debug settings and sets the default debug options before attempting to set the new options specified by the caller.
DWORD DLLCALLCONV WDC_SetDebugOptions(
WDC_DBG_OPTIONS dbgOptions,
const CHAR *sDbgFile);
| Name | Type | Input/Output |
|---|---|---|
| dbgOptions | WDC_DBG_OPTIONS | Input |
| sDbgFile | const CHAR* | Input |
| Name | Description |
|---|---|
| dbgOptions | A bit mask of flags indicating the desired debug settings – see
WDC_DBG_OPTIONS [B.3.1.8].
If this parameter is set to zero, the default debug options will be used – see WDC_DBG_DEFAULT [B.3.1.8].
|
| sDbgFile | WDC debug output file. This parameter is relevant only if the WDC_DBG_OUT_FILE flag
is set in the debug options (dbgOptions) (either directly or
via one of the convenience debug options combinations – see
WDC_DBG_OPTIONS [B.3.1.8]).If the WDC_DBG_OUT_FILE debug flag is set and
sDbgFile is NULL, WDC debug messages will be
logged to the default debug file –
stderr.
|
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
WDC_DBG_OPTIONS [B.3.1.8] and
WDC_SetDebugOptions [B.3.52].
void DLLCALLCONV WDC_Err(
const CHAR *format
[, argument] ...);
| Name | Type | Input/Output |
|---|---|---|
| format | const CHAR* | Input |
| argument | Input |
| Name | Description |
|---|---|
| format | Format-control string, which contains the error message to display. The string is limited to 256 characters (CHAR) |
| argument | Optional arguments for the format string |
WDC_DBG_OPTIONS [B.3.1.8] and
WDC_SetDebugOptions [B.3.52].
void DLLCALLCONV WDC_Trace(
const CHAR *format
[, argument] ...);
| Name | Type | Input/Output |
|---|---|---|
| format | const CHAR* | Input |
| argument | Input |
| Name | Description |
|---|---|
| format | Format-control string, which contains the trace message to display. The string is limited to 256 characters (CHAR) |
| argument | Optional arguments for the format string |
WD_xxx WinDriver PCI/PCMCIA/ISA API, described in the
WinDriver PCI Low-Level API Reference (see Remarks below).
HANDLE DLLCALLCONV WDC_GetWDHandle(void);
WD_xxx API, if such APIs are used from your code. In
such cases, take care not to close the handle you received (using
WD_Close). The handle will be closed by the WDC library when
it is closed, using WDC_DriverClose [B.3.3]. The low-level WD_xxx API is
described in the WinDriver PCI Low-Level API Reference.
PVOID DLLCALLCONV WDC_GetDevContext(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
NULL if not
context has been set.
WD_BUS_PCI,
WD_BUS_PCMCIA, WD_BUS_ISA or
WD_BUS_UNKNOWN.
WD_BUS_TYPE DLLCALLCONV WDC_GetBusType(WDC_DEVICE_HANDLE hDev);
| Name | Type | Input/Output |
|---|---|---|
| hDev | WDC_DEVICE_HANDLE | Input |
| Name | Description |
|---|---|
| hDev | Handle to a WDC device, returned by
WDC_xxxDeviceOpen (PCI [B.3.10] /
PCMCIA [B.3.11] / ISA [B.3.12]) |
DWORD DLLCALLCONV WDC_Sleep(
DWORD dwMicroSecs,
WDC_SLEEP_OPTIONS options);
| Name | Type | Input/Output |
|---|---|---|
| dwMicroSecs | DWORD | Input |
| options | WDC_SLEEP_OPTIONS | Input |
| Name | Description |
|---|---|
| dwMicroSecs | The number of microseconds to sleep |
| options | Sleep options [B.3.1.7] |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].
DWORD DLLCALLCONV WDC_Version(
CHAR *sVersion,
DWORD *pdwVersion);
| Name | Type | Input/Output |
|---|---|---|
| sVersion | CHAR* | Output |
| pdwVersion | DWORD* | Output |
| Name | Description |
|---|---|
| sVersion | Pointer to a pre-allocated buffer to be filled by the function with
the driver's version information string. The size of the version string buffer must be at least 128 bytes (characters). |
| pdwVersion | Pointer to a value indicating the version number of the WinDriver kernel module used by the WDC library |
WD_STATUS_SUCCESS(0) on success, or
an appropriate error code otherwise [B.9].