Andrew:
  PeiCore extended report data includes two fields: DataHeader and Handle. But, 
it only uses PEIM File Handle. I agree DataHeader field is redundant.  No one 
uses it. It should not cause any issue. So, I think it is safe to keep it as 
it. To reduce confuse, we can add some comments for the unused DataHeader.

Thanks
Liming
From: Andrew Fish [mailto:[email protected]]
Sent: Saturday, March 29, 2014 11:33 AM
To: [email protected]
Subject: [edk2] MdeModulePkg maintainer, I'm confused by code in the PEI Core 
dispatcher? It looks wrong?

It looks like the PEI Core report status code calls for (EFI_SOFTWARE_PEI_CORE 
| EFI_SW_PC_INIT_BEGIN)  and (EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT_END) both 
pass in random, unitialized data? I don't understand the point of 
PEIM_FILE_HANDLE_EXTENDED_DATA. The DataHeader is not filled in by the call, as 
you can see in ReportStatusCodeEx(), the header data is allocated locally and 
is not passed in?

It looks to me like  the DXE Core just passed in data directly? Why is the PEI 
Core defining  PEIM_FILE_HANDLE_EXTENDED_DATA, and doing this? Maybe I'm 
missing something?

Thanks

Andrew Fish

https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c

typedef struct {

  EFI_STATUS_CODE_DATA  DataHeader;

  EFI_HANDLE            Handle;

} PEIM_FILE_HANDLE_EXTENDED_DATA;

                ExtendedData.Handle = (EFI_HANDLE)PeimFileHandle;



                REPORT_STATUS_CODE_WITH_EXTENDED_DATA (

                  EFI_PROGRESS_CODE,

                  (EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT_BEGIN),

                  (VOID *)(&ExtendedData),

                  sizeof (ExtendedData)

                  );


https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdeModulePkg/Library/PeiReportStatusCodeLib/ReportStatusCodeLib.c


EFI_STATUS

EFIAPI

ReportStatusCodeEx (

  IN EFI_STATUS_CODE_TYPE   Type,

  IN EFI_STATUS_CODE_VALUE  Value,

  IN UINT32                 Instance,

  IN CONST EFI_GUID         *CallerId          OPTIONAL,

  IN CONST EFI_GUID         *ExtendedDataGuid  OPTIONAL,

  IN CONST VOID             *ExtendedData      OPTIONAL,

  IN UINTN                  ExtendedDataSize

  )

{

  EFI_STATUS_CODE_DATA  *StatusCodeData;

  UINT64                Buffer[(MAX_EXTENDED_DATA_SIZE / sizeof (UINT64)) + 1];



  //

  // If ExtendedData is NULL and ExtendedDataSize is not zero, then ASSERT().

  //

  ASSERT (!((ExtendedData == NULL) && (ExtendedDataSize != 0)));

  //

  // If ExtendedData is not NULL and ExtendedDataSize is zero, then ASSERT().

  //

  ASSERT (!((ExtendedData != NULL) && (ExtendedDataSize == 0)));



  if (ExtendedDataSize > (MAX_EXTENDED_DATA_SIZE - sizeof 
(EFI_STATUS_CODE_DATA))) {

    //

    // The local variable Buffer not large enough to hold the extended data 
associated

    // with the status code being reported.

    //

    DEBUG ((EFI_D_ERROR, "Status code extended data is too large to be 
reported!\n"));

    return EFI_OUT_OF_RESOURCES;

  }

  StatusCodeData = (EFI_STATUS_CODE_DATA  *) Buffer;

  StatusCodeData->HeaderSize = (UINT16) sizeof (EFI_STATUS_CODE_DATA);

  StatusCodeData->Size = (UINT16) ExtendedDataSize;

  if (ExtendedDataGuid == NULL) {

    ExtendedDataGuid = &gEfiStatusCodeSpecificDataGuid;

  }

  CopyGuid (&StatusCodeData->Type, ExtendedDataGuid);

  if (ExtendedData != NULL) {

    CopyMem (StatusCodeData + 1, ExtendedData, ExtendedDataSize);

  }

  if (CallerId == NULL) {

    CallerId = &gEfiCallerIdGuid;

  }

  return InternalReportStatusCode (Type, Value, Instance, CallerId, 
StatusCodeData);

}



https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c

        REPORT_STATUS_CODE_WITH_EXTENDED_DATA (

          EFI_PROGRESS_CODE,

          (EFI_SOFTWARE_DXE_CORE | EFI_SW_PC_INIT_BEGIN),

          &DriverEntry->ImageHandle,

          sizeof (DriverEntry->ImageHandle)

          );

        ASSERT (DriverEntry->ImageHandle != NULL);



        Status = CoreStartImage (DriverEntry->ImageHandle, NULL, NULL);

------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to