Changeset 58181 in vbox for trunk/src/VBox/Additions
- Timestamp:
- Oct 12, 2015 12:54:23 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 103295
- Location:
- trunk/src/VBox/Additions
- Files:
-
- 1 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/Makefile.kmk
r56301 r58181 97 97 .. \ 98 98 . \ 99 ../../../../common/VBoxGuestLib \100 99 $(VBOX_PATH_CROGL_INCLUDE) \ 101 100 $(VBOX_PATH_CROGL_GENFILES) \ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.cpp
r51330 r58181 751 751 return VINF_ALREADY_INITIALIZED; 752 752 753 int rc = vboxCrCtlCreate(&pCrCtlCon->hCrCtl);753 int rc = VbglR0CrCtlCreate(&pCrCtlCon->hCrCtl); 754 754 if (RT_SUCCESS(rc)) 755 755 { … … 772 772 } 773 773 774 int rc = vboxCrCtlDestroy(pCrCtlCon->hCrCtl);774 int rc = VbglR0CrCtlDestroy(pCrCtlCon->hCrCtl); 775 775 if (RT_SUCCESS(rc)) 776 776 { … … 800 800 parms.vMinor.u.value32 = vMinor; 801 801 802 rc = vboxCrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms));802 rc = VbglR0CrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms)); 803 803 if (RT_FAILURE(rc)) 804 804 { … … 830 830 *pu32Caps = 0; 831 831 832 rc = vboxCrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms));832 rc = VbglR0CrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms)); 833 833 if (RT_FAILURE(rc)) 834 834 { … … 869 869 parms.Caps.u.Pointer.size = sizeof (*pCapsInfo); 870 870 871 rc = vboxCrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms));871 rc = VbglR0CrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms)); 872 872 if (RT_FAILURE(rc)) 873 873 { … … 908 908 Assert(parms.u64PID.u.value64); 909 909 910 rc = vboxCrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms));910 rc = VbglR0CrCtlConCall(pCrCtlCon->hCrCtl, &parms.hdr, sizeof (parms)); 911 911 if (RT_FAILURE(rc)) 912 912 { … … 931 931 if (RT_SUCCESS(rc)) 932 932 { 933 rc = vboxCrCtlConConnect(pCrCtlCon->hCrCtl, &u32ClientID);933 rc = VbglR0CrCtlConConnect(pCrCtlCon->hCrCtl, &u32ClientID); 934 934 if (RT_SUCCESS(rc)) 935 935 { … … 952 952 WARN(("vboxMpCrCtlConSetVersion failed, rc (%d)", rc)); 953 953 } 954 vboxCrCtlConDisconnect(pCrCtlCon->hCrCtl, u32ClientID);954 VbglR0CrCtlConDisconnect(pCrCtlCon->hCrCtl, u32ClientID); 955 955 } 956 956 else … … 1003 1003 int VBoxMpCrCtlConDisconnectHgcm(PVBOXMP_CRCTLCON pCrCtlCon, uint32_t u32ClientID) 1004 1004 { 1005 int rc = vboxCrCtlConDisconnect(pCrCtlCon->hCrCtl, u32ClientID);1005 int rc = VbglR0CrCtlConDisconnect(pCrCtlCon->hCrCtl, u32ClientID); 1006 1006 if (RT_SUCCESS(rc)) 1007 1007 { … … 1009 1009 return VINF_SUCCESS; 1010 1010 } 1011 else 1012 { 1013 WARN(("vboxCrCtlConDisconnect failed, rc (%d)", rc)); 1014 } 1011 WARN(("vboxCrCtlConDisconnect failed, rc (%d)", rc)); 1015 1012 return rc; 1016 1013 } … … 1032 1029 int VBoxMpCrCtlConCall(PVBOXMP_CRCTLCON pCrCtlCon, VBoxGuestHGCMCallInfo *pData, uint32_t cbData) 1033 1030 { 1034 int rc = vboxCrCtlConCall(pCrCtlCon->hCrCtl, pData, cbData);1031 int rc = VbglR0CrCtlConCall(pCrCtlCon->hCrCtl, pData, cbData); 1035 1032 if (RT_SUCCESS(rc)) 1036 1033 return VINF_SUCCESS; … … 1042 1039 int VBoxMpCrCtlConCallUserData(PVBOXMP_CRCTLCON pCrCtlCon, VBoxGuestHGCMCallInfo *pData, uint32_t cbData) 1043 1040 { 1044 int rc = vboxCrCtlConCallUserData(pCrCtlCon->hCrCtl, pData, cbData);1041 int rc = VbglR0CrCtlConCallUserData(pCrCtlCon->hCrCtl, pData, cbData); 1045 1042 if (RT_SUCCESS(rc)) 1046 1043 return VINF_SUCCESS; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.h
r50940 r58181 1 1 /* $Id$ */ 2 3 2 /** @file 4 3 * VBox WDDM Miniport driver … … 21 20 #ifdef VBOX_WITH_CROGL 22 21 23 #include <VBox/VBoxGuestLib.h> 24 #include <VBoxGuestR0LibCrOgl.h> 22 # include <VBox/VBoxGuestLib.h> 25 23 26 24 typedef struct VBOXMP_CRCTLCON … … 221 219 222 220 #endif /* #ifndef ___VBoxMPCr_h__ */ 221 -
trunk/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp
r56294 r58181 37 37 #include <iprt/string.h> 38 38 39 #define VBGL_HGCM_ASSERT MsgAssertReleaseMsg39 #define VBGL_HGCM_ASSERT_MSG AssertReleaseMsg 40 40 41 41 /** … … 44 44 * @return VBox status code. 45 45 */ 46 int vbglR0HGCMInit 46 int vbglR0HGCMInit(void) 47 47 { 48 48 return RTSemFastMutexCreate(&g_vbgldata.mutexHGCMHandle); … … 54 54 * @return VBox status code. 55 55 */ 56 int vbglR0HGCMTerminate 56 int vbglR0HGCMTerminate(void) 57 57 { 58 58 RTSemFastMutexDestroy(g_vbgldata.mutexHGCMHandle); … … 62 62 } 63 63 64 DECLINLINE(int) vbglHandleHeapEnter 64 DECLINLINE(int) vbglHandleHeapEnter(void) 65 65 { 66 66 int rc = RTSemFastMutexRequest(g_vbgldata.mutexHGCMHandle); 67 67 68 VBGL_HGCM_ASSERTMsg(RT_SUCCESS(rc), 69 ("Failed to request handle heap mutex, rc = %Rrc\n", rc)); 68 VBGL_HGCM_ASSERT_MSG(RT_SUCCESS(rc), ("Failed to request handle heap mutex, rc = %Rrc\n", rc)); 70 69 71 70 return rc; 72 71 } 73 72 74 DECLINLINE(void) vbglHandleHeapLeave 73 DECLINLINE(void) vbglHandleHeapLeave(void) 75 74 { 76 75 RTSemFastMutexRelease(g_vbgldata.mutexHGCMHandle); 77 76 } 78 77 79 struct VBGLHGCMHANDLEDATA *vbglHGCMHandleAlloc 78 struct VBGLHGCMHANDLEDATA *vbglHGCMHandleAlloc(void) 80 79 { 81 struct VBGLHGCMHANDLEDATA *p; 82 int rc = vbglHandleHeapEnter (); 83 uint32_t i; 80 struct VBGLHGCMHANDLEDATA *p = NULL; 81 int rc = vbglHandleHeapEnter(); 82 if (RT_SUCCESS(rc)) 83 { 84 uint32_t i; 84 85 85 if (RT_FAILURE (rc)) 86 return NULL; 86 /* Simple linear search in array. This will be called not so often, only connect/disconnect. */ 87 /** @todo bitmap for faster search and other obvious optimizations. */ 88 for (i = 0; i < RT_ELEMENTS(g_vbgldata.aHGCMHandleData); i++) 89 { 90 if (!g_vbgldata.aHGCMHandleData[i].fAllocated) 91 { 92 p = &g_vbgldata.aHGCMHandleData[i]; 93 p->fAllocated = 1; 94 break; 95 } 96 } 87 97 88 p = NULL;98 vbglHandleHeapLeave(); 89 99 90 /** Simple linear search in array. This will be called not so often, only connect/disconnect. 91 * @todo bitmap for faster search and other obvious optimizations. 92 */ 93 94 for (i = 0; i < RT_ELEMENTS(g_vbgldata.aHGCMHandleData); i++) 95 { 96 if (!g_vbgldata.aHGCMHandleData[i].fAllocated) 97 { 98 p = &g_vbgldata.aHGCMHandleData[i]; 99 p->fAllocated = 1; 100 break; 101 } 100 VBGL_HGCM_ASSERT_MSG(p != NULL, ("Not enough HGCM handles.\n")); 102 101 } 103 104 vbglHandleHeapLeave ();105 106 VBGL_HGCM_ASSERTMsg(p != NULL,107 ("Not enough HGCM handles.\n"));108 109 102 return p; 110 103 } 111 104 112 void vbglHGCMHandleFree (struct VBGLHGCMHANDLEDATA *pHandle) 105 void vbglHGCMHandleFree(struct VBGLHGCMHANDLEDATA *pHandle) 106 { 107 if (pHandle) 108 { 109 int rc = vbglHandleHeapEnter(); 110 if (RT_SUCCESS(rc)) 111 { 112 VBGL_HGCM_ASSERT_MSG(pHandle->fAllocated, ("Freeing not allocated handle.\n")); 113 114 RT_ZERO(*pHandle); 115 vbglHandleHeapLeave(); 116 } 117 } 118 } 119 120 DECLVBGL(int) VbglHGCMConnect(VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData) 113 121 { 114 122 int rc; 123 if (pHandle && pData) 124 { 125 struct VBGLHGCMHANDLEDATA *pHandleData = vbglHGCMHandleAlloc(); 126 if (pHandleData) 127 { 128 rc = vbglDriverOpen(&pHandleData->driver); 129 if (RT_SUCCESS(rc)) 130 { 131 rc = vbglDriverIOCtl(&pHandleData->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, pData, sizeof(*pData)); 132 if (RT_SUCCESS(rc)) 133 rc = pData->result; 134 if (RT_SUCCESS(rc)) 135 { 136 *pHandle = pHandleData; 137 return rc; 138 } 115 139 116 if (!pHandle)117 return;140 vbglDriverClose(&pHandleData->driver); 141 } 118 142 119 rc = vbglHandleHeapEnter (); 120 121 if (RT_FAILURE (rc)) 122 return; 123 124 VBGL_HGCM_ASSERTMsg(pHandle->fAllocated, 125 ("Freeing not allocated handle.\n")); 126 127 memset(pHandle, 0, sizeof (struct VBGLHGCMHANDLEDATA)); 128 vbglHandleHeapLeave (); 129 return; 143 vbglHGCMHandleFree(pHandleData); 144 } 145 else 146 rc = VERR_NO_MEMORY; 147 } 148 else 149 rc = VERR_INVALID_PARAMETER; 150 return rc; 130 151 } 131 152 132 DECLVBGL(int) VbglHGCM Connect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData)153 DECLVBGL(int) VbglHGCMDisconnect(VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData) 133 154 { 134 int rc; 135 struct VBGLHGCMHANDLEDATA *pHandleData; 155 int rc = vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, pData, sizeof(*pData)); 136 156 137 if (!pHandle || !pData) 138 return VERR_INVALID_PARAMETER; 157 vbglDriverClose(&handle->driver); 139 158 140 pHandleData = vbglHGCMHandleAlloc(); 141 if (!pHandleData) 142 rc = VERR_NO_MEMORY; 143 else 144 { 145 rc = vbglDriverOpen (&pHandleData->driver); 146 if (RT_SUCCESS(rc)) 147 { 148 rc = vbglDriverIOCtl (&pHandleData->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, pData, sizeof (*pData)); 149 if (RT_SUCCESS(rc)) 150 rc = pData->result; 151 if (RT_SUCCESS(rc)) 152 { 153 *pHandle = pHandleData; 154 return rc; 155 } 156 157 vbglDriverClose (&pHandleData->driver); 158 } 159 160 vbglHGCMHandleFree (pHandleData); 161 } 159 vbglHGCMHandleFree(handle); 162 160 163 161 return rc; 164 162 } 165 163 166 DECLVBGL(int) VbglHGCM Disconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData)164 DECLVBGL(int) VbglHGCMCall(VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData) 167 165 { 168 int rc = VINF_SUCCESS; 166 VBGL_HGCM_ASSERT_MSG(cbData >= sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(HGCMFunctionParameter), 167 ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, 168 sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(VBoxGuestHGCMCallInfo))); 169 169 170 rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, pData, sizeof (*pData)); 171 172 vbglDriverClose (&handle->driver); 173 174 vbglHGCMHandleFree (handle); 175 176 return rc; 177 } 178 179 DECLVBGL(int) VbglHGCMCall (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData) 180 { 181 int rc = VINF_SUCCESS; 182 183 VBGL_HGCM_ASSERTMsg(cbData >= sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (HGCMFunctionParameter), 184 ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (VBoxGuestHGCMCallInfo))); 185 186 rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL(cbData), pData, cbData); 187 188 return rc; 170 return vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL(cbData), pData, cbData); 189 171 } 190 172 191 173 DECLVBGL(int) VbglHGCMCallUserData (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData) 192 174 { 193 int rc = VINF_SUCCESS; 175 VBGL_HGCM_ASSERT_MSG(cbData >= sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(HGCMFunctionParameter), 176 ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, 177 sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(VBoxGuestHGCMCallInfo))); 194 178 195 VBGL_HGCM_ASSERTMsg(cbData >= sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (HGCMFunctionParameter), 196 ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (VBoxGuestHGCMCallInfo))); 197 198 rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbData), pData, cbData); 199 200 return rc; 179 return vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbData), pData, cbData); 201 180 } 202 181 203 182 204 DECLVBGL(int) VbglHGCMCallTimed (VBGLHGCMHANDLE handle, 205 VBoxGuestHGCMCallInfoTimed *pData, uint32_t cbData) 183 DECLVBGL(int) VbglHGCMCallTimed(VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfoTimed *pData, uint32_t cbData) 206 184 { 207 int rc = VINF_SUCCESS; 185 uint32_t cbExpected = sizeof(VBoxGuestHGCMCallInfoTimed) 186 + pData->info.cParms * sizeof(HGCMFunctionParameter); 187 VBGL_HGCM_ASSERT_MSG(cbData >= cbExpected, 188 ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->info.cParms, cbExpected)); 189 NOREF(cbExpected); 208 190 209 uint32_t cbExpected = sizeof (VBoxGuestHGCMCallInfoTimed) 210 + pData->info.cParms * sizeof (HGCMFunctionParameter); 211 VBGL_HGCM_ASSERTMsg(cbData >= cbExpected, 212 ("cbData = %d, cParms = %d (calculated size %d)\n", 213 cbData, pData->info.cParms, cbExpected)); 214 215 rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_TIMED(cbData), 216 pData, cbData); 217 218 return rc; 191 return vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_TIMED(cbData), pData, cbData); 219 192 } 220 193 -
trunk/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h
r58178 r58181 155 155 #ifdef VBOX_WITH_HGCM 156 156 # ifndef VBGL_VBOXGUEST 157 int vbglR0HGCMInit(void);158 int vbglR0HGCMTerminate(void);157 int vbglR0HGCMInit(void); 158 int vbglR0HGCMTerminate(void); 159 159 # endif 160 struct VBGLHGCMHANDLEDATA *vbglHGCMHandleAlloc(void); 161 void vbglHGCMHandleFree(struct VBGLHGCMHANDLEDATA *pHandle); 160 162 #endif /* VBOX_WITH_HGCM */ 161 163 -
trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.cpp
r56294 r58181 1 1 /* $Id$ */ 2 2 /** @file 3 * VBoxGuestLib - Central calls header.3 * VBoxGuestLib - Ring-3 Support Library for VirtualBox guest additions, Chromium OpenGL Service. 4 4 */ 5 5 … … 29 29 # error "VBGL_VBOXGUEST should not be defined" 30 30 #else 31 #include "VBoxGuestR0LibCrOgl.h"32 31 33 32 #include <iprt/string.h> … … 35 34 #include "VBGLInternal.h" 36 35 37 struct VBGLHGCMHANDLEDATA *vbglHGCMHandleAlloc (void);38 void vbglHGCMHandleFree (struct VBGLHGCMHANDLEDATA *pHandle);39 36 40 DECLVBGL(int) vboxCrCtlCreate(HVBOXCRCTL *phCtl)37 DECLVBGL(int) VbglR0CrCtlCreate(HVBOXCRCTL *phCtl) 41 38 { 42 39 int rc; 43 struct VBGLHGCMHANDLEDATA *pHandleData;44 40 45 if (!phCtl) 46 return VERR_INVALID_PARAMETER; 41 if (phCtl) 42 { 43 struct VBGLHGCMHANDLEDATA *pHandleData = vbglHGCMHandleAlloc(); 47 44 48 pHandleData = vbglHGCMHandleAlloc (); 45 if (pHandleData) 46 { 47 rc = vbglDriverOpen(&pHandleData->driver); 49 48 50 rc = VINF_SUCCESS; 49 if (RT_SUCCESS(rc)) 50 { 51 *phCtl = pHandleData; 52 return VINF_SUCCESS; 53 } 51 54 52 if (!pHandleData) 53 { 54 rc = VERR_NO_MEMORY; 55 vbglHGCMHandleFree(pHandleData); 56 } 57 else 58 rc = VERR_NO_MEMORY; 59 60 *phCtl = NULL; 55 61 } 56 62 else 57 { 58 rc = vbglDriverOpen (&pHandleData->driver); 63 rc = VERR_INVALID_PARAMETER; 59 64 60 if (RT_SUCCESS(rc))61 {62 *phCtl = pHandleData;63 return VINF_SUCCESS;64 }65 66 vbglHGCMHandleFree (pHandleData);67 }68 69 *phCtl = NULL;70 65 return rc; 71 66 } 72 67 73 DECLVBGL(int) vboxCrCtlDestroy(HVBOXCRCTL hCtl)68 DECLVBGL(int) VbglR0CrCtlDestroy(HVBOXCRCTL hCtl) 74 69 { 75 70 vbglDriverClose(&hCtl->driver); … … 80 75 } 81 76 82 DECLVBGL(int) vboxCrCtlConConnect(HVBOXCRCTL hCtl, uint32_t *pu32ClientID)77 DECLVBGL(int) VbglR0CrCtlConConnect(HVBOXCRCTL hCtl, uint32_t *pu32ClientID) 83 78 { 84 79 VBoxGuestHGCMConnectInfo info; … … 88 83 return VERR_INVALID_PARAMETER; 89 84 90 memset(&info, 0, sizeof (info));85 RT_ZERO(info); 91 86 info.Loc.type = VMMDevHGCMLoc_LocalHost_Existing; 92 RTStrCopy(info.Loc.u.host.achName, sizeof 93 rc = vbglDriverIOCtl (&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, &info, sizeof(info));87 RTStrCopy(info.Loc.u.host.achName, sizeof(info.Loc.u.host.achName), "VBoxSharedCrOpenGL"); 88 rc = vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, &info, sizeof(info)); 94 89 if (RT_SUCCESS(rc)) 95 90 { … … 103 98 } 104 99 105 Assert (RT_FAILURE(rc));100 AssertRC(rc); 106 101 *pu32ClientID = 0; 107 102 return rc; 108 103 } 109 104 110 DECLVBGL(int) vboxCrCtlConDisconnect(HVBOXCRCTL hCtl, uint32_t u32ClientID)105 DECLVBGL(int) VbglR0CrCtlConDisconnect(HVBOXCRCTL hCtl, uint32_t u32ClientID) 111 106 { 112 107 VBoxGuestHGCMDisconnectInfo info; 113 memset (&info, 0, sizeof (info));108 RT_ZERO(info); 114 109 info.u32ClientID = u32ClientID; 115 return vbglDriverIOCtl (&hCtl->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, &info, sizeof(info));110 return vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, &info, sizeof(info)); 116 111 } 117 112 118 DECLVBGL(int) vboxCrCtlConCall(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo)113 DECLVBGL(int) VbglR0CrCtlConCall(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo) 119 114 { 120 return vbglDriverIOCtl 115 return vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CALL(cbCallInfo), pCallInfo, cbCallInfo); 121 116 } 122 117 123 DECLVBGL(int) vboxCrCtlConCallUserData(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo)118 DECLVBGL(int) VbglR0CrCtlConCallUserData(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo) 124 119 { 125 return vbglDriverIOCtl 120 return vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbCallInfo), pCallInfo, cbCallInfo); 126 121 } 127 122
Note:
See TracChangeset
for help on using the changeset viewer.