下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络数据包收发流程(3): e1000 网卡和 dma2013-06-26 14:51:55标签:数据包数据流以太网原文出处: /uid-24148050-id-1667017.html 一、硬件布局每个网卡( mac)都有自己的专用上图中的红色线就是以太网数据流,dma engine,如上图的tsec 和 e1000 网卡dma 与 ddr打交道需要其他模块的协助,intel82546 。如 tsec,pcicontroller以太网数据在tsecddr pci_controllerddr之间的流动, cpu的 core 是不需要介入的只有在数
2、据流动结束时(接收完、 发送完),dma engine 才会以外部中断的方式告诉cpu 的core二、 dma engine上面是 dma engine 的框图,以接收为例:1.在 system memory 中为 dma 开辟一端连续空间,用来bd 数组(一致性dma 内存)bd 是给 dma engine 使用的,所以不同的设备,bd 结构不同,但是大致都有状态、长度、指针 3 个成员。2.初始化 bd 数组, status 为 e, length 为 0在 system memory 中再开辟一块一块的内存,可以不连续,用来存放以太网包将这些内存块的总线地址赋给buf( dma 映射)3
3、.当 mac 接收以太网数据流,放在了rx fifo中4.当一个以太网包接收完全后,dma engine 依次做以下事情fetch bd :开始一个个的遍历bd 数组,直到当前bd 状态为 empty 为止update bd :更新 bd 状态为 readymove data :把数据从rx fifo中搬移到system memory 中 dma 映射的部分generate interrupt :数据搬移完了,产生外部中断给cpu core5.cpu core 处理外部中断,此时以太网数据已经在system memory 中 dma 映射的部分了解除 dma 映射,更新bd 状态为 empty
4、再开辟一端内存,将这块内存的总线地址赋给bd 的指针字段三、内核中dma 相关 apivoid *dma_alloc_cohrent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag);功能:分配一致性dma 内存,返回这块内存的虚拟地址ea, 这块内存的物理地址保存在dma_handledev: null 也行size: 分配空间的大小dma_handle:用来保存内存的总线地址(物理地址)注意:一致性dma 映射, bd 所占内存就是靠dma_alloc_cohrent 来分配的。dma_addr_t *dm
5、a_map_single(struct device *dev, void *buffer, size_t size, enum dma_data_direction);功能:将一块连续的内存buffer映射为dma 内存来使用。映射后,cpu 不能再操作这块buffer返回:这块buffer 的总线地址(物理地址)dev: null 也行buffer:一块连续内存的虚拟地址easize:连续内存的大小dma_data_direction: dma数据流的方向注意:流式 dma来映射给bd 的映射,以太网包所占内存先通过kmalloc来分配,然后通过dma_map_single四、 e1000
6、驱动中的dma网卡驱动中使用dma的套路差不多都一样,以e1000驱动为例讲一下(tsec驱动的dma见这里)4.1 加载e1000网卡驱动e1000_probe() / 主要是初始化钩子函数netdev = alloc_etherdev(sizeof(struct e1000_adapter);netdev-open = &e1000_open; /重要netdev-stop = &e1000_close;netdev-hard_start_xmit = &e1000_xmit_frame;netdev-get_stats = &e1000_get_stats;netdev-set_mult
7、icast_list = &e1000_set_multi;netdev-set_mac_address = &e1000_set_mac;netdev-change_mtu = &e1000_change_mtu;netdev-do_ioctl = &e1000_ioctl;e1000_set_ethtool_ops(netdev);netdev-tx_timeout = &e1000_tx_timeout;netdev-watchdog_timeo = 5 * hz;#ifdef config_e1000_napinetif_napi_add(netdev, &adapter-napi,
8、e1000_clean, 64); /重要#endif4.1 启动 e1000 网卡e1000_open() / 当用户敲ifconfig up 命令时,最终调用网卡驱动的open 函数-e1000_setup_all_rx_resources(adapter)-e1000_setup_rx_resources(adapter, &adapter-rx_ringi)/ 给 rx bd 分配一致性dma 内存rxdr-desc = pci_alloc_consistent(pdev, rxdr-size, &rxdr-dma);-e1000_configure(adapter)-e1000_co
9、nfigure_rx(adapter)adapter-clean_rx = e1000_clean_rx_irq;adapter-alloc_rx_buf = e1000_alloc_rx_buffers;-调用adapter-alloc_rx_buf 钩子函数,即e1000_alloc_rx_buffers- skb = netdev_alloc_skb(netdev, bufsz); / 调用 kmalloc 新建一个skbbuffer_info-dma = pci_map_single(pdev,skb-data,adapter-rx_buffer_len,pci_dma_fromdev
10、ice); /给 skb-data 建立 dma 映射rx_desc-buffer_addr = cpu_to_le64(buffer_info-dma);/初始化 bd 的 buf 指针-e1000_request_irq(adapter);/ 挂 rx 中断 isr函数为e1000_intr()最终 bd 数据结构应该是下面这个样子4.2 e1000 的中断注意: e1000 产生 rx 中断时,以太网数据包已经在系统内存中,即在skb-data里面下面的中断处理过程就简略了,详细的看这里do_irq()中断上半部调用 e1000 网卡的 rx 中断函数e1000_intr()触发软中断(
11、使用 napi 的话 )中断下半部依次调用软中断的所有handler在 net_rx_action 中最终调用 e1000 的 napi_struct.poll() 钩子函数,即 e1000_cleane1000_clean() 最终调用e1000_clean_rx_irq()e1000_clean_rx_irq()rx_desc = e1000_rx_desc(*rx_ring, i); /获取 rx bdstatus = rx_desc-status;skb = buffer_info-skb;buffer_info-skb = null;pci_unmap_single(pdev, / 解除 skb-data 的 dma 映射buffer_info-dma,buffer_info-length,pci_dma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大箐山县公务员招聘笔试备考题库及答案解析
- 2026年镇宁布依族苗族自治县事业单位人员招聘笔试参考题库及答案解析
- 2026年积石山保安族东乡族撒拉族自治县公务员招聘考试参考题库及答案解析
- 2026年阳谷县公务员招聘考试备考试题及答案解析
- 电子产品研发合作生产合同协议二篇
- 2026年阳谷县公务员招聘笔试参考题库及答案解析
- 2026年措美县公务员招聘考试备考题库及答案解析
- 2026年襄城县事业单位人员招聘笔试参考题库及答案解析
- 2026年绩溪县公务员招聘考试参考题库及答案解析
- 2026四川巴中经济开发区人力资源和社会保障服务中心招聘第八批城镇公益性岗位人员4人考试备考试题及答案详解
- PCB成型工序培训
- QGDW1168-2013输变电设备状态检修试验规程
- 初中地理课堂教学设计
- 《基础临床营养学》课件
- 探伤检测合同协议
- 国家基层糖尿病防治管理指南2022
- 复印机租赁合同
- 水闸工程管理规程DB41-T 1972-2020
- 房屋建筑和市政基础设施工程勘察文件编制深度规定(2020年版)
- 飞机仪电与飞控系统原理智慧树知到期末考试答案章节答案2024年中国人民解放军海军航空大学
- 年轻恒牙的牙髓治疗
评论
0/150
提交评论