Line data Source code
1 1 : /*
2 : * Copyright 2024 NXP
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief SCMI SHMEM API
10 : */
11 :
12 : #ifndef _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_SHMEM_H_
13 : #define _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_SHMEM_H_
14 :
15 : #include <zephyr/device.h>
16 : #include <zephyr/arch/cpu.h>
17 : #include <errno.h>
18 :
19 0 : #define SCMI_SHMEM_CHAN_STATUS_BUSY_BIT BIT(0)
20 0 : #define SCMI_SHMEM_CHAN_FLAG_IRQ_BIT BIT(0)
21 :
22 0 : struct scmi_shmem_layout {
23 0 : volatile uint32_t res0;
24 0 : volatile uint32_t chan_status;
25 0 : volatile uint32_t res1[2];
26 0 : volatile uint32_t chan_flags;
27 0 : volatile uint32_t len;
28 0 : volatile uint32_t msg_hdr;
29 : };
30 :
31 : struct scmi_message;
32 :
33 : /**
34 : * @brief Write a message in the SHMEM area
35 : *
36 : * @param shmem pointer to shmem device
37 : * @param msg message to write
38 : *
39 : * @retval 0 if successful
40 : * @retval negative errno if failure
41 : */
42 1 : int scmi_shmem_write_message(const struct device *shmem,
43 : struct scmi_message *msg);
44 :
45 : /**
46 : * @brief Read a message from a SHMEM area
47 : *
48 : * @param shmem pointer to shmem device
49 : * @param msg message to write the data into
50 : *
51 : * @retval 0 if successful
52 : * @retval negative errno if failure
53 : */
54 1 : int scmi_shmem_read_message(const struct device *shmem,
55 : struct scmi_message *msg);
56 :
57 : /**
58 : * @brief Update the channel flags
59 : *
60 : * @param shmem pointer to shmem device
61 : * @param mask value to negate and bitwise-and the old
62 : * channel flags value
63 : * @param val value to bitwise and with the mask and
64 : * bitwise-or with the masked old value
65 : */
66 1 : void scmi_shmem_update_flags(const struct device *shmem,
67 : uint32_t mask, uint32_t val);
68 :
69 : /**
70 : * @brief Read a channel's status
71 : *
72 : * @param shmem pointer to shmem device
73 : */
74 1 : uint32_t scmi_shmem_channel_status(const struct device *shmem);
75 :
76 : /**
77 : * @brief Process vendor specific features when writing message
78 : *
79 : * @param layout layout of the message
80 : *
81 : * @retval 0 if successful
82 : * @retval negative errno if failure
83 : */
84 1 : int scmi_shmem_vendor_write_message(struct scmi_shmem_layout *layout);
85 :
86 : /**
87 : * @brief Process vendor specific features when reading message
88 : *
89 : * @param layout layout of the message
90 : *
91 : * @retval 0 if successful
92 : * @retval negative errno if failure
93 : */
94 1 : int scmi_shmem_vendor_read_message(const struct scmi_shmem_layout *layout);
95 :
96 : #endif /* _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_SHMEM_H_ */
|