| /* |
| * Copyright (c) 2021 BayLibre, SAS |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief Driver for ARM Generic Interrupt Controller V3 Interrupt Translation Service |
| * |
| * The Generic Interrupt Controller (GIC) Interrupt Translation Service translates an input |
| * EventID from a device, identified by its DeviceID, determines a corresponding INTID for |
| * this input and the target Redistributor and, through this, the target PE for that INTID. |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_DRIVERS_GICV3_ITS_H_ |
| #define ZEPHYR_INCLUDE_DRIVERS_GICV3_ITS_H_ |
| |
| typedef unsigned int (*its_api_alloc_intid_t)(const struct device *dev); |
| typedef int (*its_api_setup_deviceid_t)(const struct device *dev, uint32_t device_id, |
| unsigned int nites); |
| typedef int (*its_api_map_intid_t)(const struct device *dev, uint32_t device_id, |
| uint32_t event_id, unsigned int intid); |
| typedef int (*its_api_send_int_t)(const struct device *dev, uint32_t device_id, uint32_t event_id); |
| typedef uint32_t (*its_api_get_msi_addr_t)(const struct device *dev); |
| |
| __subsystem struct its_driver_api { |
| its_api_alloc_intid_t alloc_intid; |
| its_api_setup_deviceid_t setup_deviceid; |
| its_api_map_intid_t map_intid; |
| its_api_send_int_t send_int; |
| its_api_get_msi_addr_t get_msi_addr; |
| }; |
| |
| static inline int its_alloc_intid(const struct device *dev) |
| { |
| const struct its_driver_api *api = |
| (const struct its_driver_api *)dev->api; |
| |
| return api->alloc_intid(dev); |
| } |
| |
| static inline int its_setup_deviceid(const struct device *dev, uint32_t device_id, |
| unsigned int nites) |
| { |
| const struct its_driver_api *api = |
| (const struct its_driver_api *)dev->api; |
| |
| return api->setup_deviceid(dev, device_id, nites); |
| } |
| |
| static inline int its_map_intid(const struct device *dev, uint32_t device_id, |
| uint32_t event_id, unsigned int intid) |
| { |
| const struct its_driver_api *api = |
| (const struct its_driver_api *)dev->api; |
| |
| return api->map_intid(dev, device_id, event_id, intid); |
| } |
| |
| static inline int its_send_int(const struct device *dev, uint32_t device_id, uint32_t event_id) |
| { |
| const struct its_driver_api *api = |
| (const struct its_driver_api *)dev->api; |
| |
| return api->send_int(dev, device_id, event_id); |
| } |
| |
| static inline uint32_t its_get_msi_addr(const struct device *dev) |
| { |
| const struct its_driver_api *api = |
| (const struct its_driver_api *)dev->api; |
| |
| return api->get_msi_addr(dev); |
| } |
| |
| #endif /* ZEPHYR_INCLUDE_DRIVERS_GICV3_ITS_H_ */ |