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 25struct hvsi_header { 26 uint8_t type; 27 uint8_t len; 28 __be16 seqno; 29} __attribute__((packed)); 30 31struct hvsi_data { 32 struct hvsi_header hdr; 33 uint8_t data[HVSI_MAX_OUTGOING_DATA]; 34} __attribute__((packed)); 35 36struct hvsi_control { 37 struct hvsi_header hdr; 38 __be16 verb; 39 /* optional depending on verb: */ 40 __be32 word; 41 __be32 mask; 42} __attribute__((packed)); 43 44struct hvsi_query { 45 struct hvsi_header hdr; 46 __be16 verb; 47} __attribute__((packed)); 48 49struct hvsi_query_response { 50 struct hvsi_header hdr; 51 __be16 verb; 52 __be16 query_seqno; 53 union { 54 uint8_t version; 55 __be32 mctrl_word; 56 } u; 57} __attribute__((packed)); 58 59/* hvsi lib struct definitions */ 60#define HVSI_INBUF_SIZE 255 61struct tty_struct; 62struct 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 */ 80struct hvc_struct; 81extern 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); 86extern int hvsilib_open(struct hvsi_priv *pv, struct hvc_struct *hp); 87extern void hvsilib_close(struct hvsi_priv *pv, struct hvc_struct *hp); 88extern int hvsilib_read_mctrl(struct hvsi_priv *pv); 89extern int hvsilib_write_mctrl(struct hvsi_priv *pv, int dtr); 90extern void hvsilib_establish(struct hvsi_priv *pv); 91extern int hvsilib_get_chars(struct hvsi_priv *pv, char *buf, int count); 92extern int hvsilib_put_chars(struct hvsi_priv *pv, const char *buf, int count); 93 94#endif /* _HVSI_H */ 95