Module Name:    src
Committed By:   tls
Date:           Sun Aug 10 06:52:07 UTC 2014

Modified Files:
        src/lib/libossaudio [tls-earlyentropy]: ossaudio.c shlib_version
            soundcard.h

Log Message:
Rebase.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.28.8.1 src/lib/libossaudio/ossaudio.c
cvs rdiff -u -r1.6 -r1.6.24.1 src/lib/libossaudio/shlib_version
cvs rdiff -u -r1.22 -r1.22.8.1 src/lib/libossaudio/soundcard.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libossaudio/ossaudio.c
diff -u src/lib/libossaudio/ossaudio.c:1.28 src/lib/libossaudio/ossaudio.c:1.28.8.1
--- src/lib/libossaudio/ossaudio.c:1.28	Sat May  5 15:57:45 2012
+++ src/lib/libossaudio/ossaudio.c	Sun Aug 10 06:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ossaudio.c,v 1.28 2012/05/05 15:57:45 christos Exp $	*/
+/*	$NetBSD: ossaudio.c,v 1.28.8.1 2014/08/10 06:52:06 tls Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: ossaudio.c,v 1.28 2012/05/05 15:57:45 christos Exp $");
+__RCSID("$NetBSD: ossaudio.c,v 1.28.8.1 2014/08/10 06:52:06 tls Exp $");
 
 /*
  * This is an OSS (Linux) sound API emulator.
@@ -44,6 +44,9 @@ __RCSID("$NetBSD: ossaudio.c,v 1.28 2012
 #include <sys/audioio.h>
 #include <sys/stat.h>
 #include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
 #include <stdarg.h>
 
 #include "soundcard.h"
@@ -93,9 +96,17 @@ audio_ioctl(int fd, unsigned long com, v
 	struct audio_buf_info bufinfo;
 	struct count_info cntinfo;
 	struct audio_encoding tmpenc;
+	struct oss_sysinfo tmpsysinfo;
+	struct oss_audioinfo *tmpaudioinfo;
+	audio_device_t tmpaudiodev;
+	struct stat tmpstat;
+	dev_t devno;
+	char version[32] = "4.01";
+	char license[16] = "NetBSD";
 	u_int u;
 	int idat, idata;
 	int retval;
+	int i;
 
 	idat = 0;
 
@@ -316,13 +327,21 @@ audio_ioctl(int fd, unsigned long com, v
 				idat |= AFMT_S8;
 				break;
 			case AUDIO_ENCODING_SLINEAR_LE:
-				if (tmpenc.precision == 16)
+				if (tmpenc.precision == 32)
+					idat |= AFMT_S32_LE;
+				else if (tmpenc.precision == 24)
+					idat |= AFMT_S24_LE;
+				else if (tmpenc.precision == 16)
 					idat |= AFMT_S16_LE;
 				else
 					idat |= AFMT_S8;
 				break;
 			case AUDIO_ENCODING_SLINEAR_BE:
-				if (tmpenc.precision == 16)
+				if (tmpenc.precision == 32)
+					idat |= AFMT_S32_BE;
+				else if (tmpenc.precision == 24)
+					idat |= AFMT_S24_BE;
+				else if (tmpenc.precision == 16)
 					idat |= AFMT_S16_BE;
 				else
 					idat |= AFMT_S8;
@@ -445,6 +464,130 @@ audio_ioctl(int fd, unsigned long com, v
 		cntinfo.ptr = tmpoffs.offset;
 		*(struct count_info *)argp = cntinfo;
 		break;
+	case SNDCTL_SYSINFO:
+		strncpy(tmpsysinfo.product, "OSS/NetBSD", 31);
+		tmpsysinfo.product[31] = 0; 
+		strncpy(tmpsysinfo.version, version, 31); 
+		tmpsysinfo.version[31] = 0; 
+		strncpy(tmpsysinfo.license, license, 15);
+		tmpsysinfo.license[15] = 0; 
+		tmpsysinfo.versionnum = SOUND_VERSION;
+		memset(tmpsysinfo.options, 0, 8);
+		tmpsysinfo.numaudios = OSS_MAX_AUDIO_DEVS;
+		tmpsysinfo.numaudioengines = 1;
+		memset(tmpsysinfo.openedaudio, 0, 8);
+		tmpsysinfo.numsynths = 1;
+		tmpsysinfo.nummidis = -1;
+		tmpsysinfo.numtimers = -1;
+		tmpsysinfo.nummixers = 1;
+		tmpsysinfo.numcards = 1;
+		memset(tmpsysinfo.openedmidi, 0, 8);
+		*(struct oss_sysinfo *)argp = tmpsysinfo;
+		break;
+	case SNDCTL_ENGINEINFO:
+	case SNDCTL_AUDIOINFO:
+		devno = 0;
+		tmpaudioinfo = (struct oss_audioinfo*)argp;
+		if (tmpaudioinfo == NULL)
+			return EINVAL;
+		if (tmpaudioinfo->dev < 0) {
+			fstat(fd, &tmpstat);
+			if ((tmpstat.st_rdev & 0xff00) == 0x2a00)
+				devno = tmpstat.st_rdev & 0xff;
+			if (devno >= 0x80)
+				tmpaudioinfo->dev = devno & 0x7f;
+		}
+		if (tmpaudioinfo->dev < 0)
+			tmpaudioinfo->dev = 0;
+
+		snprintf(tmpaudioinfo->devnode, OSS_DEVNODE_SIZE,
+		    "/dev/audio%d", tmpaudioinfo->dev); 
+
+		retval = ioctl(fd, AUDIO_GETDEV, &tmpaudiodev);
+		if (retval < 0)
+			return retval;
+		retval = ioctl(fd, AUDIO_GETINFO, &tmpinfo);
+		if (retval < 0)
+			return retval;
+		retval = ioctl(fd, AUDIO_GETPROPS, &idata);
+		if (retval < 0)
+			return retval;
+		idat = DSP_CAP_TRIGGER; /* pretend we have trigger */
+		if (idata & AUDIO_PROP_FULLDUPLEX)
+			idat |= DSP_CAP_DUPLEX;
+		if (idata & AUDIO_PROP_MMAP)
+			idat |= DSP_CAP_MMAP;
+		idat = PCM_CAP_INPUT | PCM_CAP_OUTPUT;
+		strncpy(tmpaudioinfo->name, tmpaudiodev.name, 64);
+		tmpaudioinfo->name[63] = 0;
+		tmpaudioinfo->busy = tmpinfo.play.open;
+		tmpaudioinfo->pid = -1;
+		tmpaudioinfo->caps = idat;
+		ioctl(fd, SNDCTL_DSP_GETFMTS, &tmpaudioinfo->iformats);
+		tmpaudioinfo->oformats = tmpaudioinfo->iformats;
+		tmpaudioinfo->magic = -1;
+		memset(tmpaudioinfo->cmd, 0, 64);
+		tmpaudioinfo->card_number = -1;
+		memset(tmpaudioinfo->song_name, 0, 64);
+		memset(tmpaudioinfo->label, 0, 16);
+		tmpaudioinfo->port_number = tmpinfo.play.port;
+		tmpaudioinfo->mixer_dev = tmpaudioinfo->dev;
+		tmpaudioinfo->legacy_device = -1;
+		tmpaudioinfo->enabled = 1;
+		tmpaudioinfo->flags = -1;
+		tmpaudioinfo->min_rate = tmpinfo.play.sample_rate;
+		tmpaudioinfo->max_rate = tmpinfo.play.sample_rate;
+		tmpaudioinfo->nrates = 2;
+		for (i = 0; i < tmpaudioinfo->nrates; i++)
+			tmpaudioinfo->rates[i] = tmpinfo.play.sample_rate;
+		tmpaudioinfo->min_channels = tmpinfo.play.channels;
+		tmpaudioinfo->max_channels = tmpinfo.play.channels;
+		tmpaudioinfo->binding = -1;
+		tmpaudioinfo->rate_source = -1;
+		memset(tmpaudioinfo->handle, 0, 16);
+		tmpaudioinfo->next_play_engine = 0;
+		tmpaudioinfo->next_rec_engine = 0;
+		argp = tmpaudioinfo;
+		break;
+	case SNDCTL_DSP_GETPLAYVOL:
+		retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo);
+		if (retval < 0)
+			return retval;
+		*(uint *)argp = tmpinfo.play.gain;
+		break;
+	case SNDCTL_DSP_SETPLAYVOL:
+		retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo);
+		if (retval < 0)
+			return retval;
+		if (*(uint *)argp > 255)
+			tmpinfo.play.gain = 255;
+		else
+			tmpinfo.play.gain = *(uint *)argp;
+		retval = ioctl(fd, AUDIO_SETINFO, &tmpinfo);
+		if (retval < 0)
+			return retval;
+		break;
+	case SNDCTL_DSP_GETRECVOL:
+		retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo);
+		if (retval < 0)
+			return retval;
+		*(uint *)argp = tmpinfo.record.gain;
+		break;
+	case SNDCTL_DSP_SETRECVOL:
+		retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo);
+		if (retval < 0)
+			return retval;
+		if (*(uint *)argp > 255)
+			tmpinfo.record.gain = 255;
+		else
+			tmpinfo.record.gain = *(uint *)argp;
+		retval = ioctl(fd, AUDIO_SETINFO, &tmpinfo);
+		if (retval < 0)
+			return retval;
+		break;
+	case SNDCTL_DSP_SKIP:
+	case SNDCTL_DSP_SILENCE:
+		return EINVAL;
 	case SNDCTL_DSP_SETDUPLEX:
 		idat = 1;
 		retval = ioctl(fd, AUDIO_SETFD, &idat);

