Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 01 Dec 1999 10:18:26 +0900
From:      Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>
To:        current@freebsd.org
Cc:        Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>
Subject:   Please check missing logical IDs for SB
Message-ID:  <14404.30562.4717.91839F@rina.r.dl.itc.u-tokyo.ac.jp>

next in thread | raw e-mail | index | archive | help
--Multipart_Wed_Dec__1_10:18:25_1999-1
Content-Type: text/plain; charset=US-ASCII

If you have an SB card not probed since the import of the bridge
dirvers, could you please apply the following patch, add the logical
ID of your card into sbc_ids[] and see how it works?
(I have asked peter to review the PnP part of the patch)



--Multipart_Wed_Dec__1_10:18:25_1999-1
Content-Type: text/plain; type=patch; charset=US-ASCII
Content-Disposition: attachment; filename="sbc.c.diff"
Content-Transfer-Encoding: 7bit

Index: sbc.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/sound/isa/sbc.c,v
retrieving revision 1.2
diff -u -r1.2 sbc.c
--- sbc.c	1999/11/27 06:33:27	1.2
+++ sbc.c	1999/11/30 06:28:19
@@ -82,125 +82,42 @@
 
 static devclass_t sbc_devclass;
 
-#if NISA > 0 && NPNP > 0
-static int
-sbc_probe(device_t dev)
-{
-	u_int32_t vend_id, logical_id, vend_id2;
-	char *s;
-	struct sndcard_func *func;
 
-	vend_id = isa_get_vendorid(dev);
-	vend_id2 = vend_id & 0xff00ffff;
-	logical_id = isa_get_logicalid(dev);
-	s = NULL;
+#if NISA > 0 && NPNP > 0
 
-	switch (logical_id) {
+static struct isa_pnp_id sbc_ids[] = {
 #if notdef
-	case 0x0000630e: /* Crystal Semiconductor */
-		if (vend_id2 ==0x3600630e) /* CS4236 */
-			s = "CS4236";
-		else if (vend_id2 ==0x3200630e) /* CS4232 */
-			s = "CS4232";
-		else if (vend_id2 ==0x3500630e) /* CS4236B */
-			s = "CS4236B";
-		break;
-#endif /* notdef */
-	case 0x01008c0e: /* Creative ViBRA16C */
-		if (vend_id2 == 0x70008c0e)
-			s = "Creative ViBRA16C PnP";
-		break;
-	case 0x43008c0e: /* Creative ViBRA16X */
-		if (vend_id2 == 0xf0008c0e)
-			s = "Creative ViBRA16C PnP";
-		break;
-	case 0x31008c0e: /* Creative SB */
-		if (vend_id2 == 0x26008c0e)
-			s = "Creative SB16 PnP";
-		else if (vend_id2 == 0x42008c0e)
-			s = "Creative SB32 (CTL0042)";
-		else if (vend_id2 == 0x44008c0e)
-			s = "Creative SB32 (CTL0044)";
-		else if (vend_id2 == 0x48008c0e)
-			s = "Creative SB32 (CTL0048)";
-		else if (vend_id2 == 0x49008c0e)
-			s = "Creative SB32 (CTL0049)";
-		else if (vend_id2 == 0xf1008c0e)
-			s = "Creative SB32 (CTL00f1)";
-		break;
-	case 0x42008c0e: /* Creative SB AWE64 (CTL00c1) */
-		if (vend_id2 == 0xc1008c0e)
-			s = "Creative SB AWE64 (CTL00c1)";
-		break;
-	case 0x45008c0e: /* Creative SB AWE64 (CTL0045) */
-		if (vend_id2 == 0xe4008c0e)
-			s = "Creative SB AWE64 (CTL0045)";
-		break;
+	{0x0000630e, "CS423x"},
+#endif
+	{0x01008c0e, "Creative ViBRA16C PnP"},
+	{0x43008c0e, "Creative ViBRA16X PnP"},
+	{0x31008c0e, "Creative SB16 PnP/SB32"},
+	{0x42008c0e, "Creative SB AWE64"}, /* CTL00c1 */
+	{0x45008c0e, "Creative SB AWE64"}, /* CTL0045 */
 #if notdef
-	case 0x01200001: /* Avance Logic */
-		if (vend_id2 == 0x20009305)
-			s = "Avance Logic ALS120";
-		break;
-	case 0x01100001: /* Avance Asound */
-		if (vend_id2 == 0x10009305)
-			s = "Avance Asound 110";
-		break;
-	case 0x68187316: /* ESS1868 */
-		if (vend_id2 == 0x68007316)
-			s = "ESS ES1868 Plug and Play AudioDrive";
-		break;
-	case 0x79187316: /* ESS1879 */
-		if (vend_id2 == 0x79007316)
-			s = "ESS ES1879 Plug and Play AudioDrive";
-		break;
-	case 0x2100a865: /* Yamaha */
-		if (vend_id2 == 0x2000a865)
-			s = "Yamaha OPL3-SA2/SAX Sound Board";
-		break;
-	case 0x80719304: /* Terratec */
-		if (vend_id2 == 0x1114b250)
-			s = "Terratec Soundsystem Base 1";
-		break;
-	case 0x0300561e: /* Gravis */
-		if (vend_id2 == 0x0100561e)
-			s = "Gravis UltraSound Plug & Play";
-		break;
-#endif /* notdef */
-	}
-
-	if (s != NULL) {
-		device_set_desc(dev, s);
-
-		/* PCM Audio */
-		func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT);
-		if (func == NULL)
-			return (ENOMEM);
-		bzero(func, sizeof(*func));
-		func->func = SCF_PCM;
-		device_add_child(dev, "pcm", -1, func);
+	{0x01200001, "Avance Logic ALS120"},
+	{0x01100001, "Avance Asound 110"},
+	{0x68187316, "ESS ES1868 Plug and Play AudioDrive"}, /* ESS1868 */
+	{0x79187316, "ESS ES1879 Plug and Play AudioDrive"}, /* ESS1879 */
+	{0x2100a865, "Yamaha OPL3-SA2/SAX Sound Board"},
+	{0x80719304, "Terratec Soundsystem Base 1"},
+#endif
+	{0}
+};
+	
 
-#if notyet
-		/* Midi Interface */
-		func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT);
-		if (func == NULL)
-			return (ENOMEM);
-		bzero(func, sizeof(*func));
-		func->func = SCF_MIDI;
-		device_add_child(dev, "midi", -1, func);
-
-		/* OPL FM Synthesizer */
-		func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT);
-		if (func == NULL)
-			return (ENOMEM);
-		bzero(func, sizeof(*func));
-		func->func = SCF_SYNTH;
-		device_add_child(dev, "midi", -1, func);
-#endif /* notyet */
-
-		return (0);
-	}
+};
+static int
+sbc_probe(device_t dev)
+{
+	int error;
 
-	return (ENXIO);
+	/* Check pnp ids */
+	error = ISA_PNP_PROBE(device_get_parent(dev), dev, sbc_ids);
+	if (error)
+		return error;
+	else
+		return -100;
 }
 
 static int
