1 /* 2 * Definitions for ADB (Apple Desktop Bus) support. 3 */ 4 #ifndef __ADB_H 5 #define __ADB_H 6 7 /* ADB commands */ 8 #define ADB_BUSRESET 0 9 #define ADB_FLUSH(id) (0x01 | ((id) << 4)) 10 #define ADB_WRITEREG(id, reg) (0x08 | (reg) | ((id) << 4)) 11 #define ADB_READREG(id, reg) (0x0C | (reg) | ((id) << 4)) 12 13 /* ADB default device IDs (upper 4 bits of ADB command byte) */ 14 #define ADB_DONGLE 1 /* "software execution control" devices */ 15 #define ADB_KEYBOARD 2 16 #define ADB_MOUSE 3 17 #define ADB_TABLET 4 18 #define ADB_MODEM 5 19 #define ADB_MISC 7 /* maybe a monitor */ 20 21 #define ADB_RET_OK 0 22 #define ADB_RET_TIMEOUT 3 23 24 /* The kind of ADB request. The controller may emulate some 25 or all of those CUDA/PMU packet kinds */ 26 #define ADB_PACKET 0 27 #define CUDA_PACKET 1 28 #define ERROR_PACKET 2 29 #define TIMER_PACKET 3 30 #define POWER_PACKET 4 31 #define MACIIC_PACKET 5 32 #define PMU_PACKET 6 33 #define ADB_QUERY 7 34 35 /* ADB queries */ 36 37 /* ADB_QUERY_GETDEVINFO 38 * Query ADB slot for device presence 39 * data[2] = id, rep[0] = orig addr, rep[1] = handler_id 40 */ 41 #define ADB_QUERY_GETDEVINFO 1 42 43 #ifdef __KERNEL__ 44 45 struct adb_request { 46 unsigned char data[32]; 47 int nbytes; 48 unsigned char reply[32]; 49 int reply_len; 50 unsigned char reply_expected; 51 unsigned char sent; 52 unsigned char complete; 53 void (*done)(struct adb_request *); 54 void *arg; 55 struct adb_request *next; 56 }; 57 58 struct adb_ids { 59 int nids; 60 unsigned char id[16]; 61 }; 62 63 /* Structure which encapsulates a low-level ADB driver */ 64 65 struct adb_driver { 66 char name[16]; 67 int (*probe)(void); 68 int (*init)(void); 69 int (*send_request)(struct adb_request *req, int sync); 70 int (*autopoll)(int devs); 71 void (*poll)(void); 72 int (*reset_bus)(void); 73 }; 74 75 /* Values for adb_request flags */ 76 #define ADBREQ_REPLY 1 /* expect reply */ 77 #define ADBREQ_SYNC 2 /* poll until done */ 78 #define ADBREQ_NOSEND 4 /* build the request, but don't send it */ 79 80 /* Messages sent thru the client_list notifier. You should NOT stop 81 the operation, at least not with this version */ 82 enum adb_message { 83 ADB_MSG_POWERDOWN, /* Currently called before sleep only */ 84 ADB_MSG_PRE_RESET, /* Called before resetting the bus */ 85 ADB_MSG_POST_RESET /* Called after resetting the bus (re-do init & register) */ 86 }; 87 extern struct adb_driver *adb_controller; 88 extern struct notifier_block *adb_client_list; 89 90 int adb_request(struct adb_request *req, void (*done)(struct adb_request *), 91 int flags, int nbytes, ...); 92 int adb_register(int default_id,int handler_id,struct adb_ids *ids, 93 void (*handler)(unsigned char *, int, struct pt_regs *, int)); 94 int adb_unregister(int index); 95 void adb_poll(void); 96 void adb_input(unsigned char *, int, struct pt_regs *, int); 97 int adb_reset_bus(void); 98 99 int adb_try_handler_change(int address, int new_id); 100 int adb_get_infos(int address, int *original_address, int *handler_id); 101 102 #endif /* __KERNEL__ */ 103 104 #endif /* __ADB_H */ 105