Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Oct 16, 2019 3:12 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 167 posts ]  Go to page Previous 1 2 3 4 512 Next
Author Message
 Post subject: Re: APIC
PostPosted: Wed Jan 14, 2009 4:43 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
А почему не засунуть его в ядро? Драыверы это конечно очень хорошо, на сейчас нати компьютер без ACPI сложно...


Top
   
 Post subject: Re: APIC
PostPosted: Wed Jan 14, 2009 4:55 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Там несколько Мб на С. Запихнуть в ядро можно только в бинарном виде. Скомпилированая длл весит 170 Кб и 70 Кб с упаковкой.


Top
   
 Post subject: Re: APIC
PostPosted: Fri Jan 16, 2009 7:03 pm 
Offline
Just Flooding

Joined: Sat Jan 06, 2007 2:30 pm
Posts: 269
Ничего сложного в поиске - с каких пор (с какого железа) появилась _рабочая_ поддержка ACPI? По крайней мере, даже на своём компе (i440BX/Award4.51PG) я всегда гружу линух с 'noapic noacpi', хотя, не знаю, может и зря.


Top
   
 Post subject: Re: APIC
PostPosted: Fri Jan 16, 2009 7:30 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
>Ничего сложного в поиске

В смысле ?


Top
   
 Post subject: Re: APIC
PostPosted: Fri Jan 16, 2009 8:25 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Nable а винду ты с noacpi видел? В Linux пересобирай ядро, и будет тебе счастье, в дефолтных бинарниках обычно все по максимуму на совместимость делается, порой черезчур...

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


Top
   
 Post subject: Re: APIC
PostPosted: Fri Jan 16, 2009 9:25 pm 
Offline
Just Flooding

Joined: Sat Jan 06, 2007 2:30 pm
Posts: 269
to Ghost
То есть, если WinXP работает, то и acpi и fastcall есть?


Top
   
 Post subject: Re: APIC
PostPosted: Fri Jan 16, 2009 11:19 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
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 неясно.


Top
   
 Post subject: Re: APIC
PostPosted: Sat Jan 17, 2009 10:15 am 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
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) не используются.


Top
   
 Post subject: Re: APIC
PostPosted: Sat Jan 17, 2009 4:03 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
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. Возможно по той же причине.


Top
   
 Post subject: Re: APIC
PostPosted: Sun Jan 18, 2009 11:10 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Блин написал текст, а он не сохранился.

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 подвопросом, а во втором уже был.

Quote:
Альтернативная конфигурация ?

Нет. Просто ты путаешь линии на 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

_________________
http://wiki.osdev.ru/


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 12:49 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pavia

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

Не путаю. Это та самая "таблица какая линия как заведена на устройство и к какому Pin".
На моём южном мосте ICH5 D31 вообще не использует пин 2 в дефолтной кофигурации. Я не знаю откуда он берётся. Может это глюки БИОС.
И жёсткой привязки устройство:пин -> линия irq к сожалению нет.
Quote:
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


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 2:06 am 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
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 и тд.

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


Quote:
И жёсткой привязки устройство:пин -> линия irq к сожалению нет.

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

_________________
http://wiki.osdev.ru/


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 1:58 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pavia

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

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


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 2:42 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Вопрос на засыпку, то что сейчас обсуждается, мало относится к коду APIC, заливать его на svn?


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 3:13 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Ghost

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 167 posts ]  Go to page Previous 1 2 3 4 512 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited