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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

n  в регистре BH – номер шины;

n  в BL – номер устройства в старших пяти битах и номер функции в трёх младших;

n  в AH – код возврата (DEVICE_NOT_FOUND или SUCCESFUL):

 

    __asm__("lcall (%%edi); cld "

           "jc 1f "

           "xor %%ah, %%ah "

           "1:"

           : "=b" (bx),

             "=a" (ret)

           : "1" (PCIBIOS_FIND_PCI_CLASS_CODE),

             "c" (class_code),

             "S" ((int) index),

             "D" (&pci_indirect)); // адрес точки входа в сервис

Заносим в структру struct pci_dev_struct *pd координаты устройства:

    pd->bus = (bx >> 8) & 0xff;       // номер шины

    pd->dev = (bx & 0xff) >> 3;       // номер устройства на шине

    pd->fn = bx & 0x03;        // номер функции

    return (int) (ret & 0xff00) >> 8;

}

После того как устройство заданного типа найдено, необходимо получить данные, находящиеся в его конфигурационном пространстве (см. «Конфигурационное пространство устройства PCI»). Сделаем это при помощи функции pci_bios_read():

static int pci_bios_read(int bus, int dev, int fn, int reg, int len, u32 *value)

{

    u32 result = 0;

    u32 bx;

Параметрами функции являются координаты устройства (bus – номер шины, dev – номер устройства, fn – номер функции), смещение в конфигурационном пространстве (reg) и размер данных для считывания (len, байт/слово/двойное слово). В последний параметр мы поместим считанное из конфигурационного пространства значение, поэтому этот параметр передается по ссылке.

Проверяем правильность переданных параметров:

    if (bus > 255 || dev > 31 || fn > 7 || reg > 255)

           return -EINVAL;

 

Для чтения информации из конфигурационного пространства устройства PCI BIOS предоставляет следующие функции [6]:

n  0xB108 – чтение байта;

n  0xB109 – чтение слова;

n  0xB10A – чтение двойного слова.

 

Эти функции отличаются только размером считываемых данных – байт, слово или двойное слово. Перед вызовом функции в регистры процессора помещается следующая информация:

n  EAX – код функции;

n  BH – номер шины, к которой подключено устройство;

n  BL – номер устройства в старших пяти битах и номер функции в трёх младших битах;


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