1 /* $NetBSD: latches.c,v 1.4 2002/10/02 03:25:47 thorpej Exp $ */
4 * Copyright (c) 2001 Ben Harris
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include <sys/param.h>
32 __KERNEL_RCSID(0, "$NetBSD: latches.c,v 1.4 2002/10/02 03:25:47 thorpej Exp $");
34 #include <sys/device.h>
35 #include <sys/systm.h>
37 #include <machine/bus.h>
39 #include <arch/acorn26/iobus/iocvar.h>
40 #include <arch/acorn26/ioc/latchreg.h>
41 #include <arch/acorn26/ioc/latchvar.h>
42 #include <arch/acorn26/ioc/ioebvar.h>
46 struct latches_softc
{
48 bus_space_tag_t sc_iot
;
49 bus_space_handle_t sc_ioh
;
54 static int latches_match(device_t
, cfdata_t
, void *);
55 static void latches_attach(device_t
, device_t
, void *);
57 CFATTACH_DECL_NEW(latches
, sizeof(struct latches_softc
),
58 latches_match
, latches_attach
, NULL
, NULL
);
63 latches_match(device_t parent
, cfdata_t cf
, void *aux
)
67 * Latches are write-only, so we can't probe for them.
68 * Happily, the set of machines they exist on is precisely the
69 * set that doesn't have IOEBs, so...
79 latches_attach(device_t parent
, device_t self
, void *aux
)
81 struct latches_softc
*sc
= device_private(self
);
82 struct ioc_attach_args
*ioc
= aux
;
84 bus_space_handle_t ioh
;
87 if (the_latches
== NULL
)
89 iot
= sc
->sc_iot
= ioc
->ioc_fast_t
;
90 ioh
= sc
->sc_ioh
= ioc
->ioc_fast_h
;
93 LATCHA_NSEL0
| LATCHA_NSEL1
| LATCHA_NSEL2
| LATCHA_NSEL3
|
94 LATCHA_NSIDE1
| LATCHA_NMOTORON
| LATCHA_NINUSE
;
95 sc
->sc_latchb
= LATCHB_NFDCR
| LATCHB_NPSTB
;
96 bus_space_write_1(sc
->sc_iot
, sc
->sc_ioh
, LATCH_A
, sc
->sc_latcha
);
97 bus_space_write_1(sc
->sc_iot
, sc
->sc_ioh
, LATCH_B
, sc
->sc_latchb
);
102 latcha_update(u_int8_t mask
, u_int8_t value
)
104 struct latches_softc
*sc
= (void *)the_latches
;
106 sc
->sc_latcha
= (sc
->sc_latcha
& ~mask
) | value
;
107 bus_space_write_1(sc
->sc_iot
, sc
->sc_ioh
, LATCH_A
, sc
->sc_latcha
);
111 latchb_update(u_int8_t mask
, u_int8_t value
)
113 struct latches_softc
*sc
= (void *)the_latches
;
115 sc
->sc_latchb
= (sc
->sc_latchb
& ~mask
) | value
;
116 bus_space_write_1(sc
->sc_iot
, sc
->sc_ioh
, LATCH_B
, sc
->sc_latcha
);