Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 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 */ |