2011-06-16 15:08:12 +00:00
# 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 {
2011-06-16 15:08:24 +00:00
struct hvsi_header hdr ;
2011-06-16 15:08:12 +00:00
uint8_t data [ HVSI_MAX_OUTGOING_DATA ] ;
} __attribute__ ( ( packed ) ) ;
struct hvsi_control {
2011-06-16 15:08:24 +00:00
struct hvsi_header hdr ;
2011-06-16 15:08:12 +00:00
uint16_t verb ;
/* optional depending on verb: */
uint32_t word ;
uint32_t mask ;
} __attribute__ ( ( packed ) ) ;
struct hvsi_query {
2011-06-16 15:08:24 +00:00
struct hvsi_header hdr ;
2011-06-16 15:08:12 +00:00
uint16_t verb ;
} __attribute__ ( ( packed ) ) ;
struct hvsi_query_response {
2011-06-16 15:08:24 +00:00
struct hvsi_header hdr ;
2011-06-16 15:08:12 +00:00
uint16_t verb ;
uint16_t query_seqno ;
union {
uint8_t version ;
uint32_t mctrl_word ;
} u ;
} __attribute__ ( ( packed ) ) ;
2011-04-29 16:44:24 +10:00
/* 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 ;
2011-07-01 13:10:21 +10:00
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 ) ;
2011-06-16 15:08:12 +00:00
# endif /* _HVSI_H */