Changeset 379d73f3 in mainline
- Timestamp:
- 2005-08-30T22:11:45Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c5ae095
- Parents:
- b524f816
- Files:
-
- 1 added
- 6 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/Makefile.inc
rb524f816 r379d73f3 16 16 arch_sources = arch/dummy.s \ 17 17 arch/fpu_context.c \ 18 arch/putchar.c \19 18 arch/boot/boot.S \ 20 19 arch/boot/memmap.S \ 21 20 arch/pm.c \ 22 arch/context.S 21 arch/context.S \ 22 arch/drivers/ega.c \ 23 arch/supplib.c -
arch/amd64/include/asm.h
rb524f816 r379d73f3 33 33 #include <config.h> 34 34 35 35 36 void asm_delay_loop(__u32 t); 36 37 … … 43 44 static inline void cpu_sleep(void) { __asm__("hlt"); }; 44 45 46 47 static inline __u8 inb(__u16 port) 48 { 49 __u8 out; 50 51 asm ( 52 "mov %0, %%dx;" 53 "inb %%dx,%%al;" 54 "mov %%al, %1;" 55 :"=m"(out) 56 :"m"(port) 57 :"dx","al" 58 ); 59 return out; 60 } 61 62 static inline __u8 outb(__u16 port,__u8 b) 63 { 64 asm ( 65 "mov %0,%%dx;" 66 "mov %1,%%al;" 67 "outb %%al,%%dx;" 68 : 69 :"m"( port), "m" (b) 70 :"dx","al" 71 ); 72 } 73 74 /** Set priority level low 75 * 76 * Enable interrupts and return previous 77 * value of EFLAGS. 78 */ 79 static inline pri_t cpu_priority_low(void) { 80 pri_t v; 81 __asm__ volatile ( 82 "pushfq\n" 83 "popq %0\n" 84 "sti\n" 85 : "=r" (v) 86 ); 87 return v; 88 } 89 90 /** Set priority level high 91 * 92 * Disable interrupts and return previous 93 * value of EFLAGS. 94 */ 95 static inline pri_t cpu_priority_high(void) { 96 pri_t v; 97 __asm__ volatile ( 98 "pushfq\n" 99 "popq %0\n" 100 "cli\n" 101 : "=r" (v) 102 ); 103 return v; 104 } 105 106 /** Restore priority level 107 * 108 * Restore EFLAGS. 109 */ 110 static inline void cpu_priority_restore(pri_t pri) { 111 __asm__ volatile ( 112 "pushq %0\n" 113 "popfq\n" 114 : : "r" (pri) 115 ); 116 } 117 118 45 119 #endif -
arch/amd64/src/dummy.s
rb524f816 r379d73f3 29 29 .text 30 30 31 .global memcopy32 .global memcpy33 31 .global cpu_priority_high 34 32 .global cpu_priority_low 35 33 .global cpu_priority_read 36 34 .global cpu_priority_restore 37 .global memsetb38 35 .global userspace 39 36 .global before_thread_runs_arch … … 55 52 .global asm_delay_loop 56 53 57 memcpy:58 memcopy:59 54 cpu_priority_high: 60 55 cpu_priority_low: 61 56 cpu_priority_restore: 62 57 cpu_priority_read: 63 memsetb:64 58 asm_delay_loop: 65 59 before_thread_runs_arch: -
arch/amd64/src/supplib.c
rb524f816 r379d73f3 1 1 /* 2 * Copyright (C) 2005 Martin Decky2 * Copyright (C) 2005 Ondrej Palkovsky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 #include <putchar.h> 30 #include <arch/types.h> 29 #include <memstr.h> 31 30 31 /* TODO: Rewrite to assembler */ 32 32 33 void putchar(const char ch)33 char *memcpy(void *dst, const void *src, size_t cnt) 34 34 { 35 _memcopy(dst, src, cnt); 35 36 } 37 38 char *memcopy(void * dst, const void *src, size_t cnt) 39 { 40 _memcopy(dst, src, cnt); 41 } 42 43 void memsetw(__address dst, size_t cnt, __u16 x) 44 { 45 _memsetw(dst, cnt, x); 46 } 47 48 void memsetb(__address dst, size_t cnt, __u8 x) 49 { 50 _memsetb(dst, cnt, x); 51 } 52 -
include/memstr.h
rb524f816 r379d73f3 33 33 #include <arch/types.h> 34 34 35 extern char *memcpy(void * dst, const void *src, size_t cnt); 35 36 extern char *memcopy(void * dst, const void *src, size_t cnt); 36 37 … … 45 46 extern char *_memcopy(void *dst, const void *src, size_t cnt); 46 47 extern void _memsetb(__address dst, size_t cnt, __u8 x); 48 extern void _memsetw(__address dst, size_t cnt, __u16 x); 47 49 48 50 #endif -
src/build.amd64
rb524f816 r379d73f3 2 2 3 3 set -e 4 # Generate context_offset.h 5 (cd ../arch/amd64/src;make gencontext;./gencontext) 6 # Create links to ia32 architecture 7 ln -sf ../../../arch/ia32/src/drivers ../arch/amd64/src/ 8 ln -sf ../../../arch/ia32/include/ega.h ../arch/amd64/include/ 4 9 5 (cd ../arch/amd64/src;make gencontext;./gencontext)6 10 make all ARCH=amd64 -
src/lib/memstr.c
rb524f816 r379d73f3 71 71 p[i] = x; 72 72 } 73 74 /** Fill block of memory 75 * 76 * Fill cnt words at dst address with the value x. 77 * The filling is done word-by-word. 78 * 79 * @param dst Origin address to fill. 80 * @param cnt Number of words to fill. 81 * @param x Value to fill. 82 * 83 */ 84 void _memsetw(__address dst, size_t cnt, __u16 x) 85 { 86 int i; 87 __u8 *p = (__u8 *) dst; 88 89 for(i=0; i<cnt; i++) 90 p[i] = x; 91 }
Note:
See TracChangeset
for help on using the changeset viewer.