无线局域网NDIS小端口驱动实现
时间:08-31
来源:互联网
点击:
5 发送数据
当需要发送数据包时,NDIS调用MiniportSend 函数,对应本设计中wlan_drvAdapter::Send函数。如果当前没有数据包正在被发送,则调用 CopyDataDown(Packet)将数据发送给NIC,否则将数据插入发送队列。当中断产生后,发现代表网卡准备好接收下一个包,此时将数据包出列。
CopyDataDown(Packet)函数与具体的网卡实现有关。
6 接收数据
由于本设计中的网卡是程控I/O的网卡,速度较慢。每次产生中断时,如果发现NIC上缓存了一个数据包需要接收,则通过NdisMEthIndicateReceive 通知给NDIS,对应于m_Lookahead.In di cate函数。如果是DMA设备,可以一次将整个数据包通知给上层,对于PIO方式的NIC,DDK建议只通知部分数据,然后让NDIS调用MiniportTransferData来读取余下的数据。当然NDIS也许对该数据不感兴趣,就不会读剩下的数据。
7 中断处理
与中断处理有关的函数包括中断服务程序 wlan_drvAdapter::Isr和延迟过程调用函数wlan_drvAdapter::HandleInterrupt。
中断服务程序Isr工作在DIRL,会抢断工作在更低中断优先级的线程,所以应该尽快退出。该程序的主要任务是判断中断当前是否是本网卡产生的,如果没有应该将*InterruptRecognized 设定为FALSE,并退出程序。如果是,则将中断处理程序HandleInterrupt插入DPC列队,以在Passive Level上进一步处理中断。
中断处理程序是真正处理中断的函数,它完成所有数据处理工作,它需要处理包括与统计信息有关的接收数据、发送数据等所有中断。
8 结论
网络设备驱动程序是无线局域网网络接口卡实现的关键部分,它与传统的以太网卡稍有不同,但网卡与主机之间数据通信的基本格式与以太线网卡是相同的。本文首先介绍了小端口驱动程序的特点,然后给出了基于DriverStudio开发PCMCIA接口程控I/O方式工作的无线局域网网卡的NDIS小端口驱动程序,其主体部分中包括驱动程序框架、驱动程序的初始化、发送和接收数据和中断处理在内的关键技术细节。本文所设计的网卡已经在原型网卡中运行,基本满足了设计要求。
当需要发送数据包时,NDIS调用MiniportSend 函数,对应本设计中wlan_drvAdapter::Send函数。如果当前没有数据包正在被发送,则调用 CopyDataDown(Packet)将数据发送给NIC,否则将数据插入发送队列。当中断产生后,发现代表网卡准备好接收下一个包,此时将数据包出列。
CopyDataDown(Packet)函数与具体的网卡实现有关。
6 接收数据
由于本设计中的网卡是程控I/O的网卡,速度较慢。每次产生中断时,如果发现NIC上缓存了一个数据包需要接收,则通过NdisMEthIndicateReceive 通知给NDIS,对应于m_Lookahead.In di cate函数。如果是DMA设备,可以一次将整个数据包通知给上层,对于PIO方式的NIC,DDK建议只通知部分数据,然后让NDIS调用MiniportTransferData来读取余下的数据。当然NDIS也许对该数据不感兴趣,就不会读剩下的数据。
7 中断处理
与中断处理有关的函数包括中断服务程序 wlan_drvAdapter::Isr和延迟过程调用函数wlan_drvAdapter::HandleInterrupt。
中断服务程序Isr工作在DIRL,会抢断工作在更低中断优先级的线程,所以应该尽快退出。该程序的主要任务是判断中断当前是否是本网卡产生的,如果没有应该将*InterruptRecognized 设定为FALSE,并退出程序。如果是,则将中断处理程序HandleInterrupt插入DPC列队,以在Passive Level上进一步处理中断。
中断处理程序是真正处理中断的函数,它完成所有数据处理工作,它需要处理包括与统计信息有关的接收数据、发送数据等所有中断。
8 结论
网络设备驱动程序是无线局域网网络接口卡实现的关键部分,它与传统的以太网卡稍有不同,但网卡与主机之间数据通信的基本格式与以太线网卡是相同的。本文首先介绍了小端口驱动程序的特点,然后给出了基于DriverStudio开发PCMCIA接口程控I/O方式工作的无线局域网网卡的NDIS小端口驱动程序,其主体部分中包括驱动程序框架、驱动程序的初始化、发送和接收数据和中断处理在内的关键技术细节。本文所设计的网卡已经在原型网卡中运行,基本满足了设计要求。
- 蓝牙无线电调制解调器Siw1701原理与应用(02-19)
- 嵌入式移动数据库的关键技术(03-20)
- 在嵌入式SQL中怎样使用游标(08-12)
- 嵌入式Linux系统软件开发学习思路详细介绍 (08-20)
- 基于AVR单片机的嵌入式“瘦服务器”系统设计思想(03-11)
- 嵌入式系统设计中的存储碎片收集策略(05-04)
