VirtualBox

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

Dev/VGA/crOpenGL/wddm: command thread, more command processing

File:
1 edited

Legend:

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

    r50394 r50754  
    962962 * We differentiate between a function handler for the guest and one for the host.
    963963 */
    964 static DECLCALLBACK(int) svcHostCall (void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
     964static int svcHostCallPerform(void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
    965965{
    966966    int rc = VINF_SUCCESS;
     
    980980    switch (u32Function)
    981981    {
    982         case SHCRGL_HOST_FN_CRCMD_NOTIFY_CMDS:
    983         {
    984             rc = crVBoxServerCrCmdNotifyCmds();
    985         } break;
    986982#ifdef VBOX_WITH_CRHGSMI
    987983        case SHCRGL_HOST_FN_CRHGSMI_CMD:
     
    14771473}
    14781474
     1475static DECLCALLBACK(int) svcHostCall (void *, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
     1476{
     1477    switch (u32Function)
     1478    {
     1479        case SHCRGL_HOST_FN_CTL:
     1480        {
     1481            if (cParms != 1)
     1482            {
     1483                WARN(("cParams != 1"));
     1484                return VERR_INVALID_PARAMETER;
     1485            }
     1486
     1487            if (paParms->type != VBOX_HGCM_SVC_PARM_PTR)
     1488            {
     1489                WARN(("invalid param type"));
     1490                return VERR_INVALID_PARAMETER;
     1491            }
     1492
     1493            if (paParms->u.pointer.size < sizeof (VBOXCRCMDCTL))
     1494            {
     1495                WARN(("invalid param size"));
     1496                return VERR_INVALID_PARAMETER;
     1497            }
     1498
     1499            if ((paParms->u.pointer.size - sizeof (VBOXCRCMDCTL)) % sizeof(VBOXHGCMSVCPARM))
     1500            {
     1501                WARN(("invalid param size"));
     1502                return VERR_INVALID_PARAMETER;
     1503            }
     1504
     1505            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;
     1515        default:
     1516            return svcHostCallPerform(NULL, u32Function, cParms, paParms);
     1517    }
     1518
     1519}
     1520
    14791521extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *ptable)
    14801522{
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