当前位置:首页 > 芯闻号 > 充电吧
[导读]82599 datasheet: 7.1.6  节    大概位于314页 对驱动的理解关键是对数据结构的理解。 The 82599 posts receive packets into data

82599 datasheet: 7.1.6  节    大概位于314页 对驱动的理解关键是对数据结构的理解。 The 82599 posts receive packets into data buffers in system memory.
The following controls are provided for the data buffers:
• The SRRCTL[n].BSIZEPACKET field defines the data buffer size. See section
Section 7.1.2for packet filtering by size.
• The SRRCTL.BSIZEHEADER field defines the size of the buffers allocated to headers
(advanced descriptors only). Each queue is provided with a separate SRRCTL register. Receive memory buffer addresses are word (2x byte) aligned (both data and headers).
每个queue都有单独的SRRCTL寄存器 n表示的是queue id rx packet或者header buffer的内存地址必须两字节对齐,这样的话可以保证地址的最低位(LSB)为0.
结构体的声明如下:
/* Receive Descriptor - Advanced */ union ixgbe_adv_rx_desc {                  struct {                                 __le64 pkt_addr; /* Packet buffer address */                                 __le64 hdr_addr; /* Header buffer address */                 } read;                  struct {                                  struct {                                                  union {                                                                 __le32 data;                                                                  struct {                                                                                 __le16 pkt_info; /* RSS, Pkt type */                                                                                 __le16 hdr_info; /* Splithdr, hdrlen */                                                                 } hs_rss;                                                 } lo_dword;                                                  union {                                                                 __le32 rss; /* RSS Hash */                                                                  struct {                                                                                 __le16 ip_id; /* IP id */                                                                                 __le16 csum; /* Packet Checksum */                                                                 } csum_ip;                                                 } hi_dword;                                 } lower;                                  struct {                                                 __le32 status_error; /* ext status/error */                                                 __le16 length; /* Packet length */                                                 __le16 vlan; /* VLAN tag */                                 } upper;                 } wb;  /* writeback */ };
根据datasheet来看这个union结构体,这个union包括两个struct,一个是 struct {                                 __le64 pkt_addr; /* Packet buffer address */                                 __le64 hdr_addr; /* Header buffer address */                 } read;
这个struct对应的datasheet中的table 7-15:
       63                                                                                                                                1      0  0                             Packet Buffer Address [63:1]     A0  8                           Header Buffer Address [63:1]     DD
这个数据结构是在驱动中修改的。就两个64bit地址。这两个地址都是物理地址,当一个数据包接收完成时,驱动就将对应的存放当前数据包的dma ring buffer的物理地址写到这个数据结构中。 header buffer的物理地址的最低位被用来表示当前的buffer是否可用。 DD的意思是Descriptor Done。 驱动每次要接收数据包的时候就检查这个DD是不是1,如果是1, 那么这个描述符对应的packet buffer中就有一个新来的数据包,然后就取出来数据包,取完之后就设置为0,这样硬件下次就可以继续使用。如果检查发现DD为0,驱动会认为当前packet fifo为空,没有新的数据包了。直接就会返回。 网卡每次来了新的数据包,就检查当前这个buffer的DD位是否为0,如果为0那么表示当前buffer可以使用,就让DMA将数据包copy到这个buffer中,设置DD为1,这样驱动就可以根据DD 1读取这个新来的数据包了。如果硬件检查为1,那么硬件就认为fifo满了,可能直接就将这个包给丢弃掉了。 典型的生产者---消费者模型。
在驱动代码中并没有发现单独的代码来设置DD为0。这是因为结构体中的这两个物理地址必须2字节对齐,也就是说最低位一定是0.所以直接通过下面的地址写回就可以置0了,不需要再单独的设置一下。 rxdp->read.hdr_addr = dma_addr; rxdp->read.pkt_addr = dma_addr;


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为增进大家对鼠标的认识,本文将对鼠标左键单击变双击的维修方法以及鼠标单击异常的解决方法予以介绍。

关键字: 鼠标 指数 驱动

以下内容中,小编将对显卡驱动的相关内容进行着重介绍和阐述,希望本文能帮您增进对显卡驱动的了解,和小编一起来看看吧。

关键字: 显卡 驱动 显卡驱动

在这篇文章中,小编将为大家带来台式机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 台式机 无线上网 无线网卡 网卡

电动汽车电机是电动汽车的核心部件,负责驱动汽车的行驶。本文将详细介绍电动汽车电机的类型及其工作原理,以帮助用户更好地了解和应用电动汽车电机。

关键字: 电动汽车 驱动

近年来,中国的电机驱动芯片市场规模不断增长。根据灵动核心的数据,2021年中国电机驱动芯片市场规模达到129.81亿元,同比增长1.85%。这一增长趋势主要得益于中国机械机电与电子信息行业的发展,以及5G通信、物联网、智...

关键字: 直流电机 驱动 芯片

汽油汽车和电动汽车的主要区别在于动力来源和传动方式。汽油汽车使用内燃机燃烧汽油产生动力,通过变速箱和传动轴驱动车轮。电动汽车使用电池储存电能,通过电动机直接驱动车轮。

关键字: 电动汽车 燃油汽车 驱动

北京2023年9月15日 /美通社/ -- 精益求精的设计理念最早起源于建筑学,它要求设计师在建筑结构荷载上充分考虑极限设计下的结构功能,强调建筑结构需满足安全性、可靠性、耐久性。如今,这种设计理念也融汇到各行各业,其中...

关键字: 数据中心 CPU 供电 网卡

直流电动机 是将直流电能转换为机械能的电动机。因其良好的调速性能而在电力拖动中得到广泛应用。直流电动机按励磁方式分为永磁、他励和自励3类,其中自励又分为并励、串励和复励3种。

关键字: 直流 电机 驱动

5G 是取代先前4G LTE标准的新无线蜂窝网络的行业术语,正如 4G 取代 3G 一样。5G 代表“第五代”——它是自1980 年代初蜂窝电话网络诞生以来的第五个主要移动电话技术版本。

关键字: 5G 网卡 速度

据报道,京东方在生产iPhone 15系列的OLED显示屏时出现漏光问题,因此很难参与6月左右进行的iPhone 15系列首批OLED面板生产。

关键字: 京东方 国产芯片 驱动
关闭
关闭