WEB开发网
开发学院软件开发Shell Linux编程:网络设备驱动详解 阅读

Linux编程:网络设备驱动详解

 2009-06-30 04:36:00 来源:WEB开发网   
核心提示: 8,发包static void tg3_tx(struct tg3 *tp){struct tx_ring_info *ri = &tp->tx_buffers[sw_idx];struct sk_buff *skb = ri->skb;//以DMA方式向网卡传输包完毕pci_unmap_single(t

8,发包

static void tg3_tx(struct tg3 *tp)

{

struct tx_ring_info *ri = &tp->tx_buffers[sw_idx];

struct sk_buff *skb = ri->skb;

//以DMA方式向网卡传输包完毕

pci_unmap_single(tp->pdev, pci_unmap_addr(ri, mapping),

(skb->len - skb->data_len), PCI_DMA_TODEVICE);

ri->skb = NULL;

dev_kfree_skb_irq(skb);

}

  9,收包

static int tg3_rx(struct tg3 *tp, int budget)

{

struct sk_buff *copy_skb;

//分配一个包

copy_skb = dev_alloc_skb(len + 2);

copy_skb->dev = tp->dev;

//修改包头空间

skb_reserve(copy_skb, 2);

//加入数据到包中

skb_put(copy_skb, len);

//以DMA方式从网卡传输回数据

pci_dma_sync_single(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);

memcpy(copy_skb->data, skb->data, len);

skb = copy_skb;

//解析包的协议

skb->protocol = eth_type_trans(skb, tp->dev);

//把包送到协议层

netif_rx(skb);

//记录收包时间

tp->dev->last_rx = jiffies;

}

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Linux 编程 网络设备

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接