hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/usb/serial/io_edgeport.c
....@@ -1637,24 +1637,20 @@
16371637 return result;
16381638 }
16391639
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)
16421642 {
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);
16441645
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;
16581654 return 0;
16591655 }
16601656
....@@ -1667,17 +1663,12 @@
16671663 unsigned int cmd, unsigned long arg)
16681664 {
16691665 struct usb_serial_port *port = tty->driver_data;
1670
- DEFINE_WAIT(wait);
16711666 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
16721667
16731668 switch (cmd) {
16741669 case TIOCSERGETLSR:
16751670 dev_dbg(&port->dev, "%s TIOCSERGETLSR\n", __func__);
16761671 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);
16811672 }
16821673 return -ENOIOCTLCMD;
16831674 }
....@@ -1761,7 +1752,7 @@
17611752 edge_serial->rxState = EXPECT_HDR2;
17621753 break;
17631754 }
1764
- /* otherwise, drop on through */
1755
+ fallthrough;
17651756 case EXPECT_HDR2:
17661757 edge_serial->rxHeader2 = *buffer;
17671758 ++buffer;
....@@ -1800,29 +1791,20 @@
18001791 edge_serial->rxHeader2, 0);
18011792 edge_serial->rxState = EXPECT_HDR1;
18021793 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 */
18251794 }
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;
18261808 case EXPECT_DATA: /* Expect data */
18271809 if (bufferLength < edge_serial->rxBytesRemaining) {
18281810 rxLen = bufferLength;
....@@ -3136,6 +3118,7 @@
31363118 .set_termios = edge_set_termios,
31373119 .tiocmget = edge_tiocmget,
31383120 .tiocmset = edge_tiocmset,
3121
+ .get_serial = get_serial_info,
31393122 .tiocmiwait = usb_serial_generic_tiocmiwait,
31403123 .get_icount = usb_serial_generic_get_icount,
31413124 .write = edge_write,
....@@ -3171,6 +3154,7 @@
31713154 .set_termios = edge_set_termios,
31723155 .tiocmget = edge_tiocmget,
31733156 .tiocmset = edge_tiocmset,
3157
+ .get_serial = get_serial_info,
31743158 .tiocmiwait = usb_serial_generic_tiocmiwait,
31753159 .get_icount = usb_serial_generic_get_icount,
31763160 .write = edge_write,
....@@ -3206,6 +3190,7 @@
32063190 .set_termios = edge_set_termios,
32073191 .tiocmget = edge_tiocmget,
32083192 .tiocmset = edge_tiocmset,
3193
+ .get_serial = get_serial_info,
32093194 .tiocmiwait = usb_serial_generic_tiocmiwait,
32103195 .get_icount = usb_serial_generic_get_icount,
32113196 .write = edge_write,
....@@ -3241,6 +3226,7 @@
32413226 .set_termios = edge_set_termios,
32423227 .tiocmget = edge_tiocmget,
32433228 .tiocmset = edge_tiocmset,
3229
+ .get_serial = get_serial_info,
32443230 .tiocmiwait = usb_serial_generic_tiocmiwait,
32453231 .get_icount = usb_serial_generic_get_icount,
32463232 .write = edge_write,