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. Чё я тут делаю с моим руским и английским?
Доброго времени суток! Я хочу активиривать "расширенный механизм настройки PСI-Express". Для этого (как я понял) нужно произвести запись в регистр PCIEXBAR (0x60 в данном случае). Стандартный механизм разрешает обращение только к 256 айтам конфигуранционного пространства, т.е. в случае 32х битных регистров максимально возможный адрес - 0x3C.
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): +---+---------+-------+----------+--------+---------------+-+-+ |31 |30 24|23 16|15 11|10 8|7 2|1|0| +---+---------+-------+----------+--------+---------------+-+-+ | С | резерв |шина |устройство| функция|Индекс регистра|0|0| +---+---------+-------+----------+--------+---------------+-+-+ Порт адреса задает шину, устройства, и адрес регистра в конфигурационном пространстве устройства. Грубо говоря, устройство - это физически присутствующее устройство. А функция - это логическое устройство. Пусть вас не удивляет, но большая часть PCI устройств это системные устройства, а не платы расширения PCI. С - флаг доступа к устройству. Когда он выставлен, начинается выполняться цикл. Первые два бита в порту данных всегда 0. Следовательно, читать за один рас из конфигурационного пространства мы можем только по 32бита (один регистр) Число шин можно узнать из PCI BIOS или из структуры $PIR (см раздел по прерываниям). Для подсчета шин вручную нужно найти все мосты PCI-to-PCI. Код (Text): mov dx,0CF8h mov eax, 60h or eax,80000000h out dx,eax ;// выбираем адрес mov dx,0CFCh in eax,dx ;// читаем регистр Это и будет PCIEXBAR. Дальше разбираем этот регистр соответственно его формату. Если он 64бита то читаем еще один регистр.
Pavia mov dx,0CF8h mov eax, 60h <-- здесь не опечатка? может быть имеелось ввиду in eax,60h или in eax,dx? or eax,80000000h <-- не проще сразу mov eax,80000060h
Mikl___ Не опечатка. Вначале мы устанавливаем индекс регистра, а потом читаем этот регистр. Это очень распростроненная практика. Проще, просто для наглядности так сделал. Тут глянул регистр 64 битный. Так что в два захода читать.
Учитывая: Код (Text): +---+---------+-------+----------+--------+---------------+-+-+ |31 |30 24|23 16|15 11|10 8|7 2|1|0| +---+---------+-------+----------+--------+---------------+-+-+ | С | резерв |шина |устройство| функция|Индекс регистра|0|0| +---+---------+-------+----------+--------+---------------+-+-+ mov eax,0x80000060 (10000000000000000000000001100000b) никак не вписывается в него. Получается, что мы обращаемся к регистру по адресу: 0x18 В два захода - это так? Код (Text): mov dx,0CFCh in eax,dx in eax,dx
exst Непутай адрес 60h, а индекс 18h. Один индекс указывает на 4байта. За раз мы читаем и пишем только 32 байта. По этому тут все верно. Вот так. Код (Text): mov eax,80000060h mov dx,0CF8h out dx,eax ;// выбираем адрес mov dx,0CFCh in eax,dx ;// читаем регистр mov [PCIEXBAR],eax mov eax,80000064h mov dx,0CF8h out dx,eax ;// выбираем адрес mov dx,0CFCh in eax,dx ;// читаем регистр mov [PCIEXBAR+4],eax PCIEXBAR dq ?
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
Код (Text): +---+---------+-------+----------+--------+---------------+-+-+ |31 |30 24|23 16|15 11|10 8|7 2|1|0| +---+---------+-------+----------+--------+---------------+-+-+ | С | резерв |шина |устройство| функция|Индекс регистра|0|0| +---+---------+-------+----------+--------+---------------+-+-+ Где здесь адрес?
exst Это все адрес. Но когда я выше говорил о адрессе из конфигурационного пространства некоторого устройства. То подрозумивал, что биты 7:2 соответсвуют битам 7:2 адресса регистра из PCI cfg конкретного устройства.