Module Name: src
Committed By: tsutsui
Date: Sat Jun 25 15:10:26 UTC 2022
Modified Files:
src/sys/arch/atari/dev: kbd.c
Log Message:
Rename and reformat softc stuff for readablity, and misc more cleanups.
No binary change.
To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/arch/atari/dev/kbd.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/atari/dev/kbd.c
diff -u src/sys/arch/atari/dev/kbd.c:1.51 src/sys/arch/atari/dev/kbd.c:1.52
--- src/sys/arch/atari/dev/kbd.c:1.51 Sat Jun 25 14:39:19 2022
+++ src/sys/arch/atari/dev/kbd.c Sat Jun 25 15:10:26 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: kbd.c,v 1.51 2022/06/25 14:39:19 tsutsui Exp $ */
+/* $NetBSD: kbd.c,v 1.52 2022/06/25 15:10:26 tsutsui Exp $ */
/*
* Copyright (c) 1995 Leo Weppelman
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kbd.c,v 1.51 2022/06/25 14:39:19 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kbd.c,v 1.52 2022/06/25 15:10:26 tsutsui Exp $");
#include "mouse.h"
#include "ite.h"
@@ -78,21 +78,21 @@ __KERNEL_RCSID(0, "$NetBSD: kbd.c,v 1.51
#define KBD_RING_MASK 255 /* Modulo mask for above */
struct kbd_softc {
- int k_event_mode; /* if 1, collect events, */
+ int sc_event_mode; /* if 1, collect events, */
/* else pass to ite */
- struct evvar k_events; /* event queue state */
- uint8_t k_soft_cs; /* control-reg. copy */
- uint8_t k_package[20]; /* XXX package being build */
- uint8_t k_pkg_size; /* Size of the package */
- uint8_t k_pkg_idx; /* Running pkg assembly index */
- uint8_t k_pkg_type; /* Type of package */
- const uint8_t *k_sendp; /* Output pointer */
- int k_send_cnt; /* Chars left for output */
+ struct evvar sc_events; /* event queue state */
+ uint8_t sc_soft_cs; /* control-reg. copy */
+ uint8_t sc_package[20]; /* XXX package being build */
+ uint8_t sc_pkg_size; /* Size of the package */
+ uint8_t sc_pkg_idx; /* Running pkg assembly index */
+ uint8_t sc_pkg_type; /* Type of package */
+ const uint8_t *sc_sendp; /* Output pointer */
+ int sc_send_cnt; /* Chars left for output */
#if NWSKBD > 0
- device_t k_wskbddev; /* pointer to wskbd for sending strokes */
- int k_pollingmode; /* polling mode on? whatever it is... */
+ device_t sc_wskbddev; /* pointer to wskbd for sending strokes */
+ int sc_pollingmode; /* polling mode on? whatever it is... */
#endif
- void *k_sicookie; /* softint(9) cookie */
+ void *sc_sicookie; /* softint(9) cookie */
};
/* WSKBD */
@@ -128,7 +128,7 @@ static uint8_t kbd_ring[KBD_RING_SIZE];
static volatile u_int kbd_rbput = 0; /* 'put' index */
static u_int kbd_rbget = 0; /* 'get' index */
-static struct kbd_softc kbd_softc;
+static struct kbd_softc kbd_softc; /* XXX */
/* {b,c}devsw[] function prototypes */
static dev_type_open(kbdopen);
@@ -209,6 +209,7 @@ kbdmatch(device_t parent, cfdata_t cf, v
static void
kbdattach(device_t parent, device_t self, void *aux)
{
+ struct kbd_softc *sc = &kbd_softc;
int timeout;
const uint8_t kbd_rst[] = { 0x80, 0x01 };
const uint8_t kbd_icmd[] = { 0x12, 0x15 };
@@ -224,7 +225,7 @@ kbdattach(device_t parent, device_t self
*/
KBD->ac_cs = A_RESET;
delay(100); /* XXX: enough? */
- KBD->ac_cs = kbd_softc.k_soft_cs = KBD_INIT | A_RXINT;
+ KBD->ac_cs = sc->sc_soft_cs = KBD_INIT | A_RXINT;
/*
* Clear error conditions
@@ -251,7 +252,7 @@ kbdattach(device_t parent, device_t self
printf("\n");
- kbd_softc.k_sicookie = softint_establish(SOFTINT_SERIAL, kbdsoft, NULL);
+ sc->sc_sicookie = softint_establish(SOFTINT_SERIAL, kbdsoft, NULL);
#if NWSKBD > 0
if (self != NULL) {
@@ -267,10 +268,10 @@ kbdattach(device_t parent, device_t self
waa.keymap = &kbd_mapdata;
waa.accessops = &kbd_accessops;
waa.accesscookie = NULL;
- kbd_softc.k_wskbddev = config_found(self, &waa, wskbddevprint,
+ sc->sc_wskbddev = config_found(self, &waa, wskbddevprint,
CFARGS_NONE);
- kbd_softc.k_pollingmode = 0;
+ sc->sc_pollingmode = 0;
kbdenable();
}
@@ -280,6 +281,7 @@ kbdattach(device_t parent, device_t self
void
kbdenable(void)
{
+ struct kbd_softc *sc = &kbd_softc;
int s;
s = spltty();
@@ -296,47 +298,50 @@ kbdenable(void)
MFP->mf_ierb |= IB_AINT;
MFP->mf_imrb |= IB_AINT;
- kbd_softc.k_event_mode = 0;
- kbd_softc.k_events.ev_io = 0;
- kbd_softc.k_pkg_size = 0;
+ sc->sc_event_mode = 0;
+ sc->sc_events.ev_io = 0;
+ sc->sc_pkg_size = 0;
splx(s);
}
static int
kbdopen(dev_t dev, int flags, int mode, struct lwp *l)
{
+ struct kbd_softc *sc = &kbd_softc;
- if (kbd_softc.k_events.ev_io)
+ if (sc->sc_events.ev_io)
return EBUSY;
- kbd_softc.k_events.ev_io = l->l_proc;
- ev_init(&kbd_softc.k_events);
+ sc->sc_events.ev_io = l->l_proc;
+ ev_init(&sc->sc_events);
return 0;
}
static int
kbdclose(dev_t dev, int flags, int mode, struct lwp *l)
{
+ struct kbd_softc *sc = &kbd_softc;
/* Turn off event mode, dump the queue */
- kbd_softc.k_event_mode = 0;
- ev_fini(&kbd_softc.k_events);
- kbd_softc.k_events.ev_io = NULL;
+ sc->sc_event_mode = 0;
+ ev_fini(&sc->sc_events);
+ sc->sc_events.ev_io = NULL;
return 0;
}
static int
kbdread(dev_t dev, struct uio *uio, int flags)
{
+ struct kbd_softc *sc = &kbd_softc;
- return ev_read(&kbd_softc.k_events, uio, flags);
+ return ev_read(&sc->sc_events, uio, flags);
}
static int
-kbdioctl(dev_t dev, u_long cmd, register void *data, int flag, struct lwp *l)
+kbdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
{
- struct kbd_softc *k = &kbd_softc;
- struct kbdbell *kb;
+ struct kbd_softc *sc = &kbd_softc;
+ struct kbdbell *kb;
switch (cmd) {
case KIOCTRANS:
@@ -352,7 +357,7 @@ kbdioctl(dev_t dev, u_long cmd, register
return 0;
case KIOCSDIRECT:
- k->k_event_mode = *(int *)data;
+ sc->sc_event_mode = *(int *)data;
return 0;
case KIOCRINGBELL:
@@ -367,17 +372,17 @@ kbdioctl(dev_t dev, u_long cmd, register
return 0;
case FIOASYNC:
- k->k_events.ev_async = *(int *)data != 0;
+ sc->sc_events.ev_async = *(int *)data != 0;
return 0;
case FIOSETOWN:
- if (-*(int *)data != k->k_events.ev_io->p_pgid &&
- *(int *)data != k->k_events.ev_io->p_pid)
+ if (-*(int *)data != sc->sc_events.ev_io->p_pgid &&
+ *(int *)data != sc->sc_events.ev_io->p_pid)
return EPERM;
return 0;
case TIOCSPGRP:
- if (*(int *)data != k->k_events.ev_io->p_pgid)
+ if (*(int *)data != sc->sc_events.ev_io->p_pgid)
return EPERM;
return 0;
@@ -394,15 +399,17 @@ kbdioctl(dev_t dev, u_long cmd, register
static int
kbdpoll(dev_t dev, int events, struct lwp *l)
{
+ struct kbd_softc *sc = &kbd_softc;
- return ev_poll(&kbd_softc.k_events, events, l);
+ return ev_poll(&sc->sc_events, events, l);
}
static int
kbdkqfilter(dev_t dev, struct knote *kn)
{
+ struct kbd_softc *sc = &kbd_softc;
- return ev_kqfilter(&kbd_softc.k_events, kn);
+ return ev_kqfilter(&sc->sc_events, kn);
}
/*
@@ -412,6 +419,7 @@ void
kbdintr(int sr)
/* sr: sr at time of interrupt */
{
+ struct kbd_softc *sc = &kbd_softc;
uint8_t code;
bool got_char = false;
@@ -431,19 +439,19 @@ kbdintr(int sr)
/*
* If characters are waiting for transmit, send them.
*/
- if ((kbd_softc.k_soft_cs & A_TXINT) != 0 &&
+ if ((sc->sc_soft_cs & A_TXINT) != 0 &&
(KBD->ac_cs & A_TXRDY) != 0) {
- if (kbd_softc.k_sendp != NULL)
- KBD->ac_da = *kbd_softc.k_sendp++;
- if (--kbd_softc.k_send_cnt <= 0) {
+ if (sc->sc_sendp != NULL)
+ KBD->ac_da = *sc->sc_sendp++;
+ if (--sc->sc_send_cnt <= 0) {
/*
* The total package has been transmitted,
* wakeup anyone waiting for it.
*/
- KBD->ac_cs = (kbd_softc.k_soft_cs &= ~A_TXINT);
- kbd_softc.k_sendp = NULL;
- kbd_softc.k_send_cnt = 0;
- wakeup((void *)&kbd_softc.k_send_cnt);
+ KBD->ac_cs = (sc->sc_soft_cs &= ~A_TXINT);
+ sc->sc_sendp = NULL;
+ sc->sc_send_cnt = 0;
+ wakeup((void *)&sc->sc_send_cnt);
}
}
@@ -451,7 +459,7 @@ kbdintr(int sr)
* Activate software-level to handle possible input.
*/
if (got_char)
- softint_schedule(kbd_softc.k_sicookie);
+ softint_schedule(sc->sc_sicookie);
}
/*
@@ -460,9 +468,9 @@ kbdintr(int sr)
static void
kbdsoft(void *junk1)
{
+ struct kbd_softc *sc = &kbd_softc;
int s;
uint8_t code;
- struct kbd_softc *k = &kbd_softc;
struct firm_event *fe;
int put, get, n;
@@ -484,24 +492,25 @@ kbdsoft(void *junk1)
* If collecting a package, stuff it in and
* continue.
*/
- if (k->k_pkg_size && (k->k_pkg_idx < k->k_pkg_size)) {
- k->k_package[k->k_pkg_idx++] = code;
- if (k->k_pkg_idx == k->k_pkg_size) {
+ if (sc->sc_pkg_size &&
+ (sc->sc_pkg_idx < sc->sc_pkg_size)) {
+ sc->sc_package[sc->sc_pkg_idx++] = code;
+ if (sc->sc_pkg_idx == sc->sc_pkg_size) {
/*
* Package is complete.
*/
- switch (k->k_pkg_type) {
+ switch (sc->sc_pkg_type) {
#if NMOUSE > 0
case KBD_AMS_PKG:
case KBD_RMS_PKG:
case KBD_JOY1_PKG:
mouse_soft(
- (REL_MOUSE *)k->k_package,
- k->k_pkg_size,
- k->k_pkg_type);
+ (REL_MOUSE *)sc->sc_package,
+ sc->sc_pkg_size,
+ sc->sc_pkg_type);
#endif /* NMOUSE */
}
- k->k_pkg_size = 0;
+ sc->sc_pkg_size = 0;
}
continue;
}
@@ -509,7 +518,7 @@ kbdsoft(void *junk1)
* If this is a package header, init pkg. handling.
*/
if (!KBD_IS_KEY(code)) {
- kbd_pkg_start(k, code);
+ kbd_pkg_start(sc, code);
continue;
}
#if NWSKBD > 0
@@ -519,10 +528,10 @@ kbdsoft(void *junk1)
* keystroke to the wskbd.
*/
- if (kbd_softc.k_pollingmode == 0 &&
- kbd_softc.k_wskbddev != NULL &&
- k->k_event_mode == 0) {
- wskbd_input(kbd_softc.k_wskbddev,
+ if (sc->sc_pollingmode == 0 &&
+ sc->sc_wskbddev != NULL &&
+ sc->sc_event_mode == 0) {
+ wskbd_input(sc->sc_wskbddev,
KBD_RELEASED(code) ?
WSCONS_EVENT_KEY_UP :
WSCONS_EVENT_KEY_DOWN,
@@ -531,7 +540,7 @@ kbdsoft(void *junk1)
}
#endif /* NWSKBD */
#if NITE > 0
- if (kbd_do_modifier(code) && !k->k_event_mode)
+ if (kbd_do_modifier(code) && !sc->sc_event_mode)
continue;
#endif
@@ -539,7 +548,7 @@ kbdsoft(void *junk1)
* if not in event mode, deliver straight to ite to
* process key stroke
*/
- if (!k->k_event_mode) {
+ if (!sc->sc_event_mode) {
/* Gets to spltty() by itself */
#if NITE > 0
ite_filter(code, ITEFILT_TTY);
@@ -553,10 +562,10 @@ kbdsoft(void *junk1)
* is full, the keystroke is lost (sorry!).
*/
s = spltty();
- put = k->k_events.ev_put;
- fe = &k->k_events.ev_q[put];
+ put = sc->sc_events.ev_put;
+ fe = &sc->sc_events.ev_q[put];
put = (put + 1) % EV_QSIZE;
- if (put == k->k_events.ev_get) {
+ if (put == sc->sc_events.ev_get) {
log(LOG_WARNING,
"keyboard event queue overflow\n");
splx(s);
@@ -565,15 +574,15 @@ kbdsoft(void *junk1)
fe->id = KBD_SCANCODE(code);
fe->value = KBD_RELEASED(code) ? VKEY_UP : VKEY_DOWN;
firm_gettime(fe);
- k->k_events.ev_put = put;
- EV_WAKEUP(&k->k_events);
+ sc->sc_events.ev_put = put;
+ EV_WAKEUP(&sc->sc_events);
splx(s);
}
kbd_rbget = get;
}
}
-static uint8_t sound[] = {
+static uint8_t sound[] = {
0xA8, 0x01, 0xA9, 0x01, 0xAA, 0x01, 0x00,
0xF8, 0x10, 0x10, 0x10, 0x00, 0x20, 0x03
};
@@ -581,14 +590,14 @@ static uint8_t sound[] = {
void
kbdbell(void)
{
- register int i, sps;
+ int i, s;
- sps = splhigh();
+ s = splhigh();
for (i = 0; i < sizeof(sound); i++) {
YM2149->sd_selr = i;
YM2149->sd_wdat = sound[i];
}
- splx(sps);
+ splx(s);
}
@@ -602,7 +611,7 @@ kbdbell(void)
void
kbd_bell_gparms(u_int *volume, u_int *pitch, u_int *duration)
{
- u_int tmp;
+ u_int tmp;
tmp = sound[11] | (sound[12] << 8);
*duration = (tmp * KBDBELLDURATION) / 1000;
@@ -616,7 +625,7 @@ kbd_bell_gparms(u_int *volume, u_int *pi
void
kbd_bell_sparms(u_int volume, u_int pitch, u_int duration)
{
- u_int f, t;
+ u_int f, t;
f = pitch > 10 ? pitch : 10; /* minimum pitch */
if (f > 20000)
@@ -654,7 +663,7 @@ kbdgetcn(void)
MFP->mf_imrb &= ~IB_AINT;
}
for (;;) {
- while (!((KBD->ac_cs & (A_IRQ|A_RXRDY)) == (A_IRQ|A_RXRDY)))
+ while (!((KBD->ac_cs & (A_IRQ | A_RXRDY)) == (A_IRQ | A_RXRDY)))
continue; /* Wait for key */
if ((KBD->ac_cs & (A_OE | A_PE)) != 0) {
code = KBD->ac_da; /* Silently ignore errors */
@@ -700,8 +709,8 @@ kbd_write_poll(const uint8_t *cmd, int l
void
kbd_write(const uint8_t *cmd, int len)
{
- struct kbd_softc *k = &kbd_softc;
- int s;
+ struct kbd_softc *sc = &kbd_softc;
+ int s;
/*
* Get to splhigh, 'real' interrupts arrive at spl6!
@@ -711,15 +720,15 @@ kbd_write(const uint8_t *cmd, int len)
/*
* Make sure any privious write has ended...
*/
- while (k->k_sendp != NULL)
- tsleep((void *)&k->k_sendp, TTOPRI, "kbd_write1", 0);
+ while (sc->sc_sendp != NULL)
+ tsleep((void *)&sc->sc_sendp, TTOPRI, "kbd_write1", 0);
/*
* If the KBD-acia is not currently busy, send the first
* character now.
*/
- KBD->ac_cs = (k->k_soft_cs |= A_TXINT);
- if (KBD->ac_cs & A_TXRDY) {
+ KBD->ac_cs = (sc->sc_soft_cs |= A_TXINT);
+ if ((KBD->ac_cs & A_TXRDY) != 0) {
KBD->ac_da = *cmd++;
len--;
}
@@ -728,54 +737,54 @@ kbd_write(const uint8_t *cmd, int len)
* If we're not yet done, wait until all characters are send.
*/
if (len > 0) {
- k->k_sendp = cmd;
- k->k_send_cnt = len;
- tsleep((void *)&k->k_send_cnt, TTOPRI, "kbd_write2", 0);
+ sc->sc_sendp = cmd;
+ sc->sc_send_cnt = len;
+ tsleep((void *)&sc->sc_send_cnt, TTOPRI, "kbd_write2", 0);
}
splx(s);
/*
* Wakeup all procs waiting for us.
*/
- wakeup((void *)&k->k_sendp);
+ wakeup((void *)&sc->sc_sendp);
}
/*
* Setup softc-fields to assemble a keyboard package.
*/
static void
-kbd_pkg_start(struct kbd_softc *kp, uint8_t msg_start)
+kbd_pkg_start(struct kbd_softc *sc, uint8_t msg_start)
{
- kp->k_pkg_idx = 1;
- kp->k_package[0] = msg_start;
+ sc->sc_pkg_idx = 1;
+ sc->sc_package[0] = msg_start;
switch (msg_start) {
case 0xf6:
- kp->k_pkg_type = KBD_MEM_PKG;
- kp->k_pkg_size = 8;
+ sc->sc_pkg_type = KBD_MEM_PKG;
+ sc->sc_pkg_size = 8;
break;
case 0xf7:
- kp->k_pkg_type = KBD_AMS_PKG;
- kp->k_pkg_size = 6;
+ sc->sc_pkg_type = KBD_AMS_PKG;
+ sc->sc_pkg_size = 6;
break;
case 0xf8:
case 0xf9:
case 0xfa:
case 0xfb:
- kp->k_pkg_type = KBD_RMS_PKG;
- kp->k_pkg_size = 3;
+ sc->sc_pkg_type = KBD_RMS_PKG;
+ sc->sc_pkg_size = 3;
break;
case 0xfc:
- kp->k_pkg_type = KBD_CLK_PKG;
- kp->k_pkg_size = 7;
+ sc->sc_pkg_type = KBD_CLK_PKG;
+ sc->sc_pkg_size = 7;
break;
case 0xfe:
- kp->k_pkg_type = KBD_JOY0_PKG;
- kp->k_pkg_size = 2;
+ sc->sc_pkg_type = KBD_JOY0_PKG;
+ sc->sc_pkg_size = 2;
break;
case 0xff:
- kp->k_pkg_type = KBD_JOY1_PKG;
- kp->k_pkg_size = 2;
+ sc->sc_pkg_type = KBD_JOY1_PKG;
+ sc->sc_pkg_size = 2;
break;
default:
printf("kbd: Unknown packet 0x%x\n", msg_start);
@@ -878,6 +887,7 @@ static void
kbd_getc(void *c, u_int *type, int *data)
{
int key;
+
key = kbdgetcn();
*data = KBD_SCANCODE(key);
@@ -887,8 +897,9 @@ kbd_getc(void *c, u_int *type, int *data
static void
kbd_pollc(void *c, int on)
{
+ struct kbd_softc *sc = &kbd_softc;
- kbd_softc.k_pollingmode = on;
+ sc->sc_pollingmode = on;
}
static void