NdisMRegisterDmaChannel 函数在初始化从属 NIC 或 ISA 总线主 NIC 上的 DMA作期间声明系统 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 通道,则必须稍后调用 NdisMDeregisterDmaChannel 函数取消注册 DMA 通道。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 NdisMRegisterDmaChannel (NDIS 5.1)。 在 Windows XP 中支持 NDIS 5.1 驱动程序(请参阅 NdisMRegisterDmaChannel (NDIS 5.1)。 |
目标平台 | 普遍 |
标头 | ndis.h (包括 Ndis.h) |
库 | Ndis.lib |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | Irql_Miniport_Driver_Function(ndis) |