|
My Project
|
: Fonctions de manipulation du bus PCI Plus de détails...

Aller au code source de ce fichier.
Macros | |
| #define | PCI_NB_EQUIP_PAR_BUS 8 |
| #define | PCI_CONFIG_ADDRESS 0xCF8 |
| Les ports d'E/S de configuration du PCI. | |
| #define | PCI_CONFIG_DATA 0xCFC |
| #define | MANUX_NB_BUS_PCI 1 |
| : Le nombre de bus | |
| #define | PCI_ID_VENDEUR 0x00 |
| #define | PCI_ID_EQUIPEMENT 0x02 |
| #define | PCI_REVISION 0x08 |
| #define | PCI_INTERRUPTION 0x3C |
| #define | PCI_BAR_0 0x10 |
| #define | PCI_BAR_1 0x14 |
| #define | PCI_BAR_2 0x18 |
| #define | PCI_BAR_3 0x1C |
| #define | PCI_BAR_4 0x20 |
| #define | PCI_BAR_5 0x24 |
| #define | PCI_BAR_IO 0x01 |
| #define | PCI_AUCUN_VENDEUR 0xFFFF |
Fonctions | |
| uint32_t | PCILireLong (uint8_t bus, uint8_t slot, uint8_t fonction, uint8_t offset) |
| : Lecture d'un mot sur le registre de config du PCI | |
| uint16_t | PCILireMot (uint8_t bus, uint8_t slot, uint8_t fonction, uint8_t offset) |
| uint8_t | PCILireOctet (uint8_t bus, uint8_t slot, uint8_t fonction, uint8_t offset) |
| void | PCIEnumerationDesEquipements (void) |
| : recherche des équipements PCI disponibles | |
| int | PCIObtenirProchainEquipement (uint16_t vendeur, uint16_t equipement, int precedent) |
| : récuperer l'identifiant du prochain équipement PCI | |
| PCIEquipement * | PCIEquipementNumero (int n) |
Variables | |
| int | PCINombreEquipements = 0 |
| : Une structure qui contient la description des équipements PCI détectés | |
| PCIEquipement | PCIEquipements [MANUX_NB_MAX_EQUIPEMENTS_PCI] |
: Fonctions de manipulation du bus PCI
Liens utiles [1] https://wiki.osdev.org/PCI [2] https://en.wikipedia.org/wiki/PCI_configuration_space
Définition dans le fichier pci.c.
| #define PCI_CONFIG_ADDRESS 0xCF8 |
| #define PCI_ID_VENDEUR 0x00 |
| #define PCI_NB_EQUIP_PAR_BUS 8 |
| PCIEquipement * PCIEquipementNumero | ( | int | n | ) |
: Lecture d'un mot sur le registre de config du PCI
Les registres sont organisés comme décrits par exemple dans https://en.wikipedia.org/wiki/PCI_configuration_space#Standardized_registers
On a donc un offset qui nous dit quel long aller chercher puis éventuellement, via ses 2 bits de poids faible quel mot voire quel octet. Ce denier "niveau d'adressage" est fait par un masque (Et puisque les registres sont alignés sur 32 bits, on lit systématiquement un long à l'offset privé de ces deux bits)
: récuperer l'identifiant du prochain équipement PCI
WARNING remplacer les deux fonctions suivantes par une seule qui renvoie directement un pointeur.
| precedent : indice du précédent (-1 pour chercher le premier) |
| PCIEquipement PCIEquipements[MANUX_NB_MAX_EQUIPEMENTS_PCI] |