Page 2 of 12

Re: APIC

Posted: Wed Jan 14, 2009 4:43 pm
by Ghost
А почему не засунуть его в ядро? Драыверы это конечно очень хорошо, на сейчас нати компьютер без ACPI сложно...

Re: APIC

Posted: Wed Jan 14, 2009 4:55 pm
by Serge
Там несколько Мб на С. Запихнуть в ядро можно только в бинарном виде. Скомпилированая длл весит 170 Кб и 70 Кб с упаковкой.

Re: APIC

Posted: Fri Jan 16, 2009 7:03 pm
by Nable
Ничего сложного в поиске - с каких пор (с какого железа) появилась _рабочая_ поддержка ACPI? По крайней мере, даже на своём компе (i440BX/Award4.51PG) я всегда гружу линух с 'noapic noacpi', хотя, не знаю, может и зря.

Re: APIC

Posted: Fri Jan 16, 2009 7:30 pm
by Serge
>Ничего сложного в поиске

В смысле ?

Re: APIC

Posted: Fri Jan 16, 2009 8:25 pm
by Ghost
Nable а винду ты с noacpi видел? В Linux пересобирай ядро, и будет тебе счастье, в дефолтных бинарниках обычно все по максимуму на совместимость делается, порой черезчур...

Serge я так понял ты http://www.acpica.org/ собрал? Здорово, будем думать что с этим дельше будем делать ))
Ты приводил пример работы этого кода, нашлось 2 IRQ, неужели это все??? Или например 14-15 считаются дефолтными и есть всегда, etc?
Пока несколько притормаживаю свои изыскания, на работе аврал...

Re: APIC

Posted: Fri Jan 16, 2009 9:25 pm
by Nable
to Ghost
То есть, если WinXP работает, то и acpi и fastcall есть?

Re: APIC

Posted: Fri Jan 16, 2009 11:19 pm
by Serge
Ghost

Да, в таблице всего два прерывания. Наверное потому что их настройка отличается от остальных ISA. ACPICA работает, но с ней не всё так замечательно как хотелось бы. Чтобы запустить драйвер значительная часть ядра уже должна должна быть сконфигурирована. Остаётся переносить настройку оборудования на поздний этап загрузки системы. С информацией от ACPI тоже есть проблемы. Я делал перечисление устройств и вот что получил

