Example #1
0
/**
  Free OneOfOption map list.
  
  @param OneOfOptionMapListHead Pointer to list header of OneOfOptionMap list.

**/
VOID
DestoryOneOfOptionMap (
  IN LIST_ENTRY     *OneOfOptionMapListHead
  )
{
  ONE_OF_OPTION_MAP         *Map;
  ONE_OF_OPTION_MAP_ENTRY   *MapEntry;
  LIST_ENTRY                *Link;
  LIST_ENTRY                *Link2;

  while (!IsListEmpty (OneOfOptionMapListHead)) {
    Link = GetFirstNode (OneOfOptionMapListHead);
    
    Map = ONE_OF_OPTION_MAP_FROM_LINK (Link);

    while (!IsListEmpty (&Map->OneOfOptionMapEntryListHead)) {
      Link2 = GetFirstNode (&Map->OneOfOptionMapEntryListHead);
      
      MapEntry = ONE_OF_OPTION_MAP_ENTRY_FROM_LINK (Link2);

      RemoveEntryList (Link2);

      FreePool (MapEntry);
    }

    RemoveEntryList (Link);
    FreePool (Map);
  }
}
Example #2
0
/**
  Get the ONE_OF_OPTION_MAP_ENTRY for a QuestionId that invokes the 
  EFI_FORM_CALLBACK_PROTOCOL.Callback. The information is needed as
  the callback mechanism for EFI_IFR_ONE_OF_OPTION is changed from 
  EFI_IFR_ONE_OF_OPTION in Framework IFR. Check EFI_IFR_GUID_OPTIONKEY
  for detailed information.

  @param ThunkContext   The Thunk Context.
  @param QuestionId     The Question Id.
  @param Type           The Question Type.
  @param Value          The One Of Option's value.

  @return The ONE_OF_OPTION_MAP_ENTRY found.
  @retval NULL If no entry is found.
**/
ONE_OF_OPTION_MAP_ENTRY *
GetOneOfOptionMapEntry (
  IN  HII_THUNK_CONTEXT              *ThunkContext,
  IN  EFI_QUESTION_ID                QuestionId,
  IN  UINT8                          Type,
  IN  EFI_IFR_TYPE_VALUE             *Value
  )
{
  LIST_ENTRY              *Link;
  LIST_ENTRY              *Link2;
  ONE_OF_OPTION_MAP_ENTRY *OneOfOptionMapEntry;
  ONE_OF_OPTION_MAP       *OneOfOptionMap;
  FORM_BROWSER_FORMSET    *FormSet;

  FormSet = ThunkContext->FormSet;

  Link = GetFirstNode (&FormSet->OneOfOptionMapListHead);

  while (!IsNull (&FormSet->OneOfOptionMapListHead, Link)) {
    OneOfOptionMap = ONE_OF_OPTION_MAP_FROM_LINK(Link);
    if (OneOfOptionMap->QuestionId == QuestionId) {
      ASSERT (OneOfOptionMap->ValueType == Type);

      Link2 = GetFirstNode (&OneOfOptionMap->OneOfOptionMapEntryListHead);

      while (!IsNull (&OneOfOptionMap->OneOfOptionMapEntryListHead, Link2)) {
        OneOfOptionMapEntry = ONE_OF_OPTION_MAP_ENTRY_FROM_LINK (Link2);

        if (CompareMem (Value, &OneOfOptionMapEntry->Value, sizeof (EFI_IFR_TYPE_VALUE)) == 0) {
          return OneOfOptionMapEntry;
        }

        Link2 = GetNextNode (&OneOfOptionMap->OneOfOptionMapEntryListHead, Link2);
      }
    }

    Link = GetNextNode (&FormSet->OneOfOptionMapListHead, Link);
  }


  return NULL;
}
Example #3
0
/**
  Find the question's OneOfOptionMap list in FormSet 
  based on the input question Id. 
  
  @param FormSet     FormSet context.
  @param QuestionId  Unique ID to specicy the question in FormSet.
  
  @return the found OneOfOptionMap list. If not found, NULL will return.
**/
LIST_ENTRY *
GetOneOfOptionMapEntryListHead (
  IN CONST FORM_BROWSER_FORMSET  *FormSet,
  IN       UINT16                 QuestionId
  )
{
  LIST_ENTRY            *Link;
  ONE_OF_OPTION_MAP     *Map;

  Link = GetFirstNode (&FormSet->OneOfOptionMapListHead);

  while (!IsNull (&FormSet->OneOfOptionMapListHead, Link)) {
    Map = ONE_OF_OPTION_MAP_FROM_LINK (Link);
    if (QuestionId == Map->QuestionId) {
      return &Map->OneOfOptionMapEntryListHead;
    }
    Link = GetNextNode (&FormSet->OneOfOptionMapListHead, Link);
  }
  
  return NULL;
}