Rev 3588 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3588 | Rev 3674 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | 3 | ||
4 | #include <../../../../../../kernel/arch/ia64/include/bootinfo.h> |
4 | #include <../../../../../../kernel/arch/ia64/include/bootinfo.h> |
5 | 5 | ||
6 | #define KERNEL_LOAD_ADDRESS 0x4400000 |
6 | #define KERNEL_LOAD_ADDRESS 0x4400000 |
7 | 7 | ||
- | 8 | #define MEM_MAP_DESCRIPTOR_OFFSET_TYPE 0 |
|
- | 9 | #define MEM_MAP_DESCRIPTOR_OFFSET_BASE 8 |
|
- | 10 | #define MEM_MAP_DESCRIPTOR_OFFSET_PAGES 24 |
|
- | 11 | ||
- | 12 | ||
- | 13 | ||
8 | //Link image as a data array into hello - usefull with network boot |
14 | //Link image as a data array into hello - usefull with network boot |
9 | //#define IMAGE_LINKED |
15 | #define IMAGE_LINKED |
10 | 16 | ||
11 | bootinfo_t *bootinfo=(bootinfo_t *)BOOTINFO_ADDRESS; |
17 | bootinfo_t *bootinfo=(bootinfo_t *)BOOTINFO_ADDRESS; |
12 | 18 | ||
13 | 19 | ||
14 | #ifdef IMAGE_LINKED |
20 | #ifdef IMAGE_LINKED |
Line 175... | Line 181... | ||
175 | LibGetSalIpiBlock(&sapic); |
181 | LibGetSalIpiBlock(&sapic); |
176 | Print (L"SAPIC:%X\n", sapic); |
182 | Print (L"SAPIC:%X\n", sapic); |
177 | //bootinfo->sapic=sapic; |
183 | //bootinfo->sapic=sapic; |
178 | 184 | ||
179 | 185 | ||
180 | int wakeup_intno; |
186 | UINT64 wakeup_intno; |
181 | wakeup_intno=0xf0; |
187 | LibGetSalWakeupVector(&wakeup_intno); |
182 | Print (L"WAKEUP INTNO:%X\n", wakeup_intno); |
188 | Print (L"WAKEUP INTNO:%X\n", wakeup_intno); |
183 | //bootinfo->wakeup_intno=wakeup_intno; |
- | |
184 | 189 | ||
185 | 190 | ||
186 | 191 | ||
187 | 192 | ||
188 | 193 | ||
189 | { |
- | |
190 | UINTN cookie; |
194 | UINTN cookie; |
191 | void *p=(void *)KERNEL_LOAD_ADDRESS; |
195 | void *p=(void *)KERNEL_LOAD_ADDRESS; |
192 | UINTN mapsize,descsize; |
196 | UINTN mapsize,descsize; |
193 | UINT32 desver; |
197 | UINT32 desver; |
194 | EFI_STATUS status; |
198 | EFI_STATUS status; |
195 | EFI_MEMORY_DESCRIPTOR emd[1024]; |
- | |
196 | 199 | ||
197 | 200 | ||
198 | mapsize=1024*sizeof(emd); |
- | |
199 | 201 | ||
200 | status=BS->AllocatePages(AllocateAnyPages,EfiLoaderData,/*(HOSSize>>12)+1*/ 1,p); |
202 | status=BS->AllocatePages(AllocateAnyPages,EfiLoaderData,/*(HOSSize>>12)+1*/ 1,p); |
201 | if(EFI_ERROR(status)){ |
203 | if(EFI_ERROR(status)){ |
202 | Print(L"Error 0\n"); |
204 | Print(L"Error 0\n"); |
203 | if(status == EFI_OUT_OF_RESOURCES) Print(L"EFI_OUT_OF_RESOURCES\n"); |
205 | if(status == EFI_OUT_OF_RESOURCES) Print(L"EFI_OUT_OF_RESOURCES\n"); |
204 | if(status == EFI_INVALID_PARAMETER) Print(L"EFI_INVALID_PARAMETER\n"); |
206 | if(status == EFI_INVALID_PARAMETER) Print(L"EFI_INVALID_PARAMETER\n"); |
205 | if(status == EFI_NOT_FOUND) Print(L"EFI_NOT_FOUND\n"); |
207 | if(status == EFI_NOT_FOUND) Print(L"EFI_NOT_FOUND\n"); |
206 | return EFI_SUCCESS; |
208 | return EFI_SUCCESS; |
207 | } |
209 | } |
208 | 210 | ||
- | 211 | UINTN no_entryes; |
|
- | 212 | void * mds; |
|
209 | status=BS->GetMemoryMap(&mapsize,emd,&cookie,&descsize,&desver); |
213 | mds=LibMemoryMap(&no_entryes,&cookie,&descsize,&desver); |
- | 214 | ||
210 | if(EFI_ERROR(status)){ |
215 | for(i=0;i<no_entryes;i++) |
211 | Print(L"Error 1\n"); |
216 | { |
- | 217 | ||
- | 218 | unsigned int type=*((unsigned int *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_TYPE)); |
|
- | 219 | unsigned long long base=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_BASE)); |
|
- | 220 | unsigned long long pages=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_PAGES)); |
|
212 | return EFI_SUCCESS; |
221 | Print(L"T:%02d %016llX %016llX\n",type,base,pages*EFI_PAGE_SIZE); |
- | 222 | ||
213 | } |
223 | } |
214 | status=BS->ExitBootServices(image,cookie); |
224 | status=BS->ExitBootServices(image,cookie); |
215 | if(EFI_ERROR(status)){ |
225 | if(EFI_ERROR(status)){ |
216 | Print(L"Error 2\n"); |
226 | Print(L"Error 2\n"); |
217 | return EFI_SUCCESS; |
227 | return EFI_SUCCESS; |
218 | } |
228 | } |
219 | 229 | ||
220 | } |
230 | |
221 | int a; |
231 | int a; |
222 | 232 | ||
223 | for(a=0;a<HOSSize;a++){ |
233 | for(a=0;a<HOSSize;a++){ |
224 | ((char *)(0x4400000))[a]=HOS[a]; |
234 | ((char *)(0x4400000))[a]=HOS[a]; |
225 | } |
235 | } |
226 | bootinfo->sapic=(unsigned long *)sapic; |
236 | bootinfo->sapic=(unsigned long *)sapic; |
227 | bootinfo->wakeup_intno=wakeup_intno; |
237 | bootinfo->wakeup_intno=wakeup_intno; |
228 | bootinfo->sys_freq=sys_freq; |
238 | bootinfo->sys_freq=sys_freq; |
229 | bootinfo->freq_scale=freq_scale; |
239 | bootinfo->freq_scale=freq_scale; |
- | 240 | bootinfo->hello_configured=1; |
|
- | 241 | ||
- | 242 | ||
- | 243 | bootinfo->memmap_items=0; |
|
- | 244 | ||
- | 245 | for(i=0;i<no_entryes;i++) |
|
- | 246 | { |
|
- | 247 | ||
- | 248 | unsigned int type=*((unsigned int *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_TYPE)); |
|
- | 249 | unsigned long long base=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_BASE)); |
|
- | 250 | unsigned long long pages=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_PAGES)); |
|
- | 251 | ||
- | 252 | ||
- | 253 | ||
- | 254 | switch (type) |
|
- | 255 | { |
|
- | 256 | case EfiConventionalMemory: |
|
- | 257 | bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_FREE_MEM; |
|
- | 258 | bootinfo->memmap[bootinfo->memmap_items].base=base; |
|
- | 259 | bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE; |
|
- | 260 | bootinfo->memmap_items++; |
|
- | 261 | break; |
|
- | 262 | case EfiMemoryMappedIO: |
|
- | 263 | bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO; |
|
- | 264 | bootinfo->memmap[bootinfo->memmap_items].base=base; |
|
- | 265 | bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE; |
|
- | 266 | bootinfo->memmap_items++; |
|
- | 267 | break; |
|
- | 268 | case EfiMemoryMappedIOPortSpace: |
|
- | 269 | bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO_PORTS; |
|
- | 270 | bootinfo->memmap[bootinfo->memmap_items].base=base; |
|
- | 271 | bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE; |
|
- | 272 | bootinfo->memmap_items++; |
|
- | 273 | break; |
|
- | 274 | ||
- | 275 | default : |
|
- | 276 | break; |
|
- | 277 | } |
|
- | 278 | ||
- | 279 | ||
- | 280 | ||
- | 281 | ||
- | 282 | ||
- | 283 | } |
|
- | 284 | ||
- | 285 | ||
230 | 286 | ||
231 | //Run Kernel |
287 | //Run Kernel |
232 | asm volatile( |
288 | asm volatile( |
233 | "nop.i 0x00 ;;\n" |
289 | "nop.i 0x00 ;;\n" |
234 | "movl r15 = 0x4400000 ;;\n" |
290 | "movl r15 = 0x4400000 ;;\n" |