summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorAlexander Yurchenko <grange@cvs.openbsd.org>2009-03-10 09:16:41 +0000
committerAlexander Yurchenko <grange@cvs.openbsd.org>2009-03-10 09:16:41 +0000
commitf421de0b51a79666356659dba0cdbd9274e09cbc (patch)
tree96e0b64b86744d24919ad26c64904e9064c3f691 /sys/dev
parent012614fee65b2aa9e9040d3711c490e83eb29c57 (diff)
Add ips_intrds() function to be able to disable interrupts on hardware.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/ips.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/sys/dev/pci/ips.c b/sys/dev/pci/ips.c
index 02a1e6de844..e7e64d3d154 100644
--- a/sys/dev/pci/ips.c
+++ b/sys/dev/pci/ips.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ips.c,v 1.53 2009/03/10 08:27:08 grange Exp $ */
+/* $OpenBSD: ips.c,v 1.54 2009/03/10 09:16:40 grange Exp $ */
/*
* Copyright (c) 2006, 2007, 2009 Alexander Yurchenko <grange@openbsd.org>
@@ -374,6 +374,7 @@ int ips_flush(struct ips_softc *);
void ips_copperhead_exec(struct ips_softc *, struct ips_ccb *);
void ips_copperhead_init(struct ips_softc *);
void ips_copperhead_intren(struct ips_softc *);
+void ips_copperhead_intrds(struct ips_softc *);
int ips_copperhead_isintr(struct ips_softc *);
int ips_copperhead_reset(struct ips_softc *);
u_int32_t ips_copperhead_status(struct ips_softc *);
@@ -381,6 +382,7 @@ u_int32_t ips_copperhead_status(struct ips_softc *);
void ips_morpheus_exec(struct ips_softc *, struct ips_ccb *);
void ips_morpheus_init(struct ips_softc *);
void ips_morpheus_intren(struct ips_softc *);
+void ips_morpheus_intrds(struct ips_softc *);
int ips_morpheus_isintr(struct ips_softc *);
int ips_morpheus_reset(struct ips_softc *);
u_int32_t ips_morpheus_status(struct ips_softc *);
@@ -435,6 +437,7 @@ static const struct ips_chipset {
void (*ic_exec)(struct ips_softc *, struct ips_ccb *);
void (*ic_init)(struct ips_softc *);
void (*ic_intren)(struct ips_softc *);
+ void (*ic_intrds)(struct ips_softc *);
int (*ic_isintr)(struct ips_softc *);
int (*ic_reset)(struct ips_softc *);
u_int32_t (*ic_status)(struct ips_softc *);
@@ -445,6 +448,7 @@ static const struct ips_chipset {
ips_copperhead_exec,
ips_copperhead_init,
ips_copperhead_intren,
+ ips_copperhead_intrds,
ips_copperhead_isintr,
ips_copperhead_reset,
ips_copperhead_status
@@ -455,6 +459,7 @@ static const struct ips_chipset {
ips_morpheus_exec,
ips_morpheus_init,
ips_morpheus_intren,
+ ips_morpheus_intrds,
ips_morpheus_isintr,
ips_morpheus_reset,
ips_morpheus_status
@@ -464,6 +469,7 @@ static const struct ips_chipset {
#define ips_exec(s, c) (s)->sc_chip->ic_exec((s), (c))
#define ips_init(s) (s)->sc_chip->ic_init((s))
#define ips_intren(s) (s)->sc_chip->ic_intren((s))
+#define ips_intrds(s) (s)->sc_chip->ic_intrds((s))
#define ips_isintr(s) (s)->sc_chip->ic_isintr((s))
#define ips_reset(s) (s)->sc_chip->ic_reset((s))
#define ips_status(s) (s)->sc_chip->ic_status((s))
@@ -1413,6 +1419,12 @@ ips_copperhead_intren(struct ips_softc *sc)
bus_space_write_1(sc->sc_iot, sc->sc_ioh, IPS_REG_HIS, IPS_REG_HIS_EN);
}
+void
+ips_copperhead_intrds(struct ips_softc *sc)
+{
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, IPS_REG_HIS, 0);
+}
+
int
ips_copperhead_isintr(struct ips_softc *sc)
{
@@ -1479,6 +1491,16 @@ ips_morpheus_intren(struct ips_softc *sc)
bus_space_write_4(sc->sc_iot, sc->sc_ioh, IPS_REG_OIM, reg);
}
+void
+ips_morpheus_intrds(struct ips_softc *sc)
+{
+ u_int32_t reg;
+
+ reg = bus_space_read_4(sc->sc_iot, sc->sc_ioh, IPS_REG_OIM);
+ reg |= IPS_REG_OIM_DS;
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh, IPS_REG_OIM, reg);
+}
+
int
ips_morpheus_isintr(struct ips_softc *sc)
{