Lines Matching +full:cable +full:- +full:modem

1 // SPDX-License-Identifier: GPL-2.0+
73 #define BAUD_TABLE_LIMIT (ARRAY_SIZE(icom_acfg_baud) - 1)
80 u32 int_reg_b; /* Adapter non-masked Interrupt */
88 u32 int_reg_2b; /* Adapter non-masked 2 */
92 u32 reserved[108]; /* 0-1B0 reserved by personality code */
93 u32 RcvStatusAddr; /* 1B0-1B3 Status Address for Next rcv */
98 u32 XmitStatusAddr; /* 1B8-1BB Transmit Status Address */
103 u32 reserved3; /* 1C0-1C3 Reserved */
108 u8 dce_resvd[20]; /* 1C8-1DB DCE Rsvd */
115 u32 call_addr; /* 1E0-1E3 Phn #/CFI buff addr */
116 u16 timer_value; /* 1E4-1E5 general timer value */
132 u8 cable_id; /* 1F5 Cable ID */
135 u32 cs_load_addr; /* 1F8-1FB Call Load PCI Addr */
136 u32 mac_load_addr; /* 1FC-1FF Mac Load PCI Addr */
386 dev_info(&icom_port->adapter->pci_dev->dev, ":%d:%s - %lx\n", in trace()
387 icom_port->port, trace_pt, trace_data); in trace()
396 struct pci_dev *dev = icom_port->adapter->pci_dev; in free_port_memory()
399 if (icom_port->recv_buf) { in free_port_memory()
400 dma_free_coherent(&dev->dev, 4096, icom_port->recv_buf, in free_port_memory()
401 icom_port->recv_buf_pci); in free_port_memory()
402 icom_port->recv_buf = NULL; in free_port_memory()
404 if (icom_port->xmit_buf) { in free_port_memory()
405 dma_free_coherent(&dev->dev, 4096, icom_port->xmit_buf, in free_port_memory()
406 icom_port->xmit_buf_pci); in free_port_memory()
407 icom_port->xmit_buf = NULL; in free_port_memory()
409 if (icom_port->statStg) { in free_port_memory()
410 dma_free_coherent(&dev->dev, 4096, icom_port->statStg, in free_port_memory()
411 icom_port->statStg_pci); in free_port_memory()
412 icom_port->statStg = NULL; in free_port_memory()
415 if (icom_port->xmitRestart) { in free_port_memory()
416 dma_free_coherent(&dev->dev, 4096, icom_port->xmitRestart, in free_port_memory()
417 icom_port->xmitRestart_pci); in free_port_memory()
418 icom_port->xmitRestart = NULL; in free_port_memory()
428 struct pci_dev *dev = icom_port->adapter->pci_dev; in get_port_memory()
430 icom_port->xmit_buf = in get_port_memory()
431 dma_alloc_coherent(&dev->dev, 4096, &icom_port->xmit_buf_pci, in get_port_memory()
433 if (!icom_port->xmit_buf) { in get_port_memory()
434 dev_err(&dev->dev, "Can not allocate Transmit buffer\n"); in get_port_memory()
435 return -ENOMEM; in get_port_memory()
439 (unsigned long) icom_port->xmit_buf); in get_port_memory()
441 icom_port->recv_buf = in get_port_memory()
442 dma_alloc_coherent(&dev->dev, 4096, &icom_port->recv_buf_pci, in get_port_memory()
444 if (!icom_port->recv_buf) { in get_port_memory()
445 dev_err(&dev->dev, "Can not allocate Receive buffer\n"); in get_port_memory()
447 return -ENOMEM; in get_port_memory()
450 (unsigned long) icom_port->recv_buf); in get_port_memory()
452 icom_port->statStg = in get_port_memory()
453 dma_alloc_coherent(&dev->dev, 4096, &icom_port->statStg_pci, in get_port_memory()
455 if (!icom_port->statStg) { in get_port_memory()
456 dev_err(&dev->dev, "Can not allocate Status buffer\n"); in get_port_memory()
458 return -ENOMEM; in get_port_memory()
461 (unsigned long) icom_port->statStg); in get_port_memory()
463 icom_port->xmitRestart = in get_port_memory()
464 dma_alloc_coherent(&dev->dev, 4096, &icom_port->xmitRestart_pci, in get_port_memory()
466 if (!icom_port->xmitRestart) { in get_port_memory()
467 dev_err(&dev->dev, in get_port_memory()
470 return -ENOMEM; in get_port_memory()
477 stgAddr = (unsigned long) icom_port->statStg; in get_port_memory()
480 stgAddr = stgAddr + sizeof(icom_port->statStg->xmit[0]); in get_port_memory()
481 if (index < (NUM_XBUFFS - 1)) { in get_port_memory()
482 memset(&icom_port->statStg->xmit[index], 0, sizeof(struct xmit_status_area)); in get_port_memory()
483 icom_port->statStg->xmit[index].leLengthASD = in get_port_memory()
487 (unsigned long) icom_port->xmit_buf); in get_port_memory()
488 icom_port->statStg->xmit[index].leBuffer = in get_port_memory()
489 cpu_to_le32(icom_port->xmit_buf_pci); in get_port_memory()
490 } else if (index == (NUM_XBUFFS - 1)) { in get_port_memory()
491 memset(&icom_port->statStg->xmit[index], 0, sizeof(struct xmit_status_area)); in get_port_memory()
492 icom_port->statStg->xmit[index].leLengthASD = in get_port_memory()
495 (unsigned long) icom_port->xmit_buf); in get_port_memory()
496 icom_port->statStg->xmit[index].leBuffer = in get_port_memory()
497 cpu_to_le32(icom_port->xmit_buf_pci); in get_port_memory()
499 memset(&icom_port->statStg->xmit[index], 0, sizeof(struct xmit_status_area)); in get_port_memory()
508 stgAddr = stgAddr + sizeof(icom_port->statStg->rcv[0]); in get_port_memory()
509 icom_port->statStg->rcv[index].leLength = 0; in get_port_memory()
510 icom_port->statStg->rcv[index].WorkingLength = in get_port_memory()
512 if (index < (NUM_RBUFFS - 1) ) { in get_port_memory()
513 offset = stgAddr - (unsigned long) icom_port->statStg; in get_port_memory()
514 icom_port->statStg->rcv[index].leNext = in get_port_memory()
515 cpu_to_le32(icom_port-> statStg_pci + offset); in get_port_memory()
517 (unsigned long) icom_port->recv_buf); in get_port_memory()
518 icom_port->statStg->rcv[index].leBuffer = in get_port_memory()
519 cpu_to_le32(icom_port->recv_buf_pci); in get_port_memory()
520 } else if (index == (NUM_RBUFFS -1) ) { in get_port_memory()
521 offset = startStgAddr - (unsigned long) icom_port->statStg; in get_port_memory()
522 icom_port->statStg->rcv[index].leNext = in get_port_memory()
523 cpu_to_le32(icom_port-> statStg_pci + offset); in get_port_memory()
525 (unsigned long) icom_port->recv_buf + 2048); in get_port_memory()
526 icom_port->statStg->rcv[index].leBuffer = in get_port_memory()
527 cpu_to_le32(icom_port->recv_buf_pci + 2048); in get_port_memory()
529 icom_port->statStg->rcv[index].leNext = 0; in get_port_memory()
530 icom_port->statStg->rcv[index].leBuffer = 0; in get_port_memory()
545 port = icom_port->port; in stop_processor()
547 dev_err(&icom_port->adapter->pci_dev->dev, in stop_processor()
553 stop_proc[port].global_control_reg = &icom_port->global_reg->control; in stop_processor()
555 stop_proc[port].global_control_reg = &icom_port->global_reg->control_2; in stop_processor()
576 port = icom_port->port; in start_processor()
578 dev_err(&icom_port->adapter->pci_dev->dev, in start_processor()
584 start_proc[port].global_control_reg = &icom_port->global_reg->control; in start_processor()
586 start_proc[port].global_control_reg = &icom_port->global_reg->control_2; in start_processor()
605 void __iomem *dram_ptr = icom_port->dram; in load_code()
609 struct pci_dev *dev = icom_port->adapter->pci_dev; in load_code()
612 writew(0x3FFF, icom_port->int_reg); in load_code()
623 if (request_firmware(&fw, "icom_call_setup.bin", &dev->dev) < 0) { in load_code()
624 dev_err(&dev->dev,"Unable to load icom_call_setup.bin firmware image\n"); in load_code()
625 status = -1; in load_code()
629 if (fw->size > ICOM_DCE_IRAM_OFFSET) { in load_code()
630 dev_err(&dev->dev, "Invalid firmware image for icom_call_setup.bin found.\n"); in load_code()
632 status = -1; in load_code()
636 iram_ptr = (char __iomem *)icom_port->dram + ICOM_IRAM_OFFSET; in load_code()
637 for (index = 0; index < fw->size; index++) in load_code()
638 writeb(fw->data[index], &iram_ptr[index]); in load_code()
643 if (request_firmware(&fw, "icom_res_dce.bin", &dev->dev) < 0) { in load_code()
644 dev_err(&dev->dev,"Unable to load icom_res_dce.bin firmware image\n"); in load_code()
645 status = -1; in load_code()
649 if (fw->size > ICOM_IRAM_SIZE) { in load_code()
650 dev_err(&dev->dev, "Invalid firmware image for icom_res_dce.bin found.\n"); in load_code()
652 status = -1; in load_code()
656 iram_ptr = (char __iomem *) icom_port->dram + ICOM_IRAM_OFFSET; in load_code()
657 for (index = ICOM_DCE_IRAM_OFFSET; index < fw->size; index++) in load_code()
658 writeb(fw->data[index], &iram_ptr[index]); in load_code()
663 if (icom_port->adapter->version == ADAPTER_V2) in load_code()
664 writeb(V2_HARDWARE, &(icom_port->dram->misc_flags)); in load_code()
670 &(icom_port->dram->HDLCConfigReg)); in load_code()
671 writeb(0x04, &(icom_port->dram->FlagFillIdleTimer)); /* 0.5 seconds */ in load_code()
672 writeb(0x00, &(icom_port->dram->CmdReg)); in load_code()
673 writeb(0x10, &(icom_port->dram->async_config3)); in load_code()
675 ICOM_ACFG_1STOP_BIT), &(icom_port->dram->async_config2)); in load_code()
680 new_page = dma_alloc_coherent(&dev->dev, 4096, &temp_pci, GFP_KERNEL); in load_code()
683 dev_err(&dev->dev, "Can not allocate DMA buffer\n"); in load_code()
684 status = -1; in load_code()
688 if (request_firmware(&fw, "icom_asc.bin", &dev->dev) < 0) { in load_code()
689 dev_err(&dev->dev,"Unable to load icom_asc.bin firmware image\n"); in load_code()
690 status = -1; in load_code()
694 if (fw->size > ICOM_DCE_IRAM_OFFSET) { in load_code()
695 dev_err(&dev->dev, "Invalid firmware image for icom_asc.bin found.\n"); in load_code()
697 status = -1; in load_code()
701 for (index = 0; index < fw->size; index++) in load_code()
702 new_page[index] = fw->data[index]; in load_code()
704 writeb((char) ((fw->size + 16)/16), &icom_port->dram->mac_length); in load_code()
705 writel(temp_pci, &icom_port->dram->mac_load_addr); in load_code()
718 writeb(START_DOWNLOAD, &icom_port->dram->sync); in load_code()
723 if (readb(&icom_port->dram->misc_flags) & ICOM_HDW_ACTIVE) in load_code()
728 status = -1; in load_code()
731 * check Cable ID in load_code()
733 cable_id = readb(&icom_port->dram->cable_id); in load_code()
736 /* Get cable ID into the lower 4 bits (standard form) */ in load_code()
738 icom_port->cable_id = cable_id; in load_code()
740 dev_err(&dev->dev,"Invalid or no cable attached\n"); in load_code()
741 icom_port->cable_id = NO_CABLE; in load_code()
748 writew(0x3FFF, icom_port->int_reg); in load_code()
751 writeb(ICOM_DISABLE, &(icom_port->dram->disable)); in load_code()
756 dev_err(&icom_port->adapter->pci_dev->dev,"Port not operational\n"); in load_code()
760 dma_free_coherent(&dev->dev, 4096, new_page, temp_pci); in load_code()
772 if (!icom_port->dram) { in startup()
774 dev_err(&icom_port->adapter->pci_dev->dev, in startup()
776 return -ENODEV; in startup()
780 * check Cable ID in startup()
782 raw_cable_id = readb(&icom_port->dram->cable_id); in startup()
785 /* Get cable ID into the lower 4 bits (standard form) */ in startup()
788 /* Check for valid Cable ID */ in startup()
790 (cable_id != icom_port->cable_id)) { in startup()
792 /* reload adapter code, pick up any potential changes in cable id */ in startup()
795 /* still no sign of cable, error out */ in startup()
796 raw_cable_id = readb(&icom_port->dram->cable_id); in startup()
799 (icom_port->cable_id == NO_CABLE)) in startup()
800 return -EIO; in startup()
807 port = icom_port->port; in startup()
809 dev_err(&icom_port->adapter->pci_dev->dev, in startup()
815 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask; in startup()
817 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask_2; in startup()
820 writew(0x00FF, icom_port->int_reg); in startup()
822 writew(0x3F00, icom_port->int_reg); in startup()
848 port = icom_port->port; in shutdown()
850 dev_err(&icom_port->adapter->pci_dev->dev, in shutdown()
855 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask; in shutdown()
857 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask_2; in shutdown()
871 cmdReg = readb(&icom_port->dram->CmdReg); in shutdown()
873 writeb(cmdReg & ~CMD_SND_BREAK, &icom_port->dram->CmdReg); in shutdown()
880 struct tty_port *tport = &port->state->port; in icom_write()
887 if (le16_to_cpu(icom_port->statStg->xmit[0].flags) & in icom_write()
893 data_count = kfifo_out_peek(&tport->xmit_fifo, icom_port->xmit_buf, in icom_write()
897 icom_port->statStg->xmit[0].flags = in icom_write()
899 icom_port->statStg->xmit[0].leLength = in icom_write()
902 (unsigned long) &icom_port->statStg->xmit[0] - in icom_write()
903 (unsigned long) icom_port->statStg; in icom_write()
904 *icom_port->xmitRestart = in icom_write()
905 cpu_to_le32(icom_port->statStg_pci + offset); in icom_write()
906 cmdReg = readb(&icom_port->dram->CmdReg); in icom_write()
908 &icom_port->dram->CmdReg); in icom_write()
909 writeb(START_XMIT, &icom_port->dram->StartXmitCmd); in icom_write()
912 readb(&icom_port->dram->StartXmitCmd); in icom_write()
924 uart_port_lock(&icom_port->uart_port); in check_modem_status()
926 /*modem input register */ in check_modem_status()
927 status = readb(&icom_port->dram->isr); in check_modem_status()
932 icom_port->uart_port.icount.rng++; in check_modem_status()
934 icom_port->uart_port.icount.dsr++; in check_modem_status()
936 uart_handle_dcd_change(&icom_port->uart_port, in check_modem_status()
939 uart_handle_cts_change(&icom_port->uart_port, in check_modem_status()
942 wake_up_interruptible(&icom_port->uart_port.state-> in check_modem_status()
946 uart_port_unlock(&icom_port->uart_port); in check_modem_status()
951 struct tty_port *tport = &icom_port->uart_port.state->port; in xmit_interrupt()
958 icom_port->statStg->xmit[0].flags &= in xmit_interrupt()
961 count = le16_to_cpu(icom_port->statStg->xmit[0].leLength); in xmit_interrupt()
962 icom_port->uart_port.icount.tx += count; in xmit_interrupt()
964 kfifo_skip_count(&tport->xmit_fifo, count); in xmit_interrupt()
966 if (!icom_write(&icom_port->uart_port)) in xmit_interrupt()
968 uart_write_wakeup(&icom_port->uart_port); in xmit_interrupt()
976 struct tty_port *port = &icom_port->uart_port.state->port; in recv_interrupt()
983 rcv_buff = icom_port->next_rcv; in recv_interrupt()
985 status = le16_to_cpu(icom_port->statStg->rcv[rcv_buff].flags); in recv_interrupt()
987 int first = -1; in recv_interrupt()
990 count = le16_to_cpu(icom_port->statStg->rcv[rcv_buff].leLength); in recv_interrupt()
996 offset = le32_to_cpu(icom_port->statStg->rcv[rcv_buff].leBuffer) - in recv_interrupt()
997 icom_port->recv_buf_pci; in recv_interrupt()
1001 first = icom_port->recv_buf[offset]; in recv_interrupt()
1002 tty_insert_flip_string(port, icom_port->recv_buf + offset, count - 1); in recv_interrupt()
1005 icount = &icom_port->uart_port.icount; in recv_interrupt()
1006 icount->rx += count; in recv_interrupt()
1023 icount->brk++; in recv_interrupt()
1025 icount->parity++; in recv_interrupt()
1027 icount->frame++; in recv_interrupt()
1029 icount->overrun++; in recv_interrupt()
1036 if (status & icom_port->ignore_status_mask) { in recv_interrupt()
1041 status &= icom_port->read_status_mask; in recv_interrupt()
1053 tty_insert_flip_char(port, *(icom_port->recv_buf + offset + count - 1), flag); in recv_interrupt()
1063 icom_port->statStg->rcv[rcv_buff].flags = 0; in recv_interrupt()
1064 icom_port->statStg->rcv[rcv_buff].leLength = 0; in recv_interrupt()
1065 icom_port->statStg->rcv[rcv_buff].WorkingLength = in recv_interrupt()
1072 status = le16_to_cpu(icom_port->statStg->rcv[rcv_buff].flags); in recv_interrupt()
1074 icom_port->next_rcv = rcv_buff; in recv_interrupt()
1083 uart_port_lock(&icom_port->uart_port); in process_interrupt()
1092 uart_port_unlock(&icom_port->uart_port); in process_interrupt()
1106 if (icom_adapter->version == ADAPTER_V2) { in icom_interrupt()
1107 int_reg = icom_adapter->base_addr + 0x8024; in icom_interrupt()
1113 icom_port = &icom_adapter->port_info[2]; in icom_interrupt()
1120 icom_port = &icom_adapter->port_info[3]; in icom_interrupt()
1121 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_interrupt()
1132 int_reg = icom_adapter->base_addr + 0x8004; in icom_interrupt()
1134 int_reg = icom_adapter->base_addr + 0x4004; in icom_interrupt()
1141 icom_port = &icom_adapter->port_info[0]; in icom_interrupt()
1148 icom_port = &icom_adapter->port_info[1]; in icom_interrupt()
1149 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_interrupt()
1166 * ------------------------------------------------------------------
1167 * Begin serial-core API
1168 * ------------------------------------------------------------------
1177 if (le16_to_cpu(icom_port->statStg->xmit[0].flags) & in icom_tx_empty()
1193 local_osr = readb(&icom_port->dram->osr); in icom_set_mctrl()
1211 writeb(local_osr, &icom_port->dram->osr); in icom_set_mctrl()
1222 status = readb(&icom_port->dram->isr); in icom_get_mctrl()
1237 cmdReg = readb(&icom_port->dram->CmdReg); in icom_stop_tx()
1238 writeb(cmdReg | CMD_HOLD_XMIT, &icom_port->dram->CmdReg); in icom_stop_tx()
1247 cmdReg = readb(&icom_port->dram->CmdReg); in icom_start_tx()
1250 &icom_port->dram->CmdReg); in icom_start_tx()
1267 xdata = readb(&icom_port->dram->xchar); in icom_send_xchar()
1270 writeb(ch, &icom_port->dram->xchar); in icom_send_xchar()
1273 xdata = readb(&icom_port->dram->xchar); in icom_send_xchar()
1287 cmdReg = readb(&icom_port->dram->CmdReg); in icom_stop_rx()
1288 writeb(cmdReg & ~CMD_RCV_ENABLE, &icom_port->dram->CmdReg); in icom_stop_rx()
1299 cmdReg = readb(&icom_port->dram->CmdReg); in icom_break()
1300 if (break_state == -1) { in icom_break()
1301 writeb(cmdReg | CMD_SND_BREAK, &icom_port->dram->CmdReg); in icom_break()
1303 writeb(cmdReg & ~CMD_SND_BREAK, &icom_port->dram->CmdReg); in icom_break()
1313 kref_get(&icom_port->adapter->kref); in icom_open()
1317 kref_put(&icom_port->adapter->kref, icom_kref_release); in icom_open()
1333 cmdReg = readb(&icom_port->dram->CmdReg); in icom_close()
1334 writeb(cmdReg & ~CMD_RCV_ENABLE, &icom_port->dram->CmdReg); in icom_close()
1338 kref_put(&icom_port->adapter->kref, icom_kref_release); in icom_close()
1358 cflag = termios->c_cflag; in icom_set_termios()
1359 iflag = termios->c_iflag; in icom_set_termios()
1411 /* CTS flow control flag and modem status interrupts */ in icom_set_termios()
1412 tmp_byte = readb(&(icom_port->dram->HDLCConfigReg)); in icom_set_termios()
1417 writeb(tmp_byte, &(icom_port->dram->HDLCConfigReg)); in icom_set_termios()
1422 icom_port->read_status_mask = SA_FLAGS_OVERRUN | SA_FL_RCV_DONE; in icom_set_termios()
1424 icom_port->read_status_mask |= in icom_set_termios()
1428 icom_port->read_status_mask |= SA_FLAGS_BREAK_DET; in icom_set_termios()
1433 icom_port->ignore_status_mask = 0; in icom_set_termios()
1435 icom_port->ignore_status_mask |= in icom_set_termios()
1438 icom_port->ignore_status_mask |= SA_FLAGS_BREAK_DET; in icom_set_termios()
1444 icom_port->ignore_status_mask |= SA_FLAGS_OVERRUN; in icom_set_termios()
1451 icom_port->ignore_status_mask |= SA_FL_RCV_DONE; in icom_set_termios()
1454 writeb(CMD_RCV_DISABLE, &icom_port->dram->CmdReg); in icom_set_termios()
1457 if (readb(&icom_port->dram->PrevCmdReg) == 0x00) { in icom_set_termios()
1464 icom_port->statStg->rcv[rcv_buff].flags = 0; in icom_set_termios()
1465 icom_port->statStg->rcv[rcv_buff].leLength = 0; in icom_set_termios()
1466 icom_port->statStg->rcv[rcv_buff].WorkingLength = in icom_set_termios()
1471 icom_port->statStg->xmit[xmit_buff].flags = 0; in icom_set_termios()
1476 writeb(new_config3, &(icom_port->dram->async_config3)); in icom_set_termios()
1477 writeb(new_config2, &(icom_port->dram->async_config2)); in icom_set_termios()
1478 tmp_byte = readb(&(icom_port->dram->HDLCConfigReg)); in icom_set_termios()
1480 writeb(tmp_byte, &(icom_port->dram->HDLCConfigReg)); in icom_set_termios()
1481 writeb(0x04, &(icom_port->dram->FlagFillIdleTimer)); /* 0.5 seconds */ in icom_set_termios()
1482 writeb(0xFF, &(icom_port->dram->ier)); /* enable modem signal interrupts */ in icom_set_termios()
1485 writeb(CMD_RESTART, &icom_port->dram->CmdReg); in icom_set_termios()
1488 if (readb(&icom_port->dram->CmdReg) == 0x00) { in icom_set_termios()
1495 (unsigned long) &icom_port->statStg->rcv[0] - in icom_set_termios()
1496 (unsigned long) icom_port->statStg; in icom_set_termios()
1497 writel(icom_port->statStg_pci + offset, in icom_set_termios()
1498 &icom_port->dram->RcvStatusAddr); in icom_set_termios()
1499 icom_port->next_rcv = 0; in icom_set_termios()
1500 *icom_port->xmitRestart = 0; in icom_set_termios()
1501 writel(icom_port->xmitRestart_pci, in icom_set_termios()
1502 &icom_port->dram->XmitStatusAddr); in icom_set_termios()
1504 writeb(CMD_XMIT_RCV_ENABLE, &icom_port->dram->CmdReg); in icom_set_termios()
1516 port->type = PORT_ICOM; in icom_config_port()
1549 u32 subsystem_id = icom_adapter->subsystem_id; in icom_init_ports()
1553 if (icom_adapter->version == ADAPTER_V1) { in icom_init_ports()
1554 icom_adapter->numb_ports = 2; in icom_init_ports()
1557 icom_port = &icom_adapter->port_info[i]; in icom_init_ports()
1558 icom_port->port = i; in icom_init_ports()
1559 icom_port->status = ICOM_PORT_ACTIVE; in icom_init_ports()
1563 icom_adapter->numb_ports = 4; in icom_init_ports()
1566 icom_port = &icom_adapter->port_info[i]; in icom_init_ports()
1568 icom_port->port = i; in icom_init_ports()
1569 icom_port->status = ICOM_PORT_ACTIVE; in icom_init_ports()
1572 icom_adapter->numb_ports = 4; in icom_init_ports()
1574 icom_adapter->port_info[0].port = 0; in icom_init_ports()
1575 icom_adapter->port_info[0].status = ICOM_PORT_ACTIVE; in icom_init_ports()
1576 icom_adapter->port_info[1].status = ICOM_PORT_OFF; in icom_init_ports()
1577 icom_adapter->port_info[2].port = 2; in icom_init_ports()
1578 icom_adapter->port_info[2].status = ICOM_PORT_ACTIVE; in icom_init_ports()
1579 icom_adapter->port_info[3].status = ICOM_PORT_OFF; in icom_init_ports()
1588 if (icom_adapter->version == ADAPTER_V1) { in icom_port_active()
1589 icom_port->global_reg = icom_adapter->base_addr + 0x4000; in icom_port_active()
1590 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1591 0x4004 + 2 - 2 * port_num; in icom_port_active()
1593 icom_port->global_reg = icom_adapter->base_addr + 0x8000; in icom_port_active()
1594 if (icom_port->port < 2) in icom_port_active()
1595 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1596 0x8004 + 2 - 2 * icom_port->port; in icom_port_active()
1598 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1599 0x8024 + 2 - 2 * (icom_port->port - 2); in icom_port_active()
1607 for (port_num = 0; port_num < icom_adapter->numb_ports; port_num++) { in icom_load_ports()
1609 icom_port = &icom_adapter->port_info[port_num]; in icom_load_ports()
1611 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_load_ports()
1613 icom_port->dram = icom_adapter->base_addr + in icom_load_ports()
1614 0x2000 * icom_port->port; in icom_load_ports()
1616 icom_port->adapter = icom_adapter; in icom_load_ports()
1620 dev_err(&icom_port->adapter->pci_dev->dev, in icom_load_ports()
1638 return -ENOMEM; in icom_alloc_adapter()
1643 if (cur_adapter_entry->index != adapter_count) { in icom_alloc_adapter()
1649 icom_adapter->index = adapter_count; in icom_alloc_adapter()
1650 list_add_tail(&icom_adapter->icom_adapter_entry, in icom_alloc_adapter()
1651 &cur_adapter_entry->icom_adapter_entry); in icom_alloc_adapter()
1659 list_del(&icom_adapter->icom_adapter_entry); in icom_free_adapter()
1670 for (index = 0; index < icom_adapter->numb_ports; index++) { in icom_kref_release()
1671 icom_port = &icom_adapter->port_info[index]; in icom_kref_release()
1673 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_kref_release()
1674 dev_info(&icom_adapter->pci_dev->dev, in icom_kref_release()
1678 &icom_port->uart_port); in icom_kref_release()
1681 writeb(0x00, &icom_port->dram->osr); in icom_kref_release()
1693 free_irq(icom_adapter->pci_dev->irq, (void *) icom_adapter); in icom_kref_release()
1694 iounmap(icom_adapter->base_addr); in icom_kref_release()
1695 pci_release_regions(icom_adapter->pci_dev); in icom_kref_release()
1710 dev_err(&dev->dev, "Device enable FAILED\n"); in icom_probe()
1716 dev_err(&dev->dev, "pci_request_regions FAILED\n"); in icom_probe()
1725 dev_err(&dev->dev, "PCI Config read FAILED\n"); in icom_probe()
1733 if (ent->driver_data == ADAPTER_V1) { in icom_probe()
1743 dev_err(&dev->dev, "icom_alloc_adapter FAILED\n"); in icom_probe()
1744 retval = -EIO; in icom_probe()
1748 icom_adapter->base_addr_pci = pci_resource_start(dev, 0); in icom_probe()
1749 icom_adapter->pci_dev = dev; in icom_probe()
1750 icom_adapter->version = ent->driver_data; in icom_probe()
1751 icom_adapter->subsystem_id = ent->subdevice; in icom_probe()
1756 dev_err(&dev->dev, "Port configuration failed\n"); in icom_probe()
1760 icom_adapter->base_addr = pci_ioremap_bar(dev, 0); in icom_probe()
1762 if (!icom_adapter->base_addr) { in icom_probe()
1763 retval = -ENOMEM; in icom_probe()
1768 …retval = request_irq(dev->irq, icom_interrupt, IRQF_SHARED, ICOM_DRIVER_NAME, (void *)icom_adapter… in icom_probe()
1775 for (index = 0; index < icom_adapter->numb_ports; index++) { in icom_probe()
1776 icom_port = &icom_adapter->port_info[index]; in icom_probe()
1778 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_probe()
1779 icom_port->uart_port.irq = icom_port->adapter->pci_dev->irq; in icom_probe()
1780 icom_port->uart_port.type = PORT_ICOM; in icom_probe()
1781 icom_port->uart_port.iotype = UPIO_MEM; in icom_probe()
1782 icom_port->uart_port.membase = in icom_probe()
1783 (unsigned char __iomem *)icom_adapter->base_addr_pci; in icom_probe()
1784 icom_port->uart_port.fifosize = 16; in icom_probe()
1785 icom_port->uart_port.ops = &icom_ops; in icom_probe()
1786 icom_port->uart_port.line = in icom_probe()
1787 icom_port->port + icom_adapter->index * 4; in icom_probe()
1788 if (uart_add_one_port (&icom_uart_driver, &icom_port->uart_port)) { in icom_probe()
1789 icom_port->status = ICOM_PORT_OFF; in icom_probe()
1790 dev_err(&dev->dev, "Device add failed\n"); in icom_probe()
1792 dev_info(&dev->dev, "Device added\n"); in icom_probe()
1796 kref_init(&icom_adapter->kref); in icom_probe()
1800 iounmap(icom_adapter->base_addr); in icom_probe()
1817 if (icom_adapter->pci_dev == dev) { in icom_remove()
1818 kref_put(&icom_adapter->kref, icom_kref_release); in icom_remove()
1823 dev_err(&dev->dev, "Unable to find device to remove\n"); in icom_remove()