VirtualBox

Changeset 19881 in vbox


Ignore:
Timestamp:
May 21, 2009 1:09:48 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
47576
Message:

SUPDrv.c: Implemented the SEM_CREATE and SEM_OP IOCtls.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.c

    r19867 r19881  
    16331633        }
    16341634
     1635        case SUP_CTL_CODE_NO_SIZE(SUP_IOCTL_SEM_CREATE):
     1636        {
     1637            /* validate */
     1638            PSUPSEMCREATE pReq = (PSUPSEMCREATE)pReqHdr;
     1639            REQ_CHECK_SIZES_EX(SUP_IOCTL_SEM_CREATE, SUP_IOCTL_SEM_CREATE_SIZE_IN, SUP_IOCTL_SEM_CREATE_SIZE_OUT);
     1640
     1641            /* execute */
     1642            switch (pReq->u.In.uType)
     1643            {
     1644                case SUP_SEM_TYPE_EVENT:
     1645                {
     1646                    SUPSEMEVENT hEvent;
     1647                    pReq->Hdr.rc = SUPSemEventCreate(pSession, &hEvent);
     1648                    pReq->u.Out.hSem = (uint32_t)(uintptr_t)hEvent;
     1649                    break;
     1650                }
     1651
     1652                case SUP_SEM_TYPE_EVENT_MULTI:
     1653                {
     1654                    SUPSEMEVENTMULTI hEventMulti;
     1655                    pReq->Hdr.rc = SUPSemEventMultiCreate(pSession, &hEventMulti);
     1656                    pReq->u.Out.hSem = (uint32_t)(uintptr_t)hEventMulti;
     1657                    break;
     1658                }
     1659
     1660                default:
     1661                    pReq->Hdr.rc = VERR_INVALID_PARAMETER;
     1662                    break;
     1663            }
     1664            return 0;
     1665        }
     1666
     1667        case SUP_CTL_CODE_NO_SIZE(SUP_IOCTL_SEM_OP):
     1668        {
     1669            /* validate */
     1670            PSUPSEMOP pReq = (PSUPSEMOP)pReqHdr;
     1671            REQ_CHECK_SIZES_EX(SUP_IOCTL_SEM_OP, SUP_IOCTL_SEM_OP_SIZE_IN, SUP_IOCTL_SEM_OP_SIZE_OUT);
     1672
     1673            /* execute */
     1674            switch (pReq->u.In.uType)
     1675            {
     1676                case SUP_SEM_TYPE_EVENT:
     1677                {
     1678                    SUPSEMEVENT hEvent = (SUPSEMEVENT)(uintptr_t)pReq->u.In.hSem;
     1679                    switch (pReq->u.In.uOp)
     1680                    {
     1681                        case SUPSEMOP_WAIT:
     1682                            pReq->Hdr.rc = SUPSemEventWaitNoResume(pSession, hEvent, pReq->u.In.cMillies);
     1683                            break;
     1684                        case SUPSEMOP_SIGNAL:
     1685                            pReq->Hdr.rc = SUPSemEventSignal(pSession, hEvent);
     1686                            break;
     1687                        case SUPSEMOP_CLOSE:
     1688                            pReq->Hdr.rc = SUPSemEventClose(pSession, hEvent);
     1689                            break;
     1690                        case SUPSEMOP_RESET:
     1691                        default:
     1692                            pReq->Hdr.rc = VERR_INVALID_FUNCTION;
     1693                            break;
     1694                    }
     1695                    break;
     1696                }
     1697
     1698                case SUP_SEM_TYPE_EVENT_MULTI:
     1699                {
     1700                    SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)(uintptr_t)pReq->u.In.hSem;
     1701                    switch (pReq->u.In.uOp)
     1702                    {
     1703                        case SUPSEMOP_WAIT:
     1704                            pReq->Hdr.rc = SUPSemEventMultiWaitNoResume(pSession, hEventMulti, pReq->u.In.cMillies);
     1705                            break;
     1706                        case SUPSEMOP_SIGNAL:
     1707                            pReq->Hdr.rc = SUPSemEventMultiSignal(pSession, hEventMulti);
     1708                            break;
     1709                        case SUPSEMOP_CLOSE:
     1710                            pReq->Hdr.rc = SUPSemEventMultiClose(pSession, hEventMulti);
     1711                            break;
     1712                        case SUPSEMOP_RESET:
     1713                            pReq->Hdr.rc = SUPSemEventMultiReset(pSession, hEventMulti);
     1714                            break;
     1715                        default:
     1716                            pReq->Hdr.rc = VERR_INVALID_FUNCTION;
     1717                            break;
     1718                    }
     1719                    break;
     1720                }
     1721
     1722                default:
     1723                    pReq->Hdr.rc = VERR_INVALID_PARAMETER;
     1724                    break;
     1725            }
     1726            return 0;
     1727        }
     1728
    16351729        default:
    16361730            Log(("Unknown IOCTL %#lx\n", (long)uIOCtl));
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