Структуры данных USB 3.0
В этом разделе описываются структуры данных, используемые драйвером контроллера узла USB 3.0. Понимание этих структур данных поможет эффективно использовать команды расширения отладчика USB 3.0 и RCDRKD . Представленные здесь структуры данных имеют имена, соответствующие спецификации USB 3.0. Знакомство со спецификацией USB 3.0 еще больше расширит возможности использования команд расширения для отладки драйверов USB 3.0.
Драйвер хост-контроллера USB 3.0 является частью стека основных драйверов USB 3.0. Дополнительные сведения см. в статье Архитектура стека драйверов USB.
Каждый хост-контроллер USB 3.0 может иметь до 255 устройств, а каждое устройство может иметь до 31 конечной точки. На следующей схеме показаны некоторые структуры данных, представляющие один хост-контроллер и подключенные устройства.
Базовый массив контекста устройства
Базовый массив контекста устройства — это массив указателей на структуры контекста устройства. Для каждого устройства, подключенного к контроллеру узла, существует одна структура контекста устройства. Элементы от 1 до 255 указывают на структуры контекста устройства. Элемент 0 указывает на структуру контекста для контроллера узла.
Контекст устройства и контекст слота
Структура контекста устройства содержит массив указателей на структуры контекста конечной точки. Для каждой конечной точки на устройстве существует одна структура контекста конечной точки. Элементы от 1 до 31 указывают на структуры контекста конечной точки. Элемент 0 указывает на структуру контекста слота, которая содержит сведения о контексте для устройства.
Командный круг
Командный круг используется программным обеспечением для передачи команд контроллеру узла. Некоторые из этих команд направляются на контроллер узла, а некоторые — на определенные устройства, подключенные к контроллеру узла.
Кольцо событий
Кольцо событий используется контроллером узла для передачи событий программному обеспечению. То есть кольцо событий — это структура, используемая контроллером узла для информирования драйверов о завершении действия.
Массив регистра Doorbell
Массив регистров Doorbell — это массив регистров doorbell, по одному для каждого устройства, подключенного к контроллеру узла. Элементы с 1 по 255 являются регистрами дверной звонок. Элемент 0 указывает, есть ли в круге команд отложенная команда.
Программное обеспечение уведомляет хост-контроллер о том, что он должен выполнить работу, связанную с устройством или конечной точкой, записывая сведения о контексте в регистр дверной звонок для устройства.
Следующая схема продолжается справа от предыдущей схемы. Здесь показаны дополнительные структуры данных, представляющие одну конечную точку.
Кольцо передачи
Каждая конечная точка имеет одно или несколько кругов передачи. Кольцо передачи — это массив блоков запросов на передачу (TRB). Каждый TRB указывает на блок непрерывных данных (до 64 КБ), которые будут передаваться между оборудованием и памятью в одном блоке.
Когда стек ядра USB 3.0 получает запрос на передачу от драйвера USB-клиента, он определяет контекст конечной точки для передачи, а затем разбивает запрос на один или несколько дескрипторов передачи (TD). Каждое TD содержит один или несколько TDB.
Контекст конечной точки
Структура контекста конечной точки содержит сведения о контексте для одной конечной точки. Он также имеет элементы Dequeue и Enqueue , которые используются для отслеживания того, где TRB используются оборудованием и где TRB добавляются программным обеспечением.