Changeset 59e4864 in mainline for boot/arch/ia64/loader/gefi/HelenOS/hello.c
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 }
Note:
See TracChangeset
for help on using the changeset viewer.