Home | History | Annotate | Line # | Download | only in isa
mcclock_isa.c revision 1.1
      1 /*	XXX	*/
      2 
      3 #include <sys/param.h>
      4 #include <sys/kernel.h>
      5 #include <sys/systm.h>
      6 #include <sys/device.h>
      7 
      8 #include <machine/bus.h>
      9 
     10 #include <alpha/alpha/clockvar.h>
     11 #include <alpha/alpha/mcclockvar.h>
     12 #include <dev/ic/mc146818reg.h>
     13 #include <dev/isa/isavar.h>
     14 
     15 struct mcclock_isa_softc {
     16 	struct mcclock_softc	sc_mcclock;
     17 
     18 	bus_chipset_tag_t	sc_bc;
     19 	bus_io_handle_t		sc_ioh;
     20 };
     21 
     22 int	mcclock_isa_match __P((struct device *, void *, void *));
     23 void	mcclock_isa_attach __P((struct device *, struct device *, void *));
     24 
     25 struct cfattach mcclock_isa_ca = {
     26 	sizeof (struct mcclock_isa_softc), mcclock_isa_match,
     27 	    mcclock_isa_attach,
     28 };
     29 
     30 void	mcclock_isa_write __P((struct mcclock_softc *, u_int, u_int));
     31 u_int	mcclock_isa_read __P((struct mcclock_softc *, u_int));
     32 
     33 const struct mcclock_busfns mcclock_isa_busfns = {
     34 	mcclock_isa_write, mcclock_isa_read,
     35 };
     36 
     37 int
     38 mcclock_isa_match(parent, match, aux)
     39 	struct device *parent;
     40 	void *match, *aux;
     41 {
     42 	struct isa_attach_args *ia = aux;
     43 
     44 	if (ia->ia_iobase != 0x70 && ia->ia_iobase != -1)
     45 		return (0);
     46 
     47 	ia->ia_iobase = 0x70;		/* XXX */
     48 	ia->ia_iosize = 2;		/* XXX */
     49 	ia->ia_msize = 0;
     50 
     51 	return (1);
     52 }
     53 
     54 void
     55 mcclock_isa_attach(parent, self, aux)
     56 	struct device *parent, *self;
     57 	void *aux;
     58 {
     59 	struct isa_attach_args *ia = aux;
     60 	struct mcclock_isa_softc *sc = (struct mcclock_isa_softc *)self;
     61 
     62 	sc->sc_bc = ia->ia_bc;
     63 	if (bus_io_map(sc->sc_bc, ia->ia_iobase, ia->ia_iosize, &sc->sc_ioh))
     64 		panic("mcclock_isa_attach: couldn't map clock I/O space");
     65 
     66 	mcclock_attach(&sc->sc_mcclock, &mcclock_isa_busfns);
     67 }
     68 
     69 void
     70 mcclock_isa_write(mcsc, reg, datum)
     71 	struct mcclock_softc *mcsc;
     72 	u_int reg, datum;
     73 {
     74 	struct mcclock_isa_softc *sc = (struct mcclock_isa_softc *)mcsc;
     75 	bus_chipset_tag_t bc = sc->sc_bc;
     76 	bus_io_handle_t ioh = sc->sc_ioh;
     77 
     78 	bus_io_write_1(bc, ioh, 0, reg);
     79 	bus_io_write_1(bc, ioh, 1, datum);
     80 }
     81 
     82 u_int
     83 mcclock_isa_read(mcsc, reg)
     84 	struct mcclock_softc *mcsc;
     85 	u_int reg;
     86 {
     87 	struct mcclock_isa_softc *sc = (struct mcclock_isa_softc *)mcsc;
     88 	bus_chipset_tag_t bc = sc->sc_bc;
     89 	bus_io_handle_t ioh = sc->sc_ioh;
     90 
     91 	bus_io_write_1(bc, ioh, 0, reg);
     92 	return bus_io_read_1(bc, ioh, 1);
     93 }
     94