Распределение 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 (минимум)