Lines Matching refs:fifo
29 static void fm10k_fifo_init(struct fm10k_mbx_fifo *fifo, u32 *buffer, u16 size) in fm10k_fifo_init() argument
31 fifo->buffer = buffer; in fm10k_fifo_init()
32 fifo->size = size; in fm10k_fifo_init()
33 fifo->head = 0; in fm10k_fifo_init()
34 fifo->tail = 0; in fm10k_fifo_init()
43 static u16 fm10k_fifo_used(struct fm10k_mbx_fifo *fifo) in fm10k_fifo_used() argument
45 return fifo->tail - fifo->head; in fm10k_fifo_used()
54 static u16 fm10k_fifo_unused(struct fm10k_mbx_fifo *fifo) in fm10k_fifo_unused() argument
56 return fifo->size + fifo->head - fifo->tail; in fm10k_fifo_unused()
65 static bool fm10k_fifo_empty(struct fm10k_mbx_fifo *fifo) in fm10k_fifo_empty() argument
67 return fifo->head == fifo->tail; in fm10k_fifo_empty()
77 static u16 fm10k_fifo_head_offset(struct fm10k_mbx_fifo *fifo, u16 offset) in fm10k_fifo_head_offset() argument
79 return (fifo->head + offset) & (fifo->size - 1); in fm10k_fifo_head_offset()
89 static u16 fm10k_fifo_tail_offset(struct fm10k_mbx_fifo *fifo, u16 offset) in fm10k_fifo_tail_offset() argument
91 return (fifo->tail + offset) & (fifo->size - 1); in fm10k_fifo_tail_offset()
100 static u16 fm10k_fifo_head_len(struct fm10k_mbx_fifo *fifo) in fm10k_fifo_head_len() argument
102 u32 *head = fifo->buffer + fm10k_fifo_head_offset(fifo, 0); in fm10k_fifo_head_len()
105 if (fm10k_fifo_empty(fifo)) in fm10k_fifo_head_len()
118 static u16 fm10k_fifo_head_drop(struct fm10k_mbx_fifo *fifo) in fm10k_fifo_head_drop() argument
120 u16 len = fm10k_fifo_head_len(fifo); in fm10k_fifo_head_drop()
123 fifo->head += len; in fm10k_fifo_head_drop()
135 static void fm10k_fifo_drop_all(struct fm10k_mbx_fifo *fifo) in fm10k_fifo_drop_all() argument
137 fifo->head = fifo->tail; in fm10k_fifo_drop_all()
253 static void fm10k_fifo_write_copy(struct fm10k_mbx_fifo *fifo, in fm10k_fifo_write_copy() argument
256 u16 end = fm10k_fifo_tail_offset(fifo, tail_offset); in fm10k_fifo_write_copy()
257 u32 *tail = fifo->buffer + end; in fm10k_fifo_write_copy()
260 end = fifo->size - end; in fm10k_fifo_write_copy()
264 memcpy(fifo->buffer, msg + end, (len - end) << 2); in fm10k_fifo_write_copy()
281 static s32 fm10k_fifo_enqueue(struct fm10k_mbx_fifo *fifo, const u32 *msg) in fm10k_fifo_enqueue() argument
286 if (len > fifo->size) in fm10k_fifo_enqueue()
290 if (len > fm10k_fifo_unused(fifo)) in fm10k_fifo_enqueue()
294 fm10k_fifo_write_copy(fifo, msg, 0, len); in fm10k_fifo_enqueue()
300 fifo->tail += len; in fm10k_fifo_enqueue()
315 struct fm10k_mbx_fifo *fifo = &mbx->rx; in fm10k_mbx_validate_msg_size() local
324 msg = fifo->buffer + fm10k_fifo_tail_offset(fifo, total_len); in fm10k_mbx_validate_msg_size()
348 struct fm10k_mbx_fifo *fifo = &mbx->tx; in fm10k_mbx_write_copy() local
350 u32 *head = fifo->buffer; in fm10k_mbx_write_copy()
364 end = fm10k_fifo_head_offset(fifo, mbx->pulled); in fm10k_mbx_write_copy()
371 for (end = fifo->size - end; len; head = fifo->buffer) { in fm10k_mbx_write_copy()
399 struct fm10k_mbx_fifo *fifo = &mbx->tx; in fm10k_mbx_pull_head() local
406 len = fm10k_fifo_used(fifo) - mbx->pulled; in fm10k_mbx_pull_head()
415 for (len = fm10k_fifo_head_len(fifo); in fm10k_mbx_pull_head()
417 len = fm10k_fifo_head_len(fifo)) { in fm10k_mbx_pull_head()
418 mbx->pulled -= fm10k_fifo_head_drop(fifo); in fm10k_mbx_pull_head()
439 struct fm10k_mbx_fifo *fifo = &mbx->rx; in fm10k_mbx_read_copy() local
441 u32 *tail = fifo->buffer; in fm10k_mbx_read_copy()
451 end = fm10k_fifo_tail_offset(fifo, mbx->pushed); in fm10k_mbx_read_copy()
455 for (end = fifo->size - end; len; tail = fifo->buffer) { in fm10k_mbx_read_copy()
486 struct fm10k_mbx_fifo *fifo = &mbx->rx; in fm10k_mbx_push_tail() local
490 len = fm10k_fifo_unused(fifo) - mbx->pushed; in fm10k_mbx_push_tail()
516 fifo->tail += len; in fm10k_mbx_push_tail()
599 static u16 fm10k_fifo_crc(struct fm10k_mbx_fifo *fifo, u16 offset, in fm10k_fifo_crc() argument
602 u32 *data = fifo->buffer + offset; in fm10k_fifo_crc()
605 offset = fifo->size - offset; in fm10k_fifo_crc()
610 data = fifo->buffer; in fm10k_fifo_crc()
651 struct fm10k_mbx_fifo *fifo = &mbx->rx; in fm10k_mbx_verify_remote_crc() local
653 u16 offset = fm10k_fifo_tail_offset(fifo, mbx->pushed) - len; in fm10k_mbx_verify_remote_crc()
658 mbx->remote = fm10k_fifo_crc(fifo, offset, len, mbx->remote); in fm10k_mbx_verify_remote_crc()
716 struct fm10k_mbx_fifo *fifo = &mbx->rx; in fm10k_mbx_dequeue_rx() local
721 for (cnt = 0; !fm10k_fifo_empty(fifo); cnt++) { in fm10k_mbx_dequeue_rx()
722 err = fm10k_tlv_msg_parse(hw, fifo->buffer + fifo->head, in fm10k_mbx_dequeue_rx()
727 fm10k_fifo_head_drop(fifo); in fm10k_mbx_dequeue_rx()
731 memmove(fifo->buffer, fifo->buffer + fifo->tail, mbx->pushed << 2); in fm10k_mbx_dequeue_rx()
734 fifo->tail -= fifo->head; in fm10k_mbx_dequeue_rx()
735 fifo->head = 0; in fm10k_mbx_dequeue_rx()
867 struct fm10k_mbx_fifo *fifo = &mbx->tx; in fm10k_mbx_create_data_hdr() local
874 crc = fm10k_fifo_crc(fifo, fm10k_fifo_head_offset(fifo, mbx->pulled), in fm10k_mbx_create_data_hdr()
1893 struct fm10k_mbx_fifo *fifo = &mbx->tx; in fm10k_sm_mbx_transmit() local
1907 msg = fifo->buffer + fm10k_fifo_head_offset(fifo, len); in fm10k_sm_mbx_transmit()