1*32002227SRobert Mustacchi /* 2*32002227SRobert Mustacchi * This file and its contents are supplied under the terms of the 3*32002227SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*32002227SRobert Mustacchi * You may only use this file in accordance with the terms of version 5*32002227SRobert Mustacchi * 1.0 of the CDDL. 6*32002227SRobert Mustacchi * 7*32002227SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*32002227SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*32002227SRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*32002227SRobert Mustacchi */ 11*32002227SRobert Mustacchi 12*32002227SRobert Mustacchi /* 13*32002227SRobert Mustacchi * Copyright 2025 Oxide Computer Company 14*32002227SRobert Mustacchi */ 15*32002227SRobert Mustacchi 16*32002227SRobert Mustacchi #ifndef _I2CADM_H 17*32002227SRobert Mustacchi #define _I2CADM_H 18*32002227SRobert Mustacchi 19*32002227SRobert Mustacchi /* 20*32002227SRobert Mustacchi * Common i2cadm(8) interfaces 21*32002227SRobert Mustacchi */ 22*32002227SRobert Mustacchi 23*32002227SRobert Mustacchi #include <stdio.h> 24*32002227SRobert Mustacchi #include <libi2c.h> 25*32002227SRobert Mustacchi #include <sys/ccompile.h> 26*32002227SRobert Mustacchi 27*32002227SRobert Mustacchi #ifdef __cplusplus 28*32002227SRobert Mustacchi extern "C" { 29*32002227SRobert Mustacchi #endif 30*32002227SRobert Mustacchi 31*32002227SRobert Mustacchi #define EXIT_USAGE 2 32*32002227SRobert Mustacchi 33*32002227SRobert Mustacchi typedef struct { 34*32002227SRobert Mustacchi const char *i2c_progname; 35*32002227SRobert Mustacchi i2c_hdl_t *i2c_hdl; 36*32002227SRobert Mustacchi } i2cadm_t; 37*32002227SRobert Mustacchi 38*32002227SRobert Mustacchi typedef struct i2cadm_cmdtab { 39*32002227SRobert Mustacchi const char *icmd_name; 40*32002227SRobert Mustacchi int (*icmd_func)(int, char *[]); 41*32002227SRobert Mustacchi void (*icmd_use)(FILE *); 42*32002227SRobert Mustacchi } i2cadm_cmdtab_t; 43*32002227SRobert Mustacchi 44*32002227SRobert Mustacchi extern i2cadm_t i2cadm; 45*32002227SRobert Mustacchi 46*32002227SRobert Mustacchi extern void i2cadm_warn(const char *, ...) __PRINTFLIKE(1); 47*32002227SRobert Mustacchi extern void i2cadm_fatal(const char *, ...) __PRINTFLIKE(1) __NORETURN; 48*32002227SRobert Mustacchi extern void i2cadm_ofmt_errx(const char *, ...) __PRINTFLIKE(1) __NORETURN; 49*32002227SRobert Mustacchi 50*32002227SRobert Mustacchi extern void i2cadm_walk_usage(const i2cadm_cmdtab_t *, size_t, FILE *); 51*32002227SRobert Mustacchi extern int i2cadm_walk_tab(const i2cadm_cmdtab_t *, size_t, int, char *[]); 52*32002227SRobert Mustacchi 53*32002227SRobert Mustacchi extern int i2cadm_controller(int, char *[]); 54*32002227SRobert Mustacchi extern void i2cadm_controller_usage(FILE *); 55*32002227SRobert Mustacchi extern int i2cadm_mux(int, char *[]); 56*32002227SRobert Mustacchi extern void i2cadm_mux_usage(FILE *); 57*32002227SRobert Mustacchi extern int i2cadm_device(int, char *[]); 58*32002227SRobert Mustacchi extern void i2cadm_device_usage(FILE *); 59*32002227SRobert Mustacchi extern int i2cadm_io(int, char *[]); 60*32002227SRobert Mustacchi extern void i2cadm_io_usage(FILE *); 61*32002227SRobert Mustacchi extern int i2cadm_port(int, char *[]); 62*32002227SRobert Mustacchi extern void i2cadm_port_usage(FILE *); 63*32002227SRobert Mustacchi extern int i2cadm_scan(int, char *[]); 64*32002227SRobert Mustacchi extern void i2cadm_scan_usage(FILE *); 65*32002227SRobert Mustacchi 66*32002227SRobert Mustacchi /* 67*32002227SRobert Mustacchi * Pretty print an address table. 68*32002227SRobert Mustacchi */ 69*32002227SRobert Mustacchi typedef struct { 70*32002227SRobert Mustacchi const char *table_port; 71*32002227SRobert Mustacchi const char *table_key; 72*32002227SRobert Mustacchi const char *table_msg; 73*32002227SRobert Mustacchi uint16_t table_max; 74*32002227SRobert Mustacchi bool (*table_cb)(void *, uint16_t); 75*32002227SRobert Mustacchi void (*table_post)(void *, uint16_t); 76*32002227SRobert Mustacchi } i2cadm_table_t; 77*32002227SRobert Mustacchi 78*32002227SRobert Mustacchi extern void i2cadm_print_table(const i2cadm_table_t *, void *); 79*32002227SRobert Mustacchi 80*32002227SRobert Mustacchi #ifdef __cplusplus 81*32002227SRobert Mustacchi } 82*32002227SRobert Mustacchi #endif 83*32002227SRobert Mustacchi 84*32002227SRobert Mustacchi #endif /* _I2CADM_H */ 85