]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/Pei/Variable.c
Add comments and DoxyGen format for these files.
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / Pei / Variable.c
index d1165e1fe599af6407e76e8e14a9d1e08dd46b92..517d38130bd72b4d5538785d4b1a316a19e15247 100644 (file)
@@ -1,6 +1,9 @@
-/*++\r
+/** @file\r
+\r
+  Implement ReadOnly Variable Services required by PEIM and install\r
+  PI ReadOnly Varaiable2 PPI. These services operates the non volatile storage space.\r
 \r
-Copyright (c) 2006 - 2007 Intel Corporation. <BR>\r
+Copyright (c) 2006 - 2008 Intel Corporation. <BR>\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -10,13 +13,7 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 Module Name:\r
 \r
-  Variable.c\r
-\r
-Abstract:\r
-\r
-  PEIM to provide the Variable functionality\r
-\r
---*/\r
+**/\r
 \r
 \r
 #include "Variable.h"\r
@@ -121,9 +118,10 @@ Returns:
 }\r
 \r
 STATIC\r
-VARIABLE_HEADER *\r
-GetNextVariablePtr (\r
-  IN VARIABLE_HEADER  *Variable\r
+BOOLEAN\r
+EFIAPI\r
+IsValidVariableHeader (\r
+  IN  VARIABLE_HEADER   *Variable\r
   )\r
 /*++\r
 \r
@@ -132,7 +130,7 @@ Routine Description:
   This code checks if variable header is valid or not.\r
 \r
 Arguments:\r
-  Variable       Pointer to the Variable Header.\r
+  Variable              Pointer to the Variable Header.\r
 \r
 Returns:\r
   TRUE            Variable header is valid.\r
@@ -140,37 +138,166 @@ Returns:
 \r
 --*/\r
 {\r
-  return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) GET_VARIABLE_DATA_PTR (Variable) + DATASIZE_OF_VARIABLE (Variable) + GET_PAD_SIZE (DATASIZE_OF_VARIABLE (Variable)));\r
+  if (Variable == NULL || Variable->StartId != VARIABLE_DATA ) {\r
+    return FALSE;\r
+  }\r
+\r
+  return TRUE;\r
 }\r
 \r
