|  | /* | 
|  | * 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 |