Lines Matching refs:hw

67 static int fifo_enqueue(struct ilo_hwinfo *hw, char *fifobar, int entry)  in fifo_enqueue()  argument
73 spin_lock_irqsave(&hw->fifo_lock, flags); in fifo_enqueue()
81 spin_unlock_irqrestore(&hw->fifo_lock, flags); in fifo_enqueue()
86 static int fifo_dequeue(struct ilo_hwinfo *hw, char *fifobar, int *entry) in fifo_dequeue() argument
93 spin_lock_irqsave(&hw->fifo_lock, flags); in fifo_dequeue()
104 spin_unlock_irqrestore(&hw->fifo_lock, flags); in fifo_dequeue()
109 static int fifo_check_recv(struct ilo_hwinfo *hw, char *fifobar) in fifo_check_recv() argument
116 spin_lock_irqsave(&hw->fifo_lock, flags); in fifo_check_recv()
120 spin_unlock_irqrestore(&hw->fifo_lock, flags); in fifo_check_recv()
125 static int ilo_pkt_enqueue(struct ilo_hwinfo *hw, struct ccb *ccb, in ilo_pkt_enqueue() argument
137 return fifo_enqueue(hw, fifobar, entry); in ilo_pkt_enqueue()
140 static int ilo_pkt_dequeue(struct ilo_hwinfo *hw, struct ccb *ccb, in ilo_pkt_dequeue() argument
155 ret = fifo_dequeue(hw, fifobar, &entry); in ilo_pkt_dequeue()
169 static int ilo_pkt_recv(struct ilo_hwinfo *hw, struct ccb *ccb) in ilo_pkt_recv() argument
173 return fifo_check_recv(hw, fifobar); in ilo_pkt_recv()
258 static int ilo_ccb_setup(struct ilo_hwinfo *hw, struct ccb_data *data, int slot) in ilo_ccb_setup() argument
271 data->dma_va = pci_alloc_consistent(hw->ilo_dev, data->dma_size, in ilo_ccb_setup()
317 driver_ccb->ccb_u5.db_base = hw->db_vaddr + (slot << L2_DB_SIZE); in ilo_ccb_setup()
323 static void ilo_ccb_open(struct ilo_hwinfo *hw, struct ccb_data *data, int slot) in ilo_ccb_open() argument
330 (hw->ram_vaddr + (slot * ILOHW_CCB_SZ)); in ilo_ccb_open()
336 ilo_pkt_enqueue(hw, driver_ccb, SENDQ, pkt_id, pkt_sz); in ilo_ccb_open()
342 ilo_pkt_enqueue(hw, driver_ccb, RECVQ, pkt_id, pkt_sz); in ilo_ccb_open()
348 static int ilo_ccb_verify(struct ilo_hwinfo *hw, struct ccb_data *data) in ilo_ccb_verify() argument
355 if (ilo_pkt_dequeue(hw, driver_ccb, SENDQ, &pkt_id, NULL, NULL)) in ilo_ccb_verify()
361 dev_err(&hw->ilo_dev->dev, "Open could not dequeue a packet\n"); in ilo_ccb_verify()
365 ilo_pkt_enqueue(hw, driver_ccb, SENDQ, pkt_id, 0); in ilo_ccb_verify()
382 static inline int get_device_outbound(struct ilo_hwinfo *hw) in get_device_outbound() argument
384 return ioread32(&hw->mmio_vaddr[DB_OUT]); in get_device_outbound()
392 static inline int is_device_reset(struct ilo_hwinfo *hw) in is_device_reset() argument
395 return is_db_reset(get_device_outbound(hw)); in is_device_reset()
398 static inline void clear_pending_db(struct ilo_hwinfo *hw, int clr) in clear_pending_db() argument
400 iowrite32(clr, &hw->mmio_vaddr[DB_OUT]); in clear_pending_db()
403 static inline void clear_device(struct ilo_hwinfo *hw) in clear_device() argument
406 clear_pending_db(hw, -1); in clear_device()
409 static inline void ilo_enable_interrupts(struct ilo_hwinfo *hw) in ilo_enable_interrupts() argument
411 iowrite8(ioread8(&hw->mmio_vaddr[DB_IRQ]) | 1, &hw->mmio_vaddr[DB_IRQ]); in ilo_enable_interrupts()
414 static inline void ilo_disable_interrupts(struct ilo_hwinfo *hw) in ilo_disable_interrupts() argument
416 iowrite8(ioread8(&hw->mmio_vaddr[DB_IRQ]) & ~1, in ilo_disable_interrupts()
417 &hw->mmio_vaddr[DB_IRQ]); in ilo_disable_interrupts()
420 static void ilo_set_reset(struct ilo_hwinfo *hw) in ilo_set_reset() argument
429 if (!hw->ccb_alloc[slot]) in ilo_set_reset()
431 set_channel_reset(&hw->ccb_alloc[slot]->driver_ccb); in ilo_set_reset()
441 struct ilo_hwinfo *hw = data->ilo_hw; in ilo_read() local
462 found = ilo_pkt_dequeue(hw, driver_ccb, RECVQ, &pkt_id, in ilo_read()
480 ilo_pkt_enqueue(hw, driver_ccb, RECVQ, pkt_id, desc_mem_sz(1)); in ilo_read()
491 struct ilo_hwinfo *hw = data->ilo_hw; in ilo_write() local
498 if (!ilo_pkt_dequeue(hw, driver_ccb, SENDQ, &pkt_id, &pkt_len, &pkt)) in ilo_write()
511 ilo_pkt_enqueue(hw, driver_ccb, SENDQ, pkt_id, len); in ilo_write()
536 struct ilo_hwinfo *hw; in ilo_close() local
540 hw = container_of(ip->i_cdev, struct ilo_hwinfo, cdev); in ilo_close()
542 spin_lock(&hw->open_lock); in ilo_close()
544 if (hw->ccb_alloc[slot]->ccb_cnt == 1) { in ilo_close()
548 spin_lock_irqsave(&hw->alloc_lock, flags); in ilo_close()
549 hw->ccb_alloc[slot] = NULL; in ilo_close()
550 spin_unlock_irqrestore(&hw->alloc_lock, flags); in ilo_close()
552 ilo_ccb_close(hw->ilo_dev, data); in ilo_close()
556 hw->ccb_alloc[slot]->ccb_cnt--; in ilo_close()
558 spin_unlock(&hw->open_lock); in ilo_close()
567 struct ilo_hwinfo *hw; in ilo_open() local
571 hw = container_of(ip->i_cdev, struct ilo_hwinfo, cdev); in ilo_open()
578 spin_lock(&hw->open_lock); in ilo_open()
581 if (hw->ccb_alloc[slot] == NULL) { in ilo_open()
583 error = ilo_ccb_setup(hw, data, slot); in ilo_open()
591 data->ilo_hw = hw; in ilo_open()
595 spin_lock_irqsave(&hw->alloc_lock, flags); in ilo_open()
596 ilo_ccb_open(hw, data, slot); in ilo_open()
597 hw->ccb_alloc[slot] = data; in ilo_open()
598 spin_unlock_irqrestore(&hw->alloc_lock, flags); in ilo_open()
601 error = ilo_ccb_verify(hw, data); in ilo_open()
604 spin_lock_irqsave(&hw->alloc_lock, flags); in ilo_open()
605 hw->ccb_alloc[slot] = NULL; in ilo_open()
606 spin_unlock_irqrestore(&hw->alloc_lock, flags); in ilo_open()
608 ilo_ccb_close(hw->ilo_dev, data); in ilo_open()
616 if (fp->f_flags & O_EXCL || hw->ccb_alloc[slot]->ccb_excl) { in ilo_open()
624 hw->ccb_alloc[slot]->ccb_cnt++; in ilo_open()
629 spin_unlock(&hw->open_lock); in ilo_open()
632 fp->private_data = hw->ccb_alloc[slot]; in ilo_open()
649 struct ilo_hwinfo *hw = data; in ilo_isr() local
652 spin_lock(&hw->alloc_lock); in ilo_isr()
655 pending = get_device_outbound(hw); in ilo_isr()
657 spin_unlock(&hw->alloc_lock); in ilo_isr()
664 ilo_set_reset(hw); in ilo_isr()
668 if (!hw->ccb_alloc[i]) in ilo_isr()
671 wake_up_interruptible(&hw->ccb_alloc[i]->ccb_waitq); in ilo_isr()
675 clear_pending_db(hw, pending); in ilo_isr()
677 spin_unlock(&hw->alloc_lock); in ilo_isr()
682 static void ilo_unmap_device(struct pci_dev *pdev, struct ilo_hwinfo *hw) in ilo_unmap_device() argument
684 pci_iounmap(pdev, hw->db_vaddr); in ilo_unmap_device()
685 pci_iounmap(pdev, hw->ram_vaddr); in ilo_unmap_device()
686 pci_iounmap(pdev, hw->mmio_vaddr); in ilo_unmap_device()
689 static int ilo_map_device(struct pci_dev *pdev, struct ilo_hwinfo *hw) in ilo_map_device() argument
694 hw->mmio_vaddr = pci_iomap(pdev, 1, 0); in ilo_map_device()
695 if (hw->mmio_vaddr == NULL) { in ilo_map_device()
701 hw->ram_vaddr = pci_iomap(pdev, 2, max_ccb * ILOHW_CCB_SZ); in ilo_map_device()
702 if (hw->ram_vaddr == NULL) { in ilo_map_device()
708 hw->db_vaddr = pci_iomap(pdev, 3, max_ccb * ONE_DB_SIZE); in ilo_map_device()
709 if (hw->db_vaddr == NULL) { in ilo_map_device()
716 pci_iounmap(pdev, hw->ram_vaddr); in ilo_map_device()
718 pci_iounmap(pdev, hw->mmio_vaddr); in ilo_map_device()