zephyr/include/zephyr/drivers/syscon.h
Yong Cong Sin bbe5e1e6eb build: namespace the generated headers with zephyr/
Namespaced the generated headers with `zephyr` to prevent
potential conflict with other headers.

Introduce a temporary Kconfig `LEGACY_GENERATED_INCLUDE_PATH`
that is enabled by default. This allows the developers to
continue the use of the old include paths for the time being
until it is deprecated and eventually removed. The Kconfig will
generate a build-time warning message, similar to the
`CONFIG_TIMER_RANDOM_GENERATOR`.

Updated the includes path of in-tree sources accordingly.

Most of the changes here are scripted, check the PR for more
info.

Signed-off-by: Yong Cong Sin <ycsin@meta.com>
2024-05-28 22:03:55 +02:00

166 lines
3.7 KiB
C

/*
* Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief Public SYSCON driver APIs
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
#define ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_
/**
* @brief SYSCON Interface
* @defgroup syscon_interface SYSCON Interface
* @ingroup io_interfaces
* @{
*/
#include <errno.h>
#include <zephyr/types.h>
#include <zephyr/device.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* API template to get the base address of the syscon region.
*
* @see syscon_get_base
*/
typedef int (*syscon_api_get_base)(const struct device *dev, uintptr_t *addr);
/**
* API template to read a single register.
*
* @see syscon_read_reg
*/
typedef int (*syscon_api_read_reg)(const struct device *dev, uint16_t reg, uint32_t *val);
/**
* API template to write a single register.
*
* @see syscon_write_reg
*/
typedef int (*syscon_api_write_reg)(const struct device *dev, uint16_t reg, uint32_t val);
/**
* API template to get the size of the syscon register.
*
* @see syscon_get_size
*/
typedef int (*syscon_api_get_size)(const struct device *dev, size_t *size);
/**
* @brief System Control (syscon) register driver API
*/
__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;
};
/**
* @brief Get the syscon base address
*
* @param dev The device to get the register size for.
* @param addr Where to write the base address.
* @return 0 When addr was written to.
*/
__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);
}
/**
* @brief Read from syscon register
*
* This function reads from a specific register in the syscon area
*
* @param dev The device to get the register size for.
* @param reg The register offset
* @param val The returned value read from the syscon register
*
* @return 0 on success, negative on error
*/
__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);
}
/**
* @brief Write to syscon register
*
* This function writes to a specific register in the syscon area
*
* @param dev The device to get the register size for.
* @param reg The register offset
* @param val The value to be written in the register
*
* @return 0 on success, negative on error
*/
__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);
}
/**
* Get the size of the syscon register in bytes.
*
* @param dev The device to get the register size for.
* @param size Pointer to write the size to.
* @return 0 for success.
*/
__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 <zephyr/syscalls/syscon.h>
#endif /* ZEPHYR_INCLUDE_DRIVERS_SYSCON_H_ */