Jak określa się urządzenie w wyliczeniu PCI? (magistrala / urządzenie / funkcja)

8

Mam wątpliwości co do wyliczenia magistrali PCI / urządzenia / funkcji. Patrząc na stronę Wikipedii dotyczącą konfiguracji PCI , widzę, że dla danej magistrali master zażąda identyfikatora dostawcy i identyfikatora urządzenia dla wszystkich urządzeń korzystających z funkcji 0. Jeśli zwrócone zostaną wszystkie 0xFF, wówczas nie ma żadnego urządzenia i następuje wyliczenie. Jeśli znaleziono prawidłowy identyfikator urządzenia i identyfikator dostawcy, oznacza to, że jest tam jednostka PCI i zostanie ona wyliczona. Nie jestem pewien, w jaki sposób określane jest urządzenie w funkcji bus.device.

Załóżmy na przykład, że mam procesor z jedną magistralą PCI i jednym urządzeniem peryferyjnym PCI. Rozumiem, że CPU spojrzy na magistralę 0 (domyślnie) i sprawdzi wszystkie numery urządzeń patrząc na funkcję 0. W jaki sposób określa się numer urządzenia peryferyjnego?

simple_symbols
źródło

Odpowiedzi:

6

W oryginalnym frameworku PCI („konwencjonalnym PCI”), a także w PCI-X, urządzenia odpowiadały „gniazdom”, każde z własnymi złączami podłączonymi do tej samej szyny równoległej. Każde gniazdo miało unikalny identyfikator PIN, który został potwierdzony podczas wyliczenia. Wyliczenie zasadniczo pytało (dla każdego gniazda): „Hej, czy jest coś w tym polu?” Urządzenie zareagowało, wprowadzając dane do magistrali w odpowiedzi na ten sygnał. Brak odpowiedzi oznaczał brak urządzenia.

Urządzenie może być również „mostem”, co oznacza, że ​​tworzy ono podrzędną magistralę. Ta magistrala miałaby oddzielny identyfikator (przypisany z góry) i miałaby swój własny zestaw gniazd, które zostały wyliczone niezależnie.

PCI-Express (PCIe) jest zupełnie inny. PCIe nie jest tak naprawdę magistralą - jak w zasobach współdzielonych między urządzeniami; zamiast tego każde urządzenie ma swoje indywidualne połączenie szeregowe punkt-punkt z urządzeniem nadrzędnym (i dowolnymi urządzeniami podrzędnymi - a jeśli ma urządzenia nadrzędne, oznacza to, że działa również jako most). Pomyśl o PCIe jak o sieci LAN. Każdy most jest analogiczny do przełącznika, który ma kilka portów podłączonych do innych urządzeń. Inne urządzenia mogą być urządzeniami końcowymi lub mogą być innymi przełącznikami (tj. Mostkami PCIe).

PCIe zostało zaprojektowane w taki sposób, aby jego struktura koncepcyjna i adresowanie (a zatem i zachowanie zapewniane oprogramowaniu) były zgodne z PCI i PCI-X. Implementacja jest jednak zupełnie inna. Na przykład przy wyliczaniu urządzeń, ponieważ jest to punkt-punkt, jedynym pytaniem, które należy ustalić w każdym punkcie wyliczenia, jest „coś tam?”. Ponieważ każde urządzenie ma swój własny niezależny zestaw przewodów, identyfikatory urządzeń są zasadniczo wszystkie zakodowane na stałe (stąd każdy most, w tym najwyższy poziom „kompleksu głównego”, informuje każde urządzenie, jaki będzie jego identyfikator urządzenia).

We wszystkich przypadkach część „funkcyjna” magistrali / urządzenia / funkcji jest obsługiwana ściśle w urządzeniu peryferyjnym. Na przykład dwuportowy kontroler NIC często ma dwie funkcje, po jednej dla każdego portu. Można je konfigurować i obsługiwać niezależnie, ale ścieżka danych od procesora do funkcji jest taka sama dla obu.

Gil Hamilton
źródło
1
Odpowiedź jest nieco myląca: 1) w PCI „numer urządzenia” w rzeczywistości oznacza „numer gniazda” (i ma to sens), 2) mówisz „PCIe jest zupełnie inny” i „ponieważ każde urządzenie ma swój własny niezależny zestaw przewodów , identyfikatory urządzeń są zasadniczo wszystkie zakodowane na stałe ", co oznacza, że ​​zestaw przewodów (= gniazdo) ma zakodowany identyfikator, więc jest taki sam jak w PCI. Pytanie brzmi, kiedy następuje „zakodowanie na stałe”? Przełączniki / mosty ponownie przypisują identyfikatory po zresetowaniu?
xealits
2
Tak. Można by to lepiej sformułować. Chodzi o to, że w PCI karta jest na wspólnej szynie, ale „wie”, w którym gnieździe jest, i reaguje tylko wtedy, gdy zostanie przypisany swoisty pin. W PCIe most ma N różnych zestawów „przewodów”. Zatem urządzenie mostkowe ma dyskretny numer gniazda dla każdego zestawu przewodów. Z punktu widzenia mostu szczelina ma określoną liczbę; musi jedynie ustalić, czy coś tam jest. Sama karta nie wie, w którym gnieździe się znajduje. Gdy mostek stwierdzi, że coś tam jest, następnie informuje to urządzenie, jaki jest jej numer gniazda.
Gil Hamilton,