diff options
Diffstat (limited to 'src/arch/vmpa.h')
-rw-r--r-- | src/arch/vmpa.h | 59 |
1 files changed, 51 insertions, 8 deletions
diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h index 85ff6b4..52c5d6a 100644 --- a/src/arch/vmpa.h +++ b/src/arch/vmpa.h @@ -37,6 +37,9 @@ +/* ---------------------- DEFINITION D'UNE POSITION EN MEMOIRE ---------------------- */ + + /* Taille de la plus longue chaîne de représentation */ #define VMPA_MAX_LEN (sizeof(STR(ULLONG_MAX)) + 1) @@ -44,24 +47,28 @@ #define VMPA_BUFFER(name) char name[VMPA_MAX_LEN] -#define VMPA_NO_PHYSICAL ((off_t)-1) -#define VMPA_NO_VIRTUAL ((uint64_t)-2) +/* Types pour respectivement une position physique et une adresse virtuelle */ +#define phys_t off_t +#define virt_t uint64_t + +#define VMPA_NO_PHYSICAL ((phys_t)-1) +#define VMPA_NO_VIRTUAL ((virt_t)-2) /* Adresse mémoire ou position physique */ typedef struct _vmpa2t { - off_t physical; /* Position physique */ - uint64_t virtual; /* Adresse virtuelle */ + phys_t physical; /* Position physique */ + virt_t virtual; /* Adresse virtuelle */ } vmpa2t; /* Initialise une localisation dans l'espace mémoire/physique. */ -void init_vmpa(vmpa2t *, off_t, uint64_t); +void init_vmpa(vmpa2t *, phys_t, virt_t); /* Crée une localisation dans l'adressage mémoire. */ -vmpa2t *make_vmpa(off_t, uint64_t); +vmpa2t *make_vmpa(phys_t, virt_t); #define delete_vmpa(a) free(a) @@ -87,10 +94,10 @@ int cmp_vmpa(const vmpa2t *, const vmpa2t *); make_vmpa(get_phy_addr(src), get_virt_addr(src)) /* Décalle une position d'une certaine quantité. */ -void advance_vmpa(vmpa2t *, off_t); +void advance_vmpa(vmpa2t *, phys_t); /* Calcule au mieux la distance entre deux coordonnées. */ -off_t compute_vmpa_diff(const vmpa2t *, const vmpa2t *); +phys_t compute_vmpa_diff(const vmpa2t *, const vmpa2t *); /* Lit la définition d'une adresse depuis un flux réseau. */ bool recv_vmpa(vmpa2t *, int, int); @@ -112,4 +119,40 @@ vmpa2t *string_to_vmpa_virt(const char *); +/* ------------------------ DEFINITION D'UNE ZONE EN MEMOIRE ------------------------ */ + + +/* Couverture mémoire */ +typedef struct _mrange_t +{ + vmpa2t addr; /* Adresse physique/virtuelle */ + phys_t length; /* Taille de la couverture */ + +} mrange_t; + + +#define get_mrange_addr(r) &(r)->addr +#define get_mrange_length(r) (r)->length + + +/* Initialise une plage dans l'espace mémoire/physique. */ +void init_mrange(mrange_t *, const vmpa2t *, phys_t ); + +/* Copie la définition d'une plage mémoire dans une autre. */ +void copy_mrange(mrange_t *, const mrange_t *); + +/* Compare deux couvertures mémoire selon leurs propriétés. */ +int cmp_mrange(const mrange_t *, const mrange_t *); + +/* Indique si une localisation est incluse dans une zone ou non. */ +bool mrange_contains_addr(const mrange_t *, const vmpa2t *); + +/* Transforme un emplacement physique en chaîne de caractères. */ +char *mrange_phys_to_string(const mrange_t *, MemoryDataSize, bool, char [VMPA_MAX_LEN], size_t *); + +/* Transforme un emplacement virtuel en chaîne de caractères. */ +char *mrange_virt_to_string(const mrange_t *, MemoryDataSize, bool, char [VMPA_MAX_LEN], size_t *); + + + #endif /* _ARCH_VMPA_H */ |