Mam takie pytanie. Gdzie znajdują się rejestry karty PCI (pod jakim adresem) ?
Skupiłem się na "Base Address Register", ale chyba jakoś źle to rozkodowuję.
Program testowy pokazuje to:

http://artik-wroc.pl/pliki/pciio1.jpg

I/O $1040 offset $B0000000 (Hades), czyli rejestry powinny by pod $B0001040 ? Czy źle to rozumiem ?

Z kolei Linux pokazuje to:

http://artik-wroc.pl/pliki/pciio2.jpg

Chciałem odczytać (CR: Command Register (00H; Type=R/W)) i doopa. Może mnie ktoś to wytłumaczyć?

Było miło :) Do widzenia.

2

Program testowy pokazuje adres IO przesunięty o jedną pozycję w prawo, ale poza tym poprawny.

Nigdy się w takie rzeczy nie bawiłem, ale tutaj jest wyczerpujący opis:
https://wiki.osdev.org/PCI

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

3

Adres przestrzeni PCI jest konfigurowalny w mostku PCI, a karty PCI też mają konfigurowalne adresy w tej przestrzeni. Na różnych platformach będą różne adresy.
Bez pośrednictwa BIOS-u, który inicjalizuje mostek in konfiguruje karty (coś jak ISA PNP, ale lepsze) będzie ciężko. Jest taki BIOS dla Hadesa (zresztą takie samo API ma BIOS dla Milana).

What can be asserted without proof can be dismissed without proof.

4 Ostatnio edytowany przez artik-wroc (2024-07-06 15:07:00)

Właśnie męczę PCI BIOS na Hadesie :)
http://artik-wroc.pl/pliki/PCI/pci_prt1.htm

Było miło :) Do widzenia.

5 Ostatnio edytowany przez artik-wroc (2024-07-07 15:11:03)

Odczytuję rejestry konfiguracyjne na różne sposoby używając (fast_)read_config_.... czy też get_resource, no i powtarzają się adresy, więc nie ma powodu, aby myśleć, że coś się źle odczytało.
Potem przychodzi moment na odczytanie rejestru "Command Register" Realteka. (fast_)read_io_byte i wartość zwrócona 0xFF. Coś robię źle, ale jeszcze nie wiem co :(

http://artik-wroc.pl/pliki/pciio3.jpg

EDIT: Problem rozwiązany.
Command Register bit 0:
I/O Space - If set to 1 the device can respond to I/O Space accesses; otherwise, the device's response is disabled.

Było miło :) Do widzenia.