xpio
xpio_t *xpio = gpioadm.gpio_xpio;
xpio_errmsg(xpio), xpio_err2str(xpio, xpio_err(xpio)),
xpio_err(xpio), xpio_syserr(xpio));
gpioadm_controller_list_cb(xpio_t *xpio, xpio_ctrl_disc_t *disc, void *arg)
if (!xpio_ctrl_init(xpio, disc->xcd_minor, &ctrl)) {
gpioadm_dpio_list_cb(xpio_t *xpio, xpio_dpio_disc_t *disc, void *arg)
gpioadm_gpio_list_cb(xpio_t *xpio, xpio_ctrl_disc_t *disc, void *arg)
if (!xpio_ctrl_init(xpio, disc->xcd_minor, &ctrl)) {
xpio_error(xpio_t *xpio, xpio_err_t err, int32_t sys, const char *fmt, ...)
xpio->xp_err = err;
xpio->xp_syserr = sys;
(void) vsnprintf(xpio->xp_errmsg, sizeof (xpio->xp_errmsg), fmt, ap);
xpio_success(xpio_t *xpio)
xpio->xp_err = XPIO_ERR_OK;
xpio->xp_syserr = 0;
xpio->xp_errmsg[0] = '\0';
xpio_ctrl_discover(xpio_t *xpio, xpio_ctrl_disc_f func, void *arg)
cb.xcc_xpio = xpio;
(void) di_walk_minor(xpio->xp_devinfo, DDI_NT_GPIO_CTRL, 0, &cb,
xpio_t *xpio = ctrl->xc_xpio;
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_KGPIO, e, "failed to issue "
return (xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to "
return (xpio_success(xpio));
xpio_ctrl_init(xpio_t *xpio, di_minor_t minor, xpio_ctrl_t **outp)
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_WRONG_MINOR_TYPE, 0,
return (xpio_error(xpio, XPIO_ERR_LIBDEVINFO, e, "failed to "
return (xpio_error(xpio, XPIO_ERR_INTERNAL, 0, "failed to "
return (xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to "
ctrl->xc_xpio = xpio;
return (xpio_error(xpio, XPIO_ERR_OPEN_DEV, e, "failed to open "
return (xpio_success(xpio));
xpio_err(xpio_t *xpio)
xpio_ctrl_init_by_name_cb(xpio_t *xpio, xpio_ctrl_disc_t *disc, void *arg)
(void) xpio_ctrl_init(xpio, disc->xcd_minor, &init->xcia_ctrl);
return (xpio->xp_err);
xpio_ctrl_init_by_name(xpio_t *xpio, const char *name, xpio_ctrl_t **outp)
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
xpio_ctrl_discover(xpio, xpio_ctrl_init_by_name_cb, &init);
return (xpio_error(xpio, XPIO_ERR_BAD_CTRL_NAME, 0, "failed to "
return (xpio_success(xpio));
xpio_t *xpio = ctrl->xc_xpio;
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to "
ret = xpio_error(xpio, XPIO_ERR_BAD_GPIO_ID, 0, "gpio "
ret = xpio_error(xpio, XPIO_ERR_INTERNAL, 0,
xpio_syserr(xpio_t *xpio)
ret = xpio_error(xpio, XPIO_ERR_KGPIO, e, "failed to "
ret = xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to "
return (xpio->xp_syserr);
ret = xpio_error(xpio, XPIO_ERR_INTERNAL, nvl_ret, "kernel "
ret = xpio_success(xpio);
xpio_t *xpio = ctrl->xc_xpio;
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_UPDATE_USED, 0, "this "
return (xpio_error(xpio, XPIO_ERR_INTERNAL, nvl_ret, "failed "
ret = xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to allocate "
ret = xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to allocate "
ret = xpio_error(xpio, XPIO_ERR_INTERNAL, nvl_ret, "failed to "
ret = xpio_error(xpio, XPIO_ERR_KGPIO, e, "failed to isue "
xpio_errmsg(xpio_t *xpio)
ret = xpio_success(xpio);
ret = xpio_error(xpio, XPIO_ERR_INTERNAL, nvl_ret,
return (xpio->xp_errmsg);
ret = xpio_error(xpio, XPIO_ERR_BAD_UPDATE, 0, "failed to apply GPIO "
xpio_t *xpio = ctrl->xc_xpio;
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_GPIO_NAME, 0, "GPIO name "
return (xpio_error(xpio, XPIO_ERR_NO_LOOKUP_MATCH, 0,
return (xpio_error(xpio, XPIO_ERR_BAD_GPIO_NAME, 0,
return (xpio_error(xpio, XPIO_ERR_KGPIO, e,
return (xpio_success(xpio));
xpio_gpio_update_init(xpio_t *xpio, xpio_gpio_info_t *gi,
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to "
return (xpio_error(xpio, XPIO_ERR_NO_MEM, ret, "failed "
return (xpio_error(xpio, XPIO_ERR_INTERNAL, ret, "failed to "
return (xpio_success(xpio));
xpio_err2str(xpio_t *xpio, xpio_err_t err)
xpio_fini(xpio_t *xpio)
if (xpio == NULL)
if (xpio->xp_devinfo != DI_NODE_NIL) {
di_fini(xpio->xp_devinfo);
xpio->xp_devinfo = NULL;
free(xpio);
xpio_t *xpio;
xpio = calloc(1, sizeof (xpio_t));
if (xpio == NULL) {
xpio->xp_err = XPIO_ERR_OK;
xpio->xp_devinfo = di_init("/", DINFOCPYALL);
if (xpio->xp_devinfo == DI_NODE_NIL) {
xpio_fini(xpio);
return (xpio);
typedef struct xpio xpio_t;
xpio_dpio_info(xpio_t *xpio, di_minor_t minor, xpio_dpio_info_t **outp)
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_WRONG_MINOR_TYPE, 0,
return (xpio_error(xpio, XPIO_ERR_OPEN_DEV, e, "failed to open "
(void) xpio_error(xpio, XPIO_ERR_NO_MEM, e, "failed to "
(void) xpio_error(xpio, XPIO_ERR_INTERNAL, 0, "DPIO name "
(void) xpio_error(xpio, XPIO_ERR_BAD_DPIO_NAME, 0,
(void) xpio_error(xpio, XPIO_ERR_KGPIO, e, "failed to "
return (xpio_success(xpio));
xpio_t *xpio = ctrl->xc_xpio;
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_BAD_DPIO_FEAT, 0, "found "
return (xpio_error(xpio, XPIO_ERR_BAD_DPIO_NAME, 0,
return (xpio_error(xpio, XPIO_ERR_KGPIO, e, "failed to create "
return (xpio_success(xpio));
xpio_t *xpio = ctrl->xc_xpio;
return (xpio_error(xpio, XPIO_ERR_BAD_PTR, 0, "encountered "
return (xpio_error(xpio, XPIO_ERR_KGPIO, e, "failed to destroy "
return (xpio_success(xpio));
xpio_dpio_discover(xpio_t *xpio, xpio_dpio_disc_f func, void *arg)
cb.xdc_xpio = xpio;
(void) di_walk_minor(xpio->xp_devinfo, DDI_NT_GPIO_DPIO, 0, &cb,