Re: [edk2] [PATCH v3 15/16] ArmPkg: MTL Library interface and Null library implementation
On Tue, Mar 20, 2018 at 04:12:11PM +, Girish Pathak wrote: > Upcoming new component ArmPkg/Drivers/ArmScmiDxe is dependent on > platform specific ArmMtlLib library implementation, however in order > to be able to build the ArmScmiDxe component outside of the context of a > particular platform, this change adds Null implementation of the > ArmMtlLib along with ARM MTL library header. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Girish Pathak> Signed-off-by: Evan Lloyd > --- > ArmPkg/ArmPkg.dec | 3 +- > ArmPkg/Include/Library/ArmMtlLib.h | 137 > ArmPkg/Library/ArmMtlNullLib/ArmMtlNullLib.c | 108 +++ > ArmPkg/Library/ArmMtlNullLib/ArmMtlNullLib.inf | 26 > 4 files changed, 273 insertions(+), 1 deletion(-) > > diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec > index > a55b6268ff85ffd7da140be813ec875f7f242c4d..881751d81c6384a3eb0b4c180c76d01a58266a74 > 100644 > --- a/ArmPkg/ArmPkg.dec > +++ b/ArmPkg/ArmPkg.dec > @@ -2,7 +2,7 @@ > # ARM processor package. > # > # Copyright (c) 2009 - 2010, Apple Inc. All rights reserved. > -# Copyright (c) 2011 - 2017, ARM Limited. All rights reserved. > +# Copyright (c) 2011 - 2018, ARM Limited. All rights reserved. > # > #This program and the accompanying materials > #are licensed and made available under the terms and conditions of the > BSD License > @@ -40,6 +40,7 @@ [LibraryClasses.common] >ArmDisassemblerLib|Include/Library/ArmDisassemblerLib.h >ArmGicArchLib|Include/Library/ArmGicArchLib.h >ArmSvcLib|Include/Library/ArmSvcLib.h > + ArmMtlLib|ArmPlatformPkg/Include/Library/ArmMtlLib.h Unless you scream before I get around to pushing, I'm going to move that line up one step. / Leif > > [Guids.common] >gArmTokenSpaceGuid = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, > 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } } > diff --git a/ArmPkg/Include/Library/ArmMtlLib.h > b/ArmPkg/Include/Library/ArmMtlLib.h > new file mode 100644 > index > ..4218a741e5ebddd08022b94354d5ef47576cd3b8 > --- /dev/null > +++ b/ArmPkg/Include/Library/ArmMtlLib.h > @@ -0,0 +1,137 @@ > +/** @file > + > + Copyright (c) 2017-2018, Arm Limited. All rights reserved. > + > + This program and the accompanying materials > + are licensed and made available under the terms and conditions of the BSD > License > + which accompanies this distribution. The full text of the license may be > found at > + http://opensource.org/licenses/bsd-license.php > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > IMPLIED. > + > + System Control and Management Interface V1.0 > +http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/ > +DEN0056A_System_Control_and_Management_Interface.pdf > +**/ > + > +#ifndef ARM_MTL_LIB_H_ > +#define ARM_MTL_LIB_H_ > + > +#include > + > +// Ideally we don't need packed struct. However we can't rely on compilers. > +#pragma pack(1) > + > +typedef struct { > + UINT32 Reserved1; > + UINT32 ChannelStatus; > + UINT64 Reserved2; > + UINT32 Flags; > + UINT32 Length; > + UINT32 MessageHeader; > + > + // NOTE: Since EDK2 does not allow flexible array member [] we declare > + // here array of 1 element length. However below is used as a variable > + // length array. > + UINT32 Payload[1];// size less object gives offset to payload. > +} MTL_MAILBOX; > + > +#pragma pack() > + > +// Channel Type, Low-priority, and High-priority > +typedef enum { > + MTL_CHANNEL_TYPE_LOW = 0, > + MTL_CHANNEL_TYPE_HIGH = 1 > +} MTL_CHANNEL_TYPE; > + > +typedef struct { > + UINT64 PhysicalAddress; > + UINT32 ModifyMask; > + UINT32 PreserveMask; > +} MTL_DOORBELL; > + > +typedef struct { > + MTL_CHANNEL_TYPE ChannelType; > + MTL_MAILBOX * CONST MailBox; > + MTL_DOORBELL DoorBell; > +} MTL_CHANNEL; > + > +/** Wait until channel is free. > + > + @param[in] ChannelPointer to a channel. > + @param[in] TimeOutInMicroSeconds Time out in micro seconds. > + > + @retval EFI_SUCCESS Channel is free. > + @retval EFI_TIMEOUT Time out error. > +**/ > +EFI_STATUS > +MtlWaitUntilChannelFree ( > + IN MTL_CHANNEL *Channel, > + IN UINT64 TimeOutInMicroSeconds > + ); > + > +/** Return the address of the message payload. > + > + @param[in] Channel Pointer to a channel. > + > + @retval UINT32* Pointer to the payload. > +**/ > +UINT32* > +MtlGetChannelPayload ( > + IN MTL_CHANNEL *Channel > + ); > + > +/** Return pointer to a channel for the requested channel type. > + > + @param[in] ChannelTypeChannelType, Low or High priority channel. > +MTL_CHANNEL_TYPE_LOW or > +MTL_CHANNEL_TYPE_HIGH > + > +
Re: [edk2] [PATCH v3 15/16] ArmPkg: MTL Library interface and Null library implementation
Reviewed-by: Evan Lloyd <evan.ll...@arm.com> > -Original Message- > From: edk2-devel <edk2-devel-boun...@lists.01.org> On Behalf Of Girish > Pathak > Sent: 20 March 2018 16:12 > To: edk2-devel@lists.01.org > Cc: nd <n...@arm.com>; Stephanie Hughes-Fitt f...@arm.com>; leif.lindh...@linaro.org; ard.biesheu...@linaro.org > Subject: [edk2] [PATCH v3 15/16] ArmPkg: MTL Library interface and Null > library implementation > > Upcoming new component ArmPkg/Drivers/ArmScmiDxe is dependent on > platform specific ArmMtlLib library implementation, however in order to be > able to build the ArmScmiDxe component outside of the context of a > particular platform, this change adds Null implementation of the ArmMtlLib > along with ARM MTL library header. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Girish Pathak <girish.pat...@arm.com> > Signed-off-by: Evan Lloyd <evan.ll...@arm.com> > --- > ArmPkg/ArmPkg.dec | 3 +- > ArmPkg/Include/Library/ArmMtlLib.h | 137 > > ArmPkg/Library/ArmMtlNullLib/ArmMtlNullLib.c | 108 > +++ > ArmPkg/Library/ArmMtlNullLib/ArmMtlNullLib.inf | 26 > 4 files changed, 273 insertions(+), 1 deletion(-) > > diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec index > a55b6268ff85ffd7da140be813ec875f7f242c4d..881751d81c6384a3eb0b4c > 180c76d01a58266a74 100644 > --- a/ArmPkg/ArmPkg.dec > +++ b/ArmPkg/ArmPkg.dec > @@ -2,7 +2,7 @@ > # ARM processor package. > # > # Copyright (c) 2009 - 2010, Apple Inc. All rights reserved. -# > Copyright (c) 2011 - 2017, ARM Limited. All rights reserved. > +# Copyright (c) 2011 - 2018, ARM Limited. All rights reserved. > # > #This program and the accompanying materials > #are licensed and made available under the terms and conditions of the > BSD License > @@ -40,6 +40,7 @@ [LibraryClasses.common] >ArmDisassemblerLib|Include/Library/ArmDisassemblerLib.h >ArmGicArchLib|Include/Library/ArmGicArchLib.h >ArmSvcLib|Include/Library/ArmSvcLib.h > + ArmMtlLib|ArmPlatformPkg/Include/Library/ArmMtlLib.h > > [Guids.common] >gArmTokenSpaceGuid = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, > 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } } > diff --git a/ArmPkg/Include/Library/ArmMtlLib.h > b/ArmPkg/Include/Library/ArmMtlLib.h > new file mode 100644 > index > ..4218a741e5ebddd080 > 22b94354d5ef47576cd3b8 > --- /dev/null > +++ b/ArmPkg/Include/Library/ArmMtlLib.h > @@ -0,0 +1,137 @@ > +/** @file > + > + Copyright (c) 2017-2018, Arm Limited. All rights reserved. > + > + This program and the accompanying materials are licensed and made > + available under the terms and conditions of the BSD License which > + accompanies this distribution. The full text of the license may be > + found at http://opensource.org/licenses/bsd-license.php > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > + System Control and Management Interface V1.0 > +http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/ > +DEN0056A_System_Control_and_Management_Interface.pdf > +**/ > + > +#ifndef ARM_MTL_LIB_H_ > +#define ARM_MTL_LIB_H_ > + > +#include > + > +// Ideally we don't need packed struct. However we can't rely on compilers. > +#pragma pack(1) > + > +typedef struct { > + UINT32 Reserved1; > + UINT32 ChannelStatus; > + UINT64 Reserved2; > + UINT32 Flags; > + UINT32 Length; > + UINT32 MessageHeader; > + > + // NOTE: Since EDK2 does not allow flexible array member [] we > +declare > + // here array of 1 element length. However below is used as a > +variable > + // length array. > + UINT32 Payload[1];// size less object gives offset to payload. > +} MTL_MAILBOX; > + > +#pragma pack() > + > +// Channel Type, Low-priority, and High-priority typedef enum { > + MTL_CHANNEL_TYPE_LOW = 0, > + MTL_CHANNEL_TYPE_HIGH = 1 > +} MTL_CHANNEL_TYPE; > + > +typedef struct { > + UINT64 PhysicalAddress; > + UINT32 ModifyMask; > + UINT32 PreserveMask; > +} MTL_DOORBELL; > + > +typedef struct { > + MTL_CHANNEL_TYPE ChannelType; > + MTL_MAILBOX * CONST MailBox; > + MTL_DOORBELL DoorBell; > +} MTL_CHANNEL; > + > +/** Wait until channel is free. > + > + @param[in] ChannelPointer to a channel. > + @param[in] TimeOutInMicroSeconds Time out in micro seconds. > + > + @retval EFI_SUCCESS Channel is free. > + @retval EFI
[edk2] [PATCH v3 15/16] ArmPkg: MTL Library interface and Null library implementation
Upcoming new component ArmPkg/Drivers/ArmScmiDxe is dependent on platform specific ArmMtlLib library implementation, however in order to be able to build the ArmScmiDxe component outside of the context of a particular platform, this change adds Null implementation of the ArmMtlLib along with ARM MTL library header. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Girish PathakSigned-off-by: Evan Lloyd --- ArmPkg/ArmPkg.dec | 3 +- ArmPkg/Include/Library/ArmMtlLib.h | 137 ArmPkg/Library/ArmMtlNullLib/ArmMtlNullLib.c | 108 +++ ArmPkg/Library/ArmMtlNullLib/ArmMtlNullLib.inf | 26 4 files changed, 273 insertions(+), 1 deletion(-) diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec index a55b6268ff85ffd7da140be813ec875f7f242c4d..881751d81c6384a3eb0b4c180c76d01a58266a74 100644 --- a/ArmPkg/ArmPkg.dec +++ b/ArmPkg/ArmPkg.dec @@ -2,7 +2,7 @@ # ARM processor package. # # Copyright (c) 2009 - 2010, Apple Inc. All rights reserved. -# Copyright (c) 2011 - 2017, ARM Limited. All rights reserved. +# Copyright (c) 2011 - 2018, ARM Limited. All rights reserved. # #This program and the accompanying materials #are licensed and made available under the terms and conditions of the BSD License @@ -40,6 +40,7 @@ [LibraryClasses.common] ArmDisassemblerLib|Include/Library/ArmDisassemblerLib.h ArmGicArchLib|Include/Library/ArmGicArchLib.h ArmSvcLib|Include/Library/ArmSvcLib.h + ArmMtlLib|ArmPlatformPkg/Include/Library/ArmMtlLib.h [Guids.common] gArmTokenSpaceGuid = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } } diff --git a/ArmPkg/Include/Library/ArmMtlLib.h b/ArmPkg/Include/Library/ArmMtlLib.h new file mode 100644 index ..4218a741e5ebddd08022b94354d5ef47576cd3b8 --- /dev/null +++ b/ArmPkg/Include/Library/ArmMtlLib.h @@ -0,0 +1,137 @@ +/** @file + + Copyright (c) 2017-2018, Arm Limited. All rights reserved. + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + System Control and Management Interface V1.0 +http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/ +DEN0056A_System_Control_and_Management_Interface.pdf +**/ + +#ifndef ARM_MTL_LIB_H_ +#define ARM_MTL_LIB_H_ + +#include + +// Ideally we don't need packed struct. However we can't rely on compilers. +#pragma pack(1) + +typedef struct { + UINT32 Reserved1; + UINT32 ChannelStatus; + UINT64 Reserved2; + UINT32 Flags; + UINT32 Length; + UINT32 MessageHeader; + + // NOTE: Since EDK2 does not allow flexible array member [] we declare + // here array of 1 element length. However below is used as a variable + // length array. + UINT32 Payload[1];// size less object gives offset to payload. +} MTL_MAILBOX; + +#pragma pack() + +// Channel Type, Low-priority, and High-priority +typedef enum { + MTL_CHANNEL_TYPE_LOW = 0, + MTL_CHANNEL_TYPE_HIGH = 1 +} MTL_CHANNEL_TYPE; + +typedef struct { + UINT64 PhysicalAddress; + UINT32 ModifyMask; + UINT32 PreserveMask; +} MTL_DOORBELL; + +typedef struct { + MTL_CHANNEL_TYPE ChannelType; + MTL_MAILBOX * CONST MailBox; + MTL_DOORBELL DoorBell; +} MTL_CHANNEL; + +/** Wait until channel is free. + + @param[in] ChannelPointer to a channel. + @param[in] TimeOutInMicroSeconds Time out in micro seconds. + + @retval EFI_SUCCESS Channel is free. + @retval EFI_TIMEOUT Time out error. +**/ +EFI_STATUS +MtlWaitUntilChannelFree ( + IN MTL_CHANNEL *Channel, + IN UINT64 TimeOutInMicroSeconds + ); + +/** Return the address of the message payload. + + @param[in] Channel Pointer to a channel. + + @retval UINT32* Pointer to the payload. +**/ +UINT32* +MtlGetChannelPayload ( + IN MTL_CHANNEL *Channel + ); + +/** Return pointer to a channel for the requested channel type. + + @param[in] ChannelTypeChannelType, Low or High priority channel. +MTL_CHANNEL_TYPE_LOW or +MTL_CHANNEL_TYPE_HIGH + + @param[out] Channel Holds pointer to the channel. + + @retval EFI_SUCCESS Pointer to channel is returned. + @retval EFI_UNSUPPORTED Requested channel type not supported. +**/ +EFI_STATUS +MtlGetChannel ( + IN MTL_CHANNEL_TYPE ChannelType, + OUT MTL_CHANNEL **Channel + ); + +/** Mark the channel busy and ring the doorbell. + + @param[in] Channel Pointer to a channel. + @param[in] MessageHeader