[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 10/18] OvmfPkg/XenBusDxe: Add TestAndClearBit.
On Thu, Sep 04, 2014 at 05:51:05PM +0100, Anthony PERARD wrote: > This atomically test and clear a bit. test's and clear's a bit. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > > --- > Change in V2: > - Adding .asm version > - Comment the function > --- > OvmfPkg/XenBusDxe/X64/TestAndClearBit.S | 13 +++++++++++++ > OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm | 16 ++++++++++++++++ > OvmfPkg/XenBusDxe/XenBusDxe.h | 19 +++++++++++++++++++ > OvmfPkg/XenBusDxe/XenBusDxe.inf | 2 ++ > 4 files changed, 50 insertions(+) > create mode 100644 OvmfPkg/XenBusDxe/X64/TestAndClearBit.S > create mode 100644 OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm > > diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S > b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S > new file mode 100644 > index 0000000..cd9c5ed > --- /dev/null > +++ b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S > @@ -0,0 +1,13 @@ > + > +# INT32 > +# EFIAPI > +# TestAndClearBit ( > +# IN INT32 Bit, // rcx > +# IN volatile VOID* Address // rdx > +# ); > +ASM_GLOBAL ASM_PFX(TestAndClearBit) > +ASM_PFX(TestAndClearBit): > + lock > + btrl %ecx, (%rdx) > + sbbl %eax, %eax > + ret > diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm > b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm > new file mode 100644 > index 0000000..c7fc83d > --- /dev/null > +++ b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm > @@ -0,0 +1,16 @@ > +.code > + > +; INT32 > +; EFIAPI > +; TestAndClearBit ( > +; IN INT32 Bit, // rcx > +; IN volatile VOID* Address // rdx > +; ); > +TestAndClearBit PROC > + lock > + btr [rdx], ecx > + sbb eax, eax > + ret > +TestAndClearBit ENDP > + > +END > diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.h b/OvmfPkg/XenBusDxe/XenBusDxe.h > index 878e7c5..d690914 100644 > --- a/OvmfPkg/XenBusDxe/XenBusDxe.h > +++ b/OvmfPkg/XenBusDxe/XenBusDxe.h > @@ -113,4 +113,23 @@ struct _XENBUS_DEVICE { > shared_info_t *SharedInfo; > }; > > +/* > + * Helpers > + */ > + > +/** > + Atomically test and clear a bit. > + > + @param Bit Bit index to test in *Address > + @param Address The Address to the buffer that contain the bit to test. > + > + @return Value of the Bit before it was cleared. > +**/ > +INT32 > +EFIAPI > +TestAndClearBit ( > + IN INT32 Bit, > + IN volatile VOID *Address > + ); > + > #endif > diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.inf b/OvmfPkg/XenBusDxe/XenBusDxe.inf > index 13623bd..e8f362a 100644 > --- a/OvmfPkg/XenBusDxe/XenBusDxe.inf > +++ b/OvmfPkg/XenBusDxe/XenBusDxe.inf > @@ -45,6 +45,8 @@ > X64/InterlockedCompareExchange16.c | GCC > X64/InterlockedCompareExchange16.asm | INTEL > InterlockedCompareExchange16Intel.c | INTEL > + X64/TestAndClearBit.S > + X64/TestAndClearBit.asm > > [LibraryClasses] > UefiDriverEntryPoint > -- > Anthony PERARD > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |