xref: /openbmc/linux/include/linux/adb.h (revision 23c2b932)
1 /*
2  * Definitions for ADB (Apple Desktop Bus) support.
3  */
4 #ifndef __ADB_H
5 #define __ADB_H
6 
7 #include <uapi/linux/adb.h>
8 
9 
10 struct adb_request {
11 	unsigned char data[32];
12 	int nbytes;
13 	unsigned char reply[32];
14 	int reply_len;
15 	unsigned char reply_expected;
16 	unsigned char sent;
17 	unsigned char complete;
18 	void (*done)(struct adb_request *);
19 	void *arg;
20 	struct adb_request *next;
21 };
22 
23 struct adb_ids {
24 	int nids;
25 	unsigned char id[16];
26 };
27 
28 /* Structure which encapsulates a low-level ADB driver */
29 
30 struct adb_driver {
31 	char name[16];
32 	int (*probe)(void);
33 	int (*init)(void);
34 	int (*send_request)(struct adb_request *req, int sync);
35 	int (*autopoll)(int devs);
36 	void (*poll)(void);
37 	int (*reset_bus)(void);
38 };
39 
40 /* Values for adb_request flags */
41 #define ADBREQ_REPLY	1	/* expect reply */
42 #define ADBREQ_SYNC	2	/* poll until done */
43 #define ADBREQ_NOSEND	4	/* build the request, but don't send it */
44 
45 /* Messages sent thru the client_list notifier. You should NOT stop
46    the operation, at least not with this version */
47 enum adb_message {
48     ADB_MSG_POWERDOWN,	/* Currently called before sleep only */
49     ADB_MSG_PRE_RESET,	/* Called before resetting the bus */
50     ADB_MSG_POST_RESET	/* Called after resetting the bus (re-do init & register) */
51 };
52 extern struct blocking_notifier_head adb_client_list;
53 
54 int adb_request(struct adb_request *req, void (*done)(struct adb_request *),
55 		int flags, int nbytes, ...);
56 int adb_register(int default_id,int handler_id,struct adb_ids *ids,
57 		 void (*handler)(unsigned char *, int, int));
58 int adb_unregister(int index);
59 void adb_poll(void);
60 void adb_input(unsigned char *, int, int);
61 int adb_reset_bus(void);
62 
63 int adb_try_handler_change(int address, int new_id);
64 int adb_get_infos(int address, int *original_address, int *handler_id);
65 
66 #endif /* __ADB_H */
67