12#ifndef TENSTORRENT_UART_TT_VIRT_H_
13#define TENSTORRENT_UART_TT_VIRT_H_
162 volatile atomic_uint *headp;
166 headp = (
volatile atomic_uint *)&vuart->
rx_head;
172 headp = (
volatile atomic_uint *)&vuart->
tx_head;
186 if (atomic_compare_exchange_strong(headp, &head, head + 1)) {
187 *p_char = vuart->
buf[offs + (head % cap)];
216 volatile atomic_uint *tailp;
220 tailp = (
volatile atomic_uint *)&vuart->
tx_tail;
226 tailp = (
volatile atomic_uint *)&vuart->
rx_tail;
241 if (atomic_compare_exchange_strong(tailp, &tail, tail + 1)) {
242 vuart->
buf[offs + (tail % cap)] = out_char;
257volatile struct tt_vuart *uart_tt_virt_get(
const struct device *dev);
tt_vuart_role
Role of the virtual UART in the context of the shared memory buffer.
Definition uart_tt_virt.h:42
static bool tt_vuart_buf_empty(uint32_t head, uint32_t tail)
Determine if the given buffer is empty.
Definition uart_tt_virt.h:126
static uint32_t tt_vuart_buf_size(uint32_t head, uint32_t tail)
Determine the size of the given buffer.
Definition uart_tt_virt.h:101
static bool tt_vuart_buf_full(uint32_t head, uint32_t tail, uint32_t cap)
Determine if the given buffer is full.
Definition uart_tt_virt.h:139
static uint32_t tt_vuart_buf_space(uint32_t head, uint32_t tail, uint32_t cap)
Determine the free space available in the given buffer.
Definition uart_tt_virt.h:114
static int tt_vuart_poll_in(volatile struct tt_vuart *vuart, unsigned char *p_char, enum tt_vuart_role role)
Poll the virtual UART buffer for incoming data.
Definition uart_tt_virt.h:155
static size_t tt_vuart_inst(volatile const struct tt_vuart *vuart)
Determine the instance number of a virtual UART buffer descriptor.
Definition uart_tt_virt.h:89
static void tt_vuart_poll_out(volatile struct tt_vuart *vuart, unsigned char out_char, enum tt_vuart_role role)
Poll the virtual UART buffer with outgoing data.
Definition uart_tt_virt.h:209
@ TT_VUART_ROLE_DEVICE
Definition uart_tt_virt.h:43
@ TT_VUART_ROLE_HOST
Definition uart_tt_virt.h:44
In-memory ring buffer descriptor for Tenstorrent virtual UART.
Definition uart_tt_virt.h:69
uint32_t tx_head
Definition uart_tt_virt.h:75
uint32_t magic
Definition uart_tt_virt.h:70
uint32_t rx_cap
Definition uart_tt_virt.h:71
uint32_t tx_oflow
Definition uart_tt_virt.h:76
uint32_t rx_tail
Definition uart_tt_virt.h:73
uint32_t version
Definition uart_tt_virt.h:78
uint32_t tx_tail
Definition uart_tt_virt.h:77
uint32_t tx_cap
Definition uart_tt_virt.h:74
uint32_t rx_head
Definition uart_tt_virt.h:72
uint8_t buf[]
Definition uart_tt_virt.h:79