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