Line data Source code
1 1 : /* 2 : * Copyright (c) 2021 BayLibre, SAS 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** 8 : * @file 9 : * @brief Driver for ARM Generic Interrupt Controller V3 Interrupt Translation Service 10 : * 11 : * The Generic Interrupt Controller (GIC) Interrupt Translation Service translates an input 12 : * EventID from a device, identified by its DeviceID, determines a corresponding INTID for 13 : * this input and the target Redistributor and, through this, the target PE for that INTID. 14 : */ 15 : 16 : #ifndef ZEPHYR_INCLUDE_DRIVERS_GICV3_ITS_H_ 17 : #define ZEPHYR_INCLUDE_DRIVERS_GICV3_ITS_H_ 18 : 19 0 : typedef unsigned int (*its_api_alloc_intid_t)(const struct device *dev); 20 0 : typedef int (*its_api_setup_deviceid_t)(const struct device *dev, uint32_t device_id, 21 : unsigned int nites); 22 0 : typedef int (*its_api_map_intid_t)(const struct device *dev, uint32_t device_id, 23 : uint32_t event_id, unsigned int intid); 24 0 : typedef int (*its_api_send_int_t)(const struct device *dev, uint32_t device_id, uint32_t event_id); 25 0 : typedef uint32_t (*its_api_get_msi_addr_t)(const struct device *dev); 26 : 27 0 : __subsystem struct its_driver_api { 28 0 : its_api_alloc_intid_t alloc_intid; 29 0 : its_api_setup_deviceid_t setup_deviceid; 30 0 : its_api_map_intid_t map_intid; 31 0 : its_api_send_int_t send_int; 32 0 : its_api_get_msi_addr_t get_msi_addr; 33 : }; 34 : 35 0 : static inline int its_alloc_intid(const struct device *dev) 36 : { 37 : const struct its_driver_api *api = 38 : (const struct its_driver_api *)dev->api; 39 : 40 : return api->alloc_intid(dev); 41 : } 42 : 43 0 : static inline int its_setup_deviceid(const struct device *dev, uint32_t device_id, 44 : unsigned int nites) 45 : { 46 : const struct its_driver_api *api = 47 : (const struct its_driver_api *)dev->api; 48 : 49 : return api->setup_deviceid(dev, device_id, nites); 50 : } 51 : 52 0 : static inline int its_map_intid(const struct device *dev, uint32_t device_id, 53 : uint32_t event_id, unsigned int intid) 54 : { 55 : const struct its_driver_api *api = 56 : (const struct its_driver_api *)dev->api; 57 : 58 : return api->map_intid(dev, device_id, event_id, intid); 59 : } 60 : 61 0 : static inline int its_send_int(const struct device *dev, uint32_t device_id, uint32_t event_id) 62 : { 63 : const struct its_driver_api *api = 64 : (const struct its_driver_api *)dev->api; 65 : 66 : return api->send_int(dev, device_id, event_id); 67 : } 68 : 69 0 : static inline uint32_t its_get_msi_addr(const struct device *dev) 70 : { 71 : const struct its_driver_api *api = 72 : (const struct its_driver_api *)dev->api; 73 : 74 : return api->get_msi_addr(dev); 75 : } 76 : 77 : #endif /* ZEPHYR_INCLUDE_DRIVERS_GICV3_ITS_H_ */