Lines Matching refs:lynx

85 lynx_get(struct pcilynx *lynx)
87 kref_get(&lynx->kref);
89 return lynx;
99 lynx_put(struct pcilynx *lynx)
101 kref_put(&lynx->kref, lynx_release);
105 struct pcilynx *lynx;
145 list_empty(&client->lynx->link))
214 reg_write(struct pcilynx *lynx, int offset, u32 data)
216 writel(data, lynx->registers + offset);
220 reg_read(struct pcilynx *lynx, int offset)
222 return readl(lynx->registers + offset);
226 reg_set_bits(struct pcilynx *lynx, int offset, u32 mask)
228 reg_write(lynx, offset, (reg_read(lynx, offset) | mask));
236 run_pcl(struct pcilynx *lynx, dma_addr_t pcl_bus,
239 reg_write(lynx, DMA0_CURRENT_PCL + dmachan * 0x20, pcl_bus);
240 reg_write(lynx, DMA0_CHAN_CTRL + dmachan * 0x20,
245 set_phy_reg(struct pcilynx *lynx, int addr, int val)
248 dev_err(&lynx->pci_device->dev,
253 dev_err(&lynx->pci_device->dev,
257 reg_write(lynx, LINK_PHY, LINK_PHY_WRITE |
268 struct pcilynx *tmp, *lynx = NULL;
273 lynx = lynx_get(tmp);
277 if (lynx == NULL)
285 client->lynx = lynx;
296 lynx_put(lynx);
305 struct pcilynx *lynx = client->lynx;
307 spin_lock_irq(&lynx->client_list_lock);
309 spin_unlock_irq(&lynx->client_list_lock);
313 lynx_put(lynx);
329 if (list_empty(&client->lynx->link))
347 spinlock_t *client_list_lock = &client->lynx->client_list_lock;
367 list_add_tail(&client->link, &client->lynx->client_list);
406 packet_irq_handler(struct pcilynx *lynx)
415 length = __le32_to_cpu(lynx->rcv_pcl->pcl_status) & 0x00001fff;
416 tcode = __le32_to_cpu(lynx->rcv_buffer[1]) >> 4 & 0xf;
420 lynx->rcv_buffer[0] = (__force __le32)timestamp;
427 spin_lock(&lynx->client_list_lock);
429 list_for_each_entry(client, &lynx->client_list, link)
432 lynx->rcv_buffer, length + 4);
434 spin_unlock(&lynx->client_list_lock);
438 bus_reset_irq_handler(struct pcilynx *lynx)
447 spin_lock(&lynx->client_list_lock);
449 list_for_each_entry(client, &lynx->client_list, link)
452 spin_unlock(&lynx->client_list_lock);
458 struct pcilynx *lynx = device;
461 pci_int_status = reg_read(lynx, PCI_INT_STATUS);
474 link_int_status = reg_read(lynx, LINK_INT_STATUS);
475 reg_write(lynx, LINK_INT_STATUS, link_int_status);
478 bus_reset_irq_handler(lynx);
485 reg_write(lynx, PCI_INT_STATUS, pci_int_status);
488 packet_irq_handler(lynx);
489 run_pcl(lynx, lynx->rcv_start_pcl_bus, 0);
498 struct pcilynx *lynx = pci_get_drvdata(dev);
502 list_del_init(&lynx->link);
503 misc_deregister(&lynx->misc);
506 reg_write(lynx, PCI_INT_ENABLE, 0);
507 free_irq(lynx->pci_device->irq, lynx);
509 spin_lock_irq(&lynx->client_list_lock);
510 list_for_each_entry(client, &lynx->client_list, link)
512 spin_unlock_irq(&lynx->client_list_lock);
514 dma_free_coherent(&lynx->pci_device->dev, sizeof(struct pcl),
515 lynx->rcv_start_pcl, lynx->rcv_start_pcl_bus);
516 dma_free_coherent(&lynx->pci_device->dev, sizeof(struct pcl),
517 lynx->rcv_pcl, lynx->rcv_pcl_bus);
518 dma_free_coherent(&lynx->pci_device->dev, PAGE_SIZE, lynx->rcv_buffer,
519 lynx->rcv_buffer_bus);
521 iounmap(lynx->registers);
523 lynx_put(lynx);
531 struct pcilynx *lynx;
546 lynx = kzalloc(sizeof *lynx, GFP_KERNEL);
547 if (lynx == NULL) {
552 lynx->pci_device = dev;
553 pci_set_drvdata(dev, lynx);
555 spin_lock_init(&lynx->client_list_lock);
556 INIT_LIST_HEAD(&lynx->client_list);
557 kref_init(&lynx->kref);
559 lynx->registers = ioremap(pci_resource_start(dev, 0),
561 if (lynx->registers == NULL) {
567 lynx->rcv_start_pcl = dma_alloc_coherent(&lynx->pci_device->dev,
569 &lynx->rcv_start_pcl_bus,
571 lynx->rcv_pcl = dma_alloc_coherent(&lynx->pci_device->dev,
573 &lynx->rcv_pcl_bus, GFP_KERNEL);
574 lynx->rcv_buffer = dma_alloc_coherent(&lynx->pci_device->dev,
576 &lynx->rcv_buffer_bus, GFP_KERNEL);
577 if (lynx->rcv_start_pcl == NULL ||
578 lynx->rcv_pcl == NULL ||
579 lynx->rcv_buffer == NULL) {
584 lynx->rcv_start_pcl->next = cpu_to_le32(lynx->rcv_pcl_bus);
585 lynx->rcv_pcl->next = cpu_to_le32(PCL_NEXT_INVALID);
586 lynx->rcv_pcl->async_error_next = cpu_to_le32(PCL_NEXT_INVALID);
588 lynx->rcv_pcl->buffer[0].control =
590 lynx->rcv_pcl->buffer[0].pointer =
591 cpu_to_le32(lynx->rcv_buffer_bus + 4);
592 p = lynx->rcv_buffer_bus + 2048;
593 end = lynx->rcv_buffer_bus + RCV_BUFFER_SIZE;
595 lynx->rcv_pcl->buffer[i].control =
597 lynx->rcv_pcl->buffer[i].pointer = cpu_to_le32(p);
599 lynx->rcv_pcl->buffer[i - 1].control |= cpu_to_le32(PCL_LAST_BUFF);
601 reg_set_bits(lynx, MISC_CONTROL, MISC_CONTROL_SWRESET);
603 reg_write(lynx, DMA0_CHAN_CTRL, 0);
604 reg_write(lynx, DMA_GLOBAL_REGISTER, 0x00 << 24);
608 if ((get_phy_reg(lynx, 2) & 0xe0) == 0xe0) {
609 lynx->phyic.reg_1394a = 1;
610 PRINT(KERN_INFO, lynx->id,
612 lynx->phyic.vendor = get_phy_vendorid(lynx);
613 lynx->phyic.product = get_phy_productid(lynx);
615 lynx->phyic.reg_1394a = 0;
616 PRINT(KERN_INFO, lynx->id, "found old 1394 PHY");
621 reg_write(lynx, FIFO_SIZES, 255);
623 reg_set_bits(lynx, PCI_INT_ENABLE, PCI_INT_DMA_ALL);
625 reg_write(lynx, LINK_INT_ENABLE,
633 set_phy_reg(lynx, 4, 0);
636 reg_set_bits(lynx, LINK_CONTROL, LINK_CONTROL_SNOOP_ENABLE);
638 run_pcl(lynx, lynx->rcv_start_pcl_bus, 0);
641 driver_name, lynx)) {
648 lynx->misc.parent = &dev->dev;
649 lynx->misc.minor = MISC_DYNAMIC_MINOR;
650 lynx->misc.name = "nosy";
651 lynx->misc.fops = &nosy_ops;
654 ret = misc_register(&lynx->misc);
660 list_add_tail(&lynx->link, &card_list);
669 reg_write(lynx, PCI_INT_ENABLE, 0);
670 free_irq(lynx->pci_device->irq, lynx);
673 if (lynx->rcv_start_pcl)
674 dma_free_coherent(&lynx->pci_device->dev, sizeof(struct pcl),
675 lynx->rcv_start_pcl,
676 lynx->rcv_start_pcl_bus);
677 if (lynx->rcv_pcl)
678 dma_free_coherent(&lynx->pci_device->dev, sizeof(struct pcl),
679 lynx->rcv_pcl, lynx->rcv_pcl_bus);
680 if (lynx->rcv_buffer)
681 dma_free_coherent(&lynx->pci_device->dev, PAGE_SIZE,
682 lynx->rcv_buffer, lynx->rcv_buffer_bus);
683 iounmap(lynx->registers);
686 kfree(lynx);