Index: trunk/src/VBox/Devices/Audio/audio.c
===================================================================
--- trunk/src/VBox/Devices/Audio/audio.c	(revision 20500)
+++ trunk/src/VBox/Devices/Audio/audio.c	(revision 20501)
@@ -63,5 +63,5 @@
 
 static struct audio_driver *drvtab[] = {
-#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD)
+#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD) || defined(VBOX_WITH_SOLARIS_OSS)
     &oss_audio_driver,
 #endif
Index: trunk/src/VBox/Devices/Audio/ossaudio.c
===================================================================
--- trunk/src/VBox/Devices/Audio/ossaudio.c	(revision 20500)
+++ trunk/src/VBox/Devices/Audio/ossaudio.c	(revision 20501)
@@ -275,12 +275,15 @@
     }
 
+/* Obsolete on Solaris (using O_NONBLOCK is sufficient) */
+#if !(defined(VBOX) && defined(RT_OS_SOLARIS))
     if (ioctl (fd, SNDCTL_DSP_NONBLOCK)) {
-#ifndef VBOX
+# ifndef VBOX
         oss_logerr2 (errno, typ, "Failed to set non-blocking mode\n");
-#else
+# else
         LogRel(("OSS: Failed to set non-blocking mode (%s)\n", strerror(errno)));
-#endif
+# endif
         goto err;
     }
+#endif
 
     mmmmssss = (req->nfrags << 16) | lsbindex (req->fragsize);
Index: trunk/src/VBox/Devices/Makefile.kmk
===================================================================
--- trunk/src/VBox/Devices/Makefile.kmk	(revision 20500)
+++ trunk/src/VBox/Devices/Makefile.kmk	(revision 20501)
@@ -836,4 +836,8 @@
 	Storage/DrvHostDVD.cpp \
 	Serial/DrvHostSerial.cpp
+ ifdef VBOX_WITH_SOLARIS_OSS
+  Drivers_SOURCES += Audio/ossaudio.c
+  Drivers_DEFS += VBOX_WITH_SOLARIS_OSS
+ endif
  ifdef VBOX_WITH_CROSSBOW
   Drivers_SOURCES += Network/solaris/vbox-libdlpi.cpp
Index: trunk/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp	(revision 20500)
+++ trunk/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp	(revision 20501)
@@ -1950,4 +1950,10 @@
 #elif defined(RT_OS_LINUX)
         rc = CFGMR3InsertString(pCfg, "AudioDriver",      "oss");                   UPDATE_RC();
+#elif defined(RT_OS_SOLARIS)
+# ifdef VBOX_WITH_SOLARIS_OSS
+        rc = CFGMR3InsertString(pCfg, "AudioDriver",      "oss");                   UPDATE_RC();
+# else
+        rc = CFGMR3InsertString(pCfg, "AudioDriver",      "solaudio");              UPDATE_RC();
+# endif
 #elif defined(RT_OS_L4)
         rc = CFGMR3InsertString(pCfg, "AudioDriver",      "oss");                   UPDATE_RC();
Index: trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk	(revision 20500)
+++ trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk	(revision 20501)
@@ -39,4 +39,5 @@
  	$(if $(VBOX_WITH_HEADLESS), VBOX_WITH_HEADLESS) \
  	$(if $(VBOX_WITH_ALSA), VBOX_WITH_ALSA) \
+ 	$(if $(VBOX_WITH_SOLARIS_OSS), VBOX_WITH_SOLARIS_OSS) \
  	$(if $(VBOX_WITH_PULSE),VBOX_WITH_PULSE) \
  	$(if $(VBOX_WITH_E1000),VBOX_WITH_E1000) \
Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 20500)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 20501)
@@ -199,5 +199,9 @@
         if (fSolaris)
         {
-            RTPrintf(                        "|solaudio");
+            RTPrintf(                        "|solaudio"
+#ifdef VBOX_WITH_SOLARIS_OSS
+                                             "|oss"
+#endif
+                                              );
         }
         if (fLinux)
Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 20500)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 20501)
@@ -1442,4 +1442,12 @@
                 }
 
+# ifdef VBOX_WITH_SOLARIS_OSS
+                else if (!strcmp(audio, "oss"))
+                {
+                    CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS));
+                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
+                }
+# endif
+
 #endif /* !RT_OS_SOLARIS */
 #ifdef RT_OS_DARWIN
