--- ports/audio/oss/Makefile 2007-07-16 13:37:58.000000000 -0400 +++ ports/audio/oss/Makefile 2007-07-13 20:41:20.000000000 -0400 @@ -40,7 +40,8 @@ .endif pre-patch: - ${FIND} ${WRKDIR}/${DISTNAME} -type f -name '*.[hc]' -or -name '*.man' | ${XARGS} ${REINPLACE_CMD} \ + ${FIND} ${WRKDIR}/${DISTNAME} -type f -name '*.[ch]' -or -name '*.inc' -or -name '*.man' | \ + ${XARGS} ${REINPLACE_CMD} \ -e 's|"/usr/include/stdarg.h"||g' \ -e 's|/usr/|${PREFIX}/|g' \ -e 's|/etc/oss|${PREFIX}/etc/oss|g' @@ -58,27 +59,28 @@ do-install: ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/bin/* ${PREFIX}/bin - ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr//sbin/savemixer ${PREFIX}/sbin - ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/sbin/ossdevlinks ${PREFIX}/sbin - ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/sbin/ossdetect ${PREFIX}/sbin ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/sbin/ossctl ${PREFIX}/sbin + ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/sbin/ossdetect ${PREFIX}/sbin + ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/sbin/ossdevlinks ${PREFIX}/sbin + ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/sbin/savemixer ${PREFIX}/sbin ${INSTALL_SCRIPT} ${WRKSRC}/prototype/usr/sbin/soundon ${PREFIX}/sbin ${INSTALL_SCRIPT} ${WRKSRC}/prototype/usr/sbin/soundoff ${PREFIX}/sbin ${INSTALL_PROGRAM} ${WRKSRC}/prototype/usr/lib/oss/lib/libOSSlib.so ${PREFIX}/lib @# oss.conf does not contain any user-configurable data; it's ok to overwrite it. ${INSTALL_DATA} ${WRKSRC}/prototype/etc/oss.conf ${PREFIX}/etc/oss.conf ${MKDIR} ${PREFIX}/include/sys - ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/include/sys/soundcard.h ${PREFIX}/include/sys ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/include/midiparser.h ${PREFIX}/include + ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/include/sys/soundcard.h ${PREFIX}/include/sys ${MKDIR} ${PREFIX}/lib/oss + ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/sysfiles.list ${PREFIX}/lib/oss + ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/version.dat ${PREFIX}/lib/oss ${MKDIR} ${PREFIX}/lib/oss/etc ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/etc/devices.list ${PREFIX}/lib/oss/etc - ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/version.dat ${PREFIX}/lib/oss - ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/sysfiles.list ${PREFIX}/lib/oss + ${MKDIR} ${PREFIX}/lib/oss/logs ${MKDIR} ${PREFIX}/lib/oss/modules ${INSTALL_DATA} ${WRKSRC}/prototype/usr/lib/oss/modules/* ${PREFIX}/lib/oss/modules - ${INSTALL_MAN} ${WRKSRC}/prototype/usr/man/man8/* ${PREFIX}/man/man8/ - ${INSTALL_MAN} ${WRKSRC}/prototype/usr/man/man1/* ${PREFIX}/man/man1/ + ${INSTALL_MAN} ${WRKSRC}/prototype/usr/man/man1/* ${PREFIX}/man/man1 + ${INSTALL_MAN} ${WRKSRC}/prototype/usr/man/man8/* ${PREFIX}/man/man8 PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL @${CAT} ${PKGMESSAGE} --- ports/audio/oss/files/patch-cmd-ossctl-ossctl.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossctl-ossctl.c 2007-07-13 20:30:53.000000000 -0400 @@ -0,0 +1,44 @@ +--- cmd/ossctl/ossctl.c.orig 2007-07-13 20:24:22.000000000 -0400 ++++ cmd/ossctl/ossctl.c 2007-07-13 20:30:30.000000000 -0400 +@@ -92,7 +92,7 @@ + int is_virtual; + }; + +-struct cardinfo cards[64] = { 0 }; ++struct cardinfo cards[64] = { { { 0 }, { 0 }, 0 } }; + static int ncards = 0; + + void +@@ -200,7 +200,7 @@ + int err = errno; + perror ("SNDCTL_AUDIOINFO"); + +- if (err = EINVAL) ++ if (err == EINVAL) + fprintf (stderr, "Incompatible OSS version\n"); + exit (-1); + } +@@ -404,10 +404,10 @@ + ui_message ("Starting OSS diagnostics (osstest)", 0); + if (full_test) + sprintf (tmp, "/usr/local/bin/osstest -C -V 2>&1 | tee %s/logs/osstest.log", +- osslibdir, osslibdir); ++ osslibdir); + else + sprintf (tmp, "/usr/local/bin/osstest -C 2>&1 | tee %s/logs/osstest.log", +- osslibdir, osslibdir); ++ osslibdir); + + if ((osstest = popen (tmp, "r")) == NULL) + { +@@ -452,8 +452,10 @@ + + sel = ui_sel_create ("OSS Audio Self Test results", 1000); + ++#if 0 + sprintf (tmp, "%s/docs/README.osstest", osslibdir); + append_file (sel, tmp); ++#endif + + ui_sel_addchoice (sel, "", UI_NONEID); + ui_sel_addchoice (sel, "Self test log", UI_NONEID); --- ports/audio/oss/files/patch-cmd-ossctl-ui_X.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossctl-ui_X.c 2007-07-12 20:59:40.000000000 -0400 @@ -0,0 +1,11 @@ +--- cmd/ossctl/ui_X.c.orig 2007-07-12 20:54:07.000000000 -0400 ++++ cmd/ossctl/ui_X.c 2007-07-12 20:59:13.000000000 -0400 +@@ -323,6 +323,8 @@ + *global_input = 0; + input_exited = 1; + gtk_widget_hide (dialog); ++ ++ return (0); + } + + typedef struct --- ports/audio/oss/files/patch-cmd-ossinfo-ossinfo.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossinfo-ossinfo.c 2007-07-12 21:02:44.000000000 -0400 @@ -0,0 +1,47 @@ +--- cmd/ossinfo/ossinfo.c.orig 2007-07-12 20:54:07.000000000 -0400 ++++ cmd/ossinfo/ossinfo.c 2007-07-12 21:02:08.000000000 -0400 +@@ -43,6 +43,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -692,20 +693,22 @@ + } + + if (ioctl (mixerfd, SNDCTL_SYSINFO, &sysinfo) == -1) +- if (errno == ENXIO) +- { +- fprintf (stderr, +- "OSS has not detected any supported sound hardware\n"); +- fprintf (stderr, "in your system.\n"); +- exit (-1); +- } +- else +- { +- perror ("SNDCTL_SYSINFO"); +- if (errno == EINVAL) +- fprintf (stderr, "Error: OSS version 4.0 or later is required\n"); +- exit (-1); +- } ++ { ++ if (errno == ENXIO) ++ { ++ fprintf (stderr, ++ "OSS has not detected any supported sound hardware\n"); ++ fprintf (stderr, "in your system.\n"); ++ exit (-1); ++ } ++ else ++ { ++ perror ("SNDCTL_SYSINFO"); ++ if (errno == EINVAL) ++ fprintf (stderr, "Error: OSS version 4.0 or later is required\n"); ++ exit (-1); ++ } ++ } + + /* + * Simple and brutal command line argument parsing. We do not use --- ports/audio/oss/files/patch-cmd-ossmix-ossmix.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossmix-ossmix.c 2007-07-12 21:04:29.000000000 -0400 @@ -0,0 +1,34 @@ +--- cmd/ossmix/ossmix.c.orig 2007-07-12 20:54:07.000000000 -0400 ++++ cmd/ossmix/ossmix.c 2007-07-12 21:03:56.000000000 -0400 +@@ -841,13 +841,15 @@ + else if (strcmp (arg, "OFF") == 0 || strcmp (arg, "off") == 0) + left = 0; + else if (sscanf (arg, "%d:%d", &left, &right) != 2) +- if (sscanf (arg, "%d", &left) != 1) +- { +- fprintf (stderr, "Bad mixer level '%s'\n", arg); +- exit (1); +- } +- else +- right = left; ++ { ++ if (sscanf (arg, "%d", &left) != 1) ++ { ++ fprintf (stderr, "Bad mixer level '%s'\n", arg); ++ exit (1); ++ } ++ else ++ right = left; ++ } + + if (extrec.type != MIXT_STEREOSLIDER && extrec.type != MIXT_STEREODB && + extrec.type != MIXT_STEREOVU && extrec.type != MIXT_3D +@@ -1102,7 +1104,7 @@ + nch++; + } + +- if (n = 0) ++ if (n == 0) + exit (0); + + while ((l = read (midifd, buf, 256)) > 0) --- ports/audio/oss/files/patch-cmd-ossplay-ossplay.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossplay-ossplay.c 2007-07-12 20:18:23.000000000 -0400 @@ -0,0 +1,33 @@ +--- cmd/ossplay/ossplay.c.orig 2007-07-12 19:51:06.000000000 -0400 ++++ cmd/ossplay/ossplay.c 2007-07-12 20:17:52.000000000 -0400 +@@ -430,7 +430,7 @@ + + if (fmt != WAVE_FORMAT_ADPCM) + { +- fprintf (stderr, "%s: Unsupported wave format %04x\n", filename); ++ fprintf (stderr, "%s: Unsupported wave format %04x\n", filename, fmt); + return; + } + +@@ -641,7 +641,7 @@ + break; + + default: +- fprintf (stderr, "%s: Unsupported wave format %04x\n", filename); ++ fprintf (stderr, "%s: Unsupported wave format %04x\n", filename, fmt); + return; + } + +@@ -1115,10 +1115,10 @@ + } + + if (l > 24 && +- *(unsigned int *) &buf[0] == SUN_MAGIC || ++ (*(unsigned int *) &buf[0] == SUN_MAGIC || + *(unsigned int *) &buf[0] == DEC_MAGIC || + *(unsigned int *) &buf[0] == SUN_INV_MAGIC || +- *(unsigned int *) &buf[0] == DEC_INV_MAGIC) ++ *(unsigned int *) &buf[0] == DEC_INV_MAGIC)) + { + play_au (filename, fd, buf, l); + goto done; --- ports/audio/oss/files/patch-cmd-ossrecord-ossrecord.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossrecord-ossrecord.c 2007-07-12 20:22:17.000000000 -0400 @@ -0,0 +1,10 @@ +--- cmd/ossrecord/ossrecord.c.orig 2007-07-12 19:51:06.000000000 -0400 ++++ cmd/ossrecord/ossrecord.c 2007-07-12 20:21:48.000000000 -0400 +@@ -9,6 +9,7 @@ + + #include + #include ++#include + + + #include --- ports/audio/oss/files/patch-cmd-ossxmix-gtkvu.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossxmix-gtkvu.c 2007-07-16 13:20:19.000000000 -0400 @@ -0,0 +1,94 @@ +--- cmd/ossxmix/gtkvu.c.orig 2007-07-07 16:30:50.000000000 -0400 ++++ cmd/ossxmix/gtkvu.c 2007-07-16 13:17:21.000000000 -0400 +@@ -35,8 +35,8 @@ + + /* Forward declarations */ + +-static void gtk_vu_class_init (GtkVUClass * klass); +-static void gtk_vu_init (GtkVU * vu); ++static void gtk_vu_class_init (GtkVUClass * klass, gpointer data); ++static void gtk_vu_init (GtkVU * vu, GtkVUClass * klass); + static void gtk_vu_destroy (GtkObject * object); + static void gtk_vu_realize (GtkWidget * widget); + static void gtk_vu_unrealize (GtkWidget * widget); +@@ -50,31 +50,34 @@ + + static GtkWidgetClass *parent_class = NULL; + +-guint +-gtk_vu_get_type () ++GType ++gtk_vu_get_type (void) + { +- static guint vu_type = 0; ++ static GType vu_type = 0; + + if (!vu_type) + { +- GtkTypeInfo vu_info = { +- "GtkVU", +- sizeof (GtkVU), ++ static const GTypeInfo vu_info = { + sizeof (GtkVUClass), +- (GtkClassInitFunc) gtk_vu_class_init, +- (GtkObjectInitFunc) gtk_vu_init, + NULL, + NULL, ++ (GClassInitFunc) gtk_vu_class_init, ++ NULL, ++ NULL, ++ sizeof (GtkVU), ++ 0, ++ (GInstanceInitFunc) gtk_vu_init, + }; + +- vu_type = gtk_type_unique (gtk_widget_get_type (), &vu_info); ++ vu_type = g_type_register_static (gtk_widget_get_type (), "GtkVU", ++ &vu_info, 0); + } + + return vu_type; + } + + static void +-gtk_vu_class_init (GtkVUClass * class) ++gtk_vu_class_init (GtkVUClass * class, gpointer data) + { + GtkObjectClass *object_class; + GtkWidgetClass *widget_class; +@@ -94,7 +97,7 @@ + } + + static void +-gtk_vu_init (GtkVU * vu) ++gtk_vu_init (GtkVU * vu, GtkVUClass * klass) + { + vu->level = 5; + } +@@ -104,7 +107,7 @@ + { + GtkVU *vu; + +- vu = gtk_type_new (gtk_vu_get_type ()); ++ vu = gtk_type_new (GTK_TYPE_VU); + + return GTK_WIDGET (vu); + } +@@ -219,7 +222,7 @@ + vu = GTK_VU (widget); + + gdk_colormap_free_colors (gtk_widget_get_colormap (widget), vu->colors, 7); +- gdk_pixmap_unref (vu->pixmap); ++ g_object_unref (vu->pixmap); + } + + static void +@@ -250,7 +253,7 @@ + gdk_window_move_resize (widget->window, + allocation->x, allocation->y, + allocation->width, allocation->height); +- gdk_pixmap_unref (vu->pixmap); ++ g_object_unref (vu->pixmap); + vu->pixmap = + gdk_pixmap_new (widget->window, widget->allocation.width, + widget->allocation.height, --- ports/audio/oss/files/patch-cmd-ossxmix-gtkvu.h 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossxmix-gtkvu.h 2007-07-16 13:21:28.000000000 -0400 @@ -0,0 +1,31 @@ +--- cmd/ossxmix/gtkvu.h.bak 2007-06-12 08:22:44.000000000 -0400 ++++ cmd/ossxmix/gtkvu.h 2007-07-16 12:14:23.000000000 -0400 +@@ -13,10 +13,15 @@ + #endif /* __cplusplus */ + + +-#define GTK_VU(obj) GTK_CHECK_CAST (obj, gtk_vu_get_type (), GtkVU) +-#define GTK_VU_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_vu_get_type (), GtkVUClass) +-#define GTK_IS_VU(obj) GTK_CHECK_TYPE (obj, gtk_vu_get_type ()) +- ++#define GTK_TYPE_VU (gtk_vu_get_type ()) ++#define GTK_VU(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_VU, GtkVU)) ++#define GTK_VU_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_VU, GtkVU)) ++#define GTK_IS_VU(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_VU)) ++#define GTK_IS_VU_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_VU)) + + typedef struct _GtkVU GtkVU; + typedef struct _GtkVUClass GtkVUClass; +@@ -39,7 +44,7 @@ + + + GtkWidget *gtk_vu_new (void); +- guint gtk_vu_get_type (void); ++ GType gtk_vu_get_type (void); + void gtk_vu_set_level (GtkVU * vu, guint new_level); + + #ifdef __cplusplus --- ports/audio/oss/files/patch-cmd-ossxmix-ossxmix.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-ossxmix-ossxmix.c 2007-07-16 13:20:08.000000000 -0400 @@ -0,0 +1,138 @@ +--- cmd/ossxmix/ossxmix.c.orig 2007-06-12 08:22:35.000000000 -0400 ++++ cmd/ossxmix/ossxmix.c 2007-07-16 12:16:20.000000000 -0400 +@@ -327,8 +327,9 @@ + } + + if (errno == EIDRM) +- if (fully_started) +- { ++ { ++ if (fully_started) ++ { + /* + * The mixer structure got changed for some reason. This program + * is not designed to handle this event properly so all we can do +@@ -338,22 +339,24 @@ + * (by comparing the {!code timestamp} fields. Then the new fields can be + * created just like we did when starting the program. + */ +- fprintf (stderr, +- "ossxmix: Mixer structure changed - restarting.\n"); +- if (execlp (saved_argv[0], saved_argv[0], +- saved_argv[1], saved_argv[2], +- saved_argv[3], saved_argv[4], +- saved_argv[5], saved_argv[6], +- saved_argv[7], saved_argv[8]) == -1) +- perror (saved_argv[0]); +- exit (-1); +- } +- else +- { +- fprintf (stderr, +- "ossxmix: Mixer structure changed - aborting.\n"); +- exit (-1); +- } ++ fprintf (stderr, ++ "ossxmix: Mixer structure changed - restarting.\n"); ++ if (execlp (saved_argv[0], saved_argv[0], ++ saved_argv[1], saved_argv[2], ++ saved_argv[3], saved_argv[4], ++ saved_argv[5], saved_argv[6], ++ saved_argv[7], saved_argv[8], NULL) == -1) ++ perror (saved_argv[0]); ++ exit (-1); ++ } ++ else ++ { ++ fprintf (stderr, ++ "ossxmix: Mixer structure changed - aborting.\n"); ++ exit (-1); ++ } ++ } ++ + fprintf (stderr, "%s\n", thisrec->id); + perror ("SNDCTL_MIX_READ"); + return 0; +@@ -379,24 +382,27 @@ + if (ioctl (mixerfd, SNDCTL_MIX_WRITE, &val) == -1) + { + if (errno == EIDRM) +- if (fully_started) +- { +- fprintf (stderr, +- "ossxmix: Mixer structure changed - restarting.\n"); +- if (execlp (saved_argv[0], saved_argv[0], +- saved_argv[1], saved_argv[2], +- saved_argv[3], saved_argv[4], +- saved_argv[5], saved_argv[6], +- saved_argv[7], saved_argv[8]) == -1) +- perror (saved_argv[0]); +- exit (-1); +- } +- else +- { +- fprintf (stderr, +- "ossxmix: Mixer structure changed - aborting.\n"); +- exit (-1); +- } ++ { ++ if (fully_started) ++ { ++ fprintf (stderr, ++ "ossxmix: Mixer structure changed - restarting.\n"); ++ if (execlp (saved_argv[0], saved_argv[0], ++ saved_argv[1], saved_argv[2], ++ saved_argv[3], saved_argv[4], ++ saved_argv[5], saved_argv[6], ++ saved_argv[7], saved_argv[8], NULL) == -1) ++ perror (saved_argv[0]); ++ exit (-1); ++ } ++ else ++ { ++ fprintf (stderr, ++ "ossxmix: Mixer structure changed - aborting.\n"); ++ exit (-1); ++ } ++ } ++ + fprintf (stderr, "%s\n", thisrec->id); + perror ("SNDCTL_MIX_WRITE"); + } +@@ -561,14 +567,16 @@ + { + ctlrec_t *srec = (ctlrec_t *) data; + int val; +- char *entry; ++ gchar *entry; + +- entry = gtk_entry_get_text (GTK_ENTRY (srec->left)); ++ entry = g_strdup(gtk_entry_get_text (GTK_ENTRY (srec->left))); + if (*entry == 0) /* Empty - Why? */ + return; + + val = findenum (srec->mixext, entry); + ++ g_free(entry); ++ + set_value (srec->mixext, val); + } + +@@ -1519,14 +1527,14 @@ + + /* gtk_adjustment_set_value(GTK_ADJUSTMENT(srec->left), left); + gtk_adjustment_set_value(GTK_ADJUSTMENT(srec->right), right); */ +- gtk_vu_set_level (GTK_VU (srec->left), +- (left * 8) / srec->mixext->maxvalue); ++ if (srec->left != NULL) ++ gtk_vu_set_level (GTK_VU (srec->left), ++ (left * 8) / srec->mixext->maxvalue); + + if (srec->right != NULL) + gtk_vu_set_level (GTK_VU (srec->right), + (right * 8) / srec->mixext->maxvalue); + +- + if (srec->lastleft > 0) + srec->lastleft -= PEAK_DECAY; + if (srec->lastright > 0) --- ports/audio/oss/files/patch-cmd-savemixer-savemixer.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-cmd-savemixer-savemixer.c 2007-07-12 20:26:22.000000000 -0400 @@ -0,0 +1,11 @@ +--- cmd/savemixer/savemixer.c.orig 2007-07-12 19:51:06.000000000 -0400 ++++ cmd/savemixer/savemixer.c 2007-07-12 20:24:34.000000000 -0400 +@@ -188,7 +188,7 @@ + break; + + default: +- fprintf (stderr, "Bad open mode flag '%s' in applist.conf\n", ++ fprintf (stderr, "Bad open mode flag '%c' in applist.conf\n", + mode[i]); + } + --- ports/audio/oss/files/patch-kernel-OS-FreeBSD-os_freebsd.c 2007-07-12 14:40:39.000000000 -0400 +++ ports/audio/oss/files/patch-kernel-OS-FreeBSD-os_freebsd.c 2007-07-16 14:29:01.000000000 -0400 @@ -1,11 +1,24 @@ --- kernel/OS/FreeBSD/os_freebsd.c.orig 2007-06-12 17:32:57.000000000 -0400 -+++ kernel/OS/FreeBSD/os_freebsd.c 2007-07-11 20:41:43.000000000 -0400 -@@ -145,7 +145,7 @@ ++++ kernel/OS/FreeBSD/os_freebsd.c 2007-07-12 13:38:56.000000000 -0400 +@@ -64,6 +64,8 @@ + static oss_device_t *cards[MAX_CARDS]; + static int oss_expired = 0; + ++void device_set_desc(device_t dev, const char* desc); /* XXX */ ++ + int + __oss_alloc_dmabuf (int dev, dmap_p dmap, unsigned int alloc_flags, + oss_uint64_t maxaddr, int direction) +@@ -145,7 +147,12 @@ return 0; wq->flags = 0; -- flag = msleep (wq, *mutex, PRIBIO | PCATCH, "oss", ticks); -+ flag = msleep_spin (wq, *mutex, "oss", ticks); ++ ++#ifdef USE_SX_LOCK ++ flag = sx_sleep (wq, *mutex, PRIBIO | PCATCH, "oss", ticks); ++#else + flag = msleep (wq, *mutex, PRIBIO | PCATCH, "oss", ticks); ++#endif if (flag == EWOULDBLOCK) /* Timeout */ { --- ports/audio/oss/files/patch-kernel-OS-FreeBSD-os_freebsd.h 2007-07-12 14:40:39.000000000 -0400 +++ ports/audio/oss/files/patch-kernel-OS-FreeBSD-os_freebsd.h 2007-07-16 14:29:48.000000000 -0400 @@ -25,3 +25,68 @@ #undef timeout #define timeout oss_timeout #undef untimeout +@@ -66,6 +74,13 @@ + + #include "kernel/OS/FreeBSD/wrapper/bsddefs.h" + ++#ifdef USE_SX_LOCK ++#include /* XXX for curthread */ ++#include ++#else ++#include ++#endif ++ + #define uiomove oss_uiomove + typedef struct uio uio_t; + extern int oss_uiomove (void *address, size_t nbytes, enum uio_rw rwflag, +@@ -105,18 +120,39 @@ + * Mutexes + */ + ++#ifdef USE_SX_LOCK ++struct sx; ++#define MUTEX_INIT(osdev, mutex, hier) \ ++do { \ ++ mutex = malloc(sizeof(*mutex), M_DEVBUF, M_WAITOK | M_ZERO); \ ++ sx_init(mutex, "oss"); \ ++} while (0) ++#define MUTEX_CLEANUP(mutex) \ ++do { \ ++ sx_destroy(mutex); \ ++ free(mutex, M_DEVBUF); \ ++} while (0) ++#define MUTEX_ENTER_IRQDISABLE(mutex, flags) sx_xlock(mutex) ++#define MUTEX_ENTER(mutex, flags) sx_slock(mutex) ++#define MUTEX_EXIT_IRQRESTORE(mutex, flags) sx_xunlock(mutex) ++#define MUTEX_EXIT(mutex, flags) sx_sunlock(mutex) ++#else /* !USE_SX_LOCK */ + struct mtx; +- +-#define MUTEX_INIT(osdev, mutex, hier) \ +-{ \ +- mutex = malloc(sizeof (*mutex), M_DEVBUF, M_NOWAIT|M_ZERO); \ +- mtx_init(mutex, "oss", NULL, MTX_RECURSE|MTX_SPIN); \ +-} +-#define MUTEX_CLEANUP(mutex) { mtx_destroy (mutex); free(mutex, M_DEVBUF); } +-#define MUTEX_ENTER_IRQDISABLE(mutex, flags) mtx_lock_spin_flags(mutex, flags) +-#define MUTEX_ENTER(mutex, flags) mtx_lock_spin(mutex) +-#define MUTEX_EXIT_IRQRESTORE(mutex, flags) mtx_unlock_spin_flags(mutex, flags) +-#define MUTEX_EXIT(mutex, flags) mtx_unlock_spin (mutex) ++#define MUTEX_INIT(osdev, mutex, hier) \ ++do { \ ++ mutex = malloc(sizeof(*mutex), M_DEVBUF, M_WAITOK | M_ZERO); \ ++ mtx_init(mutex, "oss", NULL, MTX_RECURSE); \ ++} while (0) ++#define MUTEX_CLEANUP(mutex) \ ++do { \ ++ mtx_destroy(mutex); \ ++ free(mutex, M_DEVBUF); \ ++} while (0) ++#define MUTEX_ENTER_IRQDISABLE(mutex, flags) mtx_lock(mutex) ++#define MUTEX_ENTER(mutex, flags) mtx_lock(mutex) ++#define MUTEX_EXIT_IRQRESTORE(mutex, flags) mtx_unlock(mutex) ++#define MUTEX_EXIT(mutex, flags) mtx_unlock(mutex) ++#endif /* USE_SX_LOCK */ + + /* + * INB() and OUTB() should be obvious. NOTE! The order of --- ports/audio/oss/files/patch-kernel-OS-FreeBSD-wrapper-bsddefs.h 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-OS-FreeBSD-wrapper-bsddefs.h 2007-07-16 14:24:59.000000000 -0400 @@ -0,0 +1,23 @@ +--- kernel/OS/FreeBSD/wrapper/bsddefs.h.orig 2007-07-12 13:00:27.000000000 -0400 ++++ kernel/OS/FreeBSD/wrapper/bsddefs.h 2007-07-12 13:28:00.000000000 -0400 +@@ -18,6 +18,7 @@ + */ + + #include ++#define USE_SX_LOCK 1 + #undef VDEV_SUPPORT + + typedef struct device dev_info_t; +@@ -61,7 +62,12 @@ + #define CE_WARN 2 + #define CE_PANIC 3 + ++#ifdef USE_SX_LOCK ++typedef struct sx *oss_mutex_t; ++#else + typedef struct mtx *oss_mutex_t; ++#endif ++ + typedef int ddi_iblock_cookie_t; + + extern void oss_udelay (unsigned long t); --- ports/audio/oss/files/patch-kernel-drv-als300-als300.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-als300-als300.c 2007-07-13 16:57:21.000000000 -0400 @@ -0,0 +1,27 @@ +--- kernel/drv/als300/als300.c.orig 2007-07-13 16:54:06.000000000 -0400 ++++ kernel/drv/als300/als300.c 2007-07-13 16:56:37.000000000 -0400 +@@ -225,14 +225,16 @@ + + /* Acknowledge the interrupt */ + if (status) +- if (devc->model == MDL_ALS300) +- { +- OUTB (devc->osdev, status, devc->base + 0x07); /* acknowledge interrupt */ +- } +- else +- { +- OUTB (devc->osdev, status, devc->base + 0xF); /* acknowledge interrupt */ +- } ++ { ++ if (devc->model == MDL_ALS300) ++ { ++ OUTB (devc->osdev, status, devc->base + 0x07); /* acknowledge interrupt */ ++ } ++ else ++ { ++ OUTB (devc->osdev, status, devc->base + 0xF); /* acknowledge interrupt */ ++ } ++ } + return serviced; + } + --- ports/audio/oss/files/patch-kernel-drv-als4000-als4000.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-als4000-als4000.c 2007-07-13 17:02:59.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/drv/als4000/als4000.c.orig 2007-07-13 16:54:14.000000000 -0400 ++++ kernel/drv/als4000/als4000.c 2007-07-13 17:02:34.000000000 -0400 +@@ -826,7 +826,7 @@ + als4000_get_buffer_pointer (int dev, dmap_t * dmap, int direction) + { + als4000_devc *devc = audio_engines[dev]->devc; +- unsigned int ptr; ++ unsigned int ptr = 0; + + if (direction == PCM_ENABLE_OUTPUT) + ptr = als4000_gcr_readl (devc, 0xa0); --- ports/audio/oss/files/patch-kernel-drv-audigyls-audigyls.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-audigyls-audigyls.c 2007-07-13 17:08:33.000000000 -0400 @@ -0,0 +1,13 @@ +--- kernel/drv/audigyls/audigyls.c.orig 2007-07-13 16:54:04.000000000 -0400 ++++ kernel/drv/audigyls/audigyls.c 2007-07-13 17:08:02.000000000 -0400 +@@ -1614,9 +1614,7 @@ + break; + } + } +- else +- return *arg = 0; +- ++ return *arg = 0; + } + + static mixer_driver_t audigyls_mixer_driver = { --- ports/audio/oss/files/patch-kernel-drv-cmi8788-cmi8788.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-cmi8788-cmi8788.c 2007-07-13 17:21:22.000000000 -0400 @@ -0,0 +1,134 @@ +--- kernel/drv/cmi8788/cmi8788.c.orig 2007-07-13 16:54:03.000000000 -0400 ++++ kernel/drv/cmi8788/cmi8788.c 2007-07-13 17:20:39.000000000 -0400 +@@ -733,7 +733,7 @@ + cmi8788_portc *portc = audio_engines[dev]->portc; + dmap_p dmap = audio_engines[dev]->dmap_in; + oss_native_word flags; +- int channels, bits, i2s_bits, i2s_rate; ++ int channels = 0, bits = 0, i2s_bits, i2s_rate; + + MUTEX_ENTER_IRQDISABLE (devc->mutex, flags); + +@@ -766,7 +766,7 @@ + break; + } + +- OUTB (devc->osdev, INB (devc->osdev, REC_MODE) & ~0x3 | channels, ++ OUTB (devc->osdev, (INB (devc->osdev, REC_MODE) & ~0x3) | channels, + REC_MODE); + + switch (portc->bits) +@@ -781,7 +781,7 @@ + bits = 0x2; + break; + } +- OUTB (devc->osdev, INB (devc->osdev, REC_FORMAT) & ~0x3 | bits, ++ OUTB (devc->osdev, (INB (devc->osdev, REC_FORMAT) & ~0x3) | bits, + REC_FORMAT); + + /* set up the i2s bits as well */ +@@ -838,7 +838,7 @@ + break; + } + +- OUTB (devc->osdev, INB (devc->osdev, REC_FORMAT) & ~0x30 | bits, ++ OUTB (devc->osdev, (INB (devc->osdev, REC_FORMAT) & ~0x30) | bits, + REC_FORMAT); + + /* setup i2s bits */ +@@ -870,7 +870,7 @@ + cmi8788_portc *portc = audio_engines[dev]->portc; + dmap_p dmap = audio_engines[dev]->dmap_out; + oss_native_word flags; +- int i2s_rate, rate, spdif_rate, bits, i2s_bits, channels; ++ int i2s_rate, rate, spdif_rate, bits = 0, i2s_bits, channels = 0; + + MUTEX_ENTER_IRQDISABLE (devc->mutex, flags); + +@@ -922,7 +922,7 @@ + } + + /* set the format bits in play format register */ +- OUTB (devc->osdev, INB (devc->osdev, PLAY_FORMAT) & ~0xC | bits, ++ OUTB (devc->osdev, (INB (devc->osdev, PLAY_FORMAT) & ~0xC) | bits, + PLAY_FORMAT); + + /* setup the i2s bits in the i2s register */ +@@ -1753,42 +1753,42 @@ + { + case 0: /* 44100 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0x0, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0x0, + SPDIFOUT_CHAN_STAT); + break; + case 1: /* 48000 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0x2000, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0x2000, + SPDIFOUT_CHAN_STAT); + break; + case 2: /* 32000 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0x3000, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0x3000, + SPDIFOUT_CHAN_STAT); + break; + case 3: /* 88000 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0x8000, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0x8000, + SPDIFOUT_CHAN_STAT); + break; + case 4: /* 96000 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0xA000, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0xA000, + SPDIFOUT_CHAN_STAT); + break; + case 5: /* 64000 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0xB000, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0xB000, + SPDIFOUT_CHAN_STAT); + break; + case 6: /* 176400 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0xC000, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0xC000, + SPDIFOUT_CHAN_STAT); + break; + case 7: /* 192000 */ + OUTL (devc->osdev, +- INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000 | 0xE000, ++ (INL (devc->osdev, SPDIFOUT_CHAN_STAT) & ~0xF0000) | 0xE000, + SPDIFOUT_CHAN_STAT); + break; + +@@ -1833,7 +1833,7 @@ + int group, parent, ctl; + + if ((parent = mixer_ext_create_group (dev, 0, "EXT")) < 0) +- return group; ++ return parent; + + /* CREATE MONITOR */ + if ((group = mixer_ext_create_group (dev, parent, "MONITOR")) < 0) +@@ -1949,7 +1949,7 @@ + oss_native_word wVal; + unsigned short sVal; + unsigned char bVal; +- int i, first_dev, count; ++ int i, first_dev = 0, count; + int default_vol; + /* + * Init CMI Controller +@@ -2000,7 +2000,7 @@ + count = 100; + while ((INW (devc->osdev, AC97_CTRL) & 0x2) && (count--)) + { +- OUTW (devc->osdev, INW (devc->osdev, AC97_CTRL) & ~0x2 | 0x2, ++ OUTW (devc->osdev, (INW (devc->osdev, AC97_CTRL) & ~0x2) | 0x2, + AC97_CTRL); + oss_udelay (100); + } --- ports/audio/oss/files/patch-kernel-drv-geode-geode.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-geode-geode.c 2007-07-13 17:26:13.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/drv/geode/geode.c.orig 2007-07-13 16:54:05.000000000 -0400 ++++ kernel/drv/geode/geode.c 2007-07-13 17:25:31.000000000 -0400 +@@ -91,7 +91,7 @@ + geodeintr (oss_device_t * osdev) + { + +- geode_devc *devc; ++ geode_devc *devc = osdev->devc; + geode_portc *portc; + int i, n; + int serviced = 0; --- ports/audio/oss/files/patch-kernel-drv-hdaudio-hdaudio.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-hdaudio-hdaudio.c 2007-07-13 17:29:29.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/drv/hdaudio/hdaudio.c.orig 2007-07-13 16:54:09.000000000 -0400 ++++ kernel/drv/hdaudio/hdaudio.c 2007-07-13 17:29:09.000000000 -0400 +@@ -353,7 +353,7 @@ + unsigned int verb, unsigned int parm, unsigned int *upper, + unsigned int *lower) + { +- unsigned int intrctl; ++ unsigned int intrctl = 0; + hda_devc *devc = (hda_devc *) dc; + + /* --- ports/audio/oss/files/patch-kernel-drv-imux-imux.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-imux-imux.c 2007-07-13 17:31:17.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/drv/imux/imux.c.orig 2007-07-13 16:54:03.000000000 -0400 ++++ kernel/drv/imux/imux.c 2007-07-13 17:30:59.000000000 -0400 +@@ -944,7 +944,7 @@ + + devc->hw_speed = devc->imux_rate; + devc->master_osdev = audio_engines[devc->hw_dev]->osdev; +- devc->installed_ok; ++ devc->installed_ok = 1; + devc->autoreset = 1; + MUTEX_INIT (devc->master_osdev, devc->mutex, MH_DRV + 4); + --- ports/audio/oss/files/patch-kernel-drv-maestro-maestro.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-maestro-maestro.c 2007-07-13 20:08:50.000000000 -0400 @@ -0,0 +1,27 @@ +--- kernel/drv/maestro/maestro.c.orig 2007-07-13 20:05:11.000000000 -0400 ++++ kernel/drv/maestro/maestro.c 2007-07-13 20:08:41.000000000 -0400 +@@ -163,13 +163,13 @@ + + struct dmabuf + { +- char *rawbuf; ++ unsigned char *rawbuf; + unsigned dmasize; + oss_native_word base; /* Offset for ptr */ + } + dma_adc, dma_dac, dma_mix; + int wApuBufferSize; +- char *dmapages; ++ unsigned char *dmapages; + oss_native_word dmapages_phys; + int dmalen; + +@@ -1791,7 +1791,7 @@ + static int + allocate_maestro_bufs (maestro_devc * devc) + { +- char *rawbuf = NULL; ++ unsigned char *rawbuf = NULL; + int size, extra, start; + oss_native_word phaddr; + --- ports/audio/oss/files/patch-kernel-drv-neomagic-neomagic.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-neomagic-neomagic.c 2007-07-13 17:34:52.000000000 -0400 @@ -0,0 +1,14 @@ +--- kernel/drv/neomagic/neomagic.c.orig 2007-07-13 16:54:11.000000000 -0400 ++++ kernel/drv/neomagic/neomagic.c 2007-07-13 17:34:32.000000000 -0400 +@@ -1285,9 +1285,9 @@ + pci_read_config_word (osdev, PCI_DEVICE_ID, &device); + + if ((vendor != NEOMAGIC_VENDOR_ID) || +- (device != PCI_DEVICE_ID_NEOMAGIC_NEOMAGICAV_AUDIO) && ++ ((device != PCI_DEVICE_ID_NEOMAGIC_NEOMAGICAV_AUDIO) && + (device != PCI_DEVICE_ID_NEOMAGIC_NEOMAGICZX_AUDIO) && +- (device != PCI_DEVICE_ID_NEOMAGIC_NM2360_AUDIO)) ++ (device != PCI_DEVICE_ID_NEOMAGIC_NM2360_AUDIO))) + + return 0; + --- ports/audio/oss/files/patch-kernel-drv-sblive-sblive.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-sblive-sblive.c 2007-07-13 17:36:17.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/drv/sblive/sblive.c.orig 2007-07-13 16:54:13.000000000 -0400 ++++ kernel/drv/sblive/sblive.c 2007-07-13 17:35:45.000000000 -0400 +@@ -1707,7 +1707,7 @@ + if (dmap->dmabuf != NULL) + return 0; + +- if (err = oss_alloc_dmabuf (dev, dmap, direction) < 0) ++ if ((err = oss_alloc_dmabuf (dev, dmap, direction)) < 0) + { + cmn_err (CE_WARN, "Cannot allocate DMA buffer\n"); + return err; --- ports/audio/oss/files/patch-kernel-drv-softoss-softoss.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-softoss-softoss.c 2007-07-13 17:41:19.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/drv/softoss/softoss.c.orig 2007-07-13 16:54:06.000000000 -0400 ++++ kernel/drv/softoss/softoss.c 2007-07-13 17:40:48.000000000 -0400 +@@ -939,7 +939,7 @@ + { + int instr = 0; + int best_sample, best_delta, delta_freq, selected; +- oss_native_word note_freq, freq, base_note; ++ oss_native_word note_freq = 0, freq, base_note; + voice_info *v = &softoss_voices[voice]; + oss_native_word flags; + --- ports/audio/oss/files/patch-kernel-drv-softoss-softoss_record.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-softoss-softoss_record.c 2007-07-13 17:43:46.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/drv/softoss/softoss_record.c.orig 2007-07-13 16:54:06.000000000 -0400 ++++ kernel/drv/softoss/softoss_record.c 2007-07-13 17:43:14.000000000 -0400 +@@ -26,7 +26,7 @@ + #include "softoss_cfg.h" + #include "softoss.h" + +-recvoice_info softoss_recvoices[MAX_AVOICE] = { 0 }; ++recvoice_info softoss_recvoices[MAX_AVOICE] = { { 0, 0, NULL } }; + + void + start_record_engine (softoss_devc * devc) --- ports/audio/oss/files/patch-kernel-drv-via97-via97.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-via97-via97.c 2007-07-13 17:48:34.000000000 -0400 @@ -0,0 +1,10 @@ +--- kernel/drv/via97/via97.c.orig 2007-07-13 16:54:05.000000000 -0400 ++++ kernel/drv/via97/via97.c 2007-07-13 17:48:16.000000000 -0400 +@@ -870,6 +870,7 @@ + mpu_base = 0x320; + break; + case 3: ++ default: + mpu_base = 0x330; + break; + } --- ports/audio/oss/files/patch-kernel-drv-ymf7xx-ymf7xx.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-drv-ymf7xx-ymf7xx.c 2007-07-13 17:53:52.000000000 -0400 @@ -0,0 +1,32 @@ +--- kernel/drv/ymf7xx/ymf7xx.c.orig 2007-07-13 16:54:14.000000000 -0400 ++++ kernel/drv/ymf7xx/ymf7xx.c 2007-07-13 17:53:28.000000000 -0400 +@@ -1355,7 +1355,6 @@ + + unsigned char pci_irq_line, pci_revision; + unsigned short pci_command, vendor, device; +- unsigned int pci_ioaddr; + unsigned int err; + unsigned char pci_reset; + unsigned short pci_legacy; +@@ -1404,7 +1403,7 @@ + } + + DDB (cmn_err +- (CE_WARN, "Yamaha: rev %x I/O base %04x\n", pci_revision, pci_ioaddr)); ++ (CE_WARN, "Yamaha: rev %x I/O base %04x\n", pci_revision, devc->base0addr)); + + devc->deviceid = device; + switch (device) +@@ -1458,8 +1457,11 @@ + /* Legacy I/O setup - setup MPU and FM io/irq values */ + devc->fm_attached = 0; + devc->mpu_attached = 0; +- /*pcipci_legacy = 0x0020|0x00C0|0x0004; /* 10 bit address decode and Joystick */ ++#if 0 ++ pci_legacy = 0x0020|0x00C0|0x0004; /* 10 bit address decode and Joystick */ ++#else + pci_legacy = 0x4; ++#endif + if (devc->fm_base) + pci_legacy |= 0x0002; /* FM enable */ + --- ports/audio/oss/files/patch-kernel-framework-audio-audio.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-framework-audio-audio.c 2007-07-13 18:02:53.000000000 -0400 @@ -0,0 +1,64 @@ +--- kernel/framework/audio/audio.c.orig 2007-07-13 16:54:16.000000000 -0400 ++++ kernel/framework/audio/audio.c 2007-07-13 18:02:30.000000000 -0400 +@@ -2328,15 +2328,14 @@ + + if (dmap->tmpbuf_ptr > 0) + info->bytes -= dmap->tmpbuf_ptr; +- } + +- if ((adev->dmap_out->flags & DMAP_COOKED) & info->bytes < +- dmap->fragment_size / 2) +- { ++ if (info->bytes < (dmap->fragment_size / 2)) ++ { + #ifdef DO_TIMINGS +- oss_do_timing ("GETOSPACE: Buffer full"); ++ oss_do_timing ("GETOSPACE: Buffer full"); + #endif +- info->bytes = 0; ++ info->bytes = 0; ++ } + } + + if (info->bytes < 0) +@@ -4102,7 +4101,8 @@ + static int + find_input_space (adev_p adev, dmap_p dmap, unsigned char **dbuf) + { +- unsigned char *p, *p1 = dmap->tmpbuf1, *p2 = dmap->tmpbuf2; ++ unsigned char *p; ++ void *p1 = dmap->tmpbuf1, *p2 = dmap->tmpbuf2; + int err, l, l2, max; + + if (!(dmap->flags & DMAP_COOKED)) +@@ -4141,8 +4141,8 @@ + move_raw_rdpointer (adev, dmap, l); + + if ((err = +- dmap->convert_func (adev, dmap, (void **) &p1, &l2, +- (void **) &p2, &adev->hw_parms, ++ dmap->convert_func (adev, dmap, &p1, &l2, &p2, ++ &adev->hw_parms, + &adev->user_parms)) < 0) + return err; + +@@ -4914,7 +4914,7 @@ + } + else + { +- unsigned char *p1 = dmap->tmpbuf1, *p2 = dmap->tmpbuf2; ++ void *p1 = dmap->tmpbuf1, *p2 = dmap->tmpbuf2; + int l2, max; + + if (spc > TMP_CONVERT_MAX) +@@ -4950,8 +4950,8 @@ + cmn_err (CE_WARN, "audio: uiomove(UIO_WRITE) (conv) failed\n"); + UP_STATUS (STS_CONVERT); + if ((err = +- dmap->convert_func (adev, dmap, (void **) &p1, &l2, +- (void **) &p2, &adev->user_parms, ++ dmap->convert_func (adev, dmap, &p1, &l2, &p2, ++ &adev->user_parms, + &adev->hw_parms)) < 0) + { + cmn_err (CE_WARN, "Format conversion failed (%d)\n", err); --- ports/audio/oss/files/patch-kernel-framework-audio-grc3.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-framework-audio-grc3.c 2007-07-13 19:57:17.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/framework/audio/grc3.c.orig 2007-07-13 19:53:28.000000000 -0400 ++++ kernel/framework/audio/grc3.c 2007-07-13 19:56:44.000000000 -0400 +@@ -251,7 +251,7 @@ + int + grc3_convert (grc3state_t * grc, + int domain, int quality, +- const void *src, void *dst, ++ void *src, void *dst, + int sz, int bufsz, int inc, int offset) + { + --- ports/audio/oss/files/patch-kernel-framework-include-grc3.h 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-framework-include-grc3.h 2007-07-13 20:02:15.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/framework/include/grc3.h.orig 2007-07-07 16:30:50.000000000 -0400 ++++ kernel/framework/include/grc3.h 2007-07-13 20:00:44.000000000 -0400 +@@ -304,7 +304,7 @@ + + int grc3_convert (grc3state_t * grc, + int domain, int quality, +- const void *src, void *dst, ++ void *src, void *dst, + int sz, int bufsz, int inc, int offset); + + --- ports/audio/oss/files/patch-kernel-framework-midi-midi.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-framework-midi-midi.c 2007-07-13 18:11:41.000000000 -0400 @@ -0,0 +1,28 @@ +--- kernel/framework/midi/midi.c.orig 2007-07-13 16:54:14.000000000 -0400 ++++ kernel/framework/midi/midi.c 2007-07-13 18:11:19.000000000 -0400 +@@ -546,6 +546,7 @@ + { + MDB (cmn_err (CE_CONT, "oss_midi_output_intr\n")); + oss_midi_output_intr_handler (dev, 0); ++ return 0; + } + + static void +@@ -847,8 +848,6 @@ + mode = file->mode & O_ACCMODE; + client = oss_midi_clients[dev]; + +- untimeout (mididev->mtc_timeout_id); +- + client->open_mode = 0; + + if (client->mididev == NULL) /* Not bound to a port device */ +@@ -860,6 +859,8 @@ + mididev = client->mididev; + midi_dev = mididev->dev; + ++ untimeout (mididev->mtc_timeout_id); ++ + if (mididev->open_mode & OPEN_WRITE) /* Needs to sync */ + { + MUTEX_EXIT_IRQRESTORE (midi_mutex, flags); --- ports/audio/oss/files/patch-kernel-framework-midi-midi_queue.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-framework-midi-midi_queue.c 2007-07-13 18:12:40.000000000 -0400 @@ -0,0 +1,11 @@ +--- kernel/framework/midi/midi_queue.c.orig 2007-07-13 16:54:15.000000000 -0400 ++++ kernel/framework/midi/midi_queue.c 2007-07-13 18:12:18.000000000 -0400 +@@ -373,7 +373,7 @@ + midi_buf_t *buf; + oss_native_word flags; + +- *hdr == NULL; ++ *hdr = NULL; + *data = NULL; + + if (queue == NULL) --- ports/audio/oss/files/patch-kernel-framework-midi-timer.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-framework-midi-timer.c 2007-07-16 13:35:12.000000000 -0400 @@ -0,0 +1,29 @@ +--- kernel/framework/midi/timers.c.orig 2007-07-16 13:32:58.000000000 -0400 ++++ kernel/framework/midi/timers.c 2007-07-16 13:34:28.000000000 -0400 +@@ -312,7 +312,7 @@ + if (tmr->timebase < 1) + tmr->timebase = OSS_HZ; + +- t = 0xffffffffffffffffLL; /* Largest possible time */ ++ t = tick = 0xffffffffffffffffULL; /* Largest possible time */ + for (x = 0; x < sizeof (tmr->midimap) / sizeof (unsigned int); x++) + if (tmr->midimap[x] != 0) + for (i = x * BITS_PER_ENTRY; +@@ -327,7 +327,7 @@ + } + } + +- if (t == 0xffffffffffffffffLL) /* No events queued */ ++ if (t == 0xffffffffffffffffULL) /* No events queued */ + return 1; + + tmr->next_time = t; +@@ -442,6 +442,8 @@ + + t += tmr->bookmark_time; + } ++ else ++ t = time; + + if (t >= latency) + t -= latency; --- ports/audio/oss/files/patch-kernel-framework-mixer-mixer.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-kernel-framework-mixer-mixer.c 2007-07-13 18:50:55.000000000 -0400 @@ -0,0 +1,23 @@ +--- kernel/framework/mixer/mixer.c.orig 2007-07-13 16:54:17.000000000 -0400 ++++ kernel/framework/mixer/mixer.c 2007-07-13 18:50:36.000000000 -0400 +@@ -1185,9 +1185,9 @@ + mask2 = 0LL; + + for (i = 0; i < oldlist->ndevs; i++) +- mask1 != 1LL << oldlist->devices[i]; ++ mask1 |= 1LL << oldlist->devices[i]; + for (i = 0; i < newlist->ndevs; i++) +- mask1 != 1LL << newlist->devices[i]; ++ mask2 |= 1LL << newlist->devices[i]; + + if (mask1 != mask2) + return 0; +@@ -2139,7 +2139,7 @@ + const char *name, + mixer_driver_t * driver, int driver_size, void *devc) + { +- mixer_operations_t *op; ++ mixer_operations_t *op = NULL; + mixer_driver_t *d; + + int l, i, num; --- ports/audio/oss/files/patch-os_cmd-FreeBSD-ossdetect-ossdetect.c 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-os_cmd-FreeBSD-ossdetect-ossdetect.c 2007-07-16 14:36:36.000000000 -0400 @@ -0,0 +1,45 @@ +--- os_cmd/FreeBSD/ossdetect/ossdetect.c.orig 2007-07-16 14:31:41.000000000 -0400 ++++ os_cmd/FreeBSD/ossdetect/ossdetect.c 2007-07-16 14:36:14.000000000 -0400 +@@ -91,7 +91,7 @@ + { + if (*p == '#' || *p == '\n') + *p = 0; +- *p++; ++ p++; + } + + /* Drivers with upper case names are unsupported ones */ +@@ -244,19 +244,22 @@ + { + + char name[32]; ++ int fake_unit = 0; + + if (verbose > 2) +- printf ("%s%d@pci%d:%d:%d:\tclass=0x%06x card=0x%08x " +- "chip=0x%08x rev=0x%02x hdr=0x%02x\n", +- (p->pd_name && *p->pd_name) ? p->pd_name : +- "none", +- (p->pd_name && *p->pd_name) ? (int) p->pd_unit : +- p->pc_sel.pc_bus, p->pc_sel.pc_dev, +- p->pc_sel.pc_func, (p->pc_class << 16) | +- (p->pc_subclass << 8) | p->pc_progif, +- (p->pc_subdevice << 16) | p->pc_subvendor, +- (p->pc_device << 16) | p->pc_vendor, +- p->pc_revid, p->pc_hdr); ++ { ++ printf ("%s%d@pci%d:%d:%d:\tclass=0x%06x card=0x%08x " ++ "chip=0x%08x rev=0x%02x hdr=0x%02x\n", ++ (p->pd_name && *p->pd_name) ? p->pd_name : "none", ++ (p->pd_name && *p->pd_name) ? (int) p->pd_unit : fake_unit, ++ p->pc_sel.pc_bus, p->pc_sel.pc_dev, p->pc_sel.pc_func, ++ (p->pc_class << 16) | (p->pc_subclass << 8) | p->pc_progif, ++ (p->pc_subdevice << 16) | p->pc_subvendor, ++ (p->pc_device << 16) | p->pc_vendor, ++ p->pc_revid, p->pc_hdr); ++ if (p->pd_name == NULL || *p->pd_name == '\0') ++ fake_unit++; ++ } + + sprintf (name, "pcs%x,%x", p->pc_subvendor, p->pc_subdevice); + if (add_drv (name, PCI_PASS)) --- ports/audio/oss/files/patch-setup-setupdir.sh 1969-12-31 19:00:00.000000000 -0500 +++ ports/audio/oss/files/patch-setup-setupdir.sh 2007-07-12 18:13:53.000000000 -0400 @@ -0,0 +1,11 @@ +--- setup/setupdir.sh.orig 2007-06-27 17:13:23.000000000 -0400 ++++ setup/setupdir.sh 2007-07-12 17:58:37.000000000 -0400 +@@ -95,7 +95,7 @@ + + touch .depend + +-if date -u +%Y%m%d%H%M > build.id.new 2>/dev/null ++if date -u +%y%m%d > build.id.new 2>/dev/null + then + rm -f build.id + mv build.id.new build.id --- ports/audio/oss/pkg-plist 2007-06-25 15:52:12.000000000 -0400 +++ ports/audio/oss/pkg-plist 2007-07-16 13:48:20.000000000 -0400 @@ -50,6 +50,8 @@ lib/oss/modules/vortex.ko lib/oss/modules/ymf7xx.ko @dirrm lib/oss/modules +@exec mkdir -p %D/lib/oss/logs +@dirrmtry lib/oss/logs lib/oss/etc/devices.list @unexec rm -f %D/lib/oss/etc/installed_drivers @unexec rm -f %D/lib/oss/etc/legacy_devices