cs8900网卡驱动解析(五)
来源:互联网 发布:西储大学轴承数据下载 编辑:程序博客网 时间:2024/06/05 13:30
几个主要的模块的都写完了,下面开始介绍一下其他的函数。
和net_open对应的函数:
/* The inverse routine to net_open(). *//*①停止队列②关闭网卡③释放中断*/static int net_close(struct net_device *dev){netif_stop_queue(dev);writereg(dev, PP_RxCFG, 0);writereg(dev, PP_TxCFG, 0);writereg(dev, PP_BufCFG, 0);writereg(dev, PP_BusCTL, 0);free_irq(dev->irq, dev);/* Update the statistics here. */return 0;}
再看一下cs8900是如何获取统计信息的:
/*向用户反馈设备状态和统计信息net_device_stats,这是一个net_local的结构体成员。*/static struct net_device_stats *net_get_stats(struct net_device *dev){struct net_local *lp = (struct net_local *)dev->priv;unsigned long flags;//不追了,这个就知道它是在读取各个寄存器状态的信息//然后都存放在net_device_stats这个结构体中,结构体的具体定义在内核中实现。spin_lock_irqsave(&lp->lock, flags);/* Update the statistics from the device registers. */lp->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);lp->stats.collisions += (readreg(dev, PP_TxCol) >> 6);spin_unlock_irqrestore(&lp->lock, flags);return &lp->stats;}
stats是一个net_device_stats结构,其实说简单点,你只要返回stats结构就可以了,它里面记录了你需要的信息。net_device_stats结构在netdevice.h文件中。
struct net_device_stats{ unsigned long rx_packets; /* total packets received */ unsigned long tx_packets; /* total packets transmitted */ unsigned long rx_bytes; /* total bytes received */ unsigned long tx_bytes; /* total bytes transmitted */ unsigned long rx_errors; /* bad packets received */ unsigned long tx_errors; /* packet transmit problems */ unsigned long rx_dropped; /* no space in linux buffers */ unsigned long tx_dropped; /* no space available in linux */ unsigned long multicast; /* multicast packets received */ unsigned long collisions; /* detailed rx_errors: */ unsigned long rx_length_errors; unsigned long rx_over_errors; /* receiver ring buff overflow */ unsigned long rx_crc_errors; /* recved pkt with crc error */ unsigned long rx_frame_errors; /* recv'd frame alignment error */ unsigned long rx_fifo_errors; /* recv'r fifo overrun */ unsigned long rx_missed_errors; /* receiver missed packet */ /* detailed tx_errors */ unsigned long tx_aborted_errors; unsigned long tx_carrier_errors; unsigned long tx_fifo_errors; unsigned long tx_heartbeat_errors; unsigned long tx_window_errors; /* for cslip etc */ unsigned long rx_compressed; unsigned long tx_compressed;};
cs8900_get_stats这个函数虽然简单,但是很实用。
cs8900_set_receive_mode函数设置网卡模式,需要配合手册来阅读。出现的新函数(cs8900_set和cs8900_clear)实际上就是cs8900_write,就是通过与(&)或(|)运算,实用set和clear字样,会使函数非常易读。
大神一句话:对网卡的控制需要熟读硬件手册。
其实还有很多的函数没有写,同时我自己也有很多地方没有弄懂,不过三天都在看着不到七百行的代码了。我觉得我写的注释还可以,如果谁想要这套代码可以给我留言的。
- cs8900网卡驱动解析(五)
- cs8900网卡驱动解析(一)
- cs8900网卡驱动解析(二)
- cs8900网卡驱动解析(三)
- cs8900网卡驱动解析(四)
- CS8900 Linux 网卡驱动分析
- CS8900 U-boot 网卡驱动分析
- Linux网卡驱动分析--(结合cs8900)
- Linux网卡驱动分析--(结合cs8900)
- Linux网卡驱动分析--(结合cs8900)
- wince5.0之CS8900网卡驱动开发(转载自CSDN论坛)
- u-boot-2008-10添加CS8900网卡驱动移植(分析)
- 基于s3c2410 2.6.30内核cs8900网卡驱动的移植
- 基于linux-2.6.33的网卡驱动之cs8900
- cs8900网卡驱动安装,内核2.6.33,处理器samsung2410
- SkyEye1.3.1 + ArmLinux2.6.20 下安装cs8900网卡驱动
- Cs8900网卡驱动程序分析
- 嵌入式学习-驱动开发-lesson7.1-网卡驱动架构分析驱动及CS8900流程分析
- GTK程序--GTKENTRY模拟登录框
- win7硬盘安装ubuntu
- 用Spring更好地处理Struts动作三种整合
- 网络编程之同步,阻塞,异步,非阻塞
- 做开发----你的位置在哪里?
- cs8900网卡驱动解析(五)
- linux_java调用windows_matlab程序
- 黑马程序员--第十五天:泛型
- Struts2框架安全缺陷
- gtk+程序设计概述
- 学生管理系统 实时错误’91': 对象变里或with块变里未设置
- 赢在云时代——企业云计算战略、方法和路线图
- html.ActionLink的几种参数格式
- 一致性哈希算法与Java实现