xref: /openbmc/linux/include/linux/adb.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * Definitions for ADB (Apple Desktop Bus) support.
41da177e4SLinus Torvalds  */
51da177e4SLinus Torvalds #ifndef __ADB_H
61da177e4SLinus Torvalds #define __ADB_H
71da177e4SLinus Torvalds 
8607ca46eSDavid Howells #include <uapi/linux/adb.h>
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds struct adb_request {
121da177e4SLinus Torvalds 	unsigned char data[32];
131da177e4SLinus Torvalds 	int nbytes;
141da177e4SLinus Torvalds 	unsigned char reply[32];
151da177e4SLinus Torvalds 	int reply_len;
161da177e4SLinus Torvalds 	unsigned char reply_expected;
171da177e4SLinus Torvalds 	unsigned char sent;
181da177e4SLinus Torvalds 	unsigned char complete;
191da177e4SLinus Torvalds 	void (*done)(struct adb_request *);
201da177e4SLinus Torvalds 	void *arg;
211da177e4SLinus Torvalds 	struct adb_request *next;
221da177e4SLinus Torvalds };
231da177e4SLinus Torvalds 
241da177e4SLinus Torvalds struct adb_ids {
251da177e4SLinus Torvalds 	int nids;
261da177e4SLinus Torvalds 	unsigned char id[16];
271da177e4SLinus Torvalds };
281da177e4SLinus Torvalds 
291da177e4SLinus Torvalds /* Structure which encapsulates a low-level ADB driver */
301da177e4SLinus Torvalds 
311da177e4SLinus Torvalds struct adb_driver {
321da177e4SLinus Torvalds 	char name[16];
331da177e4SLinus Torvalds 	int (*probe)(void);
341da177e4SLinus Torvalds 	int (*init)(void);
351da177e4SLinus Torvalds 	int (*send_request)(struct adb_request *req, int sync);
361da177e4SLinus Torvalds 	int (*autopoll)(int devs);
371da177e4SLinus Torvalds 	void (*poll)(void);
381da177e4SLinus Torvalds 	int (*reset_bus)(void);
391da177e4SLinus Torvalds };
401da177e4SLinus Torvalds 
411da177e4SLinus Torvalds /* Values for adb_request flags */
421da177e4SLinus Torvalds #define ADBREQ_REPLY	1	/* expect reply */
431da177e4SLinus Torvalds #define ADBREQ_SYNC	2	/* poll until done */
441da177e4SLinus Torvalds #define ADBREQ_NOSEND	4	/* build the request, but don't send it */
451da177e4SLinus Torvalds 
461da177e4SLinus Torvalds /* Messages sent thru the client_list notifier. You should NOT stop
471da177e4SLinus Torvalds    the operation, at least not with this version */
481da177e4SLinus Torvalds enum adb_message {
491da177e4SLinus Torvalds     ADB_MSG_POWERDOWN,	/* Currently called before sleep only */
501da177e4SLinus Torvalds     ADB_MSG_PRE_RESET,	/* Called before resetting the bus */
511da177e4SLinus Torvalds     ADB_MSG_POST_RESET	/* Called after resetting the bus (re-do init & register) */
521da177e4SLinus Torvalds };
53e041c683SAlan Stern extern struct blocking_notifier_head adb_client_list;
541da177e4SLinus Torvalds 
551da177e4SLinus Torvalds int adb_request(struct adb_request *req, void (*done)(struct adb_request *),
561da177e4SLinus Torvalds 		int flags, int nbytes, ...);
571da177e4SLinus Torvalds int adb_register(int default_id,int handler_id,struct adb_ids *ids,
587d12e780SDavid Howells 		 void (*handler)(unsigned char *, int, int));
591da177e4SLinus Torvalds int adb_unregister(int index);
601da177e4SLinus Torvalds void adb_poll(void);
617d12e780SDavid Howells void adb_input(unsigned char *, int, int);
621da177e4SLinus Torvalds int adb_reset_bus(void);
631da177e4SLinus Torvalds 
641da177e4SLinus Torvalds int adb_try_handler_change(int address, int new_id);
651da177e4SLinus Torvalds int adb_get_infos(int address, int *original_address, int *handler_id);
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds #endif /* __ADB_H */
68