Lines Matching defs:NVRAM

65  * EFI NVRAM variable.
88 /** Pointer to an EFI NVRAM variable. */
90 /** Pointer to a const EFI NVRAM variable. */
92 /** Pointer to an EFI NVRAM variable pointer. */
96 * NVRAM state.
115 /** Variable buffered used both when adding and querying NVRAM variables.
229 /** NVRAM state variables. */
230 NVRAMDESC NVRAM;
233 * NVRAM port - LUN\#0.
237 /** The base interface we provide the NVRAM driver. */
239 /** The NVRAM driver base interface. */
241 /** The NVRAM interface provided by the driver. */
304 while (!RTListIsEmpty(&pThis->NVRAM.VarList))
306 PEFIVAR pEfiVar = RTListNodeGetNext(&pThis->NVRAM.VarList, EFIVAR, ListNode);
311 pThis->NVRAM.pCurVar = NULL;
315 * This function looks up variable in NVRAM list.
326 if ( pThis->NVRAM.pCurVar
327 && pThis->NVRAM.pCurVar->cchName == cchVariableName
328 && memcmp(pThis->NVRAM.pCurVar->szName, pszVariableName, cchVariableName + 1) == 0
329 && RTUuidCompare(&pThis->NVRAM.pCurVar->uuid, pUuid) == 0
332 *ppEfiVar = pThis->NVRAM.pCurVar;
341 RTListForEach(&pThis->NVRAM.VarList, pEfiVar, EFIVAR, ListNode)
375 RTListForEach(&pThis->NVRAM.VarList, pCurVar, EFIVAR, ListNode)
391 RTListAppend(&pThis->NVRAM.VarList, &pEfiVar->ListNode);
438 pThis->NVRAM.cVariables++;
447 * Let the NVRAM driver store the internal NVRAM variable list.
459 RTListForEach(&pThis->NVRAM.VarList, pEfiVar, EFIVAR, ListNode)
469 RTListForEach(&pThis->NVRAM.VarList, pEfiVar, EFIVAR, ListNode)
507 RT_ZERO(pThis->NVRAM.VarOpBuf.abValue);
510 RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
511 pThis->NVRAM.VarOpBuf.uuid = pEfiVar->uuid;
512 pThis->NVRAM.VarOpBuf.cchName = pEfiVar->cchName;
513 memcpy(pThis->NVRAM.VarOpBuf.szName, pEfiVar->szName, pEfiVar->cchName); /* no need for + 1. */
514 pThis->NVRAM.VarOpBuf.fAttributes = pEfiVar->fAttributes;
515 pThis->NVRAM.VarOpBuf.cbValue = pEfiVar->cbValue;
516 memcpy(pThis->NVRAM.VarOpBuf.abValue, pEfiVar->abValue, pEfiVar->cbValue);
517 pThis->NVRAM.pCurVar = pEfiVar;
518 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK;
519 LogFlow(("EFI: Variable query -> %RTuuid::'%s' (%d) abValue=%.*Rhxs\n", &pThis->NVRAM.VarOpBuf.uuid,
520 pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.cchName,
521 pThis->NVRAM.VarOpBuf.cbValue, pThis->NVRAM.VarOpBuf.abValue));
529 &pThis->NVRAM.VarOpBuf.uuid, pThis->NVRAM.VarOpBuf.szName));
530 RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
531 pThis->NVRAM.VarOpBuf.fAttributes = 0;
532 pThis->NVRAM.VarOpBuf.cbValue = 0;
533 pThis->NVRAM.VarOpBuf.cchName = 0;
534 pThis->NVRAM.pCurVar = NULL;
535 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_NOT_FOUND;
547 Log(("EFI_VARIABLE_OP_QUERY: %RTuuid::'%s'\n", &pThis->NVRAM.VarOpBuf.uuid, pThis->NVRAM.VarOpBuf.szName));
551 pThis->NVRAM.VarOpBuf.szName,
552 &pThis->NVRAM.VarOpBuf.uuid,
568 Log(("EFI_VARIABLE_OP_QUERY_NEXT: pCurVar=%p\n", pThis->NVRAM.pCurVar));
569 PEFIVAR pEfiVar = pThis->NVRAM.pCurVar;
571 pEfiVar = RTListGetNext(&pThis->NVRAM.VarList, pEfiVar, EFIVAR, ListNode);
573 pEfiVar = RTListGetFirst(&pThis->NVRAM.VarList, EFIVAR, ListNode);
587 &pThis->NVRAM.VarOpBuf.uuid, pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.fAttributes,
588 pThis->NVRAM.VarOpBuf.cbValue, pThis->NVRAM.VarOpBuf.abValue));
593 int rc = RTStrValidateEncoding(pThis->NVRAM.VarOpBuf.szName);
595 LogRel(("EFI: Badly encoded variable name: %.*Rhxs\n", pThis->NVRAM.VarOpBuf.cchName + 1, pThis->NVRAM.VarOpBuf.szName));
598 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
601 pThis->NVRAM.VarOpBuf.cchName = (uint32_t)RTStrNLen(pThis->NVRAM.VarOpBuf.szName, sizeof(pThis->NVRAM.VarOpBuf.szName));
608 pThis->NVRAM.VarOpBuf.szName,
609 &pThis->NVRAM.VarOpBuf.uuid,
617 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_RO;
622 if (pThis->NVRAM.VarOpBuf.cbValue == 0)
627 LogRel(("EFI: Deleting variable %RTuuid::'%s'\n", &pThis->NVRAM.VarOpBuf.uuid, pThis->NVRAM.VarOpBuf.szName));
629 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK;
630 pThis->NVRAM.cVariables--;
632 if (pThis->NVRAM.pCurVar == pEfiVar)
633 pThis->NVRAM.pCurVar = NULL;
642 LogRel(("EFI: Replacing variable %RTuuid::'%s' fAttrib=%#x cbValue=%#x\n", &pThis->NVRAM.VarOpBuf.uuid,
643 pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.fAttributes, pThis->NVRAM.VarOpBuf.cbValue));
644 pEfiVar->fAttributes = pThis->NVRAM.VarOpBuf.fAttributes;
645 pEfiVar->cbValue = pThis->NVRAM.VarOpBuf.cbValue;
646 memcpy(pEfiVar->abValue, pThis->NVRAM.VarOpBuf.abValue, pEfiVar->cbValue);
647 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK;
650 else if (pThis->NVRAM.VarOpBuf.cbValue == 0)
654 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK;
656 else if (pThis->NVRAM.cVariables < EFI_VARIABLE_MAX)
661 LogRel(("EFI: Adding variable %RTuuid::'%s' fAttrib=%#x cbValue=%#x\n", &pThis->NVRAM.VarOpBuf.uuid,
662 pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.fAttributes, pThis->NVRAM.VarOpBuf.cbValue));
666 pEfiVar->uuid = pThis->NVRAM.VarOpBuf.uuid;
667 pEfiVar->cchName = pThis->NVRAM.VarOpBuf.cchName;
668 memcpy(pEfiVar->szName, pThis->NVRAM.VarOpBuf.szName, pEfiVar->cchName); /* The buffer is zeroed, so skip '\0'. */
669 pEfiVar->fAttributes = pThis->NVRAM.VarOpBuf.fAttributes;
670 pEfiVar->cbValue = pThis->NVRAM.VarOpBuf.cbValue;
671 memcpy(pEfiVar->abValue, pThis->NVRAM.VarOpBuf.abValue, pEfiVar->cbValue);
674 pThis->NVRAM.cVariables++;
675 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK;
678 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
685 LogRelMax(5, ("EFI: Too many variables (%RTuuid::'%s' fAttrib=%#x cbValue=%#x)\n", &pThis->NVRAM.VarOpBuf.uuid,
686 pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.fAttributes, pThis->NVRAM.VarOpBuf.cbValue));
687 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
691 LogFunc(("cVariables=%u u32Status=%#x\n", pThis->NVRAM.cVariables, pThis->NVRAM.u32Status));
705 switch (pThis->NVRAM.enmOp)
720 pThis->NVRAM.pCurVar = NULL;
721 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK;
729 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
736 Log2(("EFI_VM_VARIABLE_OP_GUID[%#x]=%#x\n", pThis->NVRAM.offOpBuffer, u32Value));
737 if (pThis->NVRAM.offOpBuffer < sizeof(pThis->NVRAM.VarOpBuf.uuid))
738 pThis->NVRAM.VarOpBuf.uuid.au8[pThis->NVRAM.offOpBuffer++] = (uint8_t)u32Value;
742 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
748 pThis->NVRAM.VarOpBuf.fAttributes = u32Value;
752 Log2(("EFI_VM_VARIABLE_OP_NAME[%#x]=%#x\n", pThis->NVRAM.offOpBuffer, u32Value));
753 if (pThis->NVRAM.offOpBuffer < pThis->NVRAM.VarOpBuf.cchName)
754 pThis->NVRAM.VarOpBuf.szName[pThis->NVRAM.offOpBuffer++] = (uint8_t)u32Value;
756 Assert(pThis->NVRAM.VarOpBuf.szName[sizeof(pThis->NVRAM.VarOpBuf.szName) - 1] == 0);
760 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
766 RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
767 if (u32Value < sizeof(pThis->NVRAM.VarOpBuf.szName))
768 pThis->NVRAM.VarOpBuf.cchName = u32Value;
772 u32Value, sizeof(pThis->NVRAM.VarOpBuf.szName) - 1));
773 pThis->NVRAM.VarOpBuf.cchName = sizeof(pThis->NVRAM.VarOpBuf.szName) - 1;
774 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
776 Assert(pThis->NVRAM.offOpBuffer == 0);
781 Log2(("EFI_VM_VARIABLE_OP_NAME_UTF16[%#x]=%#x\n", pThis->NVRAM.offOpBuffer, u32Value));
783 if (pThis->NVRAM.offOpBuffer == 0)
784 RT_ZERO(pThis->NVRAM.VarOpBuf.szName);
786 if (pThis->NVRAM.offOpBuffer + cbUtf8 < sizeof(pThis->NVRAM.VarOpBuf.szName))
788 RTStrPutCp(&pThis->NVRAM.VarOpBuf.szName[pThis->NVRAM.offOpBuffer], u32Value);
789 pThis->NVRAM.offOpBuffer += cbUtf8;
792 Assert(pThis->NVRAM.VarOpBuf.szName[sizeof(pThis->NVRAM.VarOpBuf.szName) - 1] == 0);
796 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
802 Log2(("EFI_VM_VARIABLE_OP_VALUE[%#x]=%#x\n", pThis->NVRAM.offOpBuffer, u32Value));
803 if (pThis->NVRAM.offOpBuffer < pThis->NVRAM.VarOpBuf.cbValue)
804 pThis->NVRAM.VarOpBuf.abValue[pThis->NVRAM.offOpBuffer++] = (uint8_t)u32Value;
808 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
814 RT_ZERO(pThis->NVRAM.VarOpBuf.abValue);
815 if (u32Value <= sizeof(pThis->NVRAM.VarOpBuf.abValue))
816 pThis->NVRAM.VarOpBuf.cbValue = u32Value;
820 u32Value, sizeof(pThis->NVRAM.VarOpBuf.abValue)));
821 pThis->NVRAM.VarOpBuf.cbValue = sizeof(pThis->NVRAM.VarOpBuf.abValue);
822 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
824 Assert(pThis->NVRAM.offOpBuffer == 0);
828 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;
829 LogRel(("EFI: Unexpected variable operation %#x\n", pThis->NVRAM.enmOp));
844 switch (pThis->NVRAM.enmOp)
847 *pu32 = pThis->NVRAM.u32Status;
851 if (pThis->NVRAM.offOpBuffer < sizeof(pThis->NVRAM.VarOpBuf.uuid) && cb == 1)
852 *pu32 = pThis->NVRAM.VarOpBuf.uuid.au8[pThis->NVRAM.offOpBuffer++];
864 *pu32 = pThis->NVRAM.VarOpBuf.fAttributes;
869 if (pThis->NVRAM.offOpBuffer <= pThis->NVRAM.VarOpBuf.cchName && cb == 1)
870 *pu32 = pThis->NVRAM.VarOpBuf.szName[pThis->NVRAM.offOpBuffer++];
882 *pu32 = pThis->NVRAM.VarOpBuf.cchName;
887 if (pThis->NVRAM.offOpBuffer <= pThis->NVRAM.VarOpBuf.cchName && cb == 2)
889 char const *psz1 = &pThis->NVRAM.VarOpBuf.szName[pThis->NVRAM.offOpBuffer];
894 Log2(("EFI_VM_VARIABLE_OP_NAME_UTF16[%u] => %#x (+%d)\n", pThis->NVRAM.offOpBuffer, *pu32, psz2 - psz1));
895 pThis->NVRAM.offOpBuffer += psz2 - psz1;
909 *pu32 = (uint32_t)RTStrUniLen(pThis->NVRAM.VarOpBuf.szName);
913 if (pThis->NVRAM.offOpBuffer < pThis->NVRAM.VarOpBuf.cbValue && cb == 1)
914 *pu32 = pThis->NVRAM.VarOpBuf.abValue[pThis->NVRAM.offOpBuffer++];
926 *pu32 = pThis->NVRAM.VarOpBuf.cbValue;
1026 pHlp->pfnPrintf(pHlp, "NVRAM variables: %u\n", pThis->NVRAM.cVariables);
1028 RTListForEach(&pThis->NVRAM.VarList, pEfiVar, EFIVAR, ListNode)
1514 pThis->NVRAM.offOpBuffer = 0;
1515 pThis->NVRAM.enmOp = (EFIVAROP)u32;
1560 RTListForEach(&pThis->NVRAM.VarList, pEfiVar, EFIVAR, ListNode)
1564 Assert(idUniqueSavedState == pThis->NVRAM.cVariables);
1566 pThis->NVRAM.idUniqueCurVar = pThis->NVRAM.pCurVar
1567 ? pThis->NVRAM.pCurVar->idUniqueSavedState
1571 * Save the NVRAM state.
1573 SSMR3PutStructEx(pSSM, &pThis->NVRAM, sizeof(NVRAMDESC), 0, g_aEfiNvramDescField, NULL);
1574 SSMR3PutStructEx(pSSM, &pThis->NVRAM.VarOpBuf, sizeof(EFIVAR), 0, g_aEfiVariableDescFields, NULL);
1579 RTListForEach(&pThis->NVRAM.VarList, pEfiVar, EFIVAR, ListNode)
1608 * Load the NVRAM state.
1610 int rc = SSMR3GetStructEx(pSSM, &pThis->NVRAM, sizeof(NVRAMDESC), 0, g_aEfiNvramDescField, NULL);
1612 pThis->NVRAM.pCurVar = NULL;
1614 rc = SSMR3GetStructEx(pSSM, &pThis->NVRAM.VarOpBuf, sizeof(EFIVAR), 0, g_aEfiVariableDescFields, NULL);
1620 pThis->NVRAM.pCurVar = NULL;
1621 Assert(RTListIsEmpty(&pThis->NVRAM.VarList));
1622 RTListInit(&pThis->NVRAM.VarList);
1623 for (uint32_t i = 0; i < pThis->NVRAM.cVariables; i++)
1656 RTListAppend(&pThis->NVRAM.VarList, &pEfiVar->ListNode);
1660 if (pThis->NVRAM.idUniqueCurVar == pEfiVar->idUniqueSavedState)
1661 pThis->NVRAM.pCurVar = pEfiVar;
2076 RTListInit(&pThis->NVRAM.VarList);
2194 * NVRAM processing.
2309 rc = PDMDevHlpDBGFInfoRegister(pDevIns, "nvram", "Dumps the NVRAM variables.\n", efiInfoNvram);
2335 "LUN#0 - NVRAM port",