| .. | .. |
|---|
| 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, |
|---|