Lines Matching refs:icom_adapter

52 #define to_icom_adapter(d) container_of(d, struct icom_adapter, kref)
854 struct icom_adapter *icom_adapter; in icom_interrupt() local
858 icom_adapter = (struct icom_adapter *) dev_id; in icom_interrupt()
860 if (icom_adapter->version == ADAPTER_V2) { in icom_interrupt()
861 int_reg = icom_adapter->base_addr + 0x8024; in icom_interrupt()
867 icom_port = &icom_adapter->port_info[2]; in icom_interrupt()
874 icom_port = &icom_adapter->port_info[3]; in icom_interrupt()
886 int_reg = icom_adapter->base_addr + 0x8004; in icom_interrupt()
888 int_reg = icom_adapter->base_addr + 0x4004; in icom_interrupt()
895 icom_port = &icom_adapter->port_info[0]; in icom_interrupt()
902 icom_port = &icom_adapter->port_info[1]; in icom_interrupt()
1303 static int icom_init_ports(struct icom_adapter *icom_adapter) in icom_init_ports() argument
1305 u32 subsystem_id = icom_adapter->subsystem_id; in icom_init_ports()
1309 if (icom_adapter->version == ADAPTER_V1) { in icom_init_ports()
1310 icom_adapter->numb_ports = 2; in icom_init_ports()
1313 icom_port = &icom_adapter->port_info[i]; in icom_init_ports()
1320 icom_adapter->numb_ports = 4; in icom_init_ports()
1323 icom_port = &icom_adapter->port_info[i]; in icom_init_ports()
1330 icom_adapter->numb_ports = 4; in icom_init_ports()
1332 icom_adapter->port_info[0].port = 0; in icom_init_ports()
1333 icom_adapter->port_info[0].status = ICOM_PORT_ACTIVE; in icom_init_ports()
1337 icom_adapter->port_info[0].imbed_modem = ICOM_IMBED_MODEM; in icom_init_ports()
1339 icom_adapter->port_info[0].imbed_modem = ICOM_RVX; in icom_init_ports()
1342 icom_adapter->port_info[1].status = ICOM_PORT_OFF; in icom_init_ports()
1344 icom_adapter->port_info[2].port = 2; in icom_init_ports()
1345 icom_adapter->port_info[2].status = ICOM_PORT_ACTIVE; in icom_init_ports()
1346 icom_adapter->port_info[2].imbed_modem = ICOM_RVX; in icom_init_ports()
1347 icom_adapter->port_info[3].status = ICOM_PORT_OFF; in icom_init_ports()
1354 static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *icom_adapter, int po… in icom_port_active() argument
1356 if (icom_adapter->version == ADAPTER_V1) { in icom_port_active()
1357 icom_port->global_reg = icom_adapter->base_addr + 0x4000; in icom_port_active()
1358 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1361 icom_port->global_reg = icom_adapter->base_addr + 0x8000; in icom_port_active()
1363 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1366 icom_port->int_reg = icom_adapter->base_addr + in icom_port_active()
1370 static int icom_load_ports(struct icom_adapter *icom_adapter) in icom_load_ports() argument
1375 for (port_num = 0; port_num < icom_adapter->numb_ports; port_num++) { in icom_load_ports()
1377 icom_port = &icom_adapter->port_info[port_num]; in icom_load_ports()
1380 icom_port_active(icom_port, icom_adapter, port_num); in icom_load_ports()
1381 icom_port->dram = icom_adapter->base_addr + in icom_load_ports()
1384 icom_port->adapter = icom_adapter; in icom_load_ports()
1396 static int icom_alloc_adapter(struct icom_adapter in icom_alloc_adapter()
1400 struct icom_adapter *icom_adapter; in icom_alloc_adapter() local
1401 struct icom_adapter *cur_adapter_entry; in icom_alloc_adapter()
1404 icom_adapter = kzalloc(sizeof(struct icom_adapter), GFP_KERNEL); in icom_alloc_adapter()
1406 if (!icom_adapter) { in icom_alloc_adapter()
1412 list_entry(tmp, struct icom_adapter, in icom_alloc_adapter()
1420 icom_adapter->index = adapter_count; in icom_alloc_adapter()
1421 list_add_tail(&icom_adapter->icom_adapter_entry, tmp); in icom_alloc_adapter()
1423 *icom_adapter_ref = icom_adapter; in icom_alloc_adapter()
1427 static void icom_free_adapter(struct icom_adapter *icom_adapter) in icom_free_adapter() argument
1429 list_del(&icom_adapter->icom_adapter_entry); in icom_free_adapter()
1430 kfree(icom_adapter); in icom_free_adapter()
1433 static void icom_remove_adapter(struct icom_adapter *icom_adapter) in icom_remove_adapter() argument
1438 for (index = 0; index < icom_adapter->numb_ports; index++) { in icom_remove_adapter()
1439 icom_port = &icom_adapter->port_info[index]; in icom_remove_adapter()
1442 dev_info(&icom_adapter->pci_dev->dev, in icom_remove_adapter()
1461 free_irq(icom_adapter->pci_dev->irq, (void *) icom_adapter); in icom_remove_adapter()
1462 iounmap(icom_adapter->base_addr); in icom_remove_adapter()
1463 pci_release_regions(icom_adapter->pci_dev); in icom_remove_adapter()
1464 icom_free_adapter(icom_adapter); in icom_remove_adapter()
1469 struct icom_adapter *icom_adapter; in icom_kref_release() local
1471 icom_adapter = to_icom_adapter(kref); in icom_kref_release()
1472 icom_remove_adapter(icom_adapter); in icom_kref_release()
1481 struct icom_adapter *icom_adapter; in icom_probe() local
1517 retval = icom_alloc_adapter(&icom_adapter); in icom_probe()
1524 icom_adapter->base_addr_pci = pci_resource_start(dev, 0); in icom_probe()
1525 icom_adapter->pci_dev = dev; in icom_probe()
1526 icom_adapter->version = ent->driver_data; in icom_probe()
1527 icom_adapter->subsystem_id = ent->subdevice; in icom_probe()
1530 retval = icom_init_ports(icom_adapter); in icom_probe()
1536 icom_adapter->base_addr = pci_ioremap_bar(dev, 0); in icom_probe()
1538 if (!icom_adapter->base_addr) { in icom_probe()
1544 …etval = request_irq(dev->irq, icom_interrupt, IRQF_SHARED, ICOM_DRIVER_NAME, (void *)icom_adapter); in icom_probe()
1549 retval = icom_load_ports(icom_adapter); in icom_probe()
1551 for (index = 0; index < icom_adapter->numb_ports; index++) { in icom_probe()
1552 icom_port = &icom_adapter->port_info[index]; in icom_probe()
1559 (unsigned char __iomem *)icom_adapter->base_addr_pci; in icom_probe()
1563 icom_port->port + icom_adapter->index * 4; in icom_probe()
1572 kref_init(&icom_adapter->kref); in icom_probe()
1576 iounmap(icom_adapter->base_addr); in icom_probe()
1578 icom_free_adapter(icom_adapter); in icom_probe()
1589 struct icom_adapter *icom_adapter; in icom_remove() local
1593 icom_adapter = list_entry(tmp, struct icom_adapter, in icom_remove()
1595 if (icom_adapter->pci_dev == dev) { in icom_remove()
1596 kref_put(&icom_adapter->kref, icom_kref_release); in icom_remove()