xref: /illumos-gate/usr/src/uts/common/sys/gpio/gpio_sim.h (revision fd71220ba0fafcc9cf5ea0785db206f3f31336e7)
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