Date: Fri, 5 Nov 2004 03:07:15 GMT From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 64284 for review Message-ID: <200411050307.iA537FZU057187@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=64284 Change 64284 by marcel@marcel_nfs on 2004/11/05 03:07:01 The scc(4) driver provides as many (subordinate) busses as there are channels and as many children on each of the busses as there are serial modes. Attach an ivar for the mode to each child so that drivers that can handle the mode can attach to the child. Affected files ... .. //depot/projects/uart/dev/scc/scc_bus.h#2 edit .. //depot/projects/uart/dev/uart/uart_bus_scc.c#3 edit Differences ... ==== //depot/projects/uart/dev/scc/scc_bus.h#2 (text+ko) ==== @@ -32,9 +32,16 @@ #define SCC_IVAR_CHANNEL 0 #define SCC_IVAR_CLASS 1 #define SCC_IVAR_CLOCK 2 -#define SCC_IVAR_REGSHFT 3 +#define SCC_IVAR_MODE 3 +#define SCC_IVAR_REGSHFT 4 +/* Hardware class -- the SCC type. */ #define SCC_CLASS_SAB82532 0 #define SCC_CLASS_Z8530 1 +/* The possible modes supported by the SCC. */ +#define SCC_MODE_ASYNC 0 +#define SCC_MODE_BISYNC 1 +#define SCC_MODE_HDLC 2 + #endif /* _DEV_SCC_BUS_H_ */ ==== //depot/projects/uart/dev/uart/uart_bus_scc.c#3 (text+ko) ==== @@ -64,12 +64,15 @@ { device_t parent; struct uart_softc *sc; - uintptr_t ch, cl, rs; + uintptr_t ch, cl, md, rs; parent = device_get_parent(dev); sc = device_get_softc(dev); - if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CLASS, &cl)) + if (BUS_READ_IVAR(parent, dev, SCC_IVAR_MODE, &md) || + BUS_READ_IVAR(parent, dev, SCC_IVAR_CLASS, &cl)) + return (ENXIO); + if (md != SCC_MODE_ASYNC) return (ENXIO); switch (cl) { case SCC_CLASS_SAB82532: @@ -81,12 +84,11 @@ default: return (ENXIO); } - if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CHANNEL, &ch)) - ch = 0; - if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CLOCK, &cl)) - cl = 0; - if (BUS_READ_IVAR(parent, dev, SCC_IVAR_REGSHFT, &rs)) - rs = 0; + if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CHANNEL, &ch) || + BUS_READ_IVAR(parent, dev, SCC_IVAR_CLOCK, &cl) || + BUS_READ_IVAR(parent, dev, SCC_IVAR_REGSHFT, &rs)) + return (ENXIO); + return (uart_bus_probe(dev, rs, cl, 0, ch)); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411050307.iA537FZU057187>
