sh: Add maple bus support for the SEGA Dreamcast.
[linux-2.6.git] / include / linux / maple.h
1 #ifndef __LINUX_MAPLE_H
2 #define __LINUX_MAPLE_H
3
4 #include <linux/device.h>
5
6 extern struct bus_type maple_bus_type;
7
8 /* Maple Bus command and response codes */
9 enum maple_code {
10        MAPLE_RESPONSE_FILEERR = -5,
11        MAPLE_RESPONSE_AGAIN = -4,      /* request should be retransmitted */
12        MAPLE_RESPONSE_BADCMD = -3,
13        MAPLE_RESPONSE_BADFUNC = -2,
14        MAPLE_RESPONSE_NONE = -1,       /* unit didn't respond at all */
15        MAPLE_COMMAND_DEVINFO = 1,
16        MAPLE_COMMAND_ALLINFO = 2,
17        MAPLE_COMMAND_RESET = 3,
18        MAPLE_COMMAND_KILL = 4,
19        MAPLE_RESPONSE_DEVINFO = 5,
20        MAPLE_RESPONSE_ALLINFO = 6,
21        MAPLE_RESPONSE_OK = 7,
22        MAPLE_RESPONSE_DATATRF = 8,
23        MAPLE_COMMAND_GETCOND = 9,
24        MAPLE_COMMAND_GETMINFO = 10,
25        MAPLE_COMMAND_BREAD = 11,
26        MAPLE_COMMAND_BWRITE = 12,
27        MAPLE_COMMAND_SETCOND = 14
28 };
29
30 struct mapleq {
31        struct list_head list;
32        struct maple_device *dev;
33        void *sendbuf, *recvbuf, *recvbufdcsp;
34        unsigned char length;
35        enum maple_code command;
36 };
37
38 struct maple_devinfo {
39        unsigned long function;
40        unsigned long function_data[3];
41        unsigned char area_code;
42        unsigned char connector_directon;
43        char product_name[31];
44        char product_licence[61];
45        unsigned short standby_power;
46        unsigned short max_power;
47 };
48
49 struct maple_device {
50        struct maple_driver *driver;
51        struct mapleq *mq;
52        void *private_data;
53        void (*callback) (struct mapleq * mq);
54        unsigned long when, interval, function;
55        struct maple_devinfo devinfo;
56        unsigned char port, unit;
57        char product_name[32];
58        char product_licence[64];
59        int registered;
60        struct device dev;
61 };
62
63 struct maple_driver {
64        unsigned long function;
65        int (*connect) (struct maple_device * dev);
66        void (*disconnect) (struct maple_device * dev);
67        struct device_driver drv;
68 };
69
70 void maple_getcond_callback(struct maple_device *dev,
71                            void (*callback) (struct mapleq * mq),
72                            unsigned long interval,
73                            unsigned long function);
74 int maple_driver_register(struct device_driver *drv);
75 void maple_add_packet(struct mapleq *mq);
76
77 #define to_maple_dev(n) container_of(n, struct maple_device, dev)
78 #define to_maple_driver(n) container_of(n, struct maple_driver, drv)
79
80 #endif /* __LINUX_MAPLE_H */