OSDev

для всех
Текущее время: 01 май 2024, 22:28

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




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: PCI VGA Cards
СообщениеДобавлено: 06 мар 2012, 20:20 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
Приветствую.
Где-то 2 месяца назад занялся осдевом, раскурил пачку мануалов, и перешёл к практике. А практика следующая:
Есть код:
Код:
#define outportl(p, l) asm("outl %d0, %w1"::"a"(l), "d"(p))
#define inportl(l, p) asm("inl %w1, %d0":"=a"(l):"d"(p))
int pci_read(char bus, char slot, char func, char offset){
   int address = (int)((((int)bus & 0xFF) << 16) | (((int)slot & 0xFF) << 11) | (((int)func & 0xFF) << 8) | (offset & 0xfc) | ((int)0x80000000));
   outportl(PCI_CONFIG_ADDRESS, address);
   inportl(address, PCI_CONFIG_DATA);
   return address;
}
short video_find_pci(){
   char bus, buscount=1, slot, bar;
   char ht, cc, sc;
   for(bus=0; bus<buscount; bus++){
      for(slot=0; slot<32; slot++){
         ht  = (pci_read(bus, slot, 0, 0x0C) >> 16) & 0xFF;
         if(ht == 0x01) {buscount++; continue;}
         if(ht == 0x02) continue;
         cc  = (pci_read(bus, slot, 0, 0x08) >> 24) & 0xFF;
         sc  = (pci_read(bus, slot, 0, 0x08) >> 16) & 0xFF;
         if(((cc == 0x00) && (sc == 0x01)) || (cc == 0x03))
            return ((short)bus << 8) | (short)slot;
      }
   }
   return 0xFFFF;
}

Код ищет PCI-видеокарточки.
На 7 контрольных устройствах (виртуалбокс, варя, 2 нетбука, ноутбук, планшет и домашний сервер-файлопомойка) он сработал идеально, но на компьютере друга решил, что видеокарточки нет. Причины обнаружить не удалось. Согласен, что 7/8 - хороший результат для новичка, но хотелось бы 100% детекта. Собственно, какие варианты, почему не работает?

И ещё вопрос в тему: как определить, какой из BAR-ов является LFB? Пока что делаю это по определению, какой из них выделяет больше всего памяти, но чую чакрами, что это не есть правильно.

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 07 мар 2012, 06:43 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Зачем вам искать видеокарточки? Что вы с ними делаете? По каким условиям вы их ишите?
Сделайте просто вывод всех контролеров с PCI шин и их класкоды, номер фирмы по девайсу и модели по вендору, её функцию, шину, её номер прерывания и чтонибудь ещё, и если она там будет, то вы её увидете и все другие устройства.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 07 мар 2012, 10:14 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Станислав, смысл не в отображении имен устройств, а в написании простейшего драйвера для работы с видео. Думаю, это очевидно. Для меня сей вопрос тоже актуален.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 07 мар 2012, 10:53 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
DJ PhoeniX, вы функции не перебираете, а надо.
LFB можно узнать через VESA, самый универсальный способ. И второй способ составить табличку Vendor ID Device ID - BAR
А чтобы понять где ошибка лучше весь список вывести и сравнить с чем либо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 07 мар 2012, 12:14 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
Станислав писал(а):
Зачем вам искать видеокарточки? Что вы с ними делаете? По каким условиям вы их ишите?

Зачем и что я делаю - по-моему очевидно: хочу получить адрес LFB и работать с ним, а также в последствии использовать другие данные из этого.
По каким условиям - вроде, понятно из кода. Class_00&Subclass_01 и Class_03.
pavia писал(а):
DJ PhoeniX, вы функции не перебираете, а надо.

Да, я уже думал об этом. Спасибо за наводку, сегодня попробую.
pavia писал(а):
LFB можно узнать через VESA, самый универсальный способ. И второй способ составить табличку Vendor ID Device ID - BAR
А чтобы понять где ошибка лучше весь список вывести и сравнить с чем либо.

VESA решил не использовать, как и остальной BIOS. А табличка выйдет довольно громоздкой. Пока что мой метод нигде не ошибся, так что пользуюсь им.

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 07 мар 2012, 14:31 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
В BAR есть ещё prefetch bit, можно по нему еще попробовать. Теоретически он присутствует на портах он должен отключать кэширование на чтение, а на ОЗУ отсутствует может и отсутствовать. За подробностями читай спецификацию PCI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 07 мар 2012, 14:56 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
Префетч-бит на всех протестированных девайсах установлен, добавил фильтрацию по нему.
MF-устройства сделал, жду возможности проверить работу на ПК друга. Это реально из-за них, ибо видяха у него на 4 басе, а один из мостов не на нулевой функции, так что до неё просто не доходил перебор. Класс 3, по фильтру совпадает, так что теперь должно работать...

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 14 мар 2012, 08:38 

Зарегистрирован: 13 окт 2008, 17:38
Сообщения: 46
Откуда: Владимир
DJ PhoeniX писал(а):
И ещё вопрос в тему: как определить, какой из BAR-ов является LFB? Пока что делаю это по определению, какой из них выделяет больше всего памяти, но чую чакрами, что это не есть правильно.


Если вы ищете правильный способ, то, как правильно говорили выше, это VESA, даже стандартный видеодрайвер Windows, вплоть до Windows 8, пока использует его.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 14 мар 2012, 11:12 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
valeri писал(а):
Если вы ищете правильный способ, то, как правильно говорили выше, это VESA, даже стандартный видеодрайвер Windows, вплоть до Windows 8, пока использует его.

Я ищу самый правильный из доступных. :)

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PCI VGA Cards
СообщениеДобавлено: 26 мар 2012, 18:36 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
С детектом разобрался, нашёл LFB и I/O-порты. Вопрос возник новый: какие команды в порты отсылать для работы с видеорежимами?

Поигравшись с VMWARE+IDA, получил километровый лог "чего куда", но даже при его полном воссоздании режим не меняется.

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


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

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


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

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


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

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