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