Lines Matching refs:fifo

161 //	#pragma mark - fifo
165 init_fifo(net_fifo* fifo, const char* name, size_t maxBytes)
167 mutex_init_etc(&fifo->lock, name, MUTEX_FLAG_CLONE_NAME);
168 fifo->notify = create_sem(0, name);
169 if (fifo->notify < B_OK) {
170 mutex_destroy(&fifo->lock);
171 return fifo->notify;
174 fifo->max_bytes = maxBytes;
175 fifo->current_bytes = 0;
176 fifo->waiting = 0;
177 list_init(&fifo->buffers);
184 uninit_fifo(net_fifo* fifo)
186 clear_fifo(fifo);
188 mutex_destroy(&fifo->lock);
189 delete_sem(fifo->notify);
194 base_fifo_enqueue_buffer(net_fifo* fifo, net_buffer* buffer)
196 if (fifo->max_bytes > 0
197 && fifo->current_bytes + buffer->size > fifo->max_bytes)
200 list_add_item(&fifo->buffers, buffer);
201 fifo->current_bytes += buffer->size;
202 fifo_notify_one_reader(fifo->waiting, fifo->notify);
209 fifo_enqueue_buffer(net_fifo* fifo, net_buffer* buffer)
211 MutexLocker locker(fifo->lock);
212 return base_fifo_enqueue_buffer(fifo, buffer);
226 fifo_dequeue_buffer(net_fifo* fifo, uint32 flags, bigtime_t timeout,
232 MutexLocker locker(fifo->lock);
237 net_buffer* buffer = (net_buffer*)list_get_first_item(&fifo->buffers);
248 list_remove_item(&fifo->buffers, buffer);
249 fifo->current_bytes -= buffer->size;
258 fifo->waiting++;
266 status = acquire_sem_etc(fifo->notify, 1,
277 fifo_notify_one_reader(fifo->waiting, fifo->notify);
284 clear_fifo(net_fifo* fifo)
286 MutexLocker locker(fifo->lock);
289 net_buffer* buffer = (net_buffer*)list_remove_head_item(&fifo->buffers);
296 fifo->current_bytes = 0;
302 fifo_socket_enqueue_buffer(net_fifo* fifo, net_socket* socket, uint8 event,
309 MutexLocker locker(fifo->lock);
311 status_t status = base_fifo_enqueue_buffer(fifo, buffer);
315 notify_socket(socket, event, fifo->current_bytes);