Lines Matching refs:kfd
51 int kfd_interrupt_init(struct kfd_dev *kfd) in kfd_interrupt_init() argument
54 kfd->device_info->ih_ring_entry_size, in kfd_interrupt_init()
59 kfd->interrupt_ring = interrupt_ring; in kfd_interrupt_init()
60 kfd->interrupt_ring_size = in kfd_interrupt_init()
61 KFD_INTERRUPT_RING_SIZE * kfd->device_info->ih_ring_entry_size; in kfd_interrupt_init()
62 atomic_set(&kfd->interrupt_ring_wptr, 0); in kfd_interrupt_init()
63 atomic_set(&kfd->interrupt_ring_rptr, 0); in kfd_interrupt_init()
65 spin_lock_init(&kfd->interrupt_lock); in kfd_interrupt_init()
67 INIT_WORK(&kfd->interrupt_work, interrupt_wq); in kfd_interrupt_init()
69 kfd->interrupts_active = true; in kfd_interrupt_init()
81 void kfd_interrupt_exit(struct kfd_dev *kfd) in kfd_interrupt_exit() argument
90 spin_lock_irqsave(&kfd->interrupt_lock, flags); in kfd_interrupt_exit()
91 kfd->interrupts_active = false; in kfd_interrupt_exit()
92 spin_unlock_irqrestore(&kfd->interrupt_lock, flags); in kfd_interrupt_exit()
101 kfree(kfd->interrupt_ring); in kfd_interrupt_exit()
108 bool enqueue_ih_ring_entry(struct kfd_dev *kfd, const void *ih_ring_entry) in enqueue_ih_ring_entry() argument
110 unsigned int rptr = atomic_read(&kfd->interrupt_ring_rptr); in enqueue_ih_ring_entry()
111 unsigned int wptr = atomic_read(&kfd->interrupt_ring_wptr); in enqueue_ih_ring_entry()
113 if ((rptr - wptr) % kfd->interrupt_ring_size == in enqueue_ih_ring_entry()
114 kfd->device_info->ih_ring_entry_size) { in enqueue_ih_ring_entry()
121 memcpy(kfd->interrupt_ring + wptr, ih_ring_entry, in enqueue_ih_ring_entry()
122 kfd->device_info->ih_ring_entry_size); in enqueue_ih_ring_entry()
124 wptr = (wptr + kfd->device_info->ih_ring_entry_size) % in enqueue_ih_ring_entry()
125 kfd->interrupt_ring_size; in enqueue_ih_ring_entry()
127 atomic_set(&kfd->interrupt_ring_wptr, wptr); in enqueue_ih_ring_entry()
136 static bool dequeue_ih_ring_entry(struct kfd_dev *kfd, void *ih_ring_entry) in dequeue_ih_ring_entry() argument
143 unsigned int wptr = atomic_read(&kfd->interrupt_ring_wptr); in dequeue_ih_ring_entry()
144 unsigned int rptr = atomic_read(&kfd->interrupt_ring_rptr); in dequeue_ih_ring_entry()
149 memcpy(ih_ring_entry, kfd->interrupt_ring + rptr, in dequeue_ih_ring_entry()
150 kfd->device_info->ih_ring_entry_size); in dequeue_ih_ring_entry()
152 rptr = (rptr + kfd->device_info->ih_ring_entry_size) % in dequeue_ih_ring_entry()
153 kfd->interrupt_ring_size; in dequeue_ih_ring_entry()
160 atomic_set(&kfd->interrupt_ring_rptr, rptr); in dequeue_ih_ring_entry()