Lines Matching refs:card

67 #define RX_BUF(card, nr) ((card->buffers) + (nr)*(card->buffer_size)*2)  argument
68 #define TX_BUF(card, nr) ((card->buffers) + (nr)*(card->buffer_size)*2 + (card->buffer_size)) argument
69 #define FLASH_BUF ((card->buffers) + 4*(card->buffer_size)*2)
162 static void fpga_queue(struct solos_card *card, int port, struct sk_buff *skb,
169 static int send_command(struct solos_card *card, int dev, const char *buf, size_t size);
185 struct solos_card *card = atmdev->dev_data; in solos_param_show() local
195 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in solos_param_show()\n"); in solos_param_show()
214 spin_lock_irq(&card->param_queue_lock); in solos_param_show()
215 list_add(&prm.list, &card->param_queue); in solos_param_show()
216 spin_unlock_irq(&card->param_queue_lock); in solos_param_show()
218 fpga_queue(card, prm.port, skb, NULL); in solos_param_show()
220 wait_event_timeout(card->param_wq, prm.response, 5 * HZ); in solos_param_show()
222 spin_lock_irq(&card->param_queue_lock); in solos_param_show()
224 spin_unlock_irq(&card->param_queue_lock); in solos_param_show()
240 struct solos_card *card = atmdev->dev_data; in solos_param_store() local
251 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in solos_param_store()\n"); in solos_param_store()
270 spin_lock_irq(&card->param_queue_lock); in solos_param_store()
271 list_add(&prm.list, &card->param_queue); in solos_param_store()
272 spin_unlock_irq(&card->param_queue_lock); in solos_param_store()
274 fpga_queue(card, prm.port, skb, NULL); in solos_param_store()
276 wait_event_timeout(card->param_wq, prm.response, 5 * HZ); in solos_param_store()
278 spin_lock_irq(&card->param_queue_lock); in solos_param_store()
280 spin_unlock_irq(&card->param_queue_lock); in solos_param_store()
302 dev_warn(&card->dev->dev, "Unexpected parameter response: '%s'\n", in solos_param_store()
339 static int process_status(struct solos_card *card, int port, struct sk_buff *skb) in process_status() argument
344 if (!card->atmdev[port]) in process_status()
353 dev_warn(&card->dev->dev, "Unexpected status interrupt version\n"); in process_status()
357 dev_warn(&card->dev->dev, "Unexpected status interrupt version %d\n", in process_status()
366 dev_dbg(&card->dev->dev, "Status packet indicated Solos error on port %d (starting up?)\n", in process_status()
388 atm_dev_signal_change(card->atmdev[port], ATM_PHY_SIG_LOST); in process_status()
389 dev_info(&card->dev->dev, "Port %d: %s\n", port, state_str); in process_status()
400 dev_info(&card->dev->dev, "Port %d: %s @%d/%d kb/s%s%s%s%s\n", in process_status()
404 card->atmdev[port]->link_rate = rate_down / 424; in process_status()
405 atm_dev_signal_change(card->atmdev[port], ATM_PHY_SIG_FOUND); in process_status()
410 static int process_command(struct solos_card *card, int port, struct sk_buff *skb) in process_command() argument
430 spin_lock_irqsave(&card->param_queue_lock, flags); in process_command()
431 list_for_each_entry(prm, &card->param_queue, list) { in process_command()
435 wake_up(&card->param_wq); in process_command()
440 spin_unlock_irqrestore(&card->param_queue_lock, flags); in process_command()
448 struct solos_card *card = atmdev->dev_data; in console_show() local
452 spin_lock_bh(&card->cli_queue_lock); in console_show()
453 skb = skb_dequeue(&card->cli_queue[SOLOS_CHAN(atmdev)]); in console_show()
454 spin_unlock_bh(&card->cli_queue_lock); in console_show()
465 static int send_command(struct solos_card *card, int dev, const char *buf, size_t size) in send_command() argument
471 dev_dbg(&card->dev->dev, "Command is too big. Dropping request\n"); in send_command()
476 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in send_command()\n"); in send_command()
489 fpga_queue(card, dev, skb, NULL); in send_command()
498 struct solos_card *card = atmdev->dev_data; in console_store() local
501 err = send_command(card, SOLOS_CHAN(atmdev), buf, count); in console_store()
520 struct solos_card *card = dev_get_drvdata(dev); in geos_gpio_store() local
526 spin_lock_irq(&card->param_queue_lock); in geos_gpio_store()
527 data32 = ioread32(card->config_regs + GPIO_STATUS); in geos_gpio_store()
530 iowrite32(data32, card->config_regs + GPIO_STATUS); in geos_gpio_store()
533 iowrite32(data32, card->config_regs + GPIO_STATUS); in geos_gpio_store()
537 spin_unlock_irq(&card->param_queue_lock); in geos_gpio_store()
545 struct solos_card *card = dev_get_drvdata(dev); in geos_gpio_show() local
548 data32 = ioread32(card->config_regs + GPIO_STATUS); in geos_gpio_show()
558 struct solos_card *card = dev_get_drvdata(dev); in hardware_show() local
561 data32 = ioread32(card->config_regs + GPIO_STATUS); in hardware_show()
624 static int flash_upgrade(struct solos_card *card, int chip) in flash_upgrade() argument
635 if (card->atmel_flash) in flash_upgrade()
642 if (card->atmel_flash) in flash_upgrade()
648 if (card->fpga_version > LEGACY_BUFFERS){ in flash_upgrade()
650 if (card->atmel_flash) in flash_upgrade()
655 dev_info(&card->dev->dev, "FPGA version doesn't support" in flash_upgrade()
661 if (card->fpga_version > LEGACY_BUFFERS){ in flash_upgrade()
663 if (card->atmel_flash) in flash_upgrade()
668 dev_info(&card->dev->dev, "FPGA version doesn't support" in flash_upgrade()
677 if (request_firmware(&fw, fw_name, &card->dev->dev)) in flash_upgrade()
680 dev_info(&card->dev->dev, "Flash upgrade starting\n"); in flash_upgrade()
683 iowrite32(DRIVER_VERSION, card->config_regs + DRIVER_VER); in flash_upgrade()
686 dev_info(&card->dev->dev, "Firmware size: %zd\n", fw->size); in flash_upgrade()
687 dev_info(&card->dev->dev, "Number of blocks: %d\n", numblocks); in flash_upgrade()
689 dev_info(&card->dev->dev, "Changing FPGA to Update mode\n"); in flash_upgrade()
690 iowrite32(1, card->config_regs + FPGA_MODE); in flash_upgrade()
691 (void) ioread32(card->config_regs + FPGA_MODE); in flash_upgrade()
695 dev_info(&card->dev->dev, "Set FPGA Flash mode to FPGA Chip Erase\n"); in flash_upgrade()
697 dev_info(&card->dev->dev, "Set FPGA Flash mode to Solos Chip Erase\n"); in flash_upgrade()
698 iowrite32((chip * 2), card->config_regs + FLASH_MODE); in flash_upgrade()
701 iowrite32(1, card->config_regs + WRITE_FLASH); in flash_upgrade()
702 wait_event(card->fw_wq, !ioread32(card->config_regs + FLASH_BUSY)); in flash_upgrade()
708 iowrite32(0, card->config_regs + WRITE_FLASH); in flash_upgrade()
712 iowrite32(((chip * 2) + 1), card->config_regs + FLASH_MODE); in flash_upgrade()
717 if (card->atmel_flash) in flash_upgrade()
721 if(card->fpga_version > LEGACY_BUFFERS) in flash_upgrade()
724 iowrite32(word, RX_BUF(card, 3) + i); in flash_upgrade()
728 iowrite32(offset / blocksize, card->config_regs + FLASH_BLOCK); in flash_upgrade()
729 iowrite32(1, card->config_regs + WRITE_FLASH); in flash_upgrade()
730 wait_event(card->fw_wq, !ioread32(card->config_regs + FLASH_BUSY)); in flash_upgrade()
734 iowrite32(0, card->config_regs + WRITE_FLASH); in flash_upgrade()
735 iowrite32(0, card->config_regs + FPGA_MODE); in flash_upgrade()
736 iowrite32(0, card->config_regs + FLASH_MODE); in flash_upgrade()
737 dev_info(&card->dev->dev, "Returning FPGA to Data mode\n"); in flash_upgrade()
743 struct solos_card *card = dev_id; in solos_irq() local
746 iowrite32(0, card->config_regs + IRQ_CLEAR); in solos_irq()
749 if (card->atmdev[0]) in solos_irq()
750 tasklet_schedule(&card->tlet); in solos_irq()
752 wake_up(&card->fw_wq); in solos_irq()
759 struct solos_card *card = (void *)card_arg; in solos_bh() local
769 card_flags = fpga_tx(card); in solos_bh()
771 for (port = 0; port < card->nr_ports; port++) { in solos_bh()
778 if (card->using_dma) { in solos_bh()
779 skb = card->rx_skb[port]; in solos_bh()
780 card->rx_skb[port] = NULL; in solos_bh()
782 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in solos_bh()
794 memcpy_fromio(header, RX_BUF(card, port), sizeof(*header)); in solos_bh()
797 if (size > (card->buffer_size - sizeof(*header))){ in solos_bh()
798 dev_warn(&card->dev->dev, "Invalid buffer size\n"); in solos_bh()
810 dev_warn(&card->dev->dev, "Failed to allocate sk_buff for RX\n"); in solos_bh()
815 RX_BUF(card, port) + sizeof(*header), in solos_bh()
819 dev_info(&card->dev->dev, "Received: port %d\n", port); in solos_bh()
820 dev_info(&card->dev->dev, "size: %d VPI: %d VCI: %d\n", in solos_bh()
828 vcc = find_vcc(card->atmdev[port], le16_to_cpu(header->vpi), in solos_bh()
832 dev_warn(&card->dev->dev, "Received packet for unknown VPI.VCI %d.%d on port %d\n", in solos_bh()
844 if (process_status(card, port, skb) && in solos_bh()
846 dev_warn(&card->dev->dev, "Bad status packet of %d bytes on port %d:\n", skb->len, port); in solos_bh()
854 if (process_command(card, port, skb)) in solos_bh()
856 spin_lock(&card->cli_queue_lock); in solos_bh()
857 if (skb_queue_len(&card->cli_queue[port]) > 10) { in solos_bh()
859 dev_warn(&card->dev->dev, "Dropping console response on port %d\n", in solos_bh()
863 skb_queue_tail(&card->cli_queue[port], skb); in solos_bh()
864 spin_unlock(&card->cli_queue_lock); in solos_bh()
869 if (card->using_dma && card->atmdev[port] && in solos_bh()
870 !card->rx_skb[port]) { in solos_bh()
877 dma_map_single(&card->dev->dev, skb->data, in solos_bh()
880 card->config_regs + RX_DMA_ADDR(port)); in solos_bh()
881 card->rx_skb[port] = skb; in solos_bh()
884 dev_warn(&card->dev->dev, "Failed to allocate RX skb"); in solos_bh()
887 tasklet_schedule(&card->tlet); in solos_bh()
892 iowrite32(rx_done, card->config_regs + FLAGS_ADDR); in solos_bh()
920 struct solos_card *card = vcc->dev->dev_data; in popen() local
925 dev_warn(&card->dev->dev, "Unsupported ATM type %d\n", in popen()
933 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in popen()\n"); in popen()
943 fpga_queue(card, SOLOS_CHAN(vcc->dev), skb, NULL); in popen()
953 struct solos_card *card = vcc->dev->dev_data; in pclose() local
959 spin_lock_bh(&card->tx_queue_lock); in pclose()
960 skb_queue_walk_safe(&card->tx_queue[port], skb, tmpskb) { in pclose()
962 skb_unlink(skb, &card->tx_queue[port]); in pclose()
966 spin_unlock_bh(&card->tx_queue_lock); in pclose()
970 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in pclose()\n"); in pclose()
981 fpga_queue(card, port, skb, NULL); in pclose()
983 if (!wait_event_timeout(card->param_wq, !skb_shared(skb), 5 * HZ)) in pclose()
984 dev_warn(&card->dev->dev, in pclose()
992 tasklet_unlock_wait(&card->tlet); in pclose()
1028 static void fpga_queue(struct solos_card *card, int port, struct sk_buff *skb, in fpga_queue() argument
1036 spin_lock_irqsave(&card->tx_queue_lock, flags); in fpga_queue()
1037 old_len = skb_queue_len(&card->tx_queue[port]); in fpga_queue()
1038 skb_queue_tail(&card->tx_queue[port], skb); in fpga_queue()
1040 card->tx_mask |= (1 << port); in fpga_queue()
1041 spin_unlock_irqrestore(&card->tx_queue_lock, flags); in fpga_queue()
1046 fpga_tx(card); in fpga_queue()
1049 static uint32_t fpga_tx(struct solos_card *card) in fpga_tx() argument
1058 spin_lock_irqsave(&card->tx_lock, flags); in fpga_tx()
1060 card_flags = ioread32(card->config_regs + FLAGS_ADDR); in fpga_tx()
1068 tx_pending = card->tx_mask & ~card_flags; in fpga_tx()
1072 struct sk_buff *oldskb = card->tx_skb[port]; in fpga_tx()
1074 dma_unmap_single(&card->dev->dev, SKB_CB(oldskb)->dma_addr, in fpga_tx()
1076 card->tx_skb[port] = NULL; in fpga_tx()
1078 spin_lock(&card->tx_queue_lock); in fpga_tx()
1079 skb = skb_dequeue(&card->tx_queue[port]); in fpga_tx()
1081 card->tx_mask &= ~(1 << port); in fpga_tx()
1082 spin_unlock(&card->tx_queue_lock); in fpga_tx()
1084 if (skb && !card->using_dma) { in fpga_tx()
1085 memcpy_toio(TX_BUF(card, port), skb->data, skb->len); in fpga_tx()
1088 } else if (skb && card->using_dma) { in fpga_tx()
1090 if ((unsigned long)data & card->dma_alignment) { in fpga_tx()
1091 data = card->dma_bounce + (BUF_SIZE * port); in fpga_tx()
1094 SKB_CB(skb)->dma_addr = dma_map_single(&card->dev->dev, data, in fpga_tx()
1096 card->tx_skb[port] = skb; in fpga_tx()
1098 card->config_regs + TX_DMA_ADDR(port)); in fpga_tx()
1110 dev_info(&card->dev->dev, "Transmitted: port %d\n", in fpga_tx()
1112 dev_info(&card->dev->dev, "size: %d VPI: %d VCI: %d\n", in fpga_tx()
1125 wake_up(&card->param_wq); in fpga_tx()
1131 iowrite32(tx_started, card->config_regs + FLAGS_ADDR); in fpga_tx()
1133 spin_unlock_irqrestore(&card->tx_lock, flags); in fpga_tx()
1139 struct solos_card *card = vcc->dev->dev_data; in psend() local
1145 dev_warn(&card->dev->dev, "Length of PDU is too large. Dropping PDU.\n"); in psend()
1159 dev_warn(&card->dev->dev, "pskb_expand_head failed.\n"); in psend()
1173 fpga_queue(card, SOLOS_CHAN(vcc->dev), skb, vcc); in psend()
1197 struct solos_card *card; in fpga_probe() local
1199 card = kzalloc(sizeof(*card), GFP_KERNEL); in fpga_probe()
1200 if (!card) in fpga_probe()
1203 card->dev = dev; in fpga_probe()
1204 init_waitqueue_head(&card->fw_wq); in fpga_probe()
1205 init_waitqueue_head(&card->param_wq); in fpga_probe()
1225 card->config_regs = pci_iomap(dev, 0, CONFIG_RAM_SIZE); in fpga_probe()
1226 if (!card->config_regs) { in fpga_probe()
1231 card->buffers = pci_iomap(dev, 1, DATA_RAM_SIZE); in fpga_probe()
1232 if (!card->buffers) { in fpga_probe()
1239 iowrite32(1, card->config_regs + FPGA_MODE); in fpga_probe()
1240 ioread32(card->config_regs + FPGA_MODE); in fpga_probe()
1242 iowrite32(0, card->config_regs + FPGA_MODE); in fpga_probe()
1243 ioread32(card->config_regs + FPGA_MODE); in fpga_probe()
1246 data32 = ioread32(card->config_regs + FPGA_VER); in fpga_probe()
1250 card->fpga_version = FPGA_VERSION(major_ver,minor_ver); in fpga_probe()
1251 if (card->fpga_version > LEGACY_BUFFERS) in fpga_probe()
1252 card->buffer_size = BUF_SIZE; in fpga_probe()
1254 card->buffer_size = OLD_BUF_SIZE; in fpga_probe()
1268 card->atmel_flash = 1; in fpga_probe()
1270 card->atmel_flash = 0; in fpga_probe()
1272 data32 = ioread32(card->config_regs + PORTS); in fpga_probe()
1273 card->nr_ports = (data32 & 0x000000FF); in fpga_probe()
1275 if (card->fpga_version >= DMA_SUPPORTED) { in fpga_probe()
1277 card->using_dma = 1; in fpga_probe()
1279 card->dma_alignment = 3; in fpga_probe()
1280 card->dma_bounce = kmalloc_array(card->nr_ports, in fpga_probe()
1282 if (!card->dma_bounce) { in fpga_probe()
1283 dev_warn(&card->dev->dev, "Failed to allocate DMA bounce buffers\n"); in fpga_probe()
1290 card->using_dma = 0; in fpga_probe()
1292 iowrite32(0xF0, card->config_regs + FLAGS_ADDR); in fpga_probe()
1295 pci_set_drvdata(dev, card); in fpga_probe()
1297 tasklet_init(&card->tlet, solos_bh, (unsigned long)card); in fpga_probe()
1298 spin_lock_init(&card->tx_lock); in fpga_probe()
1299 spin_lock_init(&card->tx_queue_lock); in fpga_probe()
1300 spin_lock_init(&card->cli_queue_lock); in fpga_probe()
1301 spin_lock_init(&card->param_queue_lock); in fpga_probe()
1302 INIT_LIST_HEAD(&card->param_queue); in fpga_probe()
1305 "solos-pci", card); in fpga_probe()
1307 dev_dbg(&card->dev->dev, "Failed to request interrupt IRQ: %d\n", dev->irq); in fpga_probe()
1311 iowrite32(1, card->config_regs + IRQ_EN_ADDR); in fpga_probe()
1314 flash_upgrade(card, 0); in fpga_probe()
1317 flash_upgrade(card, 1); in fpga_probe()
1320 flash_upgrade(card, 2); in fpga_probe()
1323 flash_upgrade(card, 3); in fpga_probe()
1325 err = atm_init(card, &dev->dev); in fpga_probe()
1329 if (card->fpga_version >= DMA_SUPPORTED && in fpga_probe()
1330 sysfs_create_group(&card->dev->dev.kobj, &gpio_attr_group)) in fpga_probe()
1331 dev_err(&card->dev->dev, "Could not register parameter group for GPIOs\n"); in fpga_probe()
1336 iowrite32(0, card->config_regs + IRQ_EN_ADDR); in fpga_probe()
1337 free_irq(dev->irq, card); in fpga_probe()
1338 tasklet_kill(&card->tlet); in fpga_probe()
1341 kfree(card->dma_bounce); in fpga_probe()
1342 pci_iounmap(dev, card->buffers); in fpga_probe()
1344 pci_iounmap(dev, card->config_regs); in fpga_probe()
1348 kfree(card); in fpga_probe()
1352 static int atm_init(struct solos_card *card, struct device *parent) in atm_init() argument
1356 for (i = 0; i < card->nr_ports; i++) { in atm_init()
1360 skb_queue_head_init(&card->tx_queue[i]); in atm_init()
1361 skb_queue_head_init(&card->cli_queue[i]); in atm_init()
1363 card->atmdev[i] = atm_dev_register("solos-pci", parent, &fpga_ops, -1, NULL); in atm_init()
1364 if (!card->atmdev[i]) { in atm_init()
1365 dev_err(&card->dev->dev, "Could not register ATM device %d\n", i); in atm_init()
1366 atm_remove(card); in atm_init()
1369 if (device_create_file(&card->atmdev[i]->class_dev, &dev_attr_console)) in atm_init()
1370 dev_err(&card->dev->dev, "Could not register console for ATM device %d\n", i); in atm_init()
1371 if (sysfs_create_group(&card->atmdev[i]->class_dev.kobj, &solos_attr_group)) in atm_init()
1372 dev_err(&card->dev->dev, "Could not register parameter group for ATM device %d\n", i); in atm_init()
1374 dev_info(&card->dev->dev, "Registered ATM device %d\n", card->atmdev[i]->number); in atm_init()
1376 card->atmdev[i]->ci_range.vpi_bits = 8; in atm_init()
1377 card->atmdev[i]->ci_range.vci_bits = 16; in atm_init()
1378 card->atmdev[i]->dev_data = card; in atm_init()
1379 card->atmdev[i]->phy_data = (void *)(unsigned long)i; in atm_init()
1380 atm_dev_signal_change(card->atmdev[i], ATM_PHY_SIG_FOUND); in atm_init()
1384 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in atm_init()\n"); in atm_init()
1395 fpga_queue(card, i, skb, NULL); in atm_init()
1400 static void atm_remove(struct solos_card *card) in atm_remove() argument
1404 for (i = 0; i < card->nr_ports; i++) { in atm_remove()
1405 if (card->atmdev[i]) { in atm_remove()
1408 dev_info(&card->dev->dev, "Unregistering ATM device %d\n", card->atmdev[i]->number); in atm_remove()
1410 sysfs_remove_group(&card->atmdev[i]->class_dev.kobj, &solos_attr_group); in atm_remove()
1411 atm_dev_deregister(card->atmdev[i]); in atm_remove()
1413 skb = card->rx_skb[i]; in atm_remove()
1415 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in atm_remove()
1419 skb = card->tx_skb[i]; in atm_remove()
1421 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in atm_remove()
1425 while ((skb = skb_dequeue(&card->tx_queue[i]))) in atm_remove()
1434 struct solos_card *card = pci_get_drvdata(dev); in fpga_remove() local
1437 iowrite32(0, card->config_regs + IRQ_EN_ADDR); in fpga_remove()
1440 iowrite32(1, card->config_regs + FPGA_MODE); in fpga_remove()
1441 (void)ioread32(card->config_regs + FPGA_MODE); in fpga_remove()
1443 if (card->fpga_version >= DMA_SUPPORTED) in fpga_remove()
1444 sysfs_remove_group(&card->dev->dev.kobj, &gpio_attr_group); in fpga_remove()
1446 atm_remove(card); in fpga_remove()
1448 free_irq(dev->irq, card); in fpga_remove()
1449 tasklet_kill(&card->tlet); in fpga_remove()
1451 kfree(card->dma_bounce); in fpga_remove()
1454 iowrite32(0, card->config_regs + FPGA_MODE); in fpga_remove()
1455 (void)ioread32(card->config_regs + FPGA_MODE); in fpga_remove()
1457 pci_iounmap(dev, card->buffers); in fpga_remove()
1458 pci_iounmap(dev, card->config_regs); in fpga_remove()
1463 kfree(card); in fpga_remove()