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 */ 95