Module Name: src Committed By: soren Date: Wed Jul 31 14:31:01 UTC 2013
Modified Files: src/sys/dev/pci: com_puc.c lpt_puc.c Log Message: On x86, print the I/O address of lpt_puc as for com_puc so that hacks using iopl/ioperm can be told where to find the parallel port. Closes PR kern/43683. To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/dev/pci/com_puc.c cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/lpt_puc.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/dev/pci/com_puc.c diff -u src/sys/dev/pci/com_puc.c:1.20 src/sys/dev/pci/com_puc.c:1.21 --- src/sys/dev/pci/com_puc.c:1.20 Mon Jul 22 13:42:17 2013 +++ src/sys/dev/pci/com_puc.c Wed Jul 31 14:31:01 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: com_puc.c,v 1.20 2013/07/22 13:42:17 soren Exp $ */ +/* $NetBSD: com_puc.c,v 1.21 2013/07/31 14:31:01 soren Exp $ */ /* * Copyright (c) 1998 Christopher G. Demetriou. All rights reserved. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: com_puc.c,v 1.20 2013/07/22 13:42:17 soren Exp $"); +__KERNEL_RCSID(0, "$NetBSD: com_puc.c,v 1.21 2013/07/31 14:31:01 soren Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -90,25 +90,6 @@ com_puc_attach(device_t parent, device_t COM_INIT_REGS(sc->sc_regs, aa->t, aa->h, aa->a); sc->sc_frequency = aa->flags & PUC_COM_CLOCKMASK; - /* Enable Cyberserial 8X clock. */ - if (aa->flags & (PUC_COM_SIIG10x|PUC_COM_SIIG20x)) { - int usrregno; - - if (aa->flags & PUC_PORT_USR3) usrregno = 3; - else if (aa->flags & PUC_PORT_USR2) usrregno = 2; - else if (aa->flags & PUC_PORT_USR1) usrregno = 1; - else /* (aa->flags & PUC_PORT_USR0) */ usrregno = 0; - - if (aa->flags & PUC_COM_SIIG10x) - write_siig10x_usrreg(aa->pc, aa->tag, usrregno, 1); - else - write_siig20x_usrreg(aa->pc, aa->tag, usrregno, 1); - } else { - if (!pmf_device_register(self, NULL, com_resume)) - aprint_error_dev(self, - "couldn't establish power handler\n"); - } - intrstr = pci_intr_string(aa->pc, aa->intrhandle); psc->sc_ih = pci_intr_establish(aa->pc, aa->intrhandle, IPL_SERIAL, comintr, sc); @@ -131,10 +112,28 @@ com_puc_attach(device_t parent, device_t if (aa->h < 0x10000) aprint_normal("ioaddr 0x%04lx, ", aa->h); #endif - aprint_normal("interrupting at %s\n", intrstr); - aprint_normal("%s", device_xname(self)); + /* Enable Cyberserial 8X clock. */ + if (aa->flags & (PUC_COM_SIIG10x|PUC_COM_SIIG20x)) { + int usrregno; + + if (aa->flags & PUC_PORT_USR3) usrregno = 3; + else if (aa->flags & PUC_PORT_USR2) usrregno = 2; + else if (aa->flags & PUC_PORT_USR1) usrregno = 1; + else /* (aa->flags & PUC_PORT_USR0) */ usrregno = 0; + + if (aa->flags & PUC_COM_SIIG10x) + write_siig10x_usrreg(aa->pc, aa->tag, usrregno, 1); + else + write_siig20x_usrreg(aa->pc, aa->tag, usrregno, 1); + } else { + if (!pmf_device_register(self, NULL, com_resume)) + aprint_error_dev(self, + "couldn't establish power handler\n"); + } + + aprint_normal("%s", device_xname(self)); com_attach_subr(sc); } Index: src/sys/dev/pci/lpt_puc.c diff -u src/sys/dev/pci/lpt_puc.c:1.15 src/sys/dev/pci/lpt_puc.c:1.16 --- src/sys/dev/pci/lpt_puc.c:1.15 Mon Jul 22 13:42:17 2013 +++ src/sys/dev/pci/lpt_puc.c Wed Jul 31 14:31:01 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: lpt_puc.c,v 1.15 2013/07/22 13:42:17 soren Exp $ */ +/* $NetBSD: lpt_puc.c,v 1.16 2013/07/31 14:31:01 soren Exp $ */ /* * Copyright (c) 1998 Christopher G. Demetriou. All rights reserved. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lpt_puc.c,v 1.15 2013/07/22 13:42:17 soren Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lpt_puc.c,v 1.16 2013/07/31 14:31:01 soren Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -75,22 +75,36 @@ lpt_puc_attach(device_t parent, device_t sc->sc_iot = aa->t; sc->sc_ioh = aa->h; + aprint_naive(": Parallel port"); + aprint_normal(": "); + intrstr = pci_intr_string(aa->pc, aa->intrhandle); sc->sc_ih = pci_intr_establish(aa->pc, aa->intrhandle, IPL_TTY, lptintr, sc); if (sc->sc_ih == NULL) { - aprint_error(": couldn't establish interrupt"); + aprint_error("couldn't establish interrupt"); if (intrstr != NULL) aprint_error(" at %s", intrstr); aprint_error("\n"); return; } - aprint_normal(": interrupting at %s\n", intrstr); - lpt_attach_subr(sc); +#if defined(amd64) || defined(i386) + /* + * Parallel ports are sometimes used for improvised GPIO by + * userspace programs which need to know the port's I/O address. + * Print the address here so the user doesn't have to dig through + * PCI configuration space to find it. + */ + if (aa->h < 0x10000) + aprint_normal("ioaddr 0x%04lx, ", aa->h); +#endif + aprint_normal("interrupting at %s\n", intrstr); if (!pmf_device_register(self, NULL, NULL)) aprint_error_dev(self, "couldn't establish power handler\n"); + + lpt_attach_subr(sc); } CFATTACH_DECL_NEW(lpt_puc, sizeof(struct lpt_softc),