Как это правельно перевести? PCI-E config

Тема в разделе "WASM.ZEN", создана пользователем exst, 15 янв 2009.

  1. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Как это правильно перевести?

    P.S. Как произвести запись в PCI регистр по адресу: 0x60
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    configuration можно переводить как конфигурирования, но по русски настрайки
    host вообще на русский не переводиться. Вообще по смыслу заменяют. А тут впихнули как то нетуды не сюды. Надо поконтексту смотреть как лучше перевести.

    Для доступа к этому пространству(шаги 1,2,3 производяться только один раз это выполняет BIOS) // тут скорее всего ошибка шаг 3 и 4 это уже твои действия.

    1. Используем механизм настройки совместимый с PCI, для разрешения расширенного механизма настройки PCI-Express. Припомощи записи 1 в нуливой бит регистра PCIEXBAR.
    2. Используем механизм настройки совместимый с PCI для записи нужного базового адресса PCI
    Express в регистр PCIEXBAR.
    3. Рассчиттайте хозяйствующей адреса регистра, регистра который вы собрались использовать.(
    база PCI Express + (номер шины * 1 MB) + (номер устройства * 32KB) + (номер функции *
    4 KB) + (1 B * смещение относительно функции) = хозяйствующей адрес)
    4. Используйте запись в память или чтение по рассичтанному хозяйствующему адресу. Для записи или чтение выбранного регистра.

    Какой механизм испольховать собрализь? И что значит по адресу 60h? хост адресс?
    Нужно еще знать: номер шины, номер устройства , номер функции. Cмещение относительно функции я так понимаю мы знаем 60h.

    PS. Чё я тут делаю с моим руским и английским?
     
  3. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Доброго времени суток! Я хочу активиривать "расширенный механизм настройки PСI-Express". Для этого (как я понял) нужно произвести запись в регистр PCIEXBAR (0x60 в данном случае). Стандартный механизм разрешает обращение только к 256 айтам конфигуранционного пространства, т.е. в случае 32х битных регистров максимально возможный адрес - 0x3C.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    С добрым утром. Написанно что это должен делать BIOS. Так что все настроено. Ты можешь прочитать базовый адресс если он не фиксированный.

    Для работы с PCI устройствами есть два пути через сервис BIOSa или через порты ввода/вывода. Вернее не самими устройствами, а с их конфигурационными пространствами этих устройств. Конфигурационное адресное пространство это 256 байт в каждом PCI устройстве. Предназначенные для идентификации устройства и его настройки. Для доступа к конфигурационному адресному пространству в PC-AT и совместимых машинах выделено два основных порта.
    0CF8h -W порт адреса Address
    0CFCh RW порт данных Data
    Оба порта являются 32 битными.

    Вернее это 4 порта 0CF8h-0CFBh задают адрес
    И 4 порта 0CFСh-0CFFh данные.
    И еще порт 0CF9h в Intel служит для перезагрузки. У других производителей способ перезагрузки отличается.

    Порт адреса представляет собой следующую 32 битную структуру
    Код (Text):
    1. +---+---------+-------+----------+--------+---------------+-+-+
    2. |31 |30     24|23   16|15      11|10     8|7             2|1|0|
    3. +---+---------+-------+----------+--------+---------------+-+-+
    4. | С | резерв  |шина   |устройство| функция|Индекс регистра|0|0|
    5. +---+---------+-------+----------+--------+---------------+-+-+
    Порт адреса задает шину, устройства, и адрес регистра в конфигурационном пространстве устройства. Грубо говоря, устройство - это физически присутствующее устройство. А функция - это логическое устройство. Пусть вас не удивляет, но большая
    часть PCI устройств это системные устройства, а не платы расширения PCI.
    С - флаг доступа к устройству. Когда он выставлен, начинается выполняться цикл.

    Первые два бита в порту данных всегда 0. Следовательно, читать за один рас из конфигурационного пространства мы можем только по 32бита (один регистр)

    Число шин можно узнать из PCI BIOS или из структуры $PIR (см раздел по прерываниям). Для подсчета шин вручную нужно найти все мосты PCI-to-PCI.

    Код (Text):
    1. mov dx,0CF8h
    2. mov eax, 60h
    3. or eax,80000000h
    4. out dx,eax ;// выбираем адрес
    5. mov dx,0CFCh
    6. in eax,dx ;// читаем регистр
    Это и будет PCIEXBAR. Дальше разбираем этот регистр соответственно его формату. Если он 64бита то читаем еще один регистр.
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.873
    Pavia
    mov dx,0CF8h
    mov eax, 60h <-- здесь не опечатка? может быть имеелось ввиду in eax,60h или in eax,dx?
    or eax,80000000h <-- не проще сразу mov eax,80000060h
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Mikl___
    Не опечатка. Вначале мы устанавливаем индекс регистра, а потом читаем этот регистр.
    Это очень распростроненная практика.

    Проще, просто для наглядности так сделал.

    Тут глянул регистр 64 битный. Так что в два захода читать.
     
  7. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Учитывая:

    Код (Text):
    1. +---+---------+-------+----------+--------+---------------+-+-+
    2. |31 |30     24|23   16|15      11|10     8|7             2|1|0|
    3. +---+---------+-------+----------+--------+---------------+-+-+
    4. | С | резерв  |шина   |устройство| функция|Индекс регистра|0|0|
    5. +---+---------+-------+----------+--------+---------------+-+-+
    mov eax,0x80000060 (10000000000000000000000001100000b) никак не вписывается в него. Получается, что мы обращаемся к регистру по адресу: 0x18

    В два захода - это так?
    Код (Text):
    1. mov dx,0CFCh
    2. in eax,dx
    3. in eax,dx
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    Непутай адрес 60h, а индекс 18h. Один индекс указывает на 4байта. За раз мы читаем и пишем только 32 байта. По этому тут все верно.


    Вот так.
    Код (Text):
    1. mov eax,80000060h
    2. mov dx,0CF8h
    3. out dx,eax ;// выбираем адрес
    4. mov dx,0CFCh
    5. in eax,dx ;// читаем регистр
    6. mov [PCIEXBAR],eax
    7.  
    8. mov eax,80000064h
    9. mov dx,0CF8h
    10. out dx,eax ;// выбираем адрес
    11. mov dx,0CFCh
    12. in eax,dx ;// читаем регистр
    13. mov [PCIEXBAR+4],eax
    14.  
    15.  
    16. PCIEXBAR dq ?
     
  9. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Хм... А зачем тогда в документации Интела указывают:
    Код (Text):
    1. B/D/F/Type  0/0/0/PCI
     
  10. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    И в чем отличие от
    Код (Text):
    1. B/D/F/Type  0/0/0/MCHBAR
     
  11. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Относятся ли к индексу первые 2 бита (те что нули) адреса?
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    B -bus - номер шины
    d - Device-номер устройства
    f-function - номер функции.
    Указывается что бы знать адресс.
    Тип определяет откуда читать PCI- из конфигурационного пространства PCI и B/D/F учавствует в адрессе.
    В остальных случиях. Адресс считает от BAR регистра. А B/D/F утачнает BAR адресс какого устройства.
    В устройстве B/D/F читается BAR регистр. В нем содержиться база и доступ идет от этого регистра MCHBAR+смещение.
    Напоминаю что в BAR содержиться по мимо базового адресса еще и служебные биты.
    Ровно как и в PCIEXBAR .

    BAR - сокрощение от Bass address registers
     
  13. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    С BARами понятно. А каков формат адреса?

     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    Непонял формат какого адресса?
    В любом случии у тебя все есть.
     
  15. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Код (Text):
    1. +---+---------+-------+----------+--------+---------------+-+-+
    2. |31 |30     24|23   16|15      11|10     8|7             2|1|0|
    3. +---+---------+-------+----------+--------+---------------+-+-+
    4. | С | резерв  |шина   |устройство| функция|Индекс регистра|0|0|
    5. +---+---------+-------+----------+--------+---------------+-+-+
    Где здесь адрес?
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    Это все адрес. Но когда я выше говорил о адрессе из конфигурационного пространства некоторого устройства. То подрозумивал, что биты 7:2 соответсвуют битам 7:2 адресса регистра из PCI cfg конкретного устройства.
     
  17. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Получается, что бит 31 (C) является частью адреса.
     
  18. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    exst
    С нетоносится. Кончай дурока волять.