#ifndef _HVSI_H #define _HVSI_H #define VS_DATA_PACKET_HEADER 0xff #define VS_CONTROL_PACKET_HEADER 0xfe #define VS_QUERY_PACKET_HEADER 0xfd #define VS_QUERY_RESPONSE_PACKET_HEADER 0xfc /* control verbs */ #define VSV_SET_MODEM_CTL 1 /* to service processor only */ #define VSV_MODEM_CTL_UPDATE 2 /* from service processor only */ #define VSV_CLOSE_PROTOCOL 3 /* query verbs */ #define VSV_SEND_VERSION_NUMBER 1 #define VSV_SEND_MODEM_CTL_STATUS 2 /* yes, these masks are not consecutive. */ #define HVSI_TSDTR 0x01 #define HVSI_TSCD 0x20 #define HVSI_MAX_OUTGOING_DATA 12 #define HVSI_VERSION 1 struct hvsi_header { uint8_t type; uint8_t len; uint16_t seqno; } __attribute__((packed)); struct hvsi_data { struct hvsi_header hdr; uint8_t data[HVSI_MAX_OUTGOING_DATA]; } __attribute__((packed)); struct hvsi_control { struct hvsi_header hdr; uint16_t verb; /* optional depending on verb: */ uint32_t word; uint32_t mask; } __attribute__((packed)); struct hvsi_query { struct hvsi_header hdr; uint16_t verb; } __attribute__((packed)); struct hvsi_query_response { struct hvsi_header hdr; uint16_t verb; uint16_t query_seqno; union { uint8_t version; uint32_t mctrl_word; } u; } __attribute__((packed)); /* hvsi lib struct definitions */ #define HVSI_INBUF_SIZE 255 struct tty_struct; struct hvsi_priv { unsigned int inbuf_len; /* data in input buffer */ unsigned char inbuf[HVSI_INBUF_SIZE]; unsigned int inbuf_cur; /* Cursor in input buffer */ unsigned int inbuf_pktlen; /* packet lenght from cursor */ atomic_t seqno; /* packet sequence number */ unsigned int opened:1; /* driver opened */ unsigned int established:1; /* protocol established */ unsigned int is_console:1; /* used as a kernel console device */ unsigned int mctrl_update:1; /* modem control updated */ unsigned short mctrl; /* modem control */ struct tty_struct *tty; /* tty structure */ int (*get_chars)(uint32_t termno, char *buf, int count); int (*put_chars)(uint32_t termno, const char *buf, int count); uint32_t termno; }; /* hvsi lib functions */ struct hvc_struct; extern void hvsilib_init(struct hvsi_priv *pv, int (*get_chars)(uint32_t termno, char *buf, int count), int (*put_chars)(uint32_t termno, const char *buf, int count), int termno, int is_console); extern int hvsilib_open(struct hvsi_priv *pv, struct hvc_struct *hp); extern void hvsilib_close(struct hvsi_priv *pv, struct hvc_struct *hp); extern int hvsilib_read_mctrl(struct hvsi_priv *pv); extern int hvsilib_write_mctrl(struct hvsi_priv *pv, int dtr); extern void hvsilib_establish(struct hvsi_priv *pv); extern int hvsilib_get_chars(struct hvsi_priv *pv, char *buf, int count); extern int hvsilib_put_chars(struct hvsi_priv *pv, const char *buf, int count); #endif /* _HVSI_H */