VirtualBox

Ignore:
Timestamp:
Mar 18, 2014 5:14:09 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
92856
Message:

crOpenGL: bugfixes, more on new command submission

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp

    r50754 r50812  
    962962 * We differentiate between a function handler for the guest and one for the host.
    963963 */
    964 static int svcHostCallPerform(void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
     964static int svcHostCallPerform(uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
    965965{
    966966    int rc = VINF_SUCCESS;
     
    14731473}
    14741474
    1475 static DECLCALLBACK(int) svcHostCall (void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
     1475int crVBoxServerHostCtl(VBOXCRCMDCTL *pCtl, uint32_t cbCtl)
     1476{
     1477    if ((cbCtl - sizeof (VBOXCRCMDCTL)) % sizeof(VBOXHGCMSVCPARM))
     1478    {
     1479        WARN(("invalid param size"));
     1480        return VERR_INVALID_PARAMETER;
     1481    }
     1482    uint32_t cParams = (cbCtl - sizeof (VBOXCRCMDCTL)) / sizeof (VBOXHGCMSVCPARM);
     1483    return svcHostCallPerform(pCtl->u32Function, cParams, (VBOXHGCMSVCPARM*)(pCtl + 1));
     1484}
     1485
     1486static DECLCALLBACK(int) svcHostCall(void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
    14761487{
    14771488    switch (u32Function)
     
    14971508            }
    14981509
    1499             if ((paParms->u.pointer.size - sizeof (VBOXCRCMDCTL)) % sizeof(VBOXHGCMSVCPARM))
    1500             {
    1501                 WARN(("invalid param size"));
    1502                 return VERR_INVALID_PARAMETER;
    1503             }
    1504 
    15051510            VBOXCRCMDCTL *pCtl = (VBOXCRCMDCTL*)paParms->u.pointer.addr;
    1506             uint32_t cParams = (paParms->u.pointer.size - sizeof (VBOXCRCMDCTL)) / sizeof (VBOXHGCMSVCPARM);
    1507             return svcHostCallPerform(NULL, pCtl->u32Function, cParms, (VBOXHGCMSVCPARM*)(pCtl + 1));
    1508         }
    1509         case VBOXCRCMDCTL_TYPE_DISABLE:
    1510             AssertMsgFailed(("VBOXCRCMDCTL_TYPE_DISABLE\n"));
    1511             return VERR_NOT_IMPLEMENTED;
    1512         case VBOXCRCMDCTL_TYPE_ENABLE:
    1513             AssertMsgFailed(("VBOXCRCMDCTL_TYPE_ENABLE\n"));
    1514             return VERR_NOT_IMPLEMENTED;
     1511            switch (pCtl->enmType)
     1512            {
     1513                case VBOXCRCMDCTL_TYPE_HGCM:
     1514                {
     1515                    return crVBoxServerHostCtl(pCtl, paParms->u.pointer.size);
     1516                }
     1517                case VBOXCRCMDCTL_TYPE_DISABLE:
     1518                {
     1519                    if (paParms->u.pointer.size != sizeof (VBOXCRCMDCTL))
     1520                        WARN(("invalid param size"));
     1521                    return crVBoxServerHgcmDisable();
     1522                }
     1523                case VBOXCRCMDCTL_TYPE_ENABLE:
     1524                {
     1525                    if (paParms->u.pointer.size != sizeof (VBOXCRCMDCTL_ENABLE))
     1526                        WARN(("invalid param size"));
     1527                    VBOXCRCMDCTL_ENABLE *pEnable = (VBOXCRCMDCTL_ENABLE*)pCtl;
     1528                    return crVBoxServerHgcmEnable(pEnable->hRHCmd, pEnable->pfnRHCmd);
     1529                }
     1530                default:
     1531                    WARN(("invalid function"));
     1532                    return VERR_INVALID_PARAMETER;
     1533            }
     1534            WARN(("should not be here!"));
     1535            return VERR_INTERNAL_ERROR;
     1536        }
    15151537        default:
    1516             return svcHostCallPerform(NULL, u32Function, cParms, paParms);
    1517     }
    1518 
     1538            return svcHostCallPerform(u32Function, cParms, paParms);
     1539    }
    15191540}
    15201541
Note: See TracChangeset for help on using the changeset viewer.

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