Lines Matching refs:card

76 #define RX_BUF(card, nr) ((card->buffers) + (nr)*(card->buffer_size)*2)  argument
77 #define TX_BUF(card, nr) ((card->buffers) + (nr)*(card->buffer_size)*2 + (card->buffer_size)) argument
78 #define FLASH_BUF ((card->buffers) + 4*(card->buffer_size)*2)
171 static void fpga_queue(struct solos_card *card, int port, struct sk_buff *skb,
178 static int send_command(struct solos_card *card, int dev, const char *buf, size_t size);
194 struct solos_card *card = atmdev->dev_data; in solos_param_show() local
204 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in solos_param_show()\n"); in solos_param_show()
223 spin_lock_irq(&card->param_queue_lock); in solos_param_show()
224 list_add(&prm.list, &card->param_queue); in solos_param_show()
225 spin_unlock_irq(&card->param_queue_lock); in solos_param_show()
227 fpga_queue(card, prm.port, skb, NULL); in solos_param_show()
229 wait_event_timeout(card->param_wq, prm.response, 5 * HZ); in solos_param_show()
231 spin_lock_irq(&card->param_queue_lock); in solos_param_show()
233 spin_unlock_irq(&card->param_queue_lock); in solos_param_show()
249 struct solos_card *card = atmdev->dev_data; in solos_param_store() local
260 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in solos_param_store()\n"); in solos_param_store()
279 spin_lock_irq(&card->param_queue_lock); in solos_param_store()
280 list_add(&prm.list, &card->param_queue); in solos_param_store()
281 spin_unlock_irq(&card->param_queue_lock); in solos_param_store()
283 fpga_queue(card, prm.port, skb, NULL); in solos_param_store()
285 wait_event_timeout(card->param_wq, prm.response, 5 * HZ); in solos_param_store()
287 spin_lock_irq(&card->param_queue_lock); in solos_param_store()
289 spin_unlock_irq(&card->param_queue_lock); in solos_param_store()
311 dev_warn(&card->dev->dev, "Unexpected parameter response: '%s'\n", in solos_param_store()
348 static int process_status(struct solos_card *card, int port, struct sk_buff *skb) in process_status() argument
353 if (!card->atmdev[port]) in process_status()
362 dev_warn(&card->dev->dev, "Unexpected status interrupt version %d\n", in process_status()
371 dev_dbg(&card->dev->dev, "Status packet indicated Solos error on port %d (starting up?)\n", in process_status()
393 atm_dev_signal_change(card->atmdev[port], ATM_PHY_SIG_LOST); in process_status()
394 dev_info(&card->dev->dev, "Port %d: %s\n", port, state_str); in process_status()
405 dev_info(&card->dev->dev, "Port %d: %s @%d/%d kb/s%s%s%s%s\n", in process_status()
409 card->atmdev[port]->link_rate = rate_down / 424; in process_status()
410 atm_dev_signal_change(card->atmdev[port], ATM_PHY_SIG_FOUND); in process_status()
415 static int process_command(struct solos_card *card, int port, struct sk_buff *skb) in process_command() argument
433 spin_lock_irqsave(&card->param_queue_lock, flags); in process_command()
434 list_for_each_entry(prm, &card->param_queue, list) { in process_command()
438 wake_up(&card->param_wq); in process_command()
443 spin_unlock_irqrestore(&card->param_queue_lock, flags); in process_command()
451 struct solos_card *card = atmdev->dev_data; in console_show() local
455 spin_lock(&card->cli_queue_lock); in console_show()
456 skb = skb_dequeue(&card->cli_queue[SOLOS_CHAN(atmdev)]); in console_show()
457 spin_unlock(&card->cli_queue_lock); in console_show()
468 static int send_command(struct solos_card *card, int dev, const char *buf, size_t size) in send_command() argument
474 dev_dbg(&card->dev->dev, "Command is too big. Dropping request\n"); in send_command()
479 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in send_command()\n"); in send_command()
492 fpga_queue(card, dev, skb, NULL); in send_command()
501 struct solos_card *card = atmdev->dev_data; in console_store() local
504 err = send_command(card, SOLOS_CHAN(atmdev), buf, count); in console_store()
524 struct solos_card *card = pci_get_drvdata(pdev); in geos_gpio_store() local
530 spin_lock_irq(&card->param_queue_lock); in geos_gpio_store()
531 data32 = ioread32(card->config_regs + GPIO_STATUS); in geos_gpio_store()
534 iowrite32(data32, card->config_regs + GPIO_STATUS); in geos_gpio_store()
537 iowrite32(data32, card->config_regs + GPIO_STATUS); in geos_gpio_store()
541 spin_unlock_irq(&card->param_queue_lock); in geos_gpio_store()
550 struct solos_card *card = pci_get_drvdata(pdev); in geos_gpio_show() local
553 data32 = ioread32(card->config_regs + GPIO_STATUS); in geos_gpio_show()
564 struct solos_card *card = pci_get_drvdata(pdev); in hardware_show() local
567 data32 = ioread32(card->config_regs + GPIO_STATUS); in hardware_show()
630 static int flash_upgrade(struct solos_card *card, int chip) in flash_upgrade() argument
641 if (card->atmel_flash) in flash_upgrade()
648 if (card->atmel_flash) in flash_upgrade()
654 if (card->fpga_version > LEGACY_BUFFERS){ in flash_upgrade()
656 if (card->atmel_flash) in flash_upgrade()
661 dev_info(&card->dev->dev, "FPGA version doesn't support" in flash_upgrade()
667 if (card->fpga_version > LEGACY_BUFFERS){ in flash_upgrade()
669 if (card->atmel_flash) in flash_upgrade()
674 dev_info(&card->dev->dev, "FPGA version doesn't support" in flash_upgrade()
683 if (request_firmware(&fw, fw_name, &card->dev->dev)) in flash_upgrade()
686 dev_info(&card->dev->dev, "Flash upgrade starting\n"); in flash_upgrade()
689 iowrite32(DRIVER_VERSION, card->config_regs + DRIVER_VER); in flash_upgrade()
692 dev_info(&card->dev->dev, "Firmware size: %zd\n", fw->size); in flash_upgrade()
693 dev_info(&card->dev->dev, "Number of blocks: %d\n", numblocks); in flash_upgrade()
695 dev_info(&card->dev->dev, "Changing FPGA to Update mode\n"); in flash_upgrade()
696 iowrite32(1, card->config_regs + FPGA_MODE); in flash_upgrade()
697 (void) ioread32(card->config_regs + FPGA_MODE); in flash_upgrade()
701 dev_info(&card->dev->dev, "Set FPGA Flash mode to FPGA Chip Erase\n"); in flash_upgrade()
703 dev_info(&card->dev->dev, "Set FPGA Flash mode to Solos Chip Erase\n"); in flash_upgrade()
704 iowrite32((chip * 2), card->config_regs + FLASH_MODE); in flash_upgrade()
707 iowrite32(1, card->config_regs + WRITE_FLASH); in flash_upgrade()
708 wait_event(card->fw_wq, !ioread32(card->config_regs + FLASH_BUSY)); in flash_upgrade()
714 iowrite32(0, card->config_regs + WRITE_FLASH); in flash_upgrade()
718 iowrite32(((chip * 2) + 1), card->config_regs + FLASH_MODE); in flash_upgrade()
723 if (card->atmel_flash) in flash_upgrade()
727 if(card->fpga_version > LEGACY_BUFFERS) in flash_upgrade()
730 iowrite32(word, RX_BUF(card, 3) + i); in flash_upgrade()
734 iowrite32(offset / blocksize, card->config_regs + FLASH_BLOCK); in flash_upgrade()
735 iowrite32(1, card->config_regs + WRITE_FLASH); in flash_upgrade()
736 wait_event(card->fw_wq, !ioread32(card->config_regs + FLASH_BUSY)); in flash_upgrade()
740 iowrite32(0, card->config_regs + WRITE_FLASH); in flash_upgrade()
741 iowrite32(0, card->config_regs + FPGA_MODE); in flash_upgrade()
742 iowrite32(0, card->config_regs + FLASH_MODE); in flash_upgrade()
743 dev_info(&card->dev->dev, "Returning FPGA to Data mode\n"); in flash_upgrade()
749 struct solos_card *card = dev_id; in solos_irq() local
752 iowrite32(0, card->config_regs + IRQ_CLEAR); in solos_irq()
755 if (card->atmdev[0]) in solos_irq()
756 tasklet_schedule(&card->tlet); in solos_irq()
758 wake_up(&card->fw_wq); in solos_irq()
765 struct solos_card *card = (void *)card_arg; in solos_bh() local
775 card_flags = fpga_tx(card); in solos_bh()
777 for (port = 0; port < card->nr_ports; port++) { in solos_bh()
784 if (card->using_dma) { in solos_bh()
785 skb = card->rx_skb[port]; in solos_bh()
786 card->rx_skb[port] = NULL; in solos_bh()
788 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in solos_bh()
800 memcpy_fromio(header, RX_BUF(card, port), sizeof(*header)); in solos_bh()
803 if (size > (card->buffer_size - sizeof(*header))){ in solos_bh()
804 dev_warn(&card->dev->dev, "Invalid buffer size\n"); in solos_bh()
816 dev_warn(&card->dev->dev, "Failed to allocate sk_buff for RX\n"); in solos_bh()
821 RX_BUF(card, port) + sizeof(*header), in solos_bh()
825 dev_info(&card->dev->dev, "Received: port %d\n", port); in solos_bh()
826 dev_info(&card->dev->dev, "size: %d VPI: %d VCI: %d\n", in solos_bh()
834 vcc = find_vcc(card->atmdev[port], le16_to_cpu(header->vpi), in solos_bh()
838 dev_warn(&card->dev->dev, "Received packet for unknown VPI.VCI %d.%d on port %d\n", in solos_bh()
850 if (process_status(card, port, skb) && in solos_bh()
852 dev_warn(&card->dev->dev, "Bad status packet of %d bytes on port %d:\n", skb->len, port); in solos_bh()
860 if (process_command(card, port, skb)) in solos_bh()
862 spin_lock(&card->cli_queue_lock); in solos_bh()
863 if (skb_queue_len(&card->cli_queue[port]) > 10) { in solos_bh()
865 dev_warn(&card->dev->dev, "Dropping console response on port %d\n", in solos_bh()
869 skb_queue_tail(&card->cli_queue[port], skb); in solos_bh()
870 spin_unlock(&card->cli_queue_lock); in solos_bh()
875 if (card->using_dma && card->atmdev[port] && in solos_bh()
876 !card->rx_skb[port]) { in solos_bh()
883 dma_map_single(&card->dev->dev, skb->data, in solos_bh()
886 card->config_regs + RX_DMA_ADDR(port)); in solos_bh()
887 card->rx_skb[port] = skb; in solos_bh()
890 dev_warn(&card->dev->dev, "Failed to allocate RX skb"); in solos_bh()
893 tasklet_schedule(&card->tlet); in solos_bh()
898 iowrite32(rx_done, card->config_regs + FLAGS_ADDR); in solos_bh()
926 struct solos_card *card = vcc->dev->dev_data; in popen() local
931 dev_warn(&card->dev->dev, "Unsupported ATM type %d\n", in popen()
939 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in popen()\n"); in popen()
949 fpga_queue(card, SOLOS_CHAN(vcc->dev), skb, NULL); in popen()
959 struct solos_card *card = vcc->dev->dev_data; in pclose() local
965 spin_lock(&card->tx_queue_lock); in pclose()
966 skb_queue_walk_safe(&card->tx_queue[port], skb, tmpskb) { in pclose()
968 skb_unlink(skb, &card->tx_queue[port]); in pclose()
972 spin_unlock(&card->tx_queue_lock); in pclose()
976 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in pclose()\n"); in pclose()
987 fpga_queue(card, port, skb, NULL); in pclose()
989 if (!wait_event_timeout(card->param_wq, !skb_shared(skb), 5 * HZ)) in pclose()
990 dev_warn(&card->dev->dev, in pclose()
998 tasklet_unlock_wait(&card->tlet); in pclose()
1034 static void fpga_queue(struct solos_card *card, int port, struct sk_buff *skb, in fpga_queue() argument
1042 spin_lock_irqsave(&card->tx_queue_lock, flags); in fpga_queue()
1043 old_len = skb_queue_len(&card->tx_queue[port]); in fpga_queue()
1044 skb_queue_tail(&card->tx_queue[port], skb); in fpga_queue()
1046 card->tx_mask |= (1 << port); in fpga_queue()
1047 spin_unlock_irqrestore(&card->tx_queue_lock, flags); in fpga_queue()
1052 fpga_tx(card); in fpga_queue()
1055 static uint32_t fpga_tx(struct solos_card *card) in fpga_tx() argument
1064 spin_lock_irqsave(&card->tx_lock, flags); in fpga_tx()
1066 card_flags = ioread32(card->config_regs + FLAGS_ADDR); in fpga_tx()
1074 tx_pending = card->tx_mask & ~card_flags; in fpga_tx()
1078 struct sk_buff *oldskb = card->tx_skb[port]; in fpga_tx()
1080 dma_unmap_single(&card->dev->dev, SKB_CB(oldskb)->dma_addr, in fpga_tx()
1082 card->tx_skb[port] = NULL; in fpga_tx()
1084 spin_lock(&card->tx_queue_lock); in fpga_tx()
1085 skb = skb_dequeue(&card->tx_queue[port]); in fpga_tx()
1087 card->tx_mask &= ~(1 << port); in fpga_tx()
1088 spin_unlock(&card->tx_queue_lock); in fpga_tx()
1090 if (skb && !card->using_dma) { in fpga_tx()
1091 memcpy_toio(TX_BUF(card, port), skb->data, skb->len); in fpga_tx()
1094 } else if (skb && card->using_dma) { in fpga_tx()
1096 if ((unsigned long)data & card->dma_alignment) { in fpga_tx()
1097 data = card->dma_bounce + (BUF_SIZE * port); in fpga_tx()
1100 SKB_CB(skb)->dma_addr = dma_map_single(&card->dev->dev, data, in fpga_tx()
1102 card->tx_skb[port] = skb; in fpga_tx()
1104 card->config_regs + TX_DMA_ADDR(port)); in fpga_tx()
1116 dev_info(&card->dev->dev, "Transmitted: port %d\n", in fpga_tx()
1118 dev_info(&card->dev->dev, "size: %d VPI: %d VCI: %d\n", in fpga_tx()
1131 wake_up(&card->param_wq); in fpga_tx()
1137 iowrite32(tx_started, card->config_regs + FLAGS_ADDR); in fpga_tx()
1139 spin_unlock_irqrestore(&card->tx_lock, flags); in fpga_tx()
1145 struct solos_card *card = vcc->dev->dev_data; in psend() local
1151 dev_warn(&card->dev->dev, "Length of PDU is too large. Dropping PDU.\n"); in psend()
1165 dev_warn(&card->dev->dev, "pskb_expand_head failed.\n"); in psend()
1179 fpga_queue(card, SOLOS_CHAN(vcc->dev), skb, vcc); in psend()
1205 struct solos_card *card; in fpga_probe() local
1207 card = kzalloc(sizeof(*card), GFP_KERNEL); in fpga_probe()
1208 if (!card) in fpga_probe()
1211 card->dev = dev; in fpga_probe()
1212 init_waitqueue_head(&card->fw_wq); in fpga_probe()
1213 init_waitqueue_head(&card->param_wq); in fpga_probe()
1233 card->config_regs = pci_iomap(dev, 0, CONFIG_RAM_SIZE); in fpga_probe()
1234 if (!card->config_regs) { in fpga_probe()
1239 card->buffers = pci_iomap(dev, 1, DATA_RAM_SIZE); in fpga_probe()
1240 if (!card->buffers) { in fpga_probe()
1247 iowrite32(1, card->config_regs + FPGA_MODE); in fpga_probe()
1248 data32 = ioread32(card->config_regs + FPGA_MODE); in fpga_probe()
1250 iowrite32(0, card->config_regs + FPGA_MODE); in fpga_probe()
1251 data32 = ioread32(card->config_regs + FPGA_MODE); in fpga_probe()
1254 data32 = ioread32(card->config_regs + FPGA_VER); in fpga_probe()
1258 card->fpga_version = FPGA_VERSION(major_ver,minor_ver); in fpga_probe()
1259 if (card->fpga_version > LEGACY_BUFFERS) in fpga_probe()
1260 card->buffer_size = BUF_SIZE; in fpga_probe()
1262 card->buffer_size = OLD_BUF_SIZE; in fpga_probe()
1276 card->atmel_flash = 1; in fpga_probe()
1278 card->atmel_flash = 0; in fpga_probe()
1280 data32 = ioread32(card->config_regs + PORTS); in fpga_probe()
1281 card->nr_ports = (data32 & 0x000000FF); in fpga_probe()
1283 if (card->fpga_version >= DMA_SUPPORTED) { in fpga_probe()
1285 card->using_dma = 1; in fpga_probe()
1287 card->dma_alignment = 3; in fpga_probe()
1288 card->dma_bounce = kmalloc(card->nr_ports * BUF_SIZE, GFP_KERNEL); in fpga_probe()
1289 if (!card->dma_bounce) { in fpga_probe()
1290 dev_warn(&card->dev->dev, "Failed to allocate DMA bounce buffers\n"); in fpga_probe()
1297 card->using_dma = 0; in fpga_probe()
1299 iowrite32(0xF0, card->config_regs + FLAGS_ADDR); in fpga_probe()
1302 pci_set_drvdata(dev, card); in fpga_probe()
1304 tasklet_init(&card->tlet, solos_bh, (unsigned long)card); in fpga_probe()
1305 spin_lock_init(&card->tx_lock); in fpga_probe()
1306 spin_lock_init(&card->tx_queue_lock); in fpga_probe()
1307 spin_lock_init(&card->cli_queue_lock); in fpga_probe()
1308 spin_lock_init(&card->param_queue_lock); in fpga_probe()
1309 INIT_LIST_HEAD(&card->param_queue); in fpga_probe()
1312 "solos-pci", card); in fpga_probe()
1314 dev_dbg(&card->dev->dev, "Failed to request interrupt IRQ: %d\n", dev->irq); in fpga_probe()
1318 iowrite32(1, card->config_regs + IRQ_EN_ADDR); in fpga_probe()
1321 flash_upgrade(card, 0); in fpga_probe()
1324 flash_upgrade(card, 1); in fpga_probe()
1327 flash_upgrade(card, 2); in fpga_probe()
1330 flash_upgrade(card, 3); in fpga_probe()
1332 err = atm_init(card, &dev->dev); in fpga_probe()
1336 if (card->fpga_version >= DMA_SUPPORTED && in fpga_probe()
1337 sysfs_create_group(&card->dev->dev.kobj, &gpio_attr_group)) in fpga_probe()
1338 dev_err(&card->dev->dev, "Could not register parameter group for GPIOs\n"); in fpga_probe()
1343 iowrite32(0, card->config_regs + IRQ_EN_ADDR); in fpga_probe()
1344 free_irq(dev->irq, card); in fpga_probe()
1345 tasklet_kill(&card->tlet); in fpga_probe()
1348 kfree(card->dma_bounce); in fpga_probe()
1349 pci_iounmap(dev, card->buffers); in fpga_probe()
1351 pci_iounmap(dev, card->config_regs); in fpga_probe()
1355 kfree(card); in fpga_probe()
1359 static int atm_init(struct solos_card *card, struct device *parent) in atm_init() argument
1363 for (i = 0; i < card->nr_ports; i++) { in atm_init()
1367 skb_queue_head_init(&card->tx_queue[i]); in atm_init()
1368 skb_queue_head_init(&card->cli_queue[i]); in atm_init()
1370 card->atmdev[i] = atm_dev_register("solos-pci", parent, &fpga_ops, -1, NULL); in atm_init()
1371 if (!card->atmdev[i]) { in atm_init()
1372 dev_err(&card->dev->dev, "Could not register ATM device %d\n", i); in atm_init()
1373 atm_remove(card); in atm_init()
1376 if (device_create_file(&card->atmdev[i]->class_dev, &dev_attr_console)) in atm_init()
1377 dev_err(&card->dev->dev, "Could not register console for ATM device %d\n", i); in atm_init()
1378 if (sysfs_create_group(&card->atmdev[i]->class_dev.kobj, &solos_attr_group)) in atm_init()
1379 dev_err(&card->dev->dev, "Could not register parameter group for ATM device %d\n", i); in atm_init()
1381 dev_info(&card->dev->dev, "Registered ATM device %d\n", card->atmdev[i]->number); in atm_init()
1383 card->atmdev[i]->ci_range.vpi_bits = 8; in atm_init()
1384 card->atmdev[i]->ci_range.vci_bits = 16; in atm_init()
1385 card->atmdev[i]->dev_data = card; in atm_init()
1386 card->atmdev[i]->phy_data = (void *)(unsigned long)i; in atm_init()
1387 atm_dev_signal_change(card->atmdev[i], ATM_PHY_SIG_FOUND); in atm_init()
1391 dev_warn(&card->dev->dev, "Failed to allocate sk_buff in atm_init()\n"); in atm_init()
1402 fpga_queue(card, i, skb, NULL); in atm_init()
1407 static void atm_remove(struct solos_card *card) in atm_remove() argument
1411 for (i = 0; i < card->nr_ports; i++) { in atm_remove()
1412 if (card->atmdev[i]) { in atm_remove()
1415 dev_info(&card->dev->dev, "Unregistering ATM device %d\n", card->atmdev[i]->number); in atm_remove()
1417 sysfs_remove_group(&card->atmdev[i]->class_dev.kobj, &solos_attr_group); in atm_remove()
1418 atm_dev_deregister(card->atmdev[i]); in atm_remove()
1420 skb = card->rx_skb[i]; in atm_remove()
1422 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in atm_remove()
1426 skb = card->tx_skb[i]; in atm_remove()
1428 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in atm_remove()
1432 while ((skb = skb_dequeue(&card->tx_queue[i]))) in atm_remove()
1441 struct solos_card *card = pci_get_drvdata(dev); in fpga_remove() local
1444 iowrite32(0, card->config_regs + IRQ_EN_ADDR); in fpga_remove()
1447 iowrite32(1, card->config_regs + FPGA_MODE); in fpga_remove()
1448 (void)ioread32(card->config_regs + FPGA_MODE); in fpga_remove()
1450 if (card->fpga_version >= DMA_SUPPORTED) in fpga_remove()
1451 sysfs_remove_group(&card->dev->dev.kobj, &gpio_attr_group); in fpga_remove()
1453 atm_remove(card); in fpga_remove()
1455 free_irq(dev->irq, card); in fpga_remove()
1456 tasklet_kill(&card->tlet); in fpga_remove()
1458 kfree(card->dma_bounce); in fpga_remove()
1461 iowrite32(0, card->config_regs + FPGA_MODE); in fpga_remove()
1462 (void)ioread32(card->config_regs + FPGA_MODE); in fpga_remove()
1464 pci_iounmap(dev, card->buffers); in fpga_remove()
1465 pci_iounmap(dev, card->config_regs); in fpga_remove()
1470 kfree(card); in fpga_remove()