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