Пример #1
0
/**
  This code gets the pointer to the next variable header.

  @param  StoreInfo         Pointer to variable store info structure.
  @param  Variable          Pointer to the Variable Header.
  @param  VariableHeader    Pointer to the Variable Header that has consecutive content.

  @return  A VARIABLE_HEADER* pointer to next variable header.

**/
VARIABLE_HEADER *
GetNextVariablePtr (
  IN  VARIABLE_STORE_INFO   *StoreInfo,
  IN  VARIABLE_HEADER       *Variable,
  IN  VARIABLE_HEADER       *VariableHeader
  )
{
  EFI_PHYSICAL_ADDRESS  TargetAddress;
  EFI_PHYSICAL_ADDRESS  SpareAddress;
  UINTN                 Value;

  Value =  (UINTN) GetVariableDataPtr (Variable, VariableHeader, StoreInfo->AuthFlag);
  Value += DataSizeOfVariable (VariableHeader, StoreInfo->AuthFlag);
  Value += GET_PAD_SIZE (DataSizeOfVariable (VariableHeader, StoreInfo->AuthFlag));
  //
  // Be careful about pad size for alignment
  //
  Value = HEADER_ALIGN (Value);

  if (StoreInfo->FtwLastWriteData != NULL) {
    TargetAddress = StoreInfo->FtwLastWriteData->TargetAddress;
    SpareAddress = StoreInfo->FtwLastWriteData->SpareAddress;
    if (((UINTN) Variable < (UINTN) TargetAddress) && (Value >= (UINTN) TargetAddress)) {
      //
      // Next variable is in spare block.
      //
      Value = (UINTN) SpareAddress + (Value - (UINTN) TargetAddress);
    }
  }

  return (VARIABLE_HEADER *) Value;
}
Пример #2
0
/**
  This code gets the pointer to the variable data.

  @param   Variable  Pointer to the Variable Header.

  @return  A UINT8* pointer to Variable Data.

**/
UINT8 *
GetVariableDataPtr (
    IN  VARIABLE_HEADER   *Variable
)
{
    UINTN Value;

    //
    // Be careful about pad size for alignment
    //
    Value =  (UINTN) GetVariableNamePtr (Variable);
    Value += NameSizeOfVariable (Variable);
    Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));

    return (UINT8 *) Value;
}
Пример #3
0
/**
  This code gets the pointer to the next variable header.

  @param  Variable  Pointer to the Variable Header.

  @return  A VARIABLE_HEADER* pointer to next variable header.

**/
VARIABLE_HEADER *
GetNextVariablePtr (
    IN  VARIABLE_HEADER   *Variable
)
{
    UINTN Value;

    if (!IsValidVariableHeader (Variable)) {
        return NULL;
    }

    Value =  (UINTN) GetVariableDataPtr (Variable);
    Value += DataSizeOfVariable (Variable);
    Value += GET_PAD_SIZE (DataSizeOfVariable (Variable));

    //
    // Be careful about pad size for alignment
    //
    return (VARIABLE_HEADER *) HEADER_ALIGN (Value);
}