patch-2.4.20 linux-2.4.20/drivers/dio/dio.c
Next file: linux-2.4.20/drivers/fc4/Config.in
Previous file: linux-2.4.20/drivers/dio/Makefile
Back to the patch index
Back to the overall index
- Lines: 76
- Date:
Thu Nov 28 15:53:12 2002
- Orig file:
linux-2.4.19/drivers/dio/dio.c
- Orig date:
Fri Feb 9 11:30:23 2001
diff -urN linux-2.4.19/drivers/dio/dio.c linux-2.4.20/drivers/dio/dio.c
@@ -31,7 +31,7 @@
#include <linux/slab.h> /* kmalloc() */
#include <linux/init.h>
#include <asm/hwtest.h> /* hwreg_present() */
-#include <asm/io.h> /* readb() */
+#include <asm/io.h>
/* not a real config option yet! */
#define CONFIG_DIO_CONSTANTS
@@ -115,8 +115,14 @@
static int __init dio_find_slow(int deviceid)
{
/* Called to find a DIO device before the full bus scan has run. Basically
- only used by the console driver. */
+ * only used by the console driver.
+ * We don't do the primary+secondary ID encoding thing here. Maybe we should.
+ * (that would break the topcat detection, though. I need to think about
+ * the whole primary/secondary ID thing.)
+ */
int scode;
+ u_char prid;
+
for (scode = 0; scode < DIO_SCMAX; scode++)
{
void *va;
@@ -128,12 +134,23 @@
if (!va || !hwreg_present(va + DIO_IDOFF))
continue; /* no board present at that select code */
- if (DIO_ID(va) == deviceid)
+ /* We aren't very likely to want to use this to get at the IHPIB,
+ * but maybe it's returning the same ID as the card we do want...
+ */
+ if (!DIO_ISIHPIB(scode))
+ prid = DIO_ID(va);
+ else
+ prid = DIO_ID_IHPIB;
+
+ if (prid == deviceid)
return scode;
}
return 0;
}
+/* Aargh: we use 0 for an error return code, but select code 0 exists!
+ * FIXME (trivial, use -1, but requires changes to all the drivers :-< )
+ */
int dio_find(int deviceid)
{
if (blist)
@@ -193,10 +210,10 @@
b->scode = scode;
b->ipl = DIO_IPL(va);
b->name = dio_getname(b->id);
- printk("select code %3d: ID %02X", scode, prid);
+ printk("select code %3d: ipl %d: ID %02X", scode, b->ipl, prid);
if (DIO_NEEDSSECID(b->id))
printk(":%02X", secid);
- printk(" %s\n", b->name);
+ printk(": %s\n", b->name);
b->next = NULL;
@@ -222,9 +239,9 @@
return 0;
else if (DIO_SCINHOLE(scode))
return 0;
- else if (scode == DIO_IHPIBSCODE) /* this should really be #ifdef CONFIG_IHPIB */
- return (void*)DIO_IHPIBADDR; /* or something similar... */
-
+ else if (DIO_ISIHPIB(scode))
+ return (void*)DIO_IHPIBADDR;
+
return (void*)(DIO_VIRADDRBASE + DIO_BASE + scode * 0x10000);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)