aboutsummaryrefslogtreecommitdiff
path: root/emulators/virtualbox-ose/files
diff options
context:
space:
mode:
Diffstat (limited to 'emulators/virtualbox-ose/files')
-rw-r--r--emulators/virtualbox-ose/files/patch-configure56
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Additions-x11-VBoxClient-Makefile.kmk20
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Devices-Audio-audio.c14
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk26
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageHelp.cpp37
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageModifyVM.cpp23
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Makefile.kmk27
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Support-SUPR3HardenedMain.cpp33
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c11
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-VBoxNetFltInternal.h28
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c384
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Installer-Makefile.kmk15
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Main-AudioAdapterImpl.cpp14
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl.cpp11
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl2.cpp103
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Main-include-ConsoleImpl.h20
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Runtime-VBox-log-vbox.cpp82
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-spinlock-r0drv-freebsd.c14
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h11
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-rtProcInitExePath-freebsd.cpp81
-rw-r--r--emulators/virtualbox-ose/files/patch-src-VBox-apps-adpctl_VBoxNetAdpCtl.cpp207
-rw-r--r--emulators/virtualbox-ose/files/patch-src-settings-vm-VBoxVMSettingsAudio.cpp12
22 files changed, 555 insertions, 674 deletions
diff --git a/emulators/virtualbox-ose/files/patch-configure b/emulators/virtualbox-ose/files/patch-configure
index c6532c3db606..a4aaf507ccc9 100644
--- a/emulators/virtualbox-ose/files/patch-configure
+++ b/emulators/virtualbox-ose/files/patch-configure
@@ -1,15 +1,33 @@
---- configure.orgi 2009-05-31 13:43:50.000000000 +0200
-+++ configure 2009-05-31 13:45:47.000000000 +0200
-@@ -102,7 +102,7 @@
- XSLTPROC="xsltproc"
+--- configure.orig 2009-12-17 15:23:05.000000000 +0100
++++ configure 2009-12-21 14:25:45.000000000 +0100
+@@ -107,7 +107,7 @@
GENISOIMAGE="genisoimage"
MKISOFS="mkisofs"
+ INCCRYPTO=""
-LIBCRYPTO="-lcrypto"
+LIBCRYPTO="-lcrypto -lssl"
LIBPTHREAD="-lpthread"
LIBCAP="-lcap"
GSOAP=""
-@@ -1698,7 +1698,7 @@
+@@ -125,6 +125,8 @@
+ if [ "$OS" = "freebsd" ]; then
+ INCCURL="-I/usr/local/include"
+ LIBCURL="-L/usr/local/lib -lcurl"
++ INCPULSE="-I/usr/local/include"
++ LIBPULSE="-L/usr/local/lib"
+ else
+ INCCURL=""
+ LIBCURL="-lcurl"
+@@ -1181,7 +1183,7 @@
+ #endif
+ }
+ EOF
+- if test_compile "-lpulse" pulse pulse; then
++ if test_compile "$INCPULSE $LIBPULSE -lpulse" pulse pulse; then
+ test_execute
+ fi
+ }
+@@ -1773,7 +1775,7 @@
cat $ODIR.tmp_src.cc >> $LOG
echo "using the following command line:" >> $LOG
echo "$CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so" >> $LOG
@@ -18,3 +36,31 @@
if [ $? -eq 0 ]; then
found=1
break
+@@ -2315,6 +2317,15 @@
+ [ $WITH_QT4 -eq 1 ] && check_qt4
+ [ $WITH_PYTHON -eq 1 ] && check_python
+
++# PulseAudio
++if [ "$OS" = "linux" -o "$OS" = "freebsd" ]; then
++ if [ $WITH_PULSE -eq 1 ]; then
++ check_pulse
++ else
++ cnf_append "VBOX_WITH_PULSE" ""
++ fi
++fi
++
+ # Linux-specific
+ if [ "$OS" = "linux" ]; then
+ # don't check for the static libstdc++ in the PUEL version as we build the
+@@ -2332,11 +2343,6 @@
+ else
+ cnf_append "VBOX_WITH_ALSA" ""
+ fi
+- if [ $WITH_PULSE -eq 1 ]; then
+- check_pulse
+- else
+- cnf_append "VBOX_WITH_PULSE" ""
+- fi
+ if [ $WITH_DBUS -eq 0 ]; then
+ cnf_append "VBOX_WITH_DBUS" ""
+ fi
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Additions-x11-VBoxClient-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-Additions-x11-VBoxClient-Makefile.kmk
new file mode 100644
index 000000000000..cc5553f7736d
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Additions-x11-VBoxClient-Makefile.kmk
@@ -0,0 +1,20 @@
+Index: src/VBox/Additions/x11/VBoxClient/Makefile.kmk
+===================================================================
+--- src/VBox/Additions/x11/VBoxClient/Makefile.kmk (revision 25472)
++++ src/VBox/Additions/x11/VBoxClient/Makefile.kmk (revision 25473)
+@@ -43,11 +43,14 @@
+ $(VBOX_LIBPATH32_X11)
+ VBoxClient_LIBS.freebsd = \
+ iconv
++VBoxClient_LIBS.linux = \
++ dl
++VBoxClient_LIBS.solaris = \
++ dl
+ VBoxClient_LIBS = \
+ $(VBOX_LIB_IPRT_GUEST_R3) \
+ $(VBOX_LIB_VBGL_R3) \
+ $(VBOX_LIB_IPRT_GUEST_R3) \
+- dl \
+ X11 \
+ Xt
+ # These are static replacements for gcc-specific parts of libstdc++
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Audio-audio.c b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Audio-audio.c
new file mode 100644
index 000000000000..16a3f8a69f73
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Audio-audio.c
@@ -0,0 +1,14 @@
+--- src/VBox/Devices/Audio/audio.c.orig 2009-12-15 14:54:13.000000000 +0900
++++ src/VBox/Devices/Audio/audio.c 2009-12-15 14:53:54.000000000 +0900
+@@ -73,6 +73,11 @@
+ &pulse_audio_driver,
+ # endif
+ #endif /* RT_OS_LINUX */
++#ifdef RT_OS_FREEBSD
++# ifdef VBOX_WITH_PULSE
++ &pulse_audio_driver,
++# endif
++#endif
+ #ifdef RT_OS_DARWIN
+ &coreaudio_audio_driver,
+ #endif
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk
index d404c8aee176..b76f318af457 100644
--- a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk
@@ -1,15 +1,13 @@
---- src/VBox/Devices/Makefile.kmk.orig 2009-11-01 22:50:39.000000000 +0100
-+++ src/VBox/Devices/Makefile.kmk 2009-11-01 22:50:52.000000000 +0100
-@@ -31,8 +31,10 @@
- include $(PATH_SUB_CURRENT)/PC/VMI/Makefile.kmk
- endif
- include $(PATH_SUB_CURRENT)/Graphics/BIOS/Makefile.kmk
--include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
--include $(PATH_SUB_CURRENT)/Storage/testcase/Makefile.kmk
-+ifdef VBOX_WITH_TESTCASES
-+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
-+ include $(PATH_SUB_CURRENT)/Storage/testcase/Makefile.kmk
-+endif
- ifndef VBOX_OSE
- include $(PATH_SUB_CURRENT)/Storage/VBoxHDDFormats/Makefile.kmk
+--- src/VBox/Devices/Makefile.kmk.orig 2009-12-17 15:27:43.000000000 +0100
++++ src/VBox/Devices/Makefile.kmk 2009-12-21 14:29:56.000000000 +0100
+@@ -970,6 +970,10 @@
+ Drivers_SOURCES.linux+= \
+ Audio/pulseaudio.c \
+ Audio/pulse_stubs.c
++ Drivers_DEFS.freebsd += VBOX_WITH_PULSE
++ Drivers_SOURCES.freebsd+= \
++ Audio/pulseaudio.c \
++ Audio/pulse_stubs.c
endif
+
+ ifdef VBOX_WITH_USB
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageHelp.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageHelp.cpp
new file mode 100644
index 000000000000..ffe2a20ceb63
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageHelp.cpp
@@ -0,0 +1,37 @@
+--- src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp.orig 2009-12-15 15:16:21.000000000 +0900
++++ src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp 2009-12-15 15:14:01.000000000 +0900
+@@ -41,6 +41,11 @@
+ #else
+ bool fSolaris = false;
+ #endif
++#ifdef RT_OS_FREEBSD
++ bool fFreeBSD = true;
++#else
++ bool fFreeBSD = false;
++#endif
+ #ifdef RT_OS_DARWIN
+ bool fDarwin = true;
+ #else
+@@ -62,6 +67,7 @@
+ fLinux = true;
+ fWin = true;
+ fSolaris = true;
++ fFreeBSD = true;
+ fDarwin = true;
+ fVRDP = true;
+ fVBoxSDL = true;
+@@ -227,6 +233,14 @@
+ #endif
+ );
+ }
++ if (fFreeBSD)
++ {
++ RTPrintf( "|oss"
++#ifdef VBOX_WITH_PULSE
++ "|pulse"
++#endif
++ );
++ }
+ if (fDarwin)
+ {
+ RTPrintf( "|coreaudio");
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageModifyVM.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageModifyVM.cpp
new file mode 100644
index 000000000000..38111c6205d4
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageModifyVM.cpp
@@ -0,0 +1,23 @@
+--- src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp.orig 2009-09-09 23:39:46.000000000 +0900
++++ src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp 2009-12-15 15:22:27.000000000 +0900
+@@ -1478,6 +1478,20 @@
+ # endif
+
+ #endif /* !RT_OS_SOLARIS */
++#ifdef RT_OS_FREEBSD
++ else if (!strcmp(ValueUnion.psz, "oss"))
++ {
++ CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS));
++ CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
++ }
++# ifdef VBOX_WITH_PULSE
++ else if (!strcmp(ValueUnion.psz, "pulse"))
++ {
++ CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Pulse));
++ CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
++ }
++# endif
++#endif /* !RT_OS_FREEBSD */
+ #ifdef RT_OS_DARWIN
+ else if (!strcmp(ValueUnion.psz, "coreaudio"))
+ {
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Makefile.kmk
new file mode 100644
index 000000000000..5e9024588b8a
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Makefile.kmk
@@ -0,0 +1,27 @@
+--- src/VBox/HostDrivers/Makefile.kmk.orig 2009-10-05 11:17:45.000000000 +0200
++++ src/VBox/HostDrivers/Makefile.kmk 2009-10-05 11:18:08.000000000 +0200
+@@ -40,7 +40,7 @@
+ endif
+ endif
+
+- if1of ($(KBUILD_TARGET),linux freebsd)
++ if1of ($(KBUILD_TARGET),linux)
+ #
+ # Install the Makefile for module compliation on Linux and FreeBSD hosts
+ #
+@@ -51,6 +51,7 @@
+ HostDrivers-src_SOURCES.freebsd = freebsd/Makefile
+ endif
+
++if 0
+ if1of ($(KBUILD_TARGET),freebsd)
+ #
+ # Install the export_modules script for tar'ing the module sources on FreeBSD hosts
+@@ -60,6 +61,7 @@
+ HostDrivers-sh_MODE = a+rx,u+w
+ HostDrivers-sh_SOURCES.freebsd = freebsd/export_modules
+ endif
++endif
+ endif # !VBOX_ONLY_DOCS
+
+ # Let kBuild generate the rules.
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Support-SUPR3HardenedMain.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Support-SUPR3HardenedMain.cpp
new file mode 100644
index 000000000000..4a89fec97dfa
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Support-SUPR3HardenedMain.cpp
@@ -0,0 +1,33 @@
+--- src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp (revision 25471)
++++ src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp (revision 25472)
+@@ -66,6 +66,9 @@
+ # ifndef CAP_TO_MASK
+ # define CAP_TO_MASK(cap) RT_BIT(cap)
+ # endif
++# elif defined(RT_OS_FREEBSD)
++# include <sys/param.h>
++# include <sys/sysctl.h>
+ # elif defined(RT_OS_SOLARIS)
+ # include <priv.h>
+ # endif
+@@ -325,7 +328,19 @@
+ sprintf(szFileBuf, "/proc/%ld/path/a.out", (long)getpid());
+ int cchLink = readlink(szFileBuf, &g_szSupLibHardenedExePath[0], sizeof(g_szSupLibHardenedExePath) - 1);
+ # else /* RT_OS_FREEBSD: */
+- int cchLink = readlink("/proc/curproc/file", &g_szSupLibHardenedExePath[0], sizeof(g_szSupLibHardenedExePath) - 1);
++ int aiName[4];
++ size_t cbPath;
++
++ aiName[0] = CTL_KERN;
++ aiName[1] = KERN_PROC;
++ aiName[2] = KERN_PROC_PATHNAME;
++ aiName[3] = getpid();
++
++ cbPath = sizeof(g_szSupLibHardenedExePath) - 1;
++ if(sysctl(aiName, RT_ELEMENTS(aiName), g_szSupLibHardenedExePath, &cbPath, NULL, 0) < 0)
++ supR3HardenedFatal("supR3HardenedExecDir: sysctl failed\n");
++
++ int cchLink = strlen(g_szSupLibHardenedExePath);
+ # endif
+ if (cchLink < 0 || cchLink == sizeof(g_szSupLibHardenedExePath) - 1)
+ supR3HardenedFatal("supR3HardenedExecDir: couldn't read \"%s\", errno=%d cchLink=%d\n",
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c
deleted file mode 100644
index 0e223c4b9039..000000000000
--- a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c.orig 2009-12-07 12:20:44.000000000 +0100
-+++ src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c 2009-12-07 12:21:00.000000000 +0100
-@@ -92,7 +92,7 @@
- DECLARE_MODULE(vboxnetadp, g_VBoxNetAdpFreeBSDModule, SI_SUB_PSEUDO, SI_ORDER_ANY);
- MODULE_VERSION(vboxnetadp, 1);
- MODULE_DEPEND(vboxnetadp, vboxdrv, 1, 1, 1);
--MODULE_DEPEND(vboxnetadp, ng_vboxnetflt, 1, 1, 1);
-+MODULE_DEPEND(vboxnetadp, vboxnetflt, 1, 1, 1);
-
- /**
- * Module event handler
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-VBoxNetFltInternal.h b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-VBoxNetFltInternal.h
deleted file mode 100644
index 250a1960a7f4..000000000000
--- a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-VBoxNetFltInternal.h
+++ /dev/null
@@ -1,28 +0,0 @@
-Index: src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
-===================================================================
---- src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h (revision 23391)
-+++ src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h (working copy)
-@@ -206,6 +206,14 @@
- hook_p output;
- /** Original interface flags */
- unsigned int flags;
-+ /** Input queue */
-+ struct ifqueue inq;
-+ /** Output queue */
-+ struct ifqueue outq;
-+ /** Input task */
-+ struct task tskin;
-+ /** Output task */
-+ struct task tskout;
- /** The MAC address of the interface. */
- RTMAC Mac;
- /** @} */
-@@ -241,6 +249,8 @@
- # endif
- #elif defined(RT_OS_LINUX)
- uint8_t abPadding[320];
-+#elif defined(RT_OS_FREEBSD)
-+ uint8_t abPadding[320];
- #else
- uint8_t abPadding[128];
- #endif
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c
deleted file mode 100644
index f23fedbf0ec0..000000000000
--- a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c
+++ /dev/null
@@ -1,384 +0,0 @@
-Index: src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c
-===================================================================
---- src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c (revision 23391)
-+++ src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c (working copy)
-@@ -43,6 +43,8 @@
- #include <sys/socket.h>
- #include <sys/sockio.h>
- #include <sys/syscallsubr.h>
-+#include <sys/queue.h>
-+#include <sys/taskqueue.h>
-
- #include <net/if.h>
- #include <net/if_var.h>
-@@ -78,8 +80,6 @@
- static ng_rcvdata_t ng_vboxnetflt_rcvdata;
- static ng_disconnect_t ng_vboxnetflt_disconnect;
- static int ng_vboxnetflt_mod_event(module_t mod, int event, void *data);
--static int ng_vboxnetflt_rcv_in(hook_p node, item_p item);
--static int ng_vboxnetflt_rcv_out(hook_p node, item_p item);
-
- /** Netgraph node type */
- #define NG_VBOXNETFLT_NODE_TYPE "vboxnetflt"
-@@ -112,8 +112,8 @@
- {
- .version = NG_ABI_VERSION,
- .name = NG_VBOXNETFLT_NODE_TYPE,
-- .mod_event = vboxnetflt_modevent,
-- .constructor = ng_vboxnetflt_constructor,
-+ .mod_event = vboxnetflt_modevent,
-+ .constructor = ng_vboxnetflt_constructor,
- .rcvmsg = ng_vboxnetflt_rcvmsg,
- .shutdown = ng_vboxnetflt_shutdown,
- .newhook = ng_vboxnetflt_newhook,
-@@ -122,7 +122,7 @@
- .cmdlist = ng_vboxnetflt_cmdlist,
- };
- NETGRAPH_INIT(vboxnetflt, &ng_vboxnetflt_typestruct);
--MODULE_VERSION(ng_vboxnetflt, 1);
-+MODULE_VERSION(vboxnetflt, 1);
- MODULE_DEPEND(ng_vboxnetflt, vboxdrv, 1, 1, 1);
-
- /**
-@@ -267,16 +267,12 @@
- if (strcmp(name, NG_VBOXNETFLT_HOOK_IN) == 0)
- {
- #if __FreeBSD_version >= 800000
-- NG_HOOK_SET_RCVDATA(hook, ng_vboxnetflt_rcv_in);
- NG_HOOK_SET_TO_INBOUND(hook);
- #endif
- pThis->u.s.input = hook;
- }
- else if (strcmp(name, NG_VBOXNETFLT_HOOK_OUT) == 0)
- {
--#if __FreeBSD_version >= 800000
-- NG_HOOK_SET_RCVDATA(hook, ng_vboxnetflt_rcv_out);
--#endif
- pThis->u.s.output = hook;
- }
- else
-@@ -310,161 +306,171 @@
-
- /**
- * Handle data on netgraph hooks.
-+ * Frames processing is deferred to a taskqueue because this might
-+ * be called with non-sleepable locks held and code paths inside
-+ * the virtual switch might sleep.
- */
- static int ng_vboxnetflt_rcvdata(hook_p hook, item_p item)
- {
- const node_p node = NG_HOOK_NODE(hook);
- PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node);
-+ struct ifnet *ifp = pThis->u.s.ifp;
- struct mbuf *m;
-+ struct m_tag *mtag;
-+ bool fActive;
-
-+ fActive = ASMAtomicUoReadBool(&pThis->fActive);
-+
-+ NGI_GET_M(item, m);
-+ NG_FREE_ITEM(item);
-+
-+ /* Locate tag to see if processing should be skipped for this frame */
-+ mtag = m_tag_locate(m, MTAG_VBOX, PACKET_TAG_VBOX, NULL);
-+ if (mtag != NULL)
-+ {
-+ m_tag_unlink(m, mtag);
-+ m_tag_free(mtag);
-+ }
-+
-+ /*
-+ * Handle incoming hook. This is connected to the
-+ * input path of the interface, thus handling incoming frames.
-+ */
- if (pThis->u.s.input == hook)
-- return ng_vboxnetflt_rcv_in(hook, item);
-+ {
-+ if (mtag != NULL || !fActive)
-+ {
-+ ether_demux(ifp, m);
-+ return (0);
-+ }
-+ mtx_lock_spin(&pThis->u.s.inq.ifq_mtx);
-+ _IF_ENQUEUE(&pThis->u.s.inq, m);
-+ mtx_unlock_spin(&pThis->u.s.inq.ifq_mtx);
-+ taskqueue_enqueue_fast(taskqueue_fast, &pThis->u.s.tskin);
-+ }
-+ /**
-+ * Handle mbufs on the outgoing hook, frames going to the interface
-+ */
- else if (pThis->u.s.output == hook)
-- return ng_vboxnetflt_rcv_out(hook, item);
-+ {
-+ if (mtag != NULL || !fActive)
-+ return ether_output_frame(ifp, m);
-+ mtx_lock_spin(&pThis->u.s.outq.ifq_mtx);
-+ _IF_ENQUEUE(&pThis->u.s.outq, m);
-+ mtx_unlock_spin(&pThis->u.s.outq.ifq_mtx);
-+ taskqueue_enqueue_fast(taskqueue_fast, &pThis->u.s.tskout);
-+ }
- else
- {
-- NGI_GET_M(item, m);
-- NG_FREE_ITEM(item);
-+ m_freem(m);
- }
- return (0);
- }
-
-+static int ng_vboxnetflt_shutdown(node_p node)
-+{
-+ PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node);
-+ bool fActive;
-+
-+ /* Prevent node shutdown if we're active */
-+ fActive = ASMAtomicUoReadBool(&pThis->fActive);
-+ if (fActive)
-+ return (EBUSY);
-+ NG_NODE_UNREF(node);
-+ return (0);
-+}
-+
-+static int ng_vboxnetflt_disconnect(hook_p hook)
-+{
-+ return (0);
-+}
-+
- /**
-- * Handle incoming hook. This is connected to the
-- * input path of the interface, thus handling incoming frames.
-+ * Input processing task, handles incoming frames
- */
--static int ng_vboxnetflt_rcv_in(hook_p hook, item_p item)
-+static void vboxNetFltFreeBSDinput(void *arg, int pending)
- {
-+ PVBOXNETFLTINS pThis = (PVBOXNETFLTINS)arg;
- struct mbuf *m, *m0;
-- struct m_tag *mtag;
-- const node_p node = NG_HOOK_NODE(hook);
-- PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node);
- struct ifnet *ifp = pThis->u.s.ifp;
-- bool fActive, fDropIt = false;
- unsigned int cSegs = 0;
-+ bool fDropIt = false, fActive;
- PINTNETSG pSG;
-
-- NGI_GET_M(item, m);
-- NG_FREE_ITEM(item);
--
-- fActive = ASMAtomicUoReadBool(&pThis->fActive);
-- if (!fActive)
-- goto out;
--
-- mtag = m_tag_locate(m, MTAG_VBOX, PACKET_TAG_VBOX, NULL);
-- if (mtag != NULL)
-- {
-- m_tag_unlink(m, mtag);
-- m_tag_free(mtag);
-- goto out;
-- }
- vboxNetFltRetain(pThis, true /* fBusy */);
--
-- for (m0 = m; m0 != NULL; m0 = m0->m_next)
-+ for (;;)
- {
-- if (m0->m_len > 0)
-- cSegs++;
-- }
-+ mtx_lock_spin(&pThis->u.s.inq.ifq_mtx);
-+ _IF_DEQUEUE(&pThis->u.s.inq, m);
-+ mtx_unlock_spin(&pThis->u.s.inq.ifq_mtx);
-+ if (m == NULL)
-+ break;
-
-+ for (m0 = m; m0 != NULL; m0 = m0->m_next)
-+ if (m0->m_len > 0)
-+ cSegs++;
-+
- #ifdef PADD_RUNT_FRAMES_FROM_HOST
-- if (m_length(m, NULL) < 60)
-- cSegs++;
-+ if (m_length(m, NULL) < 60)
-+ cSegs++;
- #endif
-
-- /* Create a copy of the mbuf and hand it to the virtual switch */
-- pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs]));
-- vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0);
-- fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_WIRE);
-- RTMemTmpFree(pSG);
-+ /* Create a copy and deliver to the virtual switch */
-+ pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs]));
-+ vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0);
-+ fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_HOST);
-+ RTMemTmpFree(pSG);
-+ if (fDropIt)
-+ m_freem(m);
-+ else
-+ ether_demux(ifp, m);
-+ }
- vboxNetFltRelease(pThis, true /* fBusy */);
--
--out:
-- /* Only deliver it to the host stack if the destination weren't a guest */
-- if (fDropIt)
-- {
-- m_freem(m);
-- return (0);
-- }
-- ether_demux(ifp, m);
-- return (0);
- }
-
- /**
-- * Handle mbufs on the outgoing hook, frames going to the interface
-+ * Output processing task, handles outgoing frames
- */
--static int ng_vboxnetflt_rcv_out(hook_p hook, item_p item)
-+static void vboxNetFltFreeBSDoutput(void *arg, int pending)
- {
-+ PVBOXNETFLTINS pThis = (PVBOXNETFLTINS)arg;
- struct mbuf *m, *m0;
-- struct m_tag *mtag;
-- const node_p node = NG_HOOK_NODE(hook);
-- PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node);
- struct ifnet *ifp = pThis->u.s.ifp;
- unsigned int cSegs = 0;
- bool fDropIt = false, fActive;
- PINTNETSG pSG;
-
-- NGI_GET_M(item, m);
-- NG_FREE_ITEM(item);
--
-- fActive = ASMAtomicUoReadBool(&pThis->fActive);
-- if (!fActive)
-- return ether_output_frame(ifp, m);
--
- vboxNetFltRetain(pThis, true /* fBusy */);
-- /* Pass directly to interface if the packet originated from us */
-- mtag = m_tag_locate(m, MTAG_VBOX, PACKET_TAG_VBOX, NULL);
-- if (mtag != NULL)
-+ for (;;)
- {
-- m_tag_unlink(m, mtag);
-- m_tag_free(mtag);
-- goto out;
-- }
-+ mtx_lock_spin(&pThis->u.s.outq.ifq_mtx);
-+ _IF_DEQUEUE(&pThis->u.s.outq, m);
-+ mtx_unlock_spin(&pThis->u.s.outq.ifq_mtx);
-+ if (m == NULL)
-+ break;
-
-- for (m0 = m; m0 != NULL; m0 = m0->m_next)
-- {
-- if (m0->m_len > 0)
-- cSegs++;
-- }
-+ for (m0 = m; m0 != NULL; m0 = m0->m_next)
-+ if (m0->m_len > 0)
-+ cSegs++;
-
- #ifdef PADD_RUNT_FRAMES_FROM_HOST
-- if (m_length(m, NULL) < 60)
-- cSegs++;
-+ if (m_length(m, NULL) < 60)
-+ cSegs++;
- #endif
-- /* Create a copy and deliver to the virtual switch */
-- pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs]));
-- vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0);
-- fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_HOST);
-- RTMemTmpFree(pSG);
-+ /* Create a copy and deliver to the virtual switch */
-+ pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs]));
-+ vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0);
-+ fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_HOST);
-+ RTMemTmpFree(pSG);
-
--out:
-+ if (fDropIt)
-+ m_freem(m);
-+ else
-+ ether_output_frame(ifp, m);
-+ }
- vboxNetFltRelease(pThis, true /* fBusy */);
-- if (fDropIt)
-- {
-- m_freem(m);
-- return (0);
-- }
--
-- return ether_output_frame(ifp, m);
- }
-
--static int ng_vboxnetflt_shutdown(node_p node)
--{
-- PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node);
-- bool fActive;
--
-- /* Prevent node shutdown if we're active */
-- fActive = ASMAtomicUoReadBool(&pThis->fActive);
-- if (fActive)
-- return (EBUSY);
-- NG_NODE_UNREF(node);
-- return (0);
--}
--
--static int ng_vboxnetflt_disconnect(hook_p hook)
--{
-- return (0);
--}
--
- /**
- * Called to deliver a frame to either the host, the wire or both.
- */
-@@ -536,13 +542,23 @@
-
- /* Create a new netgraph node for this instance */
- if (ng_make_node_common(&ng_vboxnetflt_typestruct, &node) != 0)
-- return VERR_INTERNAL_ERROR;
-+ return VERR_INTERNAL_ERROR;
-
- RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
- ASMAtomicUoWritePtr((void * volatile *)&pThis->u.s.ifp, ifp);
- pThis->u.s.node = node;
- bcopy(IF_LLADDR(ifp), &pThis->u.s.Mac, ETHER_ADDR_LEN);
- ASMAtomicUoWriteBool(&pThis->fDisconnectedFromHost, false);
-+ /* Initialize deferred input queue */
-+ bzero(&pThis->u.s.inq, sizeof(struct ifqueue));
-+ mtx_init(&pThis->u.s.inq.ifq_mtx, "vboxnetflt inq", NULL, MTX_SPIN);
-+ TASK_INIT(&pThis->u.s.tskin, 0, vboxNetFltFreeBSDinput, pThis);
-+
-+ /* Initialize deferred output queue */
-+ bzero(&pThis->u.s.outq, sizeof(struct ifqueue));
-+ mtx_init(&pThis->u.s.outq.ifq_mtx, "vboxnetflt outq", NULL, MTX_SPIN);
-+ TASK_INIT(&pThis->u.s.tskout, 0, vboxNetFltFreeBSDoutput, pThis);
-+
- RTSpinlockRelease(pThis->hSpinlock, &Tmp);
-
- NG_NODE_SET_PRIVATE(node, pThis);
-@@ -571,7 +587,10 @@
- }
-
- if (ifp0 != NULL)
-+ {
-+ vboxNetFltOsDeleteInstance(pThis);
- vboxNetFltOsInitInstance(pThis, NULL);
-+ }
-
- return !ASMAtomicUoReadBool(&pThis->fDisconnectedFromHost);
- }
-@@ -579,6 +598,12 @@
- void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis)
- {
-
-+ taskqueue_drain(taskqueue_fast, &pThis->u.s.tskin);
-+ taskqueue_drain(taskqueue_fast, &pThis->u.s.tskout);
-+
-+ mtx_destroy(&pThis->u.s.inq.ifq_mtx);
-+ mtx_destroy(&pThis->u.s.outq.ifq_mtx);
-+
- if (pThis->u.s.node != NULL)
- ng_rmnode_self(pThis->u.s.node);
- pThis->u.s.node = NULL;
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Installer-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-Installer-Makefile.kmk
new file mode 100644
index 000000000000..7f226b633c9b
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Installer-Makefile.kmk
@@ -0,0 +1,15 @@
+--- src/VBox/Installer/Makefile.kmk.orig 2009-10-05 14:31:40.000000000 +0200
++++ src/VBox/Installer/Makefile.kmk 2009-10-05 14:32:09.000000000 +0200
+@@ -38,10 +38,12 @@
+ if "$(KBUILD_TARGET)" == "win" && "$(KBUILD_HOST)" == "win"
+ include $(PATH_SUB_CURRENT)/win/Makefile.kmk
+ endif
++if 0
+ if "$(KBUILD_TARGET)" == "freebsd" && "$(KBUILD_HOST)" == "freebsd"
+ include $(PATH_SUB_CURRENT)/freebsd/Makefile.kmk
+ endif
+ endif
++endif
+
+ include $(PATH_SUB_CURRENT)/common/Makefile.kmk
+
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-AudioAdapterImpl.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Main-AudioAdapterImpl.cpp
new file mode 100644
index 000000000000..f47f49c97b0e
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-AudioAdapterImpl.cpp
@@ -0,0 +1,14 @@
+--- src/VBox/Main/AudioAdapterImpl.cpp.orig 2009-12-15 14:45:08.000000000 +0900
++++ src/VBox/Main/AudioAdapterImpl.cpp 2009-12-15 14:45:42.000000000 +0900
+@@ -261,6 +261,11 @@
+ #if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD) || defined(VBOX_WITH_SOLARIS_OSS)
+ case AudioDriverType_OSS:
+ #endif
++#ifdef RT_OS_FREEBSD
++# ifdef VBOX_WITH_PULSE
++ case AudioDriverType_Pulse:
++# endif
++#endif
+ #ifdef RT_OS_DARWIN
+ case AudioDriverType_CoreAudio:
+ #endif
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl.cpp
new file mode 100644
index 000000000000..cb67a48f5a44
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl.cpp
@@ -0,0 +1,11 @@
+--- src/VBox/Main/ConsoleImpl.cpp.orig
++++ src/VBox/Main/ConsoleImpl.cpp
+@@ -6168,7 +6168,7 @@ Console::usbDetachCallback(Console *that
+ }
+
+ #endif /* VBOX_WITH_USB */
+-#if (defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) && !defined(VBOX_WITH_NETFLT)
++#if ((defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT)) || defined(RT_OS_FREEBSD))
+
+ /**
+ * Helper function to handle host interface device creation and attachment.
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl2.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl2.cpp
new file mode 100644
index 000000000000..4373abea3487
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl2.cpp
@@ -0,0 +1,103 @@
+--- src/VBox/Main/ConsoleImpl2.cpp.orig 2009-12-15 14:48:58.000000000 +0900
++++ src/VBox/Main/ConsoleImpl2.cpp 2009-12-15 14:48:42.000000000 +0900
+@@ -86,6 +86,7 @@
+ # include <sys/ioctl.h>
+ # include <sys/socket.h>
+ # include <net/if.h>
++# include <net80211/ieee80211_ioctl.h>
+ #endif
+
+ #if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_NETFLT)
+@@ -1605,6 +1605,15 @@
+ break;
+ }
+ #endif
++#ifdef RT_OS_FREEBSD
++# ifdef VBOX_WITH_PULSE
++ case AudioDriverType_Pulse:
++ {
++ rc = CFGMR3InsertString(pCfg, "AudioDriver", "pulse"); RC_CHECK();
++ break;
++ }
++# endif
++#endif
+ #ifdef RT_OS_DARWIN
+ case AudioDriverType_CoreAudio:
+ {
+@@ -2394,6 +2394,42 @@ DECLCALLBACK(int) Console::configConstru
+ /* we're not releasing the INetCfg stuff here since we use it later to figure out whether it is wireless */
+
+ # elif defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
++# if defined(RT_OS_FREEBSD)
++ /*
++ * If we bridge to a tap interface open it the `old' direct way.
++ * This works and performs better than bridging a physical
++ * interface via the current FreeBSD vboxnetflt implementation.
++ */
++ if (!strncmp(pszHifName, "tap", sizeof "tap" - 1)) {
++ hrc = pThis->attachToTapInterface(aNetworkAdapter);
++ if (FAILED(hrc))
++ {
++ switch (hrc)
++ {
++ case VERR_ACCESS_DENIED:
++ return VMSetError(pVM, VERR_HOSTIF_INIT_FAILED, RT_SRC_POS, N_(
++ "Failed to open '/dev/%s' for read/write access. Please check the "
++ "permissions of that node, and that the net.link.tap.user_open "
++ "sysctl is set. Either run 'chmod 0666 /dev/%s' or "
++ "change the group of that node to vboxusers and make yourself "
++ "a member of that group. Make sure that these changes are permanent."), pszHifName, pszHifName);
++ default:
++ AssertMsgFailed(("Could not attach to tap interface! Bad!\n"));
++ return VMSetError(pVM, VERR_HOSTIF_INIT_FAILED, RT_SRC_POS, N_(
++ "Failed to initialize Host Interface Networking"));
++ }
++ }
++
++ Assert ((int)pThis->maTapFD[uInstance] >= 0);
++ if ((int)pThis->maTapFD[uInstance] >= 0)
++ {
++ rc = CFGMR3InsertString(pLunL0, "Driver", "HostInterface"); RC_CHECK();
++ rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK();
++ rc = CFGMR3InsertInteger(pCfg, "FileHandle", pThis->maTapFD[uInstance]); RC_CHECK();
++ }
++ break;
++ }
++# endif
+ /** @todo Check for malformed names. */
+ const char *pszTrunk = pszHifName;
+
+@@ -2495,6 +2496,33 @@ DECLCALLBACK(int) Console::configConstru
+ }
+ else
+ Log(("Failed to open wireless socket\n"));
++# elif defined(RT_OS_FREEBSD)
++ int iSock = socket(AF_INET, SOCK_DGRAM, 0);
++ if (iSock >= 0)
++ {
++ struct ieee80211req ireq;
++ uint8_t data[32];
++
++ (void) memset(&ireq, 0, sizeof(ireq));
++ (void) strncpy(ireq.i_name, pszHifName, sizeof(ireq.i_name));
++ ireq.i_type = IEEE80211_IOC_SSID;
++ ireq.i_val = -1;
++ ireq.i_data = data;
++ ireq.i_len = sizeof(data);
++
++ bool fSharedMacOnWire = ioctl(iSock, SIOCG80211, &ireq) >= 0;
++ close(iSock);
++ if (fSharedMacOnWire)
++ {
++ rc = CFGMR3InsertInteger(pCfg, "SharedMacOnWire", true);
++ RC_CHECK();
++ Log(("Set SharedMacOnWire\n"));
++ }
++ else
++ Log(("Failed to get wireless name\n"));
++ }
++ else
++ Log(("Failed to open wireless socket\n"));
+ # elif defined(RT_OS_WINDOWS)
+ # define DEVNAME_PREFIX L"\\\\.\\"
+ /* we are getting the medium type via IOCTL_NDIS_QUERY_GLOBAL_STATS Io Control
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-include-ConsoleImpl.h b/emulators/virtualbox-ose/files/patch-src-VBox-Main-include-ConsoleImpl.h
new file mode 100644
index 000000000000..2471480886d8
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-include-ConsoleImpl.h
@@ -0,0 +1,20 @@
+--- src/VBox/Main/include/ConsoleImpl.h.orig
++++ src/VBox/Main/include/ConsoleImpl.h
+@@ -410,7 +410,7 @@ private:
+
+ HRESULT callTapSetupApplication(bool isStatic, RTFILE tapFD, Bstr &tapDevice,
+ Bstr &tapSetupApplication);
+-#if (defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) && !defined(VBOX_WITH_NETFLT)
++#if ((defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT)) || defined(RT_OS_FREEBSD))
+ HRESULT attachToTapInterface(INetworkAdapter *networkAdapter);
+ HRESULT detachFromTapInterface(INetworkAdapter *networkAdapter);
+ #endif
+@@ -582,7 +582,7 @@ private:
+ PPDMLED mapNetworkLeds[SchemaDefs::NetworkAdapterCount];
+ PPDMLED mapSharedFolderLed;
+ PPDMLED mapUSBLed[2];
+-#if !defined(VBOX_WITH_NETFLT) && (defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD))
++#if ((defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT)) || defined(RT_OS_FREEBSD))
+ Utf8Str maTAPDeviceName[8];
+ RTFILE maTapFD[8];
+ #endif
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-VBox-log-vbox.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-VBox-log-vbox.cpp
new file mode 100644
index 000000000000..005a25e4a79a
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-VBox-log-vbox.cpp
@@ -0,0 +1,82 @@
+--- src/VBox/Runtime/VBox/log-vbox.cpp (revision 25471)
++++ src/VBox/Runtime/VBox/log-vbox.cpp (revision 25472)
+@@ -135,6 +135,12 @@
+ # include <Windows.h>
+ # elif defined(RT_OS_LINUX)
+ # include <unistd.h>
++# elif defined(RT_OS_FREEBSD)
++# include <sys/param.h>
++# include <sys/sysctl.h>
++# include <sys/user.h>
++# include <stdlib.h>
++# include <unistd.h>
+ # elif defined(RT_OS_SOLARIS)
+ # define _STRUCTURED_PROC 1
+ # undef _FILE_OFFSET_BITS /* procfs doesn't like this */
+@@ -157,6 +163,7 @@
+ # include <iprt/path.h>
+ # include <iprt/process.h>
+ # include <iprt/string.h>
++# include <iprt/mem.h>
+ # include <stdio.h>
+ #endif
+
+@@ -339,12 +346,8 @@
+ fclose(pFile);
+ }
+
+-# elif defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
+-# ifdef RT_OS_LINUX
++# elif defined(RT_OS_LINUX)
+ FILE *pFile = fopen("/proc/self/cmdline", "r");
+-# else /* RT_OS_FREEBSD: */
+- FILE *pFile = fopen("/proc/curproc/cmdline", "r");
+-# endif
+ if (pFile)
+ {
+ /* braindead */
+@@ -370,7 +373,44 @@
+ RTLogLoggerEx(pLogger, 0, ~0U, "\n");
+ fclose(pFile);
+ }
++# elif defined(RT_OS_FREEBSD)
++ char *pszArgFileBuf = NULL;
++ int aiName[4];
++ size_t cchArgs;
+
++ aiName[0] = CTL_KERN;
++ aiName[1] = KERN_PROC;
++ aiName[2] = KERN_PROC_ARGS;
++ aiName[3] = -1;
++
++ /* Retrieve the required length first */
++ cchArgs = 0;
++ int rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), NULL, &cchArgs, NULL, 0);
++
++ if (cchArgs > 0)
++ {
++ pszArgFileBuf = (char *)RTMemAllocZ(cchArgs + 1 /* Safety */);
++ if (pszArgFileBuf)
++ {
++ /* Retrieve the argument list */
++ rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), pszArgFileBuf, &cchArgs, NULL, 0);
++ if (!rcBSD)
++ {
++ /*
++ * cmdline is a flattened argument list so we need
++ * to convert all \0 to blanks
++ */
++ for(size_t i = 0; i < cchArgs - 1; i++)
++ {
++ if(pszArgFileBuf[i] == '\0')
++ pszArgFileBuf[i] = ' ';
++ }
++
++ RTLogLoggerEx(pLogger, 0, ~0U, "Commandline: %s\n", pszArgFileBuf);
++ }
++ RTMemFree(pszArgFileBuf);
++ }
++ }
+ # elif defined(RT_OS_L4) || defined(RT_OS_OS2) || defined(RT_OS_DARWIN)
+ /* commandline? */
+ # else
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-spinlock-r0drv-freebsd.c b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-spinlock-r0drv-freebsd.c
deleted file mode 100644
index c7c56d5814ee..000000000000
--- a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-spinlock-r0drv-freebsd.c
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: src/VBox/Runtime/r0drv/freebsd/spinlock-r0drv-freebsd.c
-@@ -171,7 +171,12 @@ RTDECL(void) RTSpinlockAcquire(RTSPINLOC
- AssertPtr(pThis);
- Assert(pThis->u32Magic == RTSPINLOCK_MAGIC);
- #ifdef RT_STRICT
-+#if 0
-+ /* This can't work because at least RTPowerNotificationRegister calls
-+ * RTSpinlockAcquire with *pTmp allocated on the stack.
-+ */
- Assert(pTmp->uFlags == 0);
-+#endif
- pTmp->uFlags = 42;
- #endif
-
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h
deleted file mode 100644
index 4332049487c3..000000000000
--- a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h.orig 2009-09-11 14:48:47.000000000 +0200
-+++ src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h 2009-09-11 14:48:54.000000000 +0200
-@@ -76,7 +76,7 @@
- # define SLEEPQ_TIMEDWAIT_SIG(EventInt) sleepq_timedwait_sig(EventInt, 0)
- # define SLEEPQ_WAIT(EventInt) sleepq_wait(EventInt, 0)
- # define SLEEPQ_WAIT_SIG(EventInt) sleepq_wait_sig(EventInt, 0)
--#elif
-+#else
- # define SLEEPQ_TIMEDWAIT(EventInt) sleepq_timedwait(EventInt)
- # define SLEEPQ_TIMEDWAIT_SIG(EventInt) sleepq_timedwait_sig(EventInt)
- # define SLEEPQ_WAIT(EventInt) sleepq_wait(EventInt)
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-rtProcInitExePath-freebsd.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-rtProcInitExePath-freebsd.cpp
new file mode 100644
index 000000000000..2332212ead14
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-rtProcInitExePath-freebsd.cpp
@@ -0,0 +1,81 @@
+--- src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp (revision 25471)
++++ src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp (revision 25472)
+@@ -32,6 +32,8 @@
+ * Header Files *
+ *******************************************************************************/
+ #define LOG_GROUP RTLOGGROUP_PROCESS
++#include <sys/param.h>
++#include <sys/sysctl.h>
+ #include <unistd.h>
+ #include <errno.h>
+ #include <dlfcn.h>
+@@ -47,17 +49,20 @@
+
+ DECLHIDDEN(int) rtProcInitExePath(char *pszPath, size_t cchPath)
+ {
+- /*
+- * Read the /proc/curproc/file link, convert to native and return it.
+- */
+- int cchLink = readlink("/proc/curproc/file", pszPath, cchPath - 1);
+- if (cchLink > 0 && (size_t)cchLink <= cchPath - 1)
+- {
+- pszPath[cchLink] = '\0';
++ int aiName[4];
++ size_t cchExePath;
+
++ aiName[0] = CTL_KERN;
++ aiName[1] = KERN_PROC;
++ aiName[2] = KERN_PROC_PATHNAME;
++ aiName[3] = getpid();
++
++ cchExePath = cchPath - 1;
++ if(sysctl(aiName, RT_ELEMENTS(aiName), pszPath, &cchExePath, NULL, 0) == 0)
++ {
+ char *pszTmp = NULL;
+ int rc = rtPathFromNative(&pszTmp, pszPath);
+- AssertMsgRCReturn(rc, ("rc=%Rrc pszLink=\"%s\"\nhex: %.*Rhsx\n", rc, pszPath, cchLink, pszPath), rc);
++ AssertMsgRCReturn(rc, ("rc=%Rrc pszLink=\"%s\"\nhex: %.*Rhsx\n", rc, pszPath, cchExePath, pszPath), rc);
+
+ size_t cch = strlen(pszTmp);
+ AssertReturn(cch <= cchPath, VERR_BUFFER_OVERFLOW);
+@@ -68,39 +73,8 @@
+ return VINF_SUCCESS;
+ }
+
+- int err = errno;
+-
+- /*
+- * Fall back on the dynamic linker since /proc is optional.
+- */
+- void *hExe = dlopen(NULL, 0);
+- if (hExe)
+- {
+- struct link_map const *pLinkMap = 0;
+- if (dlinfo(hExe, RTLD_DI_LINKMAP, &pLinkMap) == 0)
+- {
+- const char *pszImageName = pLinkMap->l_name;
+- if (*pszImageName == '/') /* this may not always be absolute, despite the docs. :-( */
+- {
+- char *pszTmp = NULL;
+- int rc = rtPathFromNative(&pszTmp, pszImageName);
+- AssertMsgRCReturn(rc, ("rc=%Rrc pszImageName=\"%s\"\n", rc, pszImageName), rc);
+-
+- size_t cch = strlen(pszTmp);
+- AssertReturn(cch <= cchPath, VERR_BUFFER_OVERFLOW);
+-
+- memcpy(pszPath, pszTmp, cch + 1);
+- RTStrFree(pszTmp);
+-
+- return VINF_SUCCESS;
+- }
+- /** @todo Try search the PATH for the file name or append the current
+- * directory, which ever makes sense... */
+- }
+- }
+-
+- int rc = RTErrConvertFromErrno(err);
+- AssertMsgFailed(("rc=%Rrc err=%d cchLink=%d hExe=%p\n", rc, err, cchLink, hExe));
++ int rc = RTErrConvertFromErrno(errno);
++ AssertMsgFailed(("rc=%Rrc errno=%d cchLink=%d\n", rc, errno, cchExePath));
+ return rc;
+ }
diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-apps-adpctl_VBoxNetAdpCtl.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-apps-adpctl_VBoxNetAdpCtl.cpp
deleted file mode 100644
index 955bf7a3a151..000000000000
--- a/emulators/virtualbox-ose/files/patch-src-VBox-apps-adpctl_VBoxNetAdpCtl.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
---- src/apps/adpctl/VBoxNetAdpCtl.cpp.r22902 2009-04-10 14:03:59.000000000 +0200
-+++ src/apps/adpctl/VBoxNetAdpCtl.cpp 2009-09-16 14:07:11.000000000 +0200
-@@ -1,4 +1,4 @@
--/* $Id: VBoxNetAdpCtl.cpp 18864 2009-04-10 12:03:59Z vboxsync $ */
-+/* $Id: VBoxNetAdpCtl.cpp 23064 2009-09-16 12:07:11Z vboxsync $ */
- /** @file
- * Apps - VBoxAdpCtl, Configuration tool for vboxnetX adapters.
- */
-@@ -24,7 +24,6 @@
- /*******************************************************************************
- * Header Files *
- *******************************************************************************/
--#include <assert.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-@@ -36,11 +35,12 @@
- # include <sys/ioccom.h>
- #endif
-
--/* @todo Error codes must be moved to some header file */
--#define ADPCTLERR_NO_CTL_DEV 3
--#define ADPCTLERR_IOCTL_FAILED 4
-+/** @todo Error codes must be moved to some header file */
-+#define ADPCTLERR_BAD_NAME 2
-+#define ADPCTLERR_NO_CTL_DEV 3
-+#define ADPCTLERR_IOCTL_FAILED 4
-
--/* @todo These are duplicates from src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h */
-+/** @todo These are duplicates from src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h */
- #define VBOXNETADP_CTL_DEV_NAME "/dev/vboxnetctl"
- #define VBOXNETADP_NAME "vboxnet"
- #define VBOXNETADP_MAX_NAME_LEN 32
-@@ -85,6 +85,7 @@
- pcszArg5, /* [network mask] */
- NULL /* terminator */
- };
-+ char * const envp[] = { (char*)"LC_ALL=C", NULL };
- int rc = EXIT_SUCCESS;
- pid_t childPid = fork();
- switch (childPid)
-@@ -94,7 +95,7 @@
- rc = EXIT_FAILURE;
- break;
- case 0: /* Child process. */
-- if (execv(VBOXADPCTL_IFCONFIG_PATH, (char * const*)argv) == -1)
-+ if (execve(VBOXADPCTL_IFCONFIG_PATH, (char * const*)argv, envp) == -1)
- rc = EXIT_FAILURE;
- break;
- default: /* Parent process. */
-@@ -108,15 +109,39 @@
- #define MAX_ADDRESSES 128
- #define MAX_ADDRLEN 64
-
--static bool removeAddresses(const char *pszAdapterName)
-+static bool removeAddresses(char *pszAdapterName)
- {
-- char szCmd[1024], szBuf[1024];
-+ char szBuf[1024];
- char aszAddresses[MAX_ADDRESSES][MAX_ADDRLEN];
-+ int rc;
-+ int fds[2];
-+ char * const argv[] = { VBOXADPCTL_IFCONFIG_PATH, pszAdapterName, NULL };
-+ char * const envp[] = { (char*)"LC_ALL=C", NULL };
-
- memset(aszAddresses, 0, sizeof(aszAddresses));
-- snprintf(szCmd, sizeof(szCmd), VBOXADPCTL_IFCONFIG_PATH " %s", pszAdapterName);
-- FILE *fp = popen(szCmd, "r");
-
-+ rc = pipe(fds);
-+ if (rc < 0)
-+ return false;
-+
-+ pid_t pid = fork();
-+ if (pid < 0)
-+ return false;
-+
-+ if (pid == 0)
-+ {
-+ /* child */
-+ close(fds[0]);
-+ close(STDOUT_FILENO);
-+ rc = dup2(fds[1], STDOUT_FILENO);
-+ if (rc >= 0)
-+ execve(VBOXADPCTL_IFCONFIG_PATH, argv, envp);
-+ return false;
-+ }
-+
-+ /* parent */
-+ close(fds[1]);
-+ FILE *fp = fdopen(fds[0], "r");
- if (!fp)
- return false;
-
-@@ -124,9 +149,6 @@
- for (cAddrs = 0; cAddrs < MAX_ADDRESSES && fgets(szBuf, sizeof(szBuf), fp);)
- {
- int cbSkipWS = strspn(szBuf, " \t");
--#if 0 /* Don't use this! assert() breaks the mac build. Use IPRT or be a rectangular building thing. */
-- assert(cbSkipWS < 20);
--#endif
- char *pszWord = strtok(szBuf + cbSkipWS, " ");
- /* We are concerned with IPv6 address lines only. */
- if (!pszWord || strcmp(pszWord, "inet6"))
-@@ -143,11 +165,12 @@
- continue;
- strncpy(aszAddresses[cAddrs++], pszWord, MAX_ADDRLEN-1);
- }
-- pclose(fp);
-+ fclose(fp);
-
- for (int i = 0; i < cAddrs; i++)
- {
-- if (executeIfconfig(pszAdapterName, "inet6", VBOXADPCTL_DEL_CMD, aszAddresses[i]) != EXIT_SUCCESS)
-+ if (executeIfconfig(pszAdapterName, "inet6",
-+ VBOXADPCTL_DEL_CMD, aszAddresses[i]) != EXIT_SUCCESS)
- return false;
- }
-
-@@ -166,19 +189,41 @@
- int rc = ioctl(fd, uCmd, pData);
- if (rc == -1)
- {
-- perror("VBoxNetAdpCtl: ioctl failed for " VBOXNETADP_CTL_DEV_NAME);
-+ perror("VBoxNetAdpCtl: ioctl failed for " VBOXNETADP_CTL_DEV_NAME);
- rc = ADPCTLERR_IOCTL_FAILED;
- }
--
-+
- close(fd);
--
-+
- return rc;
- }
-
-+int checkAdapterName(const char *pcszNameIn, char *pszNameOut)
-+{
-+ int iAdapterIndex = -1;
-+
-+ if ( strlen(pcszNameIn) >= VBOXNETADP_MAX_NAME_LEN
-+ || sscanf(pcszNameIn, "vboxnet%d", &iAdapterIndex) != 1
-+ || iAdapterIndex < 0 || iAdapterIndex > 99 )
-+ {
-+ fprintf(stderr, "Setting configuration for %s is not supported.\n", pcszNameIn);
-+ return ADPCTLERR_BAD_NAME;
-+ }
-+ sprintf(pszNameOut, "vboxnet%d", iAdapterIndex);
-+ if (strcmp(pszNameOut, pcszNameIn))
-+ {
-+ fprintf(stderr, "Invalid adapter name %s.\n", pcszNameIn);
-+ return ADPCTLERR_BAD_NAME;
-+ }
-+
-+ return 0;
-+}
-+
- int main(int argc, char *argv[])
-
- {
-- const char *pszAdapterName;
-+ char szAdapterName[VBOXNETADP_MAX_NAME_LEN];
-+ char *pszAdapterName;
- const char *pszAddress;
- const char *pszNetworkMask = NULL;
- const char *pszOption = NULL;
-@@ -216,13 +261,18 @@
- pszAddress = argv[2];
- if (strcmp("remove", pszAddress) == 0)
- {
-- strncpy(Req.szName, pszAdapterName, sizeof(Req.szName));
-+ rc = checkAdapterName(pszAdapterName, szAdapterName);
-+ if (rc)
-+ return rc;
-+ memset(&Req, '\0', sizeof(Req));
-+ snprintf(Req.szName, sizeof(Req.szName), "%s", szAdapterName);
- return doIOCtl(VBOXNETADP_CTL_REMOVE, &Req);
- }
- break;
- case 2:
- if (strcmp("add", argv[1]) == 0)
- {
-+ memset(&Req, '\0', sizeof(Req));
- rc = doIOCtl(VBOXNETADP_CTL_ADD, &Req);
- if (rc == 0)
- puts(Req.szName);
-@@ -237,11 +287,11 @@
- return 1;
- }
-
-- if (strncmp("vboxnet", pszAdapterName, 7))
-- {
-- fprintf(stderr, "Setting configuration for %s is not supported.\n", pszAdapterName);
-- return 2;
-- }
-+ rc = checkAdapterName(pszAdapterName, szAdapterName);
-+ if (rc)
-+ return rc;
-+
-+ pszAdapterName = szAdapterName;
-
- if (fRemove)
- {
-@@ -276,3 +326,4 @@
- }
- return rc;
- }
-+
diff --git a/emulators/virtualbox-ose/files/patch-src-settings-vm-VBoxVMSettingsAudio.cpp b/emulators/virtualbox-ose/files/patch-src-settings-vm-VBoxVMSettingsAudio.cpp
new file mode 100644
index 000000000000..707189e1cac7
--- /dev/null
+++ b/emulators/virtualbox-ose/files/patch-src-settings-vm-VBoxVMSettingsAudio.cpp
@@ -0,0 +1,12 @@
+--- src/VBox/Frontends/VirtualBox/src/settings/vm/VBoxVMSettingsAudio.cpp.orig 2009-12-17 15:28:01.000000000 +0100
++++ src/VBox/Frontends/VirtualBox/src/settings/vm/VBoxVMSettingsAudio.cpp 2009-12-21 14:14:35.000000000 +0100
+@@ -89,6 +89,9 @@
+ #endif
+ #if defined Q_OS_LINUX || defined Q_OS_FREEBSD
+ mCbAudioDriver->addItem (vboxGlobal().toString (KAudioDriverType_OSS));
++# ifdef VBOX_WITH_PULSE
++ mCbAudioDriver->addItem (vboxGlobal().toString (KAudioDriverType_Pulse));
++# endif
+ #endif
+ #if defined Q_OS_LINUX
+ # ifdef VBOX_WITH_ALSA