3737 |
|
|
3738 |
params->gdt_table[2] = 0x00cf9a000000ffffLL; /* KERNEL_CS */ |
params->gdt_table[2] = 0x00cf9a000000ffffLL; /* KERNEL_CS */ |
3739 |
params->gdt_table[3] = 0x00cf92000000ffffLL; /* KERNEL_DS */ |
params->gdt_table[3] = 0x00cf92000000ffffLL; /* KERNEL_DS */ |
3740 |
|
/* for newer kernels (2.6.0) CS/DS are at different addresses */ |
3741 |
|
params->gdt_table[12] = 0x00cf9a000000ffffLL; /* KERNEL_CS */ |
3742 |
|
params->gdt_table[13] = 0x00cf92000000ffffLL; /* KERNEL_DS */ |
3743 |
|
|
3744 |
env->idt.base = (void *)params->idt_table; |
env->idt.base = (void *)((uint8_t *)params->idt_table - phys_ram_base); |
3745 |
env->idt.limit = sizeof(params->idt_table) - 1; |
env->idt.limit = sizeof(params->idt_table) - 1; |
3746 |
env->gdt.base = (void *)params->gdt_table; |
env->gdt.base = (void *)((uint8_t *)params->gdt_table - phys_ram_base); |
3747 |
env->gdt.limit = sizeof(params->gdt_table) - 1; |
env->gdt.limit = sizeof(params->gdt_table) - 1; |
3748 |
|
|
3749 |
cpu_x86_load_seg_cache(env, R_CS, KERNEL_CS, NULL, 0xffffffff, 0x00cf9a00); |
cpu_x86_load_seg_cache(env, R_CS, KERNEL_CS, NULL, 0xffffffff, 0x00cf9a00); |