18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef QEMU_OSDEP_H
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_OSDEP_H
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
46731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include "config-host.h"
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <stdarg.h>
62910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include <stddef.h>
76731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include <stdbool.h>
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/types.h>
96731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifdef __OpenBSD__
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/signal.h>
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
136731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifndef _WIN32
146731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include <sys/wait.h>
156731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else
166731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define WIFEXITED(x)   1
176731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define WEXITSTATUS(x) (x)
186731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
196731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <sys/time.h>
215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
226731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(CONFIG_SOLARIS) && CONFIG_SOLARIS_VERSION < 10
236731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/* [u]int_fast*_t not in <sys/int_types.h> */
246731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnertypedef unsigned char           uint_fast8_t;
256731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnertypedef unsigned int            uint_fast16_t;
266731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnertypedef signed int              int_fast16_t;
276731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
286731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef glue
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define xglue(x, y) x ## y
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define glue(x, y) xglue(x, y)
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define stringify(s)	tostring(s)
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tostring(s)	#s
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef likely
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if __GNUC__ < 3
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define __builtin_expect(x, n) (x)
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define likely(x)   __builtin_expect(!!(x), 1)
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define unlikely(x)   __builtin_expect(!!(x), 0)
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef container_of
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define container_of(ptr, type, member) ({                      \
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        const typeof(((type *) 0)->member) *__mptr = (ptr);     \
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        (type *) ((char *) __mptr - offsetof(type, member));})
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
512910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner/* Convert from a base type to a parent type, with compile time checking.  */
522910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#ifdef __GNUC__
532910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define DO_UPCAST(type, field, dev) ( __extension__ ( { \
542910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner    char __attribute__((unused)) offset_must_be_zero[ \
552910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner        -offsetof(type, field)]; \
562910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner    container_of(dev, type, field);}))
572910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#else
582910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define DO_UPCAST(type, field, dev) container_of(dev, type, field)
592910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#endif
602910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
612910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define typeof_field(type, field) typeof(((type *)0)->field)
622910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define type_check(t1,t2) ((t1*)0 - (t2*)0)
632910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef MIN
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MIN(a, b) (((a) < (b)) ? (a) : (b))
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef MAX
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MAX(a, b) (((a) > (b)) ? (a) : (b))
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
716731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifndef ROUND_UP
726731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define ROUND_UP(n,d) (((n) + (d) - 1) & -(d))
736731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
746731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
7545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifndef DIV_ROUND_UP
7645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
7745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif
7845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef ARRAY_SIZE
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef always_inline
842910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#if !((__GNUC__ < 3) || defined(__APPLE__))
855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef __OPTIMIZE__
866731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#undef inline
872910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define inline __attribute__ (( always_inline )) __inline__
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
916731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#undef inline
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define inline always_inline
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_printf printf
968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
976731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerint qemu_daemon(int nochdir, int noclose);
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *qemu_memalign(size_t alignment, size_t size);
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *qemu_vmalloc(size_t size);
1006731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid *qemu_anon_ram_alloc(size_t size);
1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_vfree(void *ptr);
1026731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_anon_ram_free(void *ptr, size_t size);
1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_INVALID -1
10545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
10645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#if defined(CONFIG_MADVISE)
10745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
10845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_WILLNEED  MADV_WILLNEED
10945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTNEED  MADV_DONTNEED
11045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifdef MADV_DONTFORK
11145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK  MADV_DONTFORK
11245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else
11345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
11445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif
11545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifdef MADV_MERGEABLE
11645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE MADV_MERGEABLE
11745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else
11845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
11945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif
1206731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifdef MADV_DONTDUMP
1216731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP MADV_DONTDUMP
1226731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else
1236731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID
1246731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
1256731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifdef MADV_HUGEPAGE
1266731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE MADV_HUGEPAGE
1276731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else
1286731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE QEMU_MADV_INVALID
1296731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
13045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
13145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#elif defined(CONFIG_POSIX_MADVISE)
13245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
13345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_WILLNEED  POSIX_MADV_WILLNEED
13445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTNEED  POSIX_MADV_DONTNEED
13545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
13645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
1376731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID
1386731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE  QEMU_MADV_INVALID
13945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
14045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else /* no-op */
14145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
14245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_WILLNEED  QEMU_MADV_INVALID
14345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTNEED  QEMU_MADV_INVALID
14445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
14545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
1466731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID
1476731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE  QEMU_MADV_INVALID
14845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
14945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif
15045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
15145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerint qemu_madvise(void *addr, size_t len, int advice);
15245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
1536731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerint qemu_open(const char *name, int flags, ...);
1546731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerint qemu_close(int fd);
1556731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
1566731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(__HAIKU__) && defined(__i386__)
1576731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define FMT_pid "%ld"
1586731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#elif defined(WIN64)
1596731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define FMT_pid "%" PRId64
1606731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else
1616731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define FMT_pid "%d"
1626731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
1636731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
16445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerint qemu_create_pidfile(const char *filename);
16545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerint qemu_get_thread_id(void);
16645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
1676731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifndef CONFIG_IOVEC
1686731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerstruct iovec {
1696731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner    void *iov_base;
1706731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner    size_t iov_len;
1716731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner};
1726731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/*
1736731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * Use the same value as Linux for now.
1746731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */
1756731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define IOV_MAX 1024
1766731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
1776731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerssize_t readv(int fd, const struct iovec *iov, int iov_cnt);
1786731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerssize_t writev(int fd, const struct iovec *iov, int iov_cnt);
1796731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else
1806731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include <sys/uio.h>
1816731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
1826731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
18345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifdef _WIN32
18445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerstatic inline void qemu_timersub(const struct timeval *val1,
18545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner                                 const struct timeval *val2,
18645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner                                 struct timeval *res)
18745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner{
18845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner    res->tv_sec = val1->tv_sec - val2->tv_sec;
18945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner    if (val1->tv_usec < val2->tv_usec) {
19045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner        res->tv_sec--;
19145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner        res->tv_usec = val1->tv_usec - val2->tv_usec + 1000 * 1000;
19245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner    } else {
19345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner        res->tv_usec = val1->tv_usec - val2->tv_usec;
19445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner    }
19545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner}
19645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else
19745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define qemu_timersub timersub
19845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define ffs __builtin_ffs
19945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif
20045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner
2016731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_set_cloexec(int fd);
2026731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
2036731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_set_version(const char *);
2046731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerconst char *qemu_get_version(void);
2056731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
2066731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid fips_set_state(bool requested);
2076731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerbool fips_get_state(void);
2086731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
2096731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/* Return a dynamically allocated pathname denoting a file or directory that is
2106731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * appropriate for storing local state.
2116731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner *
2126731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * @relative_pathname need not start with a directory separator; one will be
2136731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * added automatically.
2146731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner *
2156731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * The caller is responsible for releasing the value returned with g_free()
2166731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * after use.
2176731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */
2186731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerchar *qemu_get_local_state_pathname(const char *relative_pathname);
2196731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
2206731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/**
2216731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * qemu_getauxval:
2226731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * @type: the auxiliary vector key to lookup
2236731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner *
2246731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * Search the auxiliary vector for @type, returning the value
2256731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * or 0 if @type is not present.
2266731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */
2276731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(CONFIG_GETAUXVAL) || defined(__linux__)
2286731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerunsigned long qemu_getauxval(unsigned long type);
2296731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else
2306731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerstatic inline unsigned long qemu_getauxval(unsigned long type) { return 0; }
2316731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif
2326731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner
2336731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/**
2346731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * qemu_init_auxval:
2356731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * @envp: the third argument to main
2366731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner *
2376731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * If supported and required, locate the auxiliary vector at program startup.
2386731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */
2396731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(CONFIG_GETAUXVAL) || !defined(__linux__)
2406731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerstatic inline void qemu_init_auxval(char **envp) { }
2416731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else
2426731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_init_auxval(char **envp);
243a2c14f947951612b45024095afd2210aa7368773David 'Digit' Turner#endif
244a2c14f947951612b45024095afd2210aa7368773David 'Digit' Turner
2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
246