77范文网 - 专业文章范例文档资料分享平台

Atherose pb42无线AP简要分析 (2)(4)

来源:网络收集 时间:2018-12-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

Start接口是否UPN清除中断标志,关闭该类中断检查中断状态字HAL_INT_FATALHAL_INT_RXHAL_INT_TXFatal Error Tasklet关闭接收中断关闭发送中断调用ath_rx_tasklet调用ath_tx_taskletEnd中断处理过程

1. 网络设备wifi0打开的时候会调用ath_init()函数(if_ath.c),该注册了中断处理函数:

irqreturn_t ath_intr(int irq, void *dev_id, struct pt_regs *regs) 2. 中断处理过程:

a) 调用ath_hal_intrpend(ah),查看是否为自己的设备产生的中断,如果不是则返

回。

b) 如果NIC没有Open则调用ath_hal_getisr(ah, &status); /* clear ISR */和

ath_hal_intrset(ah, 0); /* disable further intr's */

c) 调用ath_hal_getisr(ah, &status);获得产生中断的类型,根据不同的类型进行不

同的处理。HAL_INT_RX为数据接收中断,调用ATH_SCHEDULE_TQUEUE(&sc->sc_rxtq, &needmark);HAL_INT_TX为数据发送中断,调用ATH_SCHEDULE_TQUEUE(&sc->sc_txtq, &needmark),启动相应的工作队列。

3. 接收工作队列处理函数static void ath_rx_tasklet(TQUEUE_ARG data)

a) 从struct ath_softc的sc_rxbuf中取出第一个空闲的struct ath_buf b) 调用ath_hal_rxprocdescfast(),与HAL层同步descript,获得状态 c) 检查状态并处理各种接收错误

d) 如果net80211协议栈没有该站点信息,则新建立一个站点信息,计算RSSI e) 如果是聚合帧,则调用owl_input函数处理数据帧,否则调用ieee80211_input

传递数据帧到协议栈

Start从队列中取出一个ath_buf与HAL层同步Desc,获取状态rx_stats处理接收错误YRx_stats != 0从队列中取出一个ath_buf协议栈是否有该node?Y记录RSSIY生成一个新nodeAggressive?owl_input处理aggresive帧ieee80211_input传递数据给协议栈ath_led_eventY还有待处理buf?EndAth_rx_tasklet流程图

4. net802.11协议栈处理接收到的数据帧(检查是否关联、是否需要解密、是否为

AMSDU帧……),通过调用ieee80211_deliver_data函数,最终调用了netif_rx。

netif_rx () 内核 ieee80211_deliver_data () MAC层 ieee80211_input () ath_rx_tasklet () 物理驱动层 ath_intr() 产生接收中断 NIC 数据帧接收流程图 硬件层 5.5 数据发送

各个虚拟VAP的dev数据结构中的hard_start_xmit()函数指针赋值为ieee80211_hardstart()。

dev_queue_xmit () 内核 hard_start_xmit () ieee80211_hardstart() 查到目的node? Y 是否关联? Y Y 驱动 PowerSave? ieee80211_pwrsave()缓存待发送数据帧 skb->dev = parent skb的dev指向物理设备 丢弃数据帧 dev_queue_xmit () 数据帧发送流程图

5.6 参数配置

atheros的无线驱动的参数配置通过Linux Wireless Extension定义的标准ioctl集以及atheros定义的私有ioctl集来完成。驱动层的wlan.ko负责处理这些ioctl。

5.6.1 Linux Wireless Extensions处理函数(标准部分)

static struct iw_handler_def ieee80211_iw_handler_def = { #define N(a) (sizeof (a) / sizeof (a[0]))

.standard = (iw_handler *) ieee80211_handlers, .num_standard = N(ieee80211_handlers),

.private = (iw_handler *) ieee80211_priv_handlers, .num_private = N(ieee80211_priv_handlers),

.private_args = (struct iw_priv_args *) ieee80211_priv_args, .num_private_args = N(ieee80211_priv_args), #undef N };

static const iw_handler ieee80211_handlers[] = {

(iw_handler) NULL, /* SIOCSIWCOMMIT */

(iw_handler) ieee80211_ioctl_giwname, /* SIOCGIWNAME */ (iw_handler) NULL, /* SIOCSIWNWID */ (iw_handler) NULL, /* SIOCGIWNWID */

(iw_handler) ieee80211_ioctl_siwfreq, /* SIOCSIWFREQ */ (iw_handler) ieee80211_ioctl_giwfreq, /* SIOCGIWFREQ */ (iw_handler) ieee80211_ioctl_siwmode, /* SIOCSIWMODE */ (iw_handler) ieee80211_ioctl_giwmode, /* SIOCGIWMODE */ (iw_handler) ieee80211_ioctl_siwsens, /* SIOCSIWSENS */ (iw_handler) ieee80211_ioctl_giwsens, /* SIOCGIWSENS */ (iw_handler) NULL /* not used */, /* SIOCSIWRANGE */ (iw_handler) ieee80211_ioctl_giwrange, /* SIOCGIWRANGE */ (iw_handler) NULL /* not used */, /* SIOCSIWPRIV */ (iw_handler) NULL /* kernel code */, /* SIOCGIWPRIV */ (iw_handler) NULL /* not used */, /* SIOCSIWSTATS */ (iw_handler) NULL /* kernel code */, /* SIOCGIWSTATS */ (iw_handler) NULL, /* SIOCSIWSPY */ (iw_handler) NULL, /* SIOCGIWSPY */ (iw_handler) NULL, /* -- hole -- */ (iw_handler) NULL, /* -- hole -- */

(iw_handler) ieee80211_ioctl_siwap, /* SIOCSIWAP */ (iw_handler) ieee80211_ioctl_giwap, /* SIOCGIWAP */ (iw_handler) NULL, /* -- hole -- */

(iw_handler) ieee80211_ioctl_iwaplist, /* SIOCGIWAPLIST */ #ifdef SIOCGIWSCAN

(iw_handler) ieee80211_ioctl_siwscan, /* SIOCSIWSCAN */ (iw_handler) ieee80211_ioctl_giwscan, /* SIOCGIWSCAN */ #else

(iw_handler) NULL, /* SIOCSIWSCAN */ (iw_handler) NULL, /* SIOCGIWSCAN */ #endif /* SIOCGIWSCAN */

(iw_handler) ieee80211_ioctl_siwessid, /* SIOCSIWESSID */ (iw_handler) ieee80211_ioctl_giwessid, /* SIOCGIWESSID */ (iw_handler) ieee80211_ioctl_siwnickn, /* SIOCSIWNICKN */ (iw_handler) ieee80211_ioctl_giwnickn, /* SIOCGIWNICKN */ (iw_handler) NULL, /* -- hole -- */ (iw_handler) NULL, /* -- hole -- */

(iw_handler) ieee80211_ioctl_siwrate, /* SIOCSIWRATE */ (iw_handler) ieee80211_ioctl_giwrate, /* SIOCGIWRATE */ (iw_handler) ieee80211_ioctl_siwrts, /* SIOCSIWRTS */ (iw_handler) ieee80211_ioctl_giwrts, /* SIOCGIWRTS */ (iw_handler) ieee80211_ioctl_siwfrag, /* SIOCSIWFRAG */ (iw_handler) ieee80211_ioctl_giwfrag, /* SIOCGIWFRAG */ (iw_handler) ieee80211_ioctl_siwtxpow, /* SIOCSIWTXPOW */

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Atherose pb42无线AP简要分析 (2)(4)在线全文阅读。

Atherose pb42无线AP简要分析 (2)(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/391962.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: