飞腾处理器网络控制器的驱动设计和实现.doc飞腾处理器网络控制器的驱动设计和实现摘要:随着飞腾处理器性能的提升,原来的网络驱动已经不能满足其需求,急需设计和实现一款针对当前处理器的特性,能最大程度发挥其性能的网络驱动。通过研究飞腾处理器网络控制器相关的硬件原理以及linux下驱动框架的知识,设计和实现飞腾处理器中网络控制器的驱动,并对其进行了优化,使其达到了千兆网卡的使用需求。关键词:飞腾处理器;linux驱动框架;DMA;IP头对齐;NAP;GSO中图分类号:。飞腾处理器芯片内部集成了两个千兆网络控制器,通过高速AMBA总线与CPU系统总线互连。本文研究了飞腾处理器网络控制器相关的硬件原理以及linux下驱动框架知识,设计和实现飞腾处理器中网络控制器的驱动,并对其进行了优化,使其达到了千兆网卡的使用需求。1硬件原理飞腾处理器网络控制器器包括AHB/AXI接口,DMA通道,FIFO缓冲和核心四个逻辑部件。AHB/AXI接口通过AMBA总线控制器与系统总线互连,即可以作为从设备接收CPU的访问操作,也可以作为主设备为DMA启动访存操作;DMA通道负责通过AMBA总线在系统主存和内部FIFO之间进行数据包的传输;DMA通道和FIFO缓冲都是接收和发送专用的,因此一个网络控制器包含两个DMA通道和两个FIFO缓冲;核心逻辑实现了千兆介质无关接口GMII,并负责在FIFO缓冲区和GMII之间进行数据包传输。飞腾处理器通过GMII接口与物理层芯片连接,并通过介质相关MD总线访问物理层芯片的状态和控制寄存器SCR。2网络驱动设计linux网络设备驱动基本框架从上到下划为三层,分别为网络协议接口层,网络设备接口层,设备驱动功能层。网络协议接口层提供统一的数据包收发接口,使得上层ARP或IP协议独立于具体的设备,通过dev_queue_xmit()函数发送数据,if_rx()函数接收数据。网络接口层从宏观上规划了具体操作硬件的设备驱动功能层的结构,_device,该结构体是设备驱动功能层中各函数的容器。_device数据结构的具体成员,是驱使网络设备硬件完成相应动作的程序,它通过hard_start_xmit()函数启动发送操作,并通过网络设备上的中断触发接受操作。飞腾网络控制器驱动实现了linux网络设备驱动基本框架要求的函数接口,并在此基础上进行了一系列的优化,主要技术难点在于资源寻址机制、链路状态监控和基于DMA的数据包收发机制的设计和实现。:一方面是飞腾CPU硬核对网络控制和状态寄存器CSR资源的寻址,另一方面是网络控制器DMA对系统主存资源的寻址。在飞腾处理器中,网络CSR寄存器和所有其他AMBA总线设备的寄存器一样,被固定在AMBA总线地址空间的一段范围内。网络驱动程序在硬件初始化之前,需要将这段AMBA总线地址范围映射到飞腾CPU地址空间上,从而实现网络CSR寄存器的寻址,并通过CSR寄存器中的MD地址和数据寄存器的编程,实现对网络物理层芯片内部MD寄存器的访问。网络控制器的DMA需要在系统主存和内部FIFO缓冲之间进行数据传输,因此DMA需要具有系统主存的访问能力,也就是说,系统主存的部分或者全部可以映射到AMBA总线地址空间上。因为飞腾处理器的AMBA总线长度为64位,所
飞腾处理器网络控制器的驱动设计和实现 来自淘豆网www.taodocs.com转载请标明出处.