Re-wrote psm_poll_status() to use the ioport supplied in the kernel

config file instead of hard-coding it in the driver.  No functional
differences.

This is based on the code Richard Wiwatowski <rjwiwat@adelaide.on.net>
sent to the mailing list.
This commit is contained in:
Nate Williams 1996-05-07 21:11:13 +00:00
parent a7bd0e76fc
commit 077e6558ec
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=15672

View File

@ -95,7 +95,7 @@
static int psmprobe(struct isa_device *);
static int psmattach(struct isa_device *);
static void psm_poll_status(void);
static void psm_poll_status(int);
static int psmaddr[NPSM]; /* Base I/O port addresses per unit */
@ -136,23 +136,21 @@ static struct cdevsw psm_cdevsw =
psmioctl, nostop, nullreset, nodevtotty,
psmselect, nommap, NULL, "psm", NULL, -1 };
#define AUX_PORT 0x60 /* AUX_PORT base (S.Yuen) */
static void
psm_write_dev(int ioport, u_char value)
{
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_CNTRL, 0xd4);
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_DATA, value);
}
static inline void
psm_command(int ioport, u_char value)
{
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_CNTRL, 0x60);
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_DATA, value);
}
@ -166,10 +164,10 @@ psmprobe(struct isa_device *dvp)
unit=dvp->id_unit;
#ifndef PSM_NO_RESET
psm_write_dev(ioport, PSM_RESET); /* Reset aux device */
psm_poll_status();
psm_poll_status(ioport);
#endif
outb(ioport+PSM_CNTRL, 0xa9);
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_CNTRL, 0xaa);
c = inb(ioport+PSM_DATA);
if(c & 0x04) {
@ -193,7 +191,7 @@ psmattach(struct isa_device *dvp)
psmaddr[unit] = ioport;
/* Disable mouse interrupts */
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_CNTRL, PSM_ENABLE);
#ifdef 0
psm_write(ioport, PSM_SET_RES);
@ -205,7 +203,7 @@ psmattach(struct isa_device *dvp)
psm_write(ioport, 0x64); /* 100 samples/sec */
psm_write(ioport, PSM_SET_STREAM);
#endif
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_CNTRL, PSM_DISABLE);
psm_command(ioport, PSM_INT_DISABLE);
@ -254,7 +252,7 @@ psmopen(dev_t dev, int flag, int fmt, struct proc *p)
/* Enable Bus Mouse interrupts */
psm_write_dev(ioport, PSM_DEV_ENABLE);
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_CNTRL, PSM_ENABLE);
psm_command(ioport, PSM_INT_ENABLE);
@ -272,12 +270,13 @@ psmopen(dev_t dev, int flag, int fmt, struct proc *p)
}
static void
psm_poll_status(void)
psm_poll_status(int ioport)
{
u_char c;
while(inb(AUX_PORT+PSM_STATUS) & 0x03) {
if(inb(AUX_PORT+PSM_STATUS) & 0x2 == 0x2)
inb(AUX_PORT+PSM_DATA);
while(c = inb(ioport+PSM_STATUS) & 0x03) {
if(c & PSM_OUTPUT_ACK == PSM_OUTPUT_ACK)
inb(ioport+PSM_DATA);
}
return;
}
@ -295,7 +294,7 @@ psmclose(dev_t dev, int flag, int fmt, struct proc *p)
/* Disable further mouse interrupts */
psm_command(ioport, PSM_INT_DISABLE);
psm_poll_status();
psm_poll_status(ioport);
outb(ioport+PSM_CNTRL, PSM_DISABLE);
/* Complete the close */