Changeset 89344d85 in mainline for arch/amd64/src


Ignore:
Timestamp:
2005-09-03T00:19:23Z (20 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
36b209a
Parents:
e4a6dda
Message:

Changes, that were needed to make it work on Bochs.

  • We CAN use the NX bit in paging tables, but we have

to initialize the NXE bit in EFER register first.

Location:
arch/amd64/src
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/src/amd64.c

    re4a6dda r89344d85  
    4040#include <arch/bios/bios.h>
    4141#include <arch/mm/memory_init.h>
     42#include <arch/cpu.h>
     43#include <print.h>
     44#include <arch/cpuid.h>
    4245
    4346void arch_pre_mm_init(void)
    4447{
     48        struct cpu_info cpuid_s;
     49
     50        cpuid(AMD_CPUID_EXTENDED,&cpuid_s);
     51        if (! (cpuid_s.cpuid_edx & (1<<AMD_EXT_NOEXECUTE))) {
     52                printf("We do not support NX!!-----------\n");
     53                printf("%X------\n",cpuid_s.cpuid_edx);
     54                cpu_halt();
     55        }
     56        set_efer_flag(AMD_NXE_FLAG);
     57
    4558        pm_init();
    4659
  • arch/amd64/src/asm_utils.S

    re4a6dda r89344d85  
    4040.global interrupt_handlers
    4141.global panic_printf
     42.global cpuid
    4243
    4344panic_printf:
     
    4748.global has_cpuid
    4849.global rdtsc
    49 
    50 
     50.global read_efer_flag
     51.global set_efer_flag
     52       
    5153## Determine CPUID support
    5254#
     
    7173        ret
    7274
     75cpuid:
     76        movq %rbx, %r10  # we have to preserve rbx across function calls
     77
     78        movl %edi,%eax  # load the command into %eax
     79
     80        cpuid   
     81        movl %eax,0(%rsi)
     82        movl %ebx,4(%rsi)
     83        movl %ecx,8(%rsi)
     84        movl %edx,12(%rsi)
     85
     86        movq %r10, %rbx
     87        ret
    7388
    7489rdtsc:
     
    7691        rdtsc
    7792        ret
    78        
     93
     94set_efer_flag:
     95        movq $0xc0000080, %rcx
     96        rdmsr
     97        btsl %edi, %eax
     98        wrmsr
     99        ret
     100       
     101read_efer_flag:
     102        movq $0xc0000080, %rcx
     103        rdmsr
     104        ret             
    79105
    80106# Push all general purpose registers on stack except %rbp, %rsp
  • arch/amd64/src/boot/boot.S

    re4a6dda r89344d85  
    3232#include <arch/mm/ptl.h>
    3333#include <arch/pm.h>
     34#include <arch/cpu.h>
    3435
    3536#define START_STACK     0x7c00 
     
    102103               
    103104        # Enable long mode
    104         movl $0xc0000080, %ecx   # EFER MSR number
     105        movl $EFER_MSR_NUM, %ecx   # EFER MSR number
    105106        rdmsr                   # Read EFER
    106         btsl $8, %eax            # Set LME=1
     107        btsl $AMD_LME_FLAG, %eax            # Set LME=1
    107108        wrmsr                   # Write EFER
    108109       
  • arch/amd64/src/dummy.s

    re4a6dda r89344d85  
    3636.global cpu_print_report
    3737.global dummy
    38 .global reset_TS_flag
    3938.global fpu_init
    4039       
     
    4544cpu_sleep:
    4645cpu_print_report:
    47 reset_TS_flag:
    4846fpu_init:
    4947       
Note: See TracChangeset for help on using the changeset viewer.