VirtualBox

Changeset 68623 in vbox


Ignore:
Timestamp:
Sep 4, 2017 6:56:56 PM (7 years ago)
Author:
vboxsync
Message:

VBoxGuest.h: Dropped the I/O control function flags for indicating 32-bit and 64-bit and 16-bit. Only really needed for HGCM calls, so assigned two I/O controls to that function to distinguish between the parameter structures.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VBoxGuest.h

    r68616 r68623  
    4848 * @note This is considered internal in ring-3, please use the VbglR3 functions.
    4949 *
    50  * - The 7th bit (128) is reserved for distinguishing between 32-bit and 64-bit
    51  *   processes in future 64-bit guest additions, where it matters.
    52  * - The 6th bit is reserved for future hacks.
    53  * - IDC specific requests descends from 63.
     50 * - I/O controls for user and/or kernel mode starts at 0.
     51 * - IDC specific requests descends from 127.
     52 * - Bits 7 and 6 are currently reserved for future hacks.
    5453 *
    5554 * @remarks When creating new IOCtl interfaces keep in mind that not all OSes supports
     
    8382/** Cookie used to fend off some unwanted clients to the IOService. */
    8483# define VBOXGUEST_DARWIN_IOSERVICE_COOKIE          UINT32_C(0x56426f78) /* 'VBox' */
    85 #endif
    86 
    87 /** The bit-count indicator mask. */
    88 #define VBGL_IOCTL_FLAG_BIT_MASK                    UINT32_C(128)
    89 /** 64-bit specific I/O control flag. */
    90 #define VBGL_IOCTL_FLAG_64BIT                       UINT32_C(128)
    91 /** 32-bit specific I/O control flag.
    92  * @note Just for complementing VBGL_IOCTL_FLAG_64BIT.  It is also the same
    93  *       value we use for bit-count agnostic requests, so don't ever use for
    94  *       testing!
    95  * @internal */
    96 #define VBGL_IOCTL_FLAG_32BIT                       UINT32_C(0)
    97 /** 16-bit specific I/O control flag. */
    98 #define VBGL_IOCTL_FLAG_16BIT                       UINT32_C(64)
    99 /** Check if the I/O control is a 64-bit one.   */
    100 #define VBGL_IOCTL_IS_64BIT(a_uIOCtl)               RT_BOOL((a_uIOCtl) & VBGL_IOCTL_FLAG_64BIT)
    101 
    102 /** @def VBGL_IOCTL_FLAG_CC
    103  * The context specific bit-count flag to include in the bit-count sensitive
    104  * I/O controls. */
    105 #if ARCH_BITS == 64
    106 # define VBGL_IOCTL_FLAG_CC                         VBGL_IOCTL_FLAG_64BIT
    107 #elif ARCH_BITS == 32
    108 # define VBGL_IOCTL_FLAG_CC                         VBGL_IOCTL_FLAG_32BIT
    109 #elif ARCH_BITS == 16
    110 # define VBGL_IOCTL_FLAG_CC                         VBGL_IOCTL_FLAG_16BIT
    111 #else
    112 # error "dunno which arch this is!"
    11384#endif
    11485
     
    12293# define VBGL_IOCTL_CODE_BIG(Function)              CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_BUFFERED, FILE_WRITE_ACCESS)
    12394# define VBGL_IOCTL_CODE_FAST(Function)             CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_NEITHER,  FILE_WRITE_ACCESS)
    124 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         ((a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)
     95# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         (a_uIOCtl)
    12596# define VBOXGUEST_DEVICE_NAME                      "\\\\.\\VBoxGuest"
    12697/** The support service name. */
     
    140111# define VBGL_IOCTL_CATEGORY_FAST                   0xc3 /**< Also defined in VBoxGuestA-os2.asm. */
    141112# define VBGL_IOCTL_CODE_FAST(Function)             ((unsigned char)(Function))
    142 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         ((a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)
     113# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         (a_uIOCtl)
    143114# define VBOXGUEST_DEVICE_NAME                      "\\Dev\\VBoxGst$"
    144115/** Short device name for AttachDD.
     
    152123# define VBGL_IOCTL_CODE_BIG(Function)              _IOWRN('V', (Function), sizeof(VBGLREQHDR))
    153124# define VBGL_IOCTL_CODE_FAST(Function)             _IO(   'F', (Function))
    154 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         ((a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)
     125# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         (a_uIOCtl)
    155126# define VBGL_IOCTL_IS_FAST(a_uIOCtl)               ( ((a_uIOCtl) & 0x0000ff00) == ('F' << 8) )
    156127
     
    161132# define VBGL_IOCTL_CODE_BIG(Function)              _IO('V', (Function))
    162133# define VBGL_IOCTL_CODE_FAST(Function)             _IO('F', (Function))
    163 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         (_IOC_NR((a_uIOCtl)) & ~VBGL_IOCTL_FLAG_BIT_MASK)
     134# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         _IOC_NR((a_uIOCtl))
    164135# define VBOXGUEST_USER_DEVICE_NAME                 "/dev/vboxuser"
    165136
     
    170141# define VBGL_IOCTL_CODE_BIG(Function)              (0x56420000 | (Function))
    171142# define VBGL_IOCTL_CODE_FAST(Function)             (0x56420000 | (Function))
    172 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         ((a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)
     143# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         (a_uIOCtl)
    173144# define VBOXGUEST_DEVICE_NAME                      "/dev/misc/vboxguest"
    174145
     
    179150# define VBGL_IOCTL_CODE_BIG(Function)              _IO('V', (Function))
    180151# define VBGL_IOCTL_CODE_FAST(Function)             _IO('F', (Function))
    181 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         ((a_uIOCtl) & ~(_IOC(0,0,0,IOCPARM_MASK) | VBGL_IOCTL_FLAG_BIT_MASK))
     152# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl)         ((a_uIOCtl) & ~(_IOC(0,0,0,IOCPARM_MASK)))
    182153# define VBGL_IOCTL_IS_FAST(a_uIOCtl)               ( IOCGROUP(a_uIOCtl) == 'F' )
    183154#endif
     
    341312 * @{
    342313 */
    343 #define VBGL_IOCTL_GET_VMMDEV_IO_INFO               VBGL_IOCTL_CODE_SIZE(1 | VBGL_IOCTL_FLAG_CC, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE)
     314#define VBGL_IOCTL_GET_VMMDEV_IO_INFO               VBGL_IOCTL_CODE_SIZE(1, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE)
    344315#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE          sizeof(VBGLIOCGETVMMDEVIOINFO)
    345316#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE_IN       sizeof(VBGLREQHDR)
     
    447418 *
    448419 * @{ */
    449 # define VBGL_IOCTL_HGCM_CALL(a_cb)                 VBGL_IOCTL_CODE_SIZE(6 | VBGL_IOCTL_FLAG_CC,    (a_cb))
    450 # define VBGL_IOCTL_HGCM_CALL_32(a_cb)              VBGL_IOCTL_CODE_SIZE(6 | VBGL_IOCTL_FLAG_32BIT, (a_cb))
    451 # define VBGL_IOCTL_HGCM_CALL_64(a_cb)              VBGL_IOCTL_CODE_SIZE(6 | VBGL_IOCTL_FLAG_64BIT, (a_cb))
    452 # define VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(a_cb)  VBGL_IOCTL_CODE_SIZE(7 | VBGL_IOCTL_FLAG_CC,    (a_cb))
     420# define VBGL_IOCTL_HGCM_CALL_32(a_cb)              VBGL_IOCTL_CODE_SIZE(6, (a_cb))
     421# define VBGL_IOCTL_HGCM_CALL_64(a_cb)              VBGL_IOCTL_CODE_SIZE(7, (a_cb))
     422# if ARCH_BITS == 64
     423#  define VBGL_IOCTL_HGCM_CALL(a_cb)                VBGL_IOCTL_HGCM_CALL_64(a_cb)
     424# else
     425#  define VBGL_IOCTL_HGCM_CALL(a_cb)                VBGL_IOCTL_HGCM_CALL_32(a_cb)
     426# endif
     427# define VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(a_cb)  VBGL_IOCTL_CODE_SIZE(8, (a_cb))
    453428/** @note This is used by alot of HGCM call structures. */
    454429typedef struct VBGLIOCHGCMCALL
     
    562537 * @{ */
    563538#define VBOXGUEST_IOCTL_LOG(Size)
    564 #define VBGL_IOCTL_LOG(a_cchMsg)                    VBGL_IOCTL_CODE_BIG(8)
     539#define VBGL_IOCTL_LOG(a_cchMsg)                    VBGL_IOCTL_CODE_BIG(9)
    565540#define VBGL_IOCTL_LOG_SIZE(a_cchMsg)               (sizeof(VBGLREQHDR) + (a_cchMsg) + 1)
    566541#define VBGL_IOCTL_LOG_SIZE_IN(a_cchMsg)            (sizeof(VBGLREQHDR) + (a_cchMsg) + 1)
     
    587562 * @{
    588563 */
    589 #define VBGL_IOCTL_WAIT_FOR_EVENTS                  VBGL_IOCTL_CODE_SIZE(9, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE)
     564#define VBGL_IOCTL_WAIT_FOR_EVENTS                  VBGL_IOCTL_CODE_SIZE(10, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE)
    590565#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE             sizeof(VBGLIOCWAITFOREVENTS)
    591566#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE_IN          sizeof(VBGLIOCWAITFOREVENTS)
     
    627602 * @{
    628603 */
    629 #define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS    VBGL_IOCTL_CODE_SIZE(10, VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE)
     604#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS    VBGL_IOCTL_CODE_SIZE(11, VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE)
    630605#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE       sizeof(VBGLREQHDR)
    631606#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE_IN    sizeof(VBGLREQHDR)
     
    637612 * IOCTL to VBoxGuest to control the event filter mask.
    638613 * @{ */
    639 #define VBGL_IOCTL_CHANGE_FILTER_MASK               VBGL_IOCTL_CODE_SIZE(11, VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE)
     614#define VBGL_IOCTL_CHANGE_FILTER_MASK               VBGL_IOCTL_CODE_SIZE(12, VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE)
    640615#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE          sizeof(VBGLIOCCHANGEFILTERMASK)
    641616#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE_IN       sizeof(VBGLIOCCHANGEFILTERMASK)
     
    680655 * @{
    681656 */
    682 #define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES           VBGL_IOCTL_CODE_SIZE(12, VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE)
     657#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES           VBGL_IOCTL_CODE_SIZE(13, VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE)
    683658#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE      sizeof(VBGLIOCACQUIREGUESTCAPS)
    684659#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE_IN   sizeof(VBGLIOCACQUIREGUESTCAPS)
     
    718693 * IOCTL to VBoxGuest to set guest capabilities.
    719694 * @{ */
    720 #define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES            VBGL_IOCTL_CODE_SIZE(13, VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE)
     695#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES            VBGL_IOCTL_CODE_SIZE(14, VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE)
    721696#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE       sizeof(VBGLIOCSETGUESTCAPS)
    722697#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE_IN    sizeof(VBGLIOCSETGUESTCAPS)
     
    752727 * IOCTL to VBoxGuest to update the mouse status features.
    753728 * @{ */
    754 #define VBGL_IOCTL_SET_MOUSE_STATUS                 VBGL_IOCTL_CODE_SIZE(14, VBGL_IOCTL_SET_MOUSE_STATUS_SIZE)
     729#define VBGL_IOCTL_SET_MOUSE_STATUS                 VBGL_IOCTL_CODE_SIZE(15, VBGL_IOCTL_SET_MOUSE_STATUS_SIZE)
    755730#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE            sizeof(VBGLIOCSETMOUSESTATUS)
    756731#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE_IN         sizeof(VBGLIOCSETMOUSESTATUS)
     
    780755 *
    781756 * @{ */
    782 #define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK            VBGL_IOCTL_CODE_SIZE(15, VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE)
     757#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK            VBGL_IOCTL_CODE_SIZE(16, VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE)
    783758#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE       sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK)
    784759#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE_IN    sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK)
     
    816791 * responsible for allocating memory and calling R0 (VBGL_IOCTL_CHANGE_BALLOON).
    817792 * @{ */
    818 #define VBGL_IOCTL_CHECK_BALLOON                    VBGL_IOCTL_CODE_SIZE(16, VBGL_IOCTL_CHECK_BALLOON_SIZE)
     793#define VBGL_IOCTL_CHECK_BALLOON                    VBGL_IOCTL_CODE_SIZE(17, VBGL_IOCTL_CHECK_BALLOON_SIZE)
    819794#define VBGL_IOCTL_CHECK_BALLOON_SIZE               sizeof(VBGLIOCCHECKBALLOON)
    820795#define VBGL_IOCTL_CHECK_BALLOON_SIZE_IN            sizeof(VBGLREQHDR)
     
    851826 *
    852827 * @{ */
    853 #define VBGL_IOCTL_CHANGE_BALLOON                   VBGL_IOCTL_CODE_SIZE(17, VBGL_IOCTL_CHANGE_BALLOON_SIZE)
     828#define VBGL_IOCTL_CHANGE_BALLOON                   VBGL_IOCTL_CODE_SIZE(18, VBGL_IOCTL_CHANGE_BALLOON_SIZE)
    854829#define VBGL_IOCTL_CHANGE_BALLOON_SIZE              sizeof(VBGLIOCCHANGEBALLOON)
    855830#define VBGL_IOCTL_CHANGE_BALLOON_SIZE_IN           sizeof(VBGLIOCCHANGEBALLOON)
     
    879854 * IOCTL to VBoxGuest to write guest core.
    880855 * @{ */
    881 #define VBGL_IOCTL_WRITE_CORE_DUMP                  VBGL_IOCTL_CODE_SIZE(18, VBGL_IOCTL_WRITE_CORE_DUMP_SIZE)
     856#define VBGL_IOCTL_WRITE_CORE_DUMP                  VBGL_IOCTL_CODE_SIZE(19, VBGL_IOCTL_WRITE_CORE_DUMP_SIZE)
    882857#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE             sizeof(VBGLIOCWRITECOREDUMP)
    883858#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE_IN          sizeof(VBGLIOCWRITECOREDUMP)
     
    906881 * the release log on the host.  Takes no data, returns no data.
    907882 * @{ */
    908 # define VBGL_IOCTL_DPC_LATENCY_CHECKER             VBGL_IOCTL_CODE_SIZE(19, VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE)
     883# define VBGL_IOCTL_DPC_LATENCY_CHECKER             VBGL_IOCTL_CODE_SIZE(20, VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE)
    909884# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE        sizeof(VBGLREQHDR)
    910885# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE_IN     sizeof(VBGLREQHDR)
     
    1001976 * @note ring-0 only.
    1002977 */
    1003 #define VBGL_IOCTL_IDC_CONNECT                      VBGL_IOCTL_CODE_SIZE(63 | (ARCH_BITS >= 32 ? VBGL_IOCTL_FLAG_CC : VBGL_IOCTL_FLAG_32BIT), VBGL_IOCTL_IDC_CONNECT_SIZE)
     978#define VBGL_IOCTL_IDC_CONNECT                      VBGL_IOCTL_CODE_SIZE(63, VBGL_IOCTL_IDC_CONNECT_SIZE)
    1004979#define VBGL_IOCTL_IDC_CONNECT_SIZE                 sizeof(VBGLIOCIDCCONNECT)
    1005980#define VBGL_IOCTL_IDC_CONNECT_SIZE_IN              RT_UOFFSET_AFTER(VBGLIOCIDCCONNECT, u.In)
     
    10621037 * @note ring-0 only.
    10631038 */
    1064 #define VBGL_IOCTL_IDC_DISCONNECT                   VBGL_IOCTL_CODE_SIZE(62 | (ARCH_BITS >= 32 ? VBGL_IOCTL_FLAG_CC : VBGL_IOCTL_FLAG_32BIT), VBGL_IOCTL_IDC_DISCONNECT_SIZE)
     1039#define VBGL_IOCTL_IDC_DISCONNECT                   VBGL_IOCTL_CODE_SIZE(62, VBGL_IOCTL_IDC_DISCONNECT_SIZE)
    10651040#define VBGL_IOCTL_IDC_DISCONNECT_SIZE              sizeof(VBGLIOCIDCDISCONNECT)
    10661041#define VBGL_IOCTL_IDC_DISCONNECT_SIZE_IN           sizeof(VBGLIOCIDCDISCONNECT)
  • trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp

    r68565 r68623  
    36673667        }
    36683668#ifdef VBOX_WITH_HGCM
    3669         else if (iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL(0)))
     3669        else if (   iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL(0))
     3670# if ARCH_BITS == 64
     3671                 || iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_32(0))
     3672# endif
     3673                )
    36703674        {
    36713675            REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn >= sizeof(VBGLIOCHGCMCALL));
    36723676            REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn == pReqHdr->cbOut);
    36733677            pReqHdr->rc = vgdrvIoCtl_HGCMCallWrapper(pDevExt, pSession, (PVBGLIOCHGCMCALL)pReqHdr,
    3674                                                      !VBGL_IOCTL_IS_64BIT(iFunction), false /*fUserData*/, cbReq);
     3678                                                     iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_32(0)),
     3679                                                     false /*fUserData*/, cbReq);
    36753680        }
    36763681        else if (iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(0)))
     
    36803685            REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn == pReqHdr->cbOut);
    36813686            pReqHdr->rc = vgdrvIoCtl_HGCMCallWrapper(pDevExt, pSession, (PVBGLIOCHGCMCALL)pReqHdr,
    3682                                                      !VBGL_IOCTL_IS_64BIT(iFunction), true /*fUserData*/, cbReq);
     3687                                                     ARCH_BITS == 32, true /*fUserData*/, cbReq);
    36833688        }
    36843689#endif /* VBOX_WITH_HGCM */
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