Спецификация AHCI

У меня есть вопрос относительно спецификации AHCI:

Переменная pDmaXferCnt в порту, используемом при передаче данных DMA для записи или чтения?

Описание в спецификации, кажется, указывает, что это не так, но вместо этого используются PRD. Но как HBA узнает, сколько данных нужно отправить или получить на / с устройства SATA? Эта информация будет доступна в подсчете секторов FIS H2D, но если я не пропустил ее, то, похоже, не существует регистра переменной, содержащей это значение. DX:transmit государство также, кажется, указывает на то, что pDmaXferCnt будет иметь установленное значение, но я не могу видеть, где он будет установлен для операции чтения / записи DMA.

Спасибо

1 ответ

Из спецификации: "Замечание по реализации: переменные состояния HBA используются для описания требуемого внешне видимого поведения. Реализациям не требуется иметь внутренние значения состояния, которые непосредственно соответствуют этим переменным". - означает, что вы (возможно) не найдете pDmaXferCnt внешне в реестре.

Есть и другой способ отследить счет.

В разделе "Использование пространства памяти HBA" спецификации AHCI имеются структуры данных списка команд (список заголовков команд) и таблицы команд (на которые указывает заголовок команды, каждая таблица команд представляет собой команду для отправки). Они оба доступны для HBA.

В заголовке команды в DW0 указывается PRDTL, который подсчитывает, сколько PRD будет использовано при передаче.

Теперь в фактической таблице команд, на которую указывает заголовок команды, содержатся фактические PRD, в каждом PRD содержится их собственный DBC или счетчик байтов данных (количество данных в байтах, которое должно быть DMA в месте, указанном в DBA). Таким образом, если вы возьмете каждый из PRD *, в котором есть свои DBC, и сложите их, вы получите объем данных для передачи.

В качестве альтернативы в заголовке команды DW1 находится PRDBC, который является числом переданных байтов, так что вы можете проверить это после команды.

HBA - хост-адаптер шины

PRDTL - длина таблицы дескрипторов физической области

PRD - дескриптор физического региона (отслеживает, куда в физической памяти и количестве байтов следует передавать)

DBC - количество байтов данных (внутри PRD)

DBA - адрес базы данных (физический адрес внутри PRD)

PRDBC - количество байтов дескриптора физической области

DMA - прямой доступ к памяти

Для получения дополнительной информации: http://www.intel.com/content/www/us/en/io/serial-ata/serial-ata-ahci-spec-rev1-3-1.html

введите описание изображения здесь

введите описание изображения здесь

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