hvsi.h (2850B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _HVSI_H 3#define _HVSI_H 4 5#define VS_DATA_PACKET_HEADER 0xff 6#define VS_CONTROL_PACKET_HEADER 0xfe 7#define VS_QUERY_PACKET_HEADER 0xfd 8#define VS_QUERY_RESPONSE_PACKET_HEADER 0xfc 9 10/* control verbs */ 11#define VSV_SET_MODEM_CTL 1 /* to service processor only */ 12#define VSV_MODEM_CTL_UPDATE 2 /* from service processor only */ 13#define VSV_CLOSE_PROTOCOL 3 14 15/* query verbs */ 16#define VSV_SEND_VERSION_NUMBER 1 17#define VSV_SEND_MODEM_CTL_STATUS 2 18 19/* yes, these masks are not consecutive. */ 20#define HVSI_TSDTR 0x01 21#define HVSI_TSCD 0x20 22 23#define HVSI_MAX_OUTGOING_DATA 12 24#define HVSI_VERSION 1 25 26struct hvsi_header { 27 uint8_t type; 28 uint8_t len; 29 __be16 seqno; 30} __attribute__((packed)); 31 32struct hvsi_data { 33 struct hvsi_header hdr; 34 uint8_t data[HVSI_MAX_OUTGOING_DATA]; 35} __attribute__((packed)); 36 37struct hvsi_control { 38 struct hvsi_header hdr; 39 __be16 verb; 40 /* optional depending on verb: */ 41 __be32 word; 42 __be32 mask; 43} __attribute__((packed)); 44 45struct hvsi_query { 46 struct hvsi_header hdr; 47 __be16 verb; 48} __attribute__((packed)); 49 50struct hvsi_query_response { 51 struct hvsi_header hdr; 52 __be16 verb; 53 __be16 query_seqno; 54 union { 55 uint8_t version; 56 __be32 mctrl_word; 57 } u; 58} __attribute__((packed)); 59 60/* hvsi lib struct definitions */ 61#define HVSI_INBUF_SIZE 255 62struct tty_struct; 63struct hvsi_priv { 64 unsigned int inbuf_len; /* data in input buffer */ 65 unsigned char inbuf[HVSI_INBUF_SIZE]; 66 unsigned int inbuf_cur; /* Cursor in input buffer */ 67 unsigned int inbuf_pktlen; /* packet length from cursor */ 68 atomic_t seqno; /* packet sequence number */ 69 unsigned int opened:1; /* driver opened */ 70 unsigned int established:1; /* protocol established */ 71 unsigned int is_console:1; /* used as a kernel console device */ 72 unsigned int mctrl_update:1; /* modem control updated */ 73 unsigned short mctrl; /* modem control */ 74 struct tty_struct *tty; /* tty structure */ 75 int (*get_chars)(uint32_t termno, char *buf, int count); 76 int (*put_chars)(uint32_t termno, const char *buf, int count); 77 uint32_t termno; 78}; 79 80/* hvsi lib functions */ 81struct hvc_struct; 82extern void hvsilib_init(struct hvsi_priv *pv, 83 int (*get_chars)(uint32_t termno, char *buf, int count), 84 int (*put_chars)(uint32_t termno, const char *buf, 85 int count), 86 int termno, int is_console); 87extern int hvsilib_open(struct hvsi_priv *pv, struct hvc_struct *hp); 88extern void hvsilib_close(struct hvsi_priv *pv, struct hvc_struct *hp); 89extern int hvsilib_read_mctrl(struct hvsi_priv *pv); 90extern int hvsilib_write_mctrl(struct hvsi_priv *pv, int dtr); 91extern void hvsilib_establish(struct hvsi_priv *pv); 92extern int hvsilib_get_chars(struct hvsi_priv *pv, char *buf, int count); 93extern int hvsilib_put_chars(struct hvsi_priv *pv, const char *buf, int count); 94 95#endif /* _HVSI_H */