Готовый перевод Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 17.15. A Few Other Details

Внимание! Этот перевод, возможно, ещё не готов, так как модераторы установили для него статус «перевод редактируется»

17.15. Ещё несколько подробностей

Этот подраздел рассматривает еще несколько тем, которые могут
быть интересны разработчикам сетевых драйверов. Здесь мы попытаемся
только указать вам нужное направление. Для получение полной
информации по каждой темы, вам потребуется потратить некоторое
время на анализ исходных кодов ядра.

17.15.1. Поддержка независимого от среды интерфейса.

Независимый от передающей среды интерфейс (Media Independent
Interface – MII) описывается стандартом IEEE 802.3 как Ethernet – приемо-
передающий интерфейс с контроллером сети. Многие продающиеся
продукты совместимы с этим интерфейсом. Если вы пишите драйвер для
MII-совместимого контролера, имейте ввиду, что ядро экспортирует
уровень общей MII-поддержки, который может облегчить вашу жизнь.

Для использования этого уровня, вы должны подключить файл
<"linux/mii.h">. Вам необходимо занести в структуру mii_if_info
идентификатор физического приемопередатчика, признак является ли он
полнодуплексным, и т.д. Для этой структуры также необходимы 2 метода:

int (*mdio_read) (struct net_device *dev, int phy_id, int location);
void (*mdio_write) (struct net_device *dev, int phy_id, int location, int val);

Как вы могли ожидать, эти методы реализуют коммуникацию с
вашим MII интерфейсом.

Общий MII-код предоставляет множество функций для запросов и
изменений текущего режима приемопередатчика. Многие из них
предназначены для работы с утилитой ethtool. Для более глубокого
ознакомления смотрите файлы <"linux/mii.h"> и drivers/net/mii.c.

17.15.2. Поддержка Ethtool

Ethtool – утилита, которая дает системным администраторам
возможность управлять сетевым интерфейсом. С утилитой, можно
контролировать различные параметры, включая скорость, тип
передающей среды, дуплексные операции, настройки ПДП, аппаратное
вычисление контрольной суммы, выход из спящего режима (wake-on-LAN)
и т.д. Все это возможно, только если ethtool поддерживается драйвером.
Ethtool можно получить по адресу http://sf.net/projects/gkernel/.

Объявления, необходимые ethtool, могут быть найдены в файле
<linux></linux>ethtool.h>. Центральное место занимает структура ethtool_ops,
которая содержит 24 метода для поддержки ethtool. Смотрите файл
<linux></linux>ethtool.h>, для получения более полной информации. Если ваш
драйвер использует уровень MII, вы можете использовать
mii_ethtool_gset и mii_ethtool_sset, для реализации методов
get_settings и set_settings.

Для работы ethtool с вашим устройством, вы должны разместить
указатель на ethtool_ops в структуре net_device. Для этого должен
использоваться макрос SET_ETHTOOL_OPS, определенный в
<linux></linux>netdevice.h>. Имейте в виду, что ваши методы ethtool могут
быть вызваны, при выключенном интерфейсе.

17.15.3. Netpoll

Относительно позднее добавление (2.6.5) к сетевому стеку.
Предназначено для того, чтобы ядро могло принимать и посылать пакеты,
когда сетевая подсистема и подсистема ввода-вывода могут быть
недоступны. Используется для сетевых консолей и удаленной отладки
ядра. Поддержка netpoll в вашем драйвере не обязательна, но может
сделать ваше устройство полезнее в некоторых ситуациях. Поддержка
netpoll, как правило, относительно проста.

Для поддержки netpoll драйвер должен реализовать метод
poll_controller. Работа метода не должна прерываться, а это может
произойти при возникновении прерывания. Почти все методы
poll_controller выглядят так:

void my_poll_controller(struct net_device *dev)
{
disable_device_interrupts(dev);
call_interrupt_handler(dev->irq, dev, NULL);
reenable_device_interrupts(dev);
}

В сущности, метод poll_controller
прерывания устройства.

Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется

Переведено на Нотабеноиде
http://notabenoid.org/book/11832/38396

Переводчики: hardorsoft

Настройки

Готово:

100.00% КП = 1.0