My Project
Chargement...
Recherche...
Aucune correspondance
Macros | Fonctions | Variables
Référence du fichier virtio.h
#include <manux/pci.h>
#include <manux/types.h>
Graphe des dépendances par inclusion de virtio.h:
Ce graphe montre quels fichiers incluent directement ou indirectement ce fichier :

Aller au code source de ce fichier.

Macros

#define MANUX_VIRTIO_NB_MAX_FILES   3
 
#define PCI_VENDEUR_VIRTIO   0x1AF4
 
#define PCI_PERIPHERIQUE_VIRTIO_NET   0x1000
 
#define PCI_PERIPHERIQUE_VIRTIO_CONSOLE   0x1003
 
#define VIRTIO_RESET   0x00
 
#define VIRTIO_ACKNOWLEDGE   0x01
 
#define VIRTIO_DRIVER   0x02
 
#define VIRTIO_DRIVER_OK   0x04
 
#define VIRTIO_FEATURES_OK   0x08
 
#define VIRTIO_F_RING_INDIRECT_DESC   0x10000000
 
#define VIRTIO_F_RING_EVENT_IDX   0x20000000
 
#define VIRTIO_HIST_CAPA_EQUIP   0x00
 
#define VIRTIO_HIST_CAPA_PILOTE   0x04
 
#define VIRTIO_HIST_ADDRESS_FILE   0x08
 
#define VIRTIO_HIST_TAILLE_FILE   0x0C
 
#define VIRTIO_HIST_FILE_SEL   0x0E
 
#define VIRTIO_HIST_FILE_NOTIF   0x10
 
#define VIRTIO_HIST_ETAT   0x12
 
#define VIRTIO_HIST_ISR   0x13
 
#define VRING_DESC_F_NEXT   1
 
#define VRING_DESC_F_WRITE   2
 

Fonctions

struct __attribute__ ((__packed__)) _VirtioDescripteurBuffer
 
int virtioInitPeripheriquePCI (VirtioPeripherique *vp, int PCINum, uint32_t masque)
 
int virtioFournirBuffer (VirtioPeripherique *vp, uint16_t id, void *bu, int lg, uint16_t fl)
 : Fournir un buffer au périphérique.
 
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.
 
int virtioFileRecupererBuffers (VirtioFileVirtuelle *fv, void *bu[], int lg[], int nb)
 on va récupérer des buffers
 
void virtioFileInterdireInterruption (VirtioFileVirtuelle *fv)
 
void virtioFileAutoriserInterruption (VirtioFileVirtuelle *fv)
 

Variables

 VirtioDescripteurBuffer
 
 VirtioBufferDisponible
 
 VirtioElementUtilise
 
 VirtioBufferUtilise
 
 VirtioFileVirtuelle
 
 VirtioPeripherique
 

Description détaillée

WARNING : les fonctions fournirBuffers et recupererBuffers sont à revoir. A priori en l'état, elles devraient fonctionner vu l'usage que j'en fais. Mais je ne cherche pas à savoir quels descripteurs de buffers sont libres, juste combien sont libres, et je les utilise en round robin. On peut espérer qu'ils soient consommés et rendu dans l'ordre dans lequel ils sont fournis, donc ça passe. Mais il serait plus prudent de mettre en place une liste des descripteurs libres (en plus c'est super simple).

WARNING : je voudrais mettre toutes les définitions de types dans le .c, mais le soucis c'est qu'elles doivent ensuite être utilisées via des pointeurs (cf le premier champs de virtioReseauPeriph) et comme pour le moment je n'ai pas de malloc, ...

Définition dans le fichier virtio.h.

Documentation des macros

◆ MANUX_VIRTIO_NB_MAX_FILES

#define MANUX_VIRTIO_NB_MAX_FILES   3

Toujours pour éviter de jouer avec des structures dynamiques, nous allons limiter le nombre de files virtuelles de chaque équipement de type virtio. Tant qu'on ne fait que des périphériques réseau, on n'a besoin que de deux files, ...

Définition à la ligne 32 du fichier virtio.h.

◆ PCI_PERIPHERIQUE_VIRTIO_CONSOLE

#define PCI_PERIPHERIQUE_VIRTIO_CONSOLE   0x1003

Définition à la ligne 40 du fichier virtio.h.

◆ PCI_PERIPHERIQUE_VIRTIO_NET

