Много лет назад я легко мог спать в полуметре от гудящего компьютера, со временем же стало очевидно, что посторонние шумы сильно мешают продуктивной работе. С тех пор я начал свои эксперименты по сбору бесшумного компьютера.
![image](https://habrastorage.org/getpro/habr/post_images/7a6/327/8b7/7a63278b79eb5a751cca56810a5500c5.jpg)
![image](https://habrastorage.org/getpro/habr/post_images/7a6/327/8b7/7a63278b79eb5a751cca56810a5500c5.jpg)
Пользователь
USBOpenPipe
из API, названная usb_open_pipe
в коде pipe.inc, открывает новый канал по указанным характеристикам канала и «родительскому» каналу, где записаны характеристики устройства. Для этого она:*hci_pipe+usb_pipe
, описывающих канал и выравненных на контроллеро-специфичную границу, вызовом контроллеро-специфичной функции usb_hardware_func.AllocPipe
;*hci_gtd+usb_gtd
, описывающих пустой дескриптор передачи и выравненных на контроллеро-специфичную границу, вызовом контроллеро-специфичной функции usb_hardware_func.AllocTD
;usb_hardware_func.InitPipe
, охраняемую мьютексом, глобальным для контроллера;сигнатура, 6 байт: { '7', 'z', 0xBC, 0xAF, 0x27, 0x1C };
версия формата, два байта { Major, Minor }, 7-Zip 9.20 пишет сюда { 0, 3 };
CRC следующих трёх полей, 4 байта;
смещение основного заголовка относительно конца этой структуры, 8 байт;
размер основного заголовка, 8 байт;
CRC основного заголовка, 4 байта.
usb_init
из init.inc в ходе загрузки системы.pcidev_list
. USB-контроллеры опознаются среди всех PCI-устройств по коду класса, подкласса и интерфейса: Тип | Класс | Подкласс | Интерфейс |
---|---|---|---|
UHCI | 0Ch | 03h | 00h |
OHCI | 0Ch | 03h | 10h |
EHCI | 0Ch | 03h | 20h |
XHCI | 0Ch | 03h | 30h |
usb_init
проходит по списку PCI-устройств несколько раз, каждый раз выделяя USB-контроллеры.int 13h
— такая поддержка встречается куда чаще поддержки мышей, ибо необходима для загрузки с флешек.cli
/sti
без собственно спинлока, на многопроцессорных внутри cli
/sti
остаётся обычный спинлок. Кроме того, контроллер прерываний во время обработки одного прерывания блокирует остальные с тем же или более низким приоритетом.Аббр. | Название интерфейса | Версия | Код поддержки контроллера в KolibriOS |
---|---|---|---|
UHCI | Universal Host Controller Interface | USB 1.1 | kernel/trunk/bus/usb/uhci.inc |
OHCI | Open Host Controller Interface | USB 1.1 | kernel/trunk/bus/usb/ohci.inc |
EHCI | Enhanced Host Controller Interface | USB 2.0 | kernel/trunk/bus/usb/ehci.inc |
XHCI | eXtensible Host Controller Interface (новый) | USB 3.0 | В KolibriOS ещё не поддерживается |