Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F100621290
buffers.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Feb 1, 06:05
Size
2 KB
Mime Type
text/x-c
Expires
Mon, Feb 3, 06:05 (2 d)
Engine
blob
Format
Raw Data
Handle
24001055
Attached To
R6616 sbcp-uc
buffers.h
View Options
/*
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
Log In to Comment