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