On Mon, 11 Sept 2023 at 07:30, Laszlo Ersek <ler...@redhat.com> wrote: > > On 9/8/23 01:58, Sean Brogan wrote: > > > > On 9/7/2023 1:54 PM, Laszlo Ersek wrote: > >> On 9/7/23 19:50, Sean Brogan wrote: > >>> I would argue that by declaring that your library class supports type > >>> DXE_CORE (or any core type) that you have declared you understand the > >>> uniqueness of the environment and have accounted for it. > >>> > >>> For instances that support DXE_CORE or MM_CORE module types we often use > >>> a global variable (to the library) to determine if the init routine has > >>> been completed. This does require a single byte check on each serial > >>> message write (hot path) but given all the code on that path this is not > >>> noticeable in performance measurements. In the case below this pattern > >>> could be used by the FdtPL011SerialPortLib to detect if it's init > >>> routine has been called. > >> Good point, but then I still claim that the "init check in each API" > >> should be done in a dedicated "DxeCoreDebugLibSerialPort" instance, and > >> not in a SerialPortLib instance. Here's why: > >> > >> (1) The SerialPortLib *class* requires SerialPortInitialize() to be > >> called before the other APIs. > > > > Where do you see this? Looking at the file here: > > edk2/MdePkg/Include/Library/SerialPortLib.h at master ยท tianocore/edk2 > > (github.com) > > <https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Library/SerialPortLib.h> > > I don't see that. I don't necessarily disagree with you but I am just > > trying to find out where this is documented. > > I consider this an implicit requirement, from the first two sentences > (and from the fact that the function is declared at the top of the > header) -- "Initialize the serial device hardware. If no initialization > is required, then return RETURN_SUCCESS." >
Agreed. Even if the header file does not spell it out literally, it is implied: SerialPortInitialize() needs to be implemented even if no initialization is required, in which case the routine does nothing before returning SUCCESS. So the caller cannot distinguish a library class implementation that requires initialization from one that does not, and it can only assume that calling SerialPortInitialize() is needed before using any other part of the API. -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#108481): https://edk2.groups.io/g/devel/message/108481 Mute This Topic: https://groups.io/mt/101203427/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-