6#include <manux/errno.h>
118 "movl %0, %%eax \n\t"
120 "ljmp $0x08,$vidageDuCache_%= \n\t"
121 "vidageDuCache_%= : \n\t"
122 "movw $0x10, %%ax \n\t"
123 "movw %%ax, %%ds \n\t"
124 "movw %%ax, %%es \n\t"
125 "movw %%ax, %%fs \n\t"
126 "movw %%ax, %%gs \n\t"
127 "movw $0x18, %%ax \n\t"
128 "movw %%ax, %%ss \n\t"
129 "movl %%cr0, %%eax \n\t"
131 "movl %%eax, %%cr0 \n\t"
146 argument[0] = (limite) & 0xFF;
147 argument[1] = (limite>>8) & 0xFF;
153 __asm__ __volatile__ (
"lldt (%0)": :
"a" ((
char *)argument));
159#define MANUX_GDT_CS 0x08
160#define MANUX_GDT_DS 0x10
161#define MANUX_GDT_SS 0x18
170 if (resultat != 0x00) {
171 paniqueNoyau(
"Probleme sur le segment nul en %d\n", resultat);
184 paniqueNoyau(
"Probleme sur le segment de code en %d\n", resultat);
194 paniqueNoyau(
"Probleme sur le segment de donnees en %d\n", resultat);
204 paniqueNoyau(
"Probleme sur le segment de pile en %d\n", resultat);
218 resultat = setDescripteurTSS(dt, (
uint32_t)adresse, limite, 0x8B, 0x90);
220 resultat = setDescripteurTSS(dt, (
uint32_t)adresse, limite, 0x89, 0x90);
#define MANUX_TAILLE_PAGE
void _chargerGDT(uint32_t ad, uint16_t limite)
Définition des fonctions de base d'entrée-sortie du noyau.
#define paniqueNoyau(fmt, args...)
#define MANUX_GDT_NB_PAGES
#define MANUX_ADRESSE_GDT
void chargerLDT(DescriptorTable *ldt)
int setDescripteurSegment(DescriptorTable *dt, uint32_t adresse, uint32_t limite, uint8_t type, uint8_t gd0a)
int ajouterDescTSS(DescriptorTable *dt, void *adresse, uint32_t limite, booleen busyTask)
void chargerGDT(DescriptorTable *gdt)
DescriptorTable * gdtSysteme
struct __attribute__((__packed__))
void initialiserGDT(void)
union _Descripteur Descripteur
Descripteur descripteur[0]