#define PCI_PERIPHERIQUE_VIRTIO_NET   0x1000

Définition à la ligne 39 du fichier virtio.h.

◆ PCI_VENDEUR_VIRTIO

#define PCI_VENDEUR_VIRTIO   0x1AF4

Les identifiants de vendeur et équipements

Définition à la ligne 38 du fichier virtio.h.

◆ VIRTIO_ACKNOWLEDGE

#define VIRTIO_ACKNOWLEDGE   0x01

Définition à la ligne 46 du fichier virtio.h.

◆ VIRTIO_DRIVER

#define VIRTIO_DRIVER   0x02

Définition à la ligne 47 du fichier virtio.h.

◆ VIRTIO_DRIVER_OK

#define VIRTIO_DRIVER_OK   0x04

Définition à la ligne 48 du fichier virtio.h.

◆ VIRTIO_F_RING_EVENT_IDX

#define VIRTIO_F_RING_EVENT_IDX   0x20000000

Définition à la ligne 55 du fichier virtio.h.

◆ VIRTIO_F_RING_INDIRECT_DESC

#define VIRTIO_F_RING_INDIRECT_DESC   0x10000000

Les caractéristiques générales

Définition à la ligne 54 du fichier virtio.h.

◆ VIRTIO_FEATURES_OK

#define VIRTIO_FEATURES_OK   0x08

Définition à la ligne 49 du fichier virtio.h.

◆ VIRTIO_HIST_ADDRESS_FILE

#define VIRTIO_HIST_ADDRESS_FILE   0x08

Définition à la ligne 64 du fichier virtio.h.

◆ VIRTIO_HIST_CAPA_EQUIP

#define VIRTIO_HIST_CAPA_EQUIP   0x00

La position des champs principaux de configuration d'une interface conforme à la spécification 0.9.5 [3] (dite "legacy" dans [1] mais avec une organisation différente!)

Définition à la ligne 62 du fichier virtio.h.

◆ VIRTIO_HIST_CAPA_PILOTE

#define VIRTIO_HIST_CAPA_PILOTE   0x04

Définition à la ligne 63 du fichier virtio.h.

◆ VIRTIO_HIST_ETAT

#define VIRTIO_HIST_ETAT   0x12

Définition à la ligne 69 du fichier virtio.h.

◆ VIRTIO_HIST_FILE_NOTIF

#define VIRTIO_HIST_FILE_NOTIF   0x10

Définition à la ligne 68 du fichier virtio.h.

◆ VIRTIO_HIST_FILE_SEL

#define VIRTIO_HIST_FILE_SEL   0x0E

Définition à la ligne 67 du fichier virtio.h.

◆ VIRTIO_HIST_ISR

#define VIRTIO_HIST_ISR   0x13

Définition à la ligne 70 du fichier virtio.h.

◆ VIRTIO_HIST_TAILLE_FILE

#define VIRTIO_HIST_TAILLE_FILE   0x0C

Définition à la ligne 66 du fichier virtio.h.

◆ VIRTIO_RESET

#define VIRTIO_RESET   0x00

Les bits d'état du pilote

Définition à la ligne 45 du fichier virtio.h.

◆ VRING_DESC_F_NEXT

#define VRING_DESC_F_NEXT   1

Les flags de paramètrage des files

Définition à la ligne 75 du fichier virtio.h.

◆ VRING_DESC_F_WRITE

#define VRING_DESC_F_WRITE   2

Définition à la ligne 76 du fichier virtio.h.

Documentation des fonctions

◆ __attribute__()

struct __attribute__ ( (__packed__)  )

Description d'un buffer (voir par exemple struct vring_desc dans [1] Section 2.4.4 ou dans [3] annexe A)

Description d'un buffer "disponible" ([3] Section 2.3.4)

Description des éléments utilisés

Description d'un buffer "utilisé"

Description d'une file virtuelle. Le format de cette structure n'est pas imposé par virtio, car elle est utilisée uniquement dans ce pilote.

Description d'un périphérique virtio

Définition à la ligne 1 du fichier virtio.h.

◆ virtioFileAutoriserInterruption()

void virtioFileAutoriserInterruption ( VirtioFileVirtuelle *  fv)

Définition à la ligne 450 du fichier virtio.c.

◆ virtioFileInterdireInterruption()

void virtioFileInterdireInterruption ( VirtioFileVirtuelle *  fv)

Définition à la ligne 444 du fichier virtio.c.

