NdisMRegisterDmaChannel 函数 (ndis.h)
在从属 NIC 或 ISA 总线主 NIC 上的 DMA 操作初始化期间, NdisMRegisterDmaChannel 函数声明系统 DMA 控制器通道。
语法
NDIS_STATUS NdisMRegisterDmaChannel(
[out] PNDIS_HANDLE MiniportDmaHandle,
[in] NDIS_HANDLE MiniportAdapterHandle,
[in] UINT DmaChannel,
[in] BOOLEAN Dma32BitAddresses,
[in] PNDIS_DMA_DESCRIPTION DmaDescription,
[in] ULONG MaximumLength
);
参数
[out] MiniportDmaHandle
指向调用方提供的变量的指针,此函数在该变量中返回微型端口驱动程序在后续调用 NdisMXxx 系统 DMA 函数时使用的句柄。
[in] MiniportAdapterHandle
微型端口适配器将输入处理到 MiniportInitializeEx 函数。
[in] DmaChannel
已忽略。 在 DmaDescription 处设置 DMA 通道(如果有)。
[in] Dma32BitAddresses
如果 NIC 有 32 个地址行,则为 TRUE 的布尔值。 否则为 FALSE。
[in] DmaDescription
指向调用方填充的NDIS_DMA_DESCRIPTION 结构的指针。 此结构定义如下:
typedef struct _NDIS_DMA_DESCRIPTION {
BOOLEAN DemandMode;
BOOLEAN AutoInitialize;
BOOLEAN DmaChannelSpecified;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG DmaPort;
ULONG DmaChannel;
} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
在填充以下成员之前,驱动程序应用零初始化此结构:
DemandMode
如果从属 NIC 使用系统 DMA 控制器的需求模式,则为 TRUE 的布尔值。 否则为 FALSE。
AutoInitialize
一个布尔值,如果从属 NIC 使用系统 DMA 控制器的自动初始化模式,则为 TRUE 。 否则为 FALSE。
DmaChannelSpecified
一个布尔值,如果 DmaChannel 设置为 NIC 使用的系统 DMA 控制器通道的总线相对值,则为 TRUE。 否则为 FALSE。
DmaWidth
DMA 操作的传输宽度,其中一个 为 Width8Bits、 Width16Bits 或 Width32Bits。
DmaSpeed
DMA 速度为 兼容、 TypeA、 TypeB 或 TypeC。
DmaPort
此成员引用不再受支持的 MCA 总线。 此成员必须为零。
DmaChannel
NIC 使用的系统 DMA 控制器通道的总线相对数量。
[in] MaximumLength
NIC 可在单个 DMA 操作中传输的最大字节数。 如果 NIC 的传输容量不受限制,请将此参数设置为 -1。
返回值
NdisMRegisterDmaChannel 可以返回以下状态值之一:
返回代码 | 说明 |
---|---|
|
NDIS 在调用方 NIC 的注册表中声明了指定的 DMA 通道,并为微型端口驱动程序的后续 DMA 操作设置了必要的资源。 |
|
尝试在注册表中声明 DMA 通道失败,可能是因为另一个驱动程序已经为其设备声明了该通道。 如果发生这种情况,NdisMRegisterDmaChannel 会记录错误。 |
|
NDIS 无法分配此微型端口驱动程序支持 DMA 操作所需的系统资源。 |
|
总线类型或总线编号超出范围,或者驱动程序将 NIC 声明为除 ISA 以外的 I/O 总线上的总线主机。 |
注解
从属 DMA NIC 的驱动程序必须从其 MiniportInitializeEx 函数调用 NdisMRegisterDmaChannel,以便为后续 DMA 操作保留系统资源,并在注册表中声明这些资源。
ISA 总线主 NIC 的驱动程序还必须从 MiniportInitializeEx 调用 NdisMRegisterDmaChannel,以声明注册表中 NIC 的系统 DMA 控制器通道。
MiniportInitializeEx 必须调用在调用 NdisMRegisterDmaChannel 之前使用 NdisMSetMiniportAttributes 函数。
MiniportInitializeEx 从注册表或通过调用 NdisMGetBusData 函数获取传递给 NdisMRegisterDmaChannel的 总线相对值。
如果此类驱动程序无法分配其设备所需的系统 DMA 资源, MiniportInitializeEx 应释放它已为 NIC 分配的所有资源,然后使该 NIC 的初始化失败。
如果驱动程序成功注册了 DMA 通道,则它以后必须调用用于取消注册 DMA 通道的 NdisMDeregisterDmaChannel 函数。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 支持 NDIS 6.0 和 NDIS 5.1 驱动程序 (请参阅 Windows Vista 中的 NdisMRegisterDmaChannel (NDIS 5.1) ) 。 NDIS 5.1 驱动程序支持 (请参阅 Windows XP 中的 NdisMRegisterDmaChannel (NDIS 5.1) ) 。 |
目标平台 | 通用 |
标头 | ndis.h (包括 Ndis.h) |
Library | Ndis.lib |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | Irql_Miniport_Driver_Function (ndis) |