1*fd71220bSRobert Mustacchi /* 2*fd71220bSRobert Mustacchi * This file and its contents are supplied under the terms of the 3*fd71220bSRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*fd71220bSRobert Mustacchi * You may only use this file in accordance with the terms of version 5*fd71220bSRobert Mustacchi * 1.0 of the CDDL. 6*fd71220bSRobert Mustacchi * 7*fd71220bSRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*fd71220bSRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*fd71220bSRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*fd71220bSRobert Mustacchi */ 11*fd71220bSRobert Mustacchi 12*fd71220bSRobert Mustacchi /* 13*fd71220bSRobert Mustacchi * Copyright 2022 Oxide Computer Company 14*fd71220bSRobert Mustacchi */ 15*fd71220bSRobert Mustacchi 16*fd71220bSRobert Mustacchi #ifndef _SYS_GPIO_GPIO_SIM_H 17*fd71220bSRobert Mustacchi #define _SYS_GPIO_GPIO_SIM_H 18*fd71220bSRobert Mustacchi 19*fd71220bSRobert Mustacchi /* 20*fd71220bSRobert Mustacchi * GPIO Simulator Driver attribute definitions. 21*fd71220bSRobert Mustacchi * 22*fd71220bSRobert Mustacchi * This driver is purely synthetic, it exists for testing. 23*fd71220bSRobert Mustacchi */ 24*fd71220bSRobert Mustacchi 25*fd71220bSRobert Mustacchi #ifdef __cplusplus 26*fd71220bSRobert Mustacchi extern "C" { 27*fd71220bSRobert Mustacchi #endif 28*fd71220bSRobert Mustacchi 29*fd71220bSRobert Mustacchi /* 30*fd71220bSRobert Mustacchi * KGPIO_ATTR_NAME -- ro 31*fd71220bSRobert Mustacchi * string 32*fd71220bSRobert Mustacchi * 33*fd71220bSRobert Mustacchi * This contains the GPIO's name. These names are semantic things that we use to 34*fd71220bSRobert Mustacchi * make understanding testing easier. 35*fd71220bSRobert Mustacchi */ 36*fd71220bSRobert Mustacchi 37*fd71220bSRobert Mustacchi /* 38*fd71220bSRobert Mustacchi * GPIO_SIM_ATTR_OUTPUT -- rw 39*fd71220bSRobert Mustacchi * uint32_t -- gpio_sim_output_t 40*fd71220bSRobert Mustacchi * 41*fd71220bSRobert Mustacchi * GPIO_SIM_ATTR_INPUT -- ro 42*fd71220bSRobert Mustacchi * uint32_t -- gpio_sim_input_t 43*fd71220bSRobert Mustacchi * 44*fd71220bSRobert Mustacchi * This pair allows you to set the GPIO's output and then see what the input 45*fd71220bSRobert Mustacchi * value is. 46*fd71220bSRobert Mustacchi */ 47*fd71220bSRobert Mustacchi #define GPIO_SIM_ATTR_OUTPUT "sim:output" 48*fd71220bSRobert Mustacchi typedef enum { 49*fd71220bSRobert Mustacchi GPIO_SIM_OUTPUT_DISABLED, 50*fd71220bSRobert Mustacchi GPIO_SIM_OUTPUT_LOW, 51*fd71220bSRobert Mustacchi GPIO_SIM_OUTPUT_HIGH 52*fd71220bSRobert Mustacchi } gpio_sim_output_t; 53*fd71220bSRobert Mustacchi 54*fd71220bSRobert Mustacchi #define GPIO_SIM_ATTR_INPUT "sim:input" 55*fd71220bSRobert Mustacchi typedef enum { 56*fd71220bSRobert Mustacchi GPIO_SIM_INPUT_LOW, 57*fd71220bSRobert Mustacchi GPIO_SIM_INPUT_HIGH 58*fd71220bSRobert Mustacchi } gpio_sim_input_t; 59*fd71220bSRobert Mustacchi 60*fd71220bSRobert Mustacchi /* 61*fd71220bSRobert Mustacchi * To make this somewhat usable, we define an additional three properties that 62*fd71220bSRobert Mustacchi * are used to describe information about a GPIO. 63*fd71220bSRobert Mustacchi * 64*fd71220bSRobert Mustacchi * GPIO_SIM_ATTR_PULL -- rw 65*fd71220bSRobert Mustacchi * uint32_t -- gpio_sim_pull_t 66*fd71220bSRobert Mustacchi * 67*fd71220bSRobert Mustacchi * This is a synthetic version of the pull-up/down control. 68*fd71220bSRobert Mustacchi * 69*fd71220bSRobert Mustacchi * GPIO_SIM_ATTR_VOLTAGE -- ro 70*fd71220bSRobert Mustacchi * uint32_t -- gpio_sim_voltage_t 71*fd71220bSRobert Mustacchi * 72*fd71220bSRobert Mustacchi * This is a synthetic read-only value that we use as part of our testing. 73*fd71220bSRobert Mustacchi * 74*fd71220bSRobert Mustacchi * GPIO_SIM_ATTR_SPEED -- rw 75*fd71220bSRobert Mustacchi * uint32_t -- gpio_sim_speed_t 76*fd71220bSRobert Mustacchi * 77*fd71220bSRobert Mustacchi * This would control something like the various rise times exist on a GPIO and 78*fd71220bSRobert Mustacchi * is an homage to the fact that everyone wants to set the fastest, but 79*fd71220bSRobert Mustacchi * generally you actually want the slowest! 80*fd71220bSRobert Mustacchi */ 81*fd71220bSRobert Mustacchi #define GPIO_SIM_ATTR_PULL "sim:pull" 82*fd71220bSRobert Mustacchi typedef enum { 83*fd71220bSRobert Mustacchi GPIO_SIM_PULL_DISABLED, 84*fd71220bSRobert Mustacchi GPIO_SIM_PULL_DOWN, 85*fd71220bSRobert Mustacchi GPIO_SIM_PULL_DOWN_23K, 86*fd71220bSRobert Mustacchi GPIO_SIM_PULL_UP, 87*fd71220bSRobert Mustacchi GPIO_SIM_PULL_UP_5K, 88*fd71220bSRobert Mustacchi GPIO_SIM_PULL_UP_40K, 89*fd71220bSRobert Mustacchi GPIO_SIM_PULL_BOTH 90*fd71220bSRobert Mustacchi } gpio_sim_pull_t; 91*fd71220bSRobert Mustacchi 92*fd71220bSRobert Mustacchi #define GPIO_SIM_ATTR_VOLTAGE "sim:voltage" 93*fd71220bSRobert Mustacchi typedef enum { 94*fd71220bSRobert Mustacchi GPIO_SIM_VOLTAGE_1P8, 95*fd71220bSRobert Mustacchi GPIO_SIM_VOLTAGE_3P3, 96*fd71220bSRobert Mustacchi GPIO_SIM_VOLTAGE_12P0, 97*fd71220bSRobert Mustacchi GPIO_SIM_VOLTAGE_54P5 98*fd71220bSRobert Mustacchi } gpio_sim_voltage_t; 99*fd71220bSRobert Mustacchi 100*fd71220bSRobert Mustacchi #define GPIO_SIM_ATTR_SPEED "sim:speed" 101*fd71220bSRobert Mustacchi typedef enum { 102*fd71220bSRobert Mustacchi GPIO_SIM_SPEED_LOW, 103*fd71220bSRobert Mustacchi GPIO_SIM_SPEED_MEDIUM, 104*fd71220bSRobert Mustacchi GPIO_SIM_SPEED_HIGH, 105*fd71220bSRobert Mustacchi GPIO_SIM_SPEED_VERY_HIGH 106*fd71220bSRobert Mustacchi } gpio_sim_speed_t; 107*fd71220bSRobert Mustacchi 108*fd71220bSRobert Mustacchi #ifdef __cplusplus 109*fd71220bSRobert Mustacchi } 110*fd71220bSRobert Mustacchi #endif 111*fd71220bSRobert Mustacchi 112*fd71220bSRobert Mustacchi #endif /* _SYS_GPIO_GPIO_SIM_H */ 113