Rework механизма обнаружения оборудования...

Видеокарты ATI/AMD

Классы видеокарт-драйверов

  1. vesa - все что не поддерживается свободными драйверами. Переключается автоматом, если нет фирмвари... (TODO Просто добавить vesa если не держит radeon)
  2. radeon - видеокарты с поддержкой только с свободными драйверами. Список в файле ati_pciids.csv. В скрипте $ati_free_only. Генерация использует функцию read_ati_pciids_csv
  3. fglrx-legacy - видеокарты поддерживаемые legacy драйвером. Список в файле fglrxko_pci_ids.h. В скрипте $ati_driver_legacy. Генерация использует функцию read_fglrxko_pci_ids_h_legacy.

FIXME все ли legacy карты поддерживаются radeon?

  1. fglrx - видеокарты, поддерживаемые и свободными и простыми драйверами. Список в файле fglrxko_pci_ids.h. В скрипте $ati_driver_vesa. Генерация использует функцию read_fglrxko_pci_ids_h
  2. radeon/fglrx - видеокарты с поддержкой и свободных и проприетарных драйверов. В скрипте $ati_driver_fw
# UPDATE ME WHEN UPDATING ../lst/Cards+:
my $ati_driver_legacy  = 'Card:ATI Radeon HD 2000 to HD 4870 (radeon/fglrx-legacy)';
my $ati_driver_fw   = 'Card:ATI Radeon HD 6400 and later (radeon/fglrx)';
my $ati_driver_vesa = 'Card:ATI Radeon HD 5000 and later without free driver (vesa/fglrx)';
my $ati_free_only   = 'Card:ATI Radeon HD 4870 and earlier';

Логика работы

Порядок обновления придется оставить такой, как есть.

1 проход. Обновляем Legacy

 convert/merge2pcitable.pl fglrxko_pci_ids_h_legacy /path/to/fglrxko_pci_ids.h lst/pcitable > pcitable.new

Формируем список карт, поддерживаемых legacy драйверами. Так как карты могут быть убраны или не существовать, то выполняем следующие шаги:

  1. Берет d_pci текущий и смотрим на наличие там карт $ati_driver_legacy, $ati_driver_fw и $ati_driver_vesa.
  2. Если карта в d_in совпадает с картой из $ati_driver_fw или $ati_driver_vesa, то заменяем ей d_pci (карта поддерживается легаси дровами)
  3. Иначе если совпадает d_pci или d_in нету в текущем списке - оставляем или добавляем карту (может быть имя придется обновить, поэтому просто добавляем) с заменой дров, которые там есть
  4. Иначе дропаем ее и заменяем свободной $ati_free_only (поддержка кончилась)

2 проход. Затем по этим картам пробегаемся и включаем поддержку frglx дров

 convert/merge2pcitable.pl fglrxko_pci_ids_h /path/to/fglrxko_pci_ids.h lst/pcitable > pcitable.new
  1. Берем d_pci текущий и смотрим на наличие карт $ati_driver_legacy, $ati_driver_fw, $ati_driver_vesa
  2. Если карта в d_in совпадает с картой из $ati_driver_fw или $ati_driver_legacy, то заменяем ей d_pci (карта поддерживается vesa/fglrx дровами)
  3. Иначе просто совпадает d_pci или нету - оставляем или добавляем карту
  4. Иначе дропаем и заменяем свободной $ati_free_only (поддержка кончилась)

3 проход - пробегаем снова по картам и где можно переключаем назад vesa/fgrlx на radeon/fgrlx с поддержкой свободных дров и добавляем просто свободные драйвера где еще не сделано и дропаем на vesa где уже не поддерживает!

convert/merge2pcitable.pl ati_pciids_csv /path/to/ati_pciids.csv lst/pcitable > pcitable.new
  1. Берем d_pci текущий и смотрим на наличие карт $ati_driver_vesa
  2. Проверяем на совпадение. Если карта есть в наличии, то заменяем d_pci c $ati_driver_vesa на $ati_driver_fw
  3. Берем d_pci и смотрим на наличие карт $ati_free_only. Если есть совпадения с d_in, то оставляем как есть, иначе ставим просто "Card:VESA driver (generic)" (свободные дрова тоже уже не держат).

FIXME (проверить, если дропает на веса fglrx-legacy, то добавить аналог vesa-legacy!)