OSDev http://osdev.su/ |
|
Обсуждение вопросов по xAPIC http://osdev.su/viewtopic.php?f=5&t=706 |
Страница 1 из 1 |
Автор: | Zealint [ 07 мар 2013, 09:35 ] |
Заголовок сообщения: | Обсуждение вопросов по xAPIC |
Пытаюсь разобраться с программированием xAPIC, но появились вопросы к специалистам, ответы на которые не удалось получить из документации. Прочитал следующие документы:
Вопросов много, но начну с самых первых.
|
Автор: | ilya [ 07 мар 2013, 14:52 ] |
Заголовок сообщения: | Re: Обсуждение вопросов по xAPIC |
Цитата: Ничего непонятно с тем, как перенаправить прерывания через I/O APIC. В документации Architectures Software Developer’s Manual вообще ничего не сказано про адрес, по которому находится IOREGSEL и IOWIN, об этом написано только во втором источнике, но там же есть загадочная фраза Перенаправляются прерывания логикой материнской платы. Тебе надо замаскировать либо все, либо отдельные(будут баги на многих ACPI совместимых матерях) прерывания PIC. А потом сбросить IOAPIC бит 16(Interrupt Mask) в нужном тебе прерывание в I/O Redirection Table. Баги будут потому как ACPI официально поддерживает только либо PIC либо IOAPIC но не оба сразу. Цитата: Далее идёт табличка, из которой видно, что IOREGSEL находится по адресу FEC0xy00h, где вот это "xy" нужно узнавать как раз из APIC Base Address Relocation Register in the PIIX3. Не вижу смысла даже задумываться о перенарпавлении так как адреса в рамках которых можно перенаправить очень ограничены. Цитата: Вот например, у меня есть клавиатура (странно, да?). Где-то в блогах пишут, что от неё прерывания поступают через LVT LINT1 Register. Почему это так? Где это написано в документации? Как мне направить прерывание от клавиатуры на номер 21h, например. В источнике [3] в списке выше даётся уже готовый рецепт и поверхностное описание, которое мне непонятно. Скорей всего PIC Также подключён к процессорному LINT1 (или LINT0). PIC посылает сигнал к процессорному LAPIC а процессор вызывет IDT прерывание номер которого передал PIC. Если замаскируешь весь PIC то это должно прекратиться. Сам LINT тоже замаскировать. После, ты можешь размаскировать соответствующий номер в IOAPIC. Какой номер прерывания размаскировать — определяется через ACPI таблицы (в случаее с ps2 клавой/мышкой легче всего воспользоваться MADT таблицой). Есть ещё Intel MPTable таблица вместо(для твоих нужд) ACPI. Гораздо удобнее и проще но после лоббирования Microsoft была заменена на неповоротливую ACPI. http://www.intel.com/design/pentium/dat ... 201606.pdf А ещё может быть что устройства (например PIT или ps2) к ioapic не подключены (нету записей в [del]ACPI[/del] или MPTable) то тогда LINT это единственый способ получать прерывания. Но это редкость, хотя, кто знает. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |