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 操作的传输宽度,其中一个 为 Width8BitsWidth16BitsWidth32Bits

DmaSpeed

DMA 速度为 兼容TypeATypeBTypeC

DmaPort

此成员引用不再受支持的 MCA 总线。 此成员必须为零。

DmaChannel

NIC 使用的系统 DMA 控制器通道的总线相对数量。

[in] MaximumLength

NIC 可在单个 DMA 操作中传输的最大字节数。 如果 NIC 的传输容量不受限制,请将此参数设置为 -1。

返回值

NdisMRegisterDmaChannel 可以返回以下状态值之一:

返回代码 说明
NDIS_STATUS_SUCCESS
NDIS 在调用方 NIC 的注册表中声明了指定的 DMA 通道,并为微型端口驱动程序的后续 DMA 操作设置了必要的资源。
NDIS_STATUS_RESOURCE_CONFLICT
尝试在注册表中声明 DMA 通道失败,可能是因为另一个驱动程序已经为其设备声明了该通道。 如果发生这种情况,NdisMRegisterDmaChannel 会记录错误。
NDIS_STATUS_RESOURCES
NDIS 无法分配此微型端口驱动程序支持 DMA 操作所需的系统资源。
NDIS_STATUS_FAILURE
总线类型或总线编号超出范围,或者驱动程序将 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)

另请参阅

MiniportInitializeEx

NdisMDeregisterDmaChannel

NdisMGetBusData

NdisMSetMiniportAttributes