stdin
驱动牛犊
驱动牛犊
  • 注册日期2002-12-02
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1537回复:5

求教,在MPInitialize执行NdisMAllocateMapRegisters失败

楼主#
更多 发布于:2003-12-24 13:50
驱动在win2k和winxp都是正常的,win2003就不正确。
我在win2003下用3790的DDK重新编译,编译选项没改,编译成功。可是运行时不正确。
我跟踪发现在MPInitialize里执行执行NdisMAllocateMapRegisters时失败。返回值是NDIS_STATUS_RESOURCES。

部分代码如下:
NdisMSetAttributesEx(MiniportAdapterHandle,
pAdapt,
0, // CheckForHangTimeInSeconds
NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT |
NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT |
NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER |
NDIS_ATTRIBUTE_DESERIALIZE |
NDIS_ATTRIBUTE_BUS_MASTER |
NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND,
0);

//
// Initialize LastIndicatedStatus to be NDIS_STATUS_MEDIA_CONNECT
//
// When a NIC miniport senses that the network connection has been lost,
// it should call NdisMIndicateStatus with NDIS_STATUS_MEDIA_DISCONNECT.
// When the connection is restored, it should call NdisMIndicateStatus with
// NDIS_STATUS_MEDIA_CONNECT.
pAdapt->LastIndicatedStatus = NDIS_STATUS_MEDIA_CONNECT;

// Initialize the power states for both the lower binding (PTDeviceState)
// and our miniport edge to Powered On.

// The NIC can signal a magic-packet wake-up from device power state D0.
// Since D0 is the fully powered state, this does not cause a wake-up but can
// be used as a runtime event.
pAdapt->MPDeviceState = NdisDeviceStateD0;
pAdapt->PTDeviceState = NdisDeviceStateD0;

pAdapt->DmaChannel=0;
pAdapt->Dma32BitAddresses=NDIS_DMA_32BITS;
pAdapt->PhysicalMapRegistersNeeded=1;
pAdapt->MaximumPhysicalMapping=0x1000;

Status = NdisMAllocateMapRegisters(pAdapt->MiniportHandle,
pAdapt->DmaChannel,
pAdapt->Dma32BitAddresses,
pAdapt->PhysicalMapRegistersNeeded,
pAdapt->MaximumPhysicalMapping);
我的NDIS的版本用的是4.0。
请帮忙看看。谢谢!

请斑竹把我的http://www.driverdevelop.com/forum/html_57414.html?1072244899删了。
Denning
驱动牛犊
驱动牛犊
  • 注册日期2002-02-07
  • 最后登录2004-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-25 17:08
From DDK
NDIS_STATUS_RESOURCES
One of the following occurred:
1. NDIS could not allocate enough map registers because of system resource constraints.
2. The total number of map registers that NDIS would have to allocate for the requested number of base map registers exceeds 64.

No.2  的条件是满足的. No.1 应该也在允许范围内.
可能是其他的原因.

在这里:
NdisMSetAttributesEx(MiniportAdapterHandle,
pAdapt,
0, // CheckForHangTimeInSeconds
NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT |
NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT |
NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER |  // 怎么要设置这个标志? 是不是这里影响?
NDIS_ATTRIBUTE_DESERIALIZE |
NDIS_ATTRIBUTE_BUS_MASTER |
NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND,
0);
未之思也 夫何远之有? --------------------
stdin
驱动牛犊
驱动牛犊
  • 注册日期2002-12-02
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-26 10:47
From DDK:
NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER
Set if the caller is an intermediate driver.


我做的就是中间层的驱动。
stdin
驱动牛犊
驱动牛犊
  • 注册日期2002-12-02
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-02 09:55
我顶
yongliliu
驱动小牛
驱动小牛
  • 注册日期2003-10-20
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-04 11:19
我的驱动还没有在2003下编译运行过,可能是平台差异,建议查一下2003DDK,估计十有八九是NdisMAllocateMapRegisters的属性设置不太正确所导致;)
成功不是天上掉下来的免费的丰盛的晚餐!
longriver2003
驱动小牛
驱动小牛
  • 注册日期2003-09-14
  • 最后登录2005-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-05 17:37
Specifies the bus-relative DMA channel for an ISA bus-master NIC. If the NIC is on another type of I/O bus, this parameter must be zero.
给分才有动力!所以我坚决给分!
游客

返回顶部