lsshao
驱动牛犊
驱动牛犊
  • 注册日期2004-02-03
  • 最后登录2007-10-29
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2983回复:3

DriverNetwork miniport驱动学习(9)

楼主#
更多 发布于:2004-03-22 09:45
KNdisLookahead类
<const UINT L, const NDIS_MEDIUM M = NdisMedium802_3 > :
KNdisLookahead抽象了完成部分分组的NDIS机制。Miniport驱动允许协议先检查接收帧的头部和一小部分内容。而不需要立即将整个帧都交给它。因此,协议要先调用介质相关NdisMXXXReceiveIndicate() API。协议然后调用MiniportTransferData处理程序来接收分组剩余内容。
模板类KNdisLookahead封装了部分说明机制。该模板由两个参数:
L :最大Lookahead缓冲长度;缓冲创建在类内。
M:介质类型;定义了怎样调用NDIS来说明帧;802.3是默认的。
类的使用
1. 在adapter 类中包括一个成员数据KNdisLookahead<> 。例如:
KNdisLookahead<256> m_Lookahead;
2. 在adapter 类中, 提供下面的公共函数:
UINT CopyDataUp(PVOID FrameBase, PUCHAR Buf, UINT Len, UINT Offset);
这同步传输的内容有:长度Len,起始偏移Offset,缓冲Buf中当前帧的内容。The frame is identified by an opaque to the framework value FrameBase. 驱动开发者用硬件特定的方法使用FrameBase。也就是,它可能说明了卡上环形缓冲中当前帧的偏移地址。
3. 在HandleInterrupt()处理程序中,在配置用来说明的接收数据长度和卡内存中的帧的FrameBase 之后,调用:
m_Lookahead.Indicate                                                   (this, header_len, lookah_len, packet_len, FrameBase);
这样帧的lookahead部分将存入KNdisLookahead实体中,并且接着调用NDIS来说明lookahead。因此NDIS就可以将lookahead展示给捆绑的协议。 如果协议对该分组感兴趣,控制权将转到适配的TransferData()处理程序。参看第五步。FrameBase值存在类中并且当调用CopyDataUp()时就回传给CopyDataUp()。 如果在硬件中存在多个接收帧,上面的过程就重复多次。
4. 在离开HandleInterrupt()处理程序之前,至少要调用下面一次:
m_Lookahead.IndicateComplete(this);
这样调用NDIS说明当前接收突发结束。
5. 在TransferData()处理程序中调用:
m_Lookahead.Transfer(this, Packet, BytesToCopy, ByteOffset);
这将传输当前帧的部分给协议提供的分组。该当前帧的部分是协议请求的且偏移量为ByteOffset。
注意:在 m_Lookahead.Indicate()和Adapter::TransferData()调用之前,连续 miniports不能被调用(除了中断)。 完整交互过程都是DISPATCH_LEVEL ,卡上的中断去能了。当调用TransferData(),当前帧部分存在m_LookaheadData,部分仍然在卡上。KNdisLookahead::Transfer()知道从哪里传输数据。如果协议对该帧不敢兴趣,TransferData()处理程序就根本不调用。Lookahead缓冲将给下一个接收帧覆盖。
Members
KNdisLookahead
coohaze
驱动牛犊
驱动牛犊
  • 注册日期2003-02-21
  • 最后登录2008-12-16
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-22 09:48
好贴,顶
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-24 09:54
顶先
可惜没时间看
好好过日子
qqvsdd
驱动牛犊
驱动牛犊
  • 注册日期2008-04-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-07-18 11:14
先收藏了再说
可是(10)呢??
游客

返回顶部