Zephyr API Documentation  3.0.0
A Scalable Open Source RTOS
3.0.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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#ifndef ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
13#define ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
14
22#include <zephyr/types.h>
23#include <device.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
34typedef int (*syscon_api_get_base)(const struct device *dev, uintptr_t *addr);
35
41typedef int (*syscon_api_read_reg)(const struct device *dev, uint16_t reg, uint32_t *val);
42
48typedef int (*syscon_api_write_reg)(const struct device *dev, uint16_t reg, uint32_t val);
49
55typedef int (*syscon_api_get_size)(const struct device *dev, size_t *size);
56
60__subsystem struct syscon_driver_api {
65};
66
74__syscall int syscon_get_base(const struct device *dev, uintptr_t *addr);
75
76static inline int z_impl_syscon_get_base(const struct device *dev, uintptr_t *addr)
77{
78 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
79
80 if (api == NULL) {
81 return -ENOTSUP;
82 }
83
84 return api->get_base(dev, addr);
85}
86
87
99__syscall int syscon_read_reg(const struct device *dev, uint16_t reg, uint32_t *val);
100
101static inline int z_impl_syscon_read_reg(const struct device *dev, uint16_t reg, uint32_t *val)
102{
103 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
104
105 if (api == NULL) {
106 return -ENOTSUP;
107 }
108
109 return api->read(dev, reg, val);
110}
111
112
124__syscall int syscon_write_reg(const struct device *dev, uint16_t reg, uint32_t val);
125
126static inline int z_impl_syscon_write_reg(const struct device *dev, uint16_t reg, uint32_t val)
127{
128 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
129
130 if (api == NULL) {
131 return -ENOTSUP;
132 }
133
134 return api->write(dev, reg, val);
135}
136
144__syscall int syscon_get_size(const struct device *dev, size_t *size);
145
146static inline int z_impl_syscon_get_size(const struct device *dev, size_t *size)
147{
148 const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
149
150 return api->get_size(dev, size);
151}
152
157#ifdef __cplusplus
158}
159#endif
160
161#include <syscalls/syscon.h>
162
163#endif /* ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_ */
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)
Definition: syscon.h:48
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)
int(* syscon_api_get_base)(const struct device *dev, uintptr_t *addr)
Definition: syscon.h:34
int(* syscon_api_read_reg)(const struct device *dev, uint16_t reg, uint32_t *val)
Definition: syscon.h:41
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)
Definition: syscon.h:55
#define ENOTSUP
Definition: errno.h:115
struct shared_multi_heap_region * reg
Definition: main.c:17
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:75
__UINT16_TYPE__ uint16_t
Definition: stdint.h:59
Runtime device structure (in ROM) per driver instance.
Definition: device.h:450
const void * api
Definition: device.h:456
System Control (syscon) register driver API.
Definition: syscon.h:60
syscon_api_get_base get_base
Definition: syscon.h:63
syscon_api_read_reg read
Definition: syscon.h:61
syscon_api_get_size get_size
Definition: syscon.h:64
syscon_api_write_reg write
Definition: syscon.h:62