doc(gdt): add comments in gdt header
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
This commit is contained in:
		
							parent
							
								
									5ada33613a
								
							
						
					
					
						commit
						60800e71fd
					
				
							
								
								
									
										55
									
								
								k/gdt.h
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										55
									
								
								k/gdt.h
									
									
									
									
									
								
							@ -11,22 +11,35 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct gdt_entry
 | 
					struct gdt_entry
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint16_t limit_1    : 16;
 | 
					    uint16_t limit_1    : 16; // 16 lsbs of the segment limit
 | 
				
			||||||
    uint16_t base_1     : 16;
 | 
					    uint16_t base_1     : 16; // 16 lsbs of the segment base address
 | 
				
			||||||
    uint8_t base_2      : 8;
 | 
					
 | 
				
			||||||
    uint8_t accessed    : 1;
 | 
					
 | 
				
			||||||
    uint8_t rw          : 1;
 | 
					    uint8_t base_2      : 8;  // 8 next bits of the segment base address
 | 
				
			||||||
    uint8_t dc          : 1;
 | 
					
 | 
				
			||||||
    uint8_t ex          : 1;
 | 
					    /* Access Byte */
 | 
				
			||||||
    uint8_t desc_type   : 1;
 | 
					    uint8_t accessed    : 1;  // set to 0, is set to 1 by CPU when segment is
 | 
				
			||||||
    uint8_t desc_priv   : 2;
 | 
					                              // accessed
 | 
				
			||||||
    uint8_t present     : 1;
 | 
					    uint8_t rw          : 1;  // read/write bit, 1 to grant read acces on code
 | 
				
			||||||
    uint8_t limit_2     : 4;
 | 
					                              // segments or write access on data segments
 | 
				
			||||||
    uint8_t available   : 1;
 | 
					    uint8_t dc          : 1;  // Direction/Conforming bit
 | 
				
			||||||
    uint8_t l           : 1;
 | 
					    uint8_t ex          : 1;  // Executable bit
 | 
				
			||||||
    uint8_t db          : 1;
 | 
					    uint8_t desc_type   : 1;  // Descriptor type: 1 for data or code segmentm
 | 
				
			||||||
    uint8_t granularity : 1;
 | 
					                              // 0 for system segments (like TSS)
 | 
				
			||||||
    uint8_t base_3      : 8;
 | 
					    uint8_t desc_priv   : 2;  // Descriptor privilege
 | 
				
			||||||
 | 
					    uint8_t present     : 1;  // Always set to 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint8_t limit_2     : 4;  // 4 msbs of the segment limit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Flags */
 | 
				
			||||||
 | 
					    uint8_t available   : 1;  // Available for use by system software
 | 
				
			||||||
 | 
					    uint8_t l           : 1;  // 64-bit code segment
 | 
				
			||||||
 | 
					    uint8_t db          : 1;  // size, 0 for 16 bits, 1 for 32 bits
 | 
				
			||||||
 | 
					    uint8_t granularity : 1;  // limit unit, 0 for bytes, 1 for 4KiB (1 page)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint8_t base_3      : 8;  // 8 msbs of the segment base
 | 
				
			||||||
} __attribute__ ((packed));
 | 
					} __attribute__ ((packed));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct gdt
 | 
					struct gdt
 | 
				
			||||||
@ -36,15 +49,15 @@ struct gdt
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct gdt_r
 | 
					struct gdt_r
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint16_t limit;
 | 
					    uint16_t limit; // total size of the GDT - 1 in bytes
 | 
				
			||||||
    uint32_t addr;
 | 
					    uint32_t addr;  // base address of the DGT
 | 
				
			||||||
} __attribute__ ((packed));
 | 
					} __attribute__ ((packed));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct segment_selector
 | 
					struct segment_selector
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint8_t rpl             : 2;
 | 
					    uint8_t rpl             : 2;  // request privilege level
 | 
				
			||||||
    uint8_t table_indicator : 1;
 | 
					    uint8_t table_indicator : 1;  // 0 for GDT, 1 for LDT
 | 
				
			||||||
    uint16_t index          : 13;
 | 
					    uint16_t index          : 13; // index of the entry in the table
 | 
				
			||||||
} __attribute__ ((packed));
 | 
					} __attribute__ ((packed));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void init_gdt();
 | 
					void init_gdt();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user