Changeset 43143 in vbox
- Timestamp:
- Sep 1, 2012 3:32:37 AM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 80516
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/DevOVMF.cpp
r43131 r43143 61 61 typedef struct { 62 62 RTLISTNODE List; 63 EFIVAROP enmOp;64 uint32_t u32Status;65 63 RTUUID uuid; 66 64 char szVariableName[1024]; … … 69 67 uint32_t cbValue; 70 68 uint32_t u32Attribute; 71 uint32_t idxOpBuffer;72 69 } EFIVAR, *PEFIVAR; 73 70 … … 144 141 uint32_t u32UgaHorisontal; 145 142 uint32_t u32UgaVertical; 146 uint32_t idxVariableName; 147 EFIVAR OperationVarOp; 148 RTLISTANCHOR NVRAMVariableList; 149 PEFIVAR pCurrentVarOp; 143 struct { 144 uint32_t idxVariableName; 145 EFIVAROP enmOp; 146 uint32_t u32Status; 147 uint32_t idxOpBuffer; 148 EFIVAR OperationVarOp; 149 RTLISTANCHOR NVRAMVariableList; 150 PEFIVAR pCurrentVarOp; 151 } NVRAM; 150 152 struct { 151 153 PPDMIBASE pDrvBase; … … 177 179 PEFIVAR pEfiVar = NULL; 178 180 LogFlowFunc(("pszVariableName:%s, pUuid:%RTuuid\n", pszVariableName, pUuid)); 179 RTListForEach((PRTLISTNODE)&pThis->NVRAM VariableList, pEfiVar, EFIVAR, List)181 RTListForEach((PRTLISTNODE)&pThis->NVRAM.NVRAMVariableList, pEfiVar, EFIVAR, List) 180 182 { 181 183 LogFlowFunc(("pEfiVar:%p\n", pEfiVar)); … … 221 223 break; 222 224 } 223 RTListAppend((PRTLISTNODE)&pThis->NVRAM VariableList, &pEfiVar->List);225 RTListAppend((PRTLISTNODE)&pThis->NVRAM.NVRAMVariableList, &pEfiVar->List); 224 226 } 225 227 if ( RT_FAILURE(rc) … … 237 239 pThis->Lun0.pNvramDown->pfnFlushNvramStorage(pThis->Lun0.pNvramDown); 238 240 239 RTListForEach((PRTLISTNODE)&pThis->NVRAM VariableList, pEfiVar, EFIVAR, List)241 RTListForEach((PRTLISTNODE)&pThis->NVRAM.NVRAMVariableList, pEfiVar, EFIVAR, List) 240 242 { 241 243 pThis->Lun0.pNvramDown->pfnStoreNvramValue(pThis->Lun0.pNvramDown, … … 383 385 #endif 384 386 case EFI_VARIABLE_OP: 385 switch (pThis-> OperationVarOp.enmOp)387 switch (pThis->NVRAM.enmOp) 386 388 { 387 389 case EFI_VM_VARIABLE_OP_START: 388 390 /* @todo: nop ? */ 389 *pu32 = pThis-> OperationVarOp.u32Status;391 *pu32 = pThis->NVRAM.u32Status; 390 392 break; 391 393 case EFI_VM_VARIABLE_OP_END: … … 394 396 break; 395 397 case EFI_VM_VARIABLE_OP_GUID: 396 *pu32 = pThis-> OperationVarOp.uuid.au8[pThis->OperationVarOp.idxOpBuffer];397 pThis-> OperationVarOp.idxOpBuffer++;398 *pu32 = pThis->NVRAM.OperationVarOp.uuid.au8[pThis->NVRAM.idxOpBuffer]; 399 pThis->NVRAM.idxOpBuffer++; 398 400 break; 399 401 case EFI_VM_VARIABLE_OP_ATTRIBUTE: 400 *pu32 = pThis-> OperationVarOp.u32Attribute;402 *pu32 = pThis->NVRAM.OperationVarOp.u32Attribute; 401 403 break; 402 404 case EFI_VM_VARIABLE_OP_NAME: 403 *pu32 = pThis-> OperationVarOp.szVariableName[pThis->OperationVarOp.idxOpBuffer];404 pThis-> OperationVarOp.idxOpBuffer++;405 *pu32 = pThis->NVRAM.OperationVarOp.szVariableName[pThis->NVRAM.idxOpBuffer]; 406 pThis->NVRAM.idxOpBuffer++; 405 407 break; 406 408 case EFI_VM_VARIABLE_OP_NAME_LENGTH: 407 *pu32 = pThis-> OperationVarOp.cbVariableName;409 *pu32 = pThis->NVRAM.OperationVarOp.cbVariableName; 408 410 break; 409 411 case EFI_VM_VARIABLE_OP_VALUE: 410 //LogFlowFunc(("OperationVarOp:idxOpBuffer:%d\n", pThis->OperationVarOp.idxOpBuffer)); 411 *pu32 = pThis->OperationVarOp.au8Value[pThis->OperationVarOp.idxOpBuffer]; 412 pThis->OperationVarOp.idxOpBuffer++; 412 *pu32 = pThis->NVRAM.OperationVarOp.au8Value[pThis->NVRAM.idxOpBuffer]; 413 pThis->NVRAM.idxOpBuffer++; 413 414 break; 414 415 case EFI_VM_VARIABLE_OP_VALUE_LENGTH: 415 LogFlowFunc(("cbValue: %d\n", pThis->OperationVarOp.cbValue)); 416 *pu32 = pThis->OperationVarOp.cbValue; 416 *pu32 = pThis->NVRAM.OperationVarOp.cbValue; 417 417 break; 418 418 default: 419 419 break; 420 420 } 421 //*pu32 = pThis->OperationVarOp.u32Status;422 421 return VINF_SUCCESS; 423 422 case EFI_VARIABLE_PARAM: … … 564 563 break; 565 564 } 566 pThis-> OperationVarOp.idxOpBuffer = 0;567 pThis-> OperationVarOp.enmOp = (EFIVAROP)u32;565 pThis->NVRAM.idxOpBuffer = 0; 566 pThis->NVRAM.enmOp = (EFIVAROP)u32; 568 567 } 569 568 break; 570 569 case EFI_VARIABLE_PARAM: 571 570 { 572 switch (pThis-> OperationVarOp.enmOp)571 switch (pThis->NVRAM.enmOp) 573 572 { 574 573 case EFI_VM_VARIABLE_OP_START: 575 574 { 576 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_BSY;575 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_BSY; 577 576 switch (u32) 578 577 { … … 580 579 { 581 580 LogRel(("EFI: variable lookup %RTuuid, %s\n", 582 &pThis-> OperationVarOp.uuid,583 pThis-> OperationVarOp.szVariableName));584 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_BSY;581 &pThis->NVRAM.OperationVarOp.uuid, 582 pThis->NVRAM.OperationVarOp.szVariableName)); 583 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_BSY; 585 584 PEFIVAR pEfiVar = NULL; 586 memset(pThis-> OperationVarOp.au8Value, 0, 1024);585 memset(pThis->NVRAM.OperationVarOp.au8Value, 0, 1024); 587 586 int nvramRc = nvramLookupVariableByUuidAndName( 588 587 pThis, 589 pThis-> OperationVarOp.szVariableName,590 &pThis-> OperationVarOp.uuid,588 pThis->NVRAM.OperationVarOp.szVariableName, 589 &pThis->NVRAM.OperationVarOp.uuid, 591 590 &pEfiVar); 592 591 if (RT_SUCCESS(nvramRc)) 593 592 { 594 pThis-> OperationVarOp.u32Attribute = pEfiVar->u32Attribute;595 pThis-> OperationVarOp.cbVariableName = pEfiVar->cbVariableName;596 pThis-> OperationVarOp.cbValue = pEfiVar->cbValue;597 memcpy(pThis-> OperationVarOp.au8Value,593 pThis->NVRAM.OperationVarOp.u32Attribute = pEfiVar->u32Attribute; 594 pThis->NVRAM.OperationVarOp.cbVariableName = pEfiVar->cbVariableName; 595 pThis->NVRAM.OperationVarOp.cbValue = pEfiVar->cbValue; 596 memcpy(pThis->NVRAM.OperationVarOp.au8Value, 598 597 pEfiVar->au8Value, pEfiVar->cbValue); 599 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_OK;600 pThis-> pCurrentVarOp = pEfiVar;598 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK; 599 pThis->NVRAM.pCurrentVarOp = pEfiVar; 601 600 LogFlowFunc(("OperationVar: au8Value:%.*Rhxs\n", 602 pThis-> OperationVarOp.cbValue,603 pThis-> OperationVarOp.au8Value));601 pThis->NVRAM.OperationVarOp.cbValue, 602 pThis->NVRAM.OperationVarOp.au8Value)); 604 603 } 605 604 else 606 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_NOT_FOUND;605 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_NOT_FOUND; 607 606 } 608 607 break; 609 608 case EFI_VARIABLE_OP_ADD: 610 609 { 611 LogRel(("EFI: variable add %RTuuid, %s\n", &pThis-> OperationVarOp.uuid, pThis->OperationVarOp.szVariableName));610 LogRel(("EFI: variable add %RTuuid, %s\n", &pThis->NVRAM.OperationVarOp.uuid, pThis->NVRAM.OperationVarOp.szVariableName)); 612 611 PEFIVAR pEfiVar = NULL; 613 612 LogFlowFunc(("OperationVar: au8Value:%.*Rhxs\n", 614 pThis-> OperationVarOp.cbValue,615 pThis-> OperationVarOp.au8Value));613 pThis->NVRAM.OperationVarOp.cbValue, 614 pThis->NVRAM.OperationVarOp.au8Value)); 616 615 int nvramRc = nvramLookupVariableByUuidAndName( 617 616 pThis, 618 pThis-> OperationVarOp.szVariableName,619 &pThis-> OperationVarOp.uuid,617 pThis->NVRAM.OperationVarOp.szVariableName, 618 &pThis->NVRAM.OperationVarOp.uuid, 620 619 &pEfiVar); 621 620 if (RT_SUCCESS(nvramRc)) … … 626 625 pEfiVar->cbValue, 627 626 pEfiVar->au8Value)); 628 if (pThis-> OperationVarOp.cbValue == 0)627 if (pThis->NVRAM.OperationVarOp.cbValue == 0) 629 628 { 630 629 /* delete */ 631 630 RTListNodeRemove(&pEfiVar->List); 632 631 RTMemFree(pEfiVar); 633 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_OK;632 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK; 634 633 } 635 634 else 636 635 { 637 636 /* update */ 638 pEfiVar->cbValue = pThis-> OperationVarOp.cbValue;639 memcpy(pEfiVar->au8Value, pThis-> OperationVarOp.au8Value, pEfiVar->cbValue);640 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_OK;637 pEfiVar->cbValue = pThis->NVRAM.OperationVarOp.cbValue; 638 memcpy(pEfiVar->au8Value, pThis->NVRAM.OperationVarOp.au8Value, pEfiVar->cbValue); 639 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK; 641 640 } 642 641 } 643 642 else 644 643 { 645 if (pThis-> OperationVarOp.cbValue != 0)644 if (pThis->NVRAM.OperationVarOp.cbValue != 0) 646 645 { 647 646 pEfiVar = (PEFIVAR)RTMemAllocZ(sizeof(EFIVAR)); 648 647 if (!pEfiVar) 649 648 { 650 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_ERROR;649 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_ERROR; 651 650 break; 652 651 } … … 654 653 else 655 654 { 656 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_OK;655 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK; 657 656 break; 658 657 } 659 658 660 memcpy(pEfiVar, &pThis-> OperationVarOp, sizeof(EFIVAR));659 memcpy(pEfiVar, &pThis->NVRAM.OperationVarOp, sizeof(EFIVAR)); 661 660 RTListInit(&pEfiVar->List); 662 RTListAppend(&pThis->NVRAM VariableList, &pEfiVar->List);663 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_OK;661 RTListAppend(&pThis->NVRAM.NVRAMVariableList, &pEfiVar->List); 662 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK; 664 663 } 665 664 } … … 667 666 case EFI_VARIABLE_OP_QUERY_NEXT: 668 667 { 669 PEFIVAR pEfiVar = RTListNodeGetNext(&pThis-> pCurrentVarOp->List, EFIVAR, List);668 PEFIVAR pEfiVar = RTListNodeGetNext(&pThis->NVRAM.pCurrentVarOp->List, EFIVAR, List); 670 669 if (pEfiVar) 671 670 { 672 memcpy(&pThis-> OperationVarOp, pEfiVar, sizeof(EFIVAR));673 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_OK;671 memcpy(&pThis->NVRAM.OperationVarOp, pEfiVar, sizeof(EFIVAR)); 672 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_OK; 674 673 } 675 674 else 676 pThis-> OperationVarOp.u32Status = EFI_VARIABLE_OP_STATUS_NOT_FOUND;675 pThis->NVRAM.u32Status = EFI_VARIABLE_OP_STATUS_NOT_FOUND; 677 676 } 678 677 break; … … 687 686 break; 688 687 case EFI_VM_VARIABLE_OP_GUID: 689 pThis-> OperationVarOp.uuid.au8[pThis->OperationVarOp.idxOpBuffer] = (uint8_t)u32;690 pThis-> OperationVarOp.idxOpBuffer++;688 pThis->NVRAM.OperationVarOp.uuid.au8[pThis->NVRAM.idxOpBuffer] = (uint8_t)u32; 689 pThis->NVRAM.idxOpBuffer++; 691 690 break; 692 691 case EFI_VM_VARIABLE_OP_ATTRIBUTE: 693 pThis-> OperationVarOp.u32Attribute = u32;692 pThis->NVRAM.OperationVarOp.u32Attribute = u32; 694 693 break; 695 694 case EFI_VM_VARIABLE_OP_NAME: 696 pThis-> OperationVarOp.szVariableName[pThis->OperationVarOp.idxOpBuffer] = (uint8_t)u32;697 pThis-> OperationVarOp.idxOpBuffer++;695 pThis->NVRAM.OperationVarOp.szVariableName[pThis->NVRAM.idxOpBuffer] = (uint8_t)u32; 696 pThis->NVRAM.idxOpBuffer++; 698 697 break; 699 698 case EFI_VM_VARIABLE_OP_NAME_LENGTH: 700 pThis-> OperationVarOp.cbVariableName = u32;701 memset(pThis-> OperationVarOp.szVariableName, 0, 1024);699 pThis->NVRAM.OperationVarOp.cbVariableName = u32; 700 memset(pThis->NVRAM.OperationVarOp.szVariableName, 0, 1024); 702 701 break; 703 702 case EFI_VM_VARIABLE_OP_VALUE: 704 pThis-> OperationVarOp.au8Value[pThis->OperationVarOp.idxOpBuffer] = (uint8_t)u32;705 pThis-> OperationVarOp.idxOpBuffer++;703 pThis->NVRAM.OperationVarOp.au8Value[pThis->NVRAM.idxOpBuffer] = (uint8_t)u32; 704 pThis->NVRAM.idxOpBuffer++; 706 705 break; 707 706 case EFI_VM_VARIABLE_OP_VALUE_LENGTH: 708 pThis-> OperationVarOp.cbValue = u32;709 memset(pThis-> OperationVarOp.au8Value, 0, 1024);707 pThis->NVRAM.OperationVarOp.cbValue = u32; 708 memset(pThis->NVRAM.OperationVarOp.au8Value, 0, 1024); 710 709 break; 711 710 default: … … 825 824 nvramStore(pThis); 826 825 PEFIVAR pEfiVar = NULL; 827 while (!RTListIsEmpty(&pThis->NVRAM VariableList))828 { 829 pEfiVar = RTListNodeGetNext(&pThis->NVRAM VariableList, EFIVAR, List);826 while (!RTListIsEmpty(&pThis->NVRAM.NVRAMVariableList)) 827 { 828 pEfiVar = RTListNodeGetNext(&pThis->NVRAM.NVRAMVariableList, EFIVAR, List); 830 829 RTListNodeRemove(&pEfiVar->List); 831 830 RTMemFree(pEfiVar); … … 1156 1155 uuid.Gen.u16TimeHiAndVersion = RT_H2BE_U16(uuid.Gen.u16TimeHiAndVersion); 1157 1156 memcpy(&pThis->aUuid, &uuid, sizeof pThis->aUuid); 1158 RTListInit((PRTLISTNODE)&pThis->NVRAM VariableList);1157 RTListInit((PRTLISTNODE)&pThis->NVRAM.NVRAMVariableList); 1159 1158 1160 1159
Note:
See TracChangeset
for help on using the changeset viewer.