Changeset 68 for trunk/kernel/libk/remote_fifo.c
- Timestamp:
- Jun 27, 2017, 10:24:13 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/libk/remote_fifo.c
r60 r68 1 1 /* 2 * remote_fifo.c Implement a lock-less FIFO, 3 multiple-remote-writers / single-local-reader 2 * remote_fifo.c Implement a lock-less FIFO, multiple-remote-writers / single-local-reader 4 3 * 5 4 * Authors : Mohamed Lamine Karaoui (2015) 6 * Alain Greiner (2016 )5 * Alain Greiner (2016,2017) 7 6 * 8 7 * Copyright (c) UPMC Sorbonne Universites … … 44 43 for( slot = 0 ; slot < CONFIG_REMOTE_FIFO_SLOTS ; slot++ ) 45 44 { 46 fifo->valid[slot] = false;45 fifo->valid[slot] = 0; 47 46 } 48 47 } 49 48 50 //////////////////////////////////////////// 51 error_t remote_fifo_put_item( xptr_t fifo, 52 void * item, 53 uint32_t size, 54 bool_t * first ) 49 ////////////////////////////////////////////// 50 error_t remote_fifo_put_item( xptr_t fifo, 51 uint64_t * item, 52 bool_t * first ) 55 53 { 56 54 uint32_t wr_id; … … 71 69 hal_disable_irq( &save_sr ); 72 70 73 // get write slot index and increment71 // get write slot index and atomic increment 74 72 wr_id = hal_remote_atomic_add( XPTR( cxy , &ptr->wr_id ) , 1 ); 75 73 … … 114 112 115 113 // copy item to fifo 116 hal_remote_memcpy( XPTR( cxy , &ptr->data[ptw] ), 117 XPTR( local_cxy , item ) , size ); 114 hal_remote_swd( XPTR( cxy , &ptr->data[ptw] ), *item ); 118 115 hal_wbflush(); 119 116 120 117 // set the slot valid flag 121 118 hal_remote_sw( XPTR( cxy , &ptr->valid[ptw] ) , 1 ); 122 123 119 hal_wbflush(); 124 120 … … 135 131 ////////////////////////////////////////////////// 136 132 error_t local_fifo_get_item( remote_fifo_t * fifo, 137 void * item, 138 uint32_t size ) 133 uint64_t * item ) 139 134 { 140 135 // get fifo state … … 152 147 153 148 // copy item from FIFO to local buffer 154 memcpy( item , &fifo->data[ptr] , size );149 *item = fifo->data[ptr]; 155 150 156 151 // reset valid slot flag
Note: See TracChangeset
for help on using the changeset viewer.