Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 105 → Rev 106

/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;
}
 
/SPARTAN/trunk/arch/ia32/_link.ld
12,31 → 12,31
ENTRY(kernel_image_start)
 
SECTIONS {
.unmapped 0x8000: AT (0x8000) {
unmapped_ktext_start = .;
*(K_TEXT_START);
unmapped_ktext_end = .;
unmapped_kdata_start = .;
*(K_DATA_START);
unmapped_kdata_end = .;
}
.mapped (0x80000000+SIZEOF(.unmapped)+0x8000) : AT (0x8000+SIZEOF(.unmapped)) {
ktext_start = .;
*(.text);
ktext_end = .;
.unmapped 0x8000: AT (0x8000) {
unmapped_ktext_start = .;
*(K_TEXT_START);
unmapped_ktext_end = .;
unmapped_kdata_start = .;
*(K_DATA_START);
unmapped_kdata_end = .;
}
 
kdata_start = .;
*(.data); /* initialized data */
*(.rodata*); /* string literals */
*(COMMON); /* global variables */
*(.bss); /* uninitialized static variables */
*(K_DATA_END);
kdata_end = .;
}
.mapped (0x80000000+SIZEOF(.unmapped)+0x8000) : AT (0x8000+SIZEOF(.unmapped)) {
ktext_start = .;
*(.text);
ktext_end = .;
 
_hardcoded_ktext_size = ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start);
_hardcoded_kdata_size = kdata_end - kdata_start + (unmapped_kdata_end - unmapped_kdata_start);
_hardcoded_load_address = 0x80008000;
kdata_start = .;
*(.data); /* initialized data */
*(.rodata*); /* string literals */
*(COMMON); /* global variables */
*(.bss); /* uninitialized static variables */
*(K_DATA_END);
kdata_end = .;
}
 
_hardcoded_ktext_size = ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start);
_hardcoded_kdata_size = kdata_end - kdata_start + (unmapped_kdata_end - unmapped_kdata_start);
_hardcoded_load_address = 0x80008000;
 
}