`
mmdev
  • 浏览: 13229804 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

cs8900网卡驱动简要解析(7)

阅读更多
上一次讲的cs8900_receive函数是在中断处理函数中调用的,也就是当中断到来,如果判断出是数据接收情况,则通过这个函数进行数据接收。那么如果中断是由于其他事件触发的呢,当然就需要其他代码了,不过那些代码并不难,大家自己看就是了。
中断的内容讲完后,cs8900_start函数也算告一段落,我们回到最初的cs8900_init函数中。在cs8900_start之后的就是cs8900_stop了:
ndev->stop = cs8900_stop;
这个函数基本上是open的反操作:关闭网卡、释放中断、停止队列。
所以为一个网卡写驱动,主要是读懂它的手册,这样你才知道哪个寄存器做什么,它的工作方式等。留一个作业吧,结合手册和下面代码,理解cs8900网卡的关闭方式:
cs8900_write (dev,PP_BusCTL,0);
cs8900_write (dev,PP_TestCTL,0);
cs8900_write (dev,PP_SelfCTL,0);
cs8900_write (dev,PP_LineCTL,0);
cs8900_write (dev,PP_BufCFG,0);
cs8900_write (dev,PP_TxCFG,0);
cs8900_write (dev,PP_RxCTL,0);
cs8900_write (dev,PP_RxCFG,0);
释放中断和申请中断又是一对,只管调用就是了:
free_irq (dev->irq,dev);
还记得在cs8900_start函数中调用了netif_start_queue吗?那么在关闭网卡后调用netif_stop_queue 就是了。
如果按代码顺序讲,该介绍cs8900_send_start了,不过这个函数比较重要,我们放在下一节单独介绍。我们先看它后面的代码:
ndev->get_stats = cs8900_get_stats;
ndev->set_multicast_list = cs8900_set_receive_mode;
ndev->tx_timeout = cs8900_transmit_timeout;
我们的cs8900网卡只实现了这些函数。根据网卡的不同,你可能需要自己完成更多的函数。不过就get_stats、set_multicast_list和tx_timeout来说,它们完成的任务是相同的,分别是获取统计信息、处理多播网包、超时处理。
先看一下cs8900是如何获取统计信息的:
static struct net_device_stats *cs8900_get_stats (struct net_device *dev)
{
cs8900_t *priv = (cs8900_t *) dev->priv;
return (&priv->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字样,会使函数非常易读。
一句话总结:对网卡的控制需要熟读硬件手册。
分享到:
评论

相关推荐

    CS8900A网卡驱动程序分析

    例如,通过阅读"CS8900A网卡驱动程序分析.txt"文件,我们可以找到驱动程序的关键函数,如初始化函数、中断处理函数、发送和接收函数等,从而理解它们如何协同工作以支持网卡的正常运行。 总的来说,CS8900A网卡驱动...

    cs8900网卡驱动源码

    这个压缩包包含的是CS8900网卡的驱动源码,是理解网络驱动程序工作原理和开发相关硬件接口的重要参考资料。驱动源码主要由`cs8900.c`和`cs8900.h`组成,而`cs8900.o`则是编译后的目标文件,可能是用于ARM-LINUX-GCC...

    cs8900 网卡驱动(s3c2410 linux2.6)

    《CS8900网卡驱动在S3C2410 Linux 2.6内核中的应用与移植详解》 在嵌入式系统开发中,驱动程序是连接硬件设备和操作系统的重要桥梁,尤其是对于网络接口控制器(NIC)而言,其驱动程序的正确配置和优化对系统的网络...

    移植到linux2.6内核的cs8900网卡驱动

    本文将深入探讨如何将一个针对cs8900网卡的驱动程序移植到Linux 2.6内核,并在S3C2410开发板上运行。 cs8900是一款古老的以太网控制器,由National Semiconductor公司(现已被Texas Instruments收购)生产。它广泛...

    2440 cs8900a 网卡驱动程序

    【标题】"2440 cs8900a 网卡驱动程序"涉及到的是在嵌入式系统中,针对Samsung S3C2440处理器和CS8900A网络控制器的驱动程序开发。S3C2440是一款广泛应用的ARM9处理器,而CS8900A则是一款低功耗、高性能的以太网控制...

    cs8900a网卡驱动程序

    cs8900a linux驱动程序

    cs8900网卡驱动移植

    网卡驱动采用3.4.2内核里提供的cs89x0.c 移植到fs2410中

    s3c2410的cs8900网卡驱动 基于linux 2.6.18

    标题提到的“s3c2410的cs8900网卡驱动 基于linux 2.6.18”,是指为S3C2410微处理器平台适配的、用于CS8900A网络接口控制器的驱动程序,这个驱动是基于Linux 2.6.18内核版本构建的。 S3C2410是一款由Samsung公司设计...

    cs8900 驱动示例

    【cs8900驱动示例】是针对嵌入式系统中的一种网络接口控制器——CS8900的驱动程序实现。CS8900是一款常见的以太网控制器,广泛应用于各种嵌入式设备和单板计算机中,如基于ARM架构的S3C2440处理器平台。在嵌入式领域...

    基于linux-2.6.33网卡驱动之cs8900

    总的来说,基于Linux-2.6.33内核的cs8900网卡驱动开发涉及的知识点包括:C语言编程,Linux内核驱动开发框架,CS8900A硬件特性,中断处理,网络协议栈的接口,设备模型,以及驱动程序的移植技术。通过研究这些内容,...

    S3C2410网卡CS8900A驱动程序的移植及问题解析

    【S3C2410网卡CS8900A驱动程序的移植及问题解析】 S3C2410是一款基于ARM920T内核的微处理器,广泛应用于嵌入式系统,如开发板SBC-2410X。在这样的平台上,集成网络功能通常依赖于特定的网卡驱动程序。本文将详细...

    CS8900驱动移植

    本文将详细介绍如何针对S3C2410处理器移植CS8900的网卡驱动。 #### 二、CS8900概述 CS8900是一款高性能、低成本的单芯片快速以太网控制器,它支持10BASE-T和100BASE-TX标准,适用于各种嵌入式应用场合。CS8900具有...

    CS8900liunx驱动

    同时,通过对CS8900驱动的研究,还可以掌握通用的网络驱动开发技巧,为将来开发其他网络设备的驱动打下基础。 总之,Linux下的CS8900驱动程序是实现该网络芯片在Linux系统中正常工作的关键,其源码不仅包含了硬件...

    博通黑苹果无线网卡BCM943602CS(Windows驱动)

    "卖家给的驱动"则可能是第三方商家为了方便用户在Windows系统下使用BCM943602CS无线网卡而提供的驱动程序。这些驱动可能包含了特定的优化或者更新,以适应不同用户的需求和系统环境。与Boot Camp提供的驱动相比,...

    cs8900网卡芯片手册

    ### CS8900A 网卡芯片详解 #### 一、概述 CS8900A是一款低成本的以太网局域网控制器,它针对行业标准架构(ISA)总线以及通用微控制器总线进行了优化设计。该控制器通过高度集成化的设计,有效地消除了其他以太网...

    943602CS网卡驱动.rar

    标题中的“943602CS网卡驱动.rar”表明这是一个包含943602CS型号网络适配器驱动程序的压缩文件,适用于Windows操作系统。这种驱动程序是计算机硬件与操作系统之间的桥梁,允许系统识别并充分利用网络硬件的功能。 ...

    (国嵌)Cs8900a网卡驱动分析.doc

    根据提供的文档信息,本文将对CS8900A网卡驱动进行详细的分析与解读,主要涉及寄存器的功能及用途、驱动程序的核心框架以及数据发送机制等方面。 ### CS8900A网卡驱动寄存器分析 #### 1.1 LINECTL (0112H) 该...

    linux下移植好的CS8900驱动源文件

    Linux2.6.30上移植好的基于S3C2440的CS8900网卡驱动,这份网卡驱动源码在扬创utu2440-F开发板已验证通过! 如果有什么问题,可以参考我CSDN上的博客:http://blog.csdn.net/reille/上相关文章

Global site tag (gtag.js) - Google Analytics