xref: /linux/arch/powerpc/include/asm/hvsi.h (revision 725e789f228641fdfafcd65458f0ac78b87acc5a)
1*725e789fSBenjamin Herrenschmidt #ifndef _HVSI_H
2*725e789fSBenjamin Herrenschmidt #define _HVSI_H
3*725e789fSBenjamin Herrenschmidt 
4*725e789fSBenjamin Herrenschmidt #define VS_DATA_PACKET_HEADER           0xff
5*725e789fSBenjamin Herrenschmidt #define VS_CONTROL_PACKET_HEADER        0xfe
6*725e789fSBenjamin Herrenschmidt #define VS_QUERY_PACKET_HEADER          0xfd
7*725e789fSBenjamin Herrenschmidt #define VS_QUERY_RESPONSE_PACKET_HEADER 0xfc
8*725e789fSBenjamin Herrenschmidt 
9*725e789fSBenjamin Herrenschmidt /* control verbs */
10*725e789fSBenjamin Herrenschmidt #define VSV_SET_MODEM_CTL    1 /* to service processor only */
11*725e789fSBenjamin Herrenschmidt #define VSV_MODEM_CTL_UPDATE 2 /* from service processor only */
12*725e789fSBenjamin Herrenschmidt #define VSV_CLOSE_PROTOCOL   3
13*725e789fSBenjamin Herrenschmidt 
14*725e789fSBenjamin Herrenschmidt /* query verbs */
15*725e789fSBenjamin Herrenschmidt #define VSV_SEND_VERSION_NUMBER 1
16*725e789fSBenjamin Herrenschmidt #define VSV_SEND_MODEM_CTL_STATUS 2
17*725e789fSBenjamin Herrenschmidt 
18*725e789fSBenjamin Herrenschmidt /* yes, these masks are not consecutive. */
19*725e789fSBenjamin Herrenschmidt #define HVSI_TSDTR 0x01
20*725e789fSBenjamin Herrenschmidt #define HVSI_TSCD  0x20
21*725e789fSBenjamin Herrenschmidt 
22*725e789fSBenjamin Herrenschmidt #define HVSI_MAX_OUTGOING_DATA 12
23*725e789fSBenjamin Herrenschmidt #define HVSI_VERSION 1
24*725e789fSBenjamin Herrenschmidt 
25*725e789fSBenjamin Herrenschmidt struct hvsi_header {
26*725e789fSBenjamin Herrenschmidt 	uint8_t  type;
27*725e789fSBenjamin Herrenschmidt 	uint8_t  len;
28*725e789fSBenjamin Herrenschmidt 	uint16_t seqno;
29*725e789fSBenjamin Herrenschmidt } __attribute__((packed));
30*725e789fSBenjamin Herrenschmidt 
31*725e789fSBenjamin Herrenschmidt struct hvsi_data {
32*725e789fSBenjamin Herrenschmidt 	uint8_t  type;
33*725e789fSBenjamin Herrenschmidt 	uint8_t  len;
34*725e789fSBenjamin Herrenschmidt 	uint16_t seqno;
35*725e789fSBenjamin Herrenschmidt 	uint8_t  data[HVSI_MAX_OUTGOING_DATA];
36*725e789fSBenjamin Herrenschmidt } __attribute__((packed));
37*725e789fSBenjamin Herrenschmidt 
38*725e789fSBenjamin Herrenschmidt struct hvsi_control {
39*725e789fSBenjamin Herrenschmidt 	uint8_t  type;
40*725e789fSBenjamin Herrenschmidt 	uint8_t  len;
41*725e789fSBenjamin Herrenschmidt 	uint16_t seqno;
42*725e789fSBenjamin Herrenschmidt 	uint16_t verb;
43*725e789fSBenjamin Herrenschmidt 	/* optional depending on verb: */
44*725e789fSBenjamin Herrenschmidt 	uint32_t word;
45*725e789fSBenjamin Herrenschmidt 	uint32_t mask;
46*725e789fSBenjamin Herrenschmidt } __attribute__((packed));
47*725e789fSBenjamin Herrenschmidt 
48*725e789fSBenjamin Herrenschmidt struct hvsi_query {
49*725e789fSBenjamin Herrenschmidt 	uint8_t  type;
50*725e789fSBenjamin Herrenschmidt 	uint8_t  len;
51*725e789fSBenjamin Herrenschmidt 	uint16_t seqno;
52*725e789fSBenjamin Herrenschmidt 	uint16_t verb;
53*725e789fSBenjamin Herrenschmidt } __attribute__((packed));
54*725e789fSBenjamin Herrenschmidt 
55*725e789fSBenjamin Herrenschmidt struct hvsi_query_response {
56*725e789fSBenjamin Herrenschmidt 	uint8_t  type;
57*725e789fSBenjamin Herrenschmidt 	uint8_t  len;
58*725e789fSBenjamin Herrenschmidt 	uint16_t seqno;
59*725e789fSBenjamin Herrenschmidt 	uint16_t verb;
60*725e789fSBenjamin Herrenschmidt 	uint16_t query_seqno;
61*725e789fSBenjamin Herrenschmidt 	union {
62*725e789fSBenjamin Herrenschmidt 		uint8_t  version;
63*725e789fSBenjamin Herrenschmidt 		uint32_t mctrl_word;
64*725e789fSBenjamin Herrenschmidt 	} u;
65*725e789fSBenjamin Herrenschmidt } __attribute__((packed));
66*725e789fSBenjamin Herrenschmidt 
67*725e789fSBenjamin Herrenschmidt 
68*725e789fSBenjamin Herrenschmidt #endif /* _HVSI_H */
69