OSDev

для всех
Текущее время: 17 окт 2017, 12:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 21:25 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Про настройку нашел в 29056601.pdf.
82093AA I/O ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (IOAPIC)
Я так понял, что регистрах
00h IOAPICID IOAPIC ID R/W
01h IOAPICVER IOAPIC Version RO
02h IOAPICARB IOAPIC Arbitration ID RO
10-3Fh IOREDTBL[0:23] Redirection Table (Entries 0-23) (64 bits each) R/W
вся настройка 24 векторов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 21:57 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
grindars писал(а):
[list=1]
[*] EOI через LAPIC надо посылать только в ответ на IPI и прерывания от IO APIC. Если вы используете LAPIC вместе с PIC (по причине отсутствия IO APIC-а), то вам надо отправлять EOI по старому.

Мне кажется, что это утверждение не совсем верно. (Поправьте меня если я не прав). При включенном LAPIC необходимо завершать обработку прерываний путем записи в EOI регистр в любом случае (кроме Spurious INT случаев). Если LAPIC работает в связке с PIC, то нужно еще и оправлять EOI на PIC. Не забывайте, что сам LAPIC использует не примитивную логику с поддержкой приоритетов и других наворотов. Посмотрите хотя бы на регистры ISR, IRR и TMR. LAPIC подаст процессору прерывание с более низким приоритетом, только если вы явно известите его, что вы завершили обработку прерывания с более высоким приоритетом. Поэтому, если вы не будете делать этого, то быстро столкнетесь с ситуацией, в которой первое же прерывание от какого-нибудь таймера, с самым большим приоритетом повесит передачу прерываний в процессор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 22:19 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
АААААААААААаааааааааааааааааааааа, мужики прокатила мышка, теперь научился настраивать любой из 24 на любой из 16 и с дополнительной инфой без PICа.


mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOAPICID
mov dword [IOAPIC_IOWIN_REG_DEF], 2000000h ;10000000000000000000000000b

mov dword [IOAPIC_IOREGSEL_REG_DEF], 29h;IOAPIC_IOREDTBL1_hi на 44 вектор
mov dword [IOAPIC_IOWIN_REG_DEF], ebx

mov dword [IOAPIC_IOREGSEL_REG_DEF], 28h;IOAPIC_IOREDTBL1_low
mov dword [IOAPIC_IOWIN_REG_DEF], 2Ch ; 12 ое


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 22:23 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
ZarathustrA писал(а):
При включенном LAPIC необходимо завершать обработку прерываний путем записи в EOI регистр в любом случае (кроме Spurious INT случаев). Если LAPIC работает в связке с PIC, то нужно еще и оправлять EOI на PIC.


10.8.5 Signaling Interrupt Servicing Completion
For all interrupts except those delivered with the NMI, SMI, INIT, ExtINT, the start-
up, or INIT-Deassert delivery mode, the interrupt handler must include a write to the
end-of-interrupt (EOI) register (see Figure 10-21). This write must occur at the end
of the handler routine, sometime before the IRET instruction. This action indicates
that the servicing of the current interrupt is complete and the local APIC can issue the
next interrupt from the ISR.

Как прямо написано в спецификации, при использовании вместе с PIC-ом (когда LINT в режиме ExtINT) посылать EOI в LAPIC не требуется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 30 апр 2012, 05:31 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Вопросов появилось больше чем ответо. При включении нужно заполнять 64битный регистр, смещение этого регистра и будет номером прерывания, где мы указываем
63:56 Destination Field—R/W -сюда [59:56] Local APIC ID, а если [63:56] Set of processors то в DESTMOD ставить 1. А что значит Set of processors?
16 Interrupt Mask—R/W
15 Trigger Mode—R/W
14 Remote IRR—RO
13 Interrupt Input Pin Polarity (INTPOL)—R/W
12 Delivery Status (DELIVS)—RO
11 Destination Mode (DESTMOD)—R/W
10:8 Delivery Mode (DELMOD)—R/W
7:0 Interrupt Vector (INTVEC)—R/W - сюда номер вектора
Так же заполняем по смещению 00h IOAPICID IOAPIC ID
Кае лучше настроить прерывания на вектор
Я уже перенёс всю мою систему на APIC и убрал весь код связанный с PIC, работает нормально и про PIC уже не вспоминаю.
Что теперь можно добавить к системе в связи с этим, что даёт включенный APIC, кроме добавленных аппаратных векторов и навороченных регистров к которым ещё не привык.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 30 апр 2012, 08:45 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Цитата:
смещение этого регистра и будет номером прерывания,
смещение это IRQ, те номер ножки. Что к этой ножке подведено можно узнать из даташита на материнку. А вообще интел использует классическую схему схема есть есть в мультипроцессорной спецификации.

