APIC
-
А почему не засунуть его в ядро? Драыверы это конечно очень хорошо, на сейчас нати компьютер без ACPI сложно...
Там несколько Мб на С. Запихнуть в ядро можно только в бинарном виде. Скомпилированая длл весит 170 Кб и 70 Кб с упаковкой.
Ничего сложного в поиске - с каких пор (с какого железа) появилась _рабочая_ поддержка ACPI? По крайней мере, даже на своём компе (i440BX/Award4.51PG) я всегда гружу линух с 'noapic noacpi', хотя, не знаю, может и зря.
>Ничего сложного в поиске
В смысле ?
В смысле ?
Nable а винду ты с noacpi видел? В Linux пересобирай ядро, и будет тебе счастье, в дефолтных бинарниках обычно все по максимуму на совместимость делается, порой черезчур...
Serge я так понял ты http://www.acpica.org/ собрал? Здорово, будем думать что с этим дельше будем делать ))
Ты приводил пример работы этого кода, нашлось 2 IRQ, неужели это все??? Или например 14-15 считаются дефолтными и есть всегда, etc?
Пока несколько притормаживаю свои изыскания, на работе аврал...
Serge я так понял ты http://www.acpica.org/ собрал? Здорово, будем думать что с этим дельше будем делать ))
Ты приводил пример работы этого кода, нашлось 2 IRQ, неужели это все??? Или например 14-15 считаются дефолтными и есть всегда, etc?
Пока несколько притормаживаю свои изыскания, на работе аврал...
to Ghost
То есть, если WinXP работает, то и acpi и fastcall есть?
То есть, если WinXP работает, то и acpi и fastcall есть?
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 неясно.
Да, в таблице всего два прерывания. Наверное потому что их настройка отличается от остальных 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 неясно.
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) не используются.
Может не заморачиватся на автоматическом определении всех 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) не используются.
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. Возможно по той же причине.
Получил таблицу прерываний через 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. Возможно по той же причине.
Блин написал текст, а он не сохранился.
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 подвопросом, а во втором уже был.
К каждому устройству(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
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
Pavia
>Просто ты путаешь линии на APIC и пины на устройстве.
Не путаю. Это та самая "таблица какая линия как заведена на устройство и к какому Pin".
На моём южном мосте ICH5 D31 вообще не использует пин 2 в дефолтной кофигурации. Я не знаю откуда он берётся. Может это глюки БИОС.
И жёсткой привязки устройство:пин -> линия irq к сожалению нет.
>Просто ты путаешь линии на 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
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 и тд.
Сделанно это специально так как в функции железно подведено одно прерывание к одному пину. И скорее всего если устройство содержит одну функции это первый пин. То чтобы разгрузить шины сделали циклический сдвиг.
В биосе просто забита одна таблица или прям сразу генерируется циклически. Для всех материнок. А те которые не соблюдают уже отдельно если такии имеются.
Но в зависимости от того в какой слот мы вставим наше устройство к его пинам будут подвидины разные линии. Связка номер линия->номер пин зависит от номер слота. Слот это не что иное как device number.
Линии они строго подвидины к APIC.
А вот на разных шинах могут быть как разные линии так и одни и тежи.
Поэтому мы и должны пользоваться ACPI для определения соответствия IRQ <-> Pin:Number Devive:Number Bus.
В 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 и тд.
Сделанно это специально так как в функции железно подведено одно прерывание к одному пину. И скорее всего если устройство содержит одну функции это первый пин. То чтобы разгрузить шины сделали циклический сдвиг.
В биосе просто забита одна таблица или прям сразу генерируется циклически. Для всех материнок. А те которые не соблюдают уже отдельно если такии имеются.
В PCI устройстве есть функции вот они жестко привязаны к пинам устройства.И жёсткой привязки устройство:пин -> линия irq к сожалению нет.
Но в зависимости от того в какой слот мы вставим наше устройство к его пинам будут подвидины разные линии. Связка номер линия->номер пин зависит от номер слота. Слот это не что иное как device number.
Линии они строго подвидины к APIC.
А вот на разных шинах могут быть как разные линии так и одни и тежи.
Поэтому мы и должны пользоваться ACPI для определения соответствия IRQ <-> Pin:Number Devive:Number Bus.
Pavia
Я исправил номера пинов чтобы не путаться. Для тех кто не в курсе - в таблицах ACPI и MP пины нумеруются с нуля, в PCI cfg и документации на железо с единицы.
Проблем с сопоставлением устройств и записей в таблице нет но "лишние" строки немного напрягают. С SATA и IDE всё проще - оба контроллера не могут быть одновременно в native поэтому IDE и сидит на старых линиях irq. Значит альтернативная конфигурация SATA невозможна и откуда берётся устройство с пин 2 неясно.
Я исправил номера пинов чтобы не путаться. Для тех кто не в курсе - в таблицах ACPI и MP пины нумеруются с нуля, в PCI cfg и документации на железо с единицы.
Проблем с сопоставлением устройств и записей в таблице нет но "лишние" строки немного напрягают. С SATA и IDE всё проще - оба контроллера не могут быть одновременно в native поэтому IDE и сидит на старых линиях irq. Значит альтернативная конфигурация SATA невозможна и откуда берётся устройство с пин 2 неясно.
Вопрос на засыпку, то что сейчас обсуждается, мало относится к коду APIC, заливать его на svn?
Ghost
Если APIC будет включён по умолчанию PCI драйверы не смогут работать
Если APIC будет включён по умолчанию PCI драйверы не смогут работать
Who is online
Users browsing this forum: No registered users and 3 guests