--- Gnu-Mach/i386/i386at/lpr.c 2020/09/02 04:36:58 1.1 +++ Gnu-Mach/i386/i386at/lpr.c 2020/09/02 04:55:39 1.1.1.5 @@ -28,60 +28,28 @@ * All rights reserved. */ -#include #if NLPR > 0 -#include -#include -#ifdef MACH_KERNEL #include #include +#include +#include #include #include -#include +#include #include #include -#else MACH_KERNEL -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif MACH_KERNEL #include #include #include -#include +#include +#include -#if NPAR > 0 -extern int parattach(); -#endif - -#if NDE6C > 0 -extern int de6cattach(); -#endif - -extern void splx(); -extern spl_t spltty(); -extern void timeout(); -extern void ttrstrt(); - /* * Driver information for auto-configuration stuff. */ -int lprprobe(), lprintr(), lprstart(), lprstop(); -void lprattach(struct bus_device *); -#ifdef MACH_KERNEL -int lprstop(), lprgetstat(), lprsetstat(); -#endif MACH_KERNEL - struct bus_device *lprinfo[NLPR]; /* ??? */ static vm_offset_t lpr_std[NLPR] = { 0 }; @@ -93,14 +61,16 @@ struct tty lpr_tty[NLPR]; int lpr_alive[NLPR]; +int lprprobe(port, dev) -struct bus_device *dev; +vm_offset_t port; +struct bus_ctlr *dev; { u_short addr = (u_short) dev->address; int unit = dev->unit; int ret; - if ((unit < 0) || (unit > NLPR)) { + if ((unit < 0) || (unit >= NLPR)) { printf("com %d out of range\n", unit); return(0); } @@ -123,54 +93,41 @@ void lprattach(struct bus_device *dev) { u_char unit = dev->unit; u_short addr = (u_short) dev->address; - struct tty *tp = &lpr_tty[unit]; take_dev_irq(dev); - printf(", port = %x, spl = %d, pic = %d.", + printf(", port = %lx, spl = %ld, pic = %d.", dev->address, dev->sysdep, dev->sysdep1); lprinfo[unit] = dev; outb(INTR_ENAB(addr), inb(INTR_ENAB(addr)) & 0x0f); -#if NPAR > 0 - parattach(dev); -#endif - -#if NDE6C > 0 && !defined(LINUX_DEV) - de6cattach(dev); -#endif return; } -lpropen(dev, flag, ior) -int dev; -int flag; -#ifdef MACH_KERNEL -io_req_t ior; -#endif MACH_KERNEL +int +lpropen(dev_t dev, int flag, io_req_t ior) { -int unit = minor(dev); -struct bus_device *isai; -struct tty *tp; -u_short addr; - - if (unit >= NLPR || (isai = lprinfo[unit]) == 0 || isai->alive == 0) - return(ENXIO); + int unit = minor(dev); + struct bus_device *isai; + struct tty *tp; + u_short addr; + + if (unit >= NLPR) + return D_NO_SUCH_DEVICE; + + isai = lprinfo[unit]; + if (isai == NULL || !isai->alive) + return D_NO_SUCH_DEVICE; + tp = &lpr_tty[unit]; -#ifndef MACH_KERNEL - if (tp->t_state & TS_XCLUDE && u.u_uid != 0) - return(EBUSY); -#endif MACH_KERNEL addr = (u_short) isai->address; tp->t_dev = dev; - tp->t_addr = *(caddr_t *)&addr; + tp->t_addr = addr; tp->t_oproc = lprstart; tp->t_state |= TS_WOPEN; -#ifdef MACH_KERNEL tp->t_stop = lprstop; tp->t_getstat = lprgetstat; tp->t_setstat = lprsetstat; -#endif MACH_KERNEL if ((tp->t_state & TS_ISOPEN) == 0) ttychars(tp); outb(INTR_ENAB(addr), inb(INTR_ENAB(addr)) | 0x10); @@ -178,17 +135,15 @@ u_short addr; return (char_open(dev, tp, flag, ior)); } +void lprclose(dev, flag) -int dev; +dev_t dev; int flag; { int unit = minor(dev); struct tty *tp = &lpr_tty[unit]; u_short addr = (u_short) lprinfo[unit]->address; -#ifndef MACH_KERNEL - (*linesw[tp->t_line].l_close)(tp); -#endif MACH_KERNEL ttyclose(tp); if (tp->t_state&TS_HUPCLS || (tp->t_state&TS_ISOPEN)==0) { outb(INTR_ENAB(addr), inb(INTR_ENAB(addr)) & 0x0f); @@ -196,26 +151,28 @@ u_short addr = (u_short) lprinfo[unit] } } -#ifdef MACH_KERNEL +int lprread(dev, ior) -int dev; +dev_t dev; io_req_t ior; { return char_read(&lpr_tty[minor(dev)], ior); } +int lprwrite(dev, ior) -int dev; +dev_t dev; io_req_t ior; { return char_write(&lpr_tty[minor(dev)], ior); } +int lprportdeath(dev, port) dev_t dev; mach_port_t port; { - return (tty_portdeath(&lpr_tty[minor(dev)], port)); + return (tty_portdeath(&lpr_tty[minor(dev)], (ipc_port_t)port)); } io_return_t @@ -223,7 +180,7 @@ lprgetstat(dev, flavor, data, count) dev_t dev; int flavor; int *data; /* pointer to OUT array */ -unsigned int *count; /* out */ +natural_t *count; /* out */ { io_return_t result = D_SUCCESS; int unit = minor(dev); @@ -237,16 +194,14 @@ unsigned int *count; /* out */ } io_return_t -lprsetstat(dev, flavor, data, count) -dev_t dev; -int flavor; -int * data; -unsigned int count; +lprsetstat( + dev_t dev, + int flavor, + int * data, + natural_t count) { io_return_t result = D_SUCCESS; int unit = minor(dev); - u_short dev_addr = (u_short) lprinfo[unit]->address; - int s; switch (flavor) { default: @@ -257,48 +212,10 @@ unsigned int count; } return (D_SUCCESS); } -#else MACH_KERNEL -int lprwrite(dev, uio) - int dev; - struct uio *uio; -{ - struct tty *tp= &lpr_tty[minor(dev)]; - - return ((*linesw[tp->t_line].l_write)(tp, uio)); -} - -int lprioctl(dev, cmd, addr, mode) - int dev; - int cmd; - caddr_t addr; - int mode; -{ - int error; - spl_t s; - int unit = minor(dev); - struct tty *tp = &lpr_tty[unit]; - - error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, addr,mode); - if (error >= 0) - return(error); - error = ttioctl(tp, cmd, addr,mode); - if (error >= 0) - return (error); - s = spltty(); - switch (cmd) { - default: - splx(s); - return(ENOTTY); - } - splx(s); - return(0); -} -#endif MACH_KERNEL -int lprintr(unit) -int unit; +void lprintr(int unit) { - register struct tty *tp = &lpr_tty[unit]; + struct tty *tp = &lpr_tty[unit]; if ((tp->t_state & TS_ISOPEN) == 0) return; @@ -310,48 +227,38 @@ int unit; lprstart(tp); } -int lprstart(tp) -struct tty *tp; +void lprstart(struct tty *tp) { spl_t s = spltty(); u_short addr = (natural_t) tp->t_addr; int status = inb(STATUS(addr)); - char nch; + int nch; if (tp->t_state & (TS_TIMEOUT|TS_TTSTOP|TS_BUSY)) { splx(s); - return(0); + return; } if (status & 0x20) { printf("Printer out of paper!\n"); splx(s); - return(0); + return; } if (tp->t_outq.c_cc <= TTLOWAT(tp)) { -#ifdef MACH_KERNEL tt_write_wakeup(tp); -#else MACH_KERNEL - if (tp->t_state & TS_ASLEEP) { - tp->t_state &= ~TS_ASLEEP; - wakeup ((caddr_t)&tp->t_outq); - } - if (tp->t_wsel) { - selwakeup(tp->t_wsel, tp->t_state & TS_WCOLL); - tp->t_wsel = 0; - tp->t_state &= ~TS_WCOLL; - } -#endif MACH_KERNEL } if (tp->t_outq.c_cc == 0) { splx(s); - return(0); + return; } -#ifdef MACH_KERNEL nch = getc(&tp->t_outq); + if (nch == -1) { + splx(s); + return; + } if ((tp->t_flags & LITOUT) == 0 && (nch & 0200)) { - timeout(ttrstrt, (char *)tp, (nch & 0x7f) + 6); + timeout((timer_func_t *)ttrstrt, (char *)tp, (nch & 0x7f) + 6); tp->t_state |= TS_TIMEOUT; return; } @@ -359,61 +266,31 @@ struct tty *tp; outb(INTR_ENAB(addr),inb(INTR_ENAB(addr)) | 0x01); outb(INTR_ENAB(addr),inb(INTR_ENAB(addr)) & 0x1e); tp->t_state |= TS_BUSY; -#else MACH_KERNEL - if (tp->t_flags & (RAW|LITOUT)) - nch = ndqb(&tp->t_outq,0); - else { - nch = ndqb(&tp->t_outq, 0200); - if (nch == 0) { - nch = getc(&tp->t_outq); - timeout(ttrstrt,(caddr_t)tp,(nch&0x7f)+6); - tp->t_state |= TS_TIMEOUT; - splx(s); - return(0); - } - } - if (nch) { - nch=getc(&tp->t_outq); - outb(DATA(addr), nch); - outb(INTR_ENAB(addr),inb(INTR_ENAB(addr)) | 0x01); - outb(INTR_ENAB(addr),inb(INTR_ENAB(addr)) & 0x1e); - tp->t_state |= TS_BUSY; - } -#endif MACH_KERNEL splx(s); - return(0); + return; } -#ifdef MACH_KERNEL -lprstop(tp, flags) -register struct tty *tp; -int flags; +void +lprstop( + struct tty *tp, + int flags) { if ((tp->t_state & TS_BUSY) && (tp->t_state & TS_TTSTOP) == 0) tp->t_state |= TS_FLUSH; } -#else MACH_KERNEL -int lprstop(tp, flag) -struct tty *tp; -{ - int s = spltty(); - - if ((tp->t_state&TS_BUSY) && (!(tp->t_state&TS_TTSTOP))) - tp->t_state |= TS_FLUSH; - splx(s); -} -#endif MACH_KERNEL -lprpr(unit) +int +lprpr(int unit) { lprpr_addr(lprinfo[unit]->address); return 0; } -lprpr_addr(addr) +void +lprpr_addr(unsigned short addr) { printf("DATA(%x) %x, STATUS(%x) %x, INTR_ENAB(%x) %x\n", DATA(addr), inb(DATA(addr)), STATUS(addr), inb(STATUS(addr)), INTR_ENAB(addr), inb(INTR_ENAB(addr))); } -#endif NLPR +#endif /* NLPR */