Liming, The PI Specifications only defines the use of SMM_DEPEX for SMM drivers. Not for FV images.
If an FV image has an SMM_DEPEX, then I think this section should be ignored. We could add an ASSERT() to the DXE Core if an SMM_DEPEX is present, so an invalid FV can be fixed during dev/debug. Mike > -----Original Message----- > From: Gao, Liming > Sent: Monday, February 1, 2016 6:11 PM > To: Kinney, Michael D <michael.d.kin...@intel.com>; Andrew Fish > <af...@apple.com>; > edk2-devel@lists.01.org <edk2-de...@ml01.01.org>; Kinney, Michael D > <michael.d.kin...@intel.com> > Subject: RE: [edk2] Dxe Core support for EFI_SECTION_PEI_DEPEX section. > > Mike: > I agree to update DXE dispatcher to directly handle FV image with > PEI_DEPEX. If FV > image with SMM_DEPEX, SMM dispatcher should handle it. Once SMM_DEPEX is > satisfied, SMM > core can trig event and let DxeCore install FV protocol for it. > > Thanks > Liming > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Kinney, Michael > D > Sent: Tuesday, February 2, 2016 9:04 AM > To: Andrew Fish; edk2-devel@lists.01.org; Kinney, Michael D > Subject: Re: [edk2] Dxe Core support for EFI_SECTION_PEI_DEPEX section. > > Andrew, > > I agree that it looks like we can improve the logic here. > > 1) PEI Dispatcher: The logic looks correct to me. It only looks for a > section of type > EFI_SECTION_PEI_DEPEX. > > 2) DXE Dispatcher: The current logic ignores an FV if there is either a PEI > depex or an > SMM depex present. I think it would be safe to remove the checks for the PEI > depex and > the SMM depex, so it only pays attention to a DXE depex. If no DXE depex is > present, > then the FV can be evaluated immediately. BTW, I did look at the history. > It appears > that this aggressive filter has been in place since the first commit to the > DXE Core to > support FV scoped depex expressions. > > 3) SMM Dispatcher: Does not evaluate depex associated with FV. Instead, it > depends on > the DXE Dispatcher to notify SMM Dispatcher when the SMM dispatcher should > look in FVs > for SMM drivers to dispatch. So I do not think any logic changes are > required in SMM. > > Best regards, > > Mike > > > -----Original Message----- > > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > > Andrew Fish > > Sent: Monday, February 1, 2016 8:34 AM > > To: edk2-devel@lists.01.org <edk2-de...@ml01.01.org> > > Subject: [edk2] Dxe Core support for EFI_SECTION_PEI_DEPEX section. > > > > I have an FV and I'd like to have PEI and DXE code in it. The code that I > > need to > > access at PEI Time (DXE Core) is a compressed file in the FV. The code that > > only > needs > > to be accessed at DXE time is in a compressed FV. By default PEI will try to > decompress > > the FV Section, so I added a EFI_SECTION_PEI_DEPEX of FALSE to prevent > > this. To my > > surprise this prevented the FV from being dispatched in DXE. > > > > I don't see any language in the PI spec that calls out this behavior. I > > think we > should > > remove the checks for EFI_SECTION_PEI_DEPEX, and maybe even > > EFI_SECTION_SMM_DEPEX. I > > think it is a better design to have the FV prevent the dispatch from the > > phase(s) it > is > > discovered in if that is the intent. > > > > So for my example I added: > > SECTION PEI_DEPEX_EXP = {FALSE} > > > > If you had a FV that showed up in DXE, but was for SMM you could: > > SECTION DXE_DEPEX_EXP = {FALSE} > > > > This is the code I'm talking about: > > MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c > > > > // > > // Check if this EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE file has > > PEI depex > > section. > > // > > DepexBuffer = NULL; > > SizeOfBuffer = 0; > > Status = Fv->ReadSection ( > > Fv, > > &NameGuid, > > EFI_SECTION_PEI_DEPEX, > > 0, > > &DepexBuffer, > > &SizeOfBuffer, > > &AuthenticationStatus > > ); > > if (!EFI_ERROR (Status)) { > > // > > // If PEI depex section is found, this FV image will be > > ignored in DXE > > phase. > > // Now, DxeCore doesn't support FV image with more one type > > DEPEX > > section. > > // > > FreePool (DepexBuffer); > > continue; > > } > > > > > > Thanks, > > > > Andrew Fish > > > > PS This logic also exists. > > > > // > > // Check if this EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE file has > > SMM depex > > section. > > // > > DepexBuffer = NULL; > > SizeOfBuffer = 0; > > Status = Fv->ReadSection ( > > Fv, > > &NameGuid, > > EFI_SECTION_SMM_DEPEX, > > 0, > > &DepexBuffer, > > &SizeOfBuffer, > > &AuthenticationStatus > > ); > > if (!EFI_ERROR (Status)) { > > // > > // If SMM depex section is found, this FV image will be > > ignored in DXE > > phase. > > // Now, DxeCore doesn't support FV image with more one type > > DEPEX > > section. > > // > > FreePool (DepexBuffer); > > continue; > > } > > > > _______________________________________________ > > edk2-devel mailing list > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel