о IRQ

Тема в разделе "WASM.OS.DEVEL", создана пользователем AntiB, 3 май 2007.

  1. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    пожалуста можете сказать как устоновлевать IRQ на нужное приривание (всьо ето на уровне портов), я нашел инфу там описано как включать и выключать IRQ - используються порты: 0x21, 0xa1. Может ктото дать инфу и сказать что куда положыть чтобы устоновить IRQ на нужное приривание?
    Зарание благодарен
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    если есть поддержка I/O APIC (а она в принципе должна быть), лучше пользоваться им
    как пример, маскирование линий IRQ с 0 по 23 и установка IRQ0 на вектор 0x20
    Код (Text):
    1. mask_IRQ:
    2.     mov ecx, 24 ; count of IRQ lines
    3. @@:
    4.     lea eax, [0xE + ecx * 2]
    5.     mov dword [0xFEC00000], eax ; choose redirection table entry
    6.     or dword [0xFEC00010], 0x10000 ; mask IRQ line with number ECX - 1
    7.     dec ecx
    8.     jnz @B
    9.     mov dword [0xFEC00000], 0x10 ; 0x10-0x11 conform to IRQ0, 0x12-0x13 - to IRQ1, ...
    10.     mov dword [0xFEC00010], 0x8020 ; set trigger mode, delivery mode, priority, vector number
    да, адреса отображенных на память регистров I/O APIC не фиксированы (можно менять, модифицируя регистры в конфигурационном пространстве PCI I/O APIC)
     
  3. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    rei3er
    Спасибо, а как узнать есть поддержка I/O APIC или нет? (хочу чтобы всьо роботало на все 100% и без глюков, понимаю что на новых машынах он есть, но на старых может ищо нету) и какой клас APIC, чтобы я мог зделать поиск и найти конфигурационное пространство PCI I/O APIC ???
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    CPUID (eax = 1), присутствует, если после CPUID в edx 9-ый бит установлен
    вроде как D0:F0
    можно просто попытаться найти устройство с device id = 0x1161, vendor id = 0x8086, что и будет I/O APIC-ом
     
  5. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    rei3er
    Спасибо Большое