git: a6c09f20e8e0 - main - psm: Swap the unit member in the softc for a device_t.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 21 Apr 2022 20:54:50 UTC
The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=a6c09f20e8e00bec7d9eb088b4f32dd38bf7f490 commit a6c09f20e8e00bec7d9eb088b4f32dd38bf7f490 Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2022-04-21 20:52:48 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2022-04-21 20:52:48 +0000 psm: Swap the unit member in the softc for a device_t. This entails various changes to make this driver more "modern" (new-bus vs pre-new-bus) using device_log() and device_printf() rather than psm%d. It also fixes the device_busy/unbusy calls to use sc->dev directly rather than looking the device_t up via the devclass and unit. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D35006 --- sys/dev/atkbdc/psm.c | 199 ++++++++++++++++++++++++--------------------------- 1 file changed, 92 insertions(+), 107 deletions(-) diff --git a/sys/dev/atkbdc/psm.c b/sys/dev/atkbdc/psm.c index 522aca691082..ed0f78bb3839 100644 --- a/sys/dev/atkbdc/psm.c +++ b/sys/dev/atkbdc/psm.c @@ -116,6 +116,10 @@ __FBSDID("$FreeBSD$"); if (verbose >= level) \ log args; \ } while (0) +#define VDLOG(level, ...) do { \ + if (verbose >= level) \ + device_log(__VA_ARGS__); \ +} while (0) #ifndef PSM_INPUT_TIMEOUT #define PSM_INPUT_TIMEOUT 2000000 /* 2 sec */ @@ -414,7 +418,7 @@ typedef struct elantechaction { /* driver control block */ struct psm_softc { /* Driver status information */ - int unit; + device_t dev; struct selinfo rsel; /* Process selecting for Input */ u_char state; /* Mouse driver state */ int config; /* driver configuration flags */ @@ -455,7 +459,7 @@ struct psm_softc { /* Driver status information */ int watchdog; /* watchdog timer flag */ struct callout callout; /* watchdog timer call out */ struct callout softcallout; /* buffer timer call out */ - struct cdev *dev; + struct cdev *cdev; struct cdev *bdev; int lasterr; int cmdcount; @@ -1045,9 +1049,8 @@ doinitialize(struct psm_softc *sc, mousemode_t *mode) case 3: case PSM_ACK: if (verbose) - log(LOG_DEBUG, - "psm%d: strange result for test aux port (%d).\n", - sc->unit, i); + device_log(sc->dev, LOG_DEBUG, + "strange result for test aux port (%d).\n", i); /* FALLTHROUGH */ case 0: /* no error */ break; @@ -1056,8 +1059,8 @@ doinitialize(struct psm_softc *sc, mousemode_t *mode) recover_from_error(kbdc); if (sc->config & PSM_CONFIG_IGNPORTERROR) break; - log(LOG_ERR, "psm%d: the aux port is not functioning (%d).\n", - sc->unit, i); + device_log(sc->dev, LOG_ERR, + "the aux port is not functioning (%d).\n", i); return (FALSE); } @@ -1073,8 +1076,8 @@ doinitialize(struct psm_softc *sc, mousemode_t *mode) */ if (!reset_aux_dev(kbdc)) { recover_from_error(kbdc); - log(LOG_ERR, "psm%d: failed to reset the aux device.\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to reset the aux device.\n"); return (FALSE); } } @@ -1084,8 +1087,8 @@ doinitialize(struct psm_softc *sc, mousemode_t *mode) * if the device can be enabled. */ if (!enable_aux_dev(kbdc) || !disable_aux_dev(kbdc)) { - log(LOG_ERR, "psm%d: failed to enable the aux device.\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to enable the aux device.\n"); return (FALSE); } empty_both_buffers(kbdc, 10); /* remove stray data if any */ @@ -1111,8 +1114,8 @@ doinitialize(struct psm_softc *sc, mousemode_t *mode) /* just check the status of the mouse */ if (get_mouse_status(kbdc, stat, 0, 3) < 3) - log(LOG_DEBUG, "psm%d: failed to get status (doinitialize).\n", - sc->unit); + device_log(sc->dev, LOG_DEBUG, + "failed to get status (doinitialize).\n"); return (TRUE); } @@ -1141,9 +1144,8 @@ doopen(struct psm_softc *sc, int command_byte) if (mux_enabled) set_active_aux_mux_port(sc->kbdc, sc->muxport); else - log(LOG_ERR, "psm%d: failed to enable " - "active multiplexing mode.\n", - sc->unit); + device_log(sc->dev, LOG_ERR, "failed to enable " + "active multiplexing mode.\n"); } mouse_ext_command(sc->kbdc, SYNAPTICS_READ_MODES); get_mouse_status(sc->kbdc, stat, 0, 3); @@ -1151,9 +1153,8 @@ doopen(struct psm_softc *sc, int command_byte) stat[1] == 0x47) && stat[2] == 0x40) { synaptics_set_mode(sc, synaptics_preferred_mode(sc)); - VLOG(5, (LOG_DEBUG, "psm%d: Synaptis Absolute Mode " - "hopefully restored\n", - sc->unit)); + VDLOG(5, sc->dev, LOG_DEBUG, "Synaptis Absolute Mode " + "hopefully restored\n"); } if (mux_enabled) disable_aux_mux(sc->kbdc); @@ -1165,14 +1166,12 @@ doopen(struct psm_softc *sc, int command_byte) */ if (sc->hw.model == MOUSE_MODEL_GENERIC) { if (tap_enabled > 0) { - VLOG(2, (LOG_DEBUG, - "psm%d: enable tap and drag gestures\n", - sc->unit)); + VDLOG(2, sc->dev, LOG_DEBUG, + "enable tap and drag gestures\n"); synaptics_set_mode(sc, synaptics_preferred_mode(sc)); } else if (tap_enabled == 0) { - VLOG(2, (LOG_DEBUG, - "psm%d: disable tap and drag gestures\n", - sc->unit)); + VDLOG(2, sc->dev, LOG_DEBUG, + "disable tap and drag gestures\n"); synaptics_set_mode(sc, synaptics_preferred_mode(sc)); } } @@ -1199,16 +1198,15 @@ doopen(struct psm_softc *sc, int command_byte) restore_controller(sc->kbdc, command_byte); /* mark this device is no longer available */ sc->state &= ~PSM_VALID; - log(LOG_ERR, - "psm%d: failed to enable the device (doopen).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to enable the device (doopen).\n"); return (EIO); } } if (get_mouse_status(sc->kbdc, stat, 0, 3) < 3) - log(LOG_DEBUG, "psm%d: failed to get status (doopen).\n", - sc->unit); + device_log(sc->dev, LOG_DEBUG, + "failed to get status (doopen).\n"); /* enable the aux port and interrupt */ if (!set_controller_command_byte(sc->kbdc, @@ -1218,9 +1216,8 @@ doopen(struct psm_softc *sc, int command_byte) /* CONTROLLER ERROR */ disable_aux_dev(sc->kbdc); restore_controller(sc->kbdc, command_byte); - log(LOG_ERR, - "psm%d: failed to enable the aux interrupt (doopen).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to enable the aux interrupt (doopen).\n"); return (EIO); } @@ -1250,9 +1247,8 @@ reinitialize(struct psm_softc *sc, int doinit) /* save the current controller command byte */ empty_both_buffers(sc->kbdc, 10); c = get_controller_command_byte(sc->kbdc); - VLOG(2, (LOG_DEBUG, - "psm%d: current command byte: %04x (reinitialize).\n", - sc->unit, c)); + VDLOG(2, sc->dev, LOG_DEBUG, + "current command byte: %04x (reinitialize).\n", c); /* enable the aux port but disable the aux interrupt and the keyboard */ if ((c == -1) || !set_controller_command_byte(sc->kbdc, @@ -1262,9 +1258,8 @@ reinitialize(struct psm_softc *sc, int doinit) /* CONTROLLER ERROR */ splx(s); kbdc_lock(sc->kbdc, FALSE); - log(LOG_ERR, - "psm%d: unable to set the command byte (reinitialize).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "unable to set the command byte (reinitialize).\n"); return (EIO); } @@ -1289,9 +1284,8 @@ reinitialize(struct psm_softc *sc, int doinit) /* the device has gone! */ restore_controller(sc->kbdc, c); sc->state &= ~PSM_VALID; - log(LOG_ERR, - "psm%d: the aux device has gone! (reinitialize).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "the aux device has gone! (reinitialize).\n"); err = ENXIO; } } @@ -1303,8 +1297,8 @@ reinitialize(struct psm_softc *sc, int doinit) /* enable the aux device and the port again */ err = doopen(sc, c); if (err != 0) - log(LOG_ERR, "psm%d: failed to enable the device " - "(reinitialize).\n", sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to enable the device (reinitialize).\n"); } else { /* restore the keyboard port and disable the aux port */ if (!set_controller_command_byte(sc->kbdc, @@ -1312,8 +1306,8 @@ reinitialize(struct psm_softc *sc, int doinit) (c & KBD_KBD_CONTROL_BITS) | KBD_DISABLE_AUX_PORT | KBD_DISABLE_AUX_INT)) { /* CONTROLLER ERROR */ - log(LOG_ERR, "psm%d: failed to disable the aux port " - "(reinitialize).\n", sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to disable the aux port (reinitialize).\n"); err = EIO; } } @@ -1370,7 +1364,6 @@ psmidentify(driver_t *driver, device_t parent) static int psmprobe(device_t dev) { - int unit = device_get_unit(dev); struct psm_softc *sc = device_get_softc(dev); int stat[3]; int command_byte; @@ -1392,7 +1385,7 @@ psmprobe(device_t dev) } bus_release_resource(dev, SYS_RES_IRQ, rid, sc->intr); - sc->unit = unit; + sc->dev = dev; sc->kbdc = atkbdc_open(device_get_unit(device_get_parent(dev))); if (sc->kbdc == NULL) return (ENXIO); @@ -1414,7 +1407,7 @@ psmprobe(device_t dev) device_set_desc(dev, "PS/2 Mouse"); if (!kbdc_lock(sc->kbdc, TRUE)) { - printf("psm%d: unable to lock the controller.\n", unit); + device_printf(dev, "unable to lock the controller.\n"); if (bootverbose) --verbose; return (ENXIO); @@ -1433,12 +1426,11 @@ psmprobe(device_t dev) mask = kbdc_get_device_mask(sc->kbdc) & ~KBD_AUX_CONTROL_BITS; command_byte = get_controller_command_byte(sc->kbdc); if (verbose) - printf("psm%d: current command byte:%04x\n", unit, - command_byte); + device_printf(dev, "current command byte:%04x\n", command_byte); if (command_byte == -1) { /* CONTROLLER ERROR */ - printf("psm%d: unable to get the current command byte value.\n", - unit); + device_printf(dev, + "unable to get the current command byte value.\n"); endprobe(ENXIO); } @@ -1456,7 +1448,7 @@ psmprobe(device_t dev) */ if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc)) restore_controller(sc->kbdc, command_byte); - printf("psm%d: unable to set the command byte.\n", unit); + device_printf(dev, "unable to set the command byte.\n"); endprobe(ENXIO); } write_controller_command(sc->kbdc, KBDC_ENABLE_AUX_PORT); @@ -1484,8 +1476,8 @@ psmprobe(device_t dev) case 3: case PSM_ACK: if (verbose) - printf("psm%d: strange result for test aux port " - "(%d).\n", unit, i); + device_printf(dev, "strange result for test aux port " + "(%d).\n", i); /* FALLTHROUGH */ case 0: /* no error */ break; @@ -1497,8 +1489,8 @@ psmprobe(device_t dev) if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc)) restore_controller(sc->kbdc, command_byte); if (verbose) - printf("psm%d: the aux port is not functioning (%d).\n", - unit, i); + device_printf(dev, + "the aux port is not functioning (%d).\n", i); endprobe(ENXIO); } @@ -1521,14 +1513,14 @@ psmprobe(device_t dev) if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc)) restore_controller(sc->kbdc, command_byte); if (verbose) - printf("psm%d: failed to reset the aux " - "device.\n", unit); + device_printf(dev, "failed to reset the aux " + "device.\n"); endprobe(ENXIO); } else if (!reset_aux_dev(sc->kbdc)) { recover_from_error(sc->kbdc); if (verbose >= 2) - printf("psm%d: failed to reset the aux device " - "(2).\n", unit); + device_printf(dev, "failed to reset the aux " + "device (2).\n"); } } @@ -1544,8 +1536,7 @@ psmprobe(device_t dev) if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc)) restore_controller(sc->kbdc, command_byte); if (verbose) - printf("psm%d: failed to enable the aux device.\n", - unit); + device_printf(dev, "failed to enable the aux device.\n"); endprobe(ENXIO); } @@ -1567,7 +1558,7 @@ psmprobe(device_t dev) if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc)) restore_controller(sc->kbdc, command_byte); if (verbose) - printf("psm%d: unknown device type (%d).\n", unit, + device_printf(dev, "unknown device type (%d).\n", sc->hw.hwid); endprobe(ENXIO); } @@ -1598,7 +1589,7 @@ psmprobe(device_t dev) for (i = 0; vendortype[i].probefunc != NULL; ++i) if ((*vendortype[i].probefunc)(sc, PROBE)) { if (verbose >= 2) - printf("psm%d: found %s\n", unit, + device_printf(dev, "found %s\n", model_name(vendortype[i].model)); break; } @@ -1628,7 +1619,7 @@ psmprobe(device_t dev) */ i = send_aux_command(sc->kbdc, PSMC_SET_DEFAULTS); if (verbose >= 2) - printf("psm%d: SET_DEFAULTS return code:%04x\n", unit, i); + device_printf(dev, "SET_DEFAULTS return code:%04x\n", i); #endif if (sc->config & PSM_CONFIG_RESOLUTION) sc->mode.resolution = @@ -1652,7 +1643,7 @@ psmprobe(device_t dev) * after ACK from the mouse. */ if (get_mouse_status(sc->kbdc, stat, 0, 3) < 3) - printf("psm%d: failed to get status.\n", unit); + device_printf(dev, "failed to get status.\n"); else { /* * When in its native mode, some mice operate with different @@ -1673,7 +1664,7 @@ psmprobe(device_t dev) */ if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc)) restore_controller(sc->kbdc, command_byte); - printf("psm%d: unable to set the command byte.\n", unit); + device_printf(dev, "unable to set the command byte.\n"); endprobe(ENXIO); } @@ -1975,7 +1966,7 @@ psmattach(device_t dev) mda.mda_mode = 0666; mda.mda_si_drv1 = sc; - if ((error = make_dev_s(&mda, &sc->dev, "psm%d", unit)) != 0) + if ((error = make_dev_s(&mda, &sc->cdev, "psm%d", unit)) != 0) goto out; if ((error = make_dev_s(&mda, &sc->bdev, "bpsm%d", unit)) != 0) goto out; @@ -2020,16 +2011,16 @@ psmattach(device_t dev) } if (!verbose) - printf("psm%d: model %s, device ID %d\n", - unit, model_name(sc->hw.model), sc->hw.hwid & 0x00ff); + device_printf(dev, "model %s, device ID %d\n", + model_name(sc->hw.model), sc->hw.hwid & 0x00ff); else { - printf("psm%d: model %s, device ID %d-%02x, %d buttons\n", - unit, model_name(sc->hw.model), sc->hw.hwid & 0x00ff, + device_printf(dev, "model %s, device ID %d-%02x, %d buttons\n", + model_name(sc->hw.model), sc->hw.hwid & 0x00ff, sc->hw.hwid >> 8, sc->hw.buttons); - printf("psm%d: config:%08x, flags:%08x, packet size:%d\n", - unit, sc->config, sc->flags, sc->mode.packetsize); - printf("psm%d: syncmask:%02x, syncbits:%02x%s\n", - unit, sc->mode.syncmask[0], sc->mode.syncmask[1], + device_printf(dev, "config:%08x, flags:%08x, packet size:%d\n", + sc->config, sc->flags, sc->mode.packetsize); + device_printf(dev, "syncmask:%02x, syncbits:%02x%s\n", + sc->mode.syncmask[0], sc->mode.syncmask[1], sc->config & PSM_CONFIG_NOCHECKSYNC ? " (sync not checked)" : ""); } @@ -2040,7 +2031,7 @@ out: if (error != 0) { bus_release_resource(dev, SYS_RES_IRQ, rid, sc->intr); if (sc->dev != NULL) - destroy_dev(sc->dev); + destroy_dev(sc->cdev); if (sc->bdev != NULL) destroy_dev(sc->bdev); } @@ -2066,7 +2057,7 @@ psmdetach(device_t dev) bus_teardown_intr(dev, sc->intr, sc->ih); bus_release_resource(dev, SYS_RES_IRQ, rid, sc->intr); - destroy_dev(sc->dev); + destroy_dev(sc->cdev); destroy_dev(sc->bdev); callout_drain(&sc->callout); @@ -2170,7 +2161,7 @@ psm_cdev_open(struct cdev *dev, int flag, int fmt, struct thread *td) if (sc->state & PSM_OPEN) return (EBUSY); - device_busy(devclass_get_device(psm_devclass, sc->unit)); + device_busy(sc->dev); #ifdef EVDEV_SUPPORT /* Already opened by evdev */ @@ -2181,7 +2172,7 @@ psm_cdev_open(struct cdev *dev, int flag, int fmt, struct thread *td) if (err == 0) sc->state |= PSM_OPEN; else - device_unbusy(devclass_get_device(psm_devclass, sc->unit)); + device_unbusy(sc->dev); return (err); } @@ -2212,7 +2203,7 @@ psm_cdev_close(struct cdev *dev, int flag, int fmt, struct thread *td) funsetown(&sc->async); sc->async = NULL; } - device_unbusy(devclass_get_device(psm_devclass, sc->unit)); + device_unbusy(sc->dev); } return (err); @@ -2266,9 +2257,8 @@ psmopen(struct psm_softc *sc) /* CONTROLLER ERROR; do you know how to get out of this? */ kbdc_lock(sc->kbdc, FALSE); splx(s); - log(LOG_ERR, - "psm%d: unable to set the command byte (psmopen).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "unable to set the command byte (psmopen).\n"); return (EIO); } /* @@ -2313,9 +2303,8 @@ psmclose(struct psm_softc *sc) kbdc_get_device_mask(sc->kbdc), KBD_DISABLE_KBD_PORT | KBD_DISABLE_KBD_INT | KBD_ENABLE_AUX_PORT | KBD_DISABLE_AUX_INT)) { - log(LOG_ERR, - "psm%d: failed to disable the aux int (psmclose).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to disable the aux int (psmclose).\n"); /* CONTROLLER ERROR; * NOTE: we shall force our way through. Because the only * ill effect we shall see is that we may not be able @@ -2340,15 +2329,13 @@ psmclose(struct psm_softc *sc) * It's OK because the interrupt routine will discard * any data from the mouse hereafter. */ - log(LOG_ERR, - "psm%d: failed to disable the device (psmclose).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to disable the device (psmclose).\n"); } if (get_mouse_status(sc->kbdc, stat, 0, 3) < 3) - log(LOG_DEBUG, - "psm%d: failed to get status (psmclose).\n", - sc->unit); + device_log(sc->dev, LOG_DEBUG, + "failed to get status (psmclose).\n"); } if (!set_controller_command_byte(sc->kbdc, @@ -2359,9 +2346,8 @@ psmclose(struct psm_softc *sc) * CONTROLLER ERROR; * we shall ignore this error; see the above comment. */ - log(LOG_ERR, - "psm%d: failed to disable the aux port (psmclose).\n", - sc->unit); + device_log(sc->dev, LOG_ERR, + "failed to disable the aux port (psmclose).\n"); } /* remove anything left in the output buffer */ @@ -2601,10 +2587,10 @@ psmwrite(struct cdev *dev, struct uio *uio, int flag) if (error) break; for (i = 0; i < l; i++) { - VLOG(4, (LOG_DEBUG, "psm: cmd 0x%x\n", buf[i])); + VDLOG(4, sc->dev, LOG_DEBUG, "cmd 0x%x\n", buf[i]); if (!write_aux_command(sc->kbdc, buf[i])) { - VLOG(2, (LOG_DEBUG, - "psm: cmd 0x%x failed.\n", buf[i])); + VDLOG(2, sc->dev, LOG_DEBUG, + "cmd 0x%x failed.\n", buf[i]); return (reinitialize(sc, FALSE)); } } @@ -2932,7 +2918,7 @@ psmtimeout(void *arg) sc = (struct psm_softc *)arg; s = spltty(); if (sc->watchdog && kbdc_lock(sc->kbdc, TRUE)) { - VLOG(6, (LOG_DEBUG, "psm%d: lost interrupt?\n", sc->unit)); + VDLOG(6, sc->dev, LOG_DEBUG, "lost interrupt?\n"); psmintr(sc); kbdc_lock(sc->kbdc, FALSE); } @@ -6333,7 +6319,7 @@ enable_synaptics_mux(struct psm_softc *sc, enum probearg arg) */ reset_kbd(kbdc); if (!enable_aux_dev(kbdc) || !disable_aux_dev(kbdc)) { - printf("psm%d: AUX MUX hang detected!\n", sc->unit); + device_printf(sc->dev, "AUX MUX hang detected!\n"); printf("Consider adding hw.psm.mux_disabled=1 to " "loader tunables\n"); } @@ -6445,7 +6431,7 @@ enable_synaptics(struct psm_softc *sc, enum probearg arg) } psmcpnp = devclass_get_device(devclass_find(PSMCPNP_DRIVER_NAME), - sc->unit); + device_get_unit(sc->dev)); psmcpnp_sc = (psmcpnp != NULL) ? device_get_softc(psmcpnp) : NULL; /* Set the different capabilities when they exist. */ @@ -7428,10 +7414,9 @@ static int psmresume(device_t dev) { struct psm_softc *sc = device_get_softc(dev); - int unit = device_get_unit(dev); int err; - VLOG(2, (LOG_NOTICE, "psm%d: system resume hook called.\n", unit)); + VDLOG(2, dev, LOG_NOTICE, "system resume hook called.\n"); if ((sc->config & (PSM_CONFIG_HOOKRESUME | PSM_CONFIG_INITAFTERSUSPEND)) == 0) @@ -7448,7 +7433,7 @@ psmresume(device_t dev) wakeup(sc); } - VLOG(2, (LOG_DEBUG, "psm%d: system resume hook exiting.\n", unit)); + VDLOG(2, dev, LOG_DEBUG, "system resume hook exiting.\n"); return (err); }