diff options
Diffstat (limited to 'include/linux/pds/pds_adminq.h')
| -rw-r--r-- | include/linux/pds/pds_adminq.h | 247 | 
1 files changed, 247 insertions, 0 deletions
| diff --git a/include/linux/pds/pds_adminq.h b/include/linux/pds/pds_adminq.h index 98a60ce87b92..bcba7fda3cc9 100644 --- a/include/linux/pds/pds_adminq.h +++ b/include/linux/pds/pds_adminq.h @@ -222,6 +222,27 @@ enum pds_core_lif_type {  	PDS_CORE_LIF_TYPE_DEFAULT = 0,  }; +#define PDS_CORE_IFNAMSIZ		16 + +/** + * enum pds_core_logical_qtype - Logical Queue Types + * @PDS_CORE_QTYPE_ADMINQ:    Administrative Queue + * @PDS_CORE_QTYPE_NOTIFYQ:   Notify Queue + * @PDS_CORE_QTYPE_RXQ:       Receive Queue + * @PDS_CORE_QTYPE_TXQ:       Transmit Queue + * @PDS_CORE_QTYPE_EQ:        Event Queue + * @PDS_CORE_QTYPE_MAX:       Max queue type supported + */ +enum pds_core_logical_qtype { +	PDS_CORE_QTYPE_ADMINQ  = 0, +	PDS_CORE_QTYPE_NOTIFYQ = 1, +	PDS_CORE_QTYPE_RXQ     = 2, +	PDS_CORE_QTYPE_TXQ     = 3, +	PDS_CORE_QTYPE_EQ      = 4, + +	PDS_CORE_QTYPE_MAX     = 16   /* don't change - used in struct size */ +}; +  /**   * union pds_core_lif_config - LIF configuration   * @state:	    LIF state (enum pds_core_lif_state) @@ -584,6 +605,219 @@ struct pds_core_q_init_comp {  	u8     color;  }; +/* + * enum pds_vdpa_cmd_opcode - vDPA Device commands + */ +enum pds_vdpa_cmd_opcode { +	PDS_VDPA_CMD_INIT		= 48, +	PDS_VDPA_CMD_IDENT		= 49, +	PDS_VDPA_CMD_RESET		= 51, +	PDS_VDPA_CMD_VQ_RESET		= 52, +	PDS_VDPA_CMD_VQ_INIT		= 53, +	PDS_VDPA_CMD_STATUS_UPDATE	= 54, +	PDS_VDPA_CMD_SET_FEATURES	= 55, +	PDS_VDPA_CMD_SET_ATTR		= 56, +}; + +/** + * struct pds_vdpa_cmd - generic command + * @opcode:	Opcode + * @vdpa_index:	Index for vdpa subdevice + * @vf_id:	VF id + */ +struct pds_vdpa_cmd { +	u8     opcode; +	u8     vdpa_index; +	__le16 vf_id; +}; + +/** + * struct pds_vdpa_init_cmd - INIT command + * @opcode:	Opcode PDS_VDPA_CMD_INIT + * @vdpa_index: Index for vdpa subdevice + * @vf_id:	VF id + */ +struct pds_vdpa_init_cmd { +	u8     opcode; +	u8     vdpa_index; +	__le16 vf_id; +}; + +/** + * struct pds_vdpa_ident - vDPA identification data + * @hw_features:	vDPA features supported by device + * @max_vqs:		max queues available (2 queues for a single queuepair) + * @max_qlen:		log(2) of maximum number of descriptors + * @min_qlen:		log(2) of minimum number of descriptors + * + * This struct is used in a DMA block that is set up for the PDS_VDPA_CMD_IDENT + * transaction.  Set up the DMA block and send the address in the IDENT cmd + * data, the DSC will write the ident information, then we can remove the DMA + * block after reading the answer.  If the completion status is 0, then there + * is valid information, else there was an error and the data should be invalid. + */ +struct pds_vdpa_ident { +	__le64 hw_features; +	__le16 max_vqs; +	__le16 max_qlen; +	__le16 min_qlen; +}; + +/** + * struct pds_vdpa_ident_cmd - IDENT command + * @opcode:	Opcode PDS_VDPA_CMD_IDENT + * @rsvd:       Word boundary padding + * @vf_id:	VF id + * @len:	length of ident info DMA space + * @ident_pa:	address for DMA of ident info (struct pds_vdpa_ident) + *			only used for this transaction, then forgotten by DSC + */ +struct pds_vdpa_ident_cmd { +	u8     opcode; +	u8     rsvd; +	__le16 vf_id; +	__le32 len; +	__le64 ident_pa; +}; + +/** + * struct pds_vdpa_status_cmd - STATUS_UPDATE command + * @opcode:	Opcode PDS_VDPA_CMD_STATUS_UPDATE + * @vdpa_index: Index for vdpa subdevice + * @vf_id:	VF id + * @status:	new status bits + */ +struct pds_vdpa_status_cmd { +	u8     opcode; +	u8     vdpa_index; +	__le16 vf_id; +	u8     status; +}; + +/** + * enum pds_vdpa_attr - List of VDPA device attributes + * @PDS_VDPA_ATTR_MAC:          MAC address + * @PDS_VDPA_ATTR_MAX_VQ_PAIRS: Max virtqueue pairs + */ +enum pds_vdpa_attr { +	PDS_VDPA_ATTR_MAC          = 1, +	PDS_VDPA_ATTR_MAX_VQ_PAIRS = 2, +}; + +/** + * struct pds_vdpa_setattr_cmd - SET_ATTR command + * @opcode:		Opcode PDS_VDPA_CMD_SET_ATTR + * @vdpa_index:		Index for vdpa subdevice + * @vf_id:		VF id + * @attr:		attribute to be changed (enum pds_vdpa_attr) + * @pad:		Word boundary padding + * @mac:		new mac address to be assigned as vdpa device address + * @max_vq_pairs:	new limit of virtqueue pairs + */ +struct pds_vdpa_setattr_cmd { +	u8     opcode; +	u8     vdpa_index; +	__le16 vf_id; +	u8     attr; +	u8     pad[3]; +	union { +		u8 mac[6]; +		__le16 max_vq_pairs; +	} __packed; +}; + +/** + * struct pds_vdpa_vq_init_cmd - queue init command + * @opcode: Opcode PDS_VDPA_CMD_VQ_INIT + * @vdpa_index:	Index for vdpa subdevice + * @vf_id:	VF id + * @qid:	Queue id (bit0 clear = rx, bit0 set = tx, qid=N is ctrlq) + * @len:	log(2) of max descriptor count + * @desc_addr:	DMA address of descriptor area + * @avail_addr:	DMA address of available descriptors (aka driver area) + * @used_addr:	DMA address of used descriptors (aka device area) + * @intr_index:	interrupt index + * @avail_index:	initial device position in available ring + * @used_index:	initial device position in used ring + */ +struct pds_vdpa_vq_init_cmd { +	u8     opcode; +	u8     vdpa_index; +	__le16 vf_id; +	__le16 qid; +	__le16 len; +	__le64 desc_addr; +	__le64 avail_addr; +	__le64 used_addr; +	__le16 intr_index; +	__le16 avail_index; +	__le16 used_index; +}; + +/** + * struct pds_vdpa_vq_init_comp - queue init completion + * @status:	Status of the command (enum pds_core_status_code) + * @hw_qtype:	HW queue type, used in doorbell selection + * @hw_qindex:	HW queue index, used in doorbell selection + * @rsvd:	Word boundary padding + * @color:	Color bit + */ +struct pds_vdpa_vq_init_comp { +	u8     status; +	u8     hw_qtype; +	__le16 hw_qindex; +	u8     rsvd[11]; +	u8     color; +}; + +/** + * struct pds_vdpa_vq_reset_cmd - queue reset command + * @opcode:	Opcode PDS_VDPA_CMD_VQ_RESET + * @vdpa_index:	Index for vdpa subdevice + * @vf_id:	VF id + * @qid:	Queue id + */ +struct pds_vdpa_vq_reset_cmd { +	u8     opcode; +	u8     vdpa_index; +	__le16 vf_id; +	__le16 qid; +}; + +/** + * struct pds_vdpa_vq_reset_comp - queue reset completion + * @status:	Status of the command (enum pds_core_status_code) + * @rsvd0:	Word boundary padding + * @avail_index:	current device position in available ring + * @used_index:	current device position in used ring + * @rsvd:	Word boundary padding + * @color:	Color bit + */ +struct pds_vdpa_vq_reset_comp { +	u8     status; +	u8     rsvd0; +	__le16 avail_index; +	__le16 used_index; +	u8     rsvd[9]; +	u8     color; +}; + +/** + * struct pds_vdpa_set_features_cmd - set hw features + * @opcode: Opcode PDS_VDPA_CMD_SET_FEATURES + * @vdpa_index:	Index for vdpa subdevice + * @vf_id:	VF id + * @rsvd:       Word boundary padding + * @features:	Feature bit mask + */ +struct pds_vdpa_set_features_cmd { +	u8     opcode; +	u8     vdpa_index; +	__le16 vf_id; +	__le32 rsvd; +	__le64 features; +}; +  union pds_core_adminq_cmd {  	u8     opcode;  	u8     bytes[64]; @@ -600,6 +834,16 @@ union pds_core_adminq_cmd {  	struct pds_core_q_identify_cmd    q_ident;  	struct pds_core_q_init_cmd        q_init; + +	struct pds_vdpa_cmd		  vdpa; +	struct pds_vdpa_init_cmd	  vdpa_init; +	struct pds_vdpa_ident_cmd	  vdpa_ident; +	struct pds_vdpa_status_cmd	  vdpa_status; +	struct pds_vdpa_setattr_cmd	  vdpa_setattr; +	struct pds_vdpa_set_features_cmd  vdpa_set_features; +	struct pds_vdpa_vq_init_cmd	  vdpa_vq_init; +	struct pds_vdpa_vq_reset_cmd	  vdpa_vq_reset; +  };  union pds_core_adminq_comp { @@ -621,6 +865,9 @@ union pds_core_adminq_comp {  	struct pds_core_q_identify_comp   q_ident;  	struct pds_core_q_init_comp       q_init; + +	struct pds_vdpa_vq_init_comp	  vdpa_vq_init; +	struct pds_vdpa_vq_reset_comp	  vdpa_vq_reset;  };  #ifndef __CHECKER__ |