123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #ifndef ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
- #define ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
- #include <zephyr/types.h>
- #include <device.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef int (*syscon_api_get_base)(const struct device *dev, uintptr_t *addr);
- typedef int (*syscon_api_read_reg)(const struct device *dev, uint16_t reg, uint32_t *val);
- typedef int (*syscon_api_write_reg)(const struct device *dev, uint16_t reg, uint32_t val);
- typedef int (*syscon_api_get_size)(const struct device *dev, size_t *size);
- __subsystem struct syscon_driver_api {
- syscon_api_read_reg read;
- syscon_api_write_reg write;
- syscon_api_get_base get_base;
- syscon_api_get_size get_size;
- };
- __syscall int syscon_get_base(const struct device *dev, uintptr_t *addr);
- static inline int z_impl_syscon_get_base(const struct device *dev, uintptr_t *addr)
- {
- const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
- if (api == NULL) {
- return -ENOTSUP;
- }
- return api->get_base(dev, addr);
- }
- __syscall int syscon_read_reg(const struct device *dev, uint16_t reg, uint32_t *val);
- static inline int z_impl_syscon_read_reg(const struct device *dev, uint16_t reg, uint32_t *val)
- {
- const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
- if (api == NULL) {
- return -ENOTSUP;
- }
- return api->read(dev, reg, val);
- }
- __syscall int syscon_write_reg(const struct device *dev, uint16_t reg, uint32_t val);
- static inline int z_impl_syscon_write_reg(const struct device *dev, uint16_t reg, uint32_t val)
- {
- const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
- if (api == NULL) {
- return -ENOTSUP;
- }
- return api->write(dev, reg, val);
- }
- __syscall int syscon_get_size(const struct device *dev, size_t *size);
- static inline int z_impl_syscon_get_size(const struct device *dev, size_t *size)
- {
- const struct syscon_driver_api *api = (const struct syscon_driver_api *)dev->api;
- return api->get_size(dev, size);
- }
- #ifdef __cplusplus
- }
- #endif
- #include <syscalls/syscon.h>
- #endif
|