device 0 \_SB_ HID: , ADR: 0, Status: 0
device 1 \_SB_.PWRB HID: PNP0C0C, ADR: 0, Status: 0
device 2 \_SB_.SLPB HID: PNP0C0E, ADR: 0, Status: 0
device 3 \_SB_.MEM_ HID: PNP0C01, ADR: 0, Status: 0
device 4 \_SB_.PCI0 HID: PNP0A03, ADR: 0, Status: 0
device 5 \_SB_.PCI0.CSAB HID: , ADR: 30000, Status: 0
device 6 \_SB_.PCI0.CSAB.CSAD HID: , ADR: 10000, Status: 0
device 7 \_SB_.PCI0.HUB0 HID: , ADR: 1e0000, Status: 0
device 8 \_SB_.PCI0.PX40 HID: , ADR: 1f0000, Status: 0
device 9 \_SB_.PCI0.PX40.SYSR HID: PNP0C02, ADR: 0, Status: 0
device 10 \_SB_.PCI0.PX40.PIC_ HID: PNP0000, ADR: 0, Status: 0
device 11 \_SB_.PCI0.PX40.DMA1 HID: PNP0200, ADR: 0, Status: 0
device 12 \_SB_.PCI0.PX40.TMR_ HID: PNP0100, ADR: 0, Status: 0
device 13 \_SB_.PCI0.PX40.RTC_ HID: PNP0B00, ADR: 0, Status: 0
device 14 \_SB_.PCI0.PX40.SPKR HID: PNP0800, ADR: 0, Status: 0
device 15 \_SB_.PCI0.PX40.COPR HID: PNP0C04, ADR: 0, Status: 0
device 16 \_SB_.PCI0.PX40.UAR1 HID: PNP0501, ADR: 0, Status: 0
device 17 \_SB_.PCI0.USB0 HID: , ADR: 1d0000, Status: 0
device 18 \_SB_.PCI0.USB1 HID: , ADR: 1d0001, Status: 0
device 19 \_SB_.PCI0.USB2 HID: , ADR: 1d0002, Status: 0
device 20 \_SB_.PCI0.USB3 HID: , ADR: 1d0003, Status: 0
device 21 \_SB_.PCI0.USBE HID: , ADR: 1d0007, Status: 0
device 22 \_SB_.PCI0.ICHX HID: , ADR: 1f0001, Status: 0
device 23 \_SB_.PCI0.ICHX.PRIM HID: , ADR: 0, Status: 0
device 24 \_SB_.PCI0.ICHX.PRIM.MAST HID: , ADR: 0, Status: 0
device 25 \_SB_.PCI0.ICHX.PRIM.SLAV HID: , ADR: 1, Status: 0
device 26 \_SB_.PCI0.ICHX.SECN HID: , ADR: 1, Status: 0
device 27 \_SB_.PCI0.ICHX.SECN.MAST HID: , ADR: 0, Status: 0
device 28 \_SB_.PCI0.ICHX.SECN.SLAV HID: , ADR: 1, Status: 0
device 29 \_SB_.PCI0.IDE1 HID: , ADR: 1f0002, Status: 0
device 30 \_SB_.PCI0.IDE1.PRIM HID: , ADR: 0, Status: 0
device 31 \_SB_.PCI0.IDE1.PRIM.DRV0 HID: , ADR: 0, Status: 0
device 32 \_SB_.PCI0.IDE1.PRIM.DRV1 HID: , ADR: 1, Status: 0
device 33 \_SB_.PCI0.IDE1.SECD HID: , ADR: 1, Status: 0
device 34 \_SB_.PCI0.IDE1.SECD.DRV0 HID: , ADR: 0, Status: 0
device 35 \_SB_.PCI0.IDE1.SECD.DRV1 HID: , ADR: 1, Status: 0
device 36 \_SB_.PCI0.PX43 HID: , ADR: 1f0003, Status: 0
device 37 \_SB_.PCI0.LNKA HID: PNP0C0F, ADR: 0, Status: 0
device 38 \_SB_.PCI0.LNKB HID: PNP0C0F, ADR: 0, Status: 0
device 39 \_SB_.PCI0.LNKC HID: PNP0C0F, ADR: 0, Status: 0
device 40 \_SB_.PCI0.LNKD HID: PNP0C0F, ADR: 0, Status: 0
device 41 \_SB_.PCI0.LNKE HID: PNP0C0F, ADR: 0, Status: 0
device 42 \_SB_.PCI0.LNKF HID: PNP0C0F, ADR: 0, Status: 0
device 43 \_SB_.PCI0.LNK0 HID: PNP0C0F, ADR: 0, Status: 0
device 44 \_SB_.PCI0.LNK1 HID: PNP0C0F, ADR: 0, Status: 0
device 45 \_TZ_.FAN_ HID: PNP0C0B, ADR: 0, Status: 0
устройства ISA определились правильно а с PCI есть проблемы.
В списке есть отключённый usb2 (№21) и нет ac97 и видеокарты и вообще видна толко одна pci шина а их три. Может я что-то напутал но простого способа правильно перечислить все устройства пока не видно. С таблицей MP тоже сложности

MP Configuration Table version 1.4 found at 0x800f0d00
BUS 0 PCI
BUS 1 PCI
BUS 2 PCI
BUS 3 ISA
INT BUS 0 PCI IRQ 7d APIC 2 PIN 17 B0:D31:INTB#
INT BUS 0 PCI IRQ 75 APIC 2 PIN 19 B0:D29:INTB#
INT BUS 0 PCI IRQ 76 APIC 2 PIN 18 B0:D29:INTC#
INT BUS 0 PCI IRQ 74 APIC 2 PIN 16 B0:D29:INTA#
INT BUS 0 PCI IRQ 74 APIC 2 PIN 16 B0:D29:INTA#
INT BUS 0 PCI IRQ 7d APIC 2 PIN 17
INT BUS 1 PCI IRQ 0 APIC 2 PIN 16 B1:D0:INTA#
INT BUS 0 PCI IRQ 7c APIC 2 PIN 18 B0:D31:INTA#
INT BUS 0 PCI IRQ 7c APIC 2 PIN 16 B0:D31:INTA# ???
ExtInt BUS 3 ISA IRQ 0 APIC 2 PIN 0
INT BUS 3 ISA IRQ 1 APIC 2 PIN 1
INT BUS 3 ISA IRQ 0 APIC 2 PIN 2
INT BUS 3 ISA IRQ 3 APIC 2 PIN 3
INT BUS 3 ISA IRQ 4 APIC 2 PIN 4
INT BUS 3 ISA IRQ 6 APIC 2 PIN 6
INT BUS 3 ISA IRQ 8 APIC 2 PIN 8
INT BUS 3 ISA IRQ 9 APIC 2 PIN 9
INT BUS 3 ISA IRQ c APIC 2 PIN 12
INT BUS 3 ISA IRQ d APIC 2 PIN 13
INT BUS 3 ISA IRQ e APIC 2 PIN 14
INT BUS 3 ISA IRQ f APIC 2 PIN 15

