From c5e97233e8c8e53aab1b80b5e9891a71c4edea3e Mon Sep 17 00:00:00 2001 From: blueswir1 Date: Sat, 7 Mar 2009 20:06:23 +0000 Subject: [PATCH] Support for DragonFly BSD (Hasso Tepper) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6746 c046a42c-6fe2-441c-8c8c-71466251a162 --- audio/sdlaudio.c | 2 +- block-raw-posix.c | 14 ++++++++++++++ block.c | 2 ++ configure | 9 +++++++++ exec.c | 2 +- net.c | 2 +- osdep.c | 4 ++-- qemu-char.c | 14 +++++++++----- savevm.c | 2 +- usb-bsd.c | 10 +++++++--- vl.c | 8 +++++--- 11 files changed, 52 insertions(+), 17 deletions(-) diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c index dd85e98..5d6fc24 100644 --- a/audio/sdlaudio.c +++ b/audio/sdlaudio.c @@ -29,7 +29,7 @@ #ifndef _WIN32 #ifdef __sun__ #define _POSIX_PTHREAD_SEMANTICS 1 -#elif defined(__OpenBSD__) || defined(__FreeBSD__) +#elif defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) #include #endif #include diff --git a/block-raw-posix.c b/block-raw-posix.c index 85ca704..8695368 100644 --- a/block-raw-posix.c +++ b/block-raw-posix.c @@ -63,6 +63,11 @@ #include #endif +#ifdef __DragonFly__ +#include +#include +#endif + //#define DEBUG_FLOPPY //#define DEBUG_BLOCK @@ -762,6 +767,15 @@ static int64_t raw_getlength(BlockDriverState *bs) if (!fstat(fd, &sb) && (S_IFCHR & sb.st_mode)) { #ifdef DIOCGMEDIASIZE if (ioctl(fd, DIOCGMEDIASIZE, (off_t *)&size)) +#elif defined(DIOCGPART) + { + struct partinfo pi; + if (ioctl(fd, DIOCGPART, &pi) == 0) + size = pi.media_size; + else + size = 0; + } + if (size == 0) #endif #ifdef CONFIG_COCOA size = LONG_LONG_MAX; diff --git a/block.c b/block.c index 81f36b9..669e021 100644 --- a/block.c +++ b/block.c @@ -35,8 +35,10 @@ #include #include #include +#ifndef __DragonFly__ #include #endif +#endif #define SECTOR_BITS 9 #define SECTOR_SIZE (1 << SECTOR_BITS) diff --git a/configure b/configure index 3823ee4..a4e6f8d 100755 --- a/configure +++ b/configure @@ -229,6 +229,15 @@ if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then kqemu="yes" fi ;; +DragonFly) +bsd="yes" +audio_drv_list="oss" +audio_possible_drivers="oss sdl esd pa" +if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then + kqemu="yes" +fi +aio="no" +;; NetBSD) bsd="yes" audio_drv_list="oss" diff --git a/exec.c b/exec.c index 9823af3..6a5f2fe 100644 --- a/exec.c +++ b/exec.c @@ -454,7 +454,7 @@ static void code_gen_alloc(unsigned long tb_size) exit(1); } } -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) { int flags; void *addr = NULL; diff --git a/net.c b/net.c index 1efa810..bfd1bd4 100644 --- a/net.c +++ b/net.c @@ -54,7 +54,7 @@ #include #ifdef _BSD #include -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__DragonFly__) #include #else #include diff --git a/osdep.c b/osdep.c index ff5f17a..c34dfd2 100644 --- a/osdep.c +++ b/osdep.c @@ -92,7 +92,7 @@ static void *kqemu_vmalloc(size_t size) void *ptr; /* no need (?) for a dummy file on OpenBSD/FreeBSD */ -#if defined(__OpenBSD__) || defined(__FreeBSD__) +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) int map_anon = MAP_ANON; #else int map_anon = 0; @@ -159,7 +159,7 @@ static void *kqemu_vmalloc(size_t size) } size = (size + 4095) & ~4095; ftruncate(phys_ram_fd, phys_ram_size + size); -#endif /* !(__OpenBSD__ || __FreeBSD__) */ +#endif /* !(__OpenBSD__ || __FreeBSD__ || __DragonFly__) */ ptr = mmap(NULL, size, PROT_WRITE | PROT_READ, map_anon | MAP_SHARED, diff --git a/qemu-char.c b/qemu-char.c index 26e8825..566a0ba 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -67,6 +67,10 @@ #include #include #include +#elif defined(__DragonFly__) +#include +#include +#include #else #include #endif @@ -806,7 +810,7 @@ void cfmakeraw (struct termios *termios_p) #endif #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \ - || defined(__NetBSD__) || defined(__OpenBSD__) + || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) typedef struct { int fd; @@ -934,7 +938,7 @@ static CharDriverState *qemu_chr_open_pty(void) PtyCharDriver *s; struct termios tty; int slave_fd, len; -#if defined(__OpenBSD__) +#if defined(__OpenBSD__) || defined(__DragonFly__) char pty_name[PATH_MAX]; #define q_ptsname(x) pty_name #else @@ -1280,7 +1284,7 @@ static CharDriverState *qemu_chr_open_pp(const char *filename) } #endif /* __linux__ */ -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__DragonFly__) static int pp_ioctl(CharDriverState *chr, int cmd, void *arg) { int fd = (int)chr->opaque; @@ -2153,13 +2157,13 @@ CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*i if (strstart(filename, "/dev/parport", NULL)) { chr = qemu_chr_open_pp(filename); } else -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) if (strstart(filename, "/dev/ppi", NULL)) { chr = qemu_chr_open_pp(filename); } else #endif #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \ - || defined(__NetBSD__) || defined(__OpenBSD__) + || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) if (strstart(filename, "/dev/", NULL)) { chr = qemu_chr_open_tty(filename); } else diff --git a/savevm.c b/savevm.c index a25d365..8d0ecdc 100644 --- a/savevm.c +++ b/savevm.c @@ -54,7 +54,7 @@ #include #ifdef _BSD #include -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__DragonFly__) #include #else #include diff --git a/usb-bsd.c b/usb-bsd.c index ddcce41..5becea5 100644 --- a/usb-bsd.c +++ b/usb-bsd.c @@ -34,7 +34,11 @@ #undef USB_SPEED_LOW #include +#ifndef __DragonFly__ #include +#else +#include +#endif #include /* This value has maximum potential at 16. @@ -68,7 +72,7 @@ static int ensure_ep_open(USBHostDevice *dev, int ep, int mode) ep = UE_GET_ADDR(ep); if (dev->ep_fd[ep] < 0) { -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__DragonFly__) snprintf(buf, sizeof(buf) - 1, "%s.%d", dev->devpath, ep); #else snprintf(buf, sizeof(buf) - 1, "%s.%02d", dev->devpath, ep); @@ -321,7 +325,7 @@ USBDevice *usb_host_device_open(const char *devname) return NULL; } -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__DragonFly__) snprintf(ctlpath, PATH_MAX, "/dev/%s", bus_info.udi_devnames[0]); #else snprintf(ctlpath, PATH_MAX, "/dev/%s.00", bus_info.udi_devnames[0]); @@ -411,7 +415,7 @@ static int usb_host_scan(void *opaque, USBScanFunc *func) if (strncmp(bus_info.udi_devnames[0], "ugen", 4) != 0) continue; -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__DragonFly__) snprintf(devbuf, sizeof(devbuf) - 1, "/dev/%s", bus_info.udi_devnames[0]); #else snprintf(devbuf, sizeof(devbuf) - 1, "/dev/%s.00", bus_info.udi_devnames[0]); diff --git a/vl.c b/vl.c index 804c835..62a9194 100644 --- a/vl.c +++ b/vl.c @@ -55,7 +55,7 @@ #include #ifdef _BSD #include -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__DragonFly__) #include #else #include @@ -759,7 +759,8 @@ static int use_rt_clock; static void init_get_clock(void) { use_rt_clock = 0; -#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) +#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \ + || defined(__DragonFly__) { struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) { @@ -771,7 +772,8 @@ static void init_get_clock(void) static int64_t get_clock(void) { -#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) +#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \ + || defined(__DragonFly__) if (use_rt_clock) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); -- 1.7.9.5