xref: /openbmc/qemu/include/sysemu/os-win32.h (revision a28c2f2d)
19c17d615SPaolo Bonzini /*
29c17d615SPaolo Bonzini  * win32 specific declarations
39c17d615SPaolo Bonzini  *
49c17d615SPaolo Bonzini  * Copyright (c) 2003-2008 Fabrice Bellard
59c17d615SPaolo Bonzini  * Copyright (c) 2010 Jes Sorensen <Jes.Sorensen@redhat.com>
69c17d615SPaolo Bonzini  *
79c17d615SPaolo Bonzini  * Permission is hereby granted, free of charge, to any person obtaining a copy
89c17d615SPaolo Bonzini  * of this software and associated documentation files (the "Software"), to deal
99c17d615SPaolo Bonzini  * in the Software without restriction, including without limitation the rights
109c17d615SPaolo Bonzini  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
119c17d615SPaolo Bonzini  * copies of the Software, and to permit persons to whom the Software is
129c17d615SPaolo Bonzini  * furnished to do so, subject to the following conditions:
139c17d615SPaolo Bonzini  *
149c17d615SPaolo Bonzini  * The above copyright notice and this permission notice shall be included in
159c17d615SPaolo Bonzini  * all copies or substantial portions of the Software.
169c17d615SPaolo Bonzini  *
179c17d615SPaolo Bonzini  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
189c17d615SPaolo Bonzini  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
199c17d615SPaolo Bonzini  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
209c17d615SPaolo Bonzini  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
219c17d615SPaolo Bonzini  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
229c17d615SPaolo Bonzini  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
239c17d615SPaolo Bonzini  * THE SOFTWARE.
249c17d615SPaolo Bonzini  */
259c17d615SPaolo Bonzini 
269c17d615SPaolo Bonzini #ifndef QEMU_OS_WIN32_H
279c17d615SPaolo Bonzini #define QEMU_OS_WIN32_H
289c17d615SPaolo Bonzini 
299c17d615SPaolo Bonzini #include <windows.h>
309c17d615SPaolo Bonzini #include <winsock2.h>
319c17d615SPaolo Bonzini 
329c17d615SPaolo Bonzini /* Workaround for older versions of MinGW. */
339c17d615SPaolo Bonzini #ifndef ECONNREFUSED
349c17d615SPaolo Bonzini # define ECONNREFUSED WSAECONNREFUSED
359c17d615SPaolo Bonzini #endif
369c17d615SPaolo Bonzini #ifndef EINPROGRESS
379c17d615SPaolo Bonzini # define EINPROGRESS  WSAEINPROGRESS
389c17d615SPaolo Bonzini #endif
399c17d615SPaolo Bonzini #ifndef EHOSTUNREACH
409c17d615SPaolo Bonzini # define EHOSTUNREACH WSAEHOSTUNREACH
419c17d615SPaolo Bonzini #endif
429c17d615SPaolo Bonzini #ifndef EINTR
439c17d615SPaolo Bonzini # define EINTR        WSAEINTR
449c17d615SPaolo Bonzini #endif
459c17d615SPaolo Bonzini #ifndef EINPROGRESS
469c17d615SPaolo Bonzini # define EINPROGRESS  WSAEINPROGRESS
479c17d615SPaolo Bonzini #endif
489c17d615SPaolo Bonzini #ifndef ENETUNREACH
499c17d615SPaolo Bonzini # define ENETUNREACH  WSAENETUNREACH
509c17d615SPaolo Bonzini #endif
519c17d615SPaolo Bonzini #ifndef ENOTCONN
529c17d615SPaolo Bonzini # define ENOTCONN     WSAENOTCONN
539c17d615SPaolo Bonzini #endif
549c17d615SPaolo Bonzini #ifndef EWOULDBLOCK
559c17d615SPaolo Bonzini # define EWOULDBLOCK  WSAEWOULDBLOCK
569c17d615SPaolo Bonzini #endif
579c17d615SPaolo Bonzini 
589c17d615SPaolo Bonzini #if defined(_WIN64)
599c17d615SPaolo Bonzini /* On w64, setjmp is implemented by _setjmp which needs a second parameter.
609c17d615SPaolo Bonzini  * If this parameter is NULL, longjump does no stack unwinding.
619c17d615SPaolo Bonzini  * That is what we need for QEMU. Passing the value of register rsp (default)
629c17d615SPaolo Bonzini  * lets longjmp try a stack unwinding which will crash with generated code. */
639c17d615SPaolo Bonzini # undef setjmp
649c17d615SPaolo Bonzini # define setjmp(env) _setjmp(env, NULL)
659c17d615SPaolo Bonzini #endif
666ab7e546SPeter Maydell /* QEMU uses sigsetjmp()/siglongjmp() as the portable way to specify
676ab7e546SPeter Maydell  * "longjmp and don't touch the signal masks". Since we know that the
686ab7e546SPeter Maydell  * savemask parameter will always be zero we can safely define these
696ab7e546SPeter Maydell  * in terms of setjmp/longjmp on Win32.
706ab7e546SPeter Maydell  */
716ab7e546SPeter Maydell #define sigjmp_buf jmp_buf
726ab7e546SPeter Maydell #define sigsetjmp(env, savemask) setjmp(env)
736ab7e546SPeter Maydell #define siglongjmp(env, val) longjmp(env, val)
749c17d615SPaolo Bonzini 
759c17d615SPaolo Bonzini /* Missing POSIX functions. Don't use MinGW-w64 macros. */
764d9310f4SDaniel P. Berrange #ifndef CONFIG_LOCALTIME_R
779c17d615SPaolo Bonzini #undef gmtime_r
789c17d615SPaolo Bonzini struct tm *gmtime_r(const time_t *timep, struct tm *result);
799c17d615SPaolo Bonzini #undef localtime_r
809c17d615SPaolo Bonzini struct tm *localtime_r(const time_t *timep, struct tm *result);
814d9310f4SDaniel P. Berrange #endif /* CONFIG_LOCALTIME_R */
829c17d615SPaolo Bonzini 
837b2d9779SStefan Weil 
849c17d615SPaolo Bonzini static inline void os_setup_signal_handling(void) {}
859c17d615SPaolo Bonzini static inline void os_daemonize(void) {}
869c17d615SPaolo Bonzini static inline void os_setup_post(void) {}
879c17d615SPaolo Bonzini void os_set_line_buffering(void);
889c17d615SPaolo Bonzini static inline void os_set_proc_name(const char *dummy) {}
899c17d615SPaolo Bonzini 
90*a28c2f2dSStefan Weil int getpagesize(void);
9138183310SPaolo Bonzini 
929c17d615SPaolo Bonzini #if !defined(EPROTONOSUPPORT)
939c17d615SPaolo Bonzini # define EPROTONOSUPPORT EINVAL
949c17d615SPaolo Bonzini #endif
959c17d615SPaolo Bonzini 
969c17d615SPaolo Bonzini int setenv(const char *name, const char *value, int overwrite);
979c17d615SPaolo Bonzini 
989c17d615SPaolo Bonzini typedef struct {
999c17d615SPaolo Bonzini     long tv_sec;
1009c17d615SPaolo Bonzini     long tv_usec;
1019c17d615SPaolo Bonzini } qemu_timeval;
1029c17d615SPaolo Bonzini int qemu_gettimeofday(qemu_timeval *tp);
1039c17d615SPaolo Bonzini 
1049c17d615SPaolo Bonzini static inline bool is_daemonized(void)
1059c17d615SPaolo Bonzini {
1069c17d615SPaolo Bonzini     return false;
1079c17d615SPaolo Bonzini }
1089c17d615SPaolo Bonzini 
109888a6bc6SSatoru Moriya static inline int os_mlock(void)
110888a6bc6SSatoru Moriya {
111888a6bc6SSatoru Moriya     return -ENOSYS;
112888a6bc6SSatoru Moriya }
113888a6bc6SSatoru Moriya 
1141aad8104SPeter Maydell #define fsync _commit
1151aad8104SPeter Maydell 
1161aad8104SPeter Maydell #if !defined(lseek)
1171aad8104SPeter Maydell # define lseek _lseeki64
1181aad8104SPeter Maydell #endif
1191aad8104SPeter Maydell 
1201aad8104SPeter Maydell int qemu_ftruncate64(int, int64_t);
1211aad8104SPeter Maydell 
1221aad8104SPeter Maydell #if !defined(ftruncate)
1231aad8104SPeter Maydell # define ftruncate qemu_ftruncate64
1241aad8104SPeter Maydell #endif
1251aad8104SPeter Maydell 
1261aad8104SPeter Maydell static inline char *realpath(const char *path, char *resolved_path)
1271aad8104SPeter Maydell {
1281aad8104SPeter Maydell     _fullpath(resolved_path, path, _MAX_PATH);
1291aad8104SPeter Maydell     return resolved_path;
1301aad8104SPeter Maydell }
1311aad8104SPeter Maydell 
1329c17d615SPaolo Bonzini #endif
133