Lines Matching refs:edge_port

276 static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr);
277 static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData,
279 static int send_iosp_ext_cmd(struct edgeport_port *edge_port, __u8 command,
283 struct edgeport_port *edge_port,
285 static int send_cmd_write_uart_register(struct edgeport_port *edge_port,
287 static int write_cmd_usb(struct edgeport_port *edge_port,
290 struct edgeport_port *edge_port);
571 struct edgeport_port *edge_port; in edge_interrupt_callback() local
642 edge_port = usb_get_serial_port_data(port); in edge_interrupt_callback()
643 if (edge_port && edge_port->open) { in edge_interrupt_callback()
644 spin_lock_irqsave(&edge_port->ep_lock, in edge_interrupt_callback()
646 edge_port->txCredits += txCredits; in edge_interrupt_callback()
647 spin_unlock_irqrestore(&edge_port->ep_lock, in edge_interrupt_callback()
651 edge_port->txCredits); in edge_interrupt_callback()
655 tty_port_tty_wakeup(&edge_port->port->port); in edge_interrupt_callback()
659 edge_port); in edge_interrupt_callback()
744 struct edgeport_port *edge_port = urb->context; in edge_bulk_out_data_callback() local
753 if (edge_port->open) in edge_bulk_out_data_callback()
754 tty_port_tty_wakeup(&edge_port->port->port); in edge_bulk_out_data_callback()
757 edge_port->write_in_progress = false; in edge_bulk_out_data_callback()
761 (usb_get_serial_data(edge_port->port->serial)), edge_port); in edge_bulk_out_data_callback()
772 struct edgeport_port *edge_port = urb->context; in edge_bulk_out_cmd_callback() local
794 if (edge_port->open) in edge_bulk_out_cmd_callback()
795 tty_port_tty_wakeup(&edge_port->port->port); in edge_bulk_out_cmd_callback()
798 edge_port->commandPending = false; in edge_bulk_out_cmd_callback()
799 wake_up(&edge_port->wait_command); in edge_bulk_out_cmd_callback()
815 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_open() local
821 if (edge_port == NULL) in edge_open()
877 init_waitqueue_head(&edge_port->wait_open); in edge_open()
878 init_waitqueue_head(&edge_port->wait_chase); in edge_open()
879 init_waitqueue_head(&edge_port->wait_command); in edge_open()
882 edge_port->txCredits = 0; /* Can't send any data yet */ in edge_open()
884 edge_port->shadowMCR = MCR_MASTER_IE; in edge_open()
885 edge_port->chaseResponsePending = false; in edge_open()
888 edge_port->openPending = true; in edge_open()
889 edge_port->open = false; in edge_open()
890 response = send_iosp_ext_cmd(edge_port, IOSP_CMD_OPEN_PORT, 0); in edge_open()
894 edge_port->openPending = false; in edge_open()
899 wait_event_timeout(edge_port->wait_open, !edge_port->openPending, in edge_open()
902 if (!edge_port->open) { in edge_open()
905 edge_port->openPending = false; in edge_open()
910 edge_port->txfifo.head = 0; in edge_open()
911 edge_port->txfifo.tail = 0; in edge_open()
912 edge_port->txfifo.count = 0; in edge_open()
913 edge_port->txfifo.size = edge_port->maxTxCredits; in edge_open()
914 edge_port->txfifo.fifo = kmalloc(edge_port->maxTxCredits, GFP_KERNEL); in edge_open()
916 if (!edge_port->txfifo.fifo) { in edge_open()
922 edge_port->write_urb = usb_alloc_urb(0, GFP_KERNEL); in edge_open()
923 edge_port->write_in_progress = false; in edge_open()
925 if (!edge_port->write_urb) { in edge_open()
931 __func__, edge_port->maxTxCredits); in edge_open()
947 static void block_until_chase_response(struct edgeport_port *edge_port) in block_until_chase_response() argument
949 struct device *dev = &edge_port->port->dev; in block_until_chase_response()
957 lastCredits = edge_port->txCredits; in block_until_chase_response()
960 if (!edge_port->chaseResponsePending) { in block_until_chase_response()
964 if (edge_port->txCredits == edge_port->maxTxCredits) { in block_until_chase_response()
971 prepare_to_wait(&edge_port->wait_chase, &wait, in block_until_chase_response()
974 finish_wait(&edge_port->wait_chase, &wait); in block_until_chase_response()
976 if (lastCredits == edge_port->txCredits) { in block_until_chase_response()
980 edge_port->chaseResponsePending = false; in block_until_chase_response()
987 lastCredits, edge_port->txCredits); in block_until_chase_response()
1004 static void block_until_tx_empty(struct edgeport_port *edge_port) in block_until_tx_empty() argument
1006 struct device *dev = &edge_port->port->dev; in block_until_tx_empty()
1008 struct TxFifo *fifo = &edge_port->txfifo; in block_until_tx_empty()
1024 prepare_to_wait(&edge_port->wait_chase, &wait, in block_until_tx_empty()
1027 finish_wait(&edge_port->wait_chase, &wait); in block_until_tx_empty()
1053 struct edgeport_port *edge_port; in edge_close() local
1057 edge_port = usb_get_serial_port_data(port); in edge_close()
1058 if (edge_serial == NULL || edge_port == NULL) in edge_close()
1062 block_until_tx_empty(edge_port); in edge_close()
1064 edge_port->closePending = true; in edge_close()
1069 edge_port->chaseResponsePending = true; in edge_close()
1072 status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0); in edge_close()
1075 block_until_chase_response(edge_port); in edge_close()
1077 edge_port->chaseResponsePending = false; in edge_close()
1084 send_iosp_ext_cmd(edge_port, IOSP_CMD_CLOSE_PORT, 0); in edge_close()
1088 edge_port->closePending = false; in edge_close()
1089 edge_port->open = false; in edge_close()
1090 edge_port->openPending = false; in edge_close()
1092 usb_kill_urb(edge_port->write_urb); in edge_close()
1094 if (edge_port->write_urb) { in edge_close()
1097 kfree(edge_port->write_urb->transfer_buffer); in edge_close()
1098 usb_free_urb(edge_port->write_urb); in edge_close()
1099 edge_port->write_urb = NULL; in edge_close()
1101 kfree(edge_port->txfifo.fifo); in edge_close()
1102 edge_port->txfifo.fifo = NULL; in edge_close()
1115 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_write() local
1123 if (edge_port == NULL) in edge_write()
1127 fifo = &edge_port->txfifo; in edge_write()
1129 spin_lock_irqsave(&edge_port->ep_lock, flags); in edge_write()
1133 (edge_port->txCredits - fifo->count)); in edge_write()
1136 __func__, count, edge_port->txCredits - fifo->count, copySize); in edge_write()
1184 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in edge_write()
1187 usb_get_serial_data(port->serial), edge_port); in edge_write()
1190 __func__, copySize, edge_port->txCredits, fifo->count); in edge_write()
1210 struct edgeport_port *edge_port) in send_more_port_data() argument
1212 struct TxFifo *fifo = &edge_port->txfifo; in send_more_port_data()
1213 struct device *dev = &edge_port->port->dev; in send_more_port_data()
1223 spin_lock_irqsave(&edge_port->ep_lock, flags); in send_more_port_data()
1225 if (edge_port->write_in_progress || in send_more_port_data()
1226 !edge_port->open || in send_more_port_data()
1229 __func__, fifo->count, edge_port->write_in_progress); in send_more_port_data()
1240 …if (edge_port->txCredits < EDGE_FW_GET_TX_CREDITS_SEND_THRESHOLD(edge_port->maxTxCredits, EDGE_FW_… in send_more_port_data()
1242 __func__, fifo->count, edge_port->txCredits); in send_more_port_data()
1247 edge_port->write_in_progress = true; in send_more_port_data()
1250 urb = edge_port->write_urb; in send_more_port_data()
1261 edge_port->write_in_progress = false; in send_more_port_data()
1264 buffer[0] = IOSP_BUILD_DATA_HDR1(edge_port->port->port_number, count); in send_more_port_data()
1265 buffer[1] = IOSP_BUILD_DATA_HDR2(edge_port->port->port_number, count); in send_more_port_data()
1285 usb_serial_debug_data(&edge_port->port->dev, __func__, count, &buffer[2]); in send_more_port_data()
1292 edge_bulk_out_data_callback, edge_port); in send_more_port_data()
1295 edge_port->txCredits -= count; in send_more_port_data()
1296 edge_port->port->icount.tx += count; in send_more_port_data()
1301 dev_err_console(edge_port->port, in send_more_port_data()
1304 edge_port->write_in_progress = false; in send_more_port_data()
1307 edge_port->txCredits += count; in send_more_port_data()
1308 edge_port->port->icount.tx -= count; in send_more_port_data()
1311 __func__, count, edge_port->txCredits, fifo->count); in send_more_port_data()
1314 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in send_more_port_data()
1326 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_write_room() local
1331 spin_lock_irqsave(&edge_port->ep_lock, flags); in edge_write_room()
1332 room = edge_port->txCredits - edge_port->txfifo.count; in edge_write_room()
1333 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 spin_lock_irqsave(&edge_port->ep_lock, flags); in edge_chars_in_buffer()
1354 num_chars = edge_port->maxTxCredits - edge_port->txCredits + in edge_chars_in_buffer()
1355 edge_port->txfifo.count; in edge_chars_in_buffer()
1356 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in edge_chars_in_buffer()
1373 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_throttle() local
1376 if (edge_port == NULL) in edge_throttle()
1379 if (!edge_port->open) { in edge_throttle()
1394 edge_port->shadowMCR &= ~MCR_RTS; in edge_throttle()
1395 status = send_cmd_write_uart_register(edge_port, MCR, in edge_throttle()
1396 edge_port->shadowMCR); in edge_throttle()
1411 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_unthrottle() local
1414 if (edge_port == NULL) in edge_unthrottle()
1417 if (!edge_port->open) { in edge_unthrottle()
1431 edge_port->shadowMCR |= MCR_RTS; in edge_unthrottle()
1432 send_cmd_write_uart_register(edge_port, MCR, in edge_unthrottle()
1433 edge_port->shadowMCR); in edge_unthrottle()
1447 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_set_termios() local
1449 if (edge_port == NULL) in edge_set_termios()
1452 if (!edge_port->open) { in edge_set_termios()
1458 change_port_settings(tty, edge_port, old_termios); in edge_set_termios()
1472 static int get_lsr_info(struct edgeport_port *edge_port, in get_lsr_info() argument
1478 spin_lock_irqsave(&edge_port->ep_lock, flags); in get_lsr_info()
1479 if (edge_port->maxTxCredits == edge_port->txCredits && in get_lsr_info()
1480 edge_port->txfifo.count == 0) { in get_lsr_info()
1481 dev_dbg(&edge_port->port->dev, "%s -- Empty\n", __func__); in get_lsr_info()
1484 spin_unlock_irqrestore(&edge_port->ep_lock, flags); in get_lsr_info()
1495 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_tiocmset() local
1498 mcr = edge_port->shadowMCR; in edge_tiocmset()
1513 edge_port->shadowMCR = mcr; in edge_tiocmset()
1515 send_cmd_write_uart_register(edge_port, MCR, edge_port->shadowMCR); in edge_tiocmset()
1523 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_tiocmget() local
1528 msr = edge_port->shadowMSR; in edge_tiocmget()
1529 mcr = edge_port->shadowMCR; in edge_tiocmget()
1548 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_ioctl() local
1553 return get_lsr_info(edge_port, (unsigned int __user *) arg); in edge_ioctl()
1566 struct edgeport_port *edge_port = usb_get_serial_port_data(port); in edge_break() local
1573 edge_port->chaseResponsePending = true; in edge_break()
1576 status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0); in edge_break()
1579 block_until_chase_response(edge_port); in edge_break()
1581 edge_port->chaseResponsePending = false; in edge_break()
1589 status = send_iosp_ext_cmd(edge_port, in edge_break()
1593 status = send_iosp_ext_cmd(edge_port, in edge_break()
1615 struct edgeport_port *edge_port; in process_rcvd_data() local
1711 edge_port = usb_get_serial_port_data(port); in process_rcvd_data()
1712 if (edge_port && edge_port->open) { in process_rcvd_data()
1716 edge_tty_recv(edge_port->port, buffer, in process_rcvd_data()
1718 edge_port->port->icount.rx += rxLen; in process_rcvd_data()
1750 struct edgeport_port *edge_port; in process_rcvd_status() local
1759 edge_port = usb_get_serial_port_data(port); in process_rcvd_status()
1760 if (edge_port == NULL) { in process_rcvd_status()
1784 edge_port->chaseResponsePending = false; in process_rcvd_status()
1785 wake_up(&edge_port->wait_chase); in process_rcvd_status()
1797 edge_port->txCredits = GET_TX_BUFFER_SIZE(byte3); in process_rcvd_status()
1798 edge_port->maxTxCredits = edge_port->txCredits; in process_rcvd_status()
1800 __func__, edge_serial->rxPort, byte2, edge_port->txCredits); in process_rcvd_status()
1801 handle_new_msr(edge_port, byte2); in process_rcvd_status()
1805 tty = tty_port_tty_get(&edge_port->port->port); in process_rcvd_status()
1808 edge_port, &tty->termios); in process_rcvd_status()
1813 edge_port->openPending = false; in process_rcvd_status()
1814 edge_port->open = true; in process_rcvd_status()
1815 wake_up(&edge_port->wait_open); in process_rcvd_status()
1823 if (!edge_port->open || edge_port->closePending) in process_rcvd_status()
1831 handle_new_lsr(edge_port, false, byte2, 0); in process_rcvd_status()
1839 handle_new_lsr(edge_port, true, byte2, byte3); in process_rcvd_status()
1855 handle_new_msr(edge_port, byte2); in process_rcvd_status()
1890 static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr) in handle_new_msr() argument
1896 icount = &edge_port->port->icount; in handle_new_msr()
1907 wake_up_interruptible(&edge_port->port->port.delta_msr_wait); in handle_new_msr()
1911 edge_port->shadowMSR = newMsr & 0xf0; in handle_new_msr()
1919 static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData, in handle_new_lsr() argument
1926 edge_port->shadowLSR = lsr; in handle_new_lsr()
1939 edge_tty_recv(edge_port->port, &data, 1); in handle_new_lsr()
1942 icount = &edge_port->port->icount; in handle_new_lsr()
2095 static int send_iosp_ext_cmd(struct edgeport_port *edge_port, in send_iosp_ext_cmd() argument
2109 MAKE_CMD_EXT_CMD(&currentCommand, &length, edge_port->port->port_number, in send_iosp_ext_cmd()
2112 status = write_cmd_usb(edge_port, buffer, length); in send_iosp_ext_cmd()
2126 static int write_cmd_usb(struct edgeport_port *edge_port, in write_cmd_usb() argument
2130 usb_get_serial_data(edge_port->port->serial); in write_cmd_usb()
2131 struct device *dev = &edge_port->port->dev; in write_cmd_usb()
2149 buffer, length, edge_bulk_out_cmd_callback, edge_port); in write_cmd_usb()
2151 edge_port->commandPending = true; in write_cmd_usb()
2164 wait_event(&edge_port->wait_command, !edge_port->commandPending); in write_cmd_usb()
2166 if (edge_port->commandPending) { in write_cmd_usb()
2181 static int send_cmd_write_baud_rate(struct edgeport_port *edge_port, in send_cmd_write_baud_rate() argument
2185 usb_get_serial_data(edge_port->port->serial); in send_cmd_write_baud_rate()
2186 struct device *dev = &edge_port->port->dev; in send_cmd_write_baud_rate()
2192 u32 number = edge_port->port->port_number; in send_cmd_write_baud_rate()
2225 edge_port->shadowLCR); in send_cmd_write_baud_rate()
2227 status = write_cmd_usb(edge_port, cmdBuffer, cmdLen); in send_cmd_write_baud_rate()
2275 static int send_cmd_write_uart_register(struct edgeport_port *edge_port, in send_cmd_write_uart_register() argument
2279 usb_get_serial_data(edge_port->port->serial); in send_cmd_write_uart_register()
2280 struct device *dev = &edge_port->port->dev; in send_cmd_write_uart_register()
2311 MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, edge_port->port->port_number, in send_cmd_write_uart_register()
2314 status = write_cmd_usb(edge_port, cmdBuffer, cmdLen); in send_cmd_write_uart_register()
2331 struct edgeport_port *edge_port, const struct ktermios *old_termios) in change_port_settings() argument
2333 struct device *dev = &edge_port->port->dev; in change_port_settings()
2335 usb_get_serial_data(edge_port->port->serial); in change_port_settings()
2346 if (!edge_port->open && in change_port_settings()
2347 !edge_port->openPending) { in change_port_settings()
2421 send_iosp_ext_cmd(edge_port, in change_port_settings()
2423 send_iosp_ext_cmd(edge_port, in change_port_settings()
2449 send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_RX_FLOW, rxFlow); in change_port_settings()
2452 send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_TX_FLOW, txFlow); in change_port_settings()
2455 edge_port->shadowLCR &= ~(LCR_BITS_MASK | LCR_STOP_MASK | LCR_PAR_MASK); in change_port_settings()
2456 edge_port->shadowLCR |= (lData | lParity | lStop); in change_port_settings()
2458 edge_port->validDataMask = mask; in change_port_settings()
2461 status = send_cmd_write_uart_register(edge_port, LCR, in change_port_settings()
2462 edge_port->shadowLCR); in change_port_settings()
2467 edge_port->shadowMCR = MCR_MASTER_IE; in change_port_settings()
2469 edge_port->shadowMCR |= (MCR_DTR | MCR_RTS); in change_port_settings()
2471 status = send_cmd_write_uart_register(edge_port, MCR, in change_port_settings()
2472 edge_port->shadowMCR); in change_port_settings()
2484 status = send_cmd_write_baud_rate(edge_port, baud); in change_port_settings()
2957 struct edgeport_port *edge_port; in edge_port_probe() local
2959 edge_port = kzalloc(sizeof(*edge_port), GFP_KERNEL); in edge_port_probe()
2960 if (!edge_port) in edge_port_probe()
2963 spin_lock_init(&edge_port->ep_lock); in edge_port_probe()
2964 edge_port->port = port; in edge_port_probe()
2966 usb_set_serial_port_data(port, edge_port); in edge_port_probe()
2973 struct edgeport_port *edge_port; in edge_port_remove() local
2975 edge_port = usb_get_serial_port_data(port); in edge_port_remove()
2976 kfree(edge_port); in edge_port_remove()