OSDev

для всех
Текущее время: 17 авг 2018, 00:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: PCI
СообщениеДобавлено: 07 дек 2011, 19:41 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Собираюсь реализовывать работу с PCI. Посоветуйте пожалуйста документации или какие статьи по нему. Спецификацию PCI начал читать - там больше аппаратной части. А мне нужно именно сама работа: как определить все PCI устройства, как писать/читать их регистры, ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 07 дек 2011, 20:20 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
А чего там разбираться?
Обсуждали сто раз. Поищи.

Есть 2 порта. Принцип похож на общение с другими устройствами. В первый устанавливаешь адрес из второго читаешь пишешь данные. *)
Есть такое понятие как конфигурационное пространство(КФП). Это набор регистров которые есть у каждого устройства PCI.
Вот адрес задает шину устройство, функцию(логическое устройство), а также номер регистра в КФП.
Регистр 4 байта.

Для того чтобы найти все устройства.
1. Узнать число шин. Варианты:
a) Прочитать из PIR table сигнатура "$PCI"
б) Биос вызывать нужное прерывание
с) путём подсчёта мостов PCI-PCI
2. Перебираешь все устройства и шины. Можно совместить с пунктом c).
Читаешь нулевой регистр и по нему определяешь присутствие или отсутствие устройства.
3. По нулевому устройству определяешь есть ли логические устройства.

Из КФП читаешь регистры с базовых адресов(РБА/BAR).
Надо сказать что БРА бывают двух типов
I. которые указывают либо на базовый адрес порта ввода/вывода доступные через команды in out.
II. которые указывают либо на базовый адрес порта ввода/вывода отображенного в память(ПВВОП/ MMIO) доступные через команды mov [],r и другии команды работы с памятью.


*) Там есть ещё флаг C который, как я понимаю служит сигнализацией что адрес целиком записан.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 07 дек 2011, 20:30 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
РБА/BAR служит для непосредственной работы с устройством.
Описание и принцип действия этих портов читается из спецификации на конкретное устройство.

Отдельно надо поговорить про IRQ. В КФП просто информационное поле для IRQ и запись в него не влияет на устройство.
За переназначение отвечает IRQ routing, реализация зависит от железа. Специфика прерываний описана в спецификации PCI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 07 дек 2011, 21:02 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Спасибо большое!
А каков формат PIR table? В плане где в ней искать количество шин?
И правильно ли я понял, что получив число шин, нужно тыркаться во все устройства перебором?
И еще, как отличить BAR разных видов? Всмысле как определить, какие из них указывают на адрес порта, а какие на память (кроме как "число маленькое - значит порт")? Кстати, в вике пишут, что их надо не читать, а как раз наоборот, мол изначально они сами частенько не выставлены.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 08 дек 2011, 05:29 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
a)
Цитата:
А каков формат PIR table? В плане где в ней искать количество шин?

http://ru.osdev.wikia.com/wiki/PCI_IRQ_Routing_Table_Specification
b)
http://ru.osdev.wikia.com/wiki/PCI_BIOS
c) Уже сказал. Перебор с подсчётом мостов.


Цитата:
И правильно ли я понял, что получив число шин, нужно тыркаться во все устройства перебором?

Да правильно.

Цитата:
И еще, как отличить BAR разных видов? Всмысле как определить, какие из них указывают на адрес порта, а какие на память (кроме как "число маленькое - значит порт")? Кстати, в вике пишут, что их надо не читать, а как раз наоборот, мол изначально они сами частенько не выставлены.

Если в БИОСе выбрано PnP OS то должно выставляться. Вот если не выбрано, то возможно надо выставлять. Задачка не простая. Так как зависимость по железу будет большой. Пока советую просто читать. А вот с установкой если столкнётесь то делайте под конкретную материку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 08 дек 2011, 05:33 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
По поводу типа BAR определяется по флагам в самом регистре читай
PCI Local Bus Specification. Revision 3.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 08 дек 2011, 18:49 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Благодарю!
Только вот не нашел в PIR table поля, отвечающего за количество шин. Пожалуй заюзаю биос или подсчет мостов.

Подсчет мостов - значит, перечисляем все на первой шине, находим мост (если есть), перечисляем на следующей? Как тогда определить, что встретили мост?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 14 дек 2011, 22:17 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
UP. Читать регистры научился, но все еще не знаю, как узнать, когда встретил мост.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 16 дек 2011, 13:40 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Header Type (тип заголовка) – если бит 7 равен 1 то устройство содержит несколько функций.
Если бит 6 равен 0 то заголовок стандартный. Стандартные заголовки:
00 – стандартный смотри выше.
01 – стандартный для моста PCI-to-PCI
02 – стандартный для моста CardBus.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI
СообщениеДобавлено: 17 дек 2011, 13:21 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Спасибо. Перечисление сделал, работает.
Теперь немного наивный вопрос: А есть способ определить, какого типа устройство? В USB насколько я знаю есть несколько стандартных типов устройств. Есть ли подобное в PCI, чтобы система могла однозначно сказать: "Это видеокарта. А это сетевая. А это контроллер дисков."?

К чему это я: хочу работать с дисками через контроллер дисков PCI-ный. И нормальный DMA сделать.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB