Распределение Linux AHCI PRD

Я разработчик аппаратного обеспечения, который создает интерфейс AHCI для встроенной системы. Я хотел бы знать, где данные PRD DMA создаются и распределяются по PRD. Поскольку SATA использует DWORDS, я предполагаю, что данные будут выровнены с кратностью 4 байта. У меня нет большого опыта работы с Linux, поэтому буду признателен, если кто-нибудь укажет мне правильное направление.

Спасибо

1 ответ

Контроллер ahci действует как механизм перемещения данных между системной памятью и устройствами SATA. Возьмем, к примеру, операцию чтения, грубая последовательность выглядит следующим образом:

  • программа "строит" команду в памяти (заголовок команды, таблица команд и соответствующие PRD)
  • программное обеспечение выдает эту команду, настраивая регистр порта, PxCI(и PxSACT, если NCQ)
  • Контроллер AHCI извлекает и обрабатывает эту команду (включая передачу данных...)
  • Служба прерываний программного обеспечения вызывается для обработки завершения команды
  • программа считывает PRD для получения содержимого устройства

Записи PRD создаются / распределяются программным обеспечением (драйвером) и могут быть найдены / извлечены с помощью таблицы команд, то есть аппаратное обеспечение может найти таблицу команд, а затем извлечь все записи PRD. Кроме того, спецификация ahci определяет как PRD-адрес, так и количество байтов для выравнивания по WORD (минимум)

Другие вопросы по тегам