Come viene determinato il dispositivo nell'enumerazione PCI? (Bus / dispositivo / funzione)


8

Sono confuso sull'enumerazione bus PCI / dispositivo / funzione. Osservando la pagina Wikipedia per la configurazione PCI , vedo che per un dato bus, il master richiederà l'ID fornitore e l'ID dispositivo per tutti i dispositivi utilizzando la funzione 0. Se vengono restituiti tutti gli 0xFF, allora non c'è nessun dispositivo e l'enumerazione passa. Se vengono trovati un ID dispositivo valido e un ID fornitore, è presente un'unità PCI e verrà enumerata. Non sono sicuro di come sia determinato il dispositivo nella funzione bus.device..

Ad esempio, supponiamo che io abbia una CPU con un bus PCI e una periferica PCI collegata ad esso. Comprendo che la CPU guarderà sul bus 0 (per impostazione predefinita) e controllerà tutti i numeri di dispositivo osservando la funzione 0. Come viene determinato il numero di dispositivo della periferica?

Risposte:


6

Nel framework PCI originale ("PCI convenzionale") e anche in PCI-X, i dispositivi corrispondevano a "slot", ciascuno con i propri connettori collegati allo stesso bus parallelo. Ogni slot aveva un pin ID univoco che era stato affermato durante l'enumerazione. L'enumerazione chiedeva essenzialmente (per ogni slot): "Ehi, c'è qualcosa di presente in questo slot?" Il dispositivo ha risposto guidando i dati sul bus in risposta a questo segnale. La mancanza di risposta non significava alcun dispositivo.

Un dispositivo potrebbe anche essere un "ponte", il che significava che formava un bus subordinato. Quel bus avrebbe un ID separato (assegnato dall'upstream) e avrebbe una propria serie di slot che erano enumerati in modo indipendente.

PCI-Express (PCIe) è totalmente diverso. PCIe non è in realtà un bus - come in una risorsa condivisa tra i dispositivi; invece ogni dispositivo ha una propria connessione seriale da punto a punto individuale al suo dispositivo a monte (e a tutti i dispositivi a valle - e se ha dispositivi a valle, significa che funziona anche come un ponte). Pensa a PCIe come a una LAN. Ogni bridge è analogo a uno switch, che ha un sacco di porte collegate ad altri dispositivi. Gli altri dispositivi possono essere terminali o potrebbero essere altri switch (ad esempio bridge PCIe).

PCIe è stato progettato in modo tale che la sua struttura concettuale e l'indirizzamento (e quindi il comportamento fornito al software) siano compatibili con PCI e PCI-X. L'implementazione però è completamente diversa. Nell'enumerare i dispositivi, ad esempio, dal momento che è punto-punto, l'unica domanda che deve essere determinata in ogni punto dell'enumerazione è "qualcosa lì?" Poiché ogni dispositivo ha un proprio set di fili indipendente, gli ID dei dispositivi sono essenzialmente tutti codificati (quindi ogni bridge, incluso il "complesso radice" di livello superiore, indica a ciascun dispositivo quale sarà il suo ID dispositivo).

In tutti i casi, la parte "funzione" del bus / dispositivo / funzione viene gestita rigorosamente all'interno della periferica. Ad esempio, un controller NIC a doppia porta avrà spesso due funzioni, una per ogni porta. Possono essere configurati e gestiti in modo indipendente, ma il percorso dei dati dalla CPU alla funzione è lo stesso per entrambi.


1
La risposta è un po 'confusa: 1) in PCI "numero di dispositivo" in realtà significa "numero di slot" (e ha senso), 2) dici "PCIe è totalmente diverso" e "poiché ogni dispositivo ha il suo set indipendente di fili , gli ID dispositivo sono essenzialmente tutti codificati ", il che significa che il set di fili (= slot) ha l'ID codificato, quindi è lo stesso di PCI. Ora, la domanda è quando si verifica la "codifica"? Gli switch / bridge riassegnano gli ID al reset?
xealits,

2
Si. Questo potrebbe essere formulato meglio. Il punto è che in PCI la scheda si trova su un bus condiviso ma "sa" in quale slot si trova e risponde solo quando viene affermato il suo pin specifico per slot. In PCIe, il bridge ha N diversi set di "fili". Quindi il dispositivo bridge ha un numero di slot discreto per ogni set di fili. Dal punto di vista del bridge, quella slot ha un numero definito; deve solo determinare se c'è qualcosa lì. La scheda stessa non sa in che slot si trova. Una volta che il bridge determina che c'è qualcosa lì, allora dice a quel dispositivo qual è il suo numero di slot.
Gil Hamilton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.