Lines Matching +full:conf +full:- +full:pd

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2000-2004
40 #include <sys/conf.h> /* cdevsw stuff */
68 /* Per-port buffer size */
83 #define pbio_addr(dev) ((dev)->si_drv1)
104 char buff[PBIO_BUFSIZ]; /* Per-port data buffer */
111 struct portdata pd[PBIO_NPORTS];/* Per port data */ member
113 /* The real port is write-only */
141 return (bus_read_1(scp->res, off)); in pbinb()
148 bus_write_1(scp->res, off, val); in pboutb()
163 scp->res = bus_alloc_resource_anywhere(dev, SYS_RES_IOPORT, &rid, in pbioprobe()
165 if (scp->res == NULL) in pbioprobe()
177 rman_get_start(scp->res), pbinb(scp, PBIO_CFG)); in pbioprobe()
182 bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->res); in pbioprobe()
189 bus_release_resource(dev, SYS_RES_IOPORT, rid, sc->res); in pbioprobe()
196 bus_release_resource(dev, SYS_RES_IOPORT, rid, scp->res); in pbioprobe()
217 sc->res = bus_alloc_resource_anywhere(dev, SYS_RES_IOPORT, &rid, in pbioattach()
219 if (sc->res == NULL) in pbioattach()
225 sc->iomode = 0x9b; /* All ports to input */ in pbioattach()
227 sx_init(&sc->lock, "pbio"); in pbioattach()
236 (void)make_dev_s(&args, &sc->pd[i].port, "pbio%d%s", unit, in pbioattach()
252 sx_xlock(&scp->lock); in pbioioctl()
255 scp->pd[port].diff = *(int *)data; in pbioioctl()
258 scp->pd[port].ipace = *(int *)data; in pbioioctl()
261 scp->pd[port].opace = *(int *)data; in pbioioctl()
264 *(int *)data = scp->pd[port].diff; in pbioioctl()
267 *(int *)data = scp->pd[port].ipace; in pbioioctl()
270 *(int *)data = scp->pd[port].opace; in pbioioctl()
275 sx_xunlock(&scp->lock); in pbioioctl()
296 ocfg = scp->iomode; in pbioopen()
299 sx_xlock(&scp->lock); in pbioopen()
302 pboutb(scp, PBIO_CFG, scp->iomode = (ocfg & (~portbit))); in pbioopen()
305 pboutb(scp, PBIO_CFG, scp->iomode = (ocfg | portbit)); in pbioopen()
308 sx_xunlock(&scp->lock); in pbioopen()
340 if (scp->pd[port].diff) { in portval()
341 if (*val != scp->pd[port].oldval) { in portval()
342 scp->pd[port].oldval = *val; in portval()
345 err = pause_sig("pbiopl", max(1, scp->pd[port].ipace)); in portval()
364 sx_xlock(&scp->lock); in pbioread()
365 while (uio->uio_resid > 0) { in pbioread()
366 toread = min(uio->uio_resid, PBIO_BUFSIZ); in pbioread()
367 if ((err = uiomove(scp->pd[port].buff, toread, uio)) != 0) in pbioread()
372 scp->pd[port].buff[i] = val; in pbioread()
373 if (!scp->pd[port].diff && scp->pd[port].ipace) in pbioread()
374 pause_sig("pbioip", scp->pd[port].ipace); in pbioread()
377 sx_xunlock(&scp->lock); in pbioread()
392 sx_xlock(&scp->lock); in pbiowrite()
393 while (uio->uio_resid > 0) { in pbiowrite()
394 towrite = min(uio->uio_resid, PBIO_BUFSIZ); in pbiowrite()
395 if ((ret = uiomove(scp->pd[port].buff, towrite, uio)) != 0) in pbiowrite()
398 val = scp->pd[port].buff[i]; in pbiowrite()
419 if (scp->pd[port].opace) in pbiowrite()
420 pause_sig("pbioop", scp->pd[port].opace); in pbiowrite()
423 sx_xunlock(&scp->lock); in pbiowrite()