Como o dispositivo é determinado na enumeração PCI? (barramento / dispositivo / função)

7

Estou confuso sobre a enumeração barramento PCI / dispositivo / função. Olhando para a página da Wikipedia para configuração PCI , vejo que para um determinado barramento, o mestre solicitará ID do fornecedor e ID do dispositivo para todos os dispositivos que usam a função 0. Se todos os 0xFFs forem retornados, nenhum dispositivo estará lá e a enumeração será movida. Se um ID de dispositivo e um ID de fornecedor válidos forem encontrados, haverá uma unidade PCI ali e ela será enumerada. Não tenho certeza de como o dispositivo no bus.device.function é determinado.

Por exemplo, digamos que eu tenha uma CPU com um barramento PCI e um periférico PCI conectado a ela. Eu entendo que a CPU procurará no barramento 0 (por padrão) e verificará todos os números de dispositivos que estão na função 0. Como o número do dispositivo do periférico é determinado?

    
por simple_symbols 24.03.2016 / 05:00

1 resposta

5

Na estrutura PCI original ("PCI Convencional") e também em PCI-X, os dispositivos correspondiam a "slots", cada um com seus próprios conectores conectados ao mesmo barramento paralelo. Cada slot tinha um pino de ID exclusivo que foi declarado durante a enumeração. A enumeração foi essencialmente pedindo (para cada slot): "Ei, há alguma coisa presente neste slot?" O dispositivo respondeu enviando dados para o barramento em resposta a esse sinal. A falta de resposta não significava nenhum dispositivo.

Um dispositivo também pode ser uma "ponte", o que significa que ele formava um barramento subordinado. Esse barramento teria um ID separado (atribuído a partir do upstream) e teria seu próprio conjunto de slots que foram enumerados independentemente.

PCI-Express (PCIe) é totalmente diferente. PCIe não é realmente um barramento - como em um recurso compartilhado entre dispositivos; em vez disso, cada dispositivo tem sua própria conexão serial ponto-a-ponto individual para seu dispositivo upstream (e para qualquer dispositivo downstream - e se tiver dispositivos downstream, isso significa que ele também está funcionando como uma ponte). Pense no PCIe como uma LAN. Cada bridge é análogo a um switch, que possui várias portas conectadas a outros dispositivos. Os outros dispositivos podem ser dispositivos terminais, ou podem ser outros switches (por exemplo, pontes PCIe).

O PCIe foi projetado de tal forma que sua estrutura conceitual e endereçamento (e, portanto, o comportamento fornecido ao software) é compatível com PCI e PCI-X. A implementação é completamente diferente. Na enumeração de dispositivos, por exemplo, como é ponto-a-ponto, a única questão que precisa ser determinada em cada ponto da enumeração é "alguma coisa aí?" Como cada dispositivo tem seu próprio conjunto independente de fios, os IDs dos dispositivos são essencialmente todos codificados (portanto, cada ponte, incluindo o "complexo raiz" de nível superior, informa a cada dispositivo qual será o ID do dispositivo) ser).

Em todos os casos, a parte "função" do barramento / dispositivo / função é tratada estritamente dentro do periférico. Por exemplo, um controlador NIC de porta dupla geralmente terá duas funções, uma para cada porta. Eles podem ser configurados e operados independentemente, mas o caminho de dados da CPU para a função é o mesmo para ambos.

    
por 30.03.2016 / 14:48

Tags