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


8

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

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

Respostas:


6

Na estrutura PCI original ("Convencional PCI") e no 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 identificação exclusivo que foi declarado durante a enumeração. A enumeração estava essencialmente perguntando (para cada slot): "Ei, há algo presente nesse slot?" O dispositivo respondeu direcionando dados para o barramento em resposta a esse sinal. Falta de resposta não significava nenhum dispositivo.

Um dispositivo também poderia ser uma "ponte", o que significava 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.

O PCI-Express (PCIe) é totalmente diferente. O 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 com seu dispositivo upstream (e com qualquer dispositivo downstream - e se tiver dispositivos downstream, isso significa que também está funcionando como uma ponte). Pense no PCIe como uma LAN. Cada ponte é análoga a um comutador, que possui várias portas conectadas a outros dispositivos. Os outros dispositivos podem ser terminais ou outros comutadores (por exemplo, pontes PCIe).

O PCIe foi projetado de forma que sua estrutura conceitual e endereçamento (e, portanto, o comportamento fornecido ao software) sejam compatíveis com o PCI e o PCI-X. A implementação é completamente diferente. Na enumeração de dispositivos, por exemplo, como é ponto a ponto, a única pergunta 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 do dispositivo são essencialmente todos codificados (portanto, cada ponte, incluindo o "complexo raiz" de nível superior, diz a cada dispositivo qual será o seu ID).

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 possui 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.


1
A resposta é um pouco confusa: 1) no PCI "número do dispositivo" na verdade significa "número do slot" (e faz sentido), 2) você diz "PCIe é totalmente diferente" e ", já que cada dispositivo tem seu próprio conjunto de fios independente , os IDs do dispositivo são essencialmente todos codificados ", o que significa que o conjunto de fios (= o slot) possui o ID codificado, portanto, é o mesmo que no PCI. Agora, a questão é quando acontece a "codificação"? Os switches / pontes reatribuem os IDs na redefinição?
precisa saber é o seguinte

2
Sim. Isso poderia ser melhorado. O ponto é que, no PCI, a placa está em um barramento compartilhado, mas "sabe" em qual slot está inserido e só responde quando seu pino específico é especificado. No PCIe, a ponte possui N conjuntos diferentes de "fios". Portanto, o dispositivo de ponte possui um número de slot discreto para cada conjunto de fios. Do ponto de vista da ponte, esse slot tem um número definido; só precisa determinar se há algo lá. O cartão em si não sabe em que slot está localizado. Depois que a ponte determina que há algo lá, ele informa ao dispositivo qual é o número do slot.
Gil Hamilton
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.