MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / virtio_console_init

Function virtio_console_init

components/drivers/virtio/virtio_console.c:439–484  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

437}
438
439static rt_err_t virtio_console_init(rt_device_t dev)
440{
441 struct virtio_console_device *virtio_console_dev = (struct virtio_console_device *)dev;
442 struct virtio_device *virtio_dev = &virtio_console_dev->virtio_dev;
443
444 if (virtio_has_feature(virtio_dev, VIRTIO_CONSOLE_F_MULTIPORT))
445 {
446 rt_uint16_t id;
447 rt_uint16_t idx[VIRTIO_CONSOLE_QUEUE_SIZE];
448 struct virtq *queue_ctrl_rx, *queue_ctrl_tx;
449
450 queue_ctrl_rx = &virtio_dev->queues[VIRTIO_CONSOLE_QUEUE_CTRL_RX];
451 queue_ctrl_tx = &virtio_dev->queues[VIRTIO_CONSOLE_QUEUE_CTRL_TX];
452
453 virtio_alloc_desc_chain(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_RX, queue_ctrl_rx->num, idx);
454 virtio_alloc_desc_chain(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_TX, queue_ctrl_tx->num, idx);
455
456 for (id = 0; id < queue_ctrl_rx->num; ++id)
457 {
458 void *addr = &virtio_console_dev->info[id].rx_ctrl;
459
460 virtio_fill_desc(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_RX, id,
461 VIRTIO_VA2PA(addr), sizeof(struct virtio_console_control), VIRTQ_DESC_F_WRITE, 0);
462
463 queue_ctrl_rx->avail->ring[id] = id;
464 }
465 rt_hw_dsb();
466
467 for (id = 0; id < queue_ctrl_tx->num; ++id)
468 {
469 virtio_console_dev->info[id].tx_ctrl_paddr = VIRTIO_VA2PA(&virtio_console_dev->info[id].tx_ctrl);
470 }
471
472 queue_ctrl_rx->avail->flags = 0;
473 queue_ctrl_rx->avail->idx = queue_ctrl_rx->num;
474
475 queue_ctrl_rx->used_idx = queue_ctrl_rx->used->idx;
476
477 queue_ctrl_tx->avail->flags = VIRTQ_AVAIL_F_NO_INTERRUPT;
478 queue_ctrl_tx->avail->idx = 0;
479
480 virtio_queue_notify(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_RX);
481 }
482
483 return virtio_console_port_create(virtio_console_dev);
484}
485
486static rt_err_t virtio_console_control(rt_device_t dev, int cmd, void *args)
487{

Callers

nothing calls this directly

Calls 6

virtio_has_featureFunction · 0.85
virtio_alloc_desc_chainFunction · 0.85
virtio_fill_descFunction · 0.85
virtio_queue_notifyFunction · 0.85
rt_hw_dsbFunction · 0.50

Tested by

no test coverage detected