Ответ 1
В фазе перечисления PCIe определяется максимальный разрешенный размер полезной нагрузки (он может быть ниже размера максимальной полезной нагрузки устройства: например, промежуточный переключатель PCIe имеет меньший максимальный размер полезной нагрузки).
Большинство устройств PCIe являются мастерами DMA, поэтому драйвер передает команду на устройство. Устройство отправит несколько пакетов для передачи 4 мегабайтов в размерах TLP размером xx max.
Изменить 1 в ответ на комментарий 1:
Шина на основе PCI не имеет "контроллера DMA" в виде микросхемы или подсхемы в наборе микросхем. Каждое устройство на шине может стать мастером шины. Основная память всегда является подчиненным.
Предположим, вы создали свою собственную карту PCIe, которая может выступать в роли ведущего устройства PCI, а ваша программа (работающая на CPU) хочет отправить данные с этой карты в основную память (4 MiB).
Драйвер устройства знает сопоставление памяти для этой конкретной области памяти из операционной системы (некоторые ключевые слова: отображение с отображением памяти, перечислимость шины PCI, PCI BARs).
Драйвер передает команду (запись), адрес источника, адрес назначения и длину устройства. Это можно сделать, отправив байты на специальный адрес внутри предварительно определенного BAR или записав в конфигурационное пространство PCI. Мастер DMA на карточках проверяет эти особые регионы на новые задачи (списки рассогласования). Если это так, тезисы задаются в очереди.
Теперь мастер DMA знает, куда отправлять, сколько данных. Он будет считывать данные из локальной памяти и переносить их на 512-байтные TLP с максимальным размером полезной нагрузки (максимальный размер полезной нагрузки на основной файловой системе пути - это информация из перечисления) и отправить ее на адрес назначения. Механизмы маршрутизации на основе PCI-адреса направляют эти TLP в основную память.