@@ -208,6 +125,7 @@
 {
 	sc_p scp;
 	int unit;
+	struct sndcard_func *func;
 
 	scp = device_get_softc(dev);
 	unit = device_get_unit(dev);
@@ -219,6 +137,32 @@
 		release_resource(scp);
 		return (ENXIO);
 	}
+
+	/* PCM Audio */
+	func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT);
+	if (func == NULL)
+		return (ENOMEM);
+	bzero(func, sizeof(*func));
+	func->func = SCF_PCM;
+	device_add_child(dev, "pcm", -1, func);
+
+#if notyet
+	/* Midi Interface */
+	func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT);
+	if (func == NULL)
+		return (ENOMEM);
+	bzero(func, sizeof(*func));
+	func->func = SCF_MIDI;
+	device_add_child(dev, "midi", -1, func);
+
+	/* OPL FM Synthesizer */
+	func = malloc(sizeof(struct sndcard_func), M_DEVBUF, M_NOWAIT);
+	if (func == NULL)
+		return (ENOMEM);
+	bzero(func, sizeof(*func));
+	func->func = SCF_SYNTH;
+	device_add_child(dev, "midi", -1, func);
+#endif /* notyet */
 
 	bus_generic_attach(dev);
 

--Multipart_Wed_Dec__1_10:18:25_1999-1--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14404.30562.4717.91839F>