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

Function virtio_console_send_ctrl

components/drivers/virtio/virtio_console.c:45–76  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43};
44
45static void virtio_console_send_ctrl(struct virtio_console_device *virtio_console_dev,
46 struct virtio_console_control *ctrl)
47{
48 rt_uint16_t id;
49 struct virtio_device *virtio_dev = &virtio_console_dev->virtio_dev;
50 struct virtq *queue_ctrl_tx;
51
52#ifdef RT_USING_SMP
53 rt_base_t level = rt_spin_lock_irqsave(&virtio_dev->spinlock);
54#endif
55
56 queue_ctrl_tx = &virtio_dev->queues[VIRTIO_CONSOLE_QUEUE_CTRL_TX];
57
58 id = queue_ctrl_tx->avail->idx % queue_ctrl_tx->num;
59
60 rt_memcpy(&virtio_console_dev->info[id].tx_ctrl, ctrl, sizeof(struct virtio_console_control));
61
62 virtio_free_desc(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_TX, id);
63
64 virtio_fill_desc(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_TX, id,
65 virtio_console_dev->info[id].tx_ctrl_paddr, sizeof(struct virtio_console_control), 0, 0);
66
67 virtio_submit_chain(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_TX, id);
68
69 virtio_queue_notify(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_TX);
70
71 virtio_alloc_desc(virtio_dev, VIRTIO_CONSOLE_QUEUE_CTRL_TX);
72
73#ifdef RT_USING_SMP
74 rt_spin_unlock_irqrestore(&virtio_dev->spinlock, level);
75#endif
76}
77
78static rt_err_t virtio_console_port_init(rt_device_t dev);
79static rt_err_t virtio_console_port_open(rt_device_t dev, rt_uint16_t oflag);

Callers 3

virtio_console_port_initFunction · 0.85
virtio_console_isrFunction · 0.85

Calls 8

rt_memcpyFunction · 0.85
virtio_free_descFunction · 0.85
virtio_fill_descFunction · 0.85
virtio_submit_chainFunction · 0.85
virtio_queue_notifyFunction · 0.85
virtio_alloc_descFunction · 0.85
rt_spin_lock_irqsaveFunction · 0.50

Tested by

no test coverage detected