diff --git a/include/kernaux/multiboot2.h b/include/kernaux/multiboot2.h index ba30642..6b950e0 100644 --- a/include/kernaux/multiboot2.h +++ b/include/kernaux/multiboot2.h @@ -10,14 +10,16 @@ extern "C" { *********************/ struct KernAux_Multiboot2 { - unsigned int total_size; - unsigned int reserved1; -}; + unsigned int total_size : 32; + unsigned int reserved1 : 32; +} +__attribute__((packed)); struct KernAux_Multiboot2_TagBase { - unsigned int type; - unsigned int size; -}; + unsigned int type : 32; + unsigned int size : 32; +} +__attribute__((packed)); /****************** * Tag structures * @@ -29,7 +31,8 @@ struct KernAux_Multiboot2_Tag_BootCmdLine { struct KernAux_Multiboot2_TagBase base; char cmdline[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_BootLoaderName { // type = 2 @@ -37,135 +40,147 @@ struct KernAux_Multiboot2_Tag_BootLoaderName { struct KernAux_Multiboot2_TagBase base; char name[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_Module { // type = 3 // size = ? struct KernAux_Multiboot2_TagBase base; - unsigned int mod_start; - unsigned int mod_end; + unsigned int mod_start : 32; + unsigned int mod_end : 32; char cmdline[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_BasicMemoryInfo { // type = 4 // size = 16 struct KernAux_Multiboot2_TagBase base; - unsigned int mem_lower; - unsigned int mem_upper; -}; + unsigned int mem_lower : 32; + unsigned int mem_upper : 32; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_BIOSBootDevice { // type = 5 // size = 20 struct KernAux_Multiboot2_TagBase base; - unsigned int bios_dev; - unsigned int partition; - unsigned int sub_partition; -}; + unsigned int bios_dev : 32; + unsigned int partition : 32; + unsigned int sub_partition : 32; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_MemoryMap { // type = 5 // size = ? struct KernAux_Multiboot2_TagBase base; - unsigned int size; - unsigned int entry_size; - unsigned int entry_version; + unsigned int size : 32; + unsigned int entry_size : 32; + unsigned int entry_version : 32; unsigned char data[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_VBEInfo { // type = 7 // size = 784 struct KernAux_Multiboot2_TagBase base; - unsigned short vbe_mode; - unsigned short vbe_interface_seg; - unsigned short vbe_interface_off; - unsigned short vbe_interface_len; + unsigned short vbe_mode : 16; + unsigned short vbe_interface_seg : 16; + unsigned short vbe_interface_off : 16; + unsigned short vbe_interface_len : 16; unsigned char vbe_control_info[512]; unsigned char vbe_mode_info[256]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_FramebufferInfo { // type = 8 // size = ? struct KernAux_Multiboot2_TagBase base; - unsigned long long framebuffer_addr; - unsigned int framebuffer_pitch; - unsigned int framebuffer_width; - unsigned int framebuffer_height; - unsigned char framebuffer_bpp; - unsigned char framebuffer_type; - unsigned char reserved1; + unsigned long long framebuffer_addr : 64; + unsigned int framebuffer_pitch : 32; + unsigned int framebuffer_width : 32; + unsigned int framebuffer_height : 32; + unsigned char framebuffer_bpp : 8; + unsigned char framebuffer_type : 8; + unsigned char reserved1 : 8; unsigned char data[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_ELFSymbols { // type = 9 // size = ? struct KernAux_Multiboot2_TagBase base; - unsigned short num; - unsigned short ent_size; - unsigned short shndx; - unsigned short reserved1; + unsigned short num : 16; + unsigned short ent_size : 16; + unsigned short shndx : 16; + unsigned short reserved1 : 16; unsigned char section_headers[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_APMTable { // type = 10 // size = 20 struct KernAux_Multiboot2_TagBase base; - unsigned short version; - unsigned short cseg; - unsigned int offset; - unsigned short cseg_16; - unsigned short dseg; - unsigned short flags; - unsigned short cseg_len; - unsigned short cseg_16_len; - unsigned short dseg_len; -}; + unsigned short version : 16; + unsigned short cseg : 16; + unsigned int offset : 32; + unsigned short cseg_16 : 16; + unsigned short dseg : 16; + unsigned short flags : 16; + unsigned short cseg_len : 16; + unsigned short cseg_16_len : 16; + unsigned short dseg_len : 16; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_EFI32bitSystemTablePointer { // type = 11 // size = 12 struct KernAux_Multiboot2_TagBase base; - unsigned int pointer; -}; + unsigned int pointer : 32; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_EFI64bitSystemTablePointer { // type = 12 // size = 16 struct KernAux_Multiboot2_TagBase base; - unsigned long long pointer; -}; + unsigned long long pointer : 64; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_SMBIOSTables { // type = 13 // size = ? struct KernAux_Multiboot2_TagBase base; - unsigned char major; - unsigned char minor; + unsigned char major : 8; + unsigned char minor : 8; unsigned char reserved1[6]; unsigned char data[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_ACPIOldRSDP { // type = 14 @@ -173,7 +188,8 @@ struct KernAux_Multiboot2_Tag_ACPIOldRSDP { struct KernAux_Multiboot2_TagBase base; unsigned char data[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_ACPINewRSDP { // type = 15 @@ -181,7 +197,8 @@ struct KernAux_Multiboot2_Tag_ACPINewRSDP { struct KernAux_Multiboot2_TagBase base; unsigned char data[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_NetworkingInfo { // type = 16 @@ -189,59 +206,66 @@ struct KernAux_Multiboot2_Tag_NetworkingInfo { struct KernAux_Multiboot2_TagBase base; unsigned char data[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_EFIMemoryMap { // type = 17 // size = ? struct KernAux_Multiboot2_TagBase base; - unsigned int descriptor_size; - unsigned int descriptor_version; + unsigned int descriptor_size : 32; + unsigned int descriptor_version : 32; unsigned char data[]; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_EFIBootServicesNotTerminated { // type = 18 // size = 8 struct KernAux_Multiboot2_TagBase base; -}; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_EFI32bitImageHandlePointer { // type = 19 // size = 12 struct KernAux_Multiboot2_TagBase base; - unsigned int pointer; -}; + unsigned int pointer : 32; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_EFI64bitImageHandlePointer { // type = 20 // size = 16 struct KernAux_Multiboot2_TagBase base; - unsigned long long pointer; -}; + unsigned long long pointer : 64; +} +__attribute__((packed)); struct KernAux_Multiboot2_Tag_ImageLoadBasePhysAddr { // type = 21 // size = 12 struct KernAux_Multiboot2_TagBase base; - unsigned int load_base_addr; -}; + unsigned int load_base_addr : 32; +} +__attribute__((packed)); /************************* * Additional structures * *************************/ struct KernAux_Multiboot2_Tag_MemoryMap_EntryBase { - unsigned long long base_addr; - unsigned long long length; - unsigned int type; - unsigned int reserved1; -}; + unsigned long long base_addr : 64; + unsigned long long length : 64; + unsigned int type : 32; + unsigned int reserved1 : 32; +} +__attribute__((packed)); #ifdef __cplusplus }