ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_slab.h
Go to the documentation of this file.
1
40
41#pragma once
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47#include <stdint.h>
48
49#include "ra8_err.h"
50
57typedef enum : uint32_t {
58 k_ra8_slab_nil = 0xFFFFFFFFU,
62
75typedef struct {
76 uint8_t* base;
77 uint32_t cell_bytes;
78 uint32_t cell_count;
79 uint32_t free_head;
80 uint32_t free_count;
82
109[[nodiscard]] ra8_err_t
110ra8_slab_init(ra8_slab_t* slab, void* buffer, uint32_t buffer_bytes, uint32_t cell_bytes);
111
132[[nodiscard]] ra8_err_t ra8_slab_alloc(ra8_slab_t* slab, void** out_cell);
133
156[[nodiscard]] ra8_err_t ra8_slab_free(ra8_slab_t* slab, void* cell);
157
178[[nodiscard]] ra8_err_t
179ra8_slab_stats(const ra8_slab_t* slab, uint32_t* out_free, uint32_t* out_total);
180
181#ifdef __cplusplus
182}
183#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_slab_const_t
Slab sizing limits and the freelist terminator.
Definition ra8_slab.h:57
@ k_ra8_slab_align_bytes
Required cell-size + buffer alignment.
Definition ra8_slab.h:60
@ k_ra8_slab_nil
Freelist terminator (no next cell).
Definition ra8_slab.h:58
@ k_ra8_slab_min_cell_bytes
Smallest cell (holds one index).
Definition ra8_slab.h:59
ra8_err_t ra8_slab_alloc(ra8_slab_t *slab, void **out_cell)
Allocate one cell from the slab (O(1)).
Definition ra8_slab.c:111
ra8_err_t ra8_slab_free(ra8_slab_t *slab, void *cell)
Return a previously-allocated cell to the slab (O(1)).
Definition ra8_slab.c:125
ra8_err_t ra8_slab_init(ra8_slab_t *slab, void *buffer, uint32_t buffer_bytes, uint32_t cell_bytes)
Initialise a slab over a caller-owned buffer.
Definition ra8_slab.c:85
ra8_err_t ra8_slab_stats(const ra8_slab_t *slab, uint32_t *out_free, uint32_t *out_total)
Report the slab's free / total cell counts.
Definition ra8_slab.c:149
Caller-owned state for one fixed-cell pool.
Definition ra8_slab.h:75
uint32_t cell_bytes
Bytes per cell (>= 4, multiple of 4).
Definition ra8_slab.h:77
uint32_t free_head
Index of the first free cell, or k_ra8_slab_nil.
Definition ra8_slab.h:79
uint32_t cell_count
Total cells the buffer was divided into.
Definition ra8_slab.h:78
uint32_t free_count
Cells currently free (observability).
Definition ra8_slab.h:80
uint8_t * base
First byte of the cell array (caller buffer).
Definition ra8_slab.h:76