荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: dean.bbs@bbs.zju.edu.cn (丁丁), 信区: Linux
标  题: Tulip网卡驱动简析(3)
发信站: 浙江大学海纳百川 (Mon Nov 17 13:11:54 2003)
转信站: SZU!news.ccie.net.cn!ZJUBBS

发信人: adoal (U+963F U+8C46), 信区: LinuxDev
标  题: zz: Tulip网卡驱动简析(3)
发信站: 飘渺水云间 (Thu Oct  2 21:19:50 2003), 转信


Tulip网卡驱动简析(3)

Interrupt.c

void tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)

这是个ISR(Interrupt Service Routine)程序,也就是系统接收到中断时调用的
函数。这个函数首先会读取存储网卡状态的寄存器,判断中断原因,比如接收到
数据,或者发送完毕等等。在着之前,函数会先判断这个中断是否属于它。

csr5 = inl(ioaddr + CSR5);
读取网卡状态(中断状态)。ioaddr就是基地址,CSR5是一个偏移量(offset)。
接着会判断这个中断是否属于它。
接下来就是处理过程了:

outl(csr5 & 0x0001ffff, ioaddr + CSR5);
先把中断清除,也就是告诉硬件,这些中断已经处理了,新的中断可以进来了。
接下来是判断CSR5的值,根据不同的值进行不同的处理:

if (csr5 & (RxIntr | RxNoBuf))
接收到一个包,或者Rx buffer满了,这时就调用tulip_rx()函数来处理,处理完
后还会调用tulip_refill_rx()来重新设置rx buffer。

if (csr5 & (TxNoBuf | TxDied | TxIntr | TimerInt))
这里是tx的中断。这部分里面会挡住中断,防止race condition的发生。这些是
ISR函数必须考虑的,有些时候需要挡中断,有些时候不需要挡中断,要根据具体
情况而定。
如果是数据发送完毕,就把相应的skb释放掉;如果是出错,就重新启动rxtx,还
会把错误记录下来。


int tulip_refill_rx(struct net_device *dev)

这个函数把rx buffer重新设置好,供网卡使用。里面涉及到一些ring buffer的操
作。

static int tulip_rx(struct net_device *dev)

这个就是处理接收到的数据的函数。
对接收到的数据会有一些检查,比如check sum。错误的数据是不会传给上层的,一
对接收到的数据会有一些检查,比如check sum。错误的数据是不会传给上层的,一
般会丢弃。还会检查地址是否符合alignment的要求等等。接着就会把接收到的数据
传给上层。调用函数:
skb_put(skb, pkt_len);
Linux下发送和接收的接口用的都是struct sk_buff,有兴趣可以去查找一下这个结构
的定义。(怎么查找?当然是grep了!)

好了,我想写的都写完了,把网卡驱动中最主要的部分都说了一下,希望对大家有所
帮助。相信大家对网卡,或者说Linux的设备驱动有了更深的了解,如果我的文章能够
对你有所帮助,那么我就很高兴了。

明天mm就要回来了,祝我好运吧!

--
  ╭════╮╭════╮╭════╮╭════╮╭══╮

  ║╔      ║║╔      ║║╔      ║║╔      ║║╔  ║

  ║║╭═╮║╰╮  ╭╮║║║  ╭╮║║║╭═╮║║║  ║

  ║  ╰═╯║  ║  ║║║║    ║║║

static int tulip_rx(struct net_device *dev)

这个就是处理接收到的数据的函数。
对接收到的数据会有一些检查,比如check sum。错误的数据是不会传给上层的,一
对接收到的数据会有一些检查,比如check sum。错误的数据是不会传给上层的,一
般会丢弃。还会检查地址是否符合alignment的要求等等。接着就会把接收到的数据
传给上层。调用函数:
skb_put(skb, pkt_len);
Linux下发送和接收的接口用的都是struct sk_buff,有兴趣可以去查找一下这个结构
的定义。(怎么查找?当然是grep了!)

好了,我想写的都写完了,把网卡驱动中最主要的部分都说了一下,希望对大家有所
帮助。相信大家对网卡,或者说Linux的设备驱动有了更深的了解,如果我的文章能够
对你有所帮助,那么我就很高兴了。

明天mm就要回来了,祝我好运吧!

--
  ╭════╮╭════╮╭════╮╭════╮╭══╮

  ║╔      ║║╔      ║║╔      ║║╔      ║║╔  ║

  ║║╭═╮║╰╮  ╭╮║║║  ╭╮║║║╭═╮║║║  ║

  ║  ╰═╯║  ║  ║║║║    ║║║║  ╰═╯║║    ╰═╮

  ║  ╭═╮║╭╯  ╰╯║║    ╰╯║║  ╭═╮║║        ║

  ╰═╯  ╰╯╰════╯╰════╯╰═╯  ╰╯╰════╯


※ 来源:·飘渺水云间 Freecity.dhs.org·[FROM: 10.111.208.159]


--
※ 来源:·浙江大学海纳百川站 bbs.zju.edu.cn·[FROM: dean]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店