Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
"=b" (ebx), // в BH - номер версии интерфейса PCI, BL - подномер версии интерфейса
"=c" (ecx) // ECX - номер последней шины PCI в системе
: "1" (PCIBIOS_PCI_BIOS_PRESENT), // 0xB101 - функция проверки присутствия PCI BIOS в системе
"D" (&pci_indirect) // точка входа в сервис BIOS32
: "memory");
__restore_flags(flags);
и обрабатываем полученные результаты:
status = (eax >> 8) & 0xff; // признак присутствия сервиса с системе
hw_mech = eax & 0xff; // поддерживаемый аппаратный механизм
major_ver = (ebx >> 8) & 0xff; // номер версии
minor_ver = ebx & 0xff; // номер подверсии
Если сервис присутствует, переменная status будет равна 0. Проверяем это, а заодно и полученную сигнатуру:
if (status || signature != PCI_SIGNATURE) {
printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found ",
status, signature);
return 0;
}
printk(KERN_INFO "PCI: PCI BIOS revision %x.%02x entry at 0x%08x ",
major_ver, minor_ver, pcibios_entry);
return 1;
}
return 0;
}
Функция pci_bios_find_device() выполняет поиск устройства заданного типа при помощи PCI BIOS и возвращает его координаты – номер шины, к которой подключено устройство, номер устройства на шине и номер функции устройства:
static int pci_bios_find_device(u16 vendor, u16 device_id, u16 index, u8 *bus, u8 *dev, u8 *fn)
{
u16 bx;
u16 ret;
Функция принимает следующие параметры:
n vendor – код фирмы-изготовителя устройства PCI;
n device_id – код типа устройства;
n index – порядковый номер устройства заданного типа. Если устройство одно, то его порядковый номер равен 0.
Параметры bus, dev и fn, соответствующие координатам устройства PCI (номер шины, номер устройства на шине и номер функции), передаются по ссылке и будут изменены на реальные значения.
Для поиска устройства выполняем дальний вызов через точку входа в сервис BIOS32, задав в регистрах процессора соответствующие параметры:
n EAX – запрашиваемая функция сервиса, в данном случае 0xB102.