1/*
2 * Definitions for talking to ADB and CUDA.  The CUDA is a microcontroller
3 * which controls the ADB, system power, RTC, and various other things on
4 * later Macintoshes
5 *
6 * Copyright (C) 1996 Paul Mackerras.
7 */
8
9/* First byte sent to or received from CUDA */
10#define ADB_PACKET	0
11#define CUDA_PACKET	1
12#define ERROR_PACKET	2
13#define TIMER_PACKET	3
14#define POWER_PACKET	4
15#define MACIIC_PACKET	5
16
17/* ADB commands (2nd byte) */
18#define ADB_BUSRESET		0
19#define ADB_FLUSH(id)		(1 + ((id) << 4))
20#define ADB_WRITEREG(id, reg)	(8 + (reg) + ((id) << 4))
21#define ADB_READREG(id, reg)	(0xc + (reg) + ((id) << 4))
22
23/* ADB default device IDs (upper 4 bits of 2nd byte) */
24#define ADB_DONGLE	1	/* "software execution control" devices */
25#define ADB_KEYBOARD	2
26#define ADB_MOUSE	3
27#define ADB_TABLET	4
28#define ADB_MODEM	5
29#define ADB_MISC	7	/* maybe a monitor */
30
31/* CUDA commands (2nd byte) */
32#define CUDA_WARM_START		0
33#define CUDA_AUTOPOLL		1
34#define CUDA_GET_6805_ADDR	2
35#define CUDA_GET_TIME		3
36#define CUDA_GET_PRAM		7
37#define CUDA_SET_6805_ADDR	8
38#define CUDA_SET_TIME		9
39#define CUDA_POWERDOWN		0xa
40#define CUDA_POWERUP_TIME	0xb
41#define CUDA_SET_PRAM		0xc
42#define CUDA_MS_RESET		0xd
43#define CUDA_SEND_DFAC		0xe
44#define CUDA_RESET_SYSTEM	0x11
45#define CUDA_SET_IPL		0x12
46#define CUDA_SET_AUTO_RATE	0x14
47#define CUDA_GET_AUTO_RATE	0x16
48#define CUDA_SET_DEVICE_LIST	0x19
49#define CUDA_GET_DEVICE_LIST	0x1a
50#define CUDA_GET_SET_IIC	0x22
51
52#ifdef __KERNEL__
53
54struct adb_request {
55    unsigned char data[16];
56    int nbytes;
57    unsigned char reply[16];
58    int reply_len;
59    unsigned char reply_expected;
60    unsigned char sent;
61    unsigned char got_reply;
62    void (*done)(struct adb_request *);
63    void *arg;
64    struct adb_request *next;
65};
66
67void via_adb_init(void);
68int adb_request(struct adb_request *req,
69		 void (*done)(struct adb_request *), int nbytes, ...);
70int adb_send_request(struct adb_request *req);
71void adb_poll(void);
72int adb_register(int default_id,
73		 void (*handler)(unsigned char *, int, struct pt_regs *));
74
75#endif	/* __KERNEL */
76