Lines Matching refs:edge_port

230 static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr);
231 static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData,
233 static int send_iosp_ext_cmd(struct edgeport_port *edge_port, __u8 command,
236 static int send_cmd_write_baud_rate(struct edgeport_port *edge_port,
239 struct edgeport_port *edge_port,
241 static int send_cmd_write_uart_register(struct edgeport_port *edge_port,
243 static int write_cmd_usb(struct edgeport_port *edge_port,
246 struct edgeport_port *edge_port);
559 struct edgeport_port *edge_port; in edge_interrupt_callback() local
628 edge_port = usb_get_serial_port_data(port); in edge_interrupt_callback()
629 if (edge_port->open) { in edge_interrupt_callback()
630 spin_lock(&edge_port->ep_lock); in edge_interrupt_callback()
631 edge_port->txCredits += txCredits; in edge_interrupt_callback()
632 spin_unlock(&edge_port->ep_lock); in edge_interrupt_callback()
635 edge_port->txCredits); in edge_interrupt_callback()
639 tty_port_tty_wakeup(&edge_port->port->port); in edge_interrupt_callback()
643 edge_port); in edge_interrupt_callback()
727 struct edgeport_port *edge_port = urb->context; in edge_bulk_out_data_callback() local
736 if (edge_port->open) in edge_bulk_out_data_callback()
737 tty_port_tty_wakeup(&edge_port->port->port); in edge_bulk_out_data_callback()
740 edge_port->write_in_progress = false; in edge_bulk_out_data_callback()
744 (usb_get_serial_data(edge_port->port->serial)), edge_port); in edge_bulk_out_data_callback()
755 struct edgeport_port *edge_port = urb->context; in edge_bulk_out_cmd_callback() local
777 if (edge_port->open) in edge_bulk_out_cmd_callback()
778 tty_port_tty_wakeup(&edge_port->port->port); in edge_bulk_out_cmd_callback()
781 edge_port->commandPending = false; in edge_bulk_out_cmd_callback()
782 wake_up(&edge_port->wait_command); in edge_bulk_out_cmd_callback()
798 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_open() local
804 if (edge_port == NULL) in edge_open()
860 init_waitqueue_head(&edge_port->wait_open); in edge_open()
861 init_waitqueue_head(&edge_port->wait_chase); in edge_open()
862 init_waitqueue_head(&edge_port->wait_command); in edge_open()
865 edge_port->txCredits = 0; /* Can't send any data yet */ in edge_open()
867 edge_port->shadowMCR = MCR_MASTER_IE; in edge_open()
868 edge_port->chaseResponsePending = false; in edge_open()
871 edge_port->openPending = true; in edge_open()
872 edge_port->open = false; in edge_open()
873 response = send_iosp_ext_cmd(edge_port, IOSP_CMD_OPEN_PORT, 0); in edge_open()
877 edge_port->openPending = false; in edge_open()
882 wait_event_timeout(edge_port->wait_open, !edge_port->openPending, in edge_open()
885 if (!edge_port->open) { in edge_open()
888 edge_port->openPending = false; in edge_open()
893 edge_port->txfifo.head = 0; in edge_open()
894 edge_port->txfifo.tail = 0; in edge_open()
895 edge_port->txfifo.count = 0; in edge_open()
896 edge_port->txfifo.size = edge_port->maxTxCredits; in edge_open()
897 edge_port->txfifo.fifo = kmalloc(edge_port->maxTxCredits, GFP_KERNEL); in edge_open()
899 if (!edge_port->txfifo.fifo) { in edge_open()
905 edge_port->write_urb = usb_alloc_urb(0, GFP_KERNEL); in edge_open()
906 edge_port->write_in_progress = false; in edge_open()
908 if (!edge_port->write_urb) { in edge_open()
914 __func__, edge_port->maxTxCredits); in edge_open()
930 static void block_until_chase_response(struct edgeport_port *edge_port) in block_until_chase_response() argument
932 struct device *dev = &edge_port->port->dev; in block_until_chase_response()
940 lastCredits = edge_port->txCredits; in block_until_chase_response()
943 if (!edge_port->chaseResponsePending) { in block_until_chase_response()
947 if (edge_port->txCredits == edge_port->maxTxCredits) { in block_until_chase_response()
954 prepare_to_wait(&edge_port->wait_chase, &wait, in block_until_chase_response()
957 finish_wait(&edge_port->wait_chase, &wait); in block_until_chase_response()
959 if (lastCredits == edge_port->txCredits) { in block_until_chase_response()
963 edge_port->chaseResponsePending = false; in block_until_chase_response()
970 lastCredits, edge_port->txCredits); in block_until_chase_response()
987 static void block_until_tx_empty(struct edgeport_port *edge_port) in block_until_tx_empty() argument
989 struct device *dev = &edge_port->port->dev; in block_until_tx_empty()
991 struct TxFifo *fifo = &edge_port->txfifo; in block_until_tx_empty()
1007 prepare_to_wait(&edge_port->wait_chase, &wait, in block_until_tx_empty()
1010 finish_wait(&edge_port->wait_chase, &wait); in block_until_tx_empty()
1036 struct edgeport_port *edge_port; in edge_close() local
1040 edge_port = usb_get_serial_port_data(port); in edge_close()
1041 if (edge_serial == NULL || edge_port == NULL) in edge_close()
1045 block_until_tx_empty(edge_port); in edge_close()
1047 edge_port->closePending = true; in edge_close()
1053 edge_port->chaseResponsePending = true; in edge_close()
1056 status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0); in edge_close()
1059 block_until_chase_response(edge_port); in edge_close()
1061 edge_port->chaseResponsePending = false; in edge_close()
1069 send_iosp_ext_cmd(edge_port, IOSP_CMD_CLOSE_PORT, 0); in edge_close()
1073 edge_port->closePending = false; in edge_close()
1074 edge_port->open = false; in edge_close()
1075 edge_port->openPending = false; in edge_close()
1077 usb_kill_urb(edge_port->write_urb); in edge_close()
1079 if (edge_port->write_urb) { in edge_close()
1082 kfree(edge_port->write_urb->transfer_buffer); in edge_close()
1083 usb_free_urb(edge_port->write_urb); in edge_close()
1084 edge_port->write_urb = NULL; in edge_close()
1086 kfree(edge_port->txfifo.fifo); in edge_close()
1087 edge_port->txfifo.fifo = NULL; in edge_close()
1100 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_write() local
1108 if (edge_port == NULL) in edge_write()
1112 fifo = &edge_port->txfifo; in edge_write()
1114 spin_lock_irqsave(&edge_port->ep_lock, flags); in edge_write()
1118 (edge_port->txCredits - fifo->count)); in edge_write()
1121 __func__, count, edge_port->txCredits - fifo->count, copySize); in edge_write()
1169 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in edge_write()
1172 usb_get_serial_data(port->serial), edge_port); in edge_write()
1175 __func__, copySize, edge_port->txCredits, fifo->count); in edge_write()
1195 struct edgeport_port *edge_port) in send_more_port_data() argument
1197 struct TxFifo *fifo = &edge_port->txfifo; in send_more_port_data()
1198 struct device *dev = &edge_port->port->dev; in send_more_port_data()
1208 spin_lock_irqsave(&edge_port->ep_lock, flags); in send_more_port_data()
1210 if (edge_port->write_in_progress || in send_more_port_data()
1211 !edge_port->open || in send_more_port_data()
1214 __func__, fifo->count, edge_port->write_in_progress); in send_more_port_data()
1225 …if (edge_port->txCredits < EDGE_FW_GET_TX_CREDITS_SEND_THRESHOLD(edge_port->maxTxCredits, EDGE_FW_… in send_more_port_data()
1227 __func__, fifo->count, edge_port->txCredits); in send_more_port_data()
1232 edge_port->write_in_progress = true; in send_more_port_data()
1235 urb = edge_port->write_urb; in send_more_port_data()
1246 edge_port->write_in_progress = false; in send_more_port_data()
1249 buffer[0] = IOSP_BUILD_DATA_HDR1(edge_port->port->port_number, count); in send_more_port_data()
1250 buffer[1] = IOSP_BUILD_DATA_HDR2(edge_port->port->port_number, count); in send_more_port_data()
1270 usb_serial_debug_data(&edge_port->port->dev, __func__, count, &buffer[2]); in send_more_port_data()
1277 edge_bulk_out_data_callback, edge_port); in send_more_port_data()
1280 edge_port->txCredits -= count; in send_more_port_data()
1281 edge_port->port->icount.tx += count; in send_more_port_data()
1286 dev_err_console(edge_port->port, in send_more_port_data()
1289 edge_port->write_in_progress = false; in send_more_port_data()
1292 edge_port->txCredits += count; in send_more_port_data()
1293 edge_port->port->icount.tx -= count; in send_more_port_data()
1296 __func__, count, edge_port->txCredits, fifo->count); in send_more_port_data()
1299 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in send_more_port_data()
1313 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_write_room() local
1317 if (edge_port == NULL) in edge_write_room()
1319 if (edge_port->closePending) in edge_write_room()
1322 if (!edge_port->open) { in edge_write_room()
1328 spin_lock_irqsave(&edge_port->ep_lock, flags); in edge_write_room()
1329 room = edge_port->txCredits - edge_port->txfifo.count; in edge_write_room()
1330 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in edge_write_room()
1349 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_chars_in_buffer() local
1353 if (edge_port == NULL) in edge_chars_in_buffer()
1355 if (edge_port->closePending) in edge_chars_in_buffer()
1358 if (!edge_port->open) { in edge_chars_in_buffer()
1363 spin_lock_irqsave(&edge_port->ep_lock, flags); in edge_chars_in_buffer()
1364 num_chars = edge_port->maxTxCredits - edge_port->txCredits + in edge_chars_in_buffer()
1365 edge_port->txfifo.count; in edge_chars_in_buffer()
1366 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in edge_chars_in_buffer()
1383 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_throttle() local
1386 if (edge_port == NULL) in edge_throttle()
1389 if (!edge_port->open) { in edge_throttle()
1404 edge_port->shadowMCR &= ~MCR_RTS; in edge_throttle()
1405 status = send_cmd_write_uart_register(edge_port, MCR, in edge_throttle()
1406 edge_port->shadowMCR); in edge_throttle()
1421 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_unthrottle() local
1424 if (edge_port == NULL) in edge_unthrottle()
1427 if (!edge_port->open) { in edge_unthrottle()
1441 edge_port->shadowMCR |= MCR_RTS; in edge_unthrottle()
1442 send_cmd_write_uart_register(edge_port, MCR, in edge_unthrottle()
1443 edge_port->shadowMCR); in edge_unthrottle()
1456 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_set_termios() local
1463 if (edge_port == NULL) in edge_set_termios()
1466 if (!edge_port->open) { in edge_set_termios()
1472 change_port_settings(tty, edge_port, old_termios); in edge_set_termios()
1486 static int get_lsr_info(struct edgeport_port *edge_port, in get_lsr_info() argument
1492 spin_lock_irqsave(&edge_port->ep_lock, flags); in get_lsr_info()
1493 if (edge_port->maxTxCredits == edge_port->txCredits && in get_lsr_info()
1494 edge_port->txfifo.count == 0) { in get_lsr_info()
1495 dev_dbg(&edge_port->port->dev, "%s -- Empty\n", __func__); in get_lsr_info()
1498 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in get_lsr_info()
1509 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_tiocmset() local
1512 mcr = edge_port->shadowMCR; in edge_tiocmset()
1527 edge_port->shadowMCR = mcr; in edge_tiocmset()
1529 send_cmd_write_uart_register(edge_port, MCR, edge_port->shadowMCR); in edge_tiocmset()
1537 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_tiocmget() local
1542 msr = edge_port->shadowMSR; in edge_tiocmget()
1543 mcr = edge_port->shadowMCR; in edge_tiocmget()
1554 static int get_serial_info(struct edgeport_port *edge_port, in get_serial_info() argument
1565 tmp.line = edge_port->port->minor; in get_serial_info()
1566 tmp.port = edge_port->port->port_number; in get_serial_info()
1569 tmp.xmit_fifo_size = edge_port->maxTxCredits; in get_serial_info()
1589 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_ioctl() local
1594 return get_lsr_info(edge_port, (unsigned int __user *) arg); in edge_ioctl()
1598 return get_serial_info(edge_port, (struct serial_struct __user *) arg); in edge_ioctl()
1611 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_break() local
1619 edge_port->chaseResponsePending = true; in edge_break()
1622 status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0); in edge_break()
1625 block_until_chase_response(edge_port); in edge_break()
1627 edge_port->chaseResponsePending = false; in edge_break()
1636 status = send_iosp_ext_cmd(edge_port, in edge_break()
1640 status = send_iosp_ext_cmd(edge_port, in edge_break()
1659 struct edgeport_port *edge_port; in process_rcvd_data() local
1765 edge_port = usb_get_serial_port_data(port); in process_rcvd_data()
1766 if (edge_port->open) { in process_rcvd_data()
1770 edge_tty_recv(edge_port->port, buffer, in process_rcvd_data()
1772 edge_port->port->icount.rx += rxLen; in process_rcvd_data()
1804 struct edgeport_port *edge_port; in process_rcvd_status() local
1811 edge_port = usb_get_serial_port_data(port); in process_rcvd_status()
1812 if (edge_port == NULL) { in process_rcvd_status()
1836 edge_port->chaseResponsePending = false; in process_rcvd_status()
1837 wake_up(&edge_port->wait_chase); in process_rcvd_status()
1849 edge_port->txCredits = GET_TX_BUFFER_SIZE(byte3); in process_rcvd_status()
1850 edge_port->maxTxCredits = edge_port->txCredits; in process_rcvd_status()
1852 __func__, edge_serial->rxPort, byte2, edge_port->txCredits); in process_rcvd_status()
1853 handle_new_msr(edge_port, byte2); in process_rcvd_status()
1857 tty = tty_port_tty_get(&edge_port->port->port); in process_rcvd_status()
1860 edge_port, &tty->termios); in process_rcvd_status()
1865 edge_port->openPending = false; in process_rcvd_status()
1866 edge_port->open = true; in process_rcvd_status()
1867 wake_up(&edge_port->wait_open); in process_rcvd_status()
1875 if (!edge_port->open || edge_port->closePending) in process_rcvd_status()
1883 handle_new_lsr(edge_port, false, byte2, 0); in process_rcvd_status()
1891 handle_new_lsr(edge_port, true, byte2, byte3); in process_rcvd_status()
1907 handle_new_msr(edge_port, byte2); in process_rcvd_status()
1942 static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr) in handle_new_msr() argument
1948 icount = &edge_port->port->icount; in handle_new_msr()
1959 wake_up_interruptible(&edge_port->port->port.delta_msr_wait); in handle_new_msr()
1963 edge_port->shadowMSR = newMsr & 0xf0; in handle_new_msr()
1971 static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData, in handle_new_lsr() argument
1978 edge_port->shadowLSR = lsr; in handle_new_lsr()
1991 edge_tty_recv(edge_port->port, &data, 1); in handle_new_lsr()
1994 icount = &edge_port->port->icount; in handle_new_lsr()
2143 static int send_iosp_ext_cmd(struct edgeport_port *edge_port, in send_iosp_ext_cmd() argument
2157 MAKE_CMD_EXT_CMD(&currentCommand, &length, edge_port->port->port_number, in send_iosp_ext_cmd()
2160 status = write_cmd_usb(edge_port, buffer, length); in send_iosp_ext_cmd()
2174 static int write_cmd_usb(struct edgeport_port *edge_port, in write_cmd_usb() argument
2178 usb_get_serial_data(edge_port->port->serial); in write_cmd_usb()
2179 struct device *dev = &edge_port->port->dev; in write_cmd_usb()
2197 buffer, length, edge_bulk_out_cmd_callback, edge_port); in write_cmd_usb()
2199 edge_port->commandPending = true; in write_cmd_usb()
2213 wait_event(&edge_port->wait_command, !edge_port->commandPending); in write_cmd_usb()
2215 if (edge_port->commandPending) { in write_cmd_usb()
2230 static int send_cmd_write_baud_rate(struct edgeport_port *edge_port, in send_cmd_write_baud_rate() argument
2234 usb_get_serial_data(edge_port->port->serial); in send_cmd_write_baud_rate()
2235 struct device *dev = &edge_port->port->dev; in send_cmd_write_baud_rate()
2241 u32 number = edge_port->port->port_number; in send_cmd_write_baud_rate()
2274 edge_port->shadowLCR); in send_cmd_write_baud_rate()
2276 status = write_cmd_usb(edge_port, cmdBuffer, cmdLen); in send_cmd_write_baud_rate()
2324 static int send_cmd_write_uart_register(struct edgeport_port *edge_port, in send_cmd_write_uart_register() argument
2328 usb_get_serial_data(edge_port->port->serial); in send_cmd_write_uart_register()
2329 struct device *dev = &edge_port->port->dev; in send_cmd_write_uart_register()
2360 MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, edge_port->port->port_number, in send_cmd_write_uart_register()
2363 status = write_cmd_usb(edge_port, cmdBuffer, cmdLen); in send_cmd_write_uart_register()
2380 struct edgeport_port *edge_port, struct ktermios *old_termios) in change_port_settings() argument
2382 struct device *dev = &edge_port->port->dev; in change_port_settings()
2384 usb_get_serial_data(edge_port->port->serial); in change_port_settings()
2395 if (!edge_port->open && in change_port_settings()
2396 !edge_port->openPending) { in change_port_settings()
2471 send_iosp_ext_cmd(edge_port, in change_port_settings()
2473 send_iosp_ext_cmd(edge_port, in change_port_settings()
2500 send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_RX_FLOW, rxFlow); in change_port_settings()
2504 send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_TX_FLOW, txFlow); in change_port_settings()
2507 edge_port->shadowLCR &= ~(LCR_BITS_MASK | LCR_STOP_MASK | LCR_PAR_MASK); in change_port_settings()
2508 edge_port->shadowLCR |= (lData | lParity | lStop); in change_port_settings()
2510 edge_port->validDataMask = mask; in change_port_settings()
2513 status = send_cmd_write_uart_register(edge_port, LCR, in change_port_settings()
2514 edge_port->shadowLCR); in change_port_settings()
2519 edge_port->shadowMCR = MCR_MASTER_IE; in change_port_settings()
2521 edge_port->shadowMCR |= (MCR_DTR | MCR_RTS); in change_port_settings()
2523 status = send_cmd_write_uart_register(edge_port, MCR, in change_port_settings()
2524 edge_port->shadowMCR); in change_port_settings()
2536 status = send_cmd_write_baud_rate(edge_port, baud); in change_port_settings()
2999 struct edgeport_port *edge_port; in edge_port_probe() local
3001 edge_port = kzalloc(sizeof(*edge_port), GFP_KERNEL); in edge_port_probe()
3002 if (!edge_port) in edge_port_probe()
3005 spin_lock_init(&edge_port->ep_lock); in edge_port_probe()
3006 edge_port->port = port; in edge_port_probe()
3008 usb_set_serial_port_data(port, edge_port); in edge_port_probe()
3015 struct edgeport_port *edge_port; in edge_port_remove() local
3017 edge_port = usb_get_serial_port_data(port); in edge_port_remove()
3018 kfree(edge_port); in edge_port_remove()