Распечатка 5.6 Функция зондирования

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

Распечатка 5.6

 

int __init lxNWprobe(struct net_device *dev)

{

  /*

   * Эта функция используется только в случае, если драйвер

   * используется как модуль. В этом случае эта функция

   * инициализирует владельца данного устройства

   */

  SET_MODULE_OWNER(dev);

 

  /*

   * Настройка стартового адреса для доступа к вводу-выводу;

   * Это будет использоваться семейством команд inb()/outb()

   */

  dev->base_addr = NW_IOADDR;

 

  dev->irq = NW_IRQ;

 

  /*

   * Заполняем сетевой адрес; обычно он получен от

   * какой-либо настройки при загрузке

   */

  FILL_ETHER_ADDRESS(dev->dev_addr);

 

  /* Запрашиваем прерывание */

  request_irq(dev->irq, &LXNWIsr, 0, "NW", dev);

 

  /* Выполняем инициализацию микросхемы */

  RESET_NW();

 

  /* Заполняем структуру устройства важными функциями */

  dev->open = lxNW_open;

  dev->hard_start_xmit = lxNW_send_packet;

  dev->stop = lxNW_close;

  dev->get_stats = lxNW_get_stats;

  dev->set_multicast_list = lxNW_set_multicast_list;

  dev->watchdog_timeo = HZ;

  dev->set_mac_address = lxNW_set_mac_address;

 

  /*

   * Для заполнения полей сетевого устройства значениями по умолчанию

   * предоставляется ether_setup. Здесь одним из важных полей является

   * длина очереди передачи, поддерживаемой для устройства. Значением

   * по умолчанию является 100. Также в dev->flags установлены

   * IFF_BROADCAST и IFF_MULTICAST, что означает, что это устройство

   * имеет поддержку широковещательных (broadcasting) и групповых

   * (multicast) запросов. В случае, если ваше устройство не

   * поддерживает групповые запросы, необходимо явно очистить этот

   * флаг.

   */

  ether_setup(dev);

 

  return 0;

}

 

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