Lines Matching refs:icom_port
66 #define ICOM_PORT ((struct icom_port *)port)
139 static inline void trace(struct icom_port *icom_port, char *trace_pt, in trace() argument
142 dev_info(&icom_port->adapter->pci_dev->dev, ":%d:%s - %lx\n", in trace()
143 icom_port->port, trace_pt, trace_data); in trace()
146 static inline void trace(struct icom_port *icom_port, char *trace_pt, unsigned long trace_data) {}; in trace() argument
150 static void free_port_memory(struct icom_port *icom_port) in free_port_memory() argument
152 struct pci_dev *dev = icom_port->adapter->pci_dev; in free_port_memory()
154 trace(icom_port, "RET_PORT_MEM", 0); in free_port_memory()
155 if (icom_port->recv_buf) { in free_port_memory()
156 pci_free_consistent(dev, 4096, icom_port->recv_buf, in free_port_memory()
157 icom_port->recv_buf_pci); in free_port_memory()
158 icom_port->recv_buf = NULL; in free_port_memory()
160 if (icom_port->xmit_buf) { in free_port_memory()
161 pci_free_consistent(dev, 4096, icom_port->xmit_buf, in free_port_memory()
162 icom_port->xmit_buf_pci); in free_port_memory()
163 icom_port->xmit_buf = NULL; in free_port_memory()
165 if (icom_port->statStg) { in free_port_memory()
166 pci_free_consistent(dev, 4096, icom_port->statStg, in free_port_memory()
167 icom_port->statStg_pci); in free_port_memory()
168 icom_port->statStg = NULL; in free_port_memory()
171 if (icom_port->xmitRestart) { in free_port_memory()
172 pci_free_consistent(dev, 4096, icom_port->xmitRestart, in free_port_memory()
173 icom_port->xmitRestart_pci); in free_port_memory()
174 icom_port->xmitRestart = NULL; in free_port_memory()
178 static int get_port_memory(struct icom_port *icom_port) in get_port_memory() argument
184 struct pci_dev *dev = icom_port->adapter->pci_dev; in get_port_memory()
186 icom_port->xmit_buf = in get_port_memory()
187 pci_alloc_consistent(dev, 4096, &icom_port->xmit_buf_pci); in get_port_memory()
188 if (!icom_port->xmit_buf) { in get_port_memory()
193 trace(icom_port, "GET_PORT_MEM", in get_port_memory()
194 (unsigned long) icom_port->xmit_buf); in get_port_memory()
196 icom_port->recv_buf = in get_port_memory()
197 pci_alloc_consistent(dev, 4096, &icom_port->recv_buf_pci); in get_port_memory()
198 if (!icom_port->recv_buf) { in get_port_memory()
200 free_port_memory(icom_port); in get_port_memory()
203 trace(icom_port, "GET_PORT_MEM", in get_port_memory()
204 (unsigned long) icom_port->recv_buf); in get_port_memory()
206 icom_port->statStg = in get_port_memory()
207 pci_alloc_consistent(dev, 4096, &icom_port->statStg_pci); in get_port_memory()
208 if (!icom_port->statStg) { in get_port_memory()
210 free_port_memory(icom_port); in get_port_memory()
213 trace(icom_port, "GET_PORT_MEM", in get_port_memory()
214 (unsigned long) icom_port->statStg); in get_port_memory()
216 icom_port->xmitRestart = in get_port_memory()
217 pci_alloc_consistent(dev, 4096, &icom_port->xmitRestart_pci); in get_port_memory()
218 if (!icom_port->xmitRestart) { in get_port_memory()
221 free_port_memory(icom_port); in get_port_memory()
225 memset(icom_port->statStg, 0, 4096); in get_port_memory()
231 stgAddr = (unsigned long) icom_port->statStg; in get_port_memory()
233 trace(icom_port, "FOD_ADDR", stgAddr); in get_port_memory()
234 stgAddr = stgAddr + sizeof(icom_port->statStg->xmit[0]); in get_port_memory()
236 memset(&icom_port->statStg->xmit[index], 0, sizeof(struct xmit_status_area)); in get_port_memory()
237 icom_port->statStg->xmit[index].leLengthASD = in get_port_memory()
239 trace(icom_port, "FOD_ADDR", stgAddr); in get_port_memory()
240 trace(icom_port, "FOD_XBUFF", in get_port_memory()
241 (unsigned long) icom_port->xmit_buf); in get_port_memory()
242 icom_port->statStg->xmit[index].leBuffer = in get_port_memory()
243 cpu_to_le32(icom_port->xmit_buf_pci); in get_port_memory()
245 memset(&icom_port->statStg->xmit[index], 0, sizeof(struct xmit_status_area)); in get_port_memory()
246 icom_port->statStg->xmit[index].leLengthASD = in get_port_memory()
248 trace(icom_port, "FOD_XBUFF", in get_port_memory()
249 (unsigned long) icom_port->xmit_buf); in get_port_memory()
250 icom_port->statStg->xmit[index].leBuffer = in get_port_memory()
251 cpu_to_le32(icom_port->xmit_buf_pci); in get_port_memory()
253 memset(&icom_port->statStg->xmit[index], 0, sizeof(struct xmit_status_area)); in get_port_memory()
261 trace(icom_port, "FID_ADDR", stgAddr); in get_port_memory()
262 stgAddr = stgAddr + sizeof(icom_port->statStg->rcv[0]); in get_port_memory()
263 icom_port->statStg->rcv[index].leLength = 0; in get_port_memory()
264 icom_port->statStg->rcv[index].WorkingLength = in get_port_memory()
267 offset = stgAddr - (unsigned long) icom_port->statStg; in get_port_memory()
268 icom_port->statStg->rcv[index].leNext = in get_port_memory()
269 cpu_to_le32(icom_port-> statStg_pci + offset); in get_port_memory()
270 trace(icom_port, "FID_RBUFF", in get_port_memory()
271 (unsigned long) icom_port->recv_buf); in get_port_memory()
272 icom_port->statStg->rcv[index].leBuffer = in get_port_memory()
273 cpu_to_le32(icom_port->recv_buf_pci); in get_port_memory()
275 offset = startStgAddr - (unsigned long) icom_port->statStg; in get_port_memory()
276 icom_port->statStg->rcv[index].leNext = in get_port_memory()
277 cpu_to_le32(icom_port-> statStg_pci + offset); in get_port_memory()
278 trace(icom_port, "FID_RBUFF", in get_port_memory()
279 (unsigned long) icom_port->recv_buf + 2048); in get_port_memory()
280 icom_port->statStg->rcv[index].leBuffer = in get_port_memory()
281 cpu_to_le32(icom_port->recv_buf_pci + 2048); in get_port_memory()
283 icom_port->statStg->rcv[index].leNext = 0; in get_port_memory()
284 icom_port->statStg->rcv[index].leBuffer = 0; in get_port_memory()
291 static void stop_processor(struct icom_port *icom_port) in stop_processor() argument
299 port = icom_port->port; in stop_processor()
301 dev_err(&icom_port->adapter->pci_dev->dev, in stop_processor()
307 stop_proc[port].global_control_reg = &icom_port->global_reg->control; in stop_processor()
309 stop_proc[port].global_control_reg = &icom_port->global_reg->control_2; in stop_processor()
322 static void start_processor(struct icom_port *icom_port) in start_processor() argument
330 port = icom_port->port; in start_processor()
332 dev_err(&icom_port->adapter->pci_dev->dev, in start_processor()
338 start_proc[port].global_control_reg = &icom_port->global_reg->control; in start_processor()
340 start_proc[port].global_control_reg = &icom_port->global_reg->control_2; in start_processor()
353 static void load_code(struct icom_port *icom_port) in load_code() argument
359 void __iomem *dram_ptr = icom_port->dram; in load_code()
363 struct pci_dev *dev = icom_port->adapter->pci_dev; in load_code()
366 writew(0x3FFF, icom_port->int_reg); in load_code()
368 trace(icom_port, "CLEAR_INTERRUPTS", 0); in load_code()
371 stop_processor(icom_port); in load_code()
390 iram_ptr = (char __iomem *)icom_port->dram + ICOM_IRAM_OFFSET; in load_code()
410 iram_ptr = (char __iomem *) icom_port->dram + ICOM_IRAM_OFFSET; in load_code()
417 if (icom_port->adapter->version == ADAPTER_V2) in load_code()
418 writeb(V2_HARDWARE, &(icom_port->dram->misc_flags)); in load_code()
421 start_processor(icom_port); in load_code()
424 &(icom_port->dram->HDLCConfigReg)); in load_code()
425 writeb(0x04, &(icom_port->dram->FlagFillIdleTimer)); /* 0.5 seconds */ in load_code()
426 writeb(0x00, &(icom_port->dram->CmdReg)); in load_code()
427 writeb(0x10, &(icom_port->dram->async_config3)); in load_code()
429 ICOM_ACFG_1STOP_BIT), &(icom_port->dram->async_config2)); in load_code()
458 writeb((char) ((fw->size + 16)/16), &icom_port->dram->mac_length); in load_code()
459 writel(temp_pci, &icom_port->dram->mac_load_addr); in load_code()
472 writeb(START_DOWNLOAD, &icom_port->dram->sync); in load_code()
477 if (readb(&icom_port->dram->misc_flags) & ICOM_HDW_ACTIVE) in load_code()
487 cable_id = readb(&icom_port->dram->cable_id); in load_code()
492 icom_port->cable_id = cable_id; in load_code()
495 icom_port->cable_id = NO_CABLE; in load_code()
502 writew(0x3FFF, icom_port->int_reg); in load_code()
505 writeb(ICOM_DISABLE, &(icom_port->dram->disable)); in load_code()
508 stop_processor(icom_port); in load_code()
510 dev_err(&icom_port->adapter->pci_dev->dev,"Port not operational\n"); in load_code()
517 static int startup(struct icom_port *icom_port) in startup() argument
524 trace(icom_port, "STARTUP", 0); in startup()
526 if (!icom_port->dram) { in startup()
528 dev_err(&icom_port->adapter->pci_dev->dev, in startup()
536 raw_cable_id = readb(&icom_port->dram->cable_id); in startup()
537 trace(icom_port, "CABLE_ID", raw_cable_id); in startup()
544 (cable_id != icom_port->cable_id)) { in startup()
547 load_code(icom_port); in startup()
550 raw_cable_id = readb(&icom_port->dram->cable_id); in startup()
553 (icom_port->cable_id == NO_CABLE)) in startup()
561 port = icom_port->port; in startup()
563 dev_err(&icom_port->adapter->pci_dev->dev, in startup()
569 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask; in startup()
571 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask_2; in startup()
574 writew(0x00FF, icom_port->int_reg); in startup()
576 writew(0x3F00, icom_port->int_reg); in startup()
589 static void shutdown(struct icom_port *icom_port) in shutdown() argument
597 trace(icom_port, "SHUTDOWN", 0); in shutdown()
602 port = icom_port->port; in shutdown()
604 dev_err(&icom_port->adapter->pci_dev->dev, in shutdown()
609 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask; in shutdown()
611 int_mask_tbl[port].global_int_mask = &icom_port->global_reg->int_mask_2; in shutdown()
625 cmdReg = readb(&icom_port->dram->CmdReg); in shutdown()
627 writeb(cmdReg & ~CMD_SND_BREAK, &icom_port->dram->CmdReg); in shutdown()
679 static inline void check_modem_status(struct icom_port *icom_port) in check_modem_status() argument
685 spin_lock(&icom_port->uart_port.lock); in check_modem_status()
688 status = readb(&icom_port->dram->isr); in check_modem_status()
689 trace(icom_port, "CHECK_MODEM", status); in check_modem_status()
693 icom_port->uart_port.icount.rng++; in check_modem_status()
695 icom_port->uart_port.icount.dsr++; in check_modem_status()
697 uart_handle_dcd_change(&icom_port->uart_port, in check_modem_status()
700 uart_handle_cts_change(&icom_port->uart_port, in check_modem_status()
703 wake_up_interruptible(&icom_port->uart_port.state-> in check_modem_status()
707 spin_unlock(&icom_port->uart_port.lock); in check_modem_status()
710 static void xmit_interrupt(u16 port_int_reg, struct icom_port *icom_port) in xmit_interrupt() argument
716 trace(icom_port, "XMIT_COMPLETE", 0); in xmit_interrupt()
719 icom_port->statStg->xmit[0].flags &= in xmit_interrupt()
723 cpu_to_le16(icom_port->statStg->xmit[0].leLength); in xmit_interrupt()
724 icom_port->uart_port.icount.tx += count; in xmit_interrupt()
727 !uart_circ_empty(&icom_port->uart_port.state->xmit); i++) { in xmit_interrupt()
729 icom_port->uart_port.state->xmit.tail++; in xmit_interrupt()
730 icom_port->uart_port.state->xmit.tail &= in xmit_interrupt()
734 if (!icom_write(&icom_port->uart_port)) in xmit_interrupt()
736 uart_write_wakeup(&icom_port->uart_port); in xmit_interrupt()
738 trace(icom_port, "XMIT_DISABLED", 0); in xmit_interrupt()
741 static void recv_interrupt(u16 port_int_reg, struct icom_port *icom_port) in recv_interrupt() argument
744 struct tty_port *port = &icom_port->uart_port.state->port; in recv_interrupt()
750 trace(icom_port, "RCV_COMPLETE", 0); in recv_interrupt()
751 rcv_buff = icom_port->next_rcv; in recv_interrupt()
753 status = cpu_to_le16(icom_port->statStg->rcv[rcv_buff].flags); in recv_interrupt()
757 trace(icom_port, "FID_STATUS", status); in recv_interrupt()
758 count = cpu_to_le16(icom_port->statStg->rcv[rcv_buff].leLength); in recv_interrupt()
760 trace(icom_port, "RCV_COUNT", count); in recv_interrupt()
762 trace(icom_port, "REAL_COUNT", count); in recv_interrupt()
765 cpu_to_le32(icom_port->statStg->rcv[rcv_buff].leBuffer) - in recv_interrupt()
766 icom_port->recv_buf_pci; in recv_interrupt()
770 first = icom_port->recv_buf[offset]; in recv_interrupt()
771 tty_insert_flip_string(port, icom_port->recv_buf + offset, count - 1); in recv_interrupt()
774 icount = &icom_port->uart_port.icount; in recv_interrupt()
782 trace(icom_port, "BREAK_DET", 0); in recv_interrupt()
805 if (status & icom_port->ignore_status_mask) { in recv_interrupt()
806 trace(icom_port, "IGNORE_CHAR", 0); in recv_interrupt()
810 status &= icom_port->read_status_mask; in recv_interrupt()
815 trace(icom_port, "PARITY_ERROR", 0); in recv_interrupt()
822 tty_insert_flip_char(port, *(icom_port->recv_buf + offset + count - 1), flag); in recv_interrupt()
832 icom_port->statStg->rcv[rcv_buff].flags = 0; in recv_interrupt()
833 icom_port->statStg->rcv[rcv_buff].leLength = 0; in recv_interrupt()
834 icom_port->statStg->rcv[rcv_buff].WorkingLength = in recv_interrupt()
841 status = cpu_to_le16(icom_port->statStg->rcv[rcv_buff].flags); in recv_interrupt()
843 icom_port->next_rcv = rcv_buff; in recv_interrupt()
845 spin_unlock(&icom_port->uart_port.lock); in recv_interrupt()
847 spin_lock(&icom_port->uart_port.lock); in recv_interrupt()
851 struct icom_port *icom_port) in process_interrupt() argument
854 spin_lock(&icom_port->uart_port.lock); in process_interrupt()
855 trace(icom_port, "INTERRUPT", port_int_reg); in process_interrupt()
858 xmit_interrupt(port_int_reg, icom_port); in process_interrupt()
861 recv_interrupt(port_int_reg, icom_port); in process_interrupt()
863 spin_unlock(&icom_port->uart_port.lock); in process_interrupt()
872 struct icom_port *icom_port; in icom_interrupt() local
884 icom_port = &icom_adapter->port_info[2]; in icom_interrupt()
886 process_interrupt(port_int_reg, icom_port); in icom_interrupt()
887 check_modem_status(icom_port); in icom_interrupt()
891 icom_port = &icom_adapter->port_info[3]; in icom_interrupt()
892 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_interrupt()
895 process_interrupt(port_int_reg, icom_port); in icom_interrupt()
896 check_modem_status(icom_port); in icom_interrupt()
912 icom_port = &icom_adapter->port_info[0]; in icom_interrupt()
914 process_interrupt(port_int_reg, icom_port); in icom_interrupt()
915 check_modem_status(icom_port); in icom_interrupt()
919 icom_port = &icom_adapter->port_info[1]; in icom_interrupt()
920 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_interrupt()
922 process_interrupt(port_int_reg, icom_port); in icom_interrupt()
923 check_modem_status(icom_port); in icom_interrupt()
1324 struct icom_port *icom_port; in icom_init_ports() local
1330 icom_port = &icom_adapter->port_info[i]; in icom_init_ports()
1331 icom_port->port = i; in icom_init_ports()
1332 icom_port->status = ICOM_PORT_ACTIVE; in icom_init_ports()
1333 icom_port->imbed_modem = ICOM_UNKNOWN; in icom_init_ports()
1340 icom_port = &icom_adapter->port_info[i]; in icom_init_ports()
1342 icom_port->port = i; in icom_init_ports()
1343 icom_port->status = ICOM_PORT_ACTIVE; in icom_init_ports()
1344 icom_port->imbed_modem = ICOM_IMBED_MODEM; in icom_init_ports()
1371 static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *icom_adapter, int po… in icom_port_active() argument
1374 icom_port->global_reg = icom_adapter->base_addr + 0x4000; in icom_port_active()
1375 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1378 icom_port->global_reg = icom_adapter->base_addr + 0x8000; in icom_port_active()
1379 if (icom_port->port < 2) in icom_port_active()
1380 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1381 0x8004 + 2 - 2 * icom_port->port; in icom_port_active()
1383 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1384 0x8024 + 2 - 2 * (icom_port->port - 2); in icom_port_active()
1389 struct icom_port *icom_port; in icom_load_ports() local
1394 icom_port = &icom_adapter->port_info[port_num]; in icom_load_ports()
1396 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_load_ports()
1397 icom_port_active(icom_port, icom_adapter, port_num); in icom_load_ports()
1398 icom_port->dram = icom_adapter->base_addr + in icom_load_ports()
1399 0x2000 * icom_port->port; in icom_load_ports()
1401 icom_port->adapter = icom_adapter; in icom_load_ports()
1404 if (get_port_memory(icom_port) != 0) { in icom_load_ports()
1405 dev_err(&icom_port->adapter->pci_dev->dev, in icom_load_ports()
1452 struct icom_port *icom_port; in icom_remove_adapter() local
1456 icom_port = &icom_adapter->port_info[index]; in icom_remove_adapter()
1458 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_remove_adapter()
1463 &icom_port->uart_port); in icom_remove_adapter()
1466 writeb(0x00, &icom_port->dram->osr); in icom_remove_adapter()
1472 stop_processor(icom_port); in icom_remove_adapter()
1474 free_port_memory(icom_port); in icom_remove_adapter()
1499 struct icom_port *icom_port; in icom_probe() local
1569 icom_port = &icom_adapter->port_info[index]; in icom_probe()
1571 if (icom_port->status == ICOM_PORT_ACTIVE) { in icom_probe()
1572 icom_port->uart_port.irq = icom_port->adapter->pci_dev->irq; in icom_probe()
1573 icom_port->uart_port.type = PORT_ICOM; in icom_probe()
1574 icom_port->uart_port.iotype = UPIO_MEM; in icom_probe()
1575 icom_port->uart_port.membase = in icom_probe()
1577 icom_port->uart_port.fifosize = 16; in icom_probe()
1578 icom_port->uart_port.ops = &icom_ops; in icom_probe()
1579 icom_port->uart_port.line = in icom_probe()
1580 icom_port->port + icom_adapter->index * 4; in icom_probe()
1581 if (uart_add_one_port (&icom_uart_driver, &icom_port->uart_port)) { in icom_probe()
1582 icom_port->status = ICOM_PORT_OFF; in icom_probe()