> -----Original Message-----
> From: Michael Brown [mailto:mc...@ipxe.org]
> Sent: Saturday, April 02, 2016 12:50 AM
> To: Laszlo Ersek; Dong, Eric; Bi, Dandan
> Cc: Justen, Jordan L; edk2-devel-01; Ard Biesheuvel
> Subject: Re: [edk2] HII incompatibility between edk2 and iPXE?
> 
> On 31/03/16 14:37, Michael Brown wrote:
> >> In a nutshell, I think iPXE should:
> >> - reflect the GUID / NAME / PATH triplet from the input to the output
> >> verbatim,
> >> - for each config knob <LabelN> requested, respond with
> >> <LabelN>=<ValueN>.
> >>
> >> (See also: "if a ConfigHdr is passed in with no request elements, all
> >> of the settings being abstracted for that particular ConfigHdr
> >> reference will be returned in the Results Field" -- but I think the
> >> iPXE code already handles that.)
> 
> It turns out that iPXE already does exactly what you describe as the
> correct behaviour here.  :)  We do reflect {GUID,NAME,PATH} verbatim.
> The ASSERT() happens only when EDK2 passes in a NULL Request.  iPXE
> currently returns the full list of settings being abstracted (as per the
> spec) but without any ConfigHdr, since we have no GUID, NAME or PATH to
> reflect back.
> 
> I note that OvmfPkg/PlatformDxe/Platform.c's ExtractConfig() handles a
> NULL Request by returning EFI_INVALID_PARAMETER.  This originates from
> HiiBlockToConfig(), which does:
> 
>    if (Block == NULL || ConfigRequest == NULL) {
>      *Progress = ConfigRequest;
>      return EFI_INVALID_PARAMETER;
>    }
> 
> This code in OvmfPkg/PlatformDxe/Platform.c seems to violate the spec,
> but seems to cause the rest of EDK2 to behave sensibly.  If I patch iPXE
> to violate the spec in the same way, by adding:
> 
>         if ( ! ( request && request[0] ) ) {
>                 DBGC ( snpdev, "SNPDEV %p ExtractConfig ignoring malformed "
>                        "request\n", snpdev );
>                 return EFI_INVALID_PARAMETER;
>         }
> 
> then I no longer get an ASSERT() from EDK2.
> 
> Should I apply the above patch to iPXE, to cause it to match the
> spec-violating (but non-crashing) behaviour of
> OvmfPkg/PlatformDxe/Platform.c?
> 
> 
> 
> On a separate but related note: The ConfigHdr portion of Request and
> Response seems to contain absolutely zero information by the time it
> reaches EFI_HII_CONFIG_ACCESS_PROTOCOL.  As far as I can tell, it is
> meaningful only to EFI_HII_CONFIG_ROUTING_PROTOCOL and a sensible API
> design would never have exposed it to EFI_HII_CONFIG_ACCESS_PROTOCOL
> instances.
> 
> Does the ConfigHdr have any meaning for EFI_HII_CONFIG_ACCESS_PROTOCOL,
> or is it just a pointless blob of noise?

The GUID/NAME value in the ConfigHdr is get from the storage used in this 
driver. If one driver has more than one storage, the Guid + Name specify which 
storage info will be return.

> 
> Michael
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to