-STATIC\r
-BOOLEAN\r
-EFIAPI\r
-IsValidVariableHeader (\r
+\r
+UINTN\r
+NameSizeOfVariable (\r
   IN  VARIABLE_HEADER   *Variable\r
   )\r
 /*++\r
 \r
 Routine Description:\r
 \r
-  This code checks if variable header is valid or not.\r
+  This code gets the size of name of variable.\r
+\r
+Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  UINTN               Size of variable in bytes\r
+\r
+--*/\r
+{\r
+  if (Variable->State    == (UINT8) (-1) ||\r
+      Variable->DataSize == (UINT32) -1 ||\r
+      Variable->NameSize == (UINT32) -1 ||\r
+      Variable->Attributes == (UINT32) -1) {\r
+    return 0;\r
+  }\r
+  return (UINTN) Variable->NameSize;\r
+}\r
+\r
+UINTN\r
+DataSizeOfVariable (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the size of name of variable.\r
 \r
 Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  UINTN               Size of variable in bytes\r
+\r
+--*/\r
+{\r
+  if (Variable->State    == (UINT8)  -1 ||\r
+      Variable->DataSize == (UINT32) -1 ||\r
+      Variable->NameSize == (UINT32) -1 ||\r
+      Variable->Attributes == (UINT32) -1) {\r
+    return 0;\r
+  }\r
+  return (UINTN) Variable->DataSize;\r
+}\r
+\r
+CHAR16 *\r
+GetVariableNamePtr (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the pointer to the variable name.\r
+\r
+Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  CHAR16*              Pointer to Variable Name\r
+\r
+--*/\r
+{\r
+\r
+  return (CHAR16 *) (Variable + 1);\r
+}\r
+\r
+\r
+UINT8 *\r
+GetVariableDataPtr (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the pointer to the variable data.\r
+\r
+Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  UINT8*              Pointer to Variable Data\r
+\r
+--*/\r
+{\r
+  UINTN Value;\r
+  \r
+  //\r
+  // Be careful about pad size for alignment\r
+  //\r
+  Value =  (UINTN) GetVariableNamePtr (Variable);\r
+  Value += NameSizeOfVariable (Variable);\r
+  Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));\r
+\r
+  return (UINT8 *) Value;\r
+}\r
+\r
+VARIABLE_HEADER *\r
+GetNextVariablePtr (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the pointer to the next variable header.\r
+\r
+Arguments:\r
+\r
   Variable              Pointer to the Variable Header.\r
 \r
 Returns:\r
-  TRUE            Variable header is valid.\r
-  FALSE           Variable header is not valid.\r
+\r
+  VARIABLE_HEADER*      Pointer to next variable header.\r
 \r
 --*/\r
 {\r
-  if (Variable == NULL || Variable->StartId != VARIABLE_DATA ) {\r
-    return FALSE;\r
+  UINTN Value;\r
+\r
+  if (!IsValidVariableHeader (Variable)) {\r
+    return NULL;\r
   }\r
 \r
-  return TRUE;\r
+  Value =  (UINTN) GetVariableDataPtr (Variable);\r
+  Value += DataSizeOfVariable (Variable);\r
+  Value += GET_PAD_SIZE (DataSizeOfVariable (Variable));\r
+\r
+  //\r
+  // Be careful about pad size for alignment\r
+  //\r
+  return (VARIABLE_HEADER *) HEADER_ALIGN (Value);\r
 }\r
 \r
+\r
 STATIC\r
 VARIABLE_STORE_STATUS\r
 EFIAPI\r
@@ -244,6 +371,8 @@ Returns:
 \r
 --*/\r
 {\r
+  VOID  *Point;\r
+\r
   if (VariableName[0] == 0) {\r
     PtrTrack->CurrPtr = Variable;\r
     return EFI_SUCCESS;\r
@@ -258,8 +387,9 @@ Returns:
         (((INT32 *) VendorGuid)[2] == ((INT32 *) &Variable->VendorGuid)[2]) &&\r
         (((INT32 *) VendorGuid)[3] == ((INT32 *) &Variable->VendorGuid)[3])\r
         ) {\r
-      ASSERT (NAMESIZE_OF_VARIABLE (Variable) != 0);\r
-      if (!CompareMem (VariableName, GET_VARIABLE_NAME_PTR (Variable), NAMESIZE_OF_VARIABLE (Variable))) {\r
+      ASSERT (NameSizeOfVariable (Variable) != 0);\r
+      Point = (VOID *) GetVariableNamePtr (Variable);\r
+      if (!CompareMem (VariableName, Point, NameSizeOfVariable (Variable))) {\r
         PtrTrack->CurrPtr = Variable;\r
         return EFI_SUCCESS;\r
       }\r
@@ -455,7 +585,7 @@ Returns:
   EFI_PEI_SERVICES        **PeiServices;\r
 \r
   PeiServices = GetPeiServicesTablePointer ();\r
-  if (VariableName == NULL || VariableGuid == NULL) {\r
+  if (VariableName == NULL || VariableGuid == NULL || DataSize == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
   //\r
@@ -468,9 +598,16 @@ Returns:
   //\r
   // Get data size\r
   //\r
-  VarDataSize = DATASIZE_OF_VARIABLE (Variable.CurrPtr);\r
+  VarDataSize = DataSizeOfVariable (Variable.CurrPtr);\r
   if (*DataSize >= VarDataSize) {\r
-    (*PeiServices)->CopyMem (Data, GET_VARIABLE_DATA_PTR (Variable.CurrPtr), VarDataSize);\r
+    //\r
+    // PO-TKW: Address one checking in this place\r
+    //\r
+    if (Data == NULL) {\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+\r
+    (*PeiServices)->CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr), VarDataSize);\r
 \r
     if (Attributes != NULL) {\r
       *Attributes = Variable.CurrPtr->Attributes;\r
@@ -525,7 +662,7 @@ Returns:
   EFI_PEI_SERVICES        **PeiServices;\r
 \r
   PeiServices = GetPeiServicesTablePointer ();\r
-  if (VariableName == NULL) {\r
+  if (VariableName == NULL || VariableGuid == NULL || VariableNameSize == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -544,11 +681,11 @@ Returns:
   while (!(Variable.CurrPtr >= Variable.EndPtr || Variable.CurrPtr == NULL)) {\r
     if (IsValidVariableHeader (Variable.CurrPtr)) {\r
       if (Variable.CurrPtr->State == VAR_ADDED) {\r
-        ASSERT (NAMESIZE_OF_VARIABLE (Variable.CurrPtr) != 0);\r
+        ASSERT (NameSizeOfVariable (Variable.CurrPtr) != 0);\r
 \r
-        VarNameSize = (UINTN) NAMESIZE_OF_VARIABLE (Variable.CurrPtr);\r
+        VarNameSize = (UINTN) NameSizeOfVariable (Variable.CurrPtr);\r
         if (VarNameSize <= *VariableNameSize) {\r
-          (*PeiServices)->CopyMem (VariableName, GET_VARIABLE_NAME_PTR (Variable.CurrPtr), VarNameSize);\r
+          (*PeiServices)->CopyMem (VariableName, GetVariableNamePtr (Variable.CurrPtr), VarNameSize);\r
 \r
           (*PeiServices)->CopyMem (VariableGuid, &Variable.CurrPtr->VendorGuid, sizeof (EFI_GUID));\r
 \r