| .. | .. |
|---|
| 1637 | 1637 | return result; |
|---|
| 1638 | 1638 | } |
|---|
| 1639 | 1639 | |
|---|
| 1640 | | -static int get_serial_info(struct edgeport_port *edge_port, |
|---|
| 1641 | | - struct serial_struct __user *retinfo) |
|---|
| 1640 | +static int get_serial_info(struct tty_struct *tty, |
|---|
| 1641 | + struct serial_struct *ss) |
|---|
| 1642 | 1642 | { |
|---|
| 1643 | | - struct serial_struct tmp; |
|---|
| 1643 | + struct usb_serial_port *port = tty->driver_data; |
|---|
| 1644 | + struct edgeport_port *edge_port = usb_get_serial_port_data(port); |
|---|
| 1644 | 1645 | |
|---|
| 1645 | | - memset(&tmp, 0, sizeof(tmp)); |
|---|
| 1646 | | - |
|---|
| 1647 | | - tmp.type = PORT_16550A; |
|---|
| 1648 | | - tmp.line = edge_port->port->minor; |
|---|
| 1649 | | - tmp.port = edge_port->port->port_number; |
|---|
| 1650 | | - tmp.irq = 0; |
|---|
| 1651 | | - tmp.xmit_fifo_size = edge_port->maxTxCredits; |
|---|
| 1652 | | - tmp.baud_base = 9600; |
|---|
| 1653 | | - tmp.close_delay = 5*HZ; |
|---|
| 1654 | | - tmp.closing_wait = 30*HZ; |
|---|
| 1655 | | - |
|---|
| 1656 | | - if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) |
|---|
| 1657 | | - return -EFAULT; |
|---|
| 1646 | + ss->type = PORT_16550A; |
|---|
| 1647 | + ss->line = edge_port->port->minor; |
|---|
| 1648 | + ss->port = edge_port->port->port_number; |
|---|
| 1649 | + ss->irq = 0; |
|---|
| 1650 | + ss->xmit_fifo_size = edge_port->maxTxCredits; |
|---|
| 1651 | + ss->baud_base = 9600; |
|---|
| 1652 | + ss->close_delay = 5*HZ; |
|---|
| 1653 | + ss->closing_wait = 30*HZ; |
|---|
| 1658 | 1654 | return 0; |
|---|
| 1659 | 1655 | } |
|---|
| 1660 | 1656 | |
|---|
| .. | .. |
|---|
| 1667 | 1663 | unsigned int cmd, unsigned long arg) |
|---|
| 1668 | 1664 | { |
|---|
| 1669 | 1665 | struct usb_serial_port *port = tty->driver_data; |
|---|
| 1670 | | - DEFINE_WAIT(wait); |
|---|
| 1671 | 1666 | struct edgeport_port *edge_port = usb_get_serial_port_data(port); |
|---|
| 1672 | 1667 | |
|---|
| 1673 | 1668 | switch (cmd) { |
|---|
| 1674 | 1669 | case TIOCSERGETLSR: |
|---|
| 1675 | 1670 | dev_dbg(&port->dev, "%s TIOCSERGETLSR\n", __func__); |
|---|
| 1676 | 1671 | return get_lsr_info(edge_port, (unsigned int __user *) arg); |
|---|
| 1677 | | - |
|---|
| 1678 | | - case TIOCGSERIAL: |
|---|
| 1679 | | - dev_dbg(&port->dev, "%s TIOCGSERIAL\n", __func__); |
|---|
| 1680 | | - return get_serial_info(edge_port, (struct serial_struct __user *) arg); |
|---|
| 1681 | 1672 | } |
|---|
| 1682 | 1673 | return -ENOIOCTLCMD; |
|---|
| 1683 | 1674 | } |
|---|
| .. | .. |
|---|
| 1761 | 1752 | edge_serial->rxState = EXPECT_HDR2; |
|---|
| 1762 | 1753 | break; |
|---|
| 1763 | 1754 | } |
|---|
| 1764 | | - /* otherwise, drop on through */ |
|---|
| 1755 | + fallthrough; |
|---|
| 1765 | 1756 | case EXPECT_HDR2: |
|---|
| 1766 | 1757 | edge_serial->rxHeader2 = *buffer; |
|---|
| 1767 | 1758 | ++buffer; |
|---|
| .. | .. |
|---|
| 1800 | 1791 | edge_serial->rxHeader2, 0); |
|---|
| 1801 | 1792 | edge_serial->rxState = EXPECT_HDR1; |
|---|
| 1802 | 1793 | break; |
|---|
| 1803 | | - } else { |
|---|
| 1804 | | - edge_serial->rxPort = |
|---|
| 1805 | | - IOSP_GET_HDR_PORT(edge_serial->rxHeader1); |
|---|
| 1806 | | - edge_serial->rxBytesRemaining = |
|---|
| 1807 | | - IOSP_GET_HDR_DATA_LEN( |
|---|
| 1808 | | - edge_serial->rxHeader1, |
|---|
| 1809 | | - edge_serial->rxHeader2); |
|---|
| 1810 | | - dev_dbg(dev, "%s - Data for Port %u Len %u\n", |
|---|
| 1811 | | - __func__, |
|---|
| 1812 | | - edge_serial->rxPort, |
|---|
| 1813 | | - edge_serial->rxBytesRemaining); |
|---|
| 1814 | | - |
|---|
| 1815 | | - /* ASSERT(DevExt->RxPort < DevExt->NumPorts); |
|---|
| 1816 | | - * ASSERT(DevExt->RxBytesRemaining < |
|---|
| 1817 | | - * IOSP_MAX_DATA_LENGTH); |
|---|
| 1818 | | - */ |
|---|
| 1819 | | - |
|---|
| 1820 | | - if (bufferLength == 0) { |
|---|
| 1821 | | - edge_serial->rxState = EXPECT_DATA; |
|---|
| 1822 | | - break; |
|---|
| 1823 | | - } |
|---|
| 1824 | | - /* Else, drop through */ |
|---|
| 1825 | 1794 | } |
|---|
| 1795 | + |
|---|
| 1796 | + edge_serial->rxPort = IOSP_GET_HDR_PORT(edge_serial->rxHeader1); |
|---|
| 1797 | + edge_serial->rxBytesRemaining = IOSP_GET_HDR_DATA_LEN(edge_serial->rxHeader1, |
|---|
| 1798 | + edge_serial->rxHeader2); |
|---|
| 1799 | + dev_dbg(dev, "%s - Data for Port %u Len %u\n", __func__, |
|---|
| 1800 | + edge_serial->rxPort, |
|---|
| 1801 | + edge_serial->rxBytesRemaining); |
|---|
| 1802 | + |
|---|
| 1803 | + if (bufferLength == 0) { |
|---|
| 1804 | + edge_serial->rxState = EXPECT_DATA; |
|---|
| 1805 | + break; |
|---|
| 1806 | + } |
|---|
| 1807 | + fallthrough; |
|---|
| 1826 | 1808 | case EXPECT_DATA: /* Expect data */ |
|---|
| 1827 | 1809 | if (bufferLength < edge_serial->rxBytesRemaining) { |
|---|
| 1828 | 1810 | rxLen = bufferLength; |
|---|
| .. | .. |
|---|
| 3136 | 3118 | .set_termios = edge_set_termios, |
|---|
| 3137 | 3119 | .tiocmget = edge_tiocmget, |
|---|
| 3138 | 3120 | .tiocmset = edge_tiocmset, |
|---|
| 3121 | + .get_serial = get_serial_info, |
|---|
| 3139 | 3122 | .tiocmiwait = usb_serial_generic_tiocmiwait, |
|---|
| 3140 | 3123 | .get_icount = usb_serial_generic_get_icount, |
|---|
| 3141 | 3124 | .write = edge_write, |
|---|
| .. | .. |
|---|
| 3171 | 3154 | .set_termios = edge_set_termios, |
|---|
| 3172 | 3155 | .tiocmget = edge_tiocmget, |
|---|
| 3173 | 3156 | .tiocmset = edge_tiocmset, |
|---|
| 3157 | + .get_serial = get_serial_info, |
|---|
| 3174 | 3158 | .tiocmiwait = usb_serial_generic_tiocmiwait, |
|---|
| 3175 | 3159 | .get_icount = usb_serial_generic_get_icount, |
|---|
| 3176 | 3160 | .write = edge_write, |
|---|
| .. | .. |
|---|
| 3206 | 3190 | .set_termios = edge_set_termios, |
|---|
| 3207 | 3191 | .tiocmget = edge_tiocmget, |
|---|
| 3208 | 3192 | .tiocmset = edge_tiocmset, |
|---|
| 3193 | + .get_serial = get_serial_info, |
|---|
| 3209 | 3194 | .tiocmiwait = usb_serial_generic_tiocmiwait, |
|---|
| 3210 | 3195 | .get_icount = usb_serial_generic_get_icount, |
|---|
| 3211 | 3196 | .write = edge_write, |
|---|
| .. | .. |
|---|
| 3241 | 3226 | .set_termios = edge_set_termios, |
|---|
| 3242 | 3227 | .tiocmget = edge_tiocmget, |
|---|
| 3243 | 3228 | .tiocmset = edge_tiocmset, |
|---|
| 3229 | + .get_serial = get_serial_info, |
|---|
| 3244 | 3230 | .tiocmiwait = usb_serial_generic_tiocmiwait, |
|---|
| 3245 | 3231 | .get_icount = usb_serial_generic_get_icount, |
|---|
| 3246 | 3232 | .write = edge_write, |
|---|