环境

BCM6756驱动程序。

驱动初始化

源码路径:

bcmdrivers/opensource/net/enet/impl7/

以下为BCM网卡驱动初始化的概要。初始化工作主要在bcm_enet_init_post函数中,该驱动适配了支持设备树和不支持设备树两种,不支持设备树的情况下,bcm_enet_init直接调用bcm_enet_init_post完成网卡驱动的初始化。

bcm_enet_init();/* 注册网卡设备(设备树),在prob函数中调用bcm_enet_init_post */register_enet_platform_device();bcm_enet_init_post();phy_drivers_init(); /* PHY 驱动初始化 */sw_init(); /* switch 初始化,BCM这里把BCM6756自带的网卡也初始化为switch */enet_create_netdevice(); /* 创建网络设备 */port_init();  /* port 初始化 */enetxapi_queues_init();init_waitqueue_head (&chan->rxq_wqh);  /* 初始化接收事件chan->rxq_wqh */kthread_run(chan_thread_handler, chan, "bcmsw_rx");  /* 创建内核线程(接收数据) */cpu_queues_init();  /*初始化队列,并创建数据包回收线程bcmsw_recycle */archer_enet_host_bind(); /* 注册硬件驱动相关内容,如:中断回调 */

网卡驱动接收函数调用关系

下图主要展现了chan_thread_handler函数调用关系图。硬件驱动接收程序不可见,回调由archer_driver_host_bind函数注册。

  • chan_thread_handler是一个内核线程,由硬件中断程序驱动。在enetx_rx_isr中会唤醒等待队列。
  • mux_port_rx是一个回调函数,指向驱动程序mux_index.c文件的mux_get_rx_index函数。
  • 加速失败后rx_skb会通过skb_header_alloc分配sk_buff结构,将fkb转化成skb接收,用于后续处理。
  • fkb是BCM中驱动数据缓存器,是一块DMA内存,用于底层驱动和加速使用。
static inline int rx_pkt(enetx_channel *chan, int budget)
{int i, rc , count;/* Receive up to budget packets while Iterating over queues in channel by priority */for (count = 0, i = 0; i < chan->rx_q_count && count < budget; i++){rc = rx_pkt_from_q(chan->rx_q[i], budget - count);count += rc;/*do not continue process an empty queue*/if(rc == 0)continue;}return count;
}
  • chan->rx_q_count表示接收队列大小,chan->rx_q[]表示接收队列。该参数enetxapi_queues_init函数中初始化。chan->rx_q_count为NUM_RX_QUEUES(2),一个高速队列一个低速队列。先处理高速队列。这里使用NAPI,因为线程是有时间片的,处理过程会超时,这里可以理解为中断下半部。

