Comment est une carte PCI / PCIe BARRE de taille déterminée?
Je sais que l'adresse de base de registre (BAR) dans l'espace de configuration PCI définit l'emplacement de départ d'une carte PCI adresse, mais quelle est la taille de cette région se sont-ils établis?
Sûrement, c'est une propriété du matériel depuis seulement il sait comment loin dans son espace d'adressage elle peut traiter. Cependant, je n'arrive pas à voir une BARRE de taille de champ dans la configuration PCI structure.
OriginalL'auteur JeffV | 2013-09-25
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, la taille de BARRE doit être une puissance de deux (par exemple, 1 KiB, 2 MiB), et pour chaque zone doit être aligné en mémoire tels que la baisse des
log2(size)
bits de l'adresse de base sont toujours à zéro. Par exemple, supposons qu'une extrémité a un 4 KiB zone de mémoire, ce qui donne une plage d'adresses de0-0xfff
. L'hôte peut reconfigurer le début de ce domaine de f.x.0x1000
ou0xabcd000
par écrit à la BARRE de registre, mais pas à0x1080
ou0xabcd100
.Lorsque la BARRE de registre est écrite, le point de terminaison ignorer Lsb et toujours le retour des zéros sur la lecture. Ainsi écrit
0xffffffff
le registre, puis la lecture de la valeur indique la taille de la zone. Pour les 4 KiB exemple, cela renvoie0xfffff00X
(plus de quatre bits sont réservés, voir les spécifications). Pour déterminer la taille:0xfffff000
)0xfff
)0x1000 = 4096 bytes
)Cela fonctionne pour la version 64 bits. La valeur de la prochaine adresse de base enregistrer des formulaires de l'Esm de l'adresse de base. Ceci est décrit dans la section 6.2.5.1 de la spécification PCI, version 3.0.
OriginalL'auteur pc3e
Trouvé la réponse à OSDev Wiki:
"Pour déterminer la quantité d'espace d'adressage nécessaires par un périphérique PCI, vous devez enregistrer la valeur d'origine de la BARRE, d'écrire une valeur de toutes les 1 à l'enregistrer, puis le lire."
OriginalL'auteur JeffV
Périphérique PCIe peuvent avoir pour Type-0 (Extrémités) ou de Type 1( RC ou des Interrupteurs ou des Ponts), la Configuration de l'Espace.
--Type-0 périphérique peut avoir un total de 6 Barres de Type 1 peuvent avoir seulement 2 BARs.
- BAR donne les informations sur l'adresse de l'espace requis par l'appareil.
--Chaque BARRE est de 32 bits , dont la première 4 bit 3:0 sont toujours en Lecture Seule.
-- 2^(Position de dernier R/W bits de bit le moins significatif) = Adresse de la fenêtre requis par la BARRE particulière.
Comment connaître l'adresse de la fenêtre ou de la taille de la région represneted par n'importe quel BAR :
1) dans un premier temps de Lire n'importe quel BAR( à Supposer que BAR0 dans notre cas) , nous avons obtenu une valeur de 32'h0000_000F. (Rappelez-vous : les 4 derniers bits en lecture seule!! ).
2) Écrire tous les 1 à BAR0.
3) Lire à nouveau BAR0 et Supposons que nous avons obtenu une valeur de 32'hFFFF_000F. Donc, position de bit de 16 ans est le moins significatif de R/W bits. Si l'adresse de l'espace requis par BAR0 sera de 2^16.
OriginalL'auteur Gaurang Pandey