Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Aug 17, 2019 8:34 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 105 posts ]  Go to page Previous 1 2 3 4 57 Next
Author Message
 Post subject:
PostPosted: Thu May 25, 2006 9:43 pm 
Serge
Не всегда. Некоторые устройства отключены в БИОС. И бывает так, что БИОС не видит устройство. Например, то, что висит на USB. Контроллер то он определит, а вот что к нему подключено не всегда.
А какая ценность по твоему мнению в выводе прерываний назначенных БИОС?


Top
   
 Post subject:
PostPosted: Thu May 25, 2006 10:24 pm 
Offline
Kernel Developer

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


Top
   
 Post subject:
PostPosted: Wed Aug 30, 2006 9:34 pm 
Offline

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


Top
   
 Post subject:
PostPosted: Sat Feb 17, 2007 5:10 pm 
Offline

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


Top
   
 Post subject:
PostPosted: Sat Feb 17, 2007 6:20 pm 
Offline
Kernel Developer

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


Top
   
 Post subject:
PostPosted: Sun Mar 11, 2007 4:41 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
To Serge
Serge wrote:
Было бы неплохо. Для ядра пригодится код надёжного определения размера видеопамяти, а то с VESA были проблемы. Готов помочь чем смогу.

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

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

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


Top
   
 Post subject:
PostPosted: Sun Mar 11, 2007 7:52 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pavia

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

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


Top
   
 Post subject:
PostPosted: Sun Mar 11, 2007 8:50 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Serge wrote:
Pavia

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

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

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

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

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

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

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

Если наш Bass address задает базовый адрес в пространстве памяти. То он имеет следующий формат.
Code:
+--------------------------------------------+-+-+-+-+
|                                           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 сохраненное значение.


Top
   
 Post subject:
PostPosted: Sun Mar 11, 2007 9:20 pm 
Offline
Kernel Developer

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


Top
   
 Post subject:
PostPosted: Sun Mar 11, 2007 9:35 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Serge wrote:
Pavia
Мне не очень нравится идея записывать данные в BAR. Не ясно как это может повлиять на работу карт. Это рекомендованный разработчиками PCI способ или хакерский приём?

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

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


Top
   
 Post subject:
PostPosted: Mon Mar 12, 2007 12:41 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pavia

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

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


Top
   
 Post subject:
PostPosted: Mon Mar 12, 2007 1:02 pm 
Offline

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


Top
   
 Post subject:
PostPosted: Mon Mar 12, 2007 8:00 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Serge wrote:
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 сказать не могу. Но вроде они тоже запоминают позицию при разных разрешениях.
Исходное значение хранить не нужно. После выключения питания параметры сбрасываются. Часть выставляет устройство. А другую уже инициирует БИУС.
Повиснет и повиснет. Мы же минеям регистры только на короткий срок, и тут же их восстанавливаем.


Top
   
 Post subject:
PostPosted: Mon Mar 12, 2007 10:18 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pavia
Попробовать конечно можно, но уж больно засекреченные это устройства. Желательно точно знать как отреагирует видеокарта на запись неправильных значений в её конфиг. регистры.


Top
   
 Post subject:
PostPosted: Tue Mar 13, 2007 1:00 am 
Offline

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

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

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

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

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


Last edited by Pavia on Tue Mar 13, 2007 7:43 pm, edited 1 time in total.

Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 105 posts ]  Go to page Previous 1 2 3 4 57 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited