12a6a4076SMarkus Armbruster #ifndef QEMU_THREAD_WIN32_H 22a6a4076SMarkus Armbruster #define QEMU_THREAD_WIN32_H 3a9c94277SMarkus Armbruster 4a9c94277SMarkus Armbruster #include <windows.h> 51de7afc9SPaolo Bonzini 61de7afc9SPaolo Bonzini struct QemuMutex { 712f8def0SAndrey Shedel SRWLOCK lock; 8ba59fb77SPaolo Bonzini #ifdef CONFIG_DEBUG_MUTEX 9ba59fb77SPaolo Bonzini const char *file; 10ba59fb77SPaolo Bonzini int line; 11ba59fb77SPaolo Bonzini #endif 12c096358eSFam Zheng bool initialized; 131de7afc9SPaolo Bonzini }; 141de7afc9SPaolo Bonzini 15feadec63SPaolo Bonzini typedef struct QemuRecMutex QemuRecMutex; 16feadec63SPaolo Bonzini struct QemuRecMutex { 17feadec63SPaolo Bonzini CRITICAL_SECTION lock; 18c096358eSFam Zheng bool initialized; 19feadec63SPaolo Bonzini }; 20feadec63SPaolo Bonzini 211de7afc9SPaolo Bonzini struct QemuCond { 2212f8def0SAndrey Shedel CONDITION_VARIABLE var; 23c096358eSFam Zheng bool initialized; 241de7afc9SPaolo Bonzini }; 251de7afc9SPaolo Bonzini 261de7afc9SPaolo Bonzini struct QemuSemaphore { 271de7afc9SPaolo Bonzini HANDLE sema; 28c096358eSFam Zheng bool initialized; 291de7afc9SPaolo Bonzini }; 301de7afc9SPaolo Bonzini 31c7c4d063SPaolo Bonzini struct QemuEvent { 327c9b2bf6SPaolo Bonzini int value; 33c7c4d063SPaolo Bonzini HANDLE event; 34c096358eSFam Zheng bool initialized; 35c7c4d063SPaolo Bonzini }; 36c7c4d063SPaolo Bonzini 371de7afc9SPaolo Bonzini typedef struct QemuThreadData QemuThreadData; 381de7afc9SPaolo Bonzini struct QemuThread { 391de7afc9SPaolo Bonzini QemuThreadData *data; 401de7afc9SPaolo Bonzini unsigned tid; 411de7afc9SPaolo Bonzini }; 421de7afc9SPaolo Bonzini 431de7afc9SPaolo Bonzini /* Only valid for joinable threads. */ 44*ec150c7eSMarkus Armbruster HANDLE qemu_thread_get_handle(struct QemuThread *thread); 451de7afc9SPaolo Bonzini 461de7afc9SPaolo Bonzini #endif 47