Index: trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 20500)
+++ trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 20501)
@@ -177,4 +177,5 @@
 	$(if $(VBOX_WITH_ALSA),VBOX_WITH_ALSA) \
 	$(if $(VBOX_WITH_PULSE),VBOX_WITH_PULSE) \
+	$(if $(VBOX_WITH_SOLARIS_OSS),VBOX_WITH_SOLARIS_OSS) \
 	$(if $(VBOX_WITH_E1000),VBOX_WITH_E1000) \
 	$(if $(VBOX_WITH_NETFLT)$(eq $(KBUILD_TARGET),freebsd),VBOX_WITH_NETFLT)
Index: trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsAudio.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsAudio.cpp	(revision 20500)
+++ trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsAudio.cpp	(revision 20501)
@@ -84,4 +84,7 @@
 #if defined Q_OS_SOLARIS
     mCbAudioDriver->addItem (vboxGlobal().toString (KAudioDriverType_SolAudio));
+# if defined VBOX_WITH_SOLARIS_OSS
+    mCbAudioDriver->addItem (vboxGlobal().toString (KAudioDriverType_OSS));
+#endif
 #endif
 #if defined Q_OS_LINUX || defined Q_OS_FREEBSD
Index: trunk/src/VBox/Main/AudioAdapterImpl.cpp
===================================================================
--- trunk/src/VBox/Main/AudioAdapterImpl.cpp	(revision 20500)
+++ trunk/src/VBox/Main/AudioAdapterImpl.cpp	(revision 20501)
@@ -259,5 +259,5 @@
 # endif
 #endif /* RT_OS_LINUX */
-#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD)
+#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD) || defined(VBOX_WITH_SOLARIS_OSS)
             case AudioDriverType_OSS:
 #endif
@@ -431,5 +431,5 @@
 # endif
 #endif // RT_OS_LINUX
-#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD)
+#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD) || defined(VBOX_WITH_SOLARIS_OSS)
     else if (strcmp (driver, "OSS") == 0)
         mData->mAudioDriver = AudioDriverType_OSS;
@@ -530,5 +530,5 @@
 # endif
 #endif /* RT_OS_LINUX */
-#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD)
+#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD) || defined(VBOX_WITH_SOLARIS_OSS)
             case AudioDriverType_OSS:
             {
Index: trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 20500)
+++ trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 20501)
@@ -2279,5 +2279,5 @@
 # endif
 #endif /* RT_OS_LINUX */
-#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD)
+#if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD) || defined(VBOX_WITH_SOLARIS_OSS)
             case AudioDriverType_OSS:
             {
Index: trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- trunk/src/VBox/Main/Makefile.kmk	(revision 20500)
+++ trunk/src/VBox/Main/Makefile.kmk	(revision 20501)
@@ -213,4 +213,5 @@
 	$(if $(VBOX_WITH_PULSE),VBOX_WITH_PULSE,) \
 	$(if $(VBOX_WITH_WINMM),VBOX_WITH_WINMM,) \
+	$(if $(VBOX_WITH_SOLARIS_OSS),VBOX_WITH_SOLARIS_OSS,) \
 	$(if $(VBOX_WITH_E1000),VBOX_WITH_E1000,) \
 	$(if $(VBOX_WITH_AHCI),VBOX_WITH_AHCI,) \
@@ -546,4 +547,5 @@
 	$(if $(VBOX_WITH_PULSE),VBOX_WITH_PULSE,) \
 	$(if $(VBOX_WITH_WINMM),VBOX_WITH_WINMM,) \
+	$(if $(VBOX_WITH_SOLARIS_OSS),VBOX_WITH_SOLARIS_OSS,) \
 	$(if $(VBOX_WITH_CROSSBOW),VBOX_WITH_CROSSBOW,) \
 	$(if $(VBOX_WITH_E1000),VBOX_WITH_E1000,) \
Index: trunk/src/VBox/Main/xml/VirtualBox-settings-solaris.xsd
===================================================================
--- trunk/src/VBox/Main/xml/VirtualBox-settings-solaris.xsd	(revision 20500)
+++ trunk/src/VBox/Main/xml/VirtualBox-settings-solaris.xsd	(revision 20501)
@@ -63,4 +63,5 @@
             <xsd:enumeration value="Null"/>
             <xsd:enumeration value="SolAudio"/>
+            <xsd:enumeration value="OSS"/>
           </xsd:restriction>
         </xsd:simpleType>
