Module Name:    src
Committed By:   skrll
Date:           Sat Mar  6 16:57:00 UTC 2010

Modified Files:
        src/sys/arch/hp700/dev: dino.c

Log Message:
Improved version detection/reporting. From OpenBSD.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/hp700/dev/dino.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/arch/hp700/dev/dino.c
diff -u src/sys/arch/hp700/dev/dino.c:1.24 src/sys/arch/hp700/dev/dino.c:1.25
--- src/sys/arch/hp700/dev/dino.c:1.24	Fri Mar  5 17:47:09 2010
+++ src/sys/arch/hp700/dev/dino.c	Sat Mar  6 16:57:00 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: dino.c,v 1.24 2010/03/05 17:47:09 skrll Exp $ */
+/*	$NetBSD: dino.c,v 1.25 2010/03/06 16:57:00 skrll Exp $ */
 
 /*	$OpenBSD: dino.c,v 1.5 2004/02/13 20:39:31 mickey Exp $	*/
 
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dino.c,v 1.24 2010/03/05 17:47:09 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dino.c,v 1.25 2010/03/06 16:57:00 skrll Exp $");
 
 /* #include "cardbus.h" */
 
@@ -1617,7 +1617,7 @@
 	struct confargs *ca = (struct confargs *)aux, nca;
 	struct pcibus_attach_args pba;
 	volatile struct dino_regs *r;
-	const char *p;
+	const char *p = NULL;
 	u_int data;
 	int s, ver;
 
@@ -1678,34 +1678,36 @@
 
 	/* TODO establish the bus error interrupt */
 
-	r->iodc = 0;
-	data = r->iodc;
-	ver = (ca->ca_type.iodc_model << 4) |
-	    (ca->ca_type.iodc_revision >> 4);
-	switch (ver) {
-	case 0x05d:	p = "Dino";	/* j2240 */
-	case 0x680:	p = "Dino";
-		switch (data >> 16) {
-		case 0x6800:	ver = 0x20;	break;
-		case 0x6801:	ver = 0x21;	break;
-		case 0x6802:	ver = 0x30;	break;
-		case 0x6803:	ver = 0x31;	break;
-		default:	ver = 0x40;	break;
+	ver = ca->ca_type.iodc_revision;
+	switch ((ca->ca_type.iodc_model << 4) |
+	    (ca->ca_type.iodc_revision >> 4)) {
+	case 0x05d:
+		p = "Dino (card)";	/* j2240 */
+		/* FALLTHROUGH */
+	case 0x680:
+		if (!p)
+			p = "Dino";
+		switch (ver & 0xf) {
+		case 0:	ver = 0x20;	break;
+		case 1:	ver = 0x21;	break;
+		case 2:	ver = 0x30;	break;
+		case 3:	ver = 0x31;	break;
 		}
 		break;
 
-	case 0x682:	p = "Cujo";
-		switch (data >> 16) {
-		case 0x6820:	ver = 0x10;	break;
-		case 0x6821:	ver = 0x20;	break;
-		default:	ver = 0x30;	break;
+	case 0x682:
+		p = "Cujo";
+		switch (ver & 0xf) {
+		case 0:	ver = 0x10;	break;
+		case 1:	ver = 0x20;	break;
 		}
 		break;
 
-	default:	p = "Mojo";
-		ver = (data >> 16) & 0xff;
+	default:
+		p = "Mojo";
 		break;
 	}
+
 	sc->sc_ver = ver;
 	aprint_normal(": %s V%d.%d\n", p, ver >> 4, ver & 0xf);
 

Reply via email to