.. | .. |
---|
284 | 284 | * port callback had to be deferred because the disconnect mutex could not be |
---|
285 | 285 | * obtained at the time. |
---|
286 | 286 | */ |
---|
287 | | -static void send_deferred_urbs(unsigned long _mos_parport) |
---|
| 287 | +static void send_deferred_urbs(struct tasklet_struct *t) |
---|
288 | 288 | { |
---|
289 | 289 | int ret_val; |
---|
290 | 290 | unsigned long flags; |
---|
291 | | - struct mos7715_parport *mos_parport = (void *)_mos_parport; |
---|
| 291 | + struct mos7715_parport *mos_parport = from_tasklet(mos_parport, t, |
---|
| 292 | + urb_tasklet); |
---|
292 | 293 | struct urbtracker *urbtrack, *tmp; |
---|
293 | 294 | struct list_head *cursor, *next; |
---|
294 | 295 | struct device *dev; |
---|
.. | .. |
---|
720 | 721 | INIT_LIST_HEAD(&mos_parport->deferred_urbs); |
---|
721 | 722 | usb_set_serial_data(serial, mos_parport); /* hijack private pointer */ |
---|
722 | 723 | mos_parport->serial = serial; |
---|
723 | | - tasklet_init(&mos_parport->urb_tasklet, send_deferred_urbs, |
---|
724 | | - (unsigned long) mos_parport); |
---|
| 724 | + tasklet_setup(&mos_parport->urb_tasklet, send_deferred_urbs); |
---|
725 | 725 | init_completion(&mos_parport->syncmsg_compl); |
---|
726 | 726 | |
---|
727 | 727 | /* cycle parallel port reset bit */ |
---|
.. | .. |
---|
1792 | 1792 | return 0; |
---|
1793 | 1793 | } |
---|
1794 | 1794 | |
---|
1795 | | -static int set_modem_info(struct moschip_port *mos7720_port, unsigned int cmd, |
---|
1796 | | - unsigned int __user *value) |
---|
| 1795 | +static int get_serial_info(struct tty_struct *tty, |
---|
| 1796 | + struct serial_struct *ss) |
---|
1797 | 1797 | { |
---|
1798 | | - unsigned int mcr; |
---|
1799 | | - unsigned int arg; |
---|
| 1798 | + struct usb_serial_port *port = tty->driver_data; |
---|
| 1799 | + struct moschip_port *mos7720_port = usb_get_serial_port_data(port); |
---|
1800 | 1800 | |
---|
1801 | | - struct usb_serial_port *port; |
---|
1802 | | - |
---|
1803 | | - if (mos7720_port == NULL) |
---|
1804 | | - return -1; |
---|
1805 | | - |
---|
1806 | | - port = (struct usb_serial_port *)mos7720_port->port; |
---|
1807 | | - mcr = mos7720_port->shadowMCR; |
---|
1808 | | - |
---|
1809 | | - if (copy_from_user(&arg, value, sizeof(int))) |
---|
1810 | | - return -EFAULT; |
---|
1811 | | - |
---|
1812 | | - switch (cmd) { |
---|
1813 | | - case TIOCMBIS: |
---|
1814 | | - if (arg & TIOCM_RTS) |
---|
1815 | | - mcr |= UART_MCR_RTS; |
---|
1816 | | - if (arg & TIOCM_DTR) |
---|
1817 | | - mcr |= UART_MCR_RTS; |
---|
1818 | | - if (arg & TIOCM_LOOP) |
---|
1819 | | - mcr |= UART_MCR_LOOP; |
---|
1820 | | - break; |
---|
1821 | | - |
---|
1822 | | - case TIOCMBIC: |
---|
1823 | | - if (arg & TIOCM_RTS) |
---|
1824 | | - mcr &= ~UART_MCR_RTS; |
---|
1825 | | - if (arg & TIOCM_DTR) |
---|
1826 | | - mcr &= ~UART_MCR_RTS; |
---|
1827 | | - if (arg & TIOCM_LOOP) |
---|
1828 | | - mcr &= ~UART_MCR_LOOP; |
---|
1829 | | - break; |
---|
1830 | | - |
---|
1831 | | - } |
---|
1832 | | - |
---|
1833 | | - mos7720_port->shadowMCR = mcr; |
---|
1834 | | - write_mos_reg(port->serial, port->port_number, MOS7720_MCR, |
---|
1835 | | - mos7720_port->shadowMCR); |
---|
1836 | | - |
---|
1837 | | - return 0; |
---|
1838 | | -} |
---|
1839 | | - |
---|
1840 | | -static int get_serial_info(struct moschip_port *mos7720_port, |
---|
1841 | | - struct serial_struct __user *retinfo) |
---|
1842 | | -{ |
---|
1843 | | - struct serial_struct tmp; |
---|
1844 | | - |
---|
1845 | | - memset(&tmp, 0, sizeof(tmp)); |
---|
1846 | | - |
---|
1847 | | - tmp.type = PORT_16550A; |
---|
1848 | | - tmp.line = mos7720_port->port->minor; |
---|
1849 | | - tmp.port = mos7720_port->port->port_number; |
---|
1850 | | - tmp.irq = 0; |
---|
1851 | | - tmp.xmit_fifo_size = NUM_URBS * URB_TRANSFER_BUFFER_SIZE; |
---|
1852 | | - tmp.baud_base = 9600; |
---|
1853 | | - tmp.close_delay = 5*HZ; |
---|
1854 | | - tmp.closing_wait = 30*HZ; |
---|
1855 | | - |
---|
1856 | | - if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) |
---|
1857 | | - return -EFAULT; |
---|
| 1801 | + ss->type = PORT_16550A; |
---|
| 1802 | + ss->line = mos7720_port->port->minor; |
---|
| 1803 | + ss->port = mos7720_port->port->port_number; |
---|
| 1804 | + ss->irq = 0; |
---|
| 1805 | + ss->xmit_fifo_size = NUM_URBS * URB_TRANSFER_BUFFER_SIZE; |
---|
| 1806 | + ss->baud_base = 9600; |
---|
| 1807 | + ss->close_delay = 5*HZ; |
---|
| 1808 | + ss->closing_wait = 30*HZ; |
---|
1858 | 1809 | return 0; |
---|
1859 | 1810 | } |
---|
1860 | 1811 | |
---|
.. | .. |
---|
1873 | 1824 | dev_dbg(&port->dev, "%s TIOCSERGETLSR\n", __func__); |
---|
1874 | 1825 | return get_lsr_info(tty, mos7720_port, |
---|
1875 | 1826 | (unsigned int __user *)arg); |
---|
1876 | | - |
---|
1877 | | - /* FIXME: These should be using the mode methods */ |
---|
1878 | | - case TIOCMBIS: |
---|
1879 | | - case TIOCMBIC: |
---|
1880 | | - dev_dbg(&port->dev, "%s TIOCMSET/TIOCMBIC/TIOCMSET\n", __func__); |
---|
1881 | | - return set_modem_info(mos7720_port, cmd, |
---|
1882 | | - (unsigned int __user *)arg); |
---|
1883 | | - |
---|
1884 | | - case TIOCGSERIAL: |
---|
1885 | | - dev_dbg(&port->dev, "%s TIOCGSERIAL\n", __func__); |
---|
1886 | | - return get_serial_info(mos7720_port, |
---|
1887 | | - (struct serial_struct __user *)arg); |
---|
1888 | 1827 | } |
---|
1889 | 1828 | |
---|
1890 | 1829 | return -ENOIOCTLCMD; |
---|
.. | .. |
---|
2017 | 1956 | .ioctl = mos7720_ioctl, |
---|
2018 | 1957 | .tiocmget = mos7720_tiocmget, |
---|
2019 | 1958 | .tiocmset = mos7720_tiocmset, |
---|
| 1959 | + .get_serial = get_serial_info, |
---|
2020 | 1960 | .set_termios = mos7720_set_termios, |
---|
2021 | 1961 | .write = mos7720_write, |
---|
2022 | 1962 | .write_room = mos7720_write_room, |
---|