VirtualBox

Changeset 21260 in vbox for trunk/src/VBox/Additions/common


Ignore:
Timestamp:
Jul 6, 2009 3:28:14 PM (16 years ago)
Author:
vboxsync
Message:

VBGL: Renamed the internal HGCM functions and added a kernel/user mode indicator to HGCM the calls. The code is not yet using the indicator for anything.

Location:
trunk/src/VBox/Additions/common
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp

    r21219 r21260  
    393393            pSession->aHGCMClientIds[i] = 0;
    394394            Log(("VBoxGuestCloseSession: disconnecting client id %#RX32\n", Info.u32ClientID));
    395             VbglHGCMDisconnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     395            VbglR0HGCMInternalDisconnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
    396396        }
    397397#endif
     
    967967         ? pInfo->Loc.u.host.achName : "<not local host>"));
    968968
    969     int rc = VbglHGCMConnect(pInfo, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     969    int rc = VbglR0HGCMInternalConnect(pInfo, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
    970970    if (RT_SUCCESS(rc))
    971971    {
     
    997997                Info.result = 0;
    998998                Info.u32ClientID = pInfo->u32ClientID;
    999                 VbglHGCMDisconnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     999                VbglR0HGCMInternalDisconnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
    10001000                return VERR_TOO_MANY_OPEN_FILES;
    10011001            }
     
    10391039     */
    10401040    Log(("VBoxGuestCommonIOCtl: HGCM_DISCONNECT: u32Client=%RX32\n", pInfo->u32ClientID));
    1041     int rc = VbglHGCMDisconnect(pInfo, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     1041    int rc = VbglR0HGCMInternalDisconnect(pInfo, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
    10421042    if (RT_SUCCESS(rc))
    10431043    {
     
    11121112    Log(("VBoxGuestCommonIOCtl: HGCM_CALL: u32Client=%RX32\n", pInfo->u32ClientID));
    11131113    int rc;
     1114    uint32_t fFlags = pSession->R0Process == NIL_RTR0PROCESS ? VBGLR0_HGCMCALL_F_KERNEL : VBGLR0_HGCMCALL_F_USER;
    11141115#ifdef RT_ARCH_AMD64
    11151116    if (f32bit)
    11161117    {
    11171118        if (fInterruptible)
    1118             rc = VbglHGCMCall32(pInfo, VBoxGuestHGCMAsyncWaitCallbackInterruptible, pDevExt, cMillies);
     1119            rc = VbglR0HGCMInternalCall32(pInfo, fFlags, VBoxGuestHGCMAsyncWaitCallbackInterruptible, pDevExt, cMillies);
    11191120        else
    1120             rc = VbglHGCMCall32(pInfo, VBoxGuestHGCMAsyncWaitCallback, pDevExt, cMillies);
     1121            rc = VbglR0HGCMInternalCall32(pInfo, fFlags, VBoxGuestHGCMAsyncWaitCallback, pDevExt, cMillies);
    11211122    }
    11221123    else
     
    11241125    {
    11251126        if (fInterruptible)
    1126             rc = VbglHGCMCall(pInfo, VBoxGuestHGCMAsyncWaitCallbackInterruptible, pDevExt, cMillies);
     1127            rc = VbglR0HGCMInternalCall(pInfo, fFlags, VBoxGuestHGCMAsyncWaitCallbackInterruptible, pDevExt, cMillies);
    11271128        else
    1128             rc = VbglHGCMCall(pInfo, VBoxGuestHGCMAsyncWaitCallback, pDevExt, cMillies);
     1129            rc = VbglR0HGCMInternalCall(pInfo, fFlags, VBoxGuestHGCMAsyncWaitCallback, pDevExt, cMillies);
    11291130    }
    11301131    if (RT_SUCCESS(rc))
     
    11571158        Info.result = VERR_WRONG_ORDER;
    11581159        Info.u32ClientID = pDevExt->u32ClipboardClientId;
    1159         rc = VbglHGCMDisconnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     1160        rc = VbglR0HGCMInternalDisconnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
    11601161        if (RT_SUCCESS(rc))
    11611162        {
     
    11801181    Info.result = VERR_WRONG_ORDER;
    11811182
    1182     rc = VbglHGCMConnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     1183    rc = VbglR0HGCMInternalConnect(&Info, VBoxGuestHGCMAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
    11831184    if (RT_FAILURE(rc))
    11841185    {
  • trunk/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp

    r21211 r21260  
    116116}
    117117
    118 DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData)
     118DECLVBGL(int) VbglR0HGCMInternalConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData)
    119119{
    120120    int rc;
  • trunk/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp

    r21211 r21260  
    3030/* These functions can be only used by VBoxGuest. */
    3131
    32 DECLVBGL(int) VbglHGCMConnect (VBoxGuestHGCMConnectInfo *pConnectInfo,
    33                                VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData,
    34                                uint32_t u32AsyncData)
     32DECLVBGL(int) VbglR0HGCMInternalConnect (VBoxGuestHGCMConnectInfo *pConnectInfo,
     33                                         VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData,
     34                                         uint32_t u32AsyncData)
    3535{
    3636    VMMDevHGCMConnect *pHGCMConnect;
     
    7878
    7979
    80 DECLVBGL(int) VbglHGCMDisconnect (VBoxGuestHGCMDisconnectInfo *pDisconnectInfo,
    81                                   VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData)
     80DECLR0VBGL(int) VbglR0HGCMInternalDisconnect (VBoxGuestHGCMDisconnectInfo *pDisconnectInfo,
     81                                              VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData)
    8282{
    8383    VMMDevHGCMDisconnect *pHGCMDisconnect;
     
    122122
    123123/** @todo merge with the one below (use a header file). Too lazy now. */
    124 DECLVBGL(int) VbglHGCMCall (VBoxGuestHGCMCallInfo *pCallInfo,
    125                             VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData)
     124DECLR0VBGL(int) VbglR0HGCMInternalCall (VBoxGuestHGCMCallInfo *pCallInfo, uint32_t fFlags,
     125                                        VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData)
    126126{
    127127    VMMDevHGCMCall *pHGCMCall;
     
    131131    int rc;
    132132
    133     if (!pCallInfo || !pAsyncCallback || pCallInfo->cParms > VBOX_HGCM_MAX_PARMS)
    134     {
    135         AssertFailed();
    136         return VERR_INVALID_PARAMETER;
    137     }
    138 
    139     Log (("VbglHGCMCall: pCallInfo->cParms = %d, pHGCMCall->u32Function = %d\n", pCallInfo->cParms, pCallInfo->u32Function));
     133    AssertMsgReturn(!pCallInfo || !pAsyncCallback || pCallInfo->cParms > VBOX_HGCM_MAX_PARMS || !(fFlags & ~VBGLR0_HGCMCALL_F_MODE_MASK),
     134                    ("pCallInfo=%p pAsyncCallback=%p fFlags=%#x\n", pCallInfo, pAsyncCallback, fFlags),
     135                    VERR_INVALID_PARAMETER);
     136
     137    Log (("VbglR0HGCMInternalCall: pCallInfo->cParms = %d, pHGCMCall->u32Function = %d, fFlags=%#x\n",
     138          pCallInfo->cParms, pCallInfo->u32Function, fFlags));
    140139
    141140    pHGCMCall = NULL;
     
    146145    rc = VbglGRAlloc ((VMMDevRequestHeader **)&pHGCMCall, sizeof (VMMDevHGCMCall) + cbParms, VMMDevReq_HGCMCall);
    147146
    148     Log (("VbglHGCMCall Allocated gr %p, rc = %Rrc, cbParms = %d\n", pHGCMCall, rc, cbParms));
     147    Log (("VbglR0HGCMInternalCall: Allocated gr %p, rc = %Rrc, cbParms = %d\n", pHGCMCall, rc, cbParms));
    149148
    150149    if (RT_SUCCESS(rc))
     
    287286# if ARCH_BITS == 64
    288287/** @todo merge with the one above (use a header file). Too lazy now. */
    289 DECLVBGL(int) VbglHGCMCall32 (VBoxGuestHGCMCallInfo *pCallInfo,
    290                               VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData)
     288DECLR0VBGL(int) VbglR0HGCMInternalCall32 (VBoxGuestHGCMCallInfo *pCallInfo, uint32_t fFlags,
     289                                          VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData)
    291290{
    292291    VMMDevHGCMCall *pHGCMCall;
     
    296295    int rc;
    297296
    298     if (!pCallInfo || !pAsyncCallback || pCallInfo->cParms > VBOX_HGCM_MAX_PARMS)
    299     {
    300         AssertFailed();
    301         return VERR_INVALID_PARAMETER;
    302     }
    303 
    304     Log (("VbglHGCMCall: pCallInfo->cParms = %d, pHGCMCall->u32Function = %d\n", pCallInfo->cParms, pCallInfo->u32Function));
     297    AssertMsgReturn(!pCallInfo || !pAsyncCallback || pCallInfo->cParms > VBOX_HGCM_MAX_PARMS || !(fFlags & ~VBGLR0_HGCMCALL_F_MODE_MASK),
     298                    ("pCallInfo=%p pAsyncCallback=%p fFlags=%#x\n", pCallInfo, pAsyncCallback, fFlags),
     299                    VERR_INVALID_PARAMETER);
     300
     301    Log (("VbglR0HGCMInternalCall32: pCallInfo->cParms = %d, pHGCMCall->u32Function = %d, fFlags=%#x\n",
     302          pCallInfo->cParms, pCallInfo->u32Function, fFlags));
    305303
    306304    pHGCMCall = NULL;
     
    311309    rc = VbglGRAlloc ((VMMDevRequestHeader **)&pHGCMCall, sizeof (VMMDevHGCMCall) + cbParms, VMMDevReq_HGCMCall32);
    312310
    313     Log (("VbglHGCMCall Allocated gr %p, rc = %Rrc, cbParms = %d\n", pHGCMCall, rc, cbParms));
     311    Log (("VbglR0HGCMInternalCall32: Allocated gr %p, rc = %Rrc, cbParms = %d\n", pHGCMCall, rc, cbParms));
    314312
    315313    if (RT_SUCCESS(rc))
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette