| /* | 
 |  * nRF51 System-on-Chip general purpose input/output register definition | 
 |  * | 
 |  * QEMU interface: | 
 |  * + sysbus MMIO regions 0: GPIO registers | 
 |  * + Unnamed GPIO inputs 0-31: Set tri-state input level for GPIO pin. | 
 |  *   Level -1: Externally Disconnected/Floating; Pull-up/down will be regarded | 
 |  *   Level 0: Input externally driven LOW | 
 |  *   Level 1: Input externally driven HIGH | 
 |  * + Unnamed GPIO outputs 0-31: | 
 |  *   Level -1: Disconnected/Floating | 
 |  *   Level 0: Driven LOW | 
 |  *   Level 1: Driven HIGH | 
 |  * | 
 |  * Accuracy of the peripheral model: | 
 |  * + The nRF51 GPIO output driver supports two modes, standard and high-current | 
 |  *   mode. These different drive modes are not modeled and handled the same. | 
 |  * + Pin SENSEing is not modeled/implemented. | 
 |  * | 
 |  * Copyright 2018 Steffen Görtz <contrib@steffen-goertz.de> | 
 |  * | 
 |  * This code is licensed under the GPL version 2 or later.  See | 
 |  * the COPYING file in the top-level directory. | 
 |  * | 
 |  */ | 
 | #ifndef NRF51_GPIO_H | 
 | #define NRF51_GPIO_H | 
 |  | 
 | #include "hw/sysbus.h" | 
 | #include "qom/object.h" | 
 | #define TYPE_NRF51_GPIO "nrf51_soc.gpio" | 
 | OBJECT_DECLARE_SIMPLE_TYPE(NRF51GPIOState, NRF51_GPIO) | 
 |  | 
 | #define NRF51_GPIO_PINS 32 | 
 |  | 
 | #define NRF51_GPIO_SIZE 0x1000 | 
 |  | 
 | #define NRF51_GPIO_REG_OUT          0x504 | 
 | #define NRF51_GPIO_REG_OUTSET       0x508 | 
 | #define NRF51_GPIO_REG_OUTCLR       0x50C | 
 | #define NRF51_GPIO_REG_IN           0x510 | 
 | #define NRF51_GPIO_REG_DIR          0x514 | 
 | #define NRF51_GPIO_REG_DIRSET       0x518 | 
 | #define NRF51_GPIO_REG_DIRCLR       0x51C | 
 | #define NRF51_GPIO_REG_CNF_START    0x700 | 
 | #define NRF51_GPIO_REG_CNF_END      0x77C | 
 |  | 
 | #define NRF51_GPIO_PULLDOWN 1 | 
 | #define NRF51_GPIO_PULLUP 3 | 
 |  | 
 | struct NRF51GPIOState { | 
 |     SysBusDevice parent_obj; | 
 |  | 
 |     MemoryRegion mmio; | 
 |     qemu_irq irq; | 
 |  | 
 |     uint32_t out; | 
 |     uint32_t in; | 
 |     uint32_t in_mask; | 
 |     uint32_t dir; | 
 |     uint32_t cnf[NRF51_GPIO_PINS]; | 
 |  | 
 |     uint32_t old_out; | 
 |     uint32_t old_out_connected; | 
 |  | 
 |     qemu_irq output[NRF51_GPIO_PINS]; | 
 |     qemu_irq detect; | 
 | }; | 
 |  | 
 |  | 
 | #endif |