Цитата:
А что значит Set of processors?

Set of - это "набор". Ты можешь указать несколько процессоров к которым дойдёт прерывание.
Для указания набора используется битовая карта. Аналогично тому, как set of ведёт себя в паскале.
первый бит это первый процессор второй бит второй процессор N-ый бит это N-ый процессор. Установка соответствующего бита вызывает доставку сообщения до этого ядра.

Такой способ адресации появился если не ошибаюсь в PII.

http://ru.osdev.wikia.com/wiki/I/O_APIC


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 30 апр 2012, 09:14 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
Но эта маска - 8 бит, а процессоров может быть больше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 30 апр 2012, 13:39 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
pavia молодец, уже в 2009 написалал про эту тему статейку, к ней можно было бы примерчик добавить, иначе это просто перевод спецификаций, что тоже очень не плохо.
Главный вопрос в том как это добро использовать и где.
Впринципи из плюсов это в основном и есть добавление дополнительных векторов аппаратных и теперь их можно в таблице размещать в произвольном порядке.
Также есть включение APIC и в дальнейшем включение всех процессоров. Кстати почитаю следующий пример, где собственно и включали все процессоры.
По поводу ACPI и её таблицы тоже нужно подумать, выключать и перезагружать комп нужно сделать програмно. Так же хочется обороты ветилятора скидывать после загрузки системы, как у винды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 01 май 2012, 18:19 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Если мы посмотрели в версии л_апика, что ножек у контроллера 24 то мы должны сделать цикл для того, чтобы каждую ножку поставить на свой вектор в таблице векторов(грубо говоря). У каждого процессора свой л_апик, после включения мы должны второй процессор также перевести в нужный режим и настроить его л_апик на вектора таблицы.
Вопрос, таблица хоть у нас одна? Вектора в аблице у нас так быстро закончаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 16 июн 2012, 09:04 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
mov dword [IOAPIC_IOREGSEL_REG_DEF], 29h;IOAPIC_IOREDTBL1_hi на 44 вектор
mov dword [IOAPIC_IOWIN_REG_DEF], ebx

mov dword [IOAPIC_IOREGSEL_REG_DEF], 28h;IOAPIC_IOREDTBL1_low
mov dword [IOAPIC_IOWIN_REG_DEF], 2Ch ; 12 ое

Ктонибудь знает почему в такой установке прерывания идут от ISA а от PCI не идут, у меня прерывания ни от одной PCI шины не приходит, нотя настроил на все 24 ножки свой вектор, в верторе обработчик которые не вызываются устройствами PCI, устройств 4 и все они настроены и все должны вызывать свои вектора хотябы с сообщением о ошибке, например вызывая настроенную сетевушку по таймеру вижу как она принимает и заполняет пакеты, но где пропало её сообщение, я их все влючил для срабатывания. Так же проверял все обработчики 24, от сетевухи нет сигнала.

mov dword [IOAPIC_IOREGSEL_REG_DEF], 28h or 10000000000000b;1000000000000000b Линию инвертировал и чувствительность к уровню ставил, хотя после этого от сетевухи всётаки пришло одно и опять молчало, а переодически то одно то другое начинало срабатываться с бещенной скоростью(10000000 много за несколько секунд)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB