PERFORCE change 96574 for review
Marcel Moolenaar
marcel at FreeBSD.org
Tue May 2 22:41:10 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=96574
Change 96574 by marcel at marcel_nfs on 2006/05/02 22:41:09
o Add a PCI bus frontend for scc(4) and recognize the
Digi Sync/570i 2-port and 4-port cards.
o Since the Digi cards are based on the Hitachi HD64570,
add a new class and hardware backend. The attach
fails unconditionally now. We already have a header
for the hd64570 under dev/ic. See ar(4).
o Renumber the SCC class to be 1-based. This avoids
that an uninitialized variable is misinterpreted.
Resort the list while I'm renumbering.
Notes:
o The HD64570 needs 2 I/O resources. This will cause
changes to uart(4) as well. It is assumed that a
single I/O resource is enough.
o The ar(4) driver is a good source of information.
While it only compiles on i386 and doesn't use
newbus(9), it should work isufficiently.
o Also, the ar(4) driver hooks up with netgraph,
which is what hdlc(4) is going to do as well. This
too is very convenient.
Affected files ...
.. //depot/projects/uart/conf/files#66 edit
.. //depot/projects/uart/dev/scc/scc_bfe.h#19 edit
.. //depot/projects/uart/dev/scc/scc_bfe_ebus.c#9 edit
.. //depot/projects/uart/dev/scc/scc_bfe_macio.c#2 edit
.. //depot/projects/uart/dev/scc/scc_bfe_pci.c#1 add
.. //depot/projects/uart/dev/scc/scc_bfe_sbus.c#9 edit
.. //depot/projects/uart/dev/scc/scc_bus.h#11 edit
.. //depot/projects/uart/dev/scc/scc_core.c#23 edit
.. //depot/projects/uart/dev/scc/scc_dev_hd64570.c#1 add
Differences ...
==== //depot/projects/uart/conf/files#66 (text+ko) ====
@@ -838,8 +838,10 @@
dev/sbsh/if_sbsh.c optional sbsh
dev/scc/scc_if.m optional scc
dev/scc/scc_bfe_ebus.c optional scc ebus
+dev/scc/scc_bfe_pci.c optional scc pci
dev/scc/scc_bfe_sbus.c optional scc fhc | scc sbus
dev/scc/scc_core.c optional scc
+dev/scc/scc_dev_hd64570.c optional scc
dev/scc/scc_dev_sab82532.c optional scc
dev/scc/scc_dev_z8530.c optional scc
dev/scd/scd.c optional scd isa
==== //depot/projects/uart/dev/scc/scc_bfe.h#19 (text) ====
@@ -109,6 +109,7 @@
int cl_range;
};
+extern struct scc_class scc_hd64570_class;
extern struct scc_class scc_sab82532_class;
extern struct scc_class scc_z8530_class;
@@ -138,7 +139,7 @@
int scc_bfe_attach(device_t dev);
int scc_bfe_detach(device_t dev);
-int scc_bfe_probe(device_t dev, u_int, u_int);
+int scc_bfe_probe(device_t dev, u_int regshft, u_int rclk, u_int rid);
struct resource *scc_bus_alloc_resource(device_t, device_t, int, int *,
u_long, u_long, u_long, u_int);
==== //depot/projects/uart/dev/scc/scc_bfe_ebus.c#9 (text) ====
@@ -59,7 +59,7 @@
if (!strcmp(nm, "se") || !strcmp(cmpt, "sab82532")) {
device_set_desc(dev, "Siemens SAB 82532 dual channel SCC");
sc->sc_class = &scc_sab82532_class;
- return (scc_bfe_probe(dev, EBUS_REGSHFT, EBUS_RCLK));
+ return (scc_bfe_probe(dev, EBUS_REGSHFT, EBUS_RCLK, 0));
}
return (ENXIO);
}
==== //depot/projects/uart/dev/scc/scc_bfe_macio.c#2 (text) ====
@@ -56,7 +56,7 @@
if (!strcmp(nm, "escc")) {
device_set_desc(dev, "Zilog Z8530 dual channel SCC");
sc->sc_class = &scc_z8530_class;
- return (scc_bfe_probe(dev, MACIO_REGSHFT, MACIO_RCLK));
+ return (scc_bfe_probe(dev, MACIO_REGSHFT, MACIO_RCLK, 0));
}
return (ENXIO);
}
==== //depot/projects/uart/dev/scc/scc_bfe_sbus.c#9 (text) ====
@@ -56,7 +56,7 @@
if (!strcmp(nm, "zs")) {
device_set_desc(dev, "Zilog Z8530 dual channel SCC");
sc->sc_class = &scc_z8530_class;
- return (scc_bfe_probe(dev, SBUS_REGSHFT, SBUS_RCLK));
+ return (scc_bfe_probe(dev, SBUS_REGSHFT, SBUS_RCLK, 0));
}
return (ENXIO);
}
==== //depot/projects/uart/dev/scc/scc_bus.h#11 (text) ====
@@ -40,8 +40,9 @@
#define SCC_IVAR_HWMTX 5
/* Hardware class -- the SCC type. */
-#define SCC_CLASS_SAB82532 0
-#define SCC_CLASS_Z8530 1
+#define SCC_CLASS_HD64570 1
+#define SCC_CLASS_SAB82532 2
+#define SCC_CLASS_Z8530 3
/* The possible modes supported by the SCC. */
#define SCC_MODE_ASYNC 0x01
==== //depot/projects/uart/dev/scc/scc_core.c#23 (text) ====
@@ -330,7 +330,7 @@
}
int
-scc_bfe_probe(device_t dev, u_int regshft, u_int rclk)
+scc_bfe_probe(device_t dev, u_int regshft, u_int rclk, u_int rid)
{
struct scc_softc *sc;
struct scc_class *cl;
@@ -359,12 +359,12 @@
* I/O space. Any SCC that needs multiple windows will consequently
* not be supported by this driver as-is.
*/
- sc->sc_rrid = 0;
+ sc->sc_rrid = rid;
sc->sc_rtype = SYS_RES_MEMORY;
sc->sc_rres = bus_alloc_resource(dev, sc->sc_rtype, &sc->sc_rrid,
0, ~0, cl->cl_channels * size, RF_ACTIVE);
if (sc->sc_rres == NULL) {
- sc->sc_rrid = 0;
+ sc->sc_rrid = rid;
sc->sc_rtype = SYS_RES_IOPORT;
sc->sc_rres = bus_alloc_resource(dev, sc->sc_rtype,
&sc->sc_rrid, 0, ~0, cl->cl_channels * size, RF_ACTIVE);
More information about the p4-projects
mailing list