Usb xhci controller

Содержание

Usb xhci controller

Эта статья содержит в себе перечень общих Советы, но он остается в главном непроверенным, так как ему не хватает соответственных интегрированные цитаты. Пожалуйста, помогите облагораживать эта статья введение более четкие цитаты. ( Апрель 2014 г. ) (Узнайте, как и когда удалить этот шаблон сообщения)

Расширяемый интерфейс хост-контроллера — Extensible Host Controller Interface

Эта статья содержит в себе перечень общих Советы, но он остается в главном непроверенным, так как ему не хватает соответственных интегрированные цитаты. Пожалуйста, помогите облагораживать эта статья введение более четкие цитаты. ( Апрель 2014 г. ) (Узнайте, как и когда удалить этот шаблон сообщения)

Расширяемый интерфейс хост-контроллера (xHCI) — это спецификация компьютерного интерфейса, которая определяет описание хост-контроллера на уровне регистров для универсальная поочередная шина (USB), который может вести взаимодействие с устройствами, совместимыми с USB 1.x, 2.0 и 3.x. Спецификация также упоминается как USB 3.0 Спецификация хост-контроллера.

xHCI улучшает уже имеющиеся Открытый интерфейс хост-контроллера (OHCI) и Универсальный интерфейс хост-контроллера (UHCI), более приметно в обработке более широкого спектра скоростей в рамках одного эталона, в более действенном управлении ресурсами в интересах мобильных хостов с ограниченными ресурсами питания (таких как планшеты и мобильники), также в упрощении поддержки смешивания низких -скоростные и быстродействующие устройства.

  • 1 Строительные цели
  • 2 Строительные детали
    • 2.1 Поддержка всех скоростей
    • 2.2 Энергоэффективность
    • 2.3 Поддержка виртуализации
    • 2.4 Облегченная архитектура драйвера
    • 2.5 Поддержка потоковой передачи
    • 2.6 Масштабируемость
    • 3.1 История версий
      • 3.1.1 Пререлизы
      • 3.1.2 xHCI 1.0
      • 3.1.3 xHCI 1.1
      • 3.1.4 xHCI 1.2

      Архитектурные цели

      XHCI конструктивно отличается от архитектур интерфейса хост-контроллера USB прошлых поколений (т. Е. Открытый интерфейс хост-контроллера (OHCI), Универсальный интерфейс хост-контроллера (UHCI) и Усовершенствованный интерфейс хост-контроллера (EHCI)) по многим причинам. Ниже приведены главные цели архитектуры xHCI:

      • Действенная работа — мощность в режиме ожидания и производительность лучше, чем у устаревших архитектур хост-контроллера USB.
      • Модель программирования на уровне устройства, на сто процентов совместимая с имеющейся моделью программного обеспечения USB.
      • Отделите интерфейс хост-контроллера, представленный программному обеспечению, от главных протоколов USB.
      • Минимизируйте доступ к памяти хоста, вполне исключив их, когда USB-устройства простаивают
      • Устранение записи в регистр и минимизация чтения из регистра для обычной передачи данных
      • Исключите модель «Компаньон-контроллер»
      • Включите аппаратные «отказоустойчивые» режимы в ситуациях с ограниченными ресурсами системы, чтоб устройства оставались доступными, но, может быть, с наименее хорошей точкой питания / производительности
      • Обеспечить возможность для различных рынков дифференцировать способности оборудования, к примеру компромисс меж мощностью, производительностью и ценой мотивированного хост-контроллера для определенных рынков
      • Обусловьте расширяемую архитектуру, которая обеспечивает обычной путь для новых спецификаций и технологий USB, таких как интерфейсы с более высочайшей пропускной способностью, оптическая среда передачи и т. Д., Не требуя определения еще 1-го интерфейса хост-контроллера USB.

      Архитектурные детали

      Поддержка всех скоростей

      Контроллеры OHCI и UHCI поддерживают только устройства со скоростью USB 1 (1,5 Мбит / с и 12 Мбит / с), а EHCI поддерживает только устройства USB 2 (480 Мбит / с).

      Архитектура xHCI была разработана для поддержки всех скоростей USB, включая SuperSpeed ​​(5 Гбит / с) и будущие скорости, в рамках 1-го стека драйверов.

      Энергоэффективность

      Когда USB был сначало разработан в 1995 году, он был нацелен на настольные платформы, чтоб приостановить распространение разъемов, которые появлялись на ПК, к примеру PS / 2, Серийный порт, параллельный порт, Игровой порт и т. Д., А энергопотребление хоста в то время не было принципиальным фактором. С того времени мобильные платформы стали предпочтительной платформой, а их батареи сделали энергопотребление главным фактором. Архитектуры устаревших хост-контроллеров USB (OHCI, UHCI и EHCI) были очень похожи в том, что «расписание» транзакций, выполняемых на USB, создавалось программным обеспечением в памяти хоста, и аппаратное обеспечение хост-контроллера повсевременно считывало расписания, чтоб найти, какие транзакции нужно запустить на USB и когда, даже если данные не были перемещены. Не считая того, в случае чтения с устройства, устройство опрашивалось каждый интервал расписания, даже если не было данных для чтения.

      • XHCI исключает расписания транзакций USB на базе памяти хоста, обеспечивая нулевую активность памяти хоста при отсутствии перемещения данных USB.
      • XHCI понижает потребность в повторяющемся опросе устройств, позволяя устройству USB 3.0 либо более поздней версии уведомлять хост-контроллер, когда у него есть данные, доступные для чтения, и перемещает управление опросом устройств USB 2.0 и 1.1, которые употребляют транзакции прерывания, с управляемого ЦП USB-драйвер к хост-контроллеру USB. Хост-контроллеры EHCI, OHCI и UHCI будут автоматом обрабатывать опрос для ЦП, если нет никаких конфигураций, которые необходимо внести, и если ни одно устройство не имеет никаких прерываний для отправки, но они все полагаются на ЦП, чтоб установить расписание для контроллеров. [1][2][3] Если какое-либо USB-устройство, использующее транзакции прерывания, вправду имеет данные для отправки, то хост-контроллер xHCI вышлет прерывание, чтоб уведомить ЦП о том, что существует транзакция прерывания USB, которую нужно обработать. Так как ЦП больше не надо управлять опросом шины USB, он может проводить больше времени в состояниях с низким энергопотреблением.
      • XHCI не просит, чтоб реализации обеспечивали поддержку всех расширенных функций управления питанием USB 2 и 3, включая состояния USB 2 LPM, USB 3 U1 и U2, HERD, LTM, Function Wake и т. Д .; но эти функции нужны для реализации всех преимуществ xHCI.

      Поддержка виртуализации

      Унаследованные архитектуры хост-контроллера USB показывают некие суровые недочеты в применении к виртуализированным средам. Унаследованные интерфейсы хост-контроллер USB определяют относительно ординарную аппаратную перекачку данных; где критичное состояние, связанное с общим управлением шиной (выделение полосы пропускания, предназначение адресов и т. д.), находится в программном обеспечении хост-контроллер драйвер (HCD). Попытка применить стандартный способ виртуализации аппаратного ввода-вывода — репликацию регистров интерфейса ввода-вывода — к интерфейсу устаревшего USB-хост-контроллера проблематична, так как критичное состояние, которое нужно держать под контролем виртуальные машины (ВМ) недосягаемы для оборудования. Архитектура xHCI переносит контроль этого критичного состояния на оборудование, обеспечивая управление ресурсами USB на всех виртуальных машинах. Функции виртуализации xHCI также обеспечивают:

      Fix USB 3.0 not active Enable BIOS xHCI Mode for USB 3.0 Get Super Speed USB

      • прямое предназначение отдельных USB-устройств (независимо от их расположения в топологии шины) хоть какой виртуальной машине
      • минимизация взаимодействия меж виртуальными машинами во время выполнения
      • поддержка общего доступа к USB-устройствам
      • поддержка PCIe SR-IOV (виртуализация ввода-вывода с одним корнем )

      Упрощенная архитектура драйвера

      EHCI употребляет контроллеры OHCI или UHCI в качестве «сопутствующих контроллеров», при всем этом устройства USB 2 управляются через стек EHCI, а логика порта EHCI позволяет маршрутизировать низко- или полноскоростное USB-устройство к порту «сопутствующий» контроллер UHCI или OHCI, в каком низко- или полноскоростные USB-устройства управляются через соответствующий стек UHCI или OHCI. Например, плата хост-контроллера USB 2 PCIe с 4 разъемами USB «Standard A» обычно представляет для системного программного обеспечения один 4-портовый EHCI и два 2-портовых контроллера OHCI. Когда высокоскоростное USB-устройство подключено к любому из 4 разъемов, управление устройством осуществляется через один из 4 портов корневого концентратора контроллера EHCI. Если низкоскоростное или полноскоростное USB-устройство подключено к разъемам 1 или 2, оно будет направлено на порты корневого концентратора одного из контроллеров OHCI для управления, а низкоскоростные и полноскоростные USB-устройства подключены к разъемам. 3 или 4 будут направлены на порты корневого концентратора другого контроллера OHCI. Зависимость EHCI от отдельных хост-контроллеров для высокоскоростных USB-устройств и группы низко- и полноскоростных USB-устройств приводит к сложным взаимодействиям и зависимостям между драйверами EHCI и OHCI / UHCI.

      • Архитектура xHCI устраняет необходимость в дополнительных контроллерах и их отдельных стеках драйверов.
      • Включение функций расписания, управления полосой пропускания и назначения адресов USB-устройств, которые ранее выполнялись драйвером в аппаратном обеспечении xHCI, позволяет создать более простой, компактный программный стек с меньшей задержкой для xHCI.

      Поддержка потоковой передачи

      Поддержка потоковой передачи была добавлена ​​в спецификацию USB 3.0 SuperSpeed, сначала для обеспечения высокопроизводительных операций хранения через USB. Классически существует соотношение 1: 1 между оконечной точкой USB и буфером в системной памяти, а хост-контроллер несет полную ответственность за управление всеми передачами данных. Потоки изменили эту парадигму, предоставив связь 1 ко многим «конечная точка с буфером» и позволив устройству указывать хост-контроллеру, какой буфер перемещать. Передачи данных USB, связанные с конечной точкой USB Stream, планируются xHCI так же, как и любая другая массовая конечная точка, однако буфер данных, связанный с передачей, определяется устройством.

      • Поддержка xHCI USB Stream позволяет связать до 64 КБ буферов с одной конечной точкой.
      • Поддержка протокола xHCI Streams позволяет USB-устройству выбирать, какой буфер xHCI будет передавать при планировании конечной точки.

      Масштабируемость

      Архитектура xHCI была разработана с учетом высокой масштабируемости, способной поддерживать от 1 до 255 USB-устройств и от 1 до 255 портов корневого концентратора. Поскольку каждому USB-устройству разрешено определять до 31 конечной точки, xHCI, поддерживающий 255 устройств, должен поддерживать 7 906 отдельных конечных точек. Классически каждый буфер памяти, связанный с конечной точкой, описывается очередью блоков физической памяти, где очереди требуются указатель головы, указатель хвоста, длина и другие регистры для определения своего состояния. Есть много способов определить состояние очереди, однако, если предположить, что для каждой очереди будет 32 байта регистрового пространства, то для поддержки 7 906 очередей потребуется почти 256 КБ. Обычно к системе одновременно подключается лишь небольшое количество USB-устройств, и в среднем USB-устройство поддерживает 3-4 конечных точки, из которых только часть конечных точек активна одновременно. XHCI поддерживает состояние очереди. в системной памяти как структуры данных контекста конечной точки. Контексты спроектированы таким макаром, что они могут кэшироваться при помощи xHCI и «выгружаться» на страницы и выходить зависимо от активности конечной точки. Таким макаром, поставщик может масштабировать свое внутреннее пространство кэша контекста конечной точки xHCI и ресурсы в соответствии с практическими моделями использования, ожидаемыми для их продуктов, а не с архитектурными ограничениями, которые они поддерживают. В идеале пространство внутреннего кэша выбирается таким макаром, чтобы при нормальных условиях использования xHCI не выполнял подкачку контекста. Кроме того, активность конечной точки USB имеет тенденцию быть прерывистой. Другими словами в любой момент времени большое количество конечных точек может быть готово к перемещению данных, однако только подмножество активно перемещает данные. Например, конечная точка прерывания IN мыши может не передавать данные в течение нескольких часов, если пользователь находится вне рабочего места. Алгоритмы производителя xHCI могут обнаружить это условие и сделать эту конечную точку кандидатом для пейджинга, если другие конечные точки станут заняты.

      • Архитектура xHCI допускает большие максимальные значения для количества поддерживаемых USB-устройств, портов, векторов прерываний и т. Д., Однако реализация должна определять только количество, необходимое для удовлетворения ее маркетинговых требований. Например, поставщик может ограничить количество USB-устройств, которые он поддерживает для реализации xHCI на планшете, до 16 устройств.
      • Поставщик может дополнительно использовать преимущества архитектуры xHCI для масштабирования своих внутренних ресурсов в соответствии со своими целевыми моделями использования. Например, если посредством тестирования удобства использования поставщик определяет, что 95% пользователей планшетов никогда не будут подключать более 4 устройств USB, и каждое устройство USB обычно определяет 4 конечные точки (или меньше), то внутреннее кэширование для 16 контекстов конечных точек обеспечит это при нормальных условиях. При всем этом не будет активности системной памяти из-за разбиения на страницы контекста конечной точки.

      История

      Спецификация Open Host Controller Interface (OHCI) была определена консорциумом компаний (Compaq, Microsoft и National Semiconductor) как открытая спецификация для поддержки устройств USB 1.0. Универсальный интерфейс хост-контроллера (UHCI) относится к спецификации, которая Intel Первоначально определялся как проприетарный интерфейс для поддержки устройств USB 1.0. Спецификация UHCI в итоге была обнародована, но только после того, как остальная часть отрасли приняла спецификацию OHCI.

      Спецификация EHCI была определена Intel для поддержки устройств USB 2.0. Архитектура EHCI была смоделирована по образцу контроллеров UHCI и OHCI, которым требовалось программное обеспечение для построения расписаний транзакций USB в памяти, также для управления пропускной способностью и распределением адресов. Чтобы устранить избыточные усилия отрасли по определению открытой версии интерфейса хост-контроллера USB 2.0, Intel сделала спецификацию EHCI доступной для отрасли без лицензионных сборов.

      Модель лицензирования EHCI была продолжена для спецификации Intel xHCI, однако со значительным расширением вклада отрасли. Более 100 компаний внесли свой вклад в спецификацию xHCI. В Форум разработчиков USB (USB-IF) также профинансировал набор тестов на соответствие xHCI, чтобы максимизировать совместимость различных реализаций xHCI.

      Контроллеры xHCI 1.0 поставляются с декабря 2009 года. Ядра Linux с 2009 года содержат драйверы xHCI, [4] но для старых ядер в Интернете доступны драйверы. Драйверы Windows для XP, Vista и Windows 7 доступны у соответствующих поставщиков xHCI. Драйверы xHCI для встраиваемой системы доступны по адресу MCCI, Джунго, и другие поставщики программного обеспечения. IP-блоки xHCI также доступны от нескольких поставщиков для настройки в средах SOC. Контроллеры и устройства xHCI 1.1 начали поставляться в 2015 году.

      История версий

      Usb xhci controller

      В спецификации xHCI используются файлы «исправлений» для определения обновлений и уточнений к конкретному выпуску. Изменения в файлах исправлений накапливаются в каждом выпуске. Подробные сведения о конкретных изменениях см. В связанных файлах исправлений. Большинство изменений, определенных в файлах исправлений xHCI, представляют собой уточнения, грамматические или орфографические исправления, дополнительные перекрестные ссылки и т. Д., Которые не влияют на реализацию драйвера. Изменения, которые должны быть архитектурный использовать Возможность флаг, чтобы определить, поддерживается ли конкретная функция реализацией xHCI, и Давать возможность флаг, чтобы включить эту функцию.

      Пререлизы

      Спецификация xHCI развивалась до нескольких версий до своего официального выпуска в 2010 году:

      • xHCI 0.9: Выпущено в августе 2008 года.
      • USB 0.95: Выпущено в декабре 2008 года.
      • USB 0.96: Выпущено в августе 2009 года.
      • USB 0.96a: 1.0 Release Candidate, выпущен в апреле 2010. Первые устройства на основе этой версии.

      xHCI 1.0

      • xHCI 1.0: Первый публичный релиз, 21 мая 2010 г.
        Указанная скорость передачи данных USB: 1,5 Мбит / с (Низкая скорость), 12 Мбит / с (На всей скорости), 480 Мбит / с (Высокоскоростной) и 5 Гбит / с (Супер скорость).
      • xHCI 1.0, файлы ошибок 1-4: Выпущено 17 января 2011 г.
        Включены отзывы о первоначальном обзоре от более широкой публики 1.0, пояснения по сохранению-восстановлению и поддержка аппаратного LPM.
      • xHCI 1.0, файлы ошибок 1-6: Выпущено 18 марта 2011 г.
        Разъяснения.
      • xHCI 1.0, файлы ошибок 1-7: Выпущено 13 июня 2011 г.
        Разъяснения.

      xHCI 1.1

      • xHCI 1.1: Выпущено 21 декабря 2013 г. Указанная скорость передачи данных USB 3.1 составляет 10 Гбит / с (SuperSpeed ​​+). Сюда входят файлы ошибок 1-21 xHCI 1.0. Позволяет контроллеру требовать большее количество буферов блокнота (до 1023) в регистре возможностей HCSPARAMS2.

      xHCI 1.2

      • xHCI 1.2: Дата май 2019 г. Указанная скорость передачи данных USB 3.2 составляет 10 Гбит / с (SuperSpeedPlus Gen1x2) и 20 Гбит / с (SuperSpeedPlus Gen2x2). [5]

      Русские Блоги

      Основы USB — введение в контроллеры OHCI, UHCI, EHCI и XHCI

      OHCI и UHCI являются стандартами интерфейса USB1.1, в то время как EHCI является стандартом интерфейса, соответствующим USB2.0, а последний XHCI является стандартом интерфейса USB3.0.

      1. Представление контроллеров OHCI, UHCI, EHCI и XHCI

      (1) OHCI (открытый интерфейс хост-контроллера) — это стандарт, который поддерживает USB1.1, но не только лишь для USB,

      Он также поддерживает другие интерфейсы, такие как интерфейс Apple Firewire (IEEE 1394). По сравнению с UHCI аппаратное обеспечение OHCI является сложным, а аппаратное обеспечение делает больше, поэтому реализовать соответствующую программную задачу относительно просто. Он в главном используется для не x86 USB, таких как карта расширения, USB-хост встроенной платы разработки.

      (2) UHCI (универсальный интерфейс хост-контроллера) — это стандарт интерфейса для USB 1.0 и 1.1 под руководством Intel, который не совместим с OHCI. Программные задачи UHCI тяжелы и должны быть более сложными, но вы можете использовать более дешевые и простые аппаратные USB-контроллеры. Intel и VIA используют UHCI, а остальные поставщики оборудования используют OHCI.

      (3) EHCI (расширенный интерфейс хост-контроллера) — это стандарт интерфейса USB2.0, возглавляемый Intel. EHCI обеспечивает только высокоскоростные функции USB2.0 и использует UHCI или OHCI для обеспечения поддержки высокоскоростных или низкоскоростных устройств.

      (4) xHCI (расширяемый интерфейс хост-контроллера) — это новейший и самый популярный стандарт интерфейса USB 3.0, который значительно улучшил скорость, энергосбережение, виртуализацию и другие аспекты по сравнению с предыдущими тремя. xHCI поддерживает все типы USB-устройств (USB 3.0 SuperSpeed, USB 2.0 с низкой, полной и высокой скоростью, USB 1.1 с низкой и полной скоростью). Целью xHCI является замена предыдущих 3 (UHCI / OHCI / EHCI).

      2. Разница и подключение разных контроллеров USB типов OHCI, UHCI, EHCI, xHCI

      Топология USB

      Для каждого встроенного чипа ЦП обычно интегрируется один или несколько хост-контроллеров. Каждый хост-контроллер фактически является устройством PCI, которое монтируется на шине PCI. В системе Linux разработчик драйвера должен предоставить хост-контроль Контроллер предоставляет драйвер, а хост-контроллер представлен структурой usb_hcd. Структура определена в /include/linux/usb/hcd.h.

      Каждый хост-контроллер USB поставляется с концентратором USB, который называется Root Hub. Этот корневой концентратор может быть подключен к дополнительным концентраторам, а USB-устройства могут быть установлены на каждом концентраторе. Вообще говоря, USB Hub также является устройством USB. Каждый корневой USB-концентратор может напрямую или косвенно подключить 127 устройств

      Несколько типов контроллеров USB: OHCI, UHCI, EHCI, xHCI

      OHCI и UHCI являются стандартами интерфейса USB1.1, в то время как EHCI является стандартом интерфейса, соответствующим USB2.0, а последний xHCI является стандартом интерфейса USB3.0.

      1. OHCI (Open Host Controller Interface) — это стандарт, который поддерживает USB 1.1, но он не только лишь для USB, но также поддерживает некоторые другие интерфейсы, например, он также поддерживает Firewire от Apple (Firewire, IEEE).
        1394) интерфейс. По сравнению с UHCI аппаратное обеспечение OHCI является сложным, а аппаратное обеспечение делает больше, поэтому реализовать соответствующую программную задачу относительно просто. В главном используется для не x86 USB, таких как карта расширения, USB-хост управления встроенной платой разработки.
      2. UHCI (Universal Host Controller Interface) — это стандарт интерфейса для USB1.0 и 1.1 под руководством Intel, который не совместим с OHCI. Программные задачи UHCI тяжелы и должны быть более сложными, но вы можете использовать более дешевые и простые аппаратные USB-контроллеры. Intel и VIA используют UHCI, а остальные поставщики оборудования используют OHCI.
      3. EHCI (расширенный интерфейс хост-контроллера) — это стандарт интерфейса USB2.0, возглавляемый Intel. EHCI обеспечивает только высокоскоростные функции USB2.0 и использует UHCI или OHCI для обеспечения поддержки высокоскоростных или низкоскоростных устройств.
      4. xHCI (расширяемый интерфейс хост-контроллера) — это новейший и самый популярный стандарт интерфейса USB 3.0, который значительно улучшил скорость, энергосбережение, виртуализацию и другие аспекты по сравнению с предыдущими тремя. xHCI поддерживает все типы USB-устройств (USB 3.0 SuperSpeed, USB 2.0 с низкой, полной и высокой скоростью, USB 1.1 с низкой и полной скоростью). Целью xHCI является замена предыдущих 3 (UHCI / OHCI / EHCI).

      Драйвер хост-контроллера USB

      Как надо из названия, хост-контроллер используется для управления связью между устройством USB и процессором. О том, что ЦП будет делать с устройством, сначала будет уведомлять хост-контроллер вместо прямой отправки инструкций на устройство USB. После получения команды ЦП хост-контроллер направит USB-устройство для выполнения соответствующей задачи. Таким макаром, после того, как ЦП передает команду хост-контроллеру, ему не надо заниматься остальной работой, и ЦП переключается на другие вещи.

      Хост-контроллер USB должен управляться драйвером хост-контроллера USB для работы. Драйвер хост-контроллера USB представлен как hc_driver. Каждый хост-контроллер в компьютерной системе имеет соответствующую структуру hc_driver, которая определена в /include/linux/usb/hcd.h.

      Ниже мы анализируем драйвер хост-контроллера USB, используя usb 3.0 xHCI в качестве примера для объяснения.
      xHCI управляется моделью драйвера платформы платформы, также устройством и драйвером.
      Сначала посмотрите на часть устройства
      /driver/usb/dwc3/host.c

      int dwc3_host_init(struct dwc3 *dwc)  struct platform_device *xhci; int ret; xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO); if (!xhci)  dev_err(dwc->dev, "couldn't allocate xHCI device\n"); ret = -ENOMEM; goto err0; > dma_set_coherent_mask(&xhci->dev, dwc->dev->coherent_dma_mask); xhci->dev.parent = dwc->dev; xhci->dev.dma_mask = dwc->dev->dma_mask; xhci->dev.dma_parms = dwc->dev->dma_parms; dwc->xhci = xhci; ret = platform_device_add_resources(xhci, dwc->xhci_resources, DWC3_XHCI_RESOURCES_NUM); if (ret)  dev_err(dwc->dev, "couldn't add resources to xHCI device\n"); goto err1; > ret = platform_device_add(xhci); if (ret)  dev_err(dwc->dev, "failed to register xHCI device\n"); goto err1; > return 0; err1: platform_device_put(xhci); err0: return ret; > 

      Глядя на раздел драйверов
      /drivers/usb/host/xhic.c

      static int __init xhci_hcd_init(void)  int retval; retval = xhci_register_pci(); // Регистрация на шине PCI if (retval  0)  pr_debug("Problem registering PCI driver.\n"); return retval; > retval = xhci_register_plat(); // драйвер платформы if (retval  0)  pr_debug("Problem registering platform driver.\n"); goto unreg_pci; > /* * Check the compiler generated sizes of structures that must be laid * out in specific ways for hardware access. */ BUILD_BUG_ON(sizeof(struct xhci_doorbell_array) != 256*32/8); BUILD_BUG_ON(sizeof(struct xhci_slot_ctx) != 8*32/8); BUILD_BUG_ON(sizeof(struct xhci_ep_ctx) != 8*32/8); /* xhci_device_control has eight fields, and also * embeds one xhci_slot_ctx and 31 xhci_ep_ctx */ BUILD_BUG_ON(sizeof(struct xhci_stream_ctx) != 4*32/8); BUILD_BUG_ON(sizeof(union xhci_trb) != 4*32/8); BUILD_BUG_ON(sizeof(struct xhci_erst_entry) != 4*32/8); BUILD_BUG_ON(sizeof(struct xhci_cap_regs) != 7*32/8); BUILD_BUG_ON(sizeof(struct xhci_intr_reg) != 8*32/8); /* xhci_run_regs has eight fields and embeds 128 xhci_intr_regs */ BUILD_BUG_ON(sizeof(struct xhci_run_regs) != (8+8*128)*32/8); return 0; unreg_pci: xhci_unregister_pci(); return retval; > module_init(xhci_hcd_init); 

      Давайте посмотрим на функцию xhci_register_plat

      static struct platform_driver usb_xhci_driver =  .probe = xhci_plat_probe, .remove = xhci_plat_remove, .driver =  .name = "xhci-hcd", .pm = DEV_PM_OPS, .of_match_table = of_match_ptr(usb_xhci_of_match), >, >; MODULE_ALIAS("platform:xhci-hcd"); int xhci_register_plat(void)  return platform_driver_register(&usb_xhci_driver); > 

      Похожие статьи

      • Usb enhanced host controller

        Содержание Неполадки USB 2.0 в Windows 8 на материнских платах с Intel 6 Series Chipset Проблема Использовать дополнительный контроллер Отключить USB…

      • Sata controller что это

        Содержание Обзор SATA-контроллера ASMedia ASM1166 с интерфейсом PCIe 3.0 x2 ASMedia ASM1166 Тестирование Методика тестирования Участники тестирования…

      • Pci simple communications controller что это

        Содержание За что отвечает pci контроллер simple communications Что за устройство pci-контроллер simple communications? Основные функции устройства…

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Что будем искать? Например,Человек

Мы в социальных сетях