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