diff options
Diffstat (limited to 'include/linux/adb.h')
-rw-r--r-- | include/linux/adb.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/include/linux/adb.h b/include/linux/adb.h new file mode 100644 index 000000000000..e9fdc63483c7 --- /dev/null +++ b/include/linux/adb.h | |||
@@ -0,0 +1,104 @@ | |||
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 */ | ||