xref: /illumos-gate/usr/src/lib/libxpio/common/libxpio_impl.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 _LIBXPIO_IMPL_H
17*fd71220bSRobert Mustacchi #define	_LIBXPIO_IMPL_H
18*fd71220bSRobert Mustacchi 
19*fd71220bSRobert Mustacchi /*
20*fd71220bSRobert Mustacchi  * Internal implementation pieces of libxpio.
21*fd71220bSRobert Mustacchi  */
22*fd71220bSRobert Mustacchi 
23*fd71220bSRobert Mustacchi #include <libxpio.h>
24*fd71220bSRobert Mustacchi #include <sys/gpio/kgpio.h>
25*fd71220bSRobert Mustacchi #include <sys/gpio/kgpio_provider.h>
26*fd71220bSRobert Mustacchi 
27*fd71220bSRobert Mustacchi #ifdef __cplusplus
28*fd71220bSRobert Mustacchi extern "C" {
29*fd71220bSRobert Mustacchi #endif
30*fd71220bSRobert Mustacchi 
31*fd71220bSRobert Mustacchi /*
32*fd71220bSRobert Mustacchi  * Maximum size of an internal error message.
33*fd71220bSRobert Mustacchi  */
34*fd71220bSRobert Mustacchi #define	XPIO_ERR_LEN	1024
35*fd71220bSRobert Mustacchi 
36*fd71220bSRobert Mustacchi /*
37*fd71220bSRobert Mustacchi  * Maximum size of an nvlist attribute buffer that we'll alloc right now.
38*fd71220bSRobert Mustacchi  */
39*fd71220bSRobert Mustacchi #define	XPIO_NVL_LEN	(16 * 1024)
40*fd71220bSRobert Mustacchi 
41*fd71220bSRobert Mustacchi struct xpio {
42*fd71220bSRobert Mustacchi 	xpio_err_t xp_err;
43*fd71220bSRobert Mustacchi 	int32_t xp_syserr;
44*fd71220bSRobert Mustacchi 	char xp_errmsg[XPIO_ERR_LEN];
45*fd71220bSRobert Mustacchi 	di_node_t xp_devinfo;
46*fd71220bSRobert Mustacchi };
47*fd71220bSRobert Mustacchi 
48*fd71220bSRobert Mustacchi struct xpio_ctrl {
49*fd71220bSRobert Mustacchi 	list_node_t xc_link;
50*fd71220bSRobert Mustacchi 	xpio_t *xc_xpio;
51*fd71220bSRobert Mustacchi 	di_minor_t xc_minor;
52*fd71220bSRobert Mustacchi 	const char *xc_name;
53*fd71220bSRobert Mustacchi 	int xc_fd;
54*fd71220bSRobert Mustacchi };
55*fd71220bSRobert Mustacchi 
56*fd71220bSRobert Mustacchi struct xpio_ctrl_info {
57*fd71220bSRobert Mustacchi 	uint32_t xci_ngpios;
58*fd71220bSRobert Mustacchi 	uint32_t xci_ndpios;
59*fd71220bSRobert Mustacchi 	char xci_devpath[MAXPATHLEN];
60*fd71220bSRobert Mustacchi };
61*fd71220bSRobert Mustacchi 
62*fd71220bSRobert Mustacchi struct xpio_gpio_info {
63*fd71220bSRobert Mustacchi 	uint32_t xgi_id;
64*fd71220bSRobert Mustacchi 	kgpio_gpio_flags_t xgi_flags;
65*fd71220bSRobert Mustacchi 	nvlist_t *xgi_nvl;
66*fd71220bSRobert Mustacchi };
67*fd71220bSRobert Mustacchi 
68*fd71220bSRobert Mustacchi struct xpio_gpio_update {
69*fd71220bSRobert Mustacchi 	xpio_update_err_t xgo_err;
70*fd71220bSRobert Mustacchi 	int32_t xgo_syserr;
71*fd71220bSRobert Mustacchi 	char xgo_errmsg[XPIO_ERR_LEN];
72*fd71220bSRobert Mustacchi 	xpio_gpio_info_t *xgo_gpio;
73*fd71220bSRobert Mustacchi 	nvlist_t *xgo_update;
74*fd71220bSRobert Mustacchi 	nvlist_t *xgo_err_nvl;
75*fd71220bSRobert Mustacchi };
76*fd71220bSRobert Mustacchi 
77*fd71220bSRobert Mustacchi struct xpio_dpio_info {
78*fd71220bSRobert Mustacchi 	char xdi_dpio[DPIO_NAMELEN];
79*fd71220bSRobert Mustacchi 	char xdi_ctrl[DPIO_NAMELEN];
80*fd71220bSRobert Mustacchi 	uint32_t xdi_gpio;
81*fd71220bSRobert Mustacchi 	dpio_caps_t xdi_caps;
82*fd71220bSRobert Mustacchi 	dpio_flags_t xdi_flags;
83*fd71220bSRobert Mustacchi };
84*fd71220bSRobert Mustacchi 
85*fd71220bSRobert Mustacchi extern bool xpio_error(xpio_t *, xpio_err_t, int32_t, const char *,
86*fd71220bSRobert Mustacchi     ...)  __PRINTFLIKE(4);
87*fd71220bSRobert Mustacchi extern bool xpio_success(xpio_t *);
88*fd71220bSRobert Mustacchi extern bool xpio_update_error(xpio_gpio_update_t *, xpio_update_err_t, int32_t,
89*fd71220bSRobert Mustacchi     const char *, ...)  __PRINTFLIKE(4);
90*fd71220bSRobert Mustacchi extern bool xpio_update_success(xpio_gpio_update_t *);
91*fd71220bSRobert Mustacchi 
92*fd71220bSRobert Mustacchi #ifdef __cplusplus
93*fd71220bSRobert Mustacchi }
94*fd71220bSRobert Mustacchi #endif
95*fd71220bSRobert Mustacchi 
96*fd71220bSRobert Mustacchi #endif /* _LIBXPIO_IMPL_H */
97