Распечатка 5.7 Функции приёма и передачи

Предыдущая  Содержание  Следующая V*D*V

Распечатка 5.7.

 

void LXNWIsr(int irq, void *id, struct pt_regs *regs)

{

  struct net_device *dev = id;

 

  switch (READ_INTERRUPT_CONDITION())

  {

    case TX_EVENT:

      netif_wake_queue(dev);

      break;

    case RX_Event:

      LXHWReceive(nCS);

      break;

  }

}

 

int LXNWSendPacket(struct sk_buff *skb, struct net_device *dev)

{

  /* Запрещаем прерывание, так как это может вызвать программное

   * прерывание

   */

  disable_irq(dev->irq);

  netif_stop_queue(dev);

  FILL_TX_NW(skb);

  enable_irq(dev->irq);

  dev_kfree_skb(skb);

 

  return 0;

}

 

void LXHWReceive(struct net_device *dev)

{

  struct sk_buff *skb;

 

  /*

   * После получения длины фрейма выделяем память для skb 

   */

  skb = dev_alloc_skb(READ_RX_LEN + 2);

 

  /* Это выполняется для выравнивания по границе 16 байт */

  skb_reserve(skb,2);

 

  skb->dev = dev;

  READ_RX_NW(skb);

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

  netif_rx(skb);

}

 

Предыдущая  Содержание  Следующая