Changeset 2eb893b in mainline for boot


Ignore:
Timestamp:
2008-11-22T16:52:33Z (17 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
13964ef
Parents:
48eb7a14
Message:

IA64 correctly find CPU wakeup vector from SAL & EFI memory map support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/ia64/loader/gefi/HelenOS/hello.c

    r48eb7a14 r2eb893b  
    66#define KERNEL_LOAD_ADDRESS 0x4400000
    77
     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
    814//Link image as a data array into hello - usefull with network boot
    9 //#define IMAGE_LINKED
     15#define IMAGE_LINKED
    1016
    1117bootinfo_t *bootinfo=(bootinfo_t *)BOOTINFO_ADDRESS;
     
    178184
    179185
    180         int wakeup_intno;
    181         wakeup_intno=0xf0;
     186        UINT64 wakeup_intno;
     187                LibGetSalWakeupVector(&wakeup_intno);
    182188        Print (L"WAKEUP INTNO:%X\n", wakeup_intno);
    183         //bootinfo->wakeup_intno=wakeup_intno;
    184 
    185 
    186 
    187 
    188 
    189         {
     189
     190
     191
     192
     193
    190194            UINTN cookie;
    191195            void *p=(void *)KERNEL_LOAD_ADDRESS;
     
    193197            UINT32 desver;
    194198            EFI_STATUS status;
    195             EFI_MEMORY_DESCRIPTOR emd[1024];
    196199           
    197200                           
    198             mapsize=1024*sizeof(emd);
    199201           
    200202            status=BS->AllocatePages(AllocateAnyPages,EfiLoaderData,/*(HOSSize>>12)+1*/ 1,p);
     
    207209            }
    208210           
    209             status=BS->GetMemoryMap(&mapsize,emd,&cookie,&descsize,&desver);
    210             if(EFI_ERROR(status)){
    211                 Print(L"Error 1\n");
    212                 return EFI_SUCCESS;
     211            UINTN no_entryes;
     212            void * mds;
     213            mds=LibMemoryMap(&no_entryes,&cookie,&descsize,&desver);
     214           
     215            for(i=0;i<no_entryes;i++)
     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));
     221                Print(L"T:%02d %016llX %016llX\n",type,base,pages*EFI_PAGE_SIZE);
     222               
    213223            }
    214224            status=BS->ExitBootServices(image,cookie); 
     
    218228            }
    219229           
    220         }
     230       
    221231        int a;
    222232       
     
    228238        bootinfo->sys_freq=sys_freq;
    229239        bootinfo->freq_scale=freq_scale;
     240
     241
     242            bootinfo->memmap_items=0;
     243           
     244            for(i=0;i<no_entryes;i++)
     245            {
     246           
     247                unsigned int type=*((unsigned int *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_TYPE));
     248                unsigned long long base=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_BASE));
     249                unsigned long long pages=*((unsigned long long *)(mds+i*descsize+MEM_MAP_DESCRIPTOR_OFFSET_PAGES));
     250               
     251               
     252               
     253                switch (type)
     254                {
     255                        case EfiConventionalMemory:
     256                                bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_FREE_MEM;     
     257                                bootinfo->memmap[bootinfo->memmap_items].base=base;     
     258                                bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE;     
     259                                bootinfo->memmap_items++;
     260                                break;
     261                        case EfiMemoryMappedIO:
     262                                bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO;   
     263                                bootinfo->memmap[bootinfo->memmap_items].base=base;     
     264                                bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE;     
     265                                bootinfo->memmap_items++;
     266                                break;
     267                        case EfiMemoryMappedIOPortSpace:
     268                                bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO_PORTS;     
     269                                bootinfo->memmap[bootinfo->memmap_items].base=base;     
     270                                bootinfo->memmap[bootinfo->memmap_items].size=pages*EFI_PAGE_SIZE;     
     271                                bootinfo->memmap_items++;
     272                                break;
     273                               
     274                        default :
     275                                break;
     276                }
     277               
     278               
     279               
     280               
     281
     282            }
     283
     284
    230285       
    231286        //Run Kernel
Note: See TracChangeset for help on using the changeset viewer.