Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт сен 21, 2017 1:32 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 101 сообщение ]  На страницу Пред. 1 2 3 4 57 След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт май 25, 2006 9:43 pm 
Serge
Не всегда. Некоторые устройства отключены в БИОС. И бывает так, что БИОС не видит устройство. Например, то, что висит на USB. Контроллер то он определит, а вот что к нему подключено не всегда.
А какая ценность по твоему мнению в выводе прерываний назначенных БИОС?


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт май 25, 2006 10:24 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Цитата:
А какая ценность по твоему мнению в выводе прерываний назначенных БИОС?
Вообще-то я писал о номерах IRQ а не векторах прерываний. Это все же разные вещи. Думаю что такая информация была бы полезна при создании драйверов устройств. Неплохо сравнить назначаемые БИОС IRQ на разных чипсетах.
Что касается БИОС и USB то БИОС нfверное и не должна определять все устройства по USB подключённые. Это должны делать драйверы самих устройств.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 30, 2006 9:34 pm 
Не в сети

Зарегистрирован: Ср май 18, 2005 7:27 pm
Сообщения: 1001
Первая версия была выпущена 19 месяцев назад и мы можем отпразновать эту дату с PCIDEV 2.00 ( http://www.coolthemes.narod.ru/pcidev.html ). Спасибо Марату.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 17, 2007 5:10 pm 
Не в сети

Зарегистрирован: Ср май 18, 2005 7:27 pm
Сообщения: 1001
Оффтоп: нужен ли форк PCIDEV, который будет давать информацию о видяхах, как CPUID дает её о процессоре? Пока я добавил пару строк для вывода только устройств класса 3 (gfx) и нашел на винче (неполный) список Device id для 27 вендоров видях. Прога по идее должна выдавать разрешение экрана, количество бит на пиксель, название видяхи, размер памяти видяхи (или хотя бы размер апертуры AGP), список разрешений, список поддерживаемых технологий (в спецификации AGP 3.0 про это туманно написано - возможно, что у каждого вендора свой формат хранения возможностей), возможно какую-то информацию по Vesa. Также надеюсь на помощь Mike.dld и Serge, если в такой проге есть какая-то нужда.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 17, 2007 6:20 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Было бы неплохо. Для ядра пригодится код надёжного определения размера видеопамяти, а то с VESA были проблемы. Готов помочь чем смогу.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 11, 2007 4:41 pm 
Не в сети

Зарегистрирован: Вс мар 11, 2007 4:05 pm
Сообщения: 64
To Serge
Serge писал(а):
Было бы неплохо. Для ядра пригодится код надёжного определения размера видеопамяти, а то с VESA были проблемы. Готов помочь чем смогу.

VESA - это самый надежный способ. И если уж с ним проблемы, то новернека что-то не в порядке либо с кодом либо с видюхой.
Размер видео памяти можно определить и через PCI.

А вот про технологии у видео карт не знаю ничего. Уверен что каждый вендор по свойму хранит информацию об этом.

Насчет IRQ - большинство из них стандартерезировано. И просто так менять нельзя.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 11, 2007 7:52 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Pavia

>Размер видео памяти можно определить и через PCI.

Каким образом?


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 11, 2007 8:50 pm 
Не в сети

Зарегистрирован: Вс мар 11, 2007 4:05 pm
Сообщения: 64
Serge писал(а):
Pavia

>Размер видео памяти можно определить и через PCI.

Каким образом?

В конфигурационном пространстве PCI у видео карты как и у лебого другого устройства есть BAR -регистры. Они определяют положение и диапозон памяти и портов ввода вывода который нужен для устройства.

Небольшое отступление.
Цитата:
BAR регистр или Bass address (базовый адрес)-это адрес регистров устройства. Обычно эти регистры отображаются на физические адреса памяти. Или более устаревшая модель в адресатное пространство портов ввода/вывода. Это и есть основные регистры PCI устройства, через который происходит программирование, но информация эта вендор зависимая.

Более детально о Bass address.

Если все биты 32 установлены в 0 то Bass address не записан в ячейку.
Если бит 0 установлен в 1 то Bass address задает базовый адрес в пространстве портов I/O.
Иначе если бит 0 установлен в 1 то Bass address задает базовый адрес в пространстве адресов памяти.
Если наш Bass address задает базовый адрес в пространстве портов I/O. То он имеет следующий формат.
Код:
+------------------------------------------------+-+-+
|31                                             2|1|0|
+------------------------------------------------+-+-+
|         Bass address                           |0|1|
+------------------------------------------------+-+-+

32 бита.
Нулевой бит указывает на то, что это пространство портов I/O.
Первый бит зарезервирован.
Остальные указываюсь адрес базового порта ввода вывода.

Если наш Bass address задает базовый адрес в пространстве памяти. То он имеет следующий формат.
Код:
+--------------------------------------------+-+-+-+-+
|                                           4|3|2|1|0|
+--------------------------------------------+-+-+-+-+
|         Bass address                       | |   |0|
+--------------------------------------------+-+-+-+-+

Либо 32 бита, либо 64 бита.
Нулевой бит указывает на то, что это пространство памяти.
Следующие два бита 1 и 2 определяют тип записи.
00- 32 битная запись любой адрес
01- 32 битная запись, но адрес меньше мегабайта.
02- 64 битная запись любой адрес
03- зарезервировано
Бит 3 – Prefetchable
Остальные биты базовый адрес.
Если вы хотите узнать размер памяти, которая отображается в адресное пространство. Или число портов ввода вывода. То вы должны выставить максимальное значение FFFFFFFF и прочитав его. Устройство занулит биты, которые соответствуют его диапазону адресов. Замечу, что выставляемый адрес должен быть кратным размеру его диапазона, выровнен по этому размеру.


Ищем видео карту, вернее ее конфигурационное пространство. Узнаем размер BAR регистров(их там несколько), тот который требует наибольшей диапазон тот и отвечает за положение и размер видео памяти.
Узнаем размер так читаем значение из BAR регистр, чтобы в последствии можно было его восстановить. Пешим в BAR регистр FFFFFFFFh читаем в ответ приходит нечто наподобие
F800000Ch зануляем первые 3-4 бита они служебные
F800000Ch and FFFFFFF0 получаем
F8000000h дальше отрицание neg
8000000h -128МБайт.
Там несколько BAR регистров один из них видео память другой регистры отображенные в адресатное пространство памяти остальные не задействованы. Выбираем максимальное- это нужно потому что у разных видео карт разные BAR регистры имеют разные предназначения.
Можно не выбирать максимально составить табличку для разных видео карт.
Восстанавливаем адрес пишем в BAR сохраненное значение.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 11, 2007 9:20 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Pavia
Мне не очень нравится идея записывать данные в BAR. Не ясно как это может повлиять на работу карт. Это рекомендованный разработчиками PCI способ или хакерский приём?


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 11, 2007 9:35 pm 
Не в сети

Зарегистрирован: Вс мар 11, 2007 4:05 pm
Сообщения: 64
Serge писал(а):
Pavia
Мне не очень нравится идея записывать данные в BAR. Не ясно как это может повлиять на работу карт. Это рекомендованный разработчиками PCI способ или хакерский приём?

То что в бар можно писать и что адрес подкорректируется описано в спецификации на PCI. В основном применяется данный способ БИОС, что бы установить начальные адреса.
Также этот способ используется в программах для определения параметров железа.

А во вторых мы восстанавливаем адрес.
Еще нужно позаботиться, что бы никто не обращался к железу. Пока мы будем писать читать значения. Иначе это может привести к ошибкам. Возможно есть еще какие-то хитрости о которых я не знаю.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 12, 2007 12:41 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Pavia

> Возможно есть еще какие-то хитрости о которых я не знаю

Вот эти хитрости и беспокоят. Сама по себе запись в регистры PCI не проблема, но как на это потом отреагирует железо ? Может после такого перепрограммирования надо делать сброс всего устройства. Не даром ведь у видеокарт есть своя БИОС.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 12, 2007 1:02 pm 
Не в сети

Зарегистрирован: Ср май 18, 2005 7:27 pm
Сообщения: 1001
В 2004-м году я поигрался с мю-эн-ОС. Загрузился с дискеты, посмотрел все 7 ил 9 программ, вышел. С тех пор у меня в загрузочном экране биос (там где информация об ОЗУ, процесссоре и т.п.) все содержимое экрана как будто сдвинуто влево таким образом, что первые две буквы предложений не видны... Видимо надо где-то хранить исходное содержание регистров PCI, а потом их восстанавливать при выходе из ОС (а что будет, если ядро повиснет???).


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 12, 2007 8:00 pm 
Не в сети

Зарегистрирован: Вс мар 11, 2007 4:05 pm
Сообщения: 64
Serge писал(а):
Pavia

> Возможно есть еще какие-то хитрости о которых я не знаю

Вот эти хитрости и беспокоят. Сама по себе запись в регистры PCI не проблема, но как на это потом отреагирует железо ? Может после такого перепрограммирования надо делать сброс всего устройства. Не даром ведь у видеокарт есть своя БИОС.

Сброс не нужен так как значения мы возвращаем в исходное тут же. Я сам видел как другие программы так делают и сам делал в своей. Тот же виндоус и линукс узнают диапазоны памяти и портов ввода/вывода у различных устройств таким же способом.

То что писать можно и это недолжно привадить к ошибкам написано в спецификации на PCI.
and host bridges can merge processor writes (refer to
Section 3.2.3) into this range(45) without causing errors.
Bits 0-3 are read-only.
The number of upper bits that a device actually implements depends on how much of the
address space the device will respond to.

(45) Any device that has a range that behaves like normal memory should mark the range as prefetchable. A
linear frame buffer in a graphics device is an example of a range that should be marked prefetchable.

Отсюда и другой способ определения что этот BAR регистр отвечает за память видео карты а не ее регистр 3 бит prefetchable.

Хитрость заключается в том, что когда мы перепрограммируем на FFFFFFFFh память передвигается в самый верх и перекрывается с другими системными областями. Такими как BIOS, контролер APIC и PM Timer и др. По этому мы и возвращаем диапазон на старое место.
Ну и нужно позаботиться, что бы небело прерываний которые могут обращаться к выше перечисленным вещам. А также к памяти и портам устройства. Запрет прерываний в полной мере должен решать эту проблему.

БИУС у видео карт нужен для реализации функции INT 10 и особенно прерываний VESA.
После запуска БИУСА видеокарты. Он делает первичную настройку видео карты. Устанавливает прерывание. После чего вход на первичную инициализацию блокируется. В старых видео картах идет обращение только через стандартные порты ввода/вывода, которые мы не меняем. Есть мнение что в новых видео картах при работе с VESA идет обращение к регистрам расположенных в памяти. Но обращение к ним будет идти только при вызове прерывания.



To Wildwest
То что экран сдвинулся это к PCI регистрам не имеет отношение. Мало вероятно что это имеет отношение к Колибри ОС.
Если это LCD монитор то на них есть функция выравнивания позиции экрана. Насчет CRT сказать не могу. Но вроде они тоже запоминают позицию при разных разрешениях.
Исходное значение хранить не нужно. После выключения питания параметры сбрасываются. Часть выставляет устройство. А другую уже инициирует БИУС.
Повиснет и повиснет. Мы же минеям регистры только на короткий срок, и тут же их восстанавливаем.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 12, 2007 10:18 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Pavia
Попробовать конечно можно, но уж больно засекреченные это устройства. Желательно точно знать как отреагирует видеокарта на запись неправильных значений в её конфиг. регистры.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 13, 2007 1:00 am 
Не в сети

Зарегистрирован: Вс мар 11, 2007 4:05 pm
Сообщения: 64
Я выше говорил про все PCI устройства и их стандартные регистры, не только видео карту. Это поможет в распределении ресурсов, я считаю что следует пересмотреть этот момент и добавить в ядро ОС.

В часть регистров конфигурационного пространства ты просто не запишишь так как они только для четения. А запись в другии регистры может привести к различным последствиям. Но то что ты там что либо испортишь мало вероятно. А если и испортишь то перезагрузка востановит.
Про последствия неправельной записи в регистры BAR - я не уточняю, так как многое описал.

Могу заверить что ничего страшного в этом нет. Я вот понимаю страшно мне было SPD перепрошивать(разумеется программа своя), но нужно.

Насчет видео карты, описание есть только у INTEL для их видео карт. Пролистал описание собственно там нет никаких особенных регистров, только стандартные.
Судя по тем знаниям что есть у меня о других видео картах, там тоже нет ничего особенного(только стандартные регистры). Программирование видео карт в драйверах идет через регистры отображенные в память базовый адресс которых задается в одном из BAR регистров в конфигурационном пространстве.
Правда не знаю как настраивается GART, возможно там задействован конфигурационное пространство.

PS. Рассикретим если надо.
PPS Моя программо под дос для определения параметров железа, в разделе PCI выводятся диапозоны памяти и портов воода/вывода - собственно о чем я и говорю.
http://footballtabl.h15.ru/ivan/info%200.623.zip
Сори вчера не тот билд предоставил.
В ближайшее время возможно обновление до версии 0.7


Последний раз редактировалось Pavia Вт мар 13, 2007 7:43 pm, всего редактировалось 1 раз.

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

Часовой пояс: UTC+03:00


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

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


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

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