xref: /illumos-gate/usr/src/cmd/i2cadm/i2cadm.h (revision 32002227574cf0a435dc03de622191ca53724f0a)
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