Поддержка USB в KolibriOS: что внутри? Часть 3: код поддержки хост-контроллеров

d6ef6ba8a17527769eced5164184965c.pngУровень поддержки хост-контроллеров, как я писала в общем обзоре, должен вызывать вышележащие уровни при наступлении некоторых событий и предоставлять функции, необходимые вышележащим уровням для работы. Для удобства восприятия я буду рассказывать о различных элементах кода поддержки в том порядке, в котором они получают управление.Запуск подсистемы USBПодготовка: USB-контроллеры в списке PCI-устройств Подсистема USB запускается вызовом usb_init из init.inc в ходе загрузки системы. К моменту запуска USB уже подготовлен список найденных PCI-устройств pcidev_list. USB-контроллеры опознаются среди всех PCI-устройств по коду класса, подкласса и интерфейса: Тип Класс Подкласс Интерфейс UHCI 0Ch 03h 00h OHCI 0Ch 03h 10h EHCI 0Ch 03h 20h XHCI 0Ch 03h 30h usb_init проходит по списку PCI-устройств несколько раз, каждый раз выделяя USB-контроллеры.Отключение контроля BIOS Некоторые BIOS умеют обрабатывать USB-мыши, USB-клавиатуры и USB-флешки, предоставляя данные для операционных систем, не знающих про USB. Данные от мышей и клавиатур преобразуются в формат PS/2 и тем или иным способом доводятся до операционной системы так же, как если бы в системе существовала настоящая PS/2-мышь и/или клавиатура. USB-флешка представляется жёстким диском с точки зрения int 13h — такая поддержка встречается куда чаще поддержки мышей, ибо необходима для загрузки с флешек. Операционная система может использовать любой режим процессора и самостоятельно обрабатывать любые прерывания. Чтобы BIOS в таких условиях всё же могла получать управление с предсказуемым окружением, ещё в районе 486-х (начиная со специальной версии i386SL, если точно) Intel придумала специальный режим процессора System Management Mode (SMM), в котором и работает BIOS, прерывая операционную систему. В SMM невозможно попасть средствами самого процессора; процессор попадает в этот режим, когда железо материнской платы подаёт специальный сигнал System Management Interrupt (SMI). USB-контроллеры, встроенные в чипсет, как правило, могут генерировать SMI вместо прерывания в зависимости от настроек.Читать дальше →

© Habrahabr.ru