необхідно знайти конкретний пристрій, то пошук виконується по кодах пристрою і його виготівника; якщо потрібно знайти всі пристрої певного типу, то використовується код класу. Після того, як шуканий пристрій знайдений, за допомогою регістрів базових адрес можна визначити виділені йому області в адресному просторі пам'яті і просторі вводу-виводу. Найбільший інтерес, проте, представляє регістр Interrupt Line, що дозволяє з'ясувати, яка лінія IRQ була виділена пристрою процедурою PnP BIOS в процесі початкового завантаження комп'ютера В деяких випадках це єдиний «документований спосіб» визначення номера переривання.
Пошук
Дослідження роботи і призначення шини РСІ, режимів роботи, протоколів обміну та сфери застосування
Предмет:
Тип роботи:
Лабораторна робота
К-сть сторінок:
24
Мова:
Українська
Функції PCI BIOS
Оскільки конфігураційний простір не має «прив'язки» до якої-небудь певної області адресного простору комп'ютера, доступ до нього зв'язаний з певними труднощами. З метою спрощення роботи з пристроями PCI в BIOS персональних комп'ютерів були внесені спеціальні додаткові функції. Доступ до функцій PCI BIOS при 16-розрядному виклику виконується через функцію Blh переривання lAh. Для 32-розрядних викликів використовується «32-розрядна точка входу захищеного режиму».
Функції PCI BIOS використовують регістри процесора для передачі аргументів і отримання результатів. При успішному виконанні функції флаг перенесення CF скидається в 0, у разі невдачі — приймає значення 1.
Переривання 1Ah, функція B101h: перевірити присутність PCI BIOS в системі
Для перевірки присутності PCI BIOS в системі по перериванню 1Ah викликається функція Bl0lh.
Перед викликом переривання lAh вимагається занести в регістр АХ код 0Bl0lh. Після виконання функції в регістрах будуть розміщені наступні значення:
в EDX — сигнатура PCI (P — в DL, С — в DH і т. д., в старшому байті — пропуск);
в АН — ознака присутності (0 — BIOS присутній, якщо в EDX правильна сигнатура, будь-яке інше значення — PCI BIOS відсутній);
в AL — апаратний механізм;
в ВН — номер версії інтерфейсу PCI (в двійково-десятковому коді);
в BL — підномер версії інтерфейсу (в двійково-десятковому коді);
в CL — номер останньої шини PCI в системі (відлік номерів починається з нуля).
Флаг CF також вказуватиме на присутність PCI BIOS (0 — BIOS присутній, 1 — відсутній).
Рис. 4. Формат байта апаратного механізму шини PCI
На рис. 4 показаний формат байта-описувача апаратного механізму шини: інформація, повернена в регістрі AL, показує, які механізми функціонування шини PCI реалізовані в даній апаратурі. Специфікація PCI визначає два апаратні механізми для доступу до конфігураційного простору. Механізм #1 підтримується, якщо встановлений біт 0, механізм #2 — якщо встановлений біт 1. Специфікація PCI визначає також механізми генерації «спеціальних циклів». Біт 4 встановлений, якщо апаратура може виконувати генерацію спеціальних циклів на основі механізму #1, біт 5 встановлений, якщо апаратура може виконувати генерацію спеціальних циклів на основі механізму #2. Біти 2, 3, 6 і 7 зарезервовані і повинні бути рівний нулю.
Переривання 1Ah, функція B102h: знайти пристрій PCI заданого типу
Для пошуку пристрою PCI заданого типу по перериванню lAh викликається функція B102h.
Перед викликом переривання вимагається занести в регістри наступні значення:
в АХ - код 0B102h;
в СХ — ідентифікатор пристрою (число від 0 до 65535);
в DX — ідентифікатор виробника (від 0 до 65534);
в SI — індекс (порядковий номер) пристрою заданого типу (від 0 до N).
Після виконання функції в регістрах будуть розміщені наступні значення:
в ВН — номер шини, до якої підключений пристрій (від 0 до 255);
в BL — номер пристрою в старших п'яти бітах і номер функції в трьох молодший;
в АН — код повернення (може приймати значення SUCCESFUL, BAD_VENDOR_ID і DEVICE_NOT_FOUND);
в CF — статус повернення (0 — функція успішно виконана, 1 — помилка).
Якщо необхідно знайти всі пристрої даного типу, то в SI заноситься 0. Після кожного виконання функції значення SI треба збільшувати на 1, поки не буде отриманий код повернення DEVICE_NOT_FOUND (пристрій не знайдений).
Переривання lAh, функція В103h: знайти пристрій PCI заданого класу
Для пошуку пристрою PCI заданого класу по перериванню lAh викликається функція B103h.
Перед викликом переривання вимагається занести в регістри наступні значення:
в АХ - код 0В103h;
в ЕСХ — код класу (в молодших трьох байтах);
в SI — індекс (порядковий номер) пристрою заданого класу (від 0 до N).
в ВН — номер шини, до якої підключений пристрій (від 0 до 255);
в BL — номер пристрою в старших п'яти бітах і номер функції в трьох молодших;
в АН — код повернення (може приймати значення SUCCESFUL і DEVICE_NOT_FOUND);
в CF — статус повернення (0 — функція успішно виконана, 1 — помилка).
Якщо необхідно знайти всі пристрої даного класу, то в SI заноситься 0. Після
кожного виконання функції значення SI треба збільшувати на 1, поки
не буде отриманий код повернення DEVICE_NOT_FOUND (пристрій не знайдений).
Переривання 1Ah, функція B106h: генерувати спеціальний цикл шини
Для генерації спеціального циклу шини по перериванню 1Ah викликається функція B106h.
Перед викликом переривання вимагається занести в регістри наступні значення:
в АХ - код 0B106h;
в ВН