VirtualBox

Changeset 48727 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Sep 27, 2013 11:03:53 AM (11 years ago)
Author:
vboxsync
Message:

EFI: EFI image load events, EFI debug points, always disabled frame-pointer optimizations on MSFT. Some cleanups.

Location:
trunk/src/VBox/Devices/EFI
Files:
6 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/DevEFI.cpp

    r48659 r48727  
    4141#include <iprt/mp.h>
    4242#include <iprt/list.h>
    43 #ifdef DEBUG
     43#if defined(DEBUG) && defined(IN_RING3)
    4444# include <iprt/stream.h>
    4545# define DEVEFI_WITH_VBOXDBG_SCRIPT
     
    130130    /** Pointer back to the device instance. */
    131131    PPDMDEVINS              pDevIns;
     132
    132133    /** EFI message buffer. */
    133134    char                    szMsg[VBOX_EFI_DEBUG_BUFFER];
    134135    /** EFI message buffer index. */
    135136    uint32_t                iMsg;
     137
    136138    /** EFI panic message buffer. */
    137139    char                    szPanicMsg[2048];
    138140    /** EFI panic message buffer index. */
    139141    uint32_t                iPanicMsg;
     142
     143    struct
     144    {
     145        /** The current/last image event. */
     146        uint8_t             uEvt;
     147        /** Module path/name offset. */
     148        uint8_t             offName;
     149        /** The offset of the last component in the module path/name. */
     150        uint8_t             offNameLastComponent;
     151        /** Alignment padding. */
     152        uint8_t             abPadding[5];
     153        /** First address associated with the event (image address). */
     154        uint64_t            uAddr0;
     155        /** Second address associated with the event (old image address). */
     156        uint64_t            uAddr1;
     157        /** The size associated with the event (0 if none). */
     158        uint64_t            cb0;
     159        /** The module name. */
     160        char                szName[256];
     161    } ImageEvt;
     162
    140163    /** The system EFI ROM data. */
    141164    uint8_t                *pu8EfiRom;
     
    477500 * @param   pThis               The EFI state.
    478501 * @param   pEfiVar             The resulting variable. NULL if not found / end.
    479  */
    480 static void nvramWriteVariableOpQueryCopyResult(PDEVEFI pThis, PEFIVAR pEfiVar)
    481 {
    482     RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
     502 * @param   fEnumQuery          Set if enumeration query, clear if specific.
     503 */
     504static void nvramWriteVariableOpQueryCopyResult(PDEVEFI pThis, PEFIVAR pEfiVar, bool fEnumQuery)
     505{
    483506    RT_ZERO(pThis->NVRAM.VarOpBuf.abValue);
    484507    if (pEfiVar)
    485508    {
     509        RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
    486510        pThis->NVRAM.VarOpBuf.uuid        = pEfiVar->uuid;
    487511        pThis->NVRAM.VarOpBuf.cchName     = pEfiVar->cchName;
     
    498522    else
    499523    {
     524        if (fEnumQuery)
     525            LogFlow(("EFI: Variable query -> NOT_FOUND \n"));
     526        else
     527            LogFlow(("EFI: Variable query %RTuuid::'%s' -> NOT_FOUND \n",
     528                     &pThis->NVRAM.VarOpBuf.uuid, pThis->NVRAM.VarOpBuf.szName));
     529        RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
    500530        pThis->NVRAM.VarOpBuf.fAttributes = 0;
    501531        pThis->NVRAM.VarOpBuf.cbValue     = 0;
     
    503533        pThis->NVRAM.pCurVar              = NULL;
    504534        pThis->NVRAM.u32Status            = EFI_VARIABLE_OP_STATUS_NOT_FOUND;
    505         LogFlow(("EFI: Variable query -> NOT_FOUND\n"));
    506535    }
    507536}
     
    522551                                              &pThis->NVRAM.VarOpBuf.uuid,
    523552                                              &pEfiVar);
    524     nvramWriteVariableOpQueryCopyResult(pThis, RT_SUCCESS(rc) ? pEfiVar : NULL);
     553    nvramWriteVariableOpQueryCopyResult(pThis, RT_SUCCESS(rc) ? pEfiVar : NULL, false /*fEnumQuery*/);
    525554    return VINF_SUCCESS;
    526555}
     
    542571    else
    543572        pEfiVar = RTListGetFirst(&pThis->NVRAM.VarList, EFIVAR, ListNode);
    544     nvramWriteVariableOpQueryCopyResult(pThis, pEfiVar);
     573    nvramWriteVariableOpQueryCopyResult(pThis, pEfiVar, true /* fEnumQuery */);
    545574    return VINF_SUCCESS;
    546575}
     
    554583static int nvramWriteVariableOpAdd(PDEVEFI pThis)
    555584{
    556     LogRel(("EFI_VARIABLE_OP_ADD: %RTuuid::'%s' fAttributes=%#x abValue=%.*Rhxs\n",
    557             &pThis->NVRAM.VarOpBuf.uuid, pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.fAttributes,
    558             pThis->NVRAM.VarOpBuf.cbValue, pThis->NVRAM.VarOpBuf.abValue));
     585    Log(("EFI_VARIABLE_OP_ADD: %RTuuid::'%s' fAttributes=%#x abValue=%.*Rhxs\n",
     586         &pThis->NVRAM.VarOpBuf.uuid, pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.fAttributes,
     587         pThis->NVRAM.VarOpBuf.cbValue, pThis->NVRAM.VarOpBuf.abValue));
    559588
    560589    /*
     
    569598        return VINF_SUCCESS;
    570599    }
    571     pThis->NVRAM.VarOpBuf.cchName = RTStrNLen(pThis->NVRAM.VarOpBuf.szName, sizeof(pThis->NVRAM.VarOpBuf.szName));
     600    pThis->NVRAM.VarOpBuf.cchName = (uint32_t)RTStrNLen(pThis->NVRAM.VarOpBuf.szName, sizeof(pThis->NVRAM.VarOpBuf.szName));
    572601
    573602    /*
     
    755784            if (pThis->NVRAM.offOpBuffer == 0)
    756785                RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
    757             size_t cbUtf8 = RTStrCpSize(u32Value);
     786            uint32_t cbUtf8 = (uint32_t)RTStrCpSize(u32Value);
    758787            if (pThis->NVRAM.offOpBuffer + cbUtf8 < sizeof(pThis->NVRAM.VarOpBuf.szName))
    759788            {
     
    879908        case EFI_VM_VARIABLE_OP_NAME_LENGTH_UTF16:
    880909            /* Lazy bird: ASSUME no surrogate pairs. */
    881             *pu32 = RTStrUniLen(pThis->NVRAM.VarOpBuf.szName);
     910            *pu32 = (uint32_t)RTStrUniLen(pThis->NVRAM.VarOpBuf.szName);
    882911            break;
    883912
     
    11411170}
    11421171
     1172
     1173#ifdef IN_RING3
     1174static void efiVBoxDbgScript(PDEVEFI pThis, const char *pszFormat, ...)
     1175{
     1176# ifdef DEVEFI_WITH_VBOXDBG_SCRIPT
     1177    PRTSTREAM pStrm;
     1178    int rc2 = RTStrmOpen("./DevEFI.VBoxDbg", "a", &pStrm);
     1179    if (RT_SUCCESS(rc2))
     1180    {
     1181        va_list va;
     1182        va_start(va, pszFormat);
     1183        RTStrmPrintfV(pStrm, pszFormat, va);
     1184        va_end(va);
     1185        RTStrmClose(pStrm);
     1186    }
     1187# endif
     1188}
     1189#endif /* IN_RING3 */
     1190
     1191
     1192/**
     1193 * Handles writes to the image event port.
     1194 *
     1195 * @returns VBox status suitable for I/O port write handler.
     1196 *
     1197 * @param   pThis               The EFI state.
     1198 * @param   u32                 The value being written.
     1199 * @param   cb                  The size of the value.
     1200 */
     1201static int efiPortImageEventWrite(PDEVEFI pThis, uint32_t u32, unsigned cb)
     1202{
     1203    switch (u32 & EFI_IMAGE_EVT_CMD_MASK)
     1204    {
     1205        case EFI_IMAGE_EVT_CMD_START_LOAD32:
     1206        case EFI_IMAGE_EVT_CMD_START_LOAD64:
     1207        case EFI_IMAGE_EVT_CMD_START_UNLOAD32:
     1208        case EFI_IMAGE_EVT_CMD_START_UNLOAD64:
     1209            AssertBreak(EFI_IMAGE_EVT_GET_PAYLOAD(u32) == 0);
     1210
     1211            /* Reset the state. */
     1212            RT_ZERO(pThis->ImageEvt);
     1213            pThis->ImageEvt.uEvt = (uint8_t)u32; Assert(pThis->ImageEvt.uEvt == u32);
     1214            return VINF_SUCCESS;
     1215
     1216        case EFI_IMAGE_EVT_CMD_COMPLETE:
     1217        {
     1218#ifdef IN_RING3
     1219            AssertBreak(EFI_IMAGE_EVT_GET_PAYLOAD(u32) == 0);
     1220
     1221            /* For now, just log it. */
     1222            static uint64_t s_cImageEvtLogged = 0;
     1223            if (s_cImageEvtLogged < 2048)
     1224            {
     1225                s_cImageEvtLogged++;
     1226                switch (pThis->ImageEvt.uEvt)
     1227                {
     1228                    /* ASSUMES the name ends with .pdb and the image file ends with .efi! */
     1229                    case EFI_IMAGE_EVT_CMD_START_LOAD32:
     1230                        LogRel(("EFI: VBoxDbg> loadimage32 '%.*s.efi' %#llx LB %#llx\n",
     1231                                pThis->ImageEvt.offName - 4, pThis->ImageEvt.szName, pThis->ImageEvt.uAddr0, pThis->ImageEvt.cb0));
     1232                        if (pThis->ImageEvt.offName > 4)
     1233                            efiVBoxDbgScript(pThis, "loadimage32 '%.*s.efi' %#llx\n",
     1234                                             pThis->ImageEvt.offName - 4, pThis->ImageEvt.szName, pThis->ImageEvt.uAddr0);
     1235                        break;
     1236                    case EFI_IMAGE_EVT_CMD_START_LOAD64:
     1237                        LogRel(("EFI: VBoxDbg> loadimage64 '%.*s.efi' %#llx LB %#llx\n",
     1238                                pThis->ImageEvt.offName - 4, pThis->ImageEvt.szName, pThis->ImageEvt.uAddr0, pThis->ImageEvt.cb0));
     1239                        if (pThis->ImageEvt.offName > 4)
     1240                            efiVBoxDbgScript(pThis, "loadimage64 '%.*s.efi' %#llx\n",
     1241                                             pThis->ImageEvt.offName - 4, pThis->ImageEvt.szName, pThis->ImageEvt.uAddr0);
     1242                        break;
     1243                    case EFI_IMAGE_EVT_CMD_START_UNLOAD32:
     1244                    case EFI_IMAGE_EVT_CMD_START_UNLOAD64:
     1245                    {
     1246                        LogRel(("EFI: VBoxDbg> unload '%.*s.efi' # %#llx LB %#llx\n",
     1247                                pThis->ImageEvt.offName - 4 - pThis->ImageEvt.offNameLastComponent,
     1248                                &pThis->ImageEvt.szName[pThis->ImageEvt.offNameLastComponent],
     1249                                pThis->ImageEvt.uAddr0, pThis->ImageEvt.cb0));
     1250                        if (pThis->ImageEvt.offName > 4)
     1251                            efiVBoxDbgScript(pThis, "unload '%.*s.efi'\n",
     1252                                             pThis->ImageEvt.offName - 4 - pThis->ImageEvt.offNameLastComponent,
     1253                                             &pThis->ImageEvt.szName[pThis->ImageEvt.offNameLastComponent]);
     1254                        break;
     1255                    }
     1256                }
     1257            }
     1258            return VINF_SUCCESS;
     1259#else
     1260            return VINF_IOM_R3_IOPORT_WRITE;
     1261#endif
     1262        }
     1263
     1264        case EFI_IMAGE_EVT_CMD_ADDR0:
     1265            AssertBreak(EFI_IMAGE_EVT_GET_PAYLOAD(u32) <= UINT16_MAX);
     1266            pThis->ImageEvt.uAddr0 <<= 16;
     1267            pThis->ImageEvt.uAddr0 |= EFI_IMAGE_EVT_GET_PAYLOAD_U16(u32);
     1268            return VINF_SUCCESS;
     1269
     1270        case EFI_IMAGE_EVT_CMD_ADDR1:
     1271            AssertBreak(EFI_IMAGE_EVT_GET_PAYLOAD(u32) <= UINT16_MAX);
     1272            pThis->ImageEvt.uAddr0 <<= 16;
     1273            pThis->ImageEvt.uAddr0 |= EFI_IMAGE_EVT_GET_PAYLOAD_U16(u32);
     1274            return VINF_SUCCESS;
     1275
     1276        case EFI_IMAGE_EVT_CMD_SIZE0:
     1277            AssertBreak(EFI_IMAGE_EVT_GET_PAYLOAD(u32) <= UINT16_MAX);
     1278            pThis->ImageEvt.cb0 <<= 16;
     1279            pThis->ImageEvt.cb0  |= EFI_IMAGE_EVT_GET_PAYLOAD_U16(u32);
     1280            return VINF_SUCCESS;
     1281
     1282        case EFI_IMAGE_EVT_CMD_NAME:
     1283            AssertBreak(EFI_IMAGE_EVT_GET_PAYLOAD(u32) <= 0x7f);
     1284            if (pThis->ImageEvt.offName + 1 < sizeof(pThis->ImageEvt.szName))
     1285            {
     1286                char ch = EFI_IMAGE_EVT_GET_PAYLOAD_U8(u32);
     1287                if (ch == '\\')
     1288                    ch = '/';
     1289                pThis->ImageEvt.szName[pThis->ImageEvt.offName++] = ch;
     1290                if (ch == '/' || ch == ':')
     1291                    pThis->ImageEvt.offNameLastComponent = pThis->ImageEvt.offName;
     1292            }
     1293            else
     1294                Log(("EFI: Image name overflow\n"));
     1295            return VINF_SUCCESS;
     1296    }
     1297
     1298    Log(("EFI: Unknown image event: %#x (cb=%d)\n", u32, cb));
     1299    return VINF_SUCCESS;
     1300}
     1301
     1302
    11431303/**
    11441304 * Port I/O Handler for IN operations.
     
    11871347#endif
    11881348
    1189         case EFI_VARIABLE_OP:
     1349        case EFI_PORT_VARIABLE_OP:
    11901350            return nvramReadVariableOp(pThis, pu32, cb);
    11911351
    1192         case EFI_VARIABLE_PARAM:
     1352        case EFI_PORT_VARIABLE_PARAM:
     1353        case EFI_PORT_DEBUG_POINT:
     1354        case EFI_PORT_IMAGE_EVENT:
    11931355            *pu32 = UINT32_MAX;
    11941356            return VINF_SUCCESS;
     
    11961358
    11971359    return VERR_IOM_IOPORT_UNUSED;
     1360}
     1361
     1362
     1363/**
     1364 * Translates a debug point value into a string for logging.
     1365 *
     1366 * @returns read-only string
     1367 * @param   enmDbgPoint         Valid debug point value.
     1368 */
     1369static const char *efiDbgPointName(EFIDBGPOINT enmDbgPoint)
     1370{
     1371    switch (enmDbgPoint)
     1372    {
     1373        case EFIDBGPOINT_SEC_PREMEM:    return "SEC_PREMEM";
     1374        case EFIDBGPOINT_SEC_POSTMEM:   return "SEC_POSTMEM";
     1375        case EFIDBGPOINT_DXE_CORE:      return "DXE_CORE";
     1376        case EFIDBGPOINT_SMM:           return "SMM";
     1377        case EFIDBGPOINT_SMI_ENTER:     return "SMI_ENTER";
     1378        case EFIDBGPOINT_SMI_EXIT:      return "SMI_EXIT";
     1379        case EFIDBGPOINT_GRAPHICS:      return "GRAPHICS";
     1380        case EFIDBGPOINT_DXE_AP:        return "DXE_AP";
     1381        default:
     1382            AssertFailed();
     1383            return "Unknown";
     1384    }
    11981385}
    11991386
     
    12391426                pThis->szMsg[pThis->iMsg] = '\0';
    12401427                if (pThis->iMsg)
    1241                 {
    12421428                    Log(("efi: %s\n", pThis->szMsg));
    1243 #ifdef DEVEFI_WITH_VBOXDBG_SCRIPT
    1244                     const char *pszVBoxDbg = strstr(pThis->szMsg, "VBoxDbg> ");
    1245                     if (pszVBoxDbg)
    1246                     {
    1247                         pszVBoxDbg += sizeof("VBoxDbg> ") - 1;
    1248 
    1249                         PRTSTREAM pStrm;
    1250                         int rc2 = RTStrmOpen("./DevEFI.VBoxDbg", "a", &pStrm);
    1251                         if (RT_SUCCESS(rc2))
    1252                         {
    1253                             RTStrmPutStr(pStrm, pszVBoxDbg);
    1254                             RTStrmPutCh(pStrm, '\n');
    1255                             RTStrmClose(pStrm);
    1256                         }
    1257                     }
    1258 #endif
    1259                 }
    12601429                pThis->iMsg = 0;
    12611430            }
     
    12801449                case EFI_PANIC_CMD_BAD_ORG: /* Legacy */
    12811450                case EFI_PANIC_CMD_THUNK_TRAP:
    1282                     LogRel(("EFI Panic: Unexpected trap!!\n"));
    1283 #ifdef VBOX_STRICT
     1451#ifdef IN_RING3
     1452                    LogRel(("EFI: Panic! Unexpected trap!!\n"));
     1453# ifdef VBOX_STRICT
    12841454                    return PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "EFI Panic: Unexpected trap during early bootstrap!\n");
     1455# else
     1456                    AssertReleaseMsgFailed(("Unexpected trap during early EFI bootstrap!!\n"));
     1457# endif
     1458                    break;
    12851459#else
    1286                     AssertReleaseMsgFailed(("Unexpected trap during early EFI bootstrap!!\n"));
     1460                    return VINF_IOM_R3_IOPORT_WRITE;
    12871461#endif
    1288                     break;
    12891462
    12901463                case EFI_PANIC_CMD_START_MSG:
     1464                    LogRel(("Receiving EFI panic...\n"));
    12911465                    pThis->iPanicMsg = 0;
    12921466                    pThis->szPanicMsg[0] = '\0';
     
    12941468
    12951469                case EFI_PANIC_CMD_END_MSG:
    1296                     LogRel(("EFI Panic: %s\n", pThis->szPanicMsg));
    1297 #ifdef VBOX_STRICT
     1470#ifdef IN_RING3
     1471                    LogRel(("EFI: Panic! %s\n", pThis->szPanicMsg));
     1472# ifdef VBOX_STRICT
    12981473                    return PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "EFI Panic: %s\n", pThis->szPanicMsg);
     1474# else
     1475                    return VERR_INTERNAL_ERROR;
     1476# endif
    12991477#else
    1300                     return VERR_INTERNAL_ERROR;
     1478                    return VINF_IOM_R3_IOPORT_WRITE;
    13011479#endif
     1480
    13021481
    13031482                default:
     
    13261505        }
    13271506
    1328         case EFI_VARIABLE_OP:
     1507        case EFI_PORT_VARIABLE_OP:
    13291508        {
    13301509            /* clear buffer index */
     
    13401519        }
    13411520
    1342         case EFI_VARIABLE_PARAM:
     1521        case EFI_PORT_VARIABLE_PARAM:
    13431522            rc = nvramWriteVariableParam(pThis, u32);
     1523            break;
     1524
     1525        case EFI_PORT_DEBUG_POINT:
     1526#ifdef IN_RING3
     1527            if (u32 > EFIDBGPOINT_INVALID && u32 < EFIDBGPOINT_END)
     1528            {
     1529                /* For now, just log it. */
     1530                static uint64_t s_cDbgPointLogged = 0;
     1531                if (s_cDbgPointLogged < 1024)
     1532                {
     1533                    s_cDbgPointLogged++;
     1534                    LogRel(("EFI: debug point %s\n", efiDbgPointName((EFIDBGPOINT)u32)));
     1535                }
     1536                rc = VINF_SUCCESS;
     1537            }
     1538            else
     1539                rc = PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Invalid debug point %#x\n", u32);
     1540            break;
     1541#else
     1542            return VINF_IOM_R3_IOPORT_WRITE;
     1543#endif
     1544
     1545        case EFI_PORT_IMAGE_EVENT:
     1546            rc = efiPortImageEventWrite(pThis, u32, cb);
    13441547            break;
    13451548
     
    14381641                LogRel(("EFI: Loaded invalid variable value length %#x\n", pEfiVar->cbValue));
    14391642            }
    1440             size_t cchVarName = RTStrNLen(pEfiVar->szName, sizeof(pEfiVar->szName));
     1643            uint32_t cchVarName = (uint32_t)RTStrNLen(pEfiVar->szName, sizeof(pEfiVar->szName));
    14411644            if (cchVarName >= sizeof(pEfiVar->szName))
    14421645            {
     
    15881791    pThis->iPanicMsg = 0;
    15891792    pThis->szPanicMsg[0] = '\0';
     1793
     1794#ifdef DEVEFI_WITH_VBOXDBG_SCRIPT
     1795    /*
     1796     * Zap the debugger script
     1797     */
     1798    RTFileDelete("./DevEFI.VBoxDbg");
     1799#endif
    15901800}
    15911801
     
    20002210
    20012211    //strcpy(pThis->szBootArgs, "-v keepsyms=1 io=0xf");
    2002     LogRel(("EFI boot args: %s\n", pThis->szBootArgs));
     2212    LogRel(("EFI: boot args = %s\n", pThis->szBootArgs));
    20032213
    20042214    /*
     
    20122222    if (pszDeviceProps)
    20132223    {
    2014         LogRel(("EFI device props: %s\n", pszDeviceProps));
     2224        LogRel(("EFI: device props = %s\n", pszDeviceProps));
    20152225        rc = efiParseDeviceString(pThis, pszDeviceProps);
    20162226        MMR3HeapFree(pszDeviceProps);
     
    20552265        pThis->cyUgaResolution = 768;
    20562266    }
    2057 
    2058 #ifdef DEVEFI_WITH_VBOXDBG_SCRIPT
    2059     /*
    2060      * Zap the debugger script
    2061      */
    2062     RTFileDelete("./DevEFI.VBoxDbg");
    2063 #endif
    20642267
    20652268    /*
  • trunk/src/VBox/Devices/EFI/DevEFI.h

    r48707 r48727  
    4141#define EFI_PORT_BASE           0xEF10
    4242/** The number of ports. */
    43 #define EFI_PORT_COUNT          0x0006
     43#define EFI_PORT_COUNT          0x0008
    4444
    4545
     
    117117#define VBOX_EFI_TOP_OF_STACK   0x300000
    118118
    119 #define EFI_VARIABLE_OP         (EFI_PORT_BASE+0x4)
    120 #define EFI_VARIABLE_PARAM      (EFI_PORT_BASE+0x5)
     119#define EFI_PORT_VARIABLE_OP    (EFI_PORT_BASE+0x4)
     120#define EFI_PORT_VARIABLE_PARAM (EFI_PORT_BASE+0x5)
    121121
    122122#define EFI_VARIABLE_OP_QUERY        0xdead0001
     
    156156} EFIVAROP;
    157157
     158
     159/** Debug point. */
     160#define EFI_PORT_DEBUG_POINT    (EFI_PORT_BASE + 0x6)
     161
     162/**
     163 * EFI debug points.
     164 */
     165typedef enum EFIDBGPOINT
     166{
     167    /** Invalid. */
     168    EFIDBGPOINT_INVALID = 0,
     169    /** DEBUG_AGENT_INIT_PREMEM_SEC. */
     170    EFIDBGPOINT_SEC_PREMEM = 1,
     171    /** DEBUG_AGENT_INIT_POST_SEC. */
     172    EFIDBGPOINT_SEC_POSTMEM,
     173    /** DEBUG_AGENT_INIT_DXE_CORE. */
     174    EFIDBGPOINT_DXE_CORE,
     175    /** DEBUG_AGENT_INIT_. */
     176    EFIDBGPOINT_SMM,
     177    /** DEBUG_AGENT_INIT_ENTER_SMI. */
     178    EFIDBGPOINT_SMI_ENTER,
     179    /** DEBUG_AGENT_INIT_EXIT_SMI. */
     180    EFIDBGPOINT_SMI_EXIT,
     181    /** DEBUG_AGENT_INIT_S3. */
     182    EFIDBGPOINT_GRAPHICS,
     183    /** DEBUG_AGENT_INIT_DXE_AP. */
     184    EFIDBGPOINT_DXE_AP,
     185    /** End of valid points. */
     186    EFIDBGPOINT_END,
     187    /** Blow up the type to 32-bits. */
     188    EFIDBGPOINT_32BIT_HACK = 0x7fffffff
     189} EFIDBGPOINT;
     190
     191
     192/** EFI image load or unload event. All writes are 32-bit writes. */
     193#define EFI_PORT_IMAGE_EVENT    (EFI_PORT_BASE + 0x7)
     194
     195/** @defgroup grp_devefi_image_evt  EFI Image Events (EFI_PORT_IMAGE_EVENT).
     196 *
     197 * The lower 8-bit of the values written to EFI_PORT_IMAGE_EVENT can be seen as
     198 * the command.  The start and complete commands does not have any additional
     199 * payload.  The other commands uses bit 8 thru 23 or 8 thru 15 to pass a value.
     200 *
     201 * @{ */
     202
     203/** The command mask. */
     204#define EFI_IMAGE_EVT_CMD_MASK                  UINT32_C(0x000000ff)
     205/** Get the payload value. */
     206#define EFI_IMAGE_EVT_GET_PAYLOAD(a_u32)        ((a_u32) >> 8)
     207/** Get the payload value as unsigned 16-bit. */
     208#define EFI_IMAGE_EVT_GET_PAYLOAD_U16(a_u32)    ( EFI_IMAGE_EVT_GET_PAYLOAD(a_u32) & UINT16_MAX )
     209/** Get the payload value as unsigned 8-bit. */
     210#define EFI_IMAGE_EVT_GET_PAYLOAD_U8(a_u32)     ( EFI_IMAGE_EVT_GET_PAYLOAD(a_u32) &  UINT8_MAX )
     211/** Combines a command and a payload value. */
     212#define EFI_IMAGE_EVT_MAKE(a_uCmd, a_uPayload)  ( ((a_uCmd) & UINT32_C(0xff)) | (uint32_t)((a_uPayload) << 8) )
     213
     214/** Invalid. */
     215#define EFI_IMAGE_EVT_CMD_INVALID               UINT32_C(0x00000000)
     216/** The event is complete. */
     217#define EFI_IMAGE_EVT_CMD_COMPLETE              UINT32_C(0x00000001)
     218/** Starts a 32-bit load event.  Requires name and address, size is optional. */
     219#define EFI_IMAGE_EVT_CMD_START_LOAD32          UINT32_C(0x00000002)
     220/** Starts a 64-bit load event.  Requires name and address, size is optional. */
     221#define EFI_IMAGE_EVT_CMD_START_LOAD64          UINT32_C(0x00000003)
     222/** Starts a 32-bit unload event. Requires name and address. */
     223#define EFI_IMAGE_EVT_CMD_START_UNLOAD32        UINT32_C(0x00000004)
     224/** Starts a 64-bit unload event. Requires name and address. */
     225#define EFI_IMAGE_EVT_CMD_START_UNLOAD64        UINT32_C(0x00000005)
     226
     227/** The command for writing to the second address register (64-bit).
     228 * Takes a 16-bit payload value.  The register value is shifted 16-bits
     229 * to the left and then the payload is ORed in. */
     230#define EFI_IMAGE_EVT_CMD_ADDR0                 UINT32_C(0x00000006)
     231/** The command for writing to the second address register (64-bit).
     232 * Takes a 16-bit payload value.  The register value is shifted 16-bits
     233 * to the left and then the payload is ORed in. */
     234#define EFI_IMAGE_EVT_CMD_ADDR1                 UINT32_C(0x00000007)
     235/** The command for writing to the first size register (64-bit).
     236 * Takes a 16-bit payload value.  The register value is shifted 16-bits
     237 * to the left and then the payload is ORed in. */
     238#define EFI_IMAGE_EVT_CMD_SIZE0                 UINT32_C(0x00000008)
     239/** The command for appending a character to the module name.
     240 * Takes a 7-bit payload value that.  The value is appended to the field if
     241 * there is room. */
     242#define EFI_IMAGE_EVT_CMD_NAME                  UINT32_C(0x00000009)
     243
    158244/** @} */
    159245
     246
     247/** @} */
     248
    160249#endif
  • trunk/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Include/X64/ProcessorBind.h

    r48674 r48727  
    122122  #endif
    123123
     124  #if !defined(UINT8_MAX) || !defined(VBOX) /* collides with iprt/stdint.h */
    124125  #define UINT8_MAX 0xff
     126  #endif
    125127
    126128#else
  • trunk/src/VBox/Devices/EFI/Firmware/Makefile.kmk

    r48674 r48727  
    186186include $(FILE_KBUILD_SUB_FOOTER)
    187187
     188#
     189# Incomplete list of dependencies relative.
     190#
     191VBOX_EFI_DEPENDENCIES = \
     192        $(VBOX_PATH_EFI_FIRMWARE)/../DevEFI.h \
     193       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c \
     194       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf \
     195       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.c \
     196       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf \
     197       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/VBoxPkg.dec \
     198       \
     199       $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkg.dec \
    188200
    189201#
     
    270282                -e 's,^DEFINE VS2010_BIN[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_BIN = $(PATH_TOOL_$(VBOX_VCC_TOOL))/bin,' \
    271283                -e 's,^DEFINE VS2010_DLL[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_DLL = DEF(VS2010_BIN),' \
     284                -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\)$(DOLLAR),\1 /Oy-,' \
    272285                --output $@ $<
     286#               -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\) /O1ib2 \(.*\)$(DOLLAR),\1 /Osi /GF /Gy \2 /Oy-,'
    273287else
    274288 $(error Unexpected VBOX_EFI_TOOL_CHAIN value "$(VBOX_EFI_TOOL_CHAIN)")
     
    280294                $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt \
    281295                $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/tools_def.txt \
    282                 $$(VBoxEfiResetVector-x86_1_TARGET)
     296                $$(VBoxEfiResetVector-x86_1_TARGET) \
     297                $(VBOX_EFI_DEPENDENCIES) \
     298                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgIa32.dsc \
     299                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgIa32.fdf
    283300        + $(VBOX_EFI_BUILD_CMD) \
    284301                --vbox-target-conf "$(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt" \
     
    326343                -e 's,^DEFINE VS2010_BIN[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_BIN = $(PATH_TOOL_$(VBOX_VCC_TOOL))/bin,' \
    327344                -e 's,^DEFINE VS2010_DLL[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_DLL = DEF(VS2010_BIN),' \
    328                 -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\) /X \(.*\)$(DOLLAR),\1 \2,' \
     345                -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\) /X \(.*\)$(DOLLAR),\1 \2 /Oy-,' \
    329346                --output $@ $<
    330347else
     
    336353                $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt \
    337354                $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt \
    338                 $$(VBoxEfiResetVector-amd64_1_TARGET)
     355                $$(VBoxEfiResetVector-amd64_1_TARGET) \
     356                $(VBOX_EFI_DEPENDENCIES) \
     357                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgX64.dsc \
     358                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgX64.fdf
    339359        + $(VBOX_EFI_BUILD_CMD) \
    340360                --vbox-target-conf "$(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt" \
  • trunk/src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseLib/BaseLib.inf

    r48674 r48727  
    299299  X86DisablePaging32.c
    300300
     301# VBox - enable this for non-optimized IA32 builds.
     302#  # Compiler helper (C RunTime) functions
     303#  ../../../StdLib/LibC/CRT/Ia32/llmul.c          | MSFT    # __allmul
     304#  ../../../StdLib/LibC/CRT/Ia32/llshl.c          | MSFT    # __allshl
     305#  ../../../StdLib/LibC/CRT/Ia32/ulldiv.c         | MSFT    # __aulldiv
     306#  ../../../StdLib/LibC/CRT/Ia32/ullrem.c         | MSFT    # __aullrem
     307#  ../../../StdLib/LibC/CRT/Ia32/ullshr.c         | MSFT    # __aullshr
     308#  ../../../StdLib/LibC/CRT/Ia32/lldiv.c          | MSFT    # __alldiv
     309#  ../../../StdLib/LibC/CRT/Ia32/llrem.c          | MSFT    # __allrem
     310#  ../../../StdLib/LibC/CRT/Ia32/lldvrm.c         | MSFT    # __alldvrm
     311#  ../../../StdLib/LibC/CRT/Ia32/ulldvrm.c        | MSFT    # __aulldvrm
     312# VBox - end
     313
    301314[Sources.X64]
    302315  X64/Thunk16.asm
     
    490503  gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength
    491504  gEfiMdePkgTokenSpaceGuid.PcdVerifyNodeInList
     505
     506# VBox - enable this for non-optimized IA32 builds.
     507#[BuildOptions]
     508# MSFT:*_*_*_CC_FLAGS = /GL-
     509# VBox - end
  • trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc

    r48674 r48727  
    114114  SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
    115115
     116!ifdef $(VBOX)
     117  PeCoffExtraActionLib|VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf
     118  DebugAgentLib|VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf
     119!else
    116120!ifdef $(SOURCE_DEBUG_ENABLE)
    117121  PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
     
    121125  DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
    122126!endif
     127!endif
    123128
    124129  ResetSystemLib|OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf
     
    134139  ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
    135140  ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf
     141!ifdef $(VBOX)
    136142!ifdef $(SOURCE_DEBUG_ENABLE)
    137143  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     144!endif
    138145!endif
    139146  HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
     
    177184  PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
    178185  ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
     186!ifdef $(VBOX)
    179187!ifdef $(SOURCE_DEBUG_ENABLE)
    180188  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     189!endif
    181190!endif
    182191
     
    193202  PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
    194203  ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
     204!ifdef $(VBOX)
    195205!ifdef $(SOURCE_DEBUG_ENABLE)
    196206  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
     207!endif
    197208!endif
    198209
  • trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc

    r48674 r48727  
    114114  LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
    115115
     116!ifdef $(VBOX)
     117  PeCoffExtraActionLib|VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf
     118  DebugAgentLib|VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf
     119!else
    116120!ifdef $(SOURCE_DEBUG_ENABLE)
    117121  PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
     
    121125  DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
    122126!endif
     127!endif
    123128
    124129  ResetSystemLib|OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf
     
    134139  ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
    135140  ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf
     141!ifdef $(VBOX)
    136142!ifdef $(SOURCE_DEBUG_ENABLE)
    137143  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     144!endif
    138145!endif
    139146  HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
     
    177184  PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
    178185  ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
     186!ifdef $(VBOX)
    179187!ifdef $(SOURCE_DEBUG_ENABLE)
    180188  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     189!endif
    181190!endif
    182191
     
    193202  PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
    194203  ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
     204!ifdef $(VBOX)
    195205!ifdef $(SOURCE_DEBUG_ENABLE)
    196206  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
     207!endif
    197208!endif
    198209
  • trunk/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c

    r48674 r48727  
    7979}
    8080
     81/**
     82 * Adds a character to the panic message.
     83 *
     84 * @param   ch          The ASCII char to add.
     85 */
     86static void
     87VBoxPanicMsgChar(int ch)
     88{
     89    ASMOutU16(EFI_PANIC_PORT, EFI_PANIC_CMD_MSG_FROM_CHAR(ch));
     90}
     91
     92/**
     93 * Adds a string to the panic message.
     94 *
     95 * @param   pszString   The string to add.
     96 */
     97static void
     98VBoxPanicMsgString(const char *pszString)
     99{
     100    char ch;
     101    while ((ch = *pszString++) != '\0')
     102        VBoxPanicMsgChar(ch);
     103}
     104
     105/**
     106 * Adds a unsigned decimal number to the panic message.
     107 *
     108 * @param   uValue      The value.
     109 */
     110static void
     111VBoxPanicMsgDecimalU32(uint32_t uValue)
     112{
     113    char     szTmp[32];
     114    unsigned off = sizeof(szTmp) - 1;
     115
     116    szTmp[off] = '\0';
     117    do
     118    {
     119        char chDigit = uValue % 10;
     120        uValue /= 10;
     121        szTmp[--off] = chDigit + '0';
     122    } while (uValue != 0 && off > 0);
     123
     124    VBoxPanicMsgString(&szTmp[off]);
     125}
    81126
    82127VOID EFIAPI
     
    85130    RTCCUINTREG SavedFlags = ASMIntDisableFlags();
    86131
    87     VBoxPrintString("EFI Assertion failed! File=");
    88     VBoxPrintString(FileName ? FileName : "<NULL>");
    89     VBoxPrintString(" line=0x");
    90     VBoxPrintHex(LineNumber, sizeof(LineNumber));
    91     VBoxPrintString("\nDescription: ");
    92     VBoxPrintString(Description ? Description : "<NULL>");
    93 
    94     ASMOutU8(EFI_PANIC_PORT, 2); /** @todo fix this. */
     132    ASMOutU8(EFI_PANIC_PORT, EFI_PANIC_CMD_START_MSG);
     133    VBoxPanicMsgString("EFI Assertion failed!"
     134                       "\nFile:  ");
     135    VBoxPanicMsgString(FileName ? FileName : "<NULL>");
     136    VBoxPanicMsgString("\nLine:  ");
     137    VBoxPanicMsgDecimalU32((uint32_t)LineNumber);
     138    VBoxPanicMsgString("\nEDescription: ");
     139    VBoxPanicMsgString(Description ? Description : "<NULL>");
     140    ASMOutU8(EFI_PANIC_PORT, EFI_PANIC_CMD_END_MSG);
    95141
    96142    ASMSetFlags(SavedFlags);
    97143}
    98144
    99 CHAR16* VBoxDebugDevicePath2Str(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
     145CHAR16 *VBoxDebugDevicePath2Str(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
    100146{
    101147#if 0
     
    116162}
    117163
    118 CHAR16* VBoxDebugHandleDevicePath2Str(IN EFI_HANDLE hHandle)
     164CHAR16 *VBoxDebugHandleDevicePath2Str(IN EFI_HANDLE hHandle)
    119165{
    120166#if 0
     
    143189#endif
    144190}
    145 CHAR16* VBoxDebugPrintDevicePath(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
     191CHAR16 *VBoxDebugPrintDevicePath(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
    146192{
    147193#if 0
  • trunk/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVariable/InitVariable.c

    r48674 r48727  
    5858    UINT32 idxBuffer = 0;
    5959    for (idxBuffer = 0; idxBuffer < cbBuffer; ++idxBuffer)
    60         pu8Buffer[idxBuffer] = ASMInU8(EFI_VARIABLE_OP);
     60        pu8Buffer[idxBuffer] = ASMInU8(EFI_PORT_VARIABLE_OP);
    6161    return idxBuffer;
    6262}
     
    6464DECLINLINE(void) VBoxWriteNVRAMU32Param(UINT32 u32CodeParam, UINT32 u32Param)
    6565{
    66     ASMOutU32(EFI_VARIABLE_OP, u32CodeParam);
    67     ASMOutU32(EFI_VARIABLE_PARAM, u32Param);
     66    ASMOutU32(EFI_PORT_VARIABLE_OP, u32CodeParam);
     67    ASMOutU32(EFI_PORT_VARIABLE_PARAM, u32Param);
    6868}
    6969
     
    7272    UINT32 idxParam = 0;
    7373    for (idxParam = 0; idxParam < cbParam; ++idxParam)
    74         ASMOutU8(EFI_VARIABLE_PARAM, pbParam[idxParam]);
     74        ASMOutU8(EFI_PORT_VARIABLE_PARAM, pbParam[idxParam]);
    7575    return idxParam;
    7676}
     
    8181    UINTN cwcName = StrLen(pwszName);
    8282
    83     ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
     83    ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
    8484    for (i = 0; i <= cwcName; i++)
    85         ASMOutU16(EFI_VARIABLE_PARAM, pwszName[i]);
     85        ASMOutU16(EFI_PORT_VARIABLE_PARAM, pwszName[i]);
    8686}
    8787
    8888DECLINLINE(UINT32) VBoxWriteNVRAMGuidParam(const EFI_GUID *pGuid)
    8989{
    90     ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
     90    ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
    9191    return VBoxWriteNVRAMByteArrayParam((UINT8 *)pGuid, sizeof(EFI_GUID));
    9292}
     
    9999    VBoxWriteNVRAMU32Param(EFI_VM_VARIABLE_OP_START, u32Operation);
    100100
    101     while ((u32Rc = ASMInU32(EFI_VARIABLE_OP)) == EFI_VARIABLE_OP_STATUS_BSY)
     101    while ((u32Rc = ASMInU32(EFI_PORT_VARIABLE_OP)) == EFI_VARIABLE_OP_STATUS_BSY)
    102102    {
    103103#if 0
     
    166166         */
    167167        UINT32 VarLen;
    168         ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE_LENGTH);
    169         VarLen = ASMInU32(EFI_VARIABLE_OP);
     168        ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE_LENGTH);
     169        VarLen = ASMInU32(EFI_PORT_VARIABLE_OP);
    170170        LogFlowFuncMarkVar(*DataSize, "%d");
    171171        LogFlowFuncMarkVar(VarLen, "%d");
     
    177177             */
    178178            *DataSize = VarLen;
    179             ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
     179            ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
    180180            VBoxReadNVRAM((UINT8 *)Data, VarLen);
    181181
    182182            if (Attributes)
    183183            {
    184                 ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_ATTRIBUTE);
    185                 *Attributes = ASMInU32(EFI_VARIABLE_OP);
     184                ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_ATTRIBUTE);
     185                *Attributes = ASMInU32(EFI_PORT_VARIABLE_OP);
    186186                LogFlowFuncMarkVar(Attributes, "%x");
    187187            }
     
    271271         */
    272272        UINT32      cwcName;
    273         ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_LENGTH_UTF16);
    274         cwcName = ASMInU32(EFI_VARIABLE_OP);
     273        ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_LENGTH_UTF16);
     274        cwcName = ASMInU32(EFI_PORT_VARIABLE_OP);
    275275        if ((cwcName + 1) * 2 <= *VariableNameSize) /* ASSUMES byte size is specified */
    276276        {
     
    280280             * Read back the result.
    281281             */
    282             ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
     282            ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
    283283            VBoxReadNVRAM((UINT8 *)VendorGuid, sizeof(EFI_GUID));
    284284
    285             ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
     285            ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
    286286            for (i = 0; i < cwcName; i++)
    287                 VariableName[i] = ASMInU16(EFI_VARIABLE_OP);
     287                VariableName[i] = ASMInU16(EFI_PORT_VARIABLE_OP);
    288288            VariableName[i] = '\0';
    289289
     
    356356    VBoxWriteNVRAMU32Param(EFI_VM_VARIABLE_OP_VALUE_LENGTH, (UINT32)DataSize);
    357357    /* fill value bytes */
    358     ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
     358    ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
    359359    VBoxWriteNVRAMByteArrayParam(Data, (UINT32)DataSize);
    360360    /* start fetch operation */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette