Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
#define PCIBIOS_FIND_PCI_CLASS_CODE 0xb103 // поиск устройства PCI заданного класса
#define PCIBIOS_READ_CONFIG_BYTE 0xb108 // прочитать байт из конф. пространства устройства PCI
#define PCIBIOS_READ_CONFIG_WORD 0xb109 // прочитать слово из конф. пространства устройства PCI
#define PCIBIOS_READ_CONFIG_DWORD 0xb10a // прочитать двойное слово из конф. пространства устройства PCI
Сигнатура, по которой производится поиск служебного каталога BIOS32 (_32_):
#define BIOS32_SIGNATURE (('_' << 0) + ('3' << 8) + ('2' << 16) + ('_' << 24))
Сигнатура для проверки присутствия PCI BIOS в системе (используется функцией PCIBIOS_PCI_BIOS_PRESENT):
#define PCI_SIGNATURE (('P' << 0) + ('C' << 8) + ('I' << 16) + (' ' << 24))
Сигнатура, по которой осуществляется поиск сервиса BIOS32:
#define PCI_SERVICE (('$' << 0) + ('P' << 8) + ('C' << 16) + ('I' << 24))
Определим структуру для хранения информации об устройстве PCI:
struct pci_dev_struct {
u16 vendor_id, device_id; // код фирмы-изготовителя и код типа устройства
u32 class_code; // код класса устройства
u32 base_addr; // адрес порта I/O
u8 bus, dev, fn; // координаты устройства - номер шины, номер устройства на шине и номер функции устройства
};
Следующие две структуры описывают физические адреса точек входа в BIOS32 и в сервис BIOS32 (PCI BIOS).
Физический адрес точки входа в BIOS32 (в формате селектор:смещение):
static struct {
u32 address;
u16 segment;
} bios32_indirect = { 0, __KERNEL_CS };
Физический адрес точки входа в сервис BIOS32 (PCI BIOS):
static struct {
u32 address;
u16 segment;
} pci_indirect = { 0, __KERNEL_CS };
__KERNEL_CS – селектор сегмента кода, определен в файле include/asm-i386/segment.h:
#define __KERNEL_CS 0x10
Стандартный служебный каталог BIOS32 имеет следующий вид:
union bios32 {
struct {
u32 signature; // сигнатура _32_
u32 entry; // 32-х битный физический адрес точки входа в BIOS32