Changeset 81406 in vbox for trunk/include/VBox/vmm
- Timestamp:
- Oct 21, 2019 12:30:54 PM (5 years ago)
- Location:
- trunk/include/VBox/vmm
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmdev.h
r81382 r81406 30 30 #endif 31 31 32 #include <VBox/vmm/pdmcritsect.h> 32 33 #include <VBox/vmm/pdmqueue.h> 33 #include <VBox/vmm/pdm critsect.h>34 #include <VBox/vmm/pdmtask.h> 34 35 #ifdef IN_RING3 35 36 # include <VBox/vmm/pdmthread.h> … … 3647 3648 DECLR3CALLBACKMEMBER(int, pfnDriverDetach,(PPDMDEVINS pDevIns, PPDMDRVINS pDrvIns, uint32_t fFlags)); 3648 3649 3650 /** @name Exported PDM Queue Functions 3651 * @{ */ 3649 3652 /** 3650 3653 * Create a queue. … … 3660 3663 * @param pszName The queue base name. The instance number will be 3661 3664 * appended automatically. 3662 * @param ppQueue Where to store the queue handleon success.3665 * @param ppQueue Where to store the queue pointer on success. 3663 3666 * @thread The emulation thread. 3664 3667 * @remarks The device critical section will NOT be entered before calling the … … 3666 3669 * that only one EMT will do queue callbacks at any one time. 3667 3670 */ 3671 DECLR3CALLBACKMEMBER(int, pfnQueueCreatePtr,(PPDMDEVINS pDevIns, size_t cbItem, uint32_t cItems, uint32_t cMilliesInterval, 3672 PFNPDMQUEUEDEV pfnCallback, bool fRZEnabled, const char *pszName, 3673 PPDMQUEUE *ppQueue)); 3674 3675 /** 3676 * Create a queue. 3677 * 3678 * @returns VBox status code. 3679 * @param pDevIns The device instance. 3680 * @param cbItem The size of a queue item. 3681 * @param cItems The number of items in the queue. 3682 * @param cMilliesInterval The number of milliseconds between polling the queue. 3683 * If 0 then the emulation thread will be notified whenever an item arrives. 3684 * @param pfnCallback The consumer function. 3685 * @param fRZEnabled Set if the queue should work in RC and R0. 3686 * @param pszName The queue base name. The instance number will be 3687 * appended automatically. 3688 * @param phQueue Where to store the queue handle on success. 3689 * @thread EMT(0) 3690 * @remarks The device critical section will NOT be entered before calling the 3691 * callback. No locks will be held, but for now it's safe to assume 3692 * that only one EMT will do queue callbacks at any one time. 3693 */ 3668 3694 DECLR3CALLBACKMEMBER(int, pfnQueueCreate,(PPDMDEVINS pDevIns, size_t cbItem, uint32_t cItems, uint32_t cMilliesInterval, 3669 PFNPDMQUEUEDEV pfnCallback, bool fRZEnabled, const char *pszName, PPDMQUEUE *ppQueue)); 3695 PFNPDMQUEUEDEV pfnCallback, bool fRZEnabled, const char *pszName, 3696 PDMQUEUEHANDLE *phQueue)); 3697 3698 DECLR3CALLBACKMEMBER(PPDMQUEUE, pfnQueueToPtr,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)); 3699 DECLR3CALLBACKMEMBER(PPDMQUEUEITEMCORE, pfnQueueAlloc,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)); 3700 DECLR3CALLBACKMEMBER(void, pfnQueueInsert,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem)); 3701 DECLR3CALLBACKMEMBER(void, pfnQueueInsertEx,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem, uint64_t cNanoMaxDelay)); 3702 DECLR3CALLBACKMEMBER(bool, pfnQueueFlushIfNecessary,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)); 3703 /** @} */ 3704 3705 /** @name PDM Task 3706 * @{ */ 3707 /** 3708 * Create an asynchronous ring-3 task. 3709 * 3710 * @returns VBox status code. 3711 * @param pDevIns The device instance. 3712 * @param fFlags PDMTASK_F_XXX 3713 * @param pszName The function name or similar. Used for statistics, 3714 * so no slashes. 3715 * @param pfnCallback The task function. 3716 * @param pvUser User argument for the task function. 3717 * @param phTask Where to return the task handle. 3718 * @thread EMT(0) 3719 */ 3720 DECLR3CALLBACKMEMBER(int, pfnTaskCreate,(PPDMDEVINS pDevIns, uint32_t fFlags, const char *pszName, 3721 PFNPDMTASKDEV pfnCallback, void *pvUser, PDMTASKHANDLE *phTask)); 3722 /** 3723 * Triggers the running the given task. 3724 * 3725 * @returns VBox status code. 3726 * @retval VINF_ALREADY_POSTED is the task is already pending. 3727 * @param pDevIns The device instance. 3728 * @param hTask The task to trigger. 3729 * @thread Any thread. 3730 */ 3731 DECLR3CALLBACKMEMBER(int, pfnTaskTrigger,(PPDMDEVINS pDevIns, PDMTASKHANDLE hTask)); 3732 /** @} */ 3733 3734 /** @name SUP Event Semaphore Wrappers (single release / auto reset) 3735 * These semaphores can be signalled from ring-0. 3736 * @{ */ 3737 /** @sa SUPSemEventCreate */ 3738 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventCreate,(PPDMDEVINS pDevIns, PSUPSEMEVENT phEvent)); 3739 /** @sa SUPSemEventClose */ 3740 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventClose,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent)); 3741 /** @sa SUPSemEventSignal */ 3742 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventSignal,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent)); 3743 /** @sa SUPSemEventWaitNoResume */ 3744 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventWaitNoResume,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint32_t cMillies)); 3745 /** @sa SUPSemEventWaitNsAbsIntr */ 3746 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventWaitNsAbsIntr,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t uNsTimeout)); 3747 /** @sa SUPSemEventWaitNsRelIntr */ 3748 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventWaitNsRelIntr,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t cNsTimeout)); 3749 /** @sa SUPSemEventGetResolution */ 3750 DECLR3CALLBACKMEMBER(uint32_t, pfnSUPSemEventGetResolution,(PPDMDEVINS pDevIns)); 3751 /** @} */ 3752 3753 /** @name SUP Multi Event Semaphore Wrappers (multiple release / manual reset) 3754 * These semaphores can be signalled from ring-0. 3755 * @{ */ 3756 /** @sa SUPSemEventMultiCreate */ 3757 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventMultiCreate,(PPDMDEVINS pDevIns, PSUPSEMEVENTMULTI phEventMulti)); 3758 /** @sa SUPSemEventMultiClose */ 3759 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventMultiClose,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti)); 3760 /** @sa SUPSemEventMultiSignal */ 3761 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventMultiSignal,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti)); 3762 /** @sa SUPSemEventMultiReset */ 3763 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventMultiReset,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti)); 3764 /** @sa SUPSemEventMultiWaitNoResume */ 3765 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventMultiWaitNoResume,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint32_t cMillies)); 3766 /** @sa SUPSemEventMultiWaitNsAbsIntr */ 3767 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventMultiWaitNsAbsIntr,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint64_t uNsTimeout)); 3768 /** @sa SUPSemEventMultiWaitNsRelIntr */ 3769 DECLR3CALLBACKMEMBER(int, pfnSUPSemEventMultiWaitNsRelIntr,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint64_t cNsTimeout)); 3770 /** @sa SUPSemEventMultiGetResolution */ 3771 DECLR3CALLBACKMEMBER(uint32_t, pfnSUPSemEventMultiGetResolution,(PPDMDEVINS pDevIns)); 3772 /** @} */ 3670 3773 3671 3774 /** … … 5059 5162 DECLR0CALLBACKMEMBER(uint64_t, pfnTMTimeVirtGetNano,(PPDMDEVINS pDevIns)); 5060 5163 5164 /** @name Exported PDM Queue Functions 5165 * @{ */ 5166 DECLR0CALLBACKMEMBER(PPDMQUEUE, pfnQueueToPtr,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)); 5167 DECLR0CALLBACKMEMBER(PPDMQUEUEITEMCORE, pfnQueueAlloc,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)); 5168 DECLR0CALLBACKMEMBER(void, pfnQueueInsert,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem)); 5169 DECLR0CALLBACKMEMBER(void, pfnQueueInsertEx,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem, uint64_t cNanoMaxDelay)); 5170 DECLR0CALLBACKMEMBER(bool, pfnQueueFlushIfNecessary,(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue)); 5171 /** @} */ 5172 5173 /** @name PDM Task 5174 * @{ */ 5175 /** 5176 * Triggers the running the given task. 5177 * 5178 * @returns VBox status code. 5179 * @retval VINF_ALREADY_POSTED is the task is already pending. 5180 * @param pDevIns The device instance. 5181 * @param hTask The task to trigger. 5182 * @thread Any thread. 5183 */ 5184 DECLR0CALLBACKMEMBER(int, pfnTaskTrigger,(PPDMDEVINS pDevIns, PDMTASKHANDLE hTask)); 5185 /** @} */ 5186 5187 /** @name SUP Event Semaphore Wrappers (single release / auto reset) 5188 * These semaphores can be signalled from ring-0. 5189 * @{ */ 5190 /** @sa SUPSemEventSignal */ 5191 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventSignal,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent)); 5192 /** @sa SUPSemEventWaitNoResume */ 5193 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventWaitNoResume,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint32_t cMillies)); 5194 /** @sa SUPSemEventWaitNsAbsIntr */ 5195 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventWaitNsAbsIntr,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t uNsTimeout)); 5196 /** @sa SUPSemEventWaitNsRelIntr */ 5197 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventWaitNsRelIntr,(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t cNsTimeout)); 5198 /** @sa SUPSemEventGetResolution */ 5199 DECLR0CALLBACKMEMBER(uint32_t, pfnSUPSemEventGetResolution,(PPDMDEVINS pDevIns)); 5200 /** @} */ 5201 5202 /** @name SUP Multi Event Semaphore Wrappers (multiple release / manual reset) 5203 * These semaphores can be signalled from ring-0. 5204 * @{ */ 5205 /** @sa SUPSemEventMultiSignal */ 5206 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventMultiSignal,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti)); 5207 /** @sa SUPSemEventMultiReset */ 5208 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventMultiReset,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti)); 5209 /** @sa SUPSemEventMultiWaitNoResume */ 5210 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventMultiWaitNoResume,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint32_t cMillies)); 5211 /** @sa SUPSemEventMultiWaitNsAbsIntr */ 5212 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventMultiWaitNsAbsIntr,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint64_t uNsTimeout)); 5213 /** @sa SUPSemEventMultiWaitNsRelIntr */ 5214 DECLR0CALLBACKMEMBER(int, pfnSUPSemEventMultiWaitNsRelIntr,(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint64_t cNsTimeout)); 5215 /** @sa SUPSemEventMultiGetResolution */ 5216 DECLR0CALLBACKMEMBER(uint32_t, pfnSUPSemEventMultiGetResolution,(PPDMDEVINS pDevIns)); 5217 /** @} */ 5218 5061 5219 /** 5062 5220 * Gets the NOP critical section. … … 5142 5300 5143 5301 /** Current PDMDEVHLP version number. */ 5144 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 9, 0)5302 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 10, 0) 5145 5303 5146 5304 … … 6731 6889 6732 6890 /** 6733 * @copydoc PDMDEVHLPR3::pfnQueueCreate 6891 * @copydoc PDMDEVHLPR3::pfnQueueCreatePtr 6734 6892 */ 6735 6893 DECLINLINE(int) PDMDevHlpQueueCreate(PPDMDEVINS pDevIns, size_t cbItem, uint32_t cItems, uint32_t cMilliesInterval, 6736 6894 PFNPDMQUEUEDEV pfnCallback, bool fRZEnabled, const char *pszName, PPDMQUEUE *ppQueue) 6737 6895 { 6738 return pDevIns->pHlpR3->pfnQueueCreate(pDevIns, cbItem, cItems, cMilliesInterval, pfnCallback, fRZEnabled, pszName, ppQueue); 6739 } 6896 return pDevIns->pHlpR3->pfnQueueCreatePtr(pDevIns, cbItem, cItems, cMilliesInterval, pfnCallback, fRZEnabled, pszName, ppQueue); 6897 } 6898 6899 /** 6900 * @copydoc PDMDEVHLPR3::pfnQueueCreate 6901 */ 6902 DECLINLINE(int) PDMDevHlpQueueCreateNew(PPDMDEVINS pDevIns, size_t cbItem, uint32_t cItems, uint32_t cMilliesInterval, 6903 PFNPDMQUEUEDEV pfnCallback, bool fRZEnabled, const char *pszName, PDMQUEUEHANDLE *phQueue) 6904 { 6905 return pDevIns->pHlpR3->pfnQueueCreate(pDevIns, cbItem, cItems, cMilliesInterval, pfnCallback, fRZEnabled, pszName, phQueue); 6906 } 6907 6908 #endif /* IN_RING3 */ 6909 6910 /** 6911 * @copydoc PDMDEVHLPR3::pfnQueueAlloc 6912 */ 6913 DECLINLINE(PPDMQUEUEITEMCORE) PDMDevHlpQueueAlloc(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue) 6914 { 6915 return pDevIns->CTX_SUFF(pHlp)->pfnQueueAlloc(pDevIns, hQueue); 6916 } 6917 6918 /** 6919 * @copydoc PDMDEVHLPR3::pfnQueueInsert 6920 */ 6921 DECLINLINE(void) PDMDevHlpQueueInsert(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem) 6922 { 6923 pDevIns->CTX_SUFF(pHlp)->pfnQueueInsert(pDevIns, hQueue, pItem); 6924 } 6925 6926 /** 6927 * @copydoc PDMDEVHLPR3::pfnQueueInsertEx 6928 */ 6929 DECLINLINE(void) PDMDevHlpQueueInsertEx(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue, PPDMQUEUEITEMCORE pItem, uint64_t cNanoMaxDelay) 6930 { 6931 pDevIns->CTX_SUFF(pHlp)->pfnQueueInsertEx(pDevIns, hQueue, pItem, cNanoMaxDelay); 6932 } 6933 6934 /** 6935 * @copydoc PDMDEVHLPR3::pfnQueueFlushIfNecessary 6936 */ 6937 DECLINLINE(bool) PDMDevHlpQueueFlushIfNecessary(PPDMDEVINS pDevIns, PDMQUEUEHANDLE hQueue) 6938 { 6939 return pDevIns->CTX_SUFF(pHlp)->pfnQueueFlushIfNecessary(pDevIns, hQueue); 6940 } 6941 6942 #ifdef IN_RING3 6943 /** 6944 * @copydoc PDMDEVHLPR3::pfnTaskCreate 6945 */ 6946 DECLINLINE(int) PDMDevHlpTaskCreate(PPDMDEVINS pDevIns, uint32_t fFlags, const char *pszName, 6947 PFNPDMTASKDEV pfnCallback, void *pvUser, PDMTASKHANDLE *phTask) 6948 { 6949 return pDevIns->pHlpR3->pfnTaskCreate(pDevIns, fFlags, pszName, pfnCallback, pvUser, phTask); 6950 } 6951 #endif 6952 6953 /** 6954 * @copydoc PDMDEVHLPR3::pfnTaskTrigger 6955 */ 6956 DECLINLINE(int) PDMDevHlpTaskTrigger(PPDMDEVINS pDevIns, PDMTASKHANDLE hTask) 6957 { 6958 return pDevIns->CTX_SUFF(pHlp)->pfnTaskTrigger(pDevIns, hTask); 6959 } 6960 6961 #ifdef IN_RING3 6962 6963 /** 6964 * @copydoc PDMDEVHLPR3::pfnSUPSemEventCreate 6965 */ 6966 DECLINLINE(int) PDMDevHlpSUPSemEventCreate(PPDMDEVINS pDevIns, PSUPSEMEVENT phEvent) 6967 { 6968 return pDevIns->pHlpR3->pfnSUPSemEventCreate(pDevIns, phEvent); 6969 } 6970 6971 /** 6972 * @copydoc PDMDEVHLPR3::pfnSUPSemEventClose 6973 */ 6974 DECLINLINE(int) PDMDevHlpSUPSemEventClose(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent) 6975 { 6976 return pDevIns->pHlpR3->pfnSUPSemEventClose(pDevIns, hEvent); 6977 } 6978 6979 #endif /* IN_RING3 */ 6980 6981 /** 6982 * @copydoc PDMDEVHLPR3::pfnSUPSemEventSignal 6983 */ 6984 DECLINLINE(int) PDMDevHlpSUPSemEventSignal(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent) 6985 { 6986 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventSignal(pDevIns, hEvent); 6987 } 6988 6989 /** 6990 * @copydoc PDMDEVHLPR3::pfnSUPSemEventWaitNoResume 6991 */ 6992 DECLINLINE(int) PDMDevHlpSUPSemEventWaitNoResume(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint32_t cMillies) 6993 { 6994 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventWaitNoResume(pDevIns, hEvent, cMillies); 6995 } 6996 6997 /** 6998 * @copydoc PDMDEVHLPR3::pfnSUPSemEventWaitNsAbsIntr 6999 */ 7000 DECLINLINE(int) PDMDevHlpSUPSemEventWaitNsAbsIntr(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t uNsTimeout) 7001 { 7002 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventWaitNsAbsIntr(pDevIns, hEvent, uNsTimeout); 7003 } 7004 7005 /** 7006 * @copydoc PDMDEVHLPR3::pfnSUPSemEventWaitNsRelIntr 7007 */ 7008 DECLINLINE(int) PDMDevHlpSUPSemEventWaitNsRelIntr(PPDMDEVINS pDevIns, SUPSEMEVENT hEvent, uint64_t cNsTimeout) 7009 { 7010 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventWaitNsRelIntr(pDevIns, hEvent, cNsTimeout); 7011 } 7012 7013 /** 7014 * @copydoc PDMDEVHLPR3::pfnSUPSemEventGetResolution 7015 */ 7016 DECLINLINE(uint32_t) PDMDevHlpSUPSemEventGetResolution(PPDMDEVINS pDevIns) 7017 { 7018 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventGetResolution(pDevIns); 7019 } 7020 7021 #ifdef IN_RING3 7022 7023 /** 7024 * @copydoc PDMDEVHLPR3::pfnSUPSemEventMultiCreate 7025 */ 7026 DECLINLINE(int) PDMDevHlpSUPSemEventMultiCreate(PPDMDEVINS pDevIns, PSUPSEMEVENTMULTI phEventMulti) 7027 { 7028 return pDevIns->pHlpR3->pfnSUPSemEventMultiCreate(pDevIns, phEventMulti); 7029 } 7030 7031 /** 7032 * @copydoc PDMDEVHLPR3::pfnSUPSemEventMultiClose 7033 */ 7034 DECLINLINE(int) PDMDevHlpSUPSemEventMultiClose(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti) 7035 { 7036 return pDevIns->pHlpR3->pfnSUPSemEventMultiClose(pDevIns, hEventMulti); 7037 } 7038 7039 #endif /* IN_RING3 */ 7040 7041 /** 7042 * @copydoc PDMDEVHLPR3::pfnSUPSemEventMultiSignal 7043 */ 7044 DECLINLINE(int) PDMDevHlpSUPSemEventMultiSignal(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti) 7045 { 7046 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventMultiSignal(pDevIns, hEventMulti); 7047 } 7048 7049 /** 7050 * @copydoc PDMDEVHLPR3::pfnSUPSemEventMultiReset 7051 */ 7052 DECLINLINE(int) PDMDevHlpSUPSemEventMultiReset(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti) 7053 { 7054 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventMultiReset(pDevIns, hEventMulti); 7055 } 7056 7057 /** 7058 * @copydoc PDMDEVHLPR3::pfnTaskTrigger 7059 */ 7060 DECLINLINE(int) PDMDevHlpSUPSemEventMultiWaitNoResume(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint32_t cMillies) 7061 { 7062 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventMultiWaitNsRelIntr(pDevIns, hEventMulti, cMillies); 7063 } 7064 7065 /** 7066 * @copydoc PDMDEVHLPR3::pfnSUPSemEventMultiWaitNsAbsIntr 7067 */ 7068 DECLINLINE(int) PDMDevHlpSUPSemEventMultiWaitNsAbsIntr(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint64_t uNsTimeout) 7069 { 7070 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventMultiWaitNsAbsIntr(pDevIns, hEventMulti, uNsTimeout); 7071 } 7072 7073 /** 7074 * @copydoc PDMDEVHLPR3::pfnSUPSemEventMultiWaitNsRelIntr 7075 */ 7076 DECLINLINE(int) PDMDevHlpSUPSemEventMultiWaitNsRelIntr(PPDMDEVINS pDevIns, SUPSEMEVENTMULTI hEventMulti, uint64_t cNsTimeout) 7077 { 7078 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventMultiWaitNsRelIntr(pDevIns, hEventMulti, cNsTimeout); 7079 } 7080 7081 /** 7082 * @copydoc PDMDEVHLPR3::pfnSUPSemEventMultiGetResolution 7083 */ 7084 DECLINLINE(uint32_t) PDMDevHlpSUPSemEventMultiGetResolution(PPDMDEVINS pDevIns) 7085 { 7086 return pDevIns->CTX_SUFF(pHlp)->pfnSUPSemEventMultiGetResolution(pDevIns); 7087 } 7088 7089 #ifdef IN_RING3 6740 7090 6741 7091 /** -
trunk/include/VBox/vmm/pdmqueue.h
r76585 r81406 39 39 */ 40 40 41 /** Pointer to a PDM queue. Also called PDM queue handle. */ 41 /** PDM queue handle. */ 42 typedef uint64_t PDMQUEUEHANDLE; 43 /** NIL PDM queue handle. */ 44 #define NIL_PDMQUEUEHANDLE UINT64_MAX 45 46 /** Pointer to a PDM queue. */ 42 47 typedef struct PDMQUEUE *PPDMQUEUE; 43 48 -
trunk/include/VBox/vmm/pdmtask.h
r81391 r81406 133 133 } PDMTASKTYPE; 134 134 135 VMMR3_INT_DECL(int) PDMR3TaskCreate(PVM pVM, uint32_t fFlags, const char *pszName, PDMTASKTYPE enmType, void *pvOwner, 136 PFNRT pfnCallback, void *pvUser, PDMTASKHANDLE *phTask); 135 137 VMMR3_INT_DECL(int) PDMR3TaskCreateInternal(PVM pVM, uint32_t fFlags, const char *pszName, 136 138 PFNPDMTASKINT pfnCallback, void *pvUser, PDMTASKHANDLE *phTask); 137 VMMR3_INT_DECL(int) PDMR3TaskCreateGeneric(PVM pVM, uint32_t fFlags, const char *pszName, PDMTASKTYPE enmType, void *pvOwner,138 PFNRT pfnCallback, void *pvUser, PDMTASKHANDLE *phTask);139 VMMR3_INT_DECL(int) PDMR3TaskDestroyInternal(PVM pVM, PDMTASKHANDLE hTask);140 139 VMMR3_INT_DECL(int) PDMR3TaskDestroyAllByOwner(PVM pVM, PDMTASKTYPE enmType, void *pvOwner); 141 140 VMMR3_INT_DECL(int) PDMR3TaskDestroySpecific(PVM pVM, PDMTASKTYPE enmType, void *pvOwner, PDMTASKHANDLE hTask); 141 VMMR3_INT_DECL(int) PDMR3TaskDestroyInternal(PVM pVM, PDMTASKHANDLE hTask); 142 142 143 VMM_INT_DECL(int) PDMTaskTrigger(PVM pVM, PDMTASKTYPE enmType, void *pvOwner, PDMTASKHANDLE hTask);144 VMM_INT_DECL(int) PDMTaskTriggerInternal(PVM pVM, PDMTASKHANDLE hTask);143 VMM_INT_DECL(int) PDMTaskTrigger(PVMCC pVM, PDMTASKTYPE enmType, RTR3PTR pvOwner, PDMTASKHANDLE hTask); 144 VMM_INT_DECL(int) PDMTaskTriggerInternal(PVMCC pVM, PDMTASKHANDLE hTask); 145 145 #endif /* VBOX_IN_VMM */ 146 146
Note:
See TracChangeset
for help on using the changeset viewer.