Что означает Memory32Fixed() в дампе ACPI с базовым адресом 0x0 на _Y06?

#linux-kernel #acpi

#linux-ядро #acpi

Вопрос:

Я извлек acpidump в Ubuntu и пытаюсь понять, что устройство или BIOS предоставили хосту Linux.

Помимо IO порта, который не работает, я вижу только ресурс Memeory32Fixed() , базовый адрес которого 0x0 имеет допустимую длину _Y06 .

Я пытался читать / записывать с помощью виртуального адреса, полученного из ioremap(0x0, 0x10000) (в пространстве ядра), но, похоже, это не работает.

Итак, что это означает и как я могу использовать его для связи с оборудованием, если оно вообще полезно?

 Device (SOMETHING)
    {
        ......
        Name (RBUF, ResourceTemplate ()
        {
            Memory32Fixed (ReadWrite,
                0x00000000,         // Address Base
                0x00010000,         // Address Length
                _Y06)
        }
        .......
  

Комментарии:

1. Где-то еще есть код (ASL-код), который добавляет смещение.

2. Чтобы ответить на ваш вопрос, вам необходимо зарегистрировать драйвер платформы, который будет вызываться platform_get_resource(pdev, IORESOURCE_MEM, 0); для получения фактических значений.

3. @0andriy Я только что попробовал platform_get_resource() , и он возвращает тот же физический адрес, полученный с acpi_dev_get_resources() которого я использовал ранее, но запись на этот адрес (после использования ioremap() для преобразования их в виртуальный адрес, конечно) не работает.. Я могу найти этот адрес, который уже зарезервирован, /proc/iomem но он ОТСУТСТВУЕТ в DSDT.dsl извлеченном из acpidump. Есть идеи, что все еще может быть не так? Возможно ли, что BIOS / EFI неправильно назначили эти адреса?

4. Прочитайте мои комментарии выше, трудно сказать, когда вы не предоставили достаточно контекста (полный ASL для этого узла устройства, исходный код пробной части драйвера и т. Д.) И отладочной информации (напечатанные значения ресурса структуры и т. Д.).