/SPARTAN/trunk/arch/ia64/src/start.S |
---|
27,8 → 27,6 |
# |
.section K_TEXT_START |
.global k_text_start |
k_text_start: |
.global kernel_image_start |
49,40 → 47,25 |
add r12 = - 16, r12 /* allocate a scratch area on the stack */ |
# initialize gp (Global Pointer) register |
movl r1=k_text_start |
movl r1 = _hardcoded_load_address |
;; |
# |
# Initialize hardcoded_* variables. |
# (IA-64 port doesn't get these values from linker.) |
# |
movl r8 = k_text_start ;; |
movl r9 = k_text_end ;; |
sub r8 = r9, r8 |
addl r10 = @gprel(hardcoded_ktext_size), gp;; |
st4 [r10] = r8 ;; |
movl r14 = _hardcoded_ktext_size |
movl r15 = _hardcoded_kdata_size |
movl r16 = _hardcoded_load_address |
addl r17 = @gprel(hardcoded_ktext_size), gp |
addl r18 = @gprel(hardcoded_kdata_size), gp |
addl r19 = @gprel(hardcoded_load_address), gp |
;; |
st4 [r17] = r14 |
st4 [r18] = r15 |
st8 [r19] = r16 |
movl r8 = k_data_start ;; |
movl r9 = k_data_end ;; |
sub r8 = r9, r8 |
addl r10 = @gprel(hardcoded_kdata_size), gp;; |
st4 [r10] = r8 ;; |
addl r10 = @gprel(hardcoded_load_address), gp;; |
st8 [r10] = r1 |
br.call.sptk.many b0=main_bsp |
0: |
br 0b |
.section K_TEXT_END |
.global k_text_end |
k_text_end: |
.section K_DATA_START |
.global k_data_start |
k_data_start: |
.section K_DATA_END |
.global k_data_end |
k_data_end: |
/SPARTAN/trunk/arch/ia64/_link.ld |
---|
12,7 → 12,8 |
SECTIONS { |
.image 0x0000000000001000: AT (0x0000000000001000) { |
*(K_TEXT_START) |
ktext_start = .; |
*(K_TEXT_START); |
*(.text .stub .text.* .gnu.linkonce.t.*) |
*(.interp) |
*(.hash) |
50,7 → 51,8 |
*(.init) |
*(.plt) |
*(.fini) |
*(K_TEXT_END) |
ktext_end = .; |
kdata_start = .; |
*(K_DATA_START) |
*(.rodata .rodata.* .gnu.linkonce.r.*) |
*(.rodata1) |
80,8 → 82,11 |
*(.dynbss) |
*(.bss .bss.* .gnu.linkonce.b.*) |
*(COMMON); |
*(K_DATA_END) |
kdata_end = .; |
} |
_hardcoded_ktext_size = ktext_end - ktext_start; |
_hardcoded_kdata_size = kdata_end - kdata_start; |
_hardcoded_load_address = 0x0000000000001000; |
} |
/SPARTAN/trunk/arch/ia32/include/mm/vm.h |
---|
37,7 → 37,7 |
#define USER_ADDRESS_SPACE_END_ARCH (__address) 0x7fffffff |
#define UTEXT_ADDRESS_ARCH 0x00001000 |
#define USTACK_ADDRESS_ARCH (0x7fffffffUL-(PAGE_SIZE-1)) |
#define USTACK_ADDRESS_ARCH (0x7fffffff-(PAGE_SIZE-1)) |
#define UDATA_ADDRESS_ARCH 0x21000000 |
#endif |
/SPARTAN/trunk/arch/ia32/src/asm.s |
---|
444,7 → 444,7 |
.long utext_end - utext |
.section K_DATA_START |
#.section K_DATA_START |
.global interrupt_handler_size |
interrupt_handler_size: .long (h_end-h_start)/IDT_ITEMS |
/SPARTAN/trunk/arch/ia32/src/mm/page.c |
---|
35,6 → 35,7 |
#include <arch/interrupt.h> |
#include <arch/asm.h> |
#include <synch/spinlock.h> |
#include <debug.h> |
/* |
* Note. |
53,7 → 54,7 |
__u32 i; |
if (config.cpu_active == 1) { |
dba = KA2PA(frame_alloc(FRAME_KA | FRAME_PANIC)); |
dba = frame_alloc(FRAME_KA | FRAME_PANIC); |
memsetb(dba, PAGE_SIZE, 0); |
bootstrap_dba = dba; |
68,7 → 69,7 |
} |
trap_register(14, page_fault); |
cpu_write_dba(dba); |
cpu_write_dba(KA2PA(dba)); |
} |
else { |
81,7 → 82,7 |
dba = frame_alloc(FRAME_KA | FRAME_PANIC); |
memcopy(bootstrap_dba, dba, PAGE_SIZE); |
cpu_write_dba(dba); |
cpu_write_dba(KA2PA(dba)); |
} |
paging_on(); |
121,16 → 122,16 |
* There is currently no page table for this address. Allocate |
* frame for the page table and clean it. |
*/ |
newpt = KA2PA(frame_alloc(FRAME_KA)); |
pd[pde].frame_address = newpt >> 12; |
newpt = frame_alloc(FRAME_KA); |
pd[pde].frame_address = KA2PA(newpt) >> 12; |
memsetb(newpt, PAGE_SIZE, 0); |
pd[pde].present = 1; |
pd[pde].uaccessible = 1; |
} |
if (copy) { |
newpt = KA2PA(frame_alloc(FRAME_KA)); |
newpt = frame_alloc(FRAME_KA); |
memcopy(pd[pde].frame_address << 12, newpt, PAGE_SIZE); |
pd[pde].frame_address = newpt >> 12; |
pd[pde].frame_address = KA2PA(newpt) >> 12; |
} |
pt = (struct page_specifier *) (pd[pde].frame_address << 12); |
/SPARTAN/trunk/arch/ia32/src/userspace.c |
---|
52,7 → 52,7 |
"pushl %3\n" |
"pushl %4\n" |
"iret" |
: : "i" (selector(UDATA_DES) | PL_USER), "i" (USTACK_ADDRESS+THREAD_STACK_SIZE-1000), "r" (pri), "i" (selector(UTEXT_DES) | PL_USER), "i" (UTEXT_ADDRESS)); |
: : "i" (selector(UDATA_DES) | PL_USER), "i" (USTACK_ADDRESS+(THREAD_STACK_SIZE-1)), "r" (pri), "i" (selector(UTEXT_DES) | PL_USER), "i" (UTEXT_ADDRESS)); |
/* Unreachable */ |
for(;;); |
/SPARTAN/trunk/arch/ia32/src/drivers/ega.c |
---|
47,7 → 47,7 |
{ |
__u8 hi, lo; |
map_page_to_frame(VIDEORAM, VIDEORAM, PAGE_NOT_CACHEABLE, 0); |
map_page_to_frame(PA2KA(VIDEORAM), VIDEORAM, PAGE_NOT_CACHEABLE, 0); |
outb(0x3d4,0xe); |
hi = inb(0x3d5); |
outb(0x3d4,0xf); |
58,7 → 58,7 |
void ega_display_char(char ch) |
{ |
__u8 *vram = (__u8 *) VIDEORAM; |
__u8 *vram = (__u8 *) PA2KA(VIDEORAM); |
vram[ega_cursor*2] = ch; |
} |
71,8 → 71,8 |
if (ega_cursor < SCREEN) |
return; |
memcopy(VIDEORAM + ROW*2, VIDEORAM, (SCREEN - ROW)*2); |
memsetw(VIDEORAM + (SCREEN - ROW)*2, ROW, 0x0720); |
memcopy(PA2KA(VIDEORAM) + ROW*2, PA2KA(VIDEORAM), (SCREEN - ROW)*2); |
memsetw(PA2KA(VIDEORAM) + (SCREEN - ROW)*2, ROW, 0x0720); |
ega_cursor = ega_cursor - ROW; |
} |