Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
syscon.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
14#define ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
15
22
23#include <errno.h>
24
25#include <zephyr/types.h>
26#include <zephyr/device.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
37typedef int (*syscon_api_get_base)(const struct device *dev, uintptr_t *addr);
38
44typedef int (*syscon_api_read_reg)(const struct device *dev, uint16_t reg, uint32_t *val);
45
51typedef int (*syscon_api_write_reg)(const struct device *dev, uint16_t reg, uint32_t val);
52
58typedef int (*syscon_api_get_size)(const struct device *dev, size_t *size);
59
69
79__syscall int syscon_get_base(const struct device *dev, uintptr_t *addr);
80
81static inline int z_impl_syscon_get_base(const struct device *dev, uintptr_t *addr)
82{
83 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
84
85 if ((api == NULL) || (api->get_base == NULL)) {
86 return -ENOSYS;
87 }
88
89 return api->get_base(dev, addr);
90}
91
92
105__syscall int syscon_read_reg(const struct device *dev, uint16_t reg, uint32_t *val);
106
107static inline int z_impl_syscon_read_reg(const struct device *dev, uint16_t reg, uint32_t *val)
108{
109 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
110
111 if ((api == NULL) || (api->read == NULL)) {
112 return -ENOSYS;
113 }
114
115 return api->read(dev, reg, val);
116}
117
118
131__syscall int syscon_write_reg(const struct device *dev, uint16_t reg, uint32_t val);
132
133static inline int z_impl_syscon_write_reg(const struct device *dev, uint16_t reg, uint32_t val)
134{
135 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
136
137 if ((api == NULL) || (api->write == NULL)) {
138 return -ENOSYS;
139 }
140
141 return api->write(dev, reg, val);
142}
143
153__syscall int syscon_get_size(const struct device *dev, size_t *size);
154
155static inline int z_impl_syscon_get_size(const struct device *dev, size_t *size)
156{
157 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
158
159 if ((api == NULL) || (api->get_size == NULL)) {
160 return -ENOSYS;
161 }
162
163 return api->get_size(dev, size);
164}
165
169
170#ifdef __cplusplus
171}
172#endif
173
174#include <zephyr/syscalls/syscon.h>
175
176#endif /* ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_ */
System error numbers.
int syscon_get_base(const struct device *dev, uintptr_t *addr)
Get the syscon base address.
int(* syscon_api_write_reg)(const struct device *dev, uint16_t reg, uint32_t val)
API template to write a single register.
Definition syscon.h:51
int syscon_read_reg(const struct device *dev, uint16_t reg, uint32_t *val)
Read from syscon register.
int syscon_get_size(const struct device *dev, size_t *size)
Get the size of the syscon register in bytes.
int(* syscon_api_get_base)(const struct device *dev, uintptr_t *addr)
API template to get the base address of the syscon region.
Definition syscon.h:37
int(* syscon_api_read_reg)(const struct device *dev, uint16_t reg, uint32_t *val)
API template to read a single register.
Definition syscon.h:44
int syscon_write_reg(const struct device *dev, uint16_t reg, uint32_t val)
Write to syscon register.
int(* syscon_api_get_size)(const struct device *dev, size_t *size)
API template to get the size of the syscon register.
Definition syscon.h:58
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define NULL
Definition iar_missing_defs.h:20
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
System Control (syscon) register driver API.
Definition syscon.h:63
syscon_api_get_base get_base
Definition syscon.h:66
syscon_api_read_reg read
Definition syscon.h:64
syscon_api_get_size get_size
Definition syscon.h:67
syscon_api_write_reg write
Definition syscon.h:65