◆ virtioFileRecupererBuffers()

int virtioFileRecupererBuffers ( VirtioFileVirtuelle *  fv,
void *  bu[],
int  lg[],
int  nb 
)

on va récupérer des buffers

En travaux !!

Renvoie
Le nombre de pointeurs initialisés

Voir [3] section 2.4.2 "Receiving Used Buffers From The Device"

On fait au plus simple : on renvoie un ensembles de buffers. Attention, on revnoie des pointeurs vers les buffers virtio, pas de nouveaux pointeurs alloués. L'appelant doit donc immédiatement en recopier le contenu.

Définition à la ligne 387 du fichier virtio.c.

◆ virtioFournirBuffer()

int virtioFournirBuffer ( VirtioPeripherique *  vp,
uint16_t  id,
void *  bu,
int  lg,
uint16_t  fl 
)

: Fournir un buffer au périphérique.

Paramètres
vple périphérique virtio concerné
idindex de la file
bule buffer (pointeur sur les données/la place)
lgla taille du buffer
fllecture/écriture (VRING_DESC_F_WRITE ou 0)
Renvoie
le nombre de buffer effectivement fournis

C'est effectivement le pointeur bu qui est fourni, donc l'appelant ne doit pas le libérer !

: Fournir un buffer au périphérique.

Paramètres
vple périphérique concerné
idnuméro de la file sur le périphérique
bule buffer (pointeur sur les données/la place)
lgla taille du buffer
fllecture/écriture (VRING_DESC_F_WRITE ou 0)

Définition à la ligne 283 du fichier virtio.c.

◆ virtioFournirBuffers()

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.

Paramètres
fvla file sur laquelle placer ce(s) buffer(s)
idindex de la file
bules buffers (tableau de pointeurs sur les données/la place)
lgla taille des buffers
nble nombre de buffers
fllecture/écriture (VRING_DESC_F_WRITE ou 0)
Renvoie
le nombre de buffers effectivement fournis

C'est effectivement les pointeurs passés dans bu qui sont fournis, donc l'appelant ne doit pas les libérer ! S'il y a plusieurs buffers (nb > 1) c'est sous forme d'une chaîne qu'ils sont fournis

: Fournir un(e chaine de) buffer(s) au périphérique.

Paramètres
vple périphérique virtio concerné
idindex de la file
bules buffers (tableau de pointeurs sur les données/la place)
lgla taille des buffers
nble nombre de buffers
fllecture/écriture (VRING_DESC_F_WRITE ou 0)
Renvoie
le nombre de buffers réellement fournis

L'idée est de fournir une chaîne de buffers . WARNING pas d'erreur gérée !

Définition à la ligne 304 du fichier virtio.c.

◆ virtioInitPeripheriquePCI()

int virtioInitPeripheriquePCI ( VirtioPeripherique *  vp,
int  PCINum,
uint32_t  masque 
)

Initialisation d'un périphérique de type virtio accédé en PCI. L'essentiel de ce qui suit est conforme à la v0.9.5 a priori, pas à la v1.0

Paramètres
vppointeur sur une structure déjà allouée (ou statique)
PCINuml'identifiant PCI
masqueles caractéristiques à ne pas utiliser

Initialisation d'un périphérique de type virtio accédé en PCI. L'essentiel de ce qui suit est conforme à la v0.9.5 a priori, (voir [3] section 2.2.1), mais pas à la v1.0

Paramètres
vppointeur sur une structure déjà allouée (ou statique)
PCINuml'identifiant PCI
masqueles caractéristiques à ne pas utiliser

Définition à la ligne 173 du fichier virtio.c.

Documentation des variables

◆ VirtioBufferDisponible

VirtioBufferDisponible

Définition à la ligne 98 du fichier virtio.h.

◆ VirtioBufferUtilise

VirtioBufferUtilise

Définition à la ligne 116 du fichier virtio.h.

◆ VirtioDescripteurBuffer

VirtioDescripteurBuffer

Définition à la ligne 88 du fichier virtio.h.

◆ VirtioElementUtilise

VirtioElementUtilise

Définition à la ligne 106 du fichier virtio.h.

◆ VirtioFileVirtuelle

VirtioFileVirtuelle

Définition à la ligne 133 du fichier virtio.h.

◆ VirtioPeripherique

VirtioPeripherique

Définition à la ligne 142 du fichier virtio.h.