该驱动实现ZYNQ平台下GEM(Gigabit Ethernet MAC)网卡控制器驱动。
实现网卡控制器功能,实现GEM网卡控制器IO接口。
根据Linux驱动架构设计。
1) macb
网卡控制器核心结构体,定义设备结构体,NAPI结构体,PHY设备结构体,接收发送buffer等
struct macb { void __iomem *regs;
unsigned int rx_tail; unsigned int rx_prepared_head; struct macb_dma_desc *rx_ring; struct sk_buff **rx_skbuff; void *rx_buffers; size_t rx_buffer_size;
unsigned int num_queues; struct macb_queue queues[MACB_MAX_QUEUES];
spinlock_t lock; struct platform_device *pdev; struct clk *pclk; struct clk *hclk; struct clk *tx_clk; struct net_device *dev; struct napi_struct napi; struct net_device_stats stats; union { struct macb_stats macb; struct gem_stats gem; }hw_stats;
dma_addr_t rx_ring_dma; dma_addr_t rx_buffers_dma;
struct macb_or_gem_ops macbgem_ops;
struct mii_bus *mii_bus; struct phy_device *phy_dev; unsigned int li unsigned int speed; unsigned int duplex;
u32 caps; unsigned int dma_burst_length;
phy_interface_t phy_interface;
/* AT91RM9200 transmit */ struct sk_buff *skb; /* holds skb until xmit interrupt completes */ dma_addr_t skb_physaddr; /* phys addr from pci_map_single */ int skb_length; /* saved skb length for pci_unmap_single */ unsigned int max_tx_length;
u64 ethtool_stats[GEM_STATS_LEN]; unsigned int rx_frm_len_mask; unsigned int jumbo_max_len; unsigned int tsu_clk; struct ptp_clock *ptp_clock; struct ptp_clock_info ptp_caps; int rx_hwtstamp_filter; int phc_index; unsigned int ns_incr; unsigned int subns_incr; }; |
2) macb_or_gem_ops
MAC或GEM操作函数结构体,定义读写Buffer函数等
struct macb_or_gem_ops { int (*mog_alloc_rx_buffers)(struct macb *bp); void (*mog_free_rx_buffers)(struct macb *bp); void (*mog_init_rings)(struct macb *bp); int (*mog_rx)(struct macb *bp, int budget); }; |
3) macb_config
MACB配置结构体,定义配置信息
struct macb_config { u32 caps; unsigned int dma_burst_length; int jumbo_max_len; }; |
4) macb_queue
MACB队列结构体,定义传输队列等信息
struct macb_queue { struct macb *bp; int irq;
unsigned int ISR; unsigned int IER; unsigned int IDR; unsigned int IMR; unsigned int TBQP;
unsigned int tx_head, tx_tail; struct macb_dma_desc *tx_ring; struct macb_tx_skb *tx_skb; dma_addr_t tx_ring_dma; struct work_struct tx_error_task; }; |
1) MAC设备初始化函数
函数原型 | int macb_mii_init(struct macb *bp); |
功能描述 | MAC设备初始化函数 |
输入参数 | bp,驱动指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 0,成功;其他,失败 |
2) MAC设备打开函数
函数原型 | static int macb_open(struct net_device *dev) |
功能描述 | MAC设备打开函数 |
输入参数 | dev,网络设备指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 0成功;其他,错误 |
3) 获取MAC设备关闭函数
函数原型 | static int macb_close(struct net_device *dev) |
功能描述 | MAC设备关闭函数 |
输入参数 | dev,设备指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 0 |
4) MAC设备搜索函数
函数原型 | static int macb_probe(struct platform_device *pdev) |
功能描述 | MAC设备搜索函数,查询PHY设备并连接PHY设备。并为MAC和PHY设备驱动申请必要的资源 |
输入参数 | pdev,设备指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 0成功;其他,失败 |
5) MAC设备移除函数
函数原型 | static int macb_remove(struct platform_device *pdev) |
功能描述 | 移除MAC设备驱动,取消注册的设备,并释放资源等 |
输入参数 | pdev,设备指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 0 |
6) MAC设备发送数据函数
函数原型 | static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev) |
功能描述 | MAC设备发送数据函数 |
输入参数 | skb,socket buffer数据指针 pdev,设备指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 0,成功;其他,失败 |
7) MAC设备接收数据函数
函数原型 | static int macb_rx(struct macb *bp, int budget) |
功能描述 | MAC设备接收数据函数 |
输入参数 | bp,MAC设备结构体指针,存放接收的buffer budget,buffer预算。即最大Buffer数目 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 接收到的数据个数 |
8) MAC设备IO控制函数
函数原型 | int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); |
功能描述 | MAC设备IO控制函数 |
输入参数 | dev,网络设备指针 rq,ifreq网络设备信息结构体指针 cmd,ioctl命令 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 0成功;其他,错误 |
9) 获取MAC设备状态函数
函数原型 | struct net_device_stats *macb_get_stats(struct net_device *dev); |
功能描述 | 获取MAC设备状态 |
输入参数 | dev,设备指针 |
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | 返回当前MAC设备状态信息 |
1. 将macb.c和macb.c放置在Linux内核的drivers/net/ethernet/cadence
2. 在该目录下的Makefile中增加
“obj-$(CONFIG_MACB) += macb.o” |
3. 在该目录下的Kconfig文件中增加
config MACB tristate "Cadence MACB/GEM support" depends on HAS_DMA select PHYLIB select PTP_1588_CLOCK ---help--- The Cadence MACB ethernet interface is found on many Atmel AT32 and AT91 parts. This driver also supports the Cadence GEM (Gigabit Ethernet MAC found in some ARM SoC devices). Say Y to include support for the MACB/GEM chip.
To compile this driver as a module, choose M here: the module will be called macb. |
通过上层封装的ethernet库中代码,可以进行网络数据发送接收。
无
好评率:100%
好评数量:0个
工作速度:5分
工作质量:5分
工作态度:5分
暂无评价
CPU/GPU ¥12000.00
CPU/GPU ¥25000.00
CPU/GPU ¥10000.00
CPU/GPU ¥30000.00
CPU/GPU ¥10000.00
CPU/GPU ¥15000.00
CPU/GPU ¥10000.00
CPU/GPU ¥10000.00
其他 ¥5000.00
其他 ¥5000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
FPGA电路 ¥10000.00
模拟电路 ¥10000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥10000.00
模拟电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥15000.00
CPU/GPU ¥20000.00
CPU/GPU ¥18000.00
CPU/GPU ¥20000.00
其他 ¥10000.00
其他 ¥6000.00
其他 ¥2000.00
其他 ¥3000.00
其他 ¥12000.00
其他 ¥8000.00
FPGA电路 ¥5000.00
MCU电路 ¥4800.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
MCU电路 ¥50000.00
MCU电路 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥500000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00