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