mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.8 KiB
95 lines
2.8 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#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; |
|
__be16 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; |
|
__be16 verb; |
|
/* optional depending on verb: */ |
|
__be32 word; |
|
__be32 mask; |
|
} __attribute__((packed)); |
|
|
|
struct hvsi_query { |
|
struct hvsi_header hdr; |
|
__be16 verb; |
|
} __attribute__((packed)); |
|
|
|
struct hvsi_query_response { |
|
struct hvsi_header hdr; |
|
__be16 verb; |
|
__be16 query_seqno; |
|
union { |
|
uint8_t version; |
|
__be32 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 length 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 */
|
|
|