Changeset 2

Show
Ignore:
Timestamp:
02/20/08 19:17:43 (4 years ago)
Author:
mtw07
Message:

Document i386 physical memory code. Cleanup. Remove glib for now.

Location:
Whitix/trunk
Files:
1 removed
6 modified

Legend:

Unmodified
Added
Removed
  • Whitix/trunk/Makefile

    r1 r2  
    99 
    1010#Change to N to produce a smaller kernel if debug functionality is not required 
    11 CONFIG_ALLSYMS = N 
     11CONFIG_ALLSYMS = Y 
    1212 
    1313#Make sure all makefiles can see everything 
  • Whitix/trunk/arch/i386/mm/init.c

    r1 r2  
    2121#include <console.h> 
    2222 
    23 /* All 3 methods are formatted into this */ 
    24 struct E820Entry entries[32]; 
    25 int entryCount=0; 
    26  
    27 /* Function needs cleanup */ 
    28  
    29 static int CleanupE820() 
    30 { 
    31         /* 0x504 contains number of entries, and 0x508 is the array of E820 entries */ 
    32         int numEntries=*(int*)0x504; 
    33         struct E820Entry* memEntries=(struct E820Entry*)0x508; 
     23/*** GLOBALS ***/ 
     24 
     25struct E820Entry entries[32]; /* All three methods copy data into this entry array ... */ 
     26int entryCount=0;             /* ... and set this count variable */ 
     27 
     28/*********************************************************************** 
     29 * 
     30 * FUNCTION:    PrintE820 
     31 * 
     32 * DESCRIPTION: Print the list of E820Entrys. Called by ReadE820. 
     33 * 
     34 * PARAMETERS:  None. 
     35 * 
     36 * RETURNS:     None. 
     37 * 
     38 ***********************************************************************/ 
     39 
     40static void PrintE820() 
     41{ 
     42        struct E820Entry* currEntry; 
    3443        int i; 
    3544 
    36         struct ChangeMember 
    37         { 
    38                 struct E820Entry* pBios; 
    39                 QWORD addr; 
    40         }; 
    41  
    42         struct ChangeMember changePointList[64]; 
    43         struct ChangeMember* changePoint[64]; 
    44         struct E820Entry* overlapList[32]; 
    45         int changeIndex=0; 
    46         int changeNum; 
    47         int stillChanging; 
    48  
    49         if (numEntries <= 1) 
    50                 return 0; /* No need to reshuffle if there's only one */ 
    51  
    52         /* Debug code */ 
    53         for (i=0; i<numEntries; i++) 
    54         { 
    55                 if (memEntries[i].base + memEntries[i].length < memEntries[i].base) 
    56                 { 
    57                         printf("Weird E820 entry. Index is %d\n",i); 
    58                         return 1; 
    59                 } 
    60         } 
    61  
    62         /*  
    63          * Now order them, getting rid of gaps and overlap.  
    64          * The idea behind this code is from Linux  
    65          */ 
    66  
    67         for (i=0; i<2*numEntries; i++) 
    68                 changePoint[i]=&changePointList[i]; 
    69  
    70         for (i=0; i<numEntries; i++) 
    71                 if (memEntries[i].length) 
    72                 { 
    73                         changePoint[changeIndex]->addr=memEntries[i].base; 
    74                         changePoint[changeIndex++]->pBios=&memEntries[i]; 
    75                         changePoint[changeIndex]->addr=memEntries[i].base+memEntries[i].length; 
    76                         changePoint[changeIndex++]->pBios=&memEntries[i]; 
    77                 } 
    78  
    79         changeNum=changeIndex; 
    80  
    81         /* Sort the memory map from low to high */ 
    82  
    83         stillChanging=1; 
    84         while (stillChanging) 
    85         { 
    86                 stillChanging=0; 
    87                 for (i=1; i<changeNum; i++) 
    88                 { 
    89                         if ((changePoint[i]->addr < changePoint[i-1]->addr) || 
    90                                 ((changePoint[i]->addr == changePoint[i-1]->addr) && 
    91                                 (changePoint[i]->addr == changePoint[i]->pBios->base) && 
    92                                 (changePoint[i-1]->addr != changePoint[i-1]->pBios->base))) 
    93                         { 
    94                                 struct ChangeMember* changeTemp; 
    95                                 changeTemp=changePoint[i]; 
    96                                 changePoint[i]=changePoint[i-1]; 
    97                                 changePoint[i-1]=changeTemp; 
    98                                 stillChanging=1; 
    99                         } 
    100                 } 
    101         } 
    102  
    103         int overlapCount=0,currentType=0,lastType=0,lastAddr=0; 
    104  
    105         /* Now with that sorted, create a new E820 memory map */ 
    106  
    107         for (changeIndex=0; changeIndex<changeNum; changeIndex++) 
    108         { 
    109                 /* Detect overlapping BIOS entries */ 
    110                 if (changePoint[changeIndex]->addr == changePoint[changeIndex]->pBios->base) 
    111                 { 
    112                         overlapList[overlapCount++]=changePoint[changeIndex]->pBios; 
    113                 }else{ 
    114                         for (i=0; i<overlapCount; i++) 
    115                         { 
    116                                 if (overlapList[i] == changePoint[changeIndex]->pBios) 
    117                                         overlapList[i]=overlapList[overlapCount-1]; 
    118                         } 
    119                         overlapCount--; 
    120                 } 
    121  
    122                 /* Now deal with those overlapping BIOS entries */ 
    123  
    124                 currentType=0; 
    125                 for (i=0; i<overlapCount; i++) 
    126                 { 
    127                         if (overlapList[i]->rangeType > currentType) 
    128                                 currentType=overlapList[i]->rangeType; 
    129                 } 
    130  
    131                 if (currentType != lastType) 
    132                 { 
    133                         if (lastType) 
    134                         { 
    135                                 //printf("entryCount = %u\n",entryCount); 
    136                                 entries[entryCount].length=changePoint[changeIndex]->addr-lastAddr; 
    137                                 if (entries[entryCount].length) 
    138                                         if (++entryCount >= 32) 
    139                                                 break; 
    140                         } 
    141                          
    142                         if (currentType) 
    143                         { 
    144                                 entries[entryCount].base=changePoint[changeIndex]->addr; 
    145                                 entries[entryCount].rangeType=currentType; 
    146                                 lastAddr=changePoint[changeIndex]->addr; 
    147                         } 
    148  
    149                         lastType=currentType; 
    150                 } 
    151         } 
    152  
    153         /* Finished! :) Now print the new list of entries */ 
    154  
    155         printf("Number of E820 entries = %u\n",entryCount); 
    156  
    157         struct E820Entry* currEntry; 
     45        printf("PHYS: Number of E820 entries = %u\n",entryCount); 
    15846 
    15947        for (i=0; i<entryCount; i++) 
     
    18068                } 
    18169        } 
     70} 
     71 
     72/*********************************************************************** 
     73 * 
     74 * FUNCTION:    ReadE820 
     75 * 
     76 * DESCRIPTION: Read data from the E820 BIOS call, and convert it to an 
     77 *              array of E820Entrys. 
     78 * 
     79 * PARAMETERS:  None. 
     80 * 
     81 * RETURNS:     1 on error (for errornous E820 entries), 0 otherwise. 
     82 * 
     83 ***********************************************************************/ 
     84 
     85/* Function needs cleanup */ 
     86 
     87static int ReadE820() 
     88{ 
     89        /* 0x504 contains number of entries, and 0x508 is the array of E820 entries */ 
     90        int numEntries=*(int*)MINFO_COUNT; 
     91        struct E820Entry* memEntries=(struct E820Entry*)MINFO_START; 
     92        int i; 
     93 
     94        struct ChangeMember 
     95        { 
     96                struct E820Entry* pBios; 
     97                QWORD addr; 
     98        }; 
     99 
     100        struct ChangeMember changePointList[64]; 
     101        struct ChangeMember* changePoint[64]; 
     102        struct E820Entry* overlapList[32]; 
     103        int changeIndex=0; 
     104        int changeNum; 
     105        int stillChanging; 
     106 
     107        if (numEntries <= 1) 
     108                return 0; /* No need to reshuffle if there's only one entry */ 
     109 
     110        /* Debug code */ 
     111        for (i=0; i<numEntries; i++) 
     112        { 
     113                if (memEntries[i].base + memEntries[i].length < memEntries[i].base) 
     114                { 
     115                        printf("Weird E820 entry. Index is %d\n",i); 
     116                        return 1; 
     117                } 
     118        } 
     119 
     120        /*  
     121         * Now order them, getting rid of gaps and overlap.  
     122         * The idea behind this code is from Linux  
     123         */ 
     124 
     125        for (i=0; i<2*numEntries; i++) 
     126                changePoint[i]=&changePointList[i]; 
     127 
     128        for (i=0; i<numEntries; i++) 
     129                if (memEntries[i].length) 
     130                { 
     131                        changePoint[changeIndex]->addr=memEntries[i].base; 
     132                        changePoint[changeIndex++]->pBios=&memEntries[i]; 
     133                        changePoint[changeIndex]->addr=memEntries[i].base+memEntries[i].length; 
     134                        changePoint[changeIndex++]->pBios=&memEntries[i]; 
     135                } 
     136 
     137        changeNum=changeIndex; 
     138 
     139        /* Sort the memory map from low to high */ 
     140        stillChanging=1; 
     141        while (stillChanging) 
     142        { 
     143                stillChanging=0; 
     144                for (i=1; i<changeNum; i++) 
     145                { 
     146                        if ((changePoint[i]->addr < changePoint[i-1]->addr) || 
     147                                ((changePoint[i]->addr == changePoint[i-1]->addr) && 
     148                                (changePoint[i]->addr == changePoint[i]->pBios->base) && 
     149                                (changePoint[i-1]->addr != changePoint[i-1]->pBios->base))) 
     150                        { 
     151                                struct ChangeMember* changeTemp; 
     152                                changeTemp=changePoint[i]; 
     153                                changePoint[i]=changePoint[i-1]; 
     154                                changePoint[i-1]=changeTemp; 
     155                                stillChanging=1; 
     156                        } 
     157                } 
     158        } 
     159 
     160        int overlapCount=0,currentType=0,lastType=0,lastAddr=0; 
     161 
     162        /* Now with that sorted, create a new E820 memory map */ 
     163 
     164        for (changeIndex=0; changeIndex<changeNum; changeIndex++) 
     165        { 
     166                /* Detect overlapping BIOS entries */ 
     167                if (changePoint[changeIndex]->addr == changePoint[changeIndex]->pBios->base) 
     168                { 
     169                        overlapList[overlapCount++]=changePoint[changeIndex]->pBios; 
     170                }else{ 
     171                        for (i=0; i<overlapCount; i++) 
     172                        { 
     173                                if (overlapList[i] == changePoint[changeIndex]->pBios) 
     174                                        overlapList[i]=overlapList[overlapCount-1]; 
     175                        } 
     176                        overlapCount--; 
     177                } 
     178 
     179                /* Now deal with those overlapping BIOS entries */ 
     180 
     181                currentType=0; 
     182                for (i=0; i<overlapCount; i++) 
     183                { 
     184                        if (overlapList[i]->rangeType > currentType) 
     185                                currentType=overlapList[i]->rangeType; 
     186                } 
     187 
     188                if (currentType != lastType) 
     189                { 
     190                        if (lastType) 
     191                        { 
     192                                entries[entryCount].length=changePoint[changeIndex]->addr-lastAddr; 
     193                                if (entries[entryCount].length) 
     194                                        if (++entryCount >= 32) 
     195                                                break; 
     196                        } 
     197                         
     198                        if (currentType) 
     199                        { 
     200                                entries[entryCount].base=changePoint[changeIndex]->addr; 
     201                                entries[entryCount].rangeType=currentType; 
     202                                lastAddr=changePoint[changeIndex]->addr; 
     203                        } 
     204 
     205                        lastType=currentType; 
     206                } 
     207        } 
     208 
     209        /* Print completed entries to screen */ 
     210        PrintE820(); 
    182211 
    183212        return 0; 
    184213} 
    185214 
    186 static void CleanupE801() 
     215/*********************************************************************** 
     216 * 
     217 * FUNCTION:    ReadE801 
     218 * 
     219 * DESCRIPTION: Read data from MINFO_COUNT, from BIOS call 0xE801. 
     220 * 
     221 * PARAMETERS:  None. 
     222 * 
     223 * RETURNS:     None. 
     224 * 
     225 ***********************************************************************/ 
     226 
     227static void ReadE801() 
    187228{ 
    188229        /* Memory, in kilobytes, is at 0x504 */ 
    189         DWORD numKs=*(DWORD*)0x504; 
     230        DWORD numKs=*(DWORD*)MINFO_COUNT; 
    190231 
    191232        /* Two entries - the usual memory below 1mb, and all the way to xmb */ 
     
    201242/*********************************************************************** 
    202243 * 
    203  * FUNCTION:    Cleanup88h 
     244 * FUNCTION:    Read88h 
    204245 * 
    205246 * DESCRIPTION: Clean up the data (i.e. convert it to an E820 table) from 
     
    208249 * PARAMETERS:  None. 
    209250 * 
    210  * RETURNS:             None. 
    211  * 
    212  ***********************************************************************/ 
    213  
    214 static void Cleanup88h() 
    215 { 
    216         WORD numKs=*(WORD*)0x504; 
    217         /* 0x504 contains the number of kilobytes above 1mb */ 
     251 * RETURNS:     None. 
     252 * 
     253 ***********************************************************************/ 
     254 
     255static void Read88h() 
     256{ 
     257        WORD numKs=*(WORD*)MINFO_COUNT; 
     258 
     259        /* MINFO_COUNT contains the number of kilobytes above 1mb */ 
    218260        entryCount=2; 
    219261        entries[0].base=0x0; 
     
    318360        { 
    319361        case 0: 
    320                 Cleanup88h(); 
     362                Read88h(); 
    321363                break; 
    322364        case 1: 
    323                 CleanupE801(); 
     365                ReadE801(); 
    324366                break; 
    325367        case 2: 
    326                 CleanupE820(); 
     368                ReadE820(); 
    327369                break; 
    328370        } 
  • Whitix/trunk/include/i386/physical.h

    r1 r2  
    3535#define E820_FREE       1 
    3636 
     37/* Memory address defines */ 
     38#define MINFO_COUNT     0x504 
     39#define MINFO_START     0x508 
     40 
    3741#endif 
  • Whitix/trunk/out.txt

    r1 r2  
    323200000000000i[     ]   USB support: yes 
    333300000000000i[     ]   VGA extension support: vbe  
    34 00000000000i[MEM0 ] allocated memory at 0xb5dd7008. after alignment, vector=0xb5dd8000 
     3400000000000i[MEM0 ] allocated memory at 0xb5d19008. after alignment, vector=0xb5d1a000 
    353500000000000i[MEM0 ] 32.00MB 
    363600000000000i[MEM0 ] rom at 0xffff0000/65536 ('/usr/share/bochs/BIOS-bochs-latest') 
     
    393900000000000i[APIC0] 80686 
    404000000000000i[APIC0] local apic in CPU apicid=00 initializing 
    41 00000000000i[     ] lt_dlhandle is 0x82fd4b8 
     4100000000000i[     ] lt_dlhandle is 0x82fd4b0 
    424200000000000i[PLGIN] loaded plugin libbx_unmapped.la 
    43 00000000000i[     ] lt_dlhandle is 0x82fd530 
     4300000000000i[     ] lt_dlhandle is 0x82fd528 
    444400000000000i[PLGIN] loaded plugin libbx_biosdev.la 
    45 00000000000i[     ] lt_dlhandle is 0x82fded8 
     4500000000000i[     ] lt_dlhandle is 0x82fded0 
    464600000000000i[PLGIN] loaded plugin libbx_cmos.la 
    47 00000000000i[     ] lt_dlhandle is 0x82fe490 
     4700000000000i[     ] lt_dlhandle is 0x82fe488 
    484800000000000i[PLGIN] loaded plugin libbx_dma.la 
    49 00000000000i[     ] lt_dlhandle is 0x82fe9e0 
     4900000000000i[     ] lt_dlhandle is 0x82fe9d8 
    505000000000000i[PLGIN] loaded plugin libbx_pic.la 
    51 00000000000i[     ] lt_dlhandle is 0x82febd8 
     5100000000000i[     ] lt_dlhandle is 0x82febd0 
    525200000000000i[PLGIN] loaded plugin libbx_vga.la 
    53 00000000000i[     ] lt_dlhandle is 0x82ff500 
     5300000000000i[     ] lt_dlhandle is 0x82ff4f8 
    545400000000000i[PLGIN] loaded plugin libbx_floppy.la 
    55 00000000000i[     ] lt_dlhandle is 0x82ff578 
     5500000000000i[     ] lt_dlhandle is 0x82ff570 
    565600000000000i[PLGIN] loaded plugin libbx_harddrv.la 
    57 00000000000i[     ] lt_dlhandle is 0x82ffeb0 
     5700000000000i[     ] lt_dlhandle is 0x82ffea8 
    585800000000000i[PLGIN] loaded plugin libbx_keyboard.la 
    59 00000000000i[     ] lt_dlhandle is 0x8311988 
     5900000000000i[     ] lt_dlhandle is 0x8311980 
    606000000000000i[PLGIN] loaded plugin libbx_serial.la 
    61 00000000000i[     ] lt_dlhandle is 0x8312ad8 
     6100000000000i[     ] lt_dlhandle is 0x8312ad0 
    626200000000000i[PLGIN] loaded plugin libbx_parallel.la 
    63 00000000000i[     ] lt_dlhandle is 0x8312c58 
     6300000000000i[     ] lt_dlhandle is 0x8312c50 
    646400000000000i[PLGIN] loaded plugin libbx_extfpuirq.la 
    65 00000000000i[     ] lt_dlhandle is 0x8313518 
     6500000000000i[     ] lt_dlhandle is 0x8313510 
    666600000000000i[PLGIN] loaded plugin libbx_gameport.la 
    67 00000000000i[     ] lt_dlhandle is 0x8313a20 
     6700000000000i[     ] lt_dlhandle is 0x8313a18 
    686800000000000i[PLGIN] loaded plugin libbx_speaker.la 
    69 00000000000i[     ] lt_dlhandle is 0x8313f10 
     6900000000000i[     ] lt_dlhandle is 0x8313f08 
    707000000000000i[PLGIN] loaded plugin libbx_pci.la 
    71 00000000000i[     ] lt_dlhandle is 0x83146a8 
     7100000000000i[     ] lt_dlhandle is 0x83146a0 
    727200000000000i[PLGIN] loaded plugin libbx_pci2isa.la 
    73 00000000000i[     ] lt_dlhandle is 0x8314cd0 
     7300000000000i[     ] lt_dlhandle is 0x8314cc8 
    747400000000000i[PLGIN] loaded plugin libbx_pci_ide.la 
    757500000000000i[IOAP ] initializing I/O APIC 
     
    777700000000000i[MEM0 ] Register memory access handlers: fec00000-fec00fff 
    787800000000000i[CMOS ] Using local time for initial clock 
    79 00000000000i[CMOS ] Setting initial clock to: Mon Feb 18 11:22:09 2008 (time0=1203333729) 
     7900000000000i[CMOS ] Setting initial clock to: Wed Feb 20 19:16:37 2008 (time0=1203534997) 
    808000000000000i[DMA  ] channel 4 used by cascade 
    818100000000000i[DMA  ] channel 2 used by Floppy Drive 
     
    10110100000000000i[CD   ] Opening image file cd.iso as a cd. 
    10210200000000000i[HD   ] Media present in CD-ROM drive 
    103 00000000000i[HD   ] Capacity is 1898 sectors (3.71 MB) 
     10300000000000i[HD   ] Capacity is 3737 sectors (7.30 MB) 
    10410400000000000i[HD   ] Using boot sequence cdrom, none, none 
    10510500000000000i[HD   ] Floppy boot signature check is enabled 
     
    15215200001066129i[HD   ] READ(10) with transfer length <= 0, ok (0) 
    15315300001120000i[XGUI ] charmap update. Font Height is 16 
    154 00001155472i[BIOS ] KBD: unsupported int 16h function 03 
    155 00077214000i[XGUI ] system RESET callback 
    156 00077214000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called 
    157 00077214000i[APIC0] local apic in CPU 0 initializing 
    158 00077214000i[PLGIN] reset of 'harddrv' plugin device by virtual method 
    159 00077214000i[PLGIN] reset of 'keyboard' plugin device by virtual method 
    160 00077214000i[PLGIN] reset of 'serial' plugin device by virtual method 
    161 00077214000i[PLGIN] reset of 'parallel' plugin device by virtual method 
    162 00077214000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method 
    163 00077214000i[PLGIN] reset of 'gameport' plugin device by virtual method 
    164 00077214000i[PLGIN] reset of 'speaker' plugin device by virtual method 
    165 00077214000i[PLGIN] reset of 'pci_ide' plugin device by virtual method 
    166 00077214000i[CPU0 ] handleAsyncEvent: reset detected in HLT state 
    167 00077217740i[BIOS ] $Revision: 1.166 $ $Date: 2006/08/11 17:34:12 $ 
    168 00077532057i[KBD  ] reset-disable command received 
    169 00077657898i[VBIOS]  
    170 VGABios $Id: vgabios.c,v 1.66 2006/07/10 07:47:51 vruppert Exp $ 
    171 00077657969i[VGA  ] VBE known Display Interface b0c0 
    172 00077658001i[VGA  ] VBE known Display Interface b0c4 
    173 00077660926i[VBIOS] VBE Bios $Id: vbe.c,v 1.58 2006/08/19 09:39:43 vruppert Exp $ 
    174 00077760000i[XGUI ] charmap update. Font Height is 16 
    175 00078240000i[XGUI ] charmap update. Font Height is 16 
    176 00078280129i[HD   ] READ(10) with transfer length <= 0, ok (0) 
    177 00078320000i[XGUI ] charmap update. Font Height is 16 
    178 00078369472i[BIOS ] KBD: unsupported int 16h function 03 
    179 00232904000i[XGUI ] system RESET callback 
    180 00232904000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called 
    181 00232904000i[APIC0] local apic in CPU 0 initializing 
    182 00232904000i[PLGIN] reset of 'harddrv' plugin device by virtual method 
    183 00232904000i[PLGIN] reset of 'keyboard' plugin device by virtual method 
    184 00232904000i[PLGIN] reset of 'serial' plugin device by virtual method 
    185 00232904000i[PLGIN] reset of 'parallel' plugin device by virtual method 
    186 00232904000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method 
    187 00232904000i[PLGIN] reset of 'gameport' plugin device by virtual method 
    188 00232904000i[PLGIN] reset of 'speaker' plugin device by virtual method 
    189 00232904000i[PLGIN] reset of 'pci_ide' plugin device by virtual method 
    190 00232904000i[CPU0 ] handleAsyncEvent: reset detected in HLT state 
    191 00232907740i[BIOS ] $Revision: 1.166 $ $Date: 2006/08/11 17:34:12 $ 
    192 00233222057i[KBD  ] reset-disable command received 
    193 00233347898i[VBIOS]  
    194 VGABios $Id: vgabios.c,v 1.66 2006/07/10 07:47:51 vruppert Exp $ 
    195 00233347969i[VGA  ] VBE known Display Interface b0c0 
    196 00233348001i[VGA  ] VBE known Display Interface b0c4 
    197 00233350926i[VBIOS] VBE Bios $Id: vbe.c,v 1.58 2006/08/19 09:39:43 vruppert Exp $ 
    198 00233440000i[XGUI ] charmap update. Font Height is 16 
    199 00233920000i[XGUI ] charmap update. Font Height is 16 
    200 00233970129i[HD   ] READ(10) with transfer length <= 0, ok (0) 
    201 00234000000i[XGUI ] charmap update. Font Height is 16 
    202 00234059472i[BIOS ] KBD: unsupported int 16h function 03 
    203 00267272000i[XGUI ] system RESET callback 
    204 00267272000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called 
    205 00267272000i[APIC0] local apic in CPU 0 initializing 
    206 00267272000i[PLGIN] reset of 'harddrv' plugin device by virtual method 
    207 00267272000i[PLGIN] reset of 'keyboard' plugin device by virtual method 
    208 00267272000i[PLGIN] reset of 'serial' plugin device by virtual method 
    209 00267272000i[PLGIN] reset of 'parallel' plugin device by virtual method 
    210 00267272000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method 
    211 00267272000i[PLGIN] reset of 'gameport' plugin device by virtual method 
    212 00267272000i[PLGIN] reset of 'speaker' plugin device by virtual method 
    213 00267272000i[PLGIN] reset of 'pci_ide' plugin device by virtual method 
    214 00267272000i[CPU0 ] handleAsyncEvent: reset detected in HLT state 
    215 00267275740i[BIOS ] $Revision: 1.166 $ $Date: 2006/08/11 17:34:12 $ 
    216 00267590057i[KBD  ] reset-disable command received 
    217 00267715898i[VBIOS]  
    218 VGABios $Id: vgabios.c,v 1.66 2006/07/10 07:47:51 vruppert Exp $ 
    219 00267715969i[VGA  ] VBE known Display Interface b0c0 
    220 00267716001i[VGA  ] VBE known Display Interface b0c4 
    221 00267718926i[VBIOS] VBE Bios $Id: vbe.c,v 1.58 2006/08/19 09:39:43 vruppert Exp $ 
    222 00267760000i[XGUI ] charmap update. Font Height is 16 
    223 00267840000i[XGUI ] charmap update. Font Height is 16 
    224 00268320000i[XGUI ] charmap update. Font Height is 16 
    225 00268338129i[HD   ] READ(10) with transfer length <= 0, ok (0) 
    226 00268400000i[XGUI ] charmap update. Font Height is 16 
    227 00268427472i[BIOS ] KBD: unsupported int 16h function 03 
    228 00351660000p[XGUI ] >>PANIC<< POWER button turned off. 
    229 00351660000i[SYS  ] Last time is 1203333903 
    230 00351660000i[XGUI ] Exit. 
    231 00351660000i[CPU0 ] protected mode 
    232 00351660000i[CPU0 ] CS.d_b = 32 bit 
    233 00351660000i[CPU0 ] SS.d_b = 32 bit 
    234 00351660000i[CPU0 ] EFER   = 0x00000000 
    235 00351660000i[CPU0 ] | RAX=0000000000027bc0  RBX=0000000000000000 
    236 00351660000i[CPU0 ] | RCX=00000000c00020cc  RDX=00000000c0002044 
    237 00351660000i[CPU0 ] | RSP=000000000002a4a0  RBP=0000000000000034 
    238 00351660000i[CPU0 ] | RSI=0000000000001197  RDI=0000000000031dc8 
    239 00351660000i[CPU0 ] |  R8=0000000000000000   R9=0000000000000000 
    240 00351660000i[CPU0 ] | R10=0000000000000000  R11=0000000000000000 
    241 00351660000i[CPU0 ] | R12=0000000000000000  R13=0000000000000000 
    242 00351660000i[CPU0 ] | R14=0000000000000000  R15=0000000000000000 
    243 00351660000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df IF tf sf zf AF PF cf 
    244 00351660000i[CPU0 ] | SEG selector     base    limit G D 
    245 00351660000i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D 
    246 00351660000i[CPU0 ] |  CS:0008( 0001| 0|  0) 00000000 000fffff 1 1 
    247 00351660000i[CPU0 ] |  DS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
    248 00351660000i[CPU0 ] |  SS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
    249 00351660000i[CPU0 ] |  ES:0010( 0002| 0|  0) 00000000 000fffff 1 1 
    250 00351660000i[CPU0 ] |  FS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
    251 00351660000i[CPU0 ] |  GS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
    252 00351660000i[CPU0 ] |  MSR_FS_BASE:0000000000000000 
    253 00351660000i[CPU0 ] |  MSR_GS_BASE:0000000000000000 
    254 00351660000i[CPU0 ] | RIP=0000000000018502 (0000000000018502) 
    255 00351660000i[CPU0 ] | CR0=0x80000019 CR1=0x0 CR2=0x000000000080c050 
    256 00351660000i[CPU0 ] | CR3=0x01fb6000 CR4=0x00000000 
    257 00351660000i[CPU0 ] >> jmp .+0xfffffffc (0x00018500) : EBFC 
    258 00351660000i[     ] restoring default signal behavior 
    259 00351660000i[CTRL ] quit_sim called with exit code 1 
     15400001160080i[BIOS ] KBD: unsupported int 16h function 03 
     15500019662000p[XGUI ] >>PANIC<< POWER button turned off. 
     15600019662000i[SYS  ] Last time is 1203535006 
     15700019662000i[XGUI ] Exit. 
     15800019662000i[CPU0 ] protected mode 
     15900019662000i[CPU0 ] CS.d_b = 32 bit 
     16000019662000i[CPU0 ] SS.d_b = 32 bit 
     16100019662000i[CPU0 ] EFER   = 0x00000000 
     16200019662000i[CPU0 ] | RAX=0000000000027bc0  RBX=0000000000000000 
     16300019662000i[CPU0 ] | RCX=00000000c00020cc  RDX=00000000c0002044 
     16400019662000i[CPU0 ] | RSP=000000000002a4a0  RBP=000000000000003d 
     16500019662000i[CPU0 ] | RSI=0000000000001197  RDI=0000000000031dc8 
     16600019662000i[CPU0 ] |  R8=0000000000000000   R9=0000000000000000 
     16700019662000i[CPU0 ] | R10=0000000000000000  R11=0000000000000000 
     16800019662000i[CPU0 ] | R12=0000000000000000  R13=0000000000000000 
     16900019662000i[CPU0 ] | R14=0000000000000000  R15=0000000000000000 
     17000019662000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df IF tf sf zf AF PF cf 
     17100019662000i[CPU0 ] | SEG selector     base    limit G D 
     17200019662000i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D 
     17300019662000i[CPU0 ] |  CS:0008( 0001| 0|  0) 00000000 000fffff 1 1 
     17400019662000i[CPU0 ] |  DS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
     17500019662000i[CPU0 ] |  SS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
     17600019662000i[CPU0 ] |  ES:0010( 0002| 0|  0) 00000000 000fffff 1 1 
     17700019662000i[CPU0 ] |  FS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
     17800019662000i[CPU0 ] |  GS:0010( 0002| 0|  0) 00000000 000fffff 1 1 
     17900019662000i[CPU0 ] |  MSR_FS_BASE:0000000000000000 
     18000019662000i[CPU0 ] |  MSR_GS_BASE:0000000000000000 
     18100019662000i[CPU0 ] | RIP=0000000000018562 (0000000000018562) 
     18200019662000i[CPU0 ] | CR0=0x80000019 CR1=0x0 CR2=0x000000000080c050 
     18300019662000i[CPU0 ] | CR3=0x01f90000 CR4=0x00000000 
     18400019662000i[CPU0 ] >> jmp .+0xfffffffc (0x00018560) : EBFC 
     18500019662000i[     ] restoring default signal behavior 
     18600019662000i[CTRL ] quit_sim called with exit code 1