Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[pandora-kernel.git] / arch / powerpc / include / asm / hvsi.h
1 #ifndef _HVSI_H
2 #define _HVSI_H
3
4 #define VS_DATA_PACKET_HEADER           0xff
5 #define VS_CONTROL_PACKET_HEADER        0xfe
6 #define VS_QUERY_PACKET_HEADER          0xfd
7 #define VS_QUERY_RESPONSE_PACKET_HEADER 0xfc
8
9 /* control verbs */
10 #define VSV_SET_MODEM_CTL    1 /* to service processor only */
11 #define VSV_MODEM_CTL_UPDATE 2 /* from service processor only */
12 #define VSV_CLOSE_PROTOCOL   3
13
14 /* query verbs */
15 #define VSV_SEND_VERSION_NUMBER 1
16 #define VSV_SEND_MODEM_CTL_STATUS 2
17
18 /* yes, these masks are not consecutive. */
19 #define HVSI_TSDTR 0x01
20 #define HVSI_TSCD  0x20
21
22 #define HVSI_MAX_OUTGOING_DATA 12
23 #define HVSI_VERSION 1
24
25 struct hvsi_header {
26         uint8_t  type;
27         uint8_t  len;
28         uint16_t seqno;
29 } __attribute__((packed));
30
31 struct hvsi_data {
32         struct hvsi_header hdr;
33         uint8_t  data[HVSI_MAX_OUTGOING_DATA];
34 } __attribute__((packed));
35
36 struct hvsi_control {
37         struct hvsi_header hdr;
38         uint16_t verb;
39         /* optional depending on verb: */
40         uint32_t word;
41         uint32_t mask;
42 } __attribute__((packed));
43
44 struct hvsi_query {
45         struct hvsi_header hdr;
46         uint16_t verb;
47 } __attribute__((packed));
48
49 struct hvsi_query_response {
50         struct hvsi_header hdr;
51         uint16_t verb;
52         uint16_t query_seqno;
53         union {
54                 uint8_t  version;
55                 uint32_t mctrl_word;
56         } u;
57 } __attribute__((packed));
58
59 /* hvsi lib struct definitions */
60 #define HVSI_INBUF_SIZE         255
61 struct tty_struct;
62 struct hvsi_priv {
63         unsigned int    inbuf_len;      /* data in input buffer */
64         unsigned char   inbuf[HVSI_INBUF_SIZE];
65         unsigned int    inbuf_cur;      /* Cursor in input buffer */
66         unsigned int    inbuf_pktlen;   /* packet lenght from cursor */
67         atomic_t        seqno;          /* packet sequence number */
68         unsigned int    opened:1;       /* driver opened */
69         unsigned int    established:1;  /* protocol established */
70         unsigned int    is_console:1;   /* used as a kernel console device */
71         unsigned int    mctrl_update:1; /* modem control updated */
72         unsigned short  mctrl;          /* modem control */
73         struct tty_struct *tty;         /* tty structure */
74         int (*get_chars)(uint32_t termno, char *buf, int count);
75         int (*put_chars)(uint32_t termno, const char *buf, int count);
76         uint32_t        termno;
77 };
78
79 /* hvsi lib functions */
80 struct hvc_struct;
81 extern void hvsilib_init(struct hvsi_priv *pv,
82                          int (*get_chars)(uint32_t termno, char *buf, int count),
83                          int (*put_chars)(uint32_t termno, const char *buf,
84                                           int count),
85                          int termno, int is_console);
86 extern int hvsilib_open(struct hvsi_priv *pv, struct hvc_struct *hp);
87 extern void hvsilib_close(struct hvsi_priv *pv, struct hvc_struct *hp);
88 extern int hvsilib_read_mctrl(struct hvsi_priv *pv);
89 extern int hvsilib_write_mctrl(struct hvsi_priv *pv, int dtr);
90 extern void hvsilib_establish(struct hvsi_priv *pv);
91 extern int hvsilib_get_chars(struct hvsi_priv *pv, char *buf, int count);
92 extern int hvsilib_put_chars(struct hvsi_priv *pv, const char *buf, int count);
93
94 #endif /* _HVSI_H */