Lines Matching refs:dev

72     struct virtio_device *dev = (struct virtio_device *)arg;  in virtio_mmio_irq()  local
73 LTRACEF("dev %p, index %u\n", dev, dev->index); in virtio_mmio_irq()
75 uint32_t irq_status = dev->mmio_config->interrupt_status; in virtio_mmio_irq()
81 dev->mmio_config->interrupt_ack = 0x1; in virtio_mmio_irq()
85 if ((dev->active_rings_bitmap & (1<<r)) == 0) in virtio_mmio_irq()
88 struct vring *ring = &dev->ring[r]; in virtio_mmio_irq()
99 DEBUG_ASSERT(dev->irq_driver_callback); in virtio_mmio_irq()
100 ret |= dev->irq_driver_callback(dev, r, used_elem); in virtio_mmio_irq()
107 dev->mmio_config->interrupt_ack = 0x2; in virtio_mmio_irq()
109 if (dev->config_change_callback) { in virtio_mmio_irq()
110 ret |= dev->config_change_callback(dev); in virtio_mmio_irq()
134 struct virtio_device *dev = &devices[i]; in virtio_mmio_detect() local
136 dev->index = i; in virtio_mmio_detect()
137 dev->irq = irqs[i]; in virtio_mmio_detect()
140 register_int_handler(irqs[i], &virtio_mmio_irq, (void *)dev); in virtio_mmio_detect()
161 dev->mmio_config = mmio; in virtio_mmio_detect()
162 dev->config_ptr = (void *)mmio->config; in virtio_mmio_detect()
164 status_t err = virtio_block_init(dev, virtio_read_host_feature_word(dev, 0)); in virtio_mmio_detect()
167 dev->valid = true; in virtio_mmio_detect()
169 if (dev->irq_driver_callback) in virtio_mmio_detect()
170 unmask_interrupt(dev->irq); in virtio_mmio_detect()
178 dev->mmio_config = mmio; in virtio_mmio_detect()
179 dev->config_ptr = (void *)mmio->config; in virtio_mmio_detect()
181 status_t err = virtio_net_init(dev); in virtio_mmio_detect()
184 dev->valid = true; in virtio_mmio_detect()
186 if (dev->irq_driver_callback) in virtio_mmio_detect()
187 unmask_interrupt(dev->irq); in virtio_mmio_detect()
195 dev->mmio_config = mmio; in virtio_mmio_detect()
196 dev->config_ptr = (void *)mmio->config; in virtio_mmio_detect()
198 status_t err = virtio_9p_init(dev, mmio->host_features); in virtio_mmio_detect()
201 dev->valid = true; in virtio_mmio_detect()
203 if (dev->irq_driver_callback) in virtio_mmio_detect()
204 unmask_interrupt(dev->irq); in virtio_mmio_detect()
206 virtio_9p_start(dev); in virtio_mmio_detect()
214 dev->mmio_config = mmio; in virtio_mmio_detect()
215 dev->config_ptr = (void *)mmio->config; in virtio_mmio_detect()
217 status_t err = virtio_gpu_init(dev, virtio_read_host_feature_word(dev, 0)); in virtio_mmio_detect()
220 dev->valid = true; in virtio_mmio_detect()
222 if (dev->irq_driver_callback) in virtio_mmio_detect()
223 unmask_interrupt(dev->irq); in virtio_mmio_detect()
225 virtio_gpu_start(dev); in virtio_mmio_detect()
230 if (dev->valid) in virtio_mmio_detect()
237 void virtio_free_desc(struct virtio_device *dev, uint ring_index, uint16_t desc_index) { in virtio_free_desc() argument
238 …LTRACEF("dev %p ring %u index %u free_count %u\n", dev, ring_index, desc_index, dev->ring[ring_ind… in virtio_free_desc()
239 dev->ring[ring_index].desc[desc_index].next = dev->ring[ring_index].free_list; in virtio_free_desc()
240 dev->ring[ring_index].free_list = desc_index; in virtio_free_desc()
241 dev->ring[ring_index].free_count++; in virtio_free_desc()
244 uint16_t virtio_alloc_desc(struct virtio_device *dev, uint ring_index) { in virtio_alloc_desc() argument
245 if (dev->ring[ring_index].free_count == 0) in virtio_alloc_desc()
248 DEBUG_ASSERT(dev->ring[ring_index].free_list != 0xffff); in virtio_alloc_desc()
250 uint16_t i = dev->ring[ring_index].free_list; in virtio_alloc_desc()
251 struct vring_desc *desc = &dev->ring[ring_index].desc[i]; in virtio_alloc_desc()
252 dev->ring[ring_index].free_list = desc->next; in virtio_alloc_desc()
254 dev->ring[ring_index].free_count--; in virtio_alloc_desc()
259 struct vring_desc *virtio_alloc_desc_chain(struct virtio_device *dev, uint ring_index, size_t count… in virtio_alloc_desc_chain() argument
260 if (dev->ring[ring_index].free_count < count) in virtio_alloc_desc_chain()
267 uint16_t i = dev->ring[ring_index].free_list; in virtio_alloc_desc_chain()
268 struct vring_desc *desc = &dev->ring[ring_index].desc[i]; in virtio_alloc_desc_chain()
270 dev->ring[ring_index].free_list = desc->next; in virtio_alloc_desc_chain()
271 dev->ring[ring_index].free_count--; in virtio_alloc_desc_chain()
292 void virtio_submit_chain(struct virtio_device *dev, uint ring_index, uint16_t desc_index) { in virtio_submit_chain() argument
293 LTRACEF("dev %p, ring %u, desc %u\n", dev, ring_index, desc_index); in virtio_submit_chain()
296 struct vring_avail *avail = dev->ring[ring_index].avail; in virtio_submit_chain()
298 avail->ring[avail->idx & dev->ring[ring_index].num_mask] = desc_index; in virtio_submit_chain()
307 void virtio_kick(struct virtio_device *dev, uint ring_index) { in virtio_kick() argument
308 LTRACEF("dev %p, ring %u\n", dev, ring_index); in virtio_kick()
310 dev->mmio_config->queue_notify = ring_index; in virtio_kick()
314 status_t virtio_alloc_ring(struct virtio_device *dev, uint index, uint16_t len) { in virtio_alloc_ring() argument
315 LTRACEF("dev %p, index %u, len %u\n", dev, index, len); in virtio_alloc_ring()
317 DEBUG_ASSERT(dev); in virtio_alloc_ring()
324 struct vring *ring = &dev->ring[index]; in virtio_alloc_ring()
360 dev->ring[index].free_list = 0xffff; in virtio_alloc_ring()
361 dev->ring[index].free_count = 0; in virtio_alloc_ring()
365 virtio_free_desc(dev, index, i); in virtio_alloc_ring()
369 DEBUG_ASSERT(dev->mmio_config); in virtio_alloc_ring()
370 dev->mmio_config->guest_page_size = PAGE_SIZE; in virtio_alloc_ring()
371 dev->mmio_config->queue_sel = index; in virtio_alloc_ring()
372 dev->mmio_config->queue_num = len; in virtio_alloc_ring()
373 dev->mmio_config->queue_align = PAGE_SIZE; in virtio_alloc_ring()
374 dev->mmio_config->queue_pfn = pa / PAGE_SIZE; in virtio_alloc_ring()
377 dev->active_rings_bitmap |= (1 << index); in virtio_alloc_ring()
382 void virtio_reset_device(struct virtio_device *dev) { in virtio_reset_device() argument
383 dev->mmio_config->status = 0; in virtio_reset_device()
386 void virtio_status_acknowledge_driver(struct virtio_device *dev) { in virtio_status_acknowledge_driver() argument
387 dev->mmio_config->status |= VIRTIO_STATUS_ACKNOWLEDGE | VIRTIO_STATUS_DRIVER; in virtio_status_acknowledge_driver()
390 void virtio_status_driver_ok(struct virtio_device *dev) { in virtio_status_driver_ok() argument
391 dev->mmio_config->status |= VIRTIO_STATUS_DRIVER_OK; in virtio_status_driver_ok()
394 void virtio_set_guest_features(struct virtio_device *dev, uint32_t word, uint32_t features) { in virtio_set_guest_features() argument
395 dev->mmio_config->guest_features_sel = word; in virtio_set_guest_features()
396 dev->mmio_config->guest_features = features; in virtio_set_guest_features()
399 uint32_t virtio_read_host_feature_word(struct virtio_device *dev, uint32_t word) { in virtio_read_host_feature_word() argument
400 dev->mmio_config->host_features_sel = word; in virtio_read_host_feature_word()
401 return dev->mmio_config->host_features; in virtio_read_host_feature_word()