Напрягает что один pin B0:D31:INTA# заведён сразу на две линии APIC
По документации это IDE D31:F1:INTA# и в native mode он намерво привязан к irq18. У SATA D31:F2:INTA# и такой "железной" привязки в native mode нет. Интересно что в Win IDE работает как legacy на irq 14 и 15 а SATA в native на irq 18. Откуда берётся irq 16 неясно.

Re: APIC

Posted: Sat Jan 17, 2009 10:15 am
by Ghost
Serge
Может не заморачиватся на автоматическом определении всех IRQ, а оставить за драйвером возможность резервировать IRQ и указывать режим работы (PIC/APIC)?
Про MPTable, там скорее всего вкралась ошибка, мне кажется шины должны быть разными.
Для MP систем есть ключь IMCR, который позволяет полностью маскировать PIC от процессора, и использовать его каскадно через IOAPIC PIN 0 (вот только не понятно, в этом случае PIC тоже EOI посылать?)

Nable Про acpi точно не скажу, вроде можно во время установки отказатся от acpi, но по умолчанию XP работает с ним (кстати работа с кнопкой выключения идет через acpi, и не иначе). Начиная с WinXP все системные вызовы идут через fastcall (SYSENTER/SYSEXIT от Intel), прерывания для этого (вроде нашего int 0x40) не используются.

Re: APIC

Posted: Sat Jan 17, 2009 4:03 pm
by Serge
Ghost
Получил таблицу прерываний через apci

adress: 0 1fffff pin: 2 index: 16 source: << Альтернативная конфигурация ?
adress: 0 1fffff pin: 0 index: 18 source:
adress: 0 1fffff pin: 1 index: 17 source:
adress: 0 1dffff pin: 0 index: 16 source:
adress: 0 1dffff pin: 1 index: 19 source:
adress: 0 1dffff pin: 2 index: 18 source:
adress: 0 1dffff pin: 3 index: 23 source:
adress: 0 1ffff pin: 0 index: 16 source: << остальные слоты ???
adress: 0 1ffff pin: 1 index: 17 source:
adress: 0 1ffff pin: 2 index: 18 source:
adress: 0 1ffff pin: 3 index: 19 source:

Это таблица назначеных пинов pci config 0x3D

bus 0 device 31 function 1 pin 0 ;IDE native mode only
bus 0 device 31 function 2 pin 0 ;SATA
bus 0 device 31 function 3 pin 1 ;SMBus
bus 0 device 31 function 5 pin 1 ;AC97

Думаю что в таблице указана альтернативная конфигурация для SATA если IDE будет настроен в native mode. Чтобы все шесть возможных дисков не оказались на одном irq через acpi можно выбрать альтернативную конфигурацию. Интересно что в Windows IDE работает в legacy mode. Возможно по той же причине.

Re: APIC

Posted: Sun Jan 18, 2009 11:10 pm
by Pavia
Блин написал текст, а он не сохранился.

PCI жестко привязананы к IOAPIC но имеют альтернотивные способы вызова прерываний.

1. Через контакт IOAPIC
2. Через специальный регистр IOAPIC.
3. Через MSI в верхнем мегабайте интел отвела мегабайт который перенаправляет прерывание на Local APIC

Помимо прочего встроенные устройства могут иметь альтернативные 4 линии. Которые соответствуют IRQ 20-23 и именуются E F G H .

PIC можно завести через APIC, но ненужно. К нему подведены все тежи прерывания. Первые 16 прерывани предлогаю считать дефолтовыми и относить их к ISA IRQ.
IOAPIC хорош тем что в нем можно задать номер вектора для любого IRQ поэтому предлогаю установить вектор таймера такойже как для PIC и мы получим полную совместимость. А PCI отводиться 4 линии которые в APIC вынесены отдельно, а в PIC используют свободные линии.


ACPI появился в 91-93 годах в пентиуме 1 подвопросом, а во втором уже был.
Альтернативная конфигурация ?
Нет. Просто ты путаешь линии на APIC и пины на устройстве.

К каждому устройству(device, а не function) PCI подведено 4 кантакта. И оно уже распределяет между функциями.

Но между слотами в которых эти устройства расположены провода перекручиваются . Тоесть они цеклически сдвигаются на 1.
То есть
Device 0 pin 1 соответствует линия 1 IRQ 16 на APIC
Device 0 pin 2 соответствует линия 2 IRQ 17 на APIC
Device 0 pin 3 соответствует линия 3 IRQ 18 на APIC
Device 0 pin 4 соответствует линия 4 IRQ 19 на APIC
Device 1 pin 1 соответствует линия 2 IRQ 17 на APIC
Device 1 pin 2 соответствует линия 3 IRQ 18 на APIC
Device 1 pin 3 соответствует линия 4 IRQ 19 на APIC
Device 1 pin 4 соответствует линия 1 IRQ 16 на APIC
На самом деле это носит рекомендательный характер насколько помню. Поищи подробную информацию в ACPI там должна быть таблица какая линия как заведен на устройство и к какому Pin

