#ifndef _DEV_PV_IF_HVNREG_H_
#define _DEV_PV_IF_HVNREG_H_
#define HVN_NVS_PROTO_VERSION_1 0x00002
#define HVN_NVS_PROTO_VERSION_2 0x30002
#define HVN_NVS_PROTO_VERSION_4 0x40000
#define HVN_NVS_PROTO_VERSION_5 0x50000
#define HVN_NVS_RXBUF_SIG 0x2409
#define HVN_NVS_CHIM_SIG 0x1984
#define HVN_NVS_CHIM_IDX_INVALID 0xffffffff
#define HVN_NVS_RNDIS_MTYPE_DATA 0
#define HVN_NVS_RNDIS_MTYPE_CTRL 1
#define HVN_NVS_STATUS_OK 1
#define HVN_NVS_STATUS_FAILED 2
#define HVN_NVS_TYPE_INIT 1
#define HVN_NVS_TYPE_INIT_RESP 2
#define HVN_NVS_TYPE_NDIS_INIT 100
#define HVN_NVS_TYPE_RXBUF_CONN 101
#define HVN_NVS_TYPE_RXBUF_CONNRESP 102
#define HVN_NVS_TYPE_RXBUF_DISCONN 103
#define HVN_NVS_TYPE_CHIM_CONN 104
#define HVN_NVS_TYPE_CHIM_CONNRESP 105
#define HVN_NVS_TYPE_CHIM_DISCONN 106
#define HVN_NVS_TYPE_RNDIS 107
#define HVN_NVS_TYPE_RNDIS_ACK 108
#define HVN_NVS_TYPE_NDIS_CONF 125
#define HVN_NVS_TYPE_VFASSOC_NOTE 128
#define HVN_NVS_TYPE_SET_DATAPATH 129
#define HVN_NVS_TYPE_SUBCH_REQ 133
#define HVN_NVS_TYPE_SUBCH_RESP 133
#define HVN_NVS_TYPE_TXTBL_NOTE 134
#define HVN_NVS_REQSIZE_MIN 32
struct hvn_nvs_hdr {
uint32_t nvs_type;
} __packed;
struct hvn_nvs_init {
uint32_t nvs_type;
uint32_t nvs_ver_min;
uint32_t nvs_ver_max;
uint8_t nvs_rsvd[20];
} __packed;
struct hvn_nvs_init_resp {
uint32_t nvs_type;
uint32_t nvs_ver;
uint32_t nvs_rsvd;
uint32_t nvs_status;
} __packed;
struct hvn_nvs_ndis_conf {
uint32_t nvs_type;
uint32_t nvs_mtu;
uint32_t nvs_rsvd;
uint64_t nvs_caps;
uint8_t nvs_rsvd1[12];
} __packed;
#define HVN_NVS_NDIS_CONF_SRIOV 0x0004
#define HVN_NVS_NDIS_CONF_VLAN 0x0008
struct hvn_nvs_ndis_init {
uint32_t nvs_type;
uint32_t nvs_ndis_major;
uint32_t nvs_ndis_minor;
uint8_t nvs_rsvd[20];
} __packed;
struct hvn_nvs_rxbuf_conn {
uint32_t nvs_type;
uint32_t nvs_gpadl;
uint16_t nvs_sig;
uint8_t nvs_rsvd[22];
} __packed;
struct hvn_nvs_rxbuf_sect {
uint32_t nvs_start;
uint32_t nvs_slotsz;
uint32_t nvs_slotcnt;
uint32_t nvs_end;
} __packed;
struct hvn_nvs_rxbuf_conn_resp {
uint32_t nvs_type;
uint32_t nvs_status;
uint32_t nvs_nsect;
struct hvn_nvs_rxbuf_sect nvs_sect[0];
} __packed;
struct hvn_nvs_rxbuf_disconn {
uint32_t nvs_type;
uint16_t nvs_sig;
uint8_t nvs_rsvd[26];
} __packed;
struct hvn_nvs_chim_conn {
uint32_t nvs_type;
uint32_t nvs_gpadl;
uint16_t nvs_sig;
uint8_t nvs_rsvd[22];
} __packed;
struct hvn_nvs_chim_conn_resp {
uint32_t nvs_type;
uint32_t nvs_status;
uint32_t nvs_sectsz;
} __packed;
struct hvn_nvs_chim_disconn {
uint32_t nvs_type;
uint16_t nvs_sig;
uint8_t nvs_rsvd[26];
} __packed;
#define HVN_NVS_SUBCH_OP_ALLOC 1
struct hvn_nvs_subch_req {
uint32_t nvs_type;
uint32_t nvs_op;
uint32_t nvs_nsubch;
uint8_t nvs_rsvd[20];
} __packed;
struct hvn_nvs_subch_resp {
uint32_t nvs_type;
uint32_t nvs_status;
uint32_t nvs_nsubch;
} __packed;
struct hvn_nvs_rndis {
uint32_t nvs_type;
uint32_t nvs_rndis_mtype;
uint32_t nvs_chim_idx;
uint32_t nvs_chim_sz;
uint8_t nvs_rsvd[16];
} __packed;
struct hvn_nvs_rndis_ack {
uint32_t nvs_type;
uint32_t nvs_status;
uint8_t nvs_rsvd[24];
} __packed;
#endif