www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

multiboot.h (5830B)


      1 #ifndef DEMARRAGE_MULTIBOOT_MULTIBOOT_H
      2 #define DEMARRAGE_MULTIBOOT_MULTIBOOT_H
      3 
      4 #include <types.h>
      5 
      6 /**
      7  * @brief  Informations récupérées par grub
      8  * 
      9  * D'abord les sous-structures, puis la structure principale.
     10  */
     11 
     12 /* FIXME : De quoi s'agit-il réellement ? */
     13 typedef uint32 pointeurLointain;
     14 
     15 /**
     16  * @brief  Disponibilité des informations.
     17  */
     18 typedef struct MultibootInfoFlags {
     19     bool mem:1;
     20     bool bootDevice:1;
     21     bool cmdline:1;
     22     bool mods:1;
     23     bool aout:1;
     24     bool elf:1;
     25     bool mmap:1;
     26     bool drives:1;
     27     bool configTable:1;
     28     bool bootLoaderName:1;
     29     bool apmTable:1;
     30     bool vbe:1;
     31     uint32 PADDING:20;
     32 } PACKED MultibootInfoFlags;
     33 
     34 /**
     35  * @brief Média de stockage utilisé lors du démarrage.
     36  */
     37 typedef struct MultibootInfoBootDevice {
     38     uint8 part1;
     39     uint8 part2;
     40     uint8 part3;
     41     uint8 drive;
     42 } PACKED MultibootInfoBootDevice;
     43 
     44 /**
     45  * @brief Modules chargés par le chargeur de démarrage.
     46  */
     47 typedef struct MultibootInfoModule {
     48     void* modStart;
     49     void* modEnd;
     50     
     51     StringZ string;
     52     
     53     uint32 reserved;
     54 } PACKED MultibootInfoModule;
     55 
     56 /**
     57  * @brief Table des symboles a.out .
     58  */
     59 typedef struct MultibootInfoAout {
     60     uint32 aoutTabSize;
     61     uint32 aoutStrSize;
     62     
     63     /* le type de aoutAddr devrait être nlist (cf. standard
     64      * multiboot), mais de quoi s'agit-t-il ? */
     65     void* aoutAddr;
     66     
     67     uint32 reserved;
     68 } PACKED MultibootInfoAout;
     69 
     70 /**
     71  * @brief Table des en-têtes de section pour ELF.
     72  */
     73 typedef struct MultibootInfoElf {
     74     uint32 num;
     75     uint32 size;
     76     
     77     void* addr;
     78     
     79     StringZ* shndx; /* Tableau de StringZ ou de String ? */
     80 } PACKED MultibootInfoElf;
     81 
     82 /**
     83  * @brief Cartographie de la mémoire.
     84  * 
     85  * Si type != MultibootInfoMmapRam alors cette mémoire est réservée
     86  * (mémoire vidéo, etc.)
     87  */
     88 #define MultibootInfoMmapRam = 1;
     89 typedef struct MultibootInfoMmap {
     90     /* Attention, mmapAddr tel que fourni par grub pointe sur le 2e
     91      * champ (baseAddr), il faut donc enlever 4 octets à
     92      * l'adresse. */
     93     uint32 size;
     94     
     95     /* Avec 32_low suivi de 32_high, je peux en faire 64. Ne me
     96      * seais-je pas trompé dans l'endianisme ? */
     97     uint64 baseAddr;
     98     uint64 length;
     99     uint32 type;
    100 } PACKED MultibootInfoMmap;
    101 
    102 /**
    103  * @brief Média de stockage.
    104  */
    105 typedef enum { CHS = 0, LBA = 1 } MultibootInfoDriveMode;
    106 typedef struct MultibootInfoDrive {
    107     uint32 size;
    108     
    109     uint8 driveNumber;
    110     
    111     /* Cela permet-il de contraindre la taille d'un enum ? */
    112     MultibootInfoDriveMode driveMode:8;
    113     
    114     
    115     uint16 driveCylinders;
    116     uint8 driveHeads;
    117     uint8 driveSectors;
    118     
    119     /* Et comment je gère cette horreur moi ? */
    120     uint16 drivePorts;
    121 } PACKED MultibootInfoDrive;
    122 
    123 /**
    124  * @brief Fonction GET CONFIGURATION du BIOS.
    125  */
    126 typedef struct MultibootInfoConfigTable {
    127     /* Chercher le format de retour de l'appel au BIOS nommé
    128      * GET CONFIGURATION */
    129 } PACKED MultibootInfoConfigTable;
    130 
    131 /**
    132  * @brief Advanced Power Management.
    133  */
    134 typedef struct MultibootInfoApmTable {
    135     /* Voir le standard apm pour les types...
    136      * http://www.micr.../hwdev/busbios/amp_12.htm
    137      * Soit dit en passant, sympa la référence à micr... dans un
    138      * standard libre (très mal écrit le standard au fait...) */
    139     uint16 version;
    140     uint16 cseg;
    141     uint32 offset;
    142     uint16 cseg16;
    143     uint16 dseg;
    144     uint16 flags;
    145     uint16 csegLen;
    146     uint16 cseg16Len;
    147     uint16 dsegLen;    
    148 } PACKED MultibootInfoApmTable;
    149 
    150 /**
    151  * @brief Contrôleur VESA Bios Extension
    152  */
    153 typedef struct MultibootInfoVbeControllerInfo{
    154     char signature[4];		    /* == "VESA" */
    155     union {
    156 	    uint16 version;
    157 	    struct {
    158 	        uint8 versionMajeure;   /* 2 pour VBE 2.* */
    159 	        uint8 versionMineure;   /* 0 pour VBE *.0 */
    160 	    };
    161     };
    162 	/* pointeurLointain ??? */
    163     uint16 oemString[2];	/* Nom du périphérique, donné par le constructeur */
    164     uint32 capabilities;	/* Fonctionnalités offertes */
    165 	/* pointeurLointain ??? */
    166     uint16 videomodes[2];	/* Liste de modes vidéo */
    167     uint16 totalMemory;	/* nombre de blocs de 64ko */
    168 } PACKED MultibootInfoVbeControllerInfo;
    169 
    170 /**
    171  * @brief Mode vidéo VESA Bios Extension
    172  */
    173 typedef struct MultibootInfoVbeModeInfo {
    174     uint16 attributes;
    175     uint8 winA,winB;
    176     uint16 granularity;
    177     uint16 winsize;
    178     uint16 segmentA, segmentB;
    179     pointeurLointain winFunc;
    180     uint16 pitch;                    /* octets par scanline */
    181     
    182     uint16 Xres, Yres;
    183     uint8 Wchar, Ychar, planes, bpp, banks;
    184     uint8 memory_model, bank_size, image_pages;
    185     uint8 reserved;
    186     
    187     struct {
    188 	uint8 maskSize;
    189 	uint8 fieldPos;
    190     } red, green, blue, reservedChannel;
    191     uint8 directcolor_attributes;
    192     
    193     void* linearAddress;                /* L'adresse du framebuffer linéaire :) */
    194     void* offscreenAddress;
    195     uint16 offscreenSizeKB;
    196 } PACKED MultibootInfoVbeModeInfo;
    197 
    198 /**
    199  * @brief  Informations récupérées par grub
    200  */
    201 typedef struct MultibootInfo {
    202     MultibootInfoFlags flags;
    203     
    204     uint32 memLower;
    205     uint32 memUpper;
    206     
    207     MultibootInfoBootDevice bootDevice;
    208     
    209     StringZ cmdline;
    210     
    211     uint32 modsCount;
    212     MultibootInfoModule* modsAddr;
    213     
    214     union {
    215         MultibootInfoAout aout;
    216         MultibootInfoElf elf;
    217     } PACKED syms;
    218     
    219     uint32 mmapLength;
    220     MultibootInfoMmap* mmapAddr;
    221     
    222     uint32 drivesLength;
    223     MultibootInfoDrive* drivesAddr;
    224     
    225     MultibootInfoConfigTable* configTable;
    226     
    227     StringZ bootLoaderName;
    228     
    229     MultibootInfoApmTable* apmTable;
    230     
    231     MultibootInfoVbeControllerInfo* vbeControlInfo;
    232     MultibootInfoVbeModeInfo* vbeModeInfo;
    233     uint16 vbeMode;
    234     uint16 vbeInterfaceSeg;
    235     uint16 vbeInterfaceOff;
    236     uint16 vbeInterfaceLen;
    237 } PACKED MultibootInfo;
    238 
    239 typedef struct EtatMultiboot {
    240 	MultibootInfo* InfoMultiboot;
    241 	uint32 magicMultiboot;
    242 } EtatMultiboot;
    243 
    244 #endif