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