My Project
Chargement...
Recherche...
Aucune correspondance
virtio.h
Aller à la documentation de ce fichier.
18#ifndef VIRTIO_DEF
19#define VIRTIO_DEF
20
21#include <manux/pci.h> // virtio est un système PCI
22#include <manux/types.h>
23
31#ifndef MANUX_VIRTIO_NB_MAX_FILES
32# define MANUX_VIRTIO_NB_MAX_FILES 3
33#endif
34
38#define PCI_VENDEUR_VIRTIO 0x1AF4
39#define PCI_PERIPHERIQUE_VIRTIO_NET 0x1000
40#define PCI_PERIPHERIQUE_VIRTIO_CONSOLE 0x1003
41
45#define VIRTIO_RESET 0x00
46#define VIRTIO_ACKNOWLEDGE 0x01
47#define VIRTIO_DRIVER 0x02
48#define VIRTIO_DRIVER_OK 0x04
49#define VIRTIO_FEATURES_OK 0x08
50
54#define VIRTIO_F_RING_INDIRECT_DESC 0x10000000 // 28
55#define VIRTIO_F_RING_EVENT_IDX 0x20000000 // 29
56
62#define VIRTIO_HIST_CAPA_EQUIP 0x00 // Les capacités de l'équipement
63#define VIRTIO_HIST_CAPA_PILOTE 0x04 // Les capacités du pilote
64#define VIRTIO_HIST_ADDRESS_FILE 0x08 // Numéro de page de la file
65 // sélectionnée
66#define VIRTIO_HIST_TAILLE_FILE 0x0C // Taille de la file
67#define VIRTIO_HIST_FILE_SEL 0x0E // Sélection de la file
68#define VIRTIO_HIST_FILE_NOTIF 0x10 // Notification de la file
69#define VIRTIO_HIST_ETAT 0x12 // Etat du périph et du pilote
70#define VIRTIO_HIST_ISR 0x13
71
75#define VRING_DESC_F_NEXT 1
76#define VRING_DESC_F_WRITE 2
77
83typedef struct __attribute__((__packed__)) _VirtioDescripteurBuffer {
84 uint64_t adresse;
85 uint32_t longueur;
86 uint16_t flags;
87 uint16_t suivant;
89
93typedef struct __attribute__((__packed__)) _VirtioBufferDisponible {
94 uint16_t flags;
95 uint16_t indice;
96 uint16_t indicesDesBuffer[];
97 //uint16_t evenementUtilise; // On ne peut pas le déclarer !
99
103typedef struct __attribute__((__packed__)) _VirtioElementUtilise {
104 uint32_t indiceBuffer; // Dans la table des descripteurs
105 uint32_t longueur; // Le nombre d'octets utilisés
107
111typedef struct __attribute__((__packed__)) _VirtioBufferUtilise {
112 uint16_t flags;
113 uint16_t indice;
114 VirtioElementUtilise elementsUtilises[];
115 //uint16_t evenementDisponible; // On ne peut pas le déclarer
117
123typedef struct __attribute__((__packed__)) _VirtioFileVirtuelle {
124 uint16_t taille;
125 uint16_t prochainDescripteur; // Le prochain à utiliser
126 uint16_t nbDescripteursLibres;// A-t-on encore des desc ?
127 VirtioDescripteurBuffer * tableDescripteurs; // La table des
128 // descripteurs de
129 // buffer
130 VirtioBufferDisponible * buffersDisponibles ;
131 VirtioBufferUtilise * buffersUtilises;
132 uint16_t dernierIndiceUtilise; // WARNING le nom n'est pas bon je pense
134
138typedef struct __attribute__((__packed__)) _VirtioPeripherique {
139 PCIEquipement * pciEquipement; // Pointeur sur les caractéristiques PCI
140 uint32_t caracteristiques;
143
154 int PCINum,
155 uint32_t masque);
156
170 uint16_t id,
171 void * bu, int lg,
172 uint16_t fl);
173
174
192 uint16_t id,
193 void * bu[], int lg[], int nb,
194 uint16_t fl);
195
197int virtioFileRecupererBuffers(VirtioFileVirtuelle * fv, void * bu[], int lg[], int nb);
198
201
202#ifdef MANUX_VIRTIO_AUDIT
206void virtioAfficherFile(VirtioFileVirtuelle * fv);
207#endif // MANUX_VIRTIO_AUDIT
208
209#endif
unsigned long uint32_t
Definition types.h:20
unsigned short uint16_t
Definition types.h:16
unsigned long long uint64_t
Definition types.h:28
VirtioDescripteurBuffer
Definition virtio.h:88
int virtioFournirBuffer(VirtioPeripherique *vp, uint16_t id, void *bu, int lg, uint16_t fl)
: Fournir un buffer au périphérique.
Definition virtio.c:283
VirtioElementUtilise
Definition virtio.h:106
VirtioFileVirtuelle
Definition virtio.h:133
void virtioFileAutoriserInterruption(VirtioFileVirtuelle *fv)
Definition virtio.c:450
int virtioInitPeripheriquePCI(VirtioPeripherique *vp, int PCINum, uint32_t masque)
Definition virtio.c:173
void virtioFileInterdireInterruption(VirtioFileVirtuelle *fv)
Definition virtio.c:444
VirtioBufferUtilise
Definition virtio.h:116
#define MANUX_VIRTIO_NB_MAX_FILES
Definition virtio.h:32
int virtioFournirBuffers(VirtioPeripherique *vp, uint16_t id, void *bu[], int lg[], int nb, uint16_t fl)
: Fournir un(e chaine de) buffer(s) au périphérique.
Definition virtio.c:304
int virtioFileRecupererBuffers(VirtioFileVirtuelle *fv, void *bu[], int lg[], int nb)
on va récupérer des buffers
Definition virtio.c:387
struct __attribute__((__packed__)) _VirtioDescripteurBuffer
Definition virtio.h:83
VirtioBufferDisponible
Definition virtio.h:98
VirtioPeripherique
Definition virtio.h:142
: structure permettant d'identifier un équipement PCI
Definition pci.h:14