Module Name:    src
Committed By:   isaki
Date:           Sun Sep 13 04:14:49 UTC 2020

Modified Files:
        src/sys/dev/audio: audio_if.h audiodef.h
        src/usr.bin/fstat: misc.c

Log Message:
Support audio descriptor for fstat(1).
sys/dev/audio/*.h: export only what we need for fstat.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/audio/audio_if.h
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/audio/audiodef.h
cvs rdiff -u -r1.23 -r1.24 src/usr.bin/fstat/misc.c

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

Modified files:

Index: src/sys/dev/audio/audio_if.h
diff -u src/sys/dev/audio/audio_if.h:1.2 src/sys/dev/audio/audio_if.h:1.3
--- src/sys/dev/audio/audio_if.h:1.2	Wed May  8 13:40:17 2019
+++ src/sys/dev/audio/audio_if.h	Sun Sep 13 04:14:48 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: audio_if.h,v 1.2 2019/05/08 13:40:17 isaki Exp $	*/
+/*	$NetBSD: audio_if.h,v 1.3 2020/09/13 04:14:48 isaki Exp $	*/
 
 /*
  * Copyright (c) 1994 Havard Eidnes.
@@ -57,6 +57,8 @@
 
 struct audio_softc;
 
+#if defined(_KERNEL)
+
 /**
  * audio stream format
  */
@@ -154,6 +156,8 @@ extern int audio_indexof_format(const st
 	const audio_params_t *);
 extern const char *audio_encoding_name(int);
 
+#endif /* _KERNEL */
+
 /* Device identity flags */
 #define SOUND_DEVICE		0
 #define AUDIO_DEVICE		0x80

Index: src/sys/dev/audio/audiodef.h
diff -u src/sys/dev/audio/audiodef.h:1.14 src/sys/dev/audio/audiodef.h:1.15
--- src/sys/dev/audio/audiodef.h:1.14	Wed Apr 29 03:58:27 2020
+++ src/sys/dev/audio/audiodef.h	Sun Sep 13 04:14:48 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: audiodef.h,v 1.14 2020/04/29 03:58:27 isaki Exp $	*/
+/*	$NetBSD: audiodef.h,v 1.15 2020/09/13 04:14:48 isaki Exp $	*/
 
 /*
  * Copyright (C) 2017 Tetsuya Isaki. All rights reserved.
@@ -78,6 +78,8 @@
 #define AUDIO_SCALEDOWN(value, bits)	((value) / (1 << (bits)))
 #endif
 
+#if defined(_KERNEL)
+
 /* conversion stage */
 typedef struct {
 	audio_ring_t srcbuf;
@@ -92,7 +94,7 @@ typedef enum {
 	AUDIO_STATE_DRAINING,	/* now draining */
 } audio_state_t;
 
-typedef struct audio_track {
+struct audio_track {
 	/*
 	 * AUMODE_PLAY for playback track, or
 	 * AUMODE_RECORD for recoding track.
@@ -167,7 +169,10 @@ typedef struct audio_track {
 	volatile uint	lock;
 
 	int		id;		/* track id for debug */
-} audio_track_t;
+};
+#endif /* _KERNEL */
+
+typedef struct audio_track audio_track_t;
 
 struct audio_file {
 	struct audio_softc *sc;
@@ -197,6 +202,8 @@ struct audio_file {
 	SLIST_ENTRY(audio_file) entry;
 };
 
+#if defined(_KERNEL)
+
 struct audio_trackmixer {
 	struct audio_softc *sc;
 
@@ -439,4 +446,6 @@ auring_get_contig_free(const audio_ring_
 	}
 }
 
+#endif /* _KERNEL */
+
 #endif /* !_SYS_DEV_AUDIO_AUDIODEF_H_ */

Index: src/usr.bin/fstat/misc.c
diff -u src/usr.bin/fstat/misc.c:1.23 src/usr.bin/fstat/misc.c:1.24
--- src/usr.bin/fstat/misc.c:1.23	Sat May  2 18:42:30 2020
+++ src/usr.bin/fstat/misc.c	Sun Sep 13 04:14:48 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: misc.c,v 1.23 2020/05/02 18:42:30 christos Exp $	*/
+/*	$NetBSD: misc.c,v 1.24 2020/09/13 04:14:48 isaki Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: misc.c,v 1.23 2020/05/02 18:42:30 christos Exp $");
+__RCSID("$NetBSD: misc.c,v 1.24 2020/09/13 04:14:48 isaki Exp $");
 
 #include <stdbool.h>
 #include <sys/param.h>
@@ -60,6 +60,9 @@ __RCSID("$NetBSD: misc.c,v 1.23 2020/05/
 
 #include <net/bpfdesc.h>
 
+#include <dev/audio/audiodef.h>
+#include <dev/audio/audio_if.h>
+
 #include <err.h>
 #include <util.h>
 #include <string.h>
@@ -220,6 +223,46 @@ p_kqueue(struct file *f)
 	return 0;
 }
 
+static int
+p_audio(struct file *f)
+{
+	struct audio_file af;
+	const char *devname;
+	const char *modename;
+
+	if (!KVM_READ(f->f_data, &af, sizeof(af))) {
+		dprintf("can't read audio_file at %p for pid %d",
+		    f->f_data, Pid);
+		return 0;
+	}
+
+	if (ISDEVAUDIO(af.dev)) {
+		devname = "audio";
+	} else if (ISDEVSOUND(af.dev)) {
+		devname = "sound";
+	} else if (ISDEVAUDIOCTL(af.dev)) {
+		devname = "audioctl";
+	} else if (ISDEVMIXER(af.dev)) {
+		devname = "mixer";
+	} else {
+		devname = "???";
+	}
+
+	if (af.ptrack && af.rtrack) {
+		modename = "playback, record";
+	} else if (af.ptrack) {
+		modename = "playback";
+	} else if (af.rtrack) {
+		modename = "record";
+	} else {
+		modename = "-";
+	}
+
+	(void)printf("* audio@%s%d %s", devname, AUDIOUNIT(af.dev), modename);
+	oprint(f, "\n");
+	return 0;
+}
+
 int
 pmisc(struct file *f, const char *name)
 {
@@ -263,8 +306,7 @@ pmisc(struct file *f, const char *name)
 		printf("* crypto %p", f->f_data);
 		break;
 	case NL_AUDIO:
-		printf("* audio %p", f->f_data);
-		break;
+		return p_audio(f);
 	case NL_PAD:
 		printf("* pad %p", f->f_data);
 		break;

Reply via email to