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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

           u8 revision; // номер версии, Revision level, 0

           u8 length;          // размер служебного каталога в 16-байтных параграфах

           u8 checksum; // контрольная сумма, дополняет все байты до 0

           u8 reserved[5];     // зарезервировано, заполняется нулями

    } fields;

    char chars[16];

};

Рассмотрим функцию, которая производит поиск служебного заголовка BIOS32.

int pci_find_bios(void)

{

    union bios32 *check; // служебный каталог BIOS32

    u8 sum;

    int i, length;

Сканируем область памяти BIOS в диапазоне адресов 0xe0000 и 0xfffff в поисках сигнатуры «_32_» и служебного каталога BIOS32:

    for (check = (union bios32 *) __va(0xe0000);

         check <= (union bios32 *) __va(0xffff0); ++check) {

           if (check->fields.signature != BIOS32_SIGNATURE) continue;

Поиск выполняется относительно нижней границы адресного пространства ядра 0xC0000000, на что указывает макрос __va(0xe0000) и __va(0xffff0).

Этот макрос определен в файле include/page.h следующим образом:

#define __PAGE_OFFSET 0xC0000000      // нижняя граница адресного пространства ядра

#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)

#define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET))

Если сигнатура найдена – определяем размер служебного каталога BIOS32 в байтах:

           length = check->fields.length * 16;

           if (!length) continue;

Считываем контрольную сумму и определяем номер версии реализации:

           sum = 0;

           for (i = 0; i < length ; ++i)

                 sum += check->chars[i];

           if (sum != 0)

                 continue;

           if (check->fields.revision != 0) {

                 printk("PCI: unsupported BIOS32 revision %d at 0x%p ",


Предыдущая страницаОглавлениеСледующая страница
 
[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