• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/usb/serial/

Lines Matching refs:edge_port

239 static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr);
240 static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData,
242 static int send_iosp_ext_cmd(struct edgeport_port *edge_port, __u8 command,
245 static int send_cmd_write_baud_rate(struct edgeport_port *edge_port,
248 struct edgeport_port *edge_port,
250 static int send_cmd_write_uart_register(struct edgeport_port *edge_port,
252 static int write_cmd_usb(struct edgeport_port *edge_port,
255 struct edgeport_port *edge_port);
530 struct edgeport_port *edge_port;
597 edge_port = usb_get_serial_port_data(port);
598 if (edge_port->open) {
599 spin_lock(&edge_port->ep_lock);
600 edge_port->txCredits += txCredits;
601 spin_unlock(&edge_port->ep_lock);
604 edge_port->txCredits);
609 &edge_port->port->port);
617 edge_port);
703 struct edgeport_port *edge_port = urb->context;
714 tty = tty_port_tty_get(&edge_port->port->port);
716 if (tty && edge_port->open) {
724 edge_port->write_in_progress = false;
728 (usb_get_serial_data(edge_port->port->serial)), edge_port);
739 struct edgeport_port *edge_port = urb->context;
763 tty = tty_port_tty_get(&edge_port->port->port);
766 if (tty && edge_port->open)
771 edge_port->commandPending = false;
772 wake_up(&edge_port->wait_command);
788 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
795 if (edge_port == NULL)
852 init_waitqueue_head(&edge_port->wait_open);
853 init_waitqueue_head(&edge_port->wait_chase);
854 init_waitqueue_head(&edge_port->delta_msr_wait);
855 init_waitqueue_head(&edge_port->wait_command);
858 memset(&(edge_port->icount), 0x00, sizeof(edge_port->icount));
861 edge_port->txCredits = 0; /* Can't send any data yet */
863 edge_port->shadowMCR = MCR_MASTER_IE;
864 edge_port->chaseResponsePending = false;
867 edge_port->openPending = true;
868 edge_port->open = false;
869 response = send_iosp_ext_cmd(edge_port, IOSP_CMD_OPEN_PORT, 0);
874 edge_port->openPending = false;
879 wait_event_timeout(edge_port->wait_open, !edge_port->openPending,
882 if (!edge_port->open) {
885 edge_port->openPending = false;
890 edge_port->txfifo.head = 0;
891 edge_port->txfifo.tail = 0;
892 edge_port->txfifo.count = 0;
893 edge_port->txfifo.size = edge_port->maxTxCredits;
894 edge_port->txfifo.fifo = kmalloc(edge_port->maxTxCredits, GFP_KERNEL);
896 if (!edge_port->txfifo.fifo) {
903 edge_port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
904 edge_port->write_in_progress = false;
906 if (!edge_port->write_urb) {
913 __func__, port->number, edge_port->maxTxCredits);
931 static void block_until_chase_response(struct edgeport_port *edge_port)
940 lastCredits = edge_port->txCredits;
943 if (!edge_port->chaseResponsePending) {
947 if (edge_port->txCredits == edge_port->maxTxCredits) {
954 prepare_to_wait(&edge_port->wait_chase, &wait,
957 finish_wait(&edge_port->wait_chase, &wait);
959 if (lastCredits == edge_port->txCredits) {
963 edge_port->chaseResponsePending = false;
970 lastCredits, edge_port->txCredits);
987 static void block_until_tx_empty(struct edgeport_port *edge_port)
990 struct TxFifo *fifo = &edge_port->txfifo;
1006 prepare_to_wait(&edge_port->wait_chase, &wait,
1009 finish_wait(&edge_port->wait_chase, &wait);
1035 struct edgeport_port *edge_port;
1041 edge_port = usb_get_serial_port_data(port);
1042 if (edge_serial == NULL || edge_port == NULL)
1046 block_until_tx_empty(edge_port);
1048 edge_port->closePending = true;
1054 edge_port->chaseResponsePending = true;
1057 status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0);
1060 block_until_chase_response(edge_port);
1062 edge_port->chaseResponsePending = false;
1070 send_iosp_ext_cmd(edge_port, IOSP_CMD_CLOSE_PORT, 0);
1074 edge_port->closePending = false;
1075 edge_port->open = false;
1076 edge_port->openPending = false;
1078 usb_kill_urb(edge_port->write_urb);
1080 if (edge_port->write_urb) {
1083 kfree(edge_port->write_urb->transfer_buffer);
1084 usb_free_urb(edge_port->write_urb);
1085 edge_port->write_urb = NULL;
1087 kfree(edge_port->txfifo.fifo);
1088 edge_port->txfifo.fifo = NULL;
1103 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1113 if (edge_port == NULL)
1117 fifo = &edge_port->txfifo;
1119 spin_lock_irqsave(&edge_port->ep_lock, flags);
1123 (edge_port->txCredits - fifo->count));
1127 edge_port->txCredits - fifo->count, copySize);
1177 spin_unlock_irqrestore(&edge_port->ep_lock, flags);
1180 usb_get_serial_data(port->serial), edge_port);
1183 copySize, edge_port->txCredits, fifo->count);
1203 struct edgeport_port *edge_port)
1205 struct TxFifo *fifo = &edge_port->txfifo;
1215 dbg("%s(%d)", __func__, edge_port->port->number);
1217 spin_lock_irqsave(&edge_port->ep_lock, flags);
1219 if (edge_port->write_in_progress ||
1220 !edge_port->open ||
1223 __func__, edge_port->port->number,
1224 fifo->count, edge_port->write_in_progress);
1235 if (edge_port->txCredits < EDGE_FW_GET_TX_CREDITS_SEND_THRESHOLD(edge_port->maxTxCredits, EDGE_FW_BULK_MAX_PACKET_SIZE)) {
1237 __func__, edge_port->port->number, fifo->count,
1238 edge_port->txCredits);
1243 edge_port->write_in_progress = true;
1246 urb = edge_port->write_urb;
1257 dev_err(&edge_port->port->dev,
1259 edge_port->write_in_progress = false;
1262 buffer[0] = IOSP_BUILD_DATA_HDR1(edge_port->port->number
1263 - edge_port->port->serial->minor, count);
1264 buffer[1] = IOSP_BUILD_DATA_HDR2(edge_port->port->number
1265 - edge_port->port->serial->minor, count);
1285 usb_serial_debug_data(debug, &edge_port->port->dev,
1293 edge_bulk_out_data_callback, edge_port);
1296 edge_port->txCredits -= count;
1297 edge_port->icount.tx += count;
1303 dev_err(&edge_port->port->dev,
1306 edge_port->write_in_progress = false;
1309 edge_port->txCredits += count;
1310 edge_port->icount.tx -= count;
1313 __func__, count, edge_port->txCredits, fifo->count);
1316 spin_unlock_irqrestore(&edge_port->ep_lock, flags);
1330 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1336 if (edge_port == NULL)
1338 if (edge_port->closePending)
1343 if (!edge_port->open) {
1349 spin_lock_irqsave(&edge_port->ep_lock, flags);
1350 room = edge_port->txCredits - edge_port->txfifo.count;
1351 spin_unlock_irqrestore(&edge_port->ep_lock, flags);
1370 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1376 if (edge_port == NULL)
1378 if (edge_port->closePending)
1381 if (!edge_port->open) {
1386 spin_lock_irqsave(&edge_port->ep_lock, flags);
1387 num_chars = edge_port->maxTxCredits - edge_port->txCredits +
1388 edge_port->txfifo.count;
1389 spin_unlock_irqrestore(&edge_port->ep_lock, flags);
1407 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1412 if (edge_port == NULL)
1415 if (!edge_port->open) {
1430 edge_port->shadowMCR &= ~MCR_RTS;
1431 status = send_cmd_write_uart_register(edge_port, MCR,
1432 edge_port->shadowMCR);
1449 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1454 if (edge_port == NULL)
1457 if (!edge_port->open) {
1471 edge_port->shadowMCR |= MCR_RTS;
1472 send_cmd_write_uart_register(edge_port, MCR,
1473 edge_port->shadowMCR);
1486 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1497 if (edge_port == NULL)
1500 if (!edge_port->open) {
1506 change_port_settings(tty, edge_port, old_termios);
1520 static int get_lsr_info(struct edgeport_port *edge_port,
1526 spin_lock_irqsave(&edge_port->ep_lock, flags);
1527 if (edge_port->maxTxCredits == edge_port->txCredits &&
1528 edge_port->txfifo.count == 0) {
1532 spin_unlock_irqrestore(&edge_port->ep_lock, flags);
1543 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1548 mcr = edge_port->shadowMCR;
1563 edge_port->shadowMCR = mcr;
1565 send_cmd_write_uart_register(edge_port, MCR, edge_port->shadowMCR);
1573 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1580 msr = edge_port->shadowMSR;
1581 mcr = edge_port->shadowMCR;
1595 static int get_serial_info(struct edgeport_port *edge_port,
1606 tmp.line = edge_port->port->serial->minor;
1607 tmp.port = edge_port->port->number;
1610 tmp.xmit_fifo_size = edge_port->maxTxCredits;
1631 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1641 return get_lsr_info(edge_port, (unsigned int __user *) arg);
1645 return get_serial_info(edge_port, (struct serial_struct __user *) arg);
1649 cprev = edge_port->icount;
1651 prepare_to_wait(&edge_port->delta_msr_wait,
1654 finish_wait(&edge_port->delta_msr_wait, &wait);
1658 cnow = edge_port->icount;
1674 cnow = edge_port->icount;
1705 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
1713 edge_port->chaseResponsePending = true;
1716 status = send_iosp_ext_cmd(edge_port, IOSP_CMD_CHASE_PORT, 0);
1719 block_until_chase_response(edge_port);
1721 edge_port->chaseResponsePending = false;
1730 status = send_iosp_ext_cmd(edge_port,
1734 status = send_iosp_ext_cmd(edge_port,
1754 struct edgeport_port *edge_port;
1863 edge_port = usb_get_serial_port_data(port);
1864 if (edge_port->open) {
1866 &edge_port->port->port);
1873 edge_port->icount.rx += rxLen;
1905 struct edgeport_port *edge_port;
1911 edge_port = usb_get_serial_port_data(port);
1912 if (edge_port == NULL) {
1914 "%s - edge_port == NULL for port %d\n",
1937 edge_port->chaseResponsePending = false;
1938 wake_up(&edge_port->wait_chase);
1949 edge_port->txCredits = GET_TX_BUFFER_SIZE(byte3);
1950 edge_port->maxTxCredits = edge_port->txCredits;
1951 dbg("%s - Port %u Open Response Inital MSR = %02x TxBufferSize = %d", __func__, edge_serial->rxPort, byte2, edge_port->txCredits);
1952 handle_new_msr(edge_port, byte2);
1956 tty = tty_port_tty_get(&edge_port->port->port);
1959 edge_port, tty->termios);
1964 edge_port->openPending = false;
1965 edge_port->open = true;
1966 wake_up(&edge_port->wait_open);
1974 if (!edge_port->open || edge_port->closePending)
1982 handle_new_lsr(edge_port, false, byte2, 0);
1990 handle_new_lsr(edge_port, true, byte2, byte3);
2006 handle_new_msr(edge_port, byte2);
2042 static void handle_new_msr(struct edgeport_port *edge_port, __u8 newMsr)
2050 icount = &edge_port->icount;
2061 wake_up_interruptible(&edge_port->delta_msr_wait);
2065 edge_port->shadowMSR = newMsr & 0xf0;
2075 static void handle_new_lsr(struct edgeport_port *edge_port, __u8 lsrData,
2084 edge_port->shadowLSR = lsr;
2098 tty_port_tty_get(&edge_port->port->port);
2100 edge_tty_recv(&edge_port->port->dev, tty, &data, 1);
2105 icount = &edge_port->icount;
2274 static int send_iosp_ext_cmd(struct edgeport_port *edge_port,
2286 dev_err(&edge_port->port->dev,
2294 edge_port->port->number - edge_port->port->serial->minor,
2297 status = write_cmd_usb(edge_port, buffer, length);
2311 static int write_cmd_usb(struct edgeport_port *edge_port,
2315 usb_get_serial_data(edge_port->port->serial);
2320 usb_serial_debug_data(debug, &edge_port->port->dev,
2335 buffer, length, edge_bulk_out_cmd_callback, edge_port);
2337 edge_port->commandPending = true;
2342 dev_err(&edge_port->port->dev,
2362 static int send_cmd_write_baud_rate(struct edgeport_port *edge_port,
2366 usb_get_serial_data(edge_port->port->serial);
2373 edge_port->port->number - edge_port->port->serial->minor;
2378 edge_port->port->number, baudRate);
2383 edge_port->port->number, baudRate);
2387 dev_err(&edge_port->port->dev, "%s - bad baud rate\n",
2395 dev_err(&edge_port->port->dev,
2410 edge_port->shadowLCR);
2412 status = write_cmd_usb(edge_port, cmdBuffer, cmdLen);
2463 static int send_cmd_write_uart_register(struct edgeport_port *edge_port,
2467 usb_get_serial_data(edge_port->port->serial);
2499 edge_port->port->number - edge_port->port->serial->minor,
2502 status = write_cmd_usb(edge_port, cmdBuffer, cmdLen);
2519 struct edgeport_port *edge_port, struct ktermios *old_termios)
2522 usb_get_serial_data(edge_port->port->serial);
2533 dbg("%s - port %d", __func__, edge_port->port->number);
2535 if (!edge_port->open &&
2536 !edge_port->openPending) {
2611 send_iosp_ext_cmd(edge_port,
2613 send_iosp_ext_cmd(edge_port,
2640 send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_RX_FLOW, rxFlow);
2644 send_iosp_ext_cmd(edge_port, IOSP_CMD_SET_TX_FLOW, txFlow);
2647 edge_port->shadowLCR &= ~(LCR_BITS_MASK | LCR_STOP_MASK | LCR_PAR_MASK);
2648 edge_port->shadowLCR |= (lData | lParity | lStop);
2650 edge_port->validDataMask = mask;
2653 status = send_cmd_write_uart_register(edge_port, LCR,
2654 edge_port->shadowLCR);
2659 edge_port->shadowMCR = MCR_MASTER_IE;
2661 edge_port->shadowMCR |= (MCR_DTR | MCR_RTS);
2663 status = send_cmd_write_uart_register(edge_port, MCR,
2664 edge_port->shadowMCR);
2676 status = send_cmd_write_baud_rate(edge_port, baud);
2894 struct edgeport_port *edge_port;
2982 edge_port = kzalloc(sizeof(struct edgeport_port), GFP_KERNEL);
2983 if (edge_port == NULL) {
2995 spin_lock_init(&edge_port->ep_lock);
2996 edge_port->port = serial->port[i];
2997 usb_set_serial_port_data(serial->port[i], edge_port);