[edk2-devel] [PATCH v10 1/1] ShellPkg/DynamicCommand: add HttpDynamicCommand

Laszlo Ersek lersek at redhat.com
Wed Sep 9 10:50:47 UTC 2020


On 09/08/20 23:04, Vladimir Olovyannikov wrote:
>> -----Original Message-----
>> From: Laszlo Ersek <lersek at redhat.com>
>> Sent: Monday, September 7, 2020 2:37 AM
>> To: Vladimir Olovyannikov <vladimir.olovyannikov at broadcom.com>;
>> Rabeda, Maciej <maciej.rabeda at linux.intel.com>; devel at edk2.groups.io;
>> Zhichao Gao <zhichao.gao at intel.com>; Ray Ni <ray.ni at intel.com>
>> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud at arm.com>; Jiaxin Wu
>> <jiaxin.wu at intel.com>; Siyuan Fu <siyuan.fu at intel.com>; Liming Gao
>> <liming.gao at intel.com>; Nd <nd at arm.com>
>> Subject: Re: [PATCH v10 1/1] ShellPkg/DynamicCommand: add
>> HttpDynamicCommand
>>
>> On 09/04/20 19:55, Vladimir Olovyannikov wrote:
>>
>>> There is also another issue with the TimebaseLib: inconsistency in
>>> return values of the EfiTimeToEpoch (returns UINT32, should return
>>> UINTN, as Zhichao pointed out earlier in the previous
>>> HttpDynamicCommand patchset).
>>> If this one is fixed, I can just use the TimeBaseLib.h header for
>>> constants.
>>
>> Consuming TimeBaseLib.h in this patch would be really nice.
> OK, if this can be fixed, I will definitely use TimeBaseLib.h header for
> constants, and will drop
> duplicate definitions in Http.c/Http.h
>>
>> There are two EfiTimeToEpoch() call sites in edk2:
>>
>> ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c
>> EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
>>
>> The latter stores the return value in a UINTN variable, so that seems OK.
>> The
>> former is a bit messier, but it seems to ensure that the result fits in 32
>> bits for
>> HW reasons anyway:
>>
>>   // Because the PL031 is a 32-bit counter counting seconds,
>>   // the maximum time span is just over 136 years.
>>   // Time is stored in Unix Epoch format, so it starts in 1970,
>>   // Therefore it can not exceed the year 2106.
>>   if ((Time->Year < 1970) || (Time->Year >= 2106)) {
>>     return EFI_UNSUPPORTED;
>>   }
>> ...
>>   EpochSeconds = EfiTimeToEpoch (Time);
>> ...
>>   MmioWrite32 (mPL031RtcBase + PL031_RTC_LR_LOAD_REGISTER,
>> EpochSeconds);
>>
>> So I think we'd need two patches:
>>
>> (1) add an explicit (UINT32) cast to the EfiTimeToEpoch() call in
>> "ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c",
>>
>> (2) change the return value to UINTN in
>> "EmbeddedPkg/Include/Library/TimeBaseLib.h" and
>> "EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.c".
>>
>> Hmm wait... There are five more call sites in edk2-platforms. :( OK, I
>> give up
>> here. Sorry.
> OK, so what are the next steps, what do you suggest?

You'd have to audit, and if necessary, clean up, the EfiTimeToEpoch()
call sites in edk2-platforms. And you'd need to establish a global order
between the patch series (plural) such that both edk2 and edk2-platforms
should build at any stage across those series.

Thanks
Laszlo

> I saw today that unused macros like SEC_PER_MONTH, etc. were removed from
> TimeBaseLib.h.
> 
> Thank you,
> Vladimir
>>
>> Laszlo
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#65158): https://edk2.groups.io/g/devel/message/65158
Mute This Topic: https://groups.io/mt/76576293/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list