Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
hvsi.h
Go to the documentation of this file.
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 {
29 } __attribute__((packed));
30 
31 struct hvsi_data {
32  struct hvsi_header hdr;
34 } __attribute__((packed));
35 
36 struct hvsi_control {
37  struct hvsi_header hdr;
39  /* optional depending on verb: */
42 } __attribute__((packed));
43 
44 struct hvsi_query {
45  struct hvsi_header hdr;
47 } __attribute__((packed));
48 
50  struct hvsi_header hdr;
53  union {
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);
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 */