Index: src/lib/libossaudio/shlib_version
diff -u src/lib/libossaudio/shlib_version:1.6 src/lib/libossaudio/shlib_version:1.6.24.1
--- src/lib/libossaudio/shlib_version:1.6	Sun Jan 11 03:07:49 2009
+++ src/lib/libossaudio/shlib_version	Sun Aug 10 06:52:06 2014
@@ -1,5 +1,5 @@
-#	$NetBSD: shlib_version,v 1.6 2009/01/11 03:07:49 christos Exp $
+#	$NetBSD: shlib_version,v 1.6.24.1 2014/08/10 06:52:06 tls Exp $
 #	Remember to update distrib/sets/lists/base/shl.* when changing
 #
 major=1
-minor=0
+minor=1

Index: src/lib/libossaudio/soundcard.h
diff -u src/lib/libossaudio/soundcard.h:1.22 src/lib/libossaudio/soundcard.h:1.22.8.1
--- src/lib/libossaudio/soundcard.h:1.22	Sat May  5 15:57:45 2012
+++ src/lib/libossaudio/soundcard.h	Sun Aug 10 06:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: soundcard.h,v 1.22 2012/05/05 15:57:45 christos Exp $	*/
+/*	$NetBSD: soundcard.h,v 1.22.8.1 2014/08/10 06:52:06 tls Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -39,7 +39,9 @@
 #ifndef _SOUNDCARD_H_
 #define _SOUNDCARD_H_
 
-#define SOUND_VERSION	0x030001
+#ifndef SOUND_VERSION
+#define SOUND_VERSION 0x030001
+#endif
 
 #define	SNDCTL_DSP_RESET		_IO  ('P', 0)
 #define	SNDCTL_DSP_SYNC			_IO  ('P', 1)
@@ -60,6 +62,11 @@
 #define	 AFMT_U16_BE			0x00000100
 #define	 AFMT_MPEG			0x00000200
 #define	 AFMT_AC3			0x00000400
+#define	 AFMT_S24_LE			0x00000800
+#define	 AFMT_S24_BE			0x00001000
+#define	 AFMT_S32_LE			0x00002000
+#define	 AFMT_S32_BE			0x00004000
+#define	 AFMT_S32_NE			0x00008000
 #define SNDCTL_DSP_SAMPLESIZE		SNDCTL_DSP_SETFMT
 #define	SOUND_PCM_READ_BITS		_IOR ('P', 5, int)
 #define	SNDCTL_DSP_CHANNELS		_IOWR('P', 6, int)
@@ -82,6 +89,10 @@
 # define DSP_CAP_COPROC			0x00000800
 # define DSP_CAP_TRIGGER		0x00001000
 # define DSP_CAP_MMAP			0x00002000
+# define PCM_CAP_INPUT			0x00004000
+# define PCM_CAP_OUTPUT			0x00008000
+# define PCM_CAP_MODEM			0x00010000
+# define PCM_CAP_HIDDEN			0x00020000
 #define SNDCTL_DSP_GETTRIGGER		_IOR ('P', 16, int)
 #define SNDCTL_DSP_SETTRIGGER		_IOW ('P', 16, int)
 # define PCM_ENABLE_INPUT		0x00000001
@@ -291,6 +302,77 @@ typedef struct buffmem_desc {
 	int size;
 } buffmem_desc;
 
+/* Some OSSv4 calls. */
+
+#define OSS_DEVNODE_SIZE		32
+#define OSS_LABEL_SIZE			16
+#define OSS_LONGNAME_SIZE		64
+#define OSS_MAX_AUDIO_DEVS		64
+
+#define SNDCTL_SYSINFO			_IOR ('P',24, struct oss_sysinfo)
+#define SNDCTL_AUDIOINFO		_IOWR ('P',25, struct oss_audioinfo)
+#define SNDCTL_ENGINEINFO		_IOWR ('P',26, struct oss_audioinfo)
+#define SNDCTL_DSP_GETPLAYVOL		_IOR ('P',27, uint)
+#define SNDCTL_DSP_SETPLAYVOL		_IOW ('P',28, uint)
+#define SNDCTL_DSP_GETRECVOL		_IOR ('P',29, uint)
+#define SNDCTL_DSP_SETRECVOL		_IOW ('P',30, uint)
+#define SNDCTL_DSP_SKIP			_IO ('P',31)
+#define SNDCTL_DSP_SILENCE		_IO ('P',32)
+
+typedef struct oss_sysinfo {
+	char product[32];
+	char version[32];
+	int versionnum;
+	char options[128];		/* Future use */
+	int numaudios;
+	int openedaudio[8];		/* Obsolete */
+	int numsynths;			/* Obsolete */
+	int nummidis;
+	int numtimers;
+	int nummixers;
+	int openedmidi[8];
+	int numcards;
+	int numaudioengines;
+	char license[16];
+	char revision_info[256];	/* Internal Use */
+	int filler[172];		/* For expansion */
+} oss_sysinfo;
+
+typedef struct oss_audioinfo {
+	int dev;		/* Set by caller */
+	char name[OSS_LONGNAME_SIZE];
+	int busy;
+	int pid;
+	int caps;
+	int iformats;
+	int oformats;
+	int magic;		/* Unused */
+	char cmd[OSS_LONGNAME_SIZE];
+	int card_number;
+	int port_number;
+	int mixer_dev;
+	int legacy_device;	/* Obsolete */
+	int enabled;
+	int flags;		/* Reserved */
+	int min_rate;
+	int max_rate;
+	int min_channels;
+	int max_channels;
+	int binding;		/* Reserved */
+	int rate_source;
+	char handle[32];
+#define OSS_MAX_SAMPLE_RATES	20
+	int nrates;
+	int rates[OSS_MAX_SAMPLE_RATES];
+	char song_name[OSS_LONGNAME_SIZE];
+	char label[OSS_LABEL_SIZE];
+	int latency;				/* In usecs -1 = unknown */
+	char devnode[OSS_DEVNODE_SIZE];	
+	int next_play_engine;
+	int next_rec_engine;
+	int filler[184];			/* For expansion */
+} oss_audioinfo;
+
 #define ioctl _oss_ioctl
 /*
  * If we already included <sys/ioctl.h>, then we define our own prototype,

Reply via email to