Re: APIC

Posted: Mon Jan 19, 2009 12:49 am
by Serge
Pavia

>Просто ты путаешь линии на APIC и пины на устройстве.

Не путаю. Это та самая "таблица какая линия как заведена на устройство и к какому Pin".
На моём южном мосте ICH5 D31 вообще не использует пин 2 в дефолтной кофигурации. Я не знаю откуда он берётся. Может это глюки БИОС.
И жёсткой привязки устройство:пин -> линия irq к сожалению нет.
Interrupt Pin — RO. Hardwired to 01h indicating to “software” that the Intel® ICH5 will drive INTA#. Note that this is only used in native mode. Also note that the routing to the internal interrupt controller doesn’t necessarily relate to the value in this register

Re: APIC

Posted: Mon Jan 19, 2009 2:06 am
by Pavia
native mode мы используем прерывания PCI.
В Legacety 14 и 15 ISA IRQ
Legacety используется потому что так настроил биос. Это раз. Во-вторых это хорошо у нас на одной линии PCI теперь меньше устройств что лучше. Это два.

Если PCI CFG регистр 3Сh содержи 0 - значит нет линии. В легасити так и должно быть завтро проверю на своем комп тоже IСH5. У тебя как я понял ты уже вычел еденицу. Тут все верно у тебя устройство в Native, проверь это.

Таблица ACPI там на все случии заведена. Просто там циклически получаются и/или ее так забили.

Объесняю как пользоваться
bus 0 device 31 function 3 pin 1 ;SMBus смотри номер устройства 31=1fh
Странно в регистре PCI CFG 3Сh должено лежать 2 согласно спецификации ты поправил? Буду думать что ты просто поправил вычел 1.

У нас есть в таблице три поля соответсвующему этому устройству bus 0 и device 31
adress: 0 1fffff pin: 2 index: 16 source:
adress: 0 1fffff pin: 0 index: 18 source:
adress: 0 1fffff pin: 1 index: 17 source:
Ищим наш пин pin 1 в таблице ему соответствует последняя строчка IRQ 17

Это для устройст с bus 0 и device 29
adress: 0 1dffff pin: 0 index: 16 source:
adress: 0 1dffff pin: 1 index: 19 source:
adress: 0 1dffff pin: 2 index: 18 source:
adress: 0 1dffff pin: 3 index: 23 source:
Это для устройств с bus 0 и device 1
adress: 0 1ffff pin: 0 index: 16 source:
adress: 0 1ffff pin: 1 index: 17 source:
adress: 0 1ffff pin: 2 index: 18 source:
adress: 0 1ffff pin: 3 index: 19 source:

Аналогично должно быть еще на BUS 1 , 2 и тд.

Сделанно это специально так как в функции железно подведено одно прерывание к одному пину. И скорее всего если устройство содержит одну функции это первый пин. То чтобы разгрузить шины сделали циклический сдвиг.
В биосе просто забита одна таблица или прям сразу генерируется циклически. Для всех материнок. А те которые не соблюдают уже отдельно если такии имеются.

И жёсткой привязки устройство:пин -> линия irq к сожалению нет.
В PCI устройстве есть функции вот они жестко привязаны к пинам устройства.
Но в зависимости от того в какой слот мы вставим наше устройство к его пинам будут подвидины разные линии. Связка номер линия->номер пин зависит от номер слота. Слот это не что иное как device number.
Линии они строго подвидины к APIC.
А вот на разных шинах могут быть как разные линии так и одни и тежи.
Поэтому мы и должны пользоваться ACPI для определения соответствия IRQ <-> Pin:Number Devive:Number Bus.

Re: APIC

Posted: Mon Jan 19, 2009 1:58 pm
by Serge
Pavia

Я исправил номера пинов чтобы не путаться. Для тех кто не в курсе - в таблицах ACPI и MP пины нумеруются с нуля, в PCI cfg и документации на железо с единицы.

Проблем с сопоставлением устройств и записей в таблице нет но "лишние" строки немного напрягают. С SATA и IDE всё проще - оба контроллера не могут быть одновременно в native поэтому IDE и сидит на старых линиях irq. Значит альтернативная конфигурация SATA невозможна и откуда берётся устройство с пин 2 неясно.

Re: APIC

Posted: Mon Jan 19, 2009 2:42 pm
by Ghost
Вопрос на засыпку, то что сейчас обсуждается, мало относится к коду APIC, заливать его на svn?

Re: APIC

Posted: Mon Jan 19, 2009 3:13 pm
by Serge
Ghost

Если APIC будет включён по умолчанию PCI драйверы не смогут работать