[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 3/4] Add SharedInfo IOCTL interface
Adds IOCTLs for: * GetTime - returns Xen wallclock time Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- include/xeniface_ioctls.h | 9 ++++++ src/xeniface/ioctl_sharedinfo.c | 68 ++++++++++++++++++++++++++++++++++++++++ src/xeniface/ioctls.c | 6 ++++ src/xeniface/ioctls.h | 9 ++++++ vs2012/xeniface/xeniface.vcxproj | 1 + vs2013/xeniface/xeniface.vcxproj | 1 + 6 files changed, 94 insertions(+) create mode 100644 src/xeniface/ioctl_sharedinfo.c diff --git a/include/xeniface_ioctls.h b/include/xeniface_ioctls.h index 5f65f14..dcddb5e 100644 --- a/include/xeniface_ioctls.h +++ b/include/xeniface_ioctls.h @@ -360,4 +360,13 @@ typedef struct _XENIFACE_SUSPEND_REGISTER_OUT { #define IOCTL_XENIFACE_SUSPEND_DEREGISTER \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x832, METHOD_BUFFERED, FILE_ANY_ACCESS) +/*! \brief Gets the current time. + + Input: None + + Output: LARGE_INTEGER +*/ +#define IOCTL_XENIFACE_SHAREDINFO_GET_TIME \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x840, METHOD_BUFFERED, FILE_ANY_ACCESS) + #endif // _XENIFACE_IOCTLS_H_ diff --git a/src/xeniface/ioctl_sharedinfo.c b/src/xeniface/ioctl_sharedinfo.c new file mode 100644 index 0000000..c9dfe65 --- /dev/null +++ b/src/xeniface/ioctl_sharedinfo.c @@ -0,0 +1,68 @@ +/* Copyright (c) Citrix Systems Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "driver.h" +#include "ioctls.h" +#include "xeniface_ioctls.h" +#include "log.h" + +DECLSPEC_NOINLINE +NTSTATUS +IoctlSharedInfoGetTime( + __in PXENIFACE_FDO Fdo, + __in PCHAR Buffer, + __in ULONG InLen, + __in ULONG OutLen, + __out PULONG_PTR Info + ) +{ + NTSTATUS status; + PLARGE_INTEGER Value; + + status = STATUS_INVALID_BUFFER_SIZE; + if (InLen != 0) + goto fail1; + + if (OutLen != sizeof(LARGE_INTEGER)) + goto fail2; + + Value = (PLARGE_INTEGER)Buffer; + *Value = XENBUS_SHARED_INFO(GetTime, &Fdo->SharedInfoInterface); + *Info = (ULONG_PTR)sizeof(LARGE_INTEGER); + + return STATUS_SUCCESS; + +fail2: + XenIfaceDebugPrint(ERROR, "Fail2\n"); +fail1: + XenIfaceDebugPrint(ERROR, "Fail1 (%08x)\n", status); + return status; +} diff --git a/src/xeniface/ioctls.c b/src/xeniface/ioctls.c index 2df299c..7092a56 100644 --- a/src/xeniface/ioctls.c +++ b/src/xeniface/ioctls.c @@ -257,6 +257,12 @@ XenIfaceIoctl( status = IoctlSuspendDeregister(Fdo, Buffer, InLen, OutLen, Stack->FileObject); break; + // sharedinfo + case IOCTL_XENIFACE_SHAREDINFO_GET_TIME: + status = IoctlSharedInfoGetTime(Fdo, Buffer, InLen, OutLen, &Irp->IoStatus.Information); + break; + + default: status = STATUS_INVALID_DEVICE_REQUEST; break; diff --git a/src/xeniface/ioctls.h b/src/xeniface/ioctls.h index 7dd34ee..d06f6b5 100644 --- a/src/xeniface/ioctls.h +++ b/src/xeniface/ioctls.h @@ -409,5 +409,14 @@ SuspendFreeEvent( __inout PXENIFACE_SUSPEND_CONTEXT Context ); +NTSTATUS +IoctlSharedInfoGetTime( + __in PXENIFACE_FDO Fdo, + __in PCHAR Buffer, + __in ULONG InLen, + __in ULONG OutLen, + __out PULONG_PTR Info + ); + #endif // _IOCTLS_H_ diff --git a/vs2012/xeniface/xeniface.vcxproj b/vs2012/xeniface/xeniface.vcxproj index ff70eb0..bb344e4 100644 --- a/vs2012/xeniface/xeniface.vcxproj +++ b/vs2012/xeniface/xeniface.vcxproj @@ -79,6 +79,7 @@ <ClCompile Include="..\..\src\xeniface\fdo.c" /> <ClCompile Include="..\..\src\xeniface\registry.c" /> <ClCompile Include="..\..\src\xeniface\thread.c" /> + <ClCompile Include="..\..\src\xeniface\ioctl_sharedinfo.c" /> <ClCompile Include="..\..\src\xeniface\ioctl_suspend.c" /> <ClCompile Include="..\..\src\xeniface\ioctl_evtchn.c" /> <ClCompile Include="..\..\src\xeniface\ioctl_gnttab.c" /> diff --git a/vs2013/xeniface/xeniface.vcxproj b/vs2013/xeniface/xeniface.vcxproj index 3a3a937..c6232e4 100644 --- a/vs2013/xeniface/xeniface.vcxproj +++ b/vs2013/xeniface/xeniface.vcxproj @@ -131,6 +131,7 @@ <ClCompile Include="..\..\src\xeniface\fdo.c" /> <ClCompile Include="..\..\src\xeniface\registry.c" /> <ClCompile Include="..\..\src\xeniface\thread.c" /> + <ClCompile Include="..\..\src\xeniface\ioctl_sharedinfo.c" /> <ClCompile Include="..\..\src\xeniface\ioctl_suspend.c" /> <ClCompile Include="..\..\src\xeniface\ioctl_evtchn.c" /> <ClCompile Include="..\..\src\xeniface\ioctl_gnttab.c" /> -- 1.9.4.msysgit.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |