opuntiaOS - an operating system targeting x86 and ARMv7
at master 1.4 kB view raw
1/* 2 * Copyright (C) 2020-2022 The opuntiaOS Project Authors. 3 * + Contributed by Nikita Melekhin <nimelehin@gmail.com> 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9#ifndef _KERNEL_ALGO_RINGBUFFER_H 10#define _KERNEL_ALGO_RINGBUFFER_H 11 12#include <libkern/libkern.h> 13#include <libkern/lock.h> 14#include <mem/kmemzone.h> 15 16#define RINGBUFFER_STD_SIZE (16 * KB) 17 18struct __ringbuffer { 19 kmemzone_t zone; 20 size_t start; 21 size_t end; 22}; 23typedef struct __ringbuffer ringbuffer_t; 24 25ringbuffer_t ringbuffer_create(size_t size); 26#define ringbuffer_create_std() ringbuffer_create(RINGBUFFER_STD_SIZE) 27void ringbuffer_free(ringbuffer_t* buf); 28 29size_t ringbuffer_space_to_read(ringbuffer_t* buf); 30size_t ringbuffer_space_to_read_with_custom_start(ringbuffer_t* buf, size_t start); 31size_t ringbuffer_space_to_write(ringbuffer_t* buf); 32size_t ringbuffer_read(ringbuffer_t* buf, uint8_t*, size_t); 33size_t ringbuffer_read_with_start(ringbuffer_t* buf, size_t start, uint8_t* holder, size_t siz); 34size_t ringbuffer_write(ringbuffer_t* buf, const uint8_t*, size_t); 35size_t ringbuffer_write_ignore_bounds(ringbuffer_t* buf, const uint8_t* holder, size_t siz); 36size_t ringbuffer_read_one(ringbuffer_t* buf, uint8_t* data); 37size_t ringbuffer_write_one(ringbuffer_t* buf, uint8_t data); 38void ringbuffer_clear(ringbuffer_t* buf); 39 40#endif //_KERNEL_ALGO_RINGBUFFER_H