Changeset 59e4864 in mainline
- Timestamp:
- 2008-11-11T08:00:42Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f3c4a26
- Parents:
- a2a5529
- Files:
-
- 1 added
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/ia64/loader/Makefile
ra2a5529 r59e4864 89 89 90 90 COMPONENTS = \ 91 $(KERNELDIR)/kernel.bin 92 NOCOMPONENTS = \ 91 93 $(KERNELDIR)/kernel.bin \ 92 94 $(USPACEDIR)/srv/ns/ns \ -
boot/arch/ia64/loader/asm.S
ra2a5529 r59e4864 38 38 movl r8 = 0x4404000;; 39 39 mov b1 = r8 ;; 40 mov r1 = in0; 40 mov r1 = in0; #Save bootinfo prt 41 41 br.call.sptk.many b0 = b1;; 42 .global ofw43 ofw: -
boot/arch/ia64/loader/boot.S
ra2a5529 r59e4864 35 35 start: 36 36 37 37 38 mov ar.rsc = r0 38 39 # movl r8 = (VRN_KERNEL << VRN_SHIFT) ;; … … 58 59 br.call.sptk.many b0 = b1 59 60 61 .align 512 62 ap_start: 63 64 65 ap_loop: 66 movl r18=0x4405000;; 67 mov b1 = r18 ;; 68 br.call.sptk.many b0 = b1;; 69 70 .align 1024 71 72 .align 4096 73 .global binfo 74 binfo: 75 76 60 77 .bss #on this line is ".bss", it cannot be seen in my mcedit :-( 61 78 -
boot/arch/ia64/loader/gefi/HelenOS/Makefile
ra2a5529 r59e4864 29 29 LDSCRIPT = ../gnuefi/elf_$(ARCH)_efi.lds 30 30 LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS) 31 LOADLIBES = -lefi -lgnuefi 31 LOADLIBES = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name) 32 32 FORMAT = efi-app-$(ARCH) 33 33 … … 46 46 $(OBJDUMP) -d hello.efi > hello.disass 47 47 48 hello.so: hello.o image.o 49 $(LD) $(LDFLAGS) -Map hello.map hello.o -o hello.so $(LOADLIBES) 48 #When selected first lines or second lines, select if image is linked into hello or not - usefull for network boot 49 #hello.so: hello.o image.o 50 hello.so: hello.o 51 # $(LD) $(LDFLAGS) -Map hello.map hello.o image.o -o hello.so $(LOADLIBES) #link image inside hello 52 $(LD) $(LDFLAGS) -Map hello.map hello.o -o hello.so $(LOADLIBES) #dont link image inside hello 50 53 51 54 hello.o: hello.c 52 55 $(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c hello.c -o hello.o 53 56 54 image.o: ../../image.boot 57 image.o: ../../image.boot mkimage 55 58 $(OBJCOPY) -O binary ../../image.boot image.bin 56 $(OBJCOPY) -I binary -O elf64-ia64-little -B ia64 image.bin image.o 59 ./mkimage 60 $(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c image.c -o image.o 61 # $(OBJCOPY) -I binary -O elf64-ia64-little -B ia64 image.bin image.o 62 63 mkimage: mkimage.c 64 gcc -o mkimage mkimage.c 57 65 58 66 -
boot/arch/ia64/loader/gefi/HelenOS/hello.c
ra2a5529 r59e4864 2 2 #include <efilib.h> 3 3 4 #include <../../../../../../kernel/arch/ia64/include/bootinfo.h> 5 4 6 #define KERNEL_LOAD_ADDRESS 0x4400000 7 8 //Link image as a data array into hello - usefull with network boot 9 //#define IMAGE_LINKED 10 11 bootinfo_t *bootinfo=(bootinfo_t *)BOOTINFO_ADDRESS; 12 13 14 #ifdef IMAGE_LINKED 15 extern char HOSimage[]; 16 extern int HOSimagesize; 17 #endif 18 5 19 6 20 … … 16 30 return mem; 17 31 } 18 char HEX[256];19 20 char hexs[]="0123456789ABCDEF";21 /*22 void to_hex(unsigned long long num)23 {24 int a;25 for(a=15;a>=0;a--)26 {27 char c=num - (num & 0xfffffffffffffff0LL);28 num/=16;29 c=hexs[c];30 HEX[a]=c;31 }32 33 }34 */35 32 36 33 EFI_STATUS … … 73 70 74 71 BS->HandleProtocol(LoadedImage->DeviceHandle, &FileSystemProtocol, &Vol); 75 Vol->OpenVolume (Vol, &CurDir);76 72 77 73 char FileName[1024]; 78 74 char *OsKernelBuffer; 79 75 int i; 76 int defaultLoad; 77 int imageLoad; 80 78 UINTN Size; 81 79 … … 98 96 while(LoadOptions[i]==L' ') if(LoadOptions[i++]==0) break; 99 97 100 if(LoadOptions[i++]==0) 98 if(LoadOptions[i++]==0){ 101 99 StrCat(FileName,L"\\image.bin"); 100 defaultLoad=1; 101 } 102 102 else{ 103 103 CHAR16 buf[1024]; … … 109 109 buf[j+1]=0; 110 110 StrCat(FileName,buf); 111 } 112 113 //Print(L"%s\n",FileName); 114 115 EFI_STATUS stat; 116 stat=CurDir->Open(CurDir, &FileHandle, FileName, EFI_FILE_MODE_READ, 0); 117 if(EFI_ERROR(stat)){ 118 Print(L"Error Opening Image %s\n",FileName); 119 return 0; 111 defaultLoad=0; 112 } 113 114 imageLoad=1; 115 #ifdef IMAGE_LINKED 116 if(defaultLoad) { 117 Print(L"Using Linked Image\n"); 118 imageLoad=0; 120 119 } 121 Size = 0x00400000; 122 BS->AllocatePool(EfiLoaderData, Size, &OsKernelBuffer); 123 FileHandle->Read(FileHandle, &Size, OsKernelBuffer); 124 FileHandle->Close(FileHandle); 125 126 if(Size<1) return 0; 127 128 129 char * HOS = OsKernelBuffer; 120 #endif 121 122 123 char * HOS; 124 if(imageLoad) 125 { 126 Size = 0x00400000; 127 128 Vol->OpenVolume (Vol, &CurDir); 129 130 EFI_STATUS stat; 131 stat=CurDir->Open(CurDir, &FileHandle, FileName, EFI_FILE_MODE_READ, 0); 132 if(EFI_ERROR(stat)){ 133 Print(L"Error Opening Image %s\n",FileName); 134 return 0; 135 } 136 BS->AllocatePool(EfiLoaderData, Size, &OsKernelBuffer); 137 FileHandle->Read(FileHandle, &Size, OsKernelBuffer); 138 FileHandle->Close(FileHandle); 139 HOS = OsKernelBuffer; 140 if(Size<1) return 0; 141 142 } 143 #ifdef IMAGE_LINKED 144 else { 145 HOS = HOSimage; 146 Size = HOSimagesize; 147 Print(L"Image start %llX\n",(long long)HOS); 148 Print(L"Image size %llX\n",(long long)Size); 149 Print(L"Image &size %llX\n",(long long)&Size); 150 } 151 #endif 130 152 int HOSSize = Size; 153 154 155 rArg rSAL; 156 //Setup AP's wake up address 157 158 LibSalProc(0x01000000,2,0x4400200,0,0,0,0,0,&rSAL); 159 160 161 UINT64 sapic; 162 LibGetSalIpiBlock(&sapic); 163 Print (L"SAPIC:%X\n", sapic); 164 bootinfo->sapic=sapic; 165 166 167 int wakeup_intno; 168 wakeup_intno=0xf0; 169 Print (L"WAKEUP INTNO:%X\n", wakeup_intno); 170 bootinfo->wakeup_intno=wakeup_intno; 171 172 173 131 174 132 175 … … 168 211 ((char *)(0x4400000))[a]=HOS[a]; 169 212 } 213 bootinfo->sapic=(unsigned long *)sapic; 214 bootinfo->wakeup_intno=wakeup_intno; 170 215 171 216 //Run Kernel … … 178 223 179 224 180 while(1){ 181 ((volatile int *)(0x80000000000b8000))[0]++; 182 } 225 //Not reached 183 226 return EFI_SUCCESS; 184 227 } -
boot/arch/ia64/loader/gefi/apps/Makefile
ra2a5529 r59e4864 29 29 LDSCRIPT = ../gnuefi/elf_$(ARCH)_efi.lds 30 30 LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS) 31 LOADLIBES = -lefi -lgnuefi 31 LOADLIBES = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name) 32 32 FORMAT = efi-app-$(ARCH) 33 33 -
boot/arch/ia64/loader/main.c
ra2a5529 r59e4864 35 35 #include <balloc.h> 36 36 37 bootinfo_t bootinfo;37 extern bootinfo_t binfo; 38 38 component_t components[COMPONENTS]; 39 39 … … 70 70 71 71 72 bootinfo_t *bootinfo=&binfo; 73 72 74 //for(ii=0;ii<KERNEL_SIZE;ii++) ((char *)(0x100000))[ii] = ((char *)KERNEL_START)[ii+1]; 73 75 … … 93 95 94 96 95 bootinfo .taskmap.count = 0;97 bootinfo->taskmap.count = 0; 96 98 for (i = 0; i < COMPONENTS; i++) { 97 99 98 100 if (i > 0) { 99 bootinfo .taskmap.tasks[bootinfo.taskmap.count].addr = components[i].start;100 bootinfo .taskmap.tasks[bootinfo.taskmap.count].size = components[i].size;101 bootinfo .taskmap.count++;101 bootinfo->taskmap.tasks[bootinfo->taskmap.count].addr = components[i].start; 102 bootinfo->taskmap.tasks[bootinfo->taskmap.count].size = components[i].size; 103 bootinfo->taskmap.count++; 102 104 } 103 105 } 104 106 105 106 jump_to_kernel(&bootinfo); 107 jump_to_kernel(bootinfo); 107 108 108 109 -
boot/arch/ia64/loader/main.h
ra2a5529 r59e4864 30 30 #define BOOT_ia64_MAIN_H_ 31 31 32 #include <ofw.h>33 #include <ofw_tree.h>34 32 #include <types.h> 33 #include <../../../../kernel/arch/ia64/include/bootinfo.h> 35 34 36 35 37 36 #define CONFIG_INIT_TASKS 32 38 37 39 typedef struct {40 void *addr;41 size_t size;42 } init_task_t;43 44 typedef struct {45 count_t count;46 init_task_t tasks[CONFIG_INIT_TASKS];47 } init_t;48 38 49 typedef struct {50 init_t taskmap;51 } bootinfo_t;52 53 extern bootinfo_t bootinfo;54 39 55 40 extern void start(void); -
kernel/arch/ia64/Makefile.inc
ra2a5529 r59e4864 83 83 arch/$(ARCH)/src/proc/scheduler.c \ 84 84 arch/$(ARCH)/src/ddi/ddi.c \ 85 arch/$(ARCH)/src/smp/smp.c \ 85 86 arch/$(ARCH)/src/drivers/it.c 86 87 … … 99 100 endif 100 101 102 ifeq ($(CONFIG_SMP),y) 103 DEFS += -DCONFIG_SMP 104 endif 105 -
kernel/arch/ia64/include/atomic.h
ra2a5529 r59e4864 52 52 } 53 53 54 55 static inline uint64_t test_and_set(atomic_t *val) { 56 uint64_t v; 57 58 asm volatile ( 59 "movl %0=0x01;;\n" 60 "xchg8 %0=%1,%0;;\n" 61 : "=r" (v),"+m" (val->count) 62 ); 63 64 return v; 65 } 66 67 54 68 static inline void atomic_inc(atomic_t *val) { atomic_add(val, 1); } 55 69 static inline void atomic_dec(atomic_t *val) { atomic_add(val, -1); } -
kernel/arch/ia64/include/bootinfo.h
ra2a5529 r59e4864 30 30 #define KERN_ia64_BOOTINFO_H_ 31 31 32 32 #define BOOTINFO_ADDRESS 0x4401000 33 33 34 34 #define CONFIG_INIT_TASKS 32 … … 47 47 typedef struct { 48 48 binit_t taskmap; 49 50 unsigned long * sapic; 51 unsigned int wakeup_intno; 52 49 53 } bootinfo_t; 50 54 -
kernel/arch/ia64/include/cpu.h
ra2a5529 r59e4864 39 39 #include <arch/register.h> 40 40 #include <arch/asm.h> 41 #include <arch/bootinfo.h> 41 42 42 43 #define FAMILY_ITANIUM 0x7 … … 64 65 } 65 66 67 68 #define CR64_ID_SHIFT 24 69 #define CR64_ID_MASK 0xff000000 70 #define CR64_EID_SHIFT 16 71 #define CR64_EID_MASK 0xff0000 72 73 static inline int ia64_get_cpu_id(void) 74 { 75 uint64_t cr64=cr64_read(); 76 return ((CR64_ID_MASK)&cr64)>>CR64_ID_SHIFT; 77 } 78 79 static inline int ia64_get_cpu_eid(void) 80 { 81 uint64_t cr64=cr64_read(); 82 return ((CR64_EID_MASK)&cr64)>>CR64_EID_SHIFT; 83 } 84 85 86 87 static inline void ipi_send_ipi(int id,int eid,int intno) 88 { 89 (bootinfo->sapic)[2*(id*256+eid)]=intno; 90 } 91 92 93 66 94 #endif 67 95 -
kernel/arch/ia64/include/mm/page.h
ra2a5529 r59e4864 47 47 #define KERNEL_PAGE_WIDTH 28 /* 256M */ 48 48 #define IO_PAGE_WIDTH 26 /* 64M */ 49 #define FW_PAGE_WIDTH 28 /* 256M */ 50 51 /** Staticly mapped IO spaces */ 52 53 /* Firmware area (bellow 4GB in phys mem) */ 54 #define FW_OFFSET 0x00000000F0000000 55 /* Legacy IO space */ 56 #define IO_OFFSET 0x0001000000000000 57 /* Videoram - now mapped to 0 as VGA text mode vram on 0xb8000*/ 58 #define VIO_OFFSET 0x0002000000000000 59 60 49 61 50 62 -
kernel/arch/ia64/src/drivers/it.c
ra2a5529 r59e4864 56 56 { 57 57 cr_itv_t itv; 58 59 irq_initialize(&it_irq); 60 it_irq.inr = INTERRUPT_TIMER; 61 it_irq.devno = device_assign_devno(); 62 it_irq.claim = it_claim; 63 it_irq.handler = it_interrupt; 64 irq_register(&it_irq); 65 58 59 if(config.cpu_active==1) 60 { 61 irq_initialize(&it_irq); 62 it_irq.inr = INTERRUPT_TIMER; 63 it_irq.devno = device_assign_devno(); 64 it_irq.claim = it_claim; 65 it_irq.handler = it_interrupt; 66 irq_register(&it_irq); 67 } 68 66 69 /* initialize Interval Timer external interrupt vector */ 67 70 itv.value = itv_read(); -
kernel/arch/ia64/src/ia64.c
ra2a5529 r59e4864 55 55 #include <arch/bootinfo.h> 56 56 #include <genarch/kbd/i8042.h> 57 #include <genarch/kbd/ns16550.h> 58 #include <smp/smp.h> 59 #include <smp/ipi.h> 60 #include <arch/atomic.h> 61 #include <panic.h> 62 #include <print.h> 63 64 /*NS16550 as a COM 1*/ 65 #define NS16550_IRQ 4 66 #define NS16550_PORT 0x3f8 57 67 58 68 bootinfo_t *bootinfo; … … 103 113 void arch_post_mm_init(void) 104 114 { 105 irq_init(INR_COUNT, INR_COUNT); 106 #ifdef SKI 107 ski_init_console(); 115 if(config.cpu_active==1) 116 { 117 irq_init(INR_COUNT, INR_COUNT); 118 #ifdef SKI 119 ski_init_console(); 108 120 #else 109 ega_init();121 ega_init(); 110 122 #endif 123 } 111 124 it_init(); 112 125 } … … 128 141 while (1) { 129 142 i8042_poll(); 143 #ifdef CONFIG_NS16550 144 ns16550_poll(); 145 #endif 130 146 thread_usleep(POLL_INTERVAL); 131 147 } … … 136 152 { 137 153 138 if (config.cpu_active == 1){154 { 139 155 /* 140 156 * Create thread that polls keyboard. … … 154 170 i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE); 155 171 172 #ifdef CONFIG_NS16550 173 ns16550_init(kbd, NS16550_IRQ, NS16550_PORT); // as a COM 1 174 #else 175 #endif 156 176 thread_t *t; 157 177 t = thread_create(i8042_kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); … … 164 184 } 165 185 } 186 166 187 167 188 /** Enter userspace and never return. */ … … 225 246 void arch_reboot(void) 226 247 { 227 // TODO248 outb(0x64,0xfe); 228 249 while (1); 229 250 } -
kernel/arch/ia64/src/mm/frame.c
ra2a5529 r59e4864 43 43 */ 44 44 #define MEMORY_SIZE (64 * 1024 * 1024) 45 #define MEMORY_BASE (64 * 1024 * 1024) 45 #define MEMORY_BASE (0 * 64 * 1024 * 1024) 46 47 #define ONE_TO_ONE_MAPPING_SIZE (256*1048576) // Mapped at start 46 48 47 49 #define ROM_BASE 0xa0000 //For ski 48 50 #define ROM_SIZE (384 * 1024) //For ski 49 51 void poke_char(int x,int y,char ch, char c); 52 53 uintptr_t last_frame; 54 50 55 void frame_arch_init(void) 51 56 { 52 zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0); 57 58 if(config.cpu_active==1) 59 { 60 zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0); 53 61 54 /* 55 * Blacklist ROM regions. 56 */ 57 frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE)); 58 62 /* 63 * Blacklist ROM regions. 64 */ 65 //frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE)); 66 67 frame_mark_unavailable(ADDR2PFN(0), SIZE2FRAMES(1048576)); 68 last_frame=SIZE2FRAMES((VRN_KERNEL<<VRN_SHIFT)+ONE_TO_ONE_MAPPING_SIZE); 69 } 59 70 } 60 71 -
kernel/arch/ia64/src/mm/page.c
ra2a5529 r59e4864 48 48 #include <arch/barrier.h> 49 49 #include <memstr.h> 50 #include <align.h> 50 51 51 52 static void set_environment(void); … … 263 264 } 264 265 266 extern uintptr_t last_frame; 267 268 269 uintptr_t hw_map(uintptr_t physaddr, size_t size) 270 { 271 if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) 272 panic("Unable to map physical memory %p (%d bytes)", physaddr, size) 273 274 uintptr_t virtaddr = PA2KA(last_frame); 275 pfn_t i; 276 for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) { 277 uintptr_t addr = PFN2ADDR(i); 278 page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr, PAGE_NOT_CACHEABLE | PAGE_WRITE); 279 } 280 281 last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE); 282 283 return virtaddr; 284 } 285 286 287 265 288 /** @} 266 289 */ -
kernel/arch/ia64/src/start.S
ra2a5529 r59e4864 40 40 #define KERNEL_TRANSLATION_VIO 0x0010000000000671 41 41 #define KERNEL_TRANSLATION_IO 0x00100FFFFC000671 42 #define VIO_OFFSET 0x0002000000000000 43 44 #define IO_OFFSET 0x0001000000000000 42 #define KERNEL_TRANSLATION_FW 0x00100000F0000671 45 43 46 44 … … 53 51 kernel_image_start: 54 52 .auto 53 54 #identifi self(CPU) in OS structures by ID / EID 55 mov r9=cr64 56 mov r10=1 57 movl r12=0xffffffff 58 movl r8=cpu_by_id_eid_list 59 and r8=r8,r12 60 shr r9=r9,16 61 add r8=r8,r9 62 st1 [r8]=r10 63 64 55 65 56 66 mov psr.l = r0 … … 113 123 movl r10 = (KERNEL_TRANSLATION_IO) 114 124 itr.d dtr[r7] = r10 125 126 127 #setup mapping for fimware arrea (also SAPIC) 128 mov r11 = cr.itir ;; 129 movl r10 = ~0xfc;; 130 and r10 =r10 , r11 ;; 131 movl r11 = (FW_PAGE_WIDTH << PS_SHIFT);; 132 or r10 =r10 , r11 ;; 133 mov cr.itir = r10;; 134 135 136 movl r7 = 3 137 movl r8 = (VRN_KERNEL << VRN_SHIFT) | FW_OFFSET 138 mov cr.ifa = r8 139 movl r10 = (KERNEL_TRANSLATION_FW) 140 itr.d dtr[r7] = r10 141 115 142 116 143 … … 143 170 # switch to register bank 1 144 171 bsw.1 172 173 #Am'I BSP or AP 174 movl r20=bsp_started;; 175 ld8 r20=[r20];; 176 cmp.eq p3,p2=r20,r0;; 177 145 178 146 179 # initialize register stack … … 161 194 162 195 /* 163 * Initialize hardcoded_* variables. 196 * Initialize hardcoded_* variables. Do only BSP 164 197 */ 165 movl r14 = _hardcoded_ktext_size166 movl r15 = _hardcoded_kdata_size167 movl r16 = _hardcoded_load_address ;;168 addl r17 = @gprel(hardcoded_ktext_size), gp169 addl r18 = @gprel(hardcoded_kdata_size), gp170 addl r19 = @gprel(hardcoded_load_address), gp171 addl r21 = @gprel(bootinfo), gp198 (p3) movl r14 = _hardcoded_ktext_size 199 (p3) movl r15 = _hardcoded_kdata_size 200 (p3) movl r16 = _hardcoded_load_address ;; 201 (p3) addl r17 = @gprel(hardcoded_ktext_size), gp 202 (p3) addl r18 = @gprel(hardcoded_kdata_size), gp 203 (p3) addl r19 = @gprel(hardcoded_load_address), gp 204 (p3) addl r21 = @gprel(bootinfo), gp 172 205 ;; 173 st8 [r17] = r14174 st8 [r18] = r15175 st8 [r19] = r16176 st8 [r21] = r20206 (p3) st8 [r17] = r14 207 (p3) st8 [r18] = r15 208 (p3) st8 [r19] = r16 209 (p3) st8 [r21] = r20 177 210 178 211 ssm (1 << 19) ;; /* Disable f32 - f127 */ … … 180 213 srlz.d ;; 181 214 215 (p2) movl r18 = main_ap ;; 216 (p2) mov b1 = r18 ;; 217 (p2) br.call.sptk.many b0 = b1 218 219 #Mark that BSP is on 220 mov r20=1;; 221 movl r21=bsp_started;; 222 st8 [r21]=r20;; 223 224 182 225 br.call.sptk.many b0 = arch_pre_main 183 226 … … 189 232 0: 190 233 br 0b 234 .align 4096 235 236 kernel_image_ap_start: 237 .auto 238 #identifi self(CPU) in OS structures by ID / EID 239 mov r9=cr64 240 mov r10=1 241 movl r12=0xffffffff 242 movl r8=cpu_by_id_eid_list 243 and r8=r8,r12 244 shr r9=r9,16 245 add r8=r8,r9 246 st1 [r8]=r10 247 248 #wait for wakeup sychro signal (#3 in cpu_by_id_eid_list) 249 kernel_image_ap_start_loop: 250 movl r11=kernel_image_ap_start_loop 251 and r11=r11,r12 252 mov b1 = r11 253 254 ld1 r20=[r8];; 255 movl r21=3;; 256 cmp.eq p2,p3=r20,r21;; 257 (p3)br.call.sptk.many b0 = b1 258 259 movl r11=kernel_image_start 260 and r11=r11,r12 261 mov b1 = r11 262 br.call.sptk.many b0 = b1 263 264 265 .align 16 266 .global bsp_started 267 bsp_started: 268 .space 8 269 270 271 .align 4096 272 .global cpu_by_id_eid_list 273 cpu_by_id_eid_list: 274 .space 65536 275 276 -
kernel/generic/include/synch/spinlock.h
ra2a5529 r59e4864 37 37 38 38 #include <arch/types.h> 39 #include <arch/barrier.h> 39 40 #include <preemption.h> 40 41 #include <atomic.h> -
kernel/generic/src/mm/tlb.c
ra2a5529 r59e4864 135 135 void tlb_shootdown_ipi_send(void) 136 136 { 137 #ifndef ia64 137 138 ipi_broadcast(VECTOR_TLB_SHOOTDOWN_IPI); 139 #endif 138 140 } 139 141 -
kernel/generic/src/proc/thread.c
ra2a5529 r59e4864 296 296 if (!t) 297 297 return NULL; 298 299 298 /* Not needed, but good for debugging */ 300 299 memsetb(t->kstack, THREAD_STACK_SIZE * 1 << STACK_FRAMES, 0);
Note:
See TracChangeset
for help on using the changeset viewer.