summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2000-03-29 14:23:16 +0000
committernyan <nyan@FreeBSD.org>2000-03-29 14:23:16 +0000
commit8a243e8cc26afb69dffdccc07b78a5dc550e30dc (patch)
tree6394883a4eb1f3cfca0f8d24e90034c9f7cbcf4b
parent1095698edd7fef47c5cf24927841d1516a5d7c65 (diff)
downloadFreeBSD-src-8a243e8cc26afb69dffdccc07b78a5dc550e30dc.zip
FreeBSD-src-8a243e8cc26afb69dffdccc07b78a5dc550e30dc.tar.gz
Newbusify mse driver.
-rw-r--r--sys/pc98/pc98/isa_compat.h5
-rw-r--r--sys/pc98/pc98/mse.c550
2 files changed, 358 insertions, 197 deletions
diff --git a/sys/pc98/pc98/isa_compat.h b/sys/pc98/pc98/isa_compat.h
index 94c5060..d09357a 100644
--- a/sys/pc98/pc98/isa_compat.h
+++ b/sys/pc98/pc98/isa_compat.h
@@ -29,7 +29,6 @@
#include "vt.h"
#include "adv.h"
#include "wdc.h"
-#include "mse.h"
#include "ar.h"
#include "cs.h"
#include "cx.h"
@@ -89,7 +88,6 @@ struct old_isa_driver {
extern struct isa_driver vtdriver;
extern struct isa_driver advdriver;
extern struct isa_driver wdcdriver;
-extern struct isa_driver msedriver;
extern struct isa_driver ardriver;
extern struct isa_driver csdriver;
extern struct isa_driver cxdriver;
@@ -162,9 +160,6 @@ static struct old_isa_driver old_drivers[] = {
#if NVT > 0
{ INTR_TYPE_TTY, &vtdriver },
#endif
-#if NMSE > 0
- { INTR_TYPE_TTY, &msedriver },
-#endif
#if NGP > 0
{ INTR_TYPE_TTY, &gpdriver },
#endif
diff --git a/sys/pc98/pc98/mse.c b/sys/pc98/pc98/mse.c
index 5b8f20c..28a111e 100644
--- a/sys/pc98/pc98/mse.c
+++ b/sys/pc98/pc98/mse.c
@@ -44,30 +44,91 @@
* that causes spurious button pushes.
*/
-#include "mse.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/kernel.h>
+#include <sys/bus.h>
#include <sys/poll.h>
#include <sys/select.h>
#include <sys/uio.h>
+#include <machine/bus.h>
#include <machine/clock.h>
#include <machine/mouse.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
-#include <i386/isa/isa_device.h>
-#include <i386/isa/icu.h>
+#include <isa/isavar.h>
/* driver configuration flags (config) */
#define MSE_CONFIG_ACCEL 0x00f0 /* acceleration factor */
#define MSE_CONFIG_FLAGS (MSE_CONFIG_ACCEL)
-static int mseprobe(struct isa_device *);
-static int mseattach(struct isa_device *);
+/*
+ * Software control structure for mouse. The sc_enablemouse(),
+ * sc_disablemouse() and sc_getmouse() routines must be called spl'd().
+ */
+typedef struct mse_softc {
+ int sc_flags;
+ int sc_mousetype;
+ struct selinfo sc_selp;
+ struct resource *sc_port;
+ struct resource *sc_intr;
+ bus_space_tag_t sc_iot;
+ bus_space_handle_t sc_ioh;
+ void *sc_ih;
+ void (*sc_enablemouse) __P((bus_space_tag_t t,
+ bus_space_handle_t h));
+ void (*sc_disablemouse) __P((bus_space_tag_t t,
+ bus_space_handle_t h));
+ void (*sc_getmouse) __P((bus_space_tag_t t,
+ bus_space_handle_t h,
+ int *dx, int *dy, int *but));
+ int sc_deltax;
+ int sc_deltay;
+ int sc_obuttons;
+ int sc_buttons;
+ int sc_bytesread;
+ u_char sc_bytes[MOUSE_SYS_PACKETSIZE];
+ struct callout_handle sc_callout;
+ int sc_watchdog;
+ dev_t sc_dev;
+ dev_t sc_ndev;
+ mousehw_t hw;
+ mousemode_t mode;
+ mousestatus_t status;
+} mse_softc_t;
+
+static devclass_t mse_devclass;
+
+static int mse_probe __P((device_t dev));
+static int mse_attach __P((device_t dev));
+static int mse_detach __P((device_t dev));
+
+static device_method_t mse_methods[] = {
+ DEVMETHOD(device_probe, mse_probe),
+ DEVMETHOD(device_attach, mse_attach),
+ DEVMETHOD(device_detach, mse_detach),
+ { 0, 0 }
+};
-struct isa_driver msedriver = {
- mseprobe, mseattach, "mse"
+static driver_t mse_driver = {
+ "mse",
+ mse_methods,
+ sizeof(mse_softc_t),
+};
+
+DRIVER_MODULE(mse, isa, mse_driver, mse_devclass, 0, 0);
+
+static struct isa_pnp_id mse_ids[] = {
+ { 0x000fd041, "Bus mouse" }, /* PNP0F00 */
+ { 0x020fd041, "InPort mouse" }, /* PNP0F02 */
+ { 0x0d0fd041, "InPort mouse compatible" }, /* PNP0F0D */
+ { 0x110fd041, "Bus mouse compatible" }, /* PNP0F11 */
+ { 0x150fd041, "Logitech bus mouse" }, /* PNP0F15 */
+ { 0x180fd041, "Logitech bus mouse compatible" },/* PNP0F18 */
+ { 0 }
};
static d_open_t mseopen;
@@ -94,30 +155,8 @@ static struct cdevsw mse_cdevsw = {
/* bmaj */ -1
};
-static ointhand2_t mseintr;
-
-/*
- * Software control structure for mouse. The sc_enablemouse(),
- * sc_disablemouse() and sc_getmouse() routines must be called spl'd().
- */
-static struct mse_softc {
- int sc_flags;
- int sc_mousetype;
- struct selinfo sc_selp;
- u_int sc_port;
- void (*sc_enablemouse) __P((u_int port));
- void (*sc_disablemouse) __P((u_int port));
- void (*sc_getmouse) __P((u_int port, int *dx, int *dy, int *but));
- int sc_deltax;
- int sc_deltay;
- int sc_obuttons;
- int sc_buttons;
- int sc_bytesread;
- u_char sc_bytes[MOUSE_SYS_PACKETSIZE];
- mousehw_t hw;
- mousemode_t mode;
- mousestatus_t status;
-} mse_sc[NMSE];
+static void mseintr __P((void *));
+static timeout_t msetimeout;
/* Flags */
#define MSESC_OPEN 0x1
@@ -133,19 +172,11 @@ static struct mse_softc {
#define MSE_LOGI_SIG 0xA5
#endif
-#ifdef PC98
-#define NORMAL_MSPORT 0x7fd9
-#define PORT_A 0
-#define PORT_B 2
-#define PORT_C 4
-
-#else /* IBM_PC */
-
#define MSE_PORTA 0
#define MSE_PORTB 1
#define MSE_PORTC 2
#define MSE_PORTD 3
-#endif
+#define MSE_IOSIZE 4
#define MSE_UNIT(dev) (minor(dev) >> 1)
#define MSE_NBLOCKIO(dev) (minor(dev) & 0x1)
@@ -155,9 +186,9 @@ static struct mse_softc {
* PC-9801 Bus mouse definitions
*/
-#define MODE 6
-#define HC 6
-#define INT 6
+#define MODE MSE_PORTD
+#define HC MSE_PORTD
+#define INT MSE_PORTD
#define XL 0x00
#define XH 0x20
@@ -169,15 +200,16 @@ static struct mse_softc {
#define HC_NO_CLEAR 0xe
#define HC_CLEAR 0xf
-#define NORMAL_MSIRQ IRQ13 /* INT6 */
+static bus_addr_t mse_port[] = {0, 2, 4, 6};
-static int msport;
-static int msirq;
-
-static int mse_probe98m __P((struct isa_device *idp));
-static void mse_disable98m __P((u_int port));
-static void mse_get98m __P((u_int port, int *dx, int *dy, int *but));
-static void mse_enable98m __P((u_int port));
+static int mse_probe98m __P((device_t dev, mse_softc_t *sc));
+static void mse_disable98m __P((bus_space_tag_t t,
+ bus_space_handle_t h));
+static void mse_get98m __P((bus_space_tag_t t,
+ bus_space_handle_t h,
+ int *dx, int *dy, int *but));
+static void mse_enable98m __P((bus_space_tag_t t,
+ bus_space_handle_t h));
#else
/*
* Logitech bus mouse definitions
@@ -216,10 +248,14 @@ static void mse_enable98m __P((u_int port));
#define MSE_DISINTR 0x10
#define MSE_INTREN 0x00
-static int mse_probelogi __P((struct isa_device *idp));
-static void mse_disablelogi __P((u_int port));
-static void mse_getlogi __P((u_int port, int *dx, int *dy, int *but));
-static void mse_enablelogi __P((u_int port));
+static int mse_probelogi __P((device_t dev, mse_softc_t *sc));
+static void mse_disablelogi __P((bus_space_tag_t t,
+ bus_space_handle_t h));
+static void mse_getlogi __P((bus_space_tag_t t,
+ bus_space_handle_t h,
+ int *dx, int *dy, int *but));
+static void mse_enablelogi __P((bus_space_tag_t t,
+ bus_space_handle_t h));
/*
* ATI Inport mouse definitions
@@ -232,10 +268,14 @@ static void mse_enablelogi __P((u_int port));
#define MSE_INPORT_HOLD 0x20
#define MSE_INPORT_INTREN 0x09
-static int mse_probeati __P((struct isa_device *idp));
-static void mse_enableati __P((u_int port));
-static void mse_disableati __P((u_int port));
-static void mse_getati __P((u_int port, int *dx, int *dy, int *but));
+static int mse_probeati __P((device_t dev, mse_softc_t *sc));
+static void mse_enableati __P((bus_space_tag_t t,
+ bus_space_handle_t h));
+static void mse_disableati __P((bus_space_tag_t t,
+ bus_space_handle_t h));
+static void mse_getati __P((bus_space_tag_t t,
+ bus_space_handle_t h,
+ int *dx, int *dy, int *but));
#endif
#define MSEPRI (PZERO + 3)
@@ -247,13 +287,14 @@ static void mse_getati __P((u_int port, int *dx, int *dy, int *but));
*/
static struct mse_types {
int m_type; /* Type of bus mouse */
- int (*m_probe) __P((struct isa_device *idp));
+ int (*m_probe) __P((device_t dev, mse_softc_t *sc));
/* Probe routine to test for it */
- void (*m_enable) __P((u_int port));
+ void (*m_enable) __P((bus_space_tag_t t, bus_space_handle_t h));
/* Start routine */
- void (*m_disable) __P((u_int port));
+ void (*m_disable) __P((bus_space_tag_t t, bus_space_handle_t h));
/* Disable interrupts routine */
- void (*m_get) __P((u_int port, int *dx, int *dy, int *but));
+ void (*m_get) __P((bus_space_tag_t t, bus_space_handle_t h,
+ int *dx, int *dy, int *but));
/* and get mouse status */
mousehw_t m_hw; /* buttons iftype type model hwid */
mousemode_t m_mode; /* proto rate res accel level size mask */
@@ -279,57 +320,139 @@ static struct mse_types {
{ 0, },
};
-int
-mseprobe(idp)
- register struct isa_device *idp;
+static int
+mse_probe(dev)
+ device_t dev;
{
- register struct mse_softc *sc = &mse_sc[idp->id_unit];
- register int i;
+ mse_softc_t *sc;
+ int error;
+ int rid;
+ int i;
+
+ /* check PnP IDs */
+ error = ISA_PNP_PROBE(device_get_parent(dev), dev, mse_ids);
+ if (error == ENXIO)
+ return ENXIO;
+
+ sc = device_get_softc(dev);
+ rid = 0;
+#ifdef PC98
+ sc->sc_port = isa_alloc_resourcev(dev, SYS_RES_IOPORT, &rid, mse_port,
+ MSE_IOSIZE, RF_ACTIVE);
+#else
+ sc->sc_port = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0,
+ MSE_IOSIZE, RF_ACTIVE);
+#endif
+ if (sc->sc_port == NULL)
+ return ENXIO;
+#ifdef PC98
+ if (isa_load_resourcev(sc->sc_port, mse_port, MSE_IOSIZE)) {
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->sc_port);
+ return ENXIO;
+ }
+#endif
+ sc->sc_iot = rman_get_bustag(sc->sc_port);
+ sc->sc_ioh = rman_get_bushandle(sc->sc_port);
/*
* Check for each mouse type in the table.
*/
i = 0;
while (mse_types[i].m_type) {
- if ((*mse_types[i].m_probe)(idp)) {
+ if ((*mse_types[i].m_probe)(dev, sc)) {
sc->sc_mousetype = mse_types[i].m_type;
sc->sc_enablemouse = mse_types[i].m_enable;
sc->sc_disablemouse = mse_types[i].m_disable;
sc->sc_getmouse = mse_types[i].m_get;
sc->hw = mse_types[i].m_hw;
sc->mode = mse_types[i].m_mode;
- return (1);
+ bus_release_resource(dev, SYS_RES_IOPORT, rid,
+ sc->sc_port);
+ device_set_desc(dev, "Bus/InPort Mouse");
+ return 0;
}
i++;
}
- return (0);
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->sc_port);
+ return ENXIO;
}
-int
-mseattach(idp)
- struct isa_device *idp;
+static int
+mse_attach(dev)
+ device_t dev;
{
- int unit = idp->id_unit;
- struct mse_softc *sc = &mse_sc[unit];
+ mse_softc_t *sc;
+ int flags;
+ int unit;
+ int rid;
-#ifdef PC98
- if (msport != idp->id_iobase) {
- idp->id_iobase = msport;
- printf(" [ioport is changed to #0x%x]", msport);
- }
+ sc = device_get_softc(dev);
+ unit = device_get_unit(dev);
- if (msirq != idp->id_irq) {
- idp->id_irq = msirq;
- printf(" [irq is changed to IR%d]", ffs(msirq)-1);
+ rid = 0;
+#ifdef PC98
+ sc->sc_port = isa_alloc_resourcev(dev, SYS_RES_IOPORT, &rid, mse_port,
+ MSE_IOSIZE, RF_ACTIVE);
+#else
+ sc->sc_port = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0,
+ MSE_IOSIZE, RF_ACTIVE);
+#endif
+ if (sc->sc_port == NULL)
+ return ENXIO;
+#ifdef PC98
+ if (isa_load_resourcev(sc->sc_port, mse_port, MSE_IOSIZE)) {
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->sc_port);
+ return ENXIO;
}
#endif
+ sc->sc_intr = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1,
+ RF_ACTIVE);
+ if (sc->sc_intr == NULL) {
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->sc_port);
+ return ENXIO;
+ }
+ sc->sc_iot = rman_get_bustag(sc->sc_port);
+ sc->sc_ioh = rman_get_bushandle(sc->sc_port);
+
+ if (BUS_SETUP_INTR(device_get_parent(dev), dev, sc->sc_intr,
+ INTR_TYPE_TTY, mseintr, sc, &sc->sc_ih)) {
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->sc_port);
+ bus_release_resource(dev, SYS_RES_IRQ, rid, sc->sc_intr);
+ return ENXIO;
+ }
- idp->id_ointr = mseintr;
- sc->sc_port = idp->id_iobase;
- sc->mode.accelfactor = (idp->id_flags & MSE_CONFIG_ACCEL) >> 4;
- make_dev(&mse_cdevsw, unit << 1, 0, 0, 0600, "mse%d", unit);
- make_dev(&mse_cdevsw, (unit<<1)+1, 0, 0, 0600, "nmse%d", unit);
- return (1);
+ flags = device_get_flags(dev);
+ sc->mode.accelfactor = (flags & MSE_CONFIG_ACCEL) >> 4;
+ callout_handle_init(&sc->sc_callout);
+
+ sc->sc_dev = make_dev(&mse_cdevsw, unit << 1, 0, 0, 0600,
+ "mse%d", unit);
+ sc->sc_ndev = make_dev(&mse_cdevsw, (unit<<1)+1, 0, 0, 0600,
+ "nmse%d", unit);
+
+ return 0;
+}
+
+static int
+mse_detach(dev)
+ device_t dev;
+{
+ mse_softc_t *sc;
+ int rid;
+
+ sc = device_get_softc(dev);
+ if (sc->sc_flags & MSESC_OPEN)
+ return EBUSY;
+
+ rid = 0;
+ BUS_TEARDOWN_INTR(device_get_parent(dev), dev, sc->sc_intr, sc->sc_ih);
+ bus_release_resource(dev, SYS_RES_IRQ, rid, sc->sc_intr);
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->sc_port);
+
+ destroy_dev(sc->sc_dev);
+ destroy_dev(sc->sc_ndev);
+
+ return 0;
}
/*
@@ -342,12 +465,12 @@ mseopen(dev, flags, fmt, p)
int fmt;
struct proc *p;
{
- register struct mse_softc *sc;
+ mse_softc_t *sc;
int s;
- if (MSE_UNIT(dev) >= NMSE)
+ sc = devclass_get_softc(mse_devclass, MSE_UNIT(dev));
+ if (sc == NULL)
return (ENXIO);
- sc = &mse_sc[MSE_UNIT(dev)];
if (sc->sc_mousetype == MSE_NONE)
return (ENXIO);
if (sc->sc_flags & MSESC_OPEN)
@@ -356,6 +479,8 @@ mseopen(dev, flags, fmt, p)
sc->sc_obuttons = sc->sc_buttons = MOUSE_MSC_BUTTONS;
sc->sc_deltax = sc->sc_deltay = 0;
sc->sc_bytesread = sc->mode.packetsize = MOUSE_MSC_PACKETSIZE;
+ sc->sc_watchdog = FALSE;
+ sc->sc_callout = timeout(msetimeout, dev, hz*2);
sc->mode.level = 0;
sc->status.flags = 0;
sc->status.button = sc->status.obutton = 0;
@@ -365,7 +490,7 @@ mseopen(dev, flags, fmt, p)
* Initialize mouse interface and enable interrupts.
*/
s = spltty();
- (*sc->sc_enablemouse)(sc->sc_port);
+ (*sc->sc_enablemouse)(sc->sc_iot, sc->sc_ioh);
splx(s);
return (0);
}
@@ -380,11 +505,13 @@ mseclose(dev, flags, fmt, p)
int fmt;
struct proc *p;
{
- struct mse_softc *sc = &mse_sc[MSE_UNIT(dev)];
+ mse_softc_t *sc = devclass_get_softc(mse_devclass, MSE_UNIT(dev));
int s;
+ untimeout(msetimeout, dev, sc->sc_callout);
+ callout_handle_init(&sc->sc_callout);
s = spltty();
- (*sc->sc_disablemouse)(sc->sc_port);
+ (*sc->sc_disablemouse)(sc->sc_iot, sc->sc_ioh);
sc->sc_flags &= ~MSESC_OPEN;
splx(s);
return(0);
@@ -401,7 +528,7 @@ mseread(dev, uio, ioflag)
struct uio *uio;
int ioflag;
{
- register struct mse_softc *sc = &mse_sc[MSE_UNIT(dev)];
+ mse_softc_t *sc = devclass_get_softc(mse_devclass, MSE_UNIT(dev));
int xfer, s, error;
/*
@@ -470,7 +597,7 @@ mseioctl(dev, cmd, addr, flag, p)
int flag;
struct proc *p;
{
- register struct mse_softc *sc = &mse_sc[MSE_UNIT(dev)];
+ mse_softc_t *sc = devclass_get_softc(mse_devclass, MSE_UNIT(dev));
mousestatus_t status;
int err = 0;
int s;
@@ -585,7 +712,7 @@ msepoll(dev, events, p)
int events;
struct proc *p;
{
- register struct mse_softc *sc = &mse_sc[MSE_UNIT(dev)];
+ mse_softc_t *sc = devclass_get_softc(mse_devclass, MSE_UNIT(dev));
int s;
int revents = 0;
@@ -608,11 +735,32 @@ msepoll(dev, events, p)
}
/*
+ * msetimeout: watchdog timer routine.
+ */
+static void
+msetimeout(arg)
+ void *arg;
+{
+ dev_t dev;
+ mse_softc_t *sc;
+
+ dev = (dev_t)arg;
+ sc = devclass_get_softc(mse_devclass, MSE_UNIT(dev));
+ if (sc->sc_watchdog) {
+ if (bootverbose)
+ printf("mse%d: lost interrupt?\n", MSE_UNIT(dev));
+ mseintr(sc);
+ }
+ sc->sc_watchdog = TRUE;
+ sc->sc_callout = timeout(msetimeout, dev, hz);
+}
+
+/*
* mseintr: update mouse status. sc_deltax and sc_deltay are accumulative.
*/
static void
-mseintr(unit)
- int unit;
+mseintr(arg)
+ void *arg;
{
/*
* the table to turn MouseSystem button bits (MOUSE_MSC_BUTTON?UP)
@@ -628,7 +776,7 @@ mseintr(unit)
MOUSE_BUTTON1DOWN | MOUSE_BUTTON2DOWN,
MOUSE_BUTTON1DOWN | MOUSE_BUTTON2DOWN | MOUSE_BUTTON3DOWN
};
- register struct mse_softc *sc = &mse_sc[unit];
+ mse_softc_t *sc = arg;
int dx, dy, but;
int sign;
@@ -640,7 +788,7 @@ mseintr(unit)
if ((sc->sc_flags & MSESC_OPEN) == 0)
return;
- (*sc->sc_getmouse)(sc->sc_port, &dx, &dy, &but);
+ (*sc->sc_getmouse)(sc->sc_iot, sc->sc_ioh, &dx, &dy, &but);
if (sc->mode.accelfactor > 0) {
sign = (dx < 0);
dx = dx * dx / sc->mode.accelfactor;
@@ -666,6 +814,8 @@ mseintr(unit)
| (sc->status.button ^ but);
sc->status.button = but;
+ sc->sc_watchdog = FALSE;
+
/*
* If mouse state has changed, wake up anyone wanting to know.
*/
@@ -689,24 +839,26 @@ mseintr(unit)
* interrupts and return 1)
*/
static int
-mse_probelogi(idp)
- register struct isa_device *idp;
+mse_probelogi(dev, sc)
+ device_t dev;
+ mse_softc_t *sc;
{
int sig;
- outb(idp->id_iobase + MSE_PORTD, MSE_SETUP);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, MSE_PORTD, MSE_SETUP);
/* set the signature port */
- outb(idp->id_iobase + MSE_PORTB, MSE_LOGI_SIG);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, MSE_PORTB, MSE_LOGI_SIG);
DELAY(30000); /* 30 ms delay */
- sig = inb(idp->id_iobase + MSE_PORTB) & 0xFF;
+ sig = bus_space_read_1(sc->sc_iot, sc->sc_ioh, MSE_PORTB) & 0xFF;
if (sig == MSE_LOGI_SIG) {
- outb(idp->id_iobase + MSE_PORTC, MSE_DISINTR);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, MSE_PORTC,
+ MSE_DISINTR);
return(1);
} else {
if (bootverbose)
- printf("mse%d: wrong signature %x\n",idp->id_unit,sig);
+ device_printf(dev, "wrong signature %x\n", sig);
return(0);
}
}
@@ -715,51 +867,54 @@ mse_probelogi(idp)
* Initialize Logitech mouse and enable interrupts.
*/
static void
-mse_enablelogi(port)
- register u_int port;
+mse_enablelogi(tag, handle)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
{
int dx, dy, but;
- outb(port + MSE_PORTD, MSE_SETUP);
- mse_getlogi(port, &dx, &dy, &but);
+ bus_space_write_1(tag, handle, MSE_PORTD, MSE_SETUP);
+ mse_getlogi(tag, handle, &dx, &dy, &but);
}
/*
* Disable interrupts for Logitech mouse.
*/
static void
-mse_disablelogi(port)
- register u_int port;
+mse_disablelogi(tag, handle)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
{
- outb(port + MSE_PORTC, MSE_DISINTR);
+ bus_space_write_1(tag, handle, MSE_PORTC, MSE_DISINTR);
}
/*
* Get the current dx, dy and button up/down state.
*/
static void
-mse_getlogi(port, dx, dy, but)
- register u_int port;
+mse_getlogi(tag, handle, dx, dy, but)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
int *dx;
int *dy;
int *but;
{
register char x, y;
- outb(port + MSE_PORTC, MSE_HOLD | MSE_RXLOW);
- x = inb(port + MSE_PORTA);
+ bus_space_write_1(tag, handle, MSE_PORTC, MSE_HOLD | MSE_RXLOW);
+ x = bus_space_read_1(tag, handle, MSE_PORTA);
*but = (x >> 5) & MOUSE_MSC_BUTTONS;
x &= 0xf;
- outb(port + MSE_PORTC, MSE_HOLD | MSE_RXHIGH);
- x |= (inb(port + MSE_PORTA) << 4);
- outb(port + MSE_PORTC, MSE_HOLD | MSE_RYLOW);
- y = (inb(port + MSE_PORTA) & 0xf);
- outb(port + MSE_PORTC, MSE_HOLD | MSE_RYHIGH);
- y |= (inb(port + MSE_PORTA) << 4);
+ bus_space_write_1(tag, handle, MSE_PORTC, MSE_HOLD | MSE_RXHIGH);
+ x |= (bus_space_read_1(tag, handle, MSE_PORTA) << 4);
+ bus_space_write_1(tag, handle, MSE_PORTC, MSE_HOLD | MSE_RYLOW);
+ y = (bus_space_read_1(tag, handle, MSE_PORTA) & 0xf);
+ bus_space_write_1(tag, handle, MSE_PORTC, MSE_HOLD | MSE_RYHIGH);
+ y |= (bus_space_read_1(tag, handle, MSE_PORTA) << 4);
*dx = x;
*dy = y;
- outb(port + MSE_PORTC, MSE_INTREN);
+ bus_space_write_1(tag, handle, MSE_PORTC, MSE_INTREN);
}
/*
@@ -770,13 +925,14 @@ mse_getlogi(port, dx, dy, but)
* (do not enable interrupts)
*/
static int
-mse_probeati(idp)
- register struct isa_device *idp;
+mse_probeati(dev, sc)
+ device_t dev;
+ mse_softc_t *sc;
{
int i;
for (i = 0; i < 2; i++)
- if (inb(idp->id_iobase + MSE_PORTC) == 0xde)
+ if (bus_space_read_1(sc->sc_iot, sc->sc_ioh, MSE_PORTC) == 0xde)
return (1);
return (0);
}
@@ -785,56 +941,58 @@ mse_probeati(idp)
* Initialize ATI Inport mouse and enable interrupts.
*/
static void
-mse_enableati(port)
- register u_int port;
+mse_enableati(tag, handle)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
{
- outb(port + MSE_PORTA, MSE_INPORT_RESET);
- outb(port + MSE_PORTA, MSE_INPORT_MODE);
- outb(port + MSE_PORTB, MSE_INPORT_INTREN);
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_RESET);
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_MODE);
+ bus_space_write_1(tag, handle, MSE_PORTB, MSE_INPORT_INTREN);
}
/*
* Disable interrupts for ATI Inport mouse.
*/
static void
-mse_disableati(port)
- register u_int port;
+mse_disableati(tag, handle)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
{
- outb(port + MSE_PORTA, MSE_INPORT_MODE);
- outb(port + MSE_PORTB, 0);
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_MODE);
+ bus_space_write_1(tag, handle, MSE_PORTB, 0);
}
/*
* Get current dx, dy and up/down button state.
*/
static void
-mse_getati(port, dx, dy, but)
- register u_int port;
+mse_getati(tag, handle, dx, dy, but)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
int *dx;
int *dy;
int *but;
{
register char byte;
- outb(port + MSE_PORTA, MSE_INPORT_MODE);
- outb(port + MSE_PORTB, MSE_INPORT_HOLD);
- outb(port + MSE_PORTA, MSE_INPORT_STATUS);
- *but = ~inb(port + MSE_PORTB) & MOUSE_MSC_BUTTONS;
- outb(port + MSE_PORTA, MSE_INPORT_DX);
- byte = inb(port + MSE_PORTB);
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_MODE);
+ bus_space_write_1(tag, handle, MSE_PORTB, MSE_INPORT_HOLD);
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_STATUS);
+ *but = ~bus_space_read_1(tag, handle, MSE_PORTB) & MOUSE_MSC_BUTTONS;
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_DX);
+ byte = bus_space_read_1(tag, handle, MSE_PORTB);
*dx = byte;
- outb(port + MSE_PORTA, MSE_INPORT_DY);
- byte = inb(port + MSE_PORTB);
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_DY);
+ byte = bus_space_read_1(tag, handle, MSE_PORTB);
*dy = byte;
- outb(port + MSE_PORTA, MSE_INPORT_MODE);
- outb(port + MSE_PORTB, MSE_INPORT_INTREN);
+ bus_space_write_1(tag, handle, MSE_PORTA, MSE_INPORT_MODE);
+ bus_space_write_1(tag, handle, MSE_PORTB, MSE_INPORT_INTREN);
}
#endif
#ifdef PC98
-
/*
* Routines for the PC98 bus mouse.
*/
@@ -844,19 +1002,21 @@ mse_getati(port, dx, dy, but)
* (do not enable interrupts)
*/
static int
-mse_probe98m(idp)
- register struct isa_device *idp;
+mse_probe98m(dev, sc)
+ device_t dev;
+ mse_softc_t *sc;
{
-
- msport = NORMAL_MSPORT;
- msirq = NORMAL_MSIRQ;
-
/* mode set */
- outb(msport + MODE, 0x93);
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, MODE, 0x93);
+
/* initialize */
- outb(msport + INT, INT_DISABLE); /* INT disable */
- outb(msport + HC, HC_NO_CLEAR); /* HC = 0 */
- outb(msport + HC, HC_CLEAR); /* HC = 1 */
+ /* INT disable */
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, INT, INT_DISABLE);
+ /* HC = 0 */
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, HC, HC_NO_CLEAR);
+ /* HC = 1 */
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, HC, HC_CLEAR);
+
return (1);
}
@@ -864,60 +1024,66 @@ mse_probe98m(idp)
* Initialize PC98 bus mouse and enable interrupts.
*/
static void
-mse_enable98m(port)
- register u_int port;
+mse_enable98m(tag, handle)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
{
- outb(port + INT, INT_ENABLE);/* INT enable */
- outb(port + HC, HC_NO_CLEAR); /* HC = 0 */
- outb(port + HC, HC_CLEAR); /* HC = 1 */
+ bus_space_write_1(tag, handle, INT, INT_ENABLE); /* INT enable */
+ bus_space_write_1(tag, handle, HC, HC_NO_CLEAR); /* HC = 0 */
+ bus_space_write_1(tag, handle, HC, HC_CLEAR); /* HC = 1 */
}
/*
* Disable interrupts for PC98 Bus mouse.
*/
static void
-mse_disable98m(port)
- register u_int port;
+mse_disable98m(tag, handle)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
{
- outb(port + INT, INT_DISABLE);/* INT disable */
- outb(port + HC, HC_NO_CLEAR); /* HC = 0 */
- outb(port + HC, HC_CLEAR); /* HC = 1 */
+ bus_space_write_1(tag, handle, INT, INT_DISABLE); /* INT disable */
+ bus_space_write_1(tag, handle, HC, HC_NO_CLEAR); /* HC = 0 */
+ bus_space_write_1(tag, handle, HC, HC_CLEAR); /* HC = 1 */
}
/*
* Get current dx, dy and up/down button state.
*/
static void
-mse_get98m(port, dx, dy, but)
- register u_int port;
- int *dx;
- int *dy;
- int *but;
+mse_get98m(tag, handle, dx, dy, but)
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
+ int *dx;
+ int *dy;
+ int *but;
{
register char x, y;
- outb(port + INT, INT_DISABLE); /* INT disable */
+ bus_space_write_1(tag, handle, INT, INT_DISABLE); /* INT disable */
- outb(port + HC, HC_CLEAR); /* HC = 1 */
+ bus_space_write_1(tag, handle, HC, HC_CLEAR); /* HC = 1 */
- outb(port + PORT_C, 0x90 | XL);
- x = inb(port + PORT_A) & 0x0f; /* X low */
- outb(port + PORT_C, 0x90 | XH);
- x |= ((inb(port + PORT_A) & 0x0f) << 4); /* X high */
+ /* X low */
+ bus_space_write_1(tag, handle, MSE_PORTC, 0x90 | XL);
+ x = bus_space_read_1(tag, handle, MSE_PORTA) & 0x0f;
+ /* X high */
+ bus_space_write_1(tag, handle, MSE_PORTC, 0x90 | XH);
+ x |= ((bus_space_read_1(tag, handle, MSE_PORTA) & 0x0f) << 4);
- outb(port + PORT_C, 0x90 | YL);
- y = (inb(port + PORT_A) & 0x0f); /* Y low */
- outb(port + PORT_C, 0x90 | YH);
- y |= ((inb(port + PORT_A) & 0x0f) << 4);
+ /* Y low */
+ bus_space_write_1(tag, handle, MSE_PORTC, 0x90 | YL);
+ y = (bus_space_read_1(tag, handle, MSE_PORTA) & 0x0f);
+ /* Y high */
+ bus_space_write_1(tag, handle, MSE_PORTC, 0x90 | YH);
+ y |= ((bus_space_read_1(tag, handle, MSE_PORTA) & 0x0f) << 4);
- *but = (inb(port + PORT_A) >> 5) & 7;
+ *but = (bus_space_read_1(tag, handle, MSE_PORTA) >> 5) & 7;
*dx = x;
*dy = y;
- outb(port + HC, HC_NO_CLEAR); /* HC = 0 */
+ bus_space_write_1(tag, handle, HC, HC_NO_CLEAR); /* HC = 0 */
- outb(port + INT, INT_ENABLE); /* INT enable */
+ bus_space_write_1(tag, handle, INT, INT_ENABLE); /* INT enable */
}
#endif
-
OpenPOWER on IntegriCloud