Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

                 printk(KERN_WARNING "bios32_service(0x%08x): returned 0x%x -- BIOS bug! ",

                        service, return_code);

                 return 0;

    }

}

А теперь рассмотрим порядок обращения к сервису PCI BIOS в защищенном режиме, выполнив проверку присутствия PCI BIOS в системе:

int check_pcibios(void)

{

    u32 signature, eax, ebx, ecx;

    u8 status, major_ver, minor_ver, hw_mech;

    u32 flags,

    u32 pcibios_entry;

pcibios_entry – это точка входа в сервис, назначение остальных переменных рассмотрим ниже. Ищем точку входа в сервис PCI путём вызова функции bios32_service(). Параметр функции – идентификатор сервиса, сигнатура $PCI. Все адреса отсчитываются относительно нижней границы адресного пространства ядра (PAGE_OFFSET = 0xC0000000).

    if ((pcibios_entry = bios32_service(PCI_SERVICE))) {

           pci_indirect.address = pcibios_entry + PAGE_OFFSET

 

Выполняем обращение к функции проверки присутствия PCI BIOS в системе – 0xB101. Для этого выполняем дальний вызов через точку входа pcibios_entry, предварительно заполнив регистры процессора следующей информацией:

n  EAX – запрашиваемая функция сервиса, в данном случае 0xB101;

n  EDI – адрес точки входа в сервис.

 

В результате выполнения вызова в регистрах процессора будет находиться следующая информация:

n  EDX – сигнатура запрашиваемого сервиса (PCI в нашем случае);

n  AH – признак присутствия сервиса (0 – PCI BIOS присутствует, если в EDX правильная сигнатура, любое другое значение – PCI BIOS отсутствует);

n  AL – поддерживаемый аппаратный механизм конфигурирования (см. «Configuration Mechanism #1»);

n  BH – номер версии интерфейса;

n  BL – подномер версии интерфейса;

n  CL – номер последней шины PCI в системе.

Итак, выполняем вызов:

           __save_flags(flags); __cli();

           __asm__(

                 "lcall (%%edi); cld "

                 "jc 1f "

                 "xor %%ah, %%ah "

                 "1:"

                 : "=d" (signature), // в EDX возвращается сигнатура "PCI"

                   "=a" (eax), // в AH - признак присутствия, в AL - аппаратный механизм


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100