185e653c7SImre Vadász #ifndef _GPIO_INTEL_VAR_H 285e653c7SImre Vadász #define _GPIO_INTEL_VAR_H 385e653c7SImre Vadász 485e653c7SImre Vadász struct pinrange { 585e653c7SImre Vadász int start; 685e653c7SImre Vadász int end; 785e653c7SImre Vadász }; 885e653c7SImre Vadász 985e653c7SImre Vadász struct pin_intr_map { 1085e653c7SImre Vadász int pin; 113a060f5eSImre Vadász int intidx; 1285e653c7SImre Vadász void *arg; 1385e653c7SImre Vadász driver_intr_t *handler; 143094cc64SImre Vadász int is_level; 152cd90b92SImre Vadász uint32_t orig_intcfg; 1644007317SImre Vadász uint32_t orig_gpiocfg; 1785e653c7SImre Vadász }; 1885e653c7SImre Vadász 19*d56572d4SImre Vadász struct pin_io_map { 20*d56572d4SImre Vadász int pin; 21*d56572d4SImre Vadász int flags; 22*d56572d4SImre Vadász }; 23*d56572d4SImre Vadász 2485e653c7SImre Vadász struct gpio_intel_softc { 2585e653c7SImre Vadász device_t dev; 2685e653c7SImre Vadász struct resource *mem_res; 2785e653c7SImre Vadász struct resource *irq_res; 2885e653c7SImre Vadász void *intrhand; 2985e653c7SImre Vadász struct lock lk; 3085e653c7SImre Vadász struct pinrange *ranges; 3185e653c7SImre Vadász struct pin_intr_map intrmaps[16]; 32*d56572d4SImre Vadász struct pin_io_map iomaps[128]; 3385e653c7SImre Vadász struct gpio_intel_fns *fns; 3485e653c7SImre Vadász }; 3585e653c7SImre Vadász 3685e653c7SImre Vadász typedef void(*gpio_intel_init_fn)(struct gpio_intel_softc *sc); 3785e653c7SImre Vadász typedef int(*gpio_intel_map_intr_fn)(struct gpio_intel_softc *sc, 380b0166b0SImre Vadász uint16_t pin, int trigger, int polarity, int termination); 3985e653c7SImre Vadász typedef void(*gpio_intel_unmap_intr_fn)(struct gpio_intel_softc *sc, 403a060f5eSImre Vadász struct pin_intr_map *map); 413a060f5eSImre Vadász typedef void(*gpio_intel_enable_intr_fn)(struct gpio_intel_softc *sc, 423a060f5eSImre Vadász struct pin_intr_map *map); 433a060f5eSImre Vadász typedef void(*gpio_intel_disable_intr_fn)(struct gpio_intel_softc *sc, 443a060f5eSImre Vadász struct pin_intr_map *map); 45*d56572d4SImre Vadász typedef int(*gpio_intel_check_io_pin_fn)(struct gpio_intel_softc *sc, 46*d56572d4SImre Vadász uint16_t pin, int flags); 4785e653c7SImre Vadász typedef void(*gpio_intel_write_pin_fn)(struct gpio_intel_softc *sc, 4885e653c7SImre Vadász uint16_t pin, int value); 4985e653c7SImre Vadász typedef int(*gpio_intel_read_pin_fn)(struct gpio_intel_softc *sc, 5085e653c7SImre Vadász uint16_t pin); 5185e653c7SImre Vadász 5285e653c7SImre Vadász struct gpio_intel_fns { 5385e653c7SImre Vadász gpio_intel_init_fn init; 5485e653c7SImre Vadász driver_intr_t *intr; 5585e653c7SImre Vadász gpio_intel_map_intr_fn map_intr; 5685e653c7SImre Vadász gpio_intel_unmap_intr_fn unmap_intr; 573a060f5eSImre Vadász gpio_intel_enable_intr_fn enable_intr; 583a060f5eSImre Vadász gpio_intel_disable_intr_fn disable_intr; 59*d56572d4SImre Vadász gpio_intel_check_io_pin_fn check_io_pin; 6085e653c7SImre Vadász gpio_intel_write_pin_fn write_pin; 6185e653c7SImre Vadász gpio_intel_read_pin_fn read_pin; 6285e653c7SImre Vadász }; 6385e653c7SImre Vadász 6485e653c7SImre Vadász int gpio_cherryview_matchuid(struct gpio_intel_softc *sc); 6585e653c7SImre Vadász 6685e653c7SImre Vadász #endif 67