ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_ipc_xfer.h
Go to the documentation of this file.
1
20
21#pragma once
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#include <stdint.h>
28
29#include "ra8_err.h"
30#include "ra8_ipc_regs.h"
31#include "ra8_ipc_types.h"
32
33/* =============================================================================
34 * Lifecycle
35 * =============================================================================
36 */
37
92[[nodiscard]] ra8_err_t ra8_ipc_init(const ra8_ipc_config_t* cfg);
93
118[[nodiscard]] ra8_err_t ra8_ipc_deinit(uint8_t channel);
119
143[[nodiscard]] ra8_err_t ra8_ipc_reset_fifo(uint8_t channel);
144
164[[nodiscard]] ra8_err_t ra8_ipc_set_event_mask(uint8_t channel, uint32_t mask);
165
166/* =============================================================================
167 * Channel-pair convention helpers
168 * =============================================================================
169 */
170
198[[nodiscard]] ra8_err_t
199ra8_ipc_channel_for_send(ra8_ipc_core_id_t core, uint8_t pair, uint8_t* out_channel);
200
226[[nodiscard]] ra8_err_t
227ra8_ipc_channel_for_recv(ra8_ipc_core_id_t core, uint8_t pair, uint8_t* out_channel);
228
229/* =============================================================================
230 * Send / receive
231 * =============================================================================
232 */
233
259[[nodiscard]] ra8_err_t ra8_ipc_send_event(uint8_t channel, ra8_ipc_irq_event_id_t event_id);
260
280[[nodiscard]] ra8_err_t ra8_ipc_clear_event(uint8_t channel, ra8_ipc_irq_event_id_t event_id);
281
309[[nodiscard]] ra8_err_t ra8_ipc_send_message(uint8_t channel, uint32_t message);
310
337[[nodiscard]] ra8_err_t
338ra8_ipc_send_message_retry(uint8_t channel, uint32_t message, uint16_t max_retries);
339
370[[nodiscard]] ra8_err_t
371ra8_ipc_send_burst(uint8_t channel, const uint32_t* data, uint32_t count, uint32_t* out_written);
372
401[[nodiscard]] ra8_err_t ra8_ipc_recv_message(uint8_t channel, uint32_t* out_msg);
402
429[[nodiscard]] ra8_err_t
430ra8_ipc_recv_message_retry(uint8_t channel, uint32_t* out_msg, uint16_t max_retries);
431
458[[nodiscard]] ra8_err_t
459ra8_ipc_recv_burst(uint8_t channel, uint32_t* out_data, uint32_t capacity, uint32_t* out_read);
460
461/* =============================================================================
462 * Status / errors
463 * =============================================================================
464 */
465
486[[nodiscard]] ra8_err_t ra8_ipc_get_status(uint8_t channel, uint32_t* out_sta);
487
507[[nodiscard]] ra8_err_t ra8_ipc_clear_status(uint8_t channel, uint32_t mask);
508
527[[nodiscard]] ra8_err_t ra8_ipc_clear_errors(uint8_t channel);
528
548[[nodiscard]] ra8_err_t ra8_ipc_can_send(uint8_t channel, bool* out_can_send);
549
569[[nodiscard]] ra8_err_t ra8_ipc_has_data(uint8_t channel, bool* out_has_data);
570
571/* =============================================================================
572 * Security / privilege attribution
573 * =============================================================================
574 */
575
601[[nodiscard]] ra8_err_t ra8_ipc_get_attribution(uint8_t channel, ra8_ipc_attr_t* out_attr);
602
627[[nodiscard]] ra8_err_t ra8_ipc_get_nmi_attribution(uint8_t unit, ra8_ipc_attr_t* out_attr);
628
653 ra8_ipc_attr_t* out_attr);
654
682[[nodiscard]] ra8_err_t
683ra8_ipc_can_access(uint8_t channel, ra8_ipc_attr_t const* required, bool* out_can_access);
684
685#ifdef __cplusplus
686}
687#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
Inter-Processor Communication (IPC) register layout for the RA8D2.
ra8_ipc_core_id_t
Logical CPU core identifiers used by attribution helpers.
ra8_ipc_sem_attr_group_t
IPCSEMn attribution-group selector (HUM Ch 3.3.1 p 227-228).
Inter-Processor Communication (IPC) HAL driver – public types.
ra8_ipc_irq_event_id_t
Index of an IRQ event line within a channel (0..7).
ra8_err_t ra8_ipc_recv_message(uint8_t channel, uint32_t *out_msg)
Pop one 32-bit word from the channel RX FIFO.
Definition ra8_ipc.c:483
ra8_err_t ra8_ipc_send_message_retry(uint8_t channel, uint32_t message, uint16_t max_retries)
Bounded-retry variant of ra8_ipc_send_message.
Definition ra8_ipc.c:418
ra8_err_t ra8_ipc_clear_errors(uint8_t channel)
Clear RERR + FERR on the channel.
Definition ra8_ipc.c:596
ra8_err_t ra8_ipc_send_message(uint8_t channel, uint32_t message)
Push one 32-bit word into the channel TX FIFO.
Definition ra8_ipc.c:393
ra8_err_t ra8_ipc_channel_for_recv(ra8_ipc_core_id_t core, uint8_t pair, uint8_t *out_channel)
Pick the channel id this core reads from.
Definition ra8_ipc.c:331
ra8_err_t ra8_ipc_get_attribution(uint8_t channel, ra8_ipc_attr_t *out_attr)
Read the security / privilege attribution for one channel.
Definition ra8_ipc.c:637
ra8_err_t ra8_ipc_has_data(uint8_t channel, bool *out_has_data)
Predicate: would ra8_ipc_recv_message succeed right now?
Definition ra8_ipc.c:620
ra8_err_t ra8_ipc_init(const ra8_ipc_config_t *cfg)
Initialise one IPC channel.
Definition ra8_ipc.c:228
ra8_err_t ra8_ipc_clear_event(uint8_t channel, ra8_ipc_irq_event_id_t event_id)
Clear one received IRQ event line on the local core.
Definition ra8_ipc.c:376
ra8_err_t ra8_ipc_set_event_mask(uint8_t channel, uint32_t mask)
Update the event-mask filter for an already-initialized channel.
Definition ra8_ipc.c:296
ra8_err_t ra8_ipc_get_status(uint8_t channel, uint32_t *out_sta)
Read the raw channel status register.
Definition ra8_ipc.c:566
ra8_err_t ra8_ipc_can_access(uint8_t channel, ra8_ipc_attr_t const *required, bool *out_can_access)
Predicate: does this core's attribution allow writing the channel?
Definition ra8_ipc.c:689
ra8_err_t ra8_ipc_channel_for_send(ra8_ipc_core_id_t core, uint8_t pair, uint8_t *out_channel)
Pick the channel id this core writes to.
Definition ra8_ipc.c:311
ra8_err_t ra8_ipc_clear_status(uint8_t channel, uint32_t mask)
Clear selected status bits on a channel.
Definition ra8_ipc.c:580
ra8_err_t ra8_ipc_get_nmi_attribution(uint8_t unit, ra8_ipc_attr_t *out_attr)
Read the attribution for one NMI unit.
Definition ra8_ipc.c:656
ra8_err_t ra8_ipc_send_burst(uint8_t channel, const uint32_t *data, uint32_t count, uint32_t *out_written)
Push up to count words into the channel TX FIFO.
Definition ra8_ipc.c:450
ra8_err_t ra8_ipc_reset_fifo(uint8_t channel)
Issue a CLR.RST on one channel without altering callbacks.
Definition ra8_ipc.c:284
ra8_err_t ra8_ipc_get_sem_attribution(ra8_ipc_sem_attr_group_t group, ra8_ipc_attr_t *out_attr)
Read the attribution for an IPCSEM group.
Definition ra8_ipc.c:672
ra8_err_t ra8_ipc_send_event(uint8_t channel, ra8_ipc_irq_event_id_t event_id)
Generate a maskable IRQ event on the peer core.
Definition ra8_ipc.c:355
ra8_err_t ra8_ipc_can_send(uint8_t channel, bool *out_can_send)
Predicate: would ra8_ipc_send_message succeed right now?
Definition ra8_ipc.c:608
ra8_err_t ra8_ipc_recv_message_retry(uint8_t channel, uint32_t *out_msg, uint16_t max_retries)
Bounded-retry variant of ra8_ipc_recv_message.
Definition ra8_ipc.c:503
ra8_err_t ra8_ipc_recv_burst(uint8_t channel, uint32_t *out_data, uint32_t capacity, uint32_t *out_read)
Drain up to capacity words from the channel RX FIFO.
Definition ra8_ipc.c:532
ra8_err_t ra8_ipc_deinit(uint8_t channel)
Tear down one IPC channel.
Definition ra8_ipc.c:261
Snapshot of the security / privilege attribution for one IPC channel, decoded from IPCSAR / IPCPAR.
Per-channel configuration descriptor passed to ra8_ipc_init.