|  | /* | 
|  | * Xilinx Processor System MIO / EMIO GPIO controller driver | 
|  | * | 
|  | * Driver private data declarations, GPIO bank module | 
|  | * | 
|  | * Copyright (c) 2022, Weidmueller Interface GmbH & Co. KG | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #ifndef _ZEPHYR_DRIVERS_GPIO_GPIO_XLNX_PS_BANK_H_ | 
|  | #define _ZEPHYR_DRIVERS_GPIO_GPIO_XLNX_PS_BANK_H_ | 
|  |  | 
|  | /* | 
|  | * Register address calculation macros | 
|  | * Register address offsets: comp. Zynq-7000 TRM, ug585, chap. B.19 | 
|  | */ | 
|  | #define GPIO_XLNX_PS_BANK_MASK_DATA_LSW_REG (dev_conf->base_addr\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x8)) | 
|  | #define GPIO_XLNX_PS_BANK_MASK_DATA_MSW_REG ((dev_conf->base_addr + 0x04)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x8)) | 
|  | #define GPIO_XLNX_PS_BANK_DATA_REG          ((dev_conf->base_addr + 0x40)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x4)) | 
|  | #define GPIO_XLNX_PS_BANK_DATA_RO_REG       ((dev_conf->base_addr + 0x60)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x4)) | 
|  | #define GPIO_XLNX_PS_BANK_DIRM_REG          ((dev_conf->base_addr + 0x204)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_OEN_REG           ((dev_conf->base_addr + 0x208)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_INT_MASK_REG      ((dev_conf->base_addr + 0x20C)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_INT_EN_REG        ((dev_conf->base_addr + 0x210)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_INT_DIS_REG       ((dev_conf->base_addr + 0x214)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_INT_STAT_REG      ((dev_conf->base_addr + 0x218)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_INT_TYPE_REG      ((dev_conf->base_addr + 0x21C)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_INT_POLARITY_REG  ((dev_conf->base_addr + 0x220)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  | #define GPIO_XLNX_PS_BANK_INT_ANY_REG       ((dev_conf->base_addr + 0x224)\ | 
|  | + ((uint32_t)dev_conf->bank_index * 0x40)) | 
|  |  | 
|  | /** | 
|  | * @brief Run-time modifiable device data structure. | 
|  | * | 
|  | * This struct contains all data of a PS MIO / EMIO GPIO bank | 
|  | * which is modifiable at run-time, such as the configuration | 
|  | * parameters and current values of each individual pin belonging | 
|  | * to the respective bank. | 
|  | */ | 
|  | struct gpio_xlnx_ps_bank_dev_data { | 
|  | struct gpio_driver_data common; | 
|  | sys_slist_t callbacks; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * @brief Constant device configuration data structure. | 
|  | * | 
|  | * This struct contains all data of a PS MIO / EMIO GPIO bank | 
|  | * which is required for proper operation (such as base memory | 
|  | * addresses etc.) which don't have to and therefore cannot be | 
|  | * modified at run-time. | 
|  | */ | 
|  | struct gpio_xlnx_ps_bank_dev_cfg { | 
|  | struct gpio_driver_config common; | 
|  |  | 
|  | uint32_t base_addr; | 
|  | uint8_t bank_index; | 
|  | }; | 
|  |  | 
|  | #endif /* _ZEPHYR_DRIVERS_GPIO_GPIO_XLNX_PS_BANK_H_ */ |