Page MenuHomec4science

buffers.h
No OneTemporary

File Metadata

Created
Sat, Feb 1, 06:05

buffers.h

/*
File: bufferd.h
Author: tuleu
Created on May 22, 2012, 5:57 PM
*/
#ifndef SBCP_UC_BUFFERS_H_
#define SBCP_UC_BUFFERS_H_
#include "sbcp-uc_config.h"
#include "sbcp_common.h"
#define SBCP_RX_BUFFER_SIZE (SBCP_FRAME_SIZE * SBCP_PACKET_SIZE)
#define BUFFER_FIFO_MASK (SBCP_FRAME_SIZE -1)
/**
* \internal
*/
typedef unsigned char buffer_fifo_handler;
/**
* fifo of buffer for packet RX
* \internal
*/
typedef struct buffer_fifo {
/// head
buffer_fifo_handler head;
/// tail
buffer_fifo_handler tail;
/// size
signed char nb_buffers;
} buffer_fifo;
#define buffer_fifo_increment_tail(q) do {\
(q).tail += 1; \
(q).tail &= BUFFER_FIFO_MASK; \
++((q).nb_buffers); \
}while(0)
#define buffer_fifo_increment_head(q) do{\
(q).head += 1; \
(q).head &= BUFFER_FIFO_MASK; \
--((q).nb_buffers); \
}while(0)
#define buffer_fifo_set_empty(q) do {\
(q).head = 0; \
(q).tail = BUFFER_FIFO_MASK; \
(q).nb_buffers = 0; \
}while(0)
#define buffer_fifo_empty(q) ((q).nb_buffers == 0)
#define buffer_fifo_full(q) ((q).nb_buffers == SBCP_PACKET_SIZE)
#ifdef SBCP_BUFFER_ALLOCATION
extern volatile unsigned int __attribute__((space(dma))) bus_rx_buffer[SBCP_RX_BUFFER_SIZE] ;
extern unsigned int __attribute__((space(dma))) bus_tx_buffer[SBCP_PACKET_SIZE] ;
extern unsigned int __attribute__((space(dma))) bus_ll_tx_buffer[SBCP_HEADER_SIZE + 2 * SBCP_LOW_LATENCY_OUT_SIZE] ;
extern unsigned int __attribute__((space(dma))) bus_ll_tx_error_buffer[SBCP_HEADER_SIZE + 1] ;
/**
* Response packet, that should be use in instructions.
* \ingroup sbcp_packet_m
*/
#define sbcp_r_packet_buffer bus_tx_buffer
#define buffer_fifo_get_dma_addr(index) ( __builtin_dmaoffset(bus_rx_buffer) + index * SBCP_PACKET_SIZE * 2)
#define buffer_fifo_get_cpu_addr(index) ( &(bus_rx_buffer[index * SBCP_PACKET_SIZE]) )
#else //SBCP_NO_BUFFER_ALLOCATION
extern unsigned int response_buffer[SBCP_PACKET_SIZE];
#define sbcp_r_packet_buffer response_buffer
#endif //SBCP_BUFFER_ALLOCATION
void init_buffers(sbcp_class klass, sbcp_id id);
#endif // SBCP_BUFFERS_H_

Event Timeline