2 #include "lfds700_ringbuffer_internal.h"
4 /***** private prototypes *****/
5 static void lfds700_ringbuffer_internal_validate( struct lfds700_ringbuffer_state *rs, struct lfds700_misc_validation_info *vi, enum lfds700_misc_validity *lfds700_queue_validity, enum lfds700_misc_validity *lfds700_freelist_validity );
9 /****************************************************************************/
10 void lfds700_ringbuffer_query( struct lfds700_ringbuffer_state *rs, enum lfds700_ringbuffer_query query_type, void *query_input, void *query_output )
12 LFDS700_PAL_ASSERT( rs != NULL );
13 // TRD : query_type can be any value in its range
15 LFDS700_MISC_BARRIER_LOAD;
19 case LFDS700_RINGBUFFER_QUERY_SINGLETHREADED_GET_COUNT:
20 LFDS700_PAL_ASSERT( query_input == NULL );
21 LFDS700_PAL_ASSERT( query_output != NULL );
23 lfds700_queue_query( &rs->qs, LFDS700_QUEUE_QUERY_SINGLETHREADED_GET_COUNT, NULL, query_output );
26 case LFDS700_RINGBUFFER_QUERY_SINGLETHREADED_VALIDATE:
27 // TRD : query_input can be NULL
28 LFDS700_PAL_ASSERT( query_output != NULL );
30 lfds700_ringbuffer_internal_validate( rs, (struct lfds700_misc_validation_info *) query_input, (enum lfds700_misc_validity *) query_output, ((enum lfds700_misc_validity *) query_output)+1 );
41 /****************************************************************************/
42 static void lfds700_ringbuffer_internal_validate( struct lfds700_ringbuffer_state *rs, struct lfds700_misc_validation_info *vi, enum lfds700_misc_validity *lfds700_queue_validity, enum lfds700_misc_validity *lfds700_freelist_validity )
44 LFDS700_PAL_ASSERT( rs != NULL );
45 // TRD : vi can be NULL
46 LFDS700_PAL_ASSERT( lfds700_queue_validity != NULL );
47 LFDS700_PAL_ASSERT( lfds700_freelist_validity != NULL );
51 lfds700_queue_query( &rs->qs, LFDS700_QUEUE_QUERY_SINGLETHREADED_VALIDATE, NULL, lfds700_queue_validity );
52 lfds700_freelist_query( &rs->fs, LFDS700_FREELIST_QUERY_SINGLETHREADED_VALIDATE, NULL, lfds700_freelist_validity );
57 struct lfds700_misc_validation_info
61 queue_vi.min_elements = 0;
62 freelist_vi.min_elements = 0;
63 queue_vi.max_elements = vi->max_elements;
64 freelist_vi.max_elements = vi->max_elements;
66 lfds700_queue_query( &rs->qs, LFDS700_QUEUE_QUERY_SINGLETHREADED_VALIDATE, &queue_vi, lfds700_queue_validity );
67 lfds700_freelist_query( &rs->fs, LFDS700_FREELIST_QUERY_SINGLETHREADED_VALIDATE, &freelist_vi, lfds700_freelist_validity );