BCM以太网驱动初始化简要相关推荐

  1. 在U-boot中添加以太网驱动-Nazgul

    当定义CONFIG_CMD_NET和CONFIG_CMD_PING,编译之后执行ping命令,告警没有找到以太网. 因此,需要打开U-boot的网络功能, u-boot-sunxi-sunxi中没有找 ...

  2. GIC/ITS代码分析(3)ITS驱动初始化

    这里对ITS再作简要介绍.在GICv3中,外设通过写GITS_TRANSLATER,根据所写内容解析出device_id和event_id,根据device_id找到设备所对应的Device Tabl ...

  3. Linux驱动学习--linux以太网驱动及硬件结构介绍(结合gmac项目分析)

    目录 1.引言 2.以太网硬件结构 3.以太网驱动分析(结合gmac项目) 3.1 dts节点分析 3.2 gmac驱动源码分析(open 收发包机制简要分析) 一.引言 最近在Android项目中, ...

  4. Linux网络设备驱动-以太网驱动分析

    1.概述 网络上数据包的发送和接收由网络设备完成.网络设备与字符设备.块设备不同,其并不对应于/dev目录下的文件,也不能使用常规的操作方法操作网络设备.现在比较通用的做法是通过套接字访问网络设备.网 ...

  5. linux以太网驱动总结

    linux以太网驱动总结 工作中涉及linux以太网驱动,涉及代码:drivers/net/ethernet/stmicro/,drivers/net/phy/,进行一下总结. 概要: 1.以太网硬件 ...

  6. DPDK pmd驱动初始化(十九)

    在没有引入pmd用户态网卡驱动之前, 网卡在收到报文后,网卡驱动会将报文从网卡缓冲区拷贝到内核, 接着内核在把报文拷贝到应用层,整个过程需要2次的拷贝以及系统调用.当应用层需要发送数据时,应用层将报文 ...

  7. Android 图形驱动初始化

    从应用程序的角度看 OpenGL 图形系统的接口,主要包括两大部分,一部分是 EGL,它为 OpenGL 渲染准备环境:另一部分是 OpenGL,它执行图形渲染.通过这些接口构造渲染环境,并执行渲染的 ...

  8. c++ map 初始化_如何调整Linux内核启动中的驱动初始化顺序?

    如何调整Linux内核启动中的驱动初始化顺序?[问题] 此处我要实现的是将芯片的ID用于网卡MAC地址,网卡驱动是enc28j60_init. 但是,读取芯片ID的函数,在as352x_afe_ini ...

  9. Android 图形驱动初始化(二十三)

    从应用程序的角度看 OpenGL 图形系统的接口,主要包括两大部分,一部分是 EGL,它为 OpenGL 渲染准备环境:另一部分是 OpenGL,它执行图形渲染.通过这些接口构造渲染环境,并执行渲染的 ...

最新文章

  1. pfsense软路由防火墙(安装过程、L2tp配置)
  2. 直播预告丨6 大趋势,5 种核心能力,证券业数字新基建趋势全面解读
  3. 以太坊虚拟机EVM的缺陷与不足
  4. static_const和reinterpret_cast
  5. 打开页面默认弹出软键盘,同时兼容iOS和Android
  6. 去银行贷款,有中介和没中介的巨大差别
  7. 使用混合多云每个人都应避免的3个陷阱(第1部分)
  8. 【计算机视觉】opencv姿态解算6 理论算法调研 PNP问题 5种算法
  9. (22)Xilinx FPGA开发软件chipscope(FPGA不积跬步101)
  10. 中文在线语音识别技术获重大突破!百度输入法准确率超行业最高水平15%
  11. vuebaidumap 删除覆盖物_vue实现根据多选框按钮,动态给百度地图添加和删除相应的覆盖物...
  12. android下拉菜单_如何调整和重新排列Android的快速设置下拉菜单
  13. matlab 求隐含波动率,matlab求解资产隐含波动率及无风险利率初探.doc
  14. unity 将 .prefab 转换为 txt 格式
  15. 加速ubuntu开机速度 【以后看】
  16. MIUI12可以升级鸿蒙,MIUI12适用机型汇总 MIUI12哪些机型可以升级?
  17. TRUE PARTNER迎来戴维斯双击,资产规模业绩双增长
  18. OpenStack 计算节点关机,虚拟机状态解决办法
  19. 【HJ42 学英语】C++
  20. 移动端 简易的table表格

热门文章

  1. 【Pygame经典合集】​​​​​​终极白给大招:让你玩儿到爽(附多款游戏源码)
  2. 如何将计算机调整为英语,怎么把电脑设置为英文版的系统
  3. Javascript交互式网页设计试题(一)
  4. Python工具箱系列(八)
  5. STC15系列单片机SPI使用教程(一)
  6. android 常驻通知,android实现常驻通知栏遇到的问题及解决办法
  7. windows7怎么升级10_lol手游怎么升级快 英雄联盟手游升到10级最快技巧分享[多图]-手游问答...
  8. Java Development - Collections
  9. 视频教程-从如何应聘运营工作到运营高手之路-运营管理
  10. 【学术相关】年度重磅|从2020年中科院分区表看IEEE期刊投稿