132a47e72SYuval Mintz /* QLogic qed NIC Driver
232a47e72SYuval Mintz  * Copyright (c) 2015 QLogic Corporation
332a47e72SYuval Mintz  *
432a47e72SYuval Mintz  * This software is available under the terms of the GNU General Public License
532a47e72SYuval Mintz  * (GPL) Version 2, available from the file COPYING in the main directory of
632a47e72SYuval Mintz  * this source tree.
732a47e72SYuval Mintz  */
832a47e72SYuval Mintz 
932a47e72SYuval Mintz #ifndef _QED_VF_H
1032a47e72SYuval Mintz #define _QED_VF_H
1132a47e72SYuval Mintz 
1237bff2b9SYuval Mintz enum {
1337bff2b9SYuval Mintz 	PFVF_STATUS_WAITING,
1437bff2b9SYuval Mintz 	PFVF_STATUS_SUCCESS,
1537bff2b9SYuval Mintz 	PFVF_STATUS_FAILURE,
1637bff2b9SYuval Mintz 	PFVF_STATUS_NOT_SUPPORTED,
1737bff2b9SYuval Mintz 	PFVF_STATUS_NO_RESOURCE,
1837bff2b9SYuval Mintz 	PFVF_STATUS_FORCED,
1937bff2b9SYuval Mintz };
2037bff2b9SYuval Mintz 
2137bff2b9SYuval Mintz /* vf pf channel tlvs */
2237bff2b9SYuval Mintz /* general tlv header (used for both vf->pf request and pf->vf response) */
2337bff2b9SYuval Mintz struct channel_tlv {
2437bff2b9SYuval Mintz 	u16 type;
2537bff2b9SYuval Mintz 	u16 length;
2637bff2b9SYuval Mintz };
2737bff2b9SYuval Mintz 
2837bff2b9SYuval Mintz /* header of first vf->pf tlv carries the offset used to calculate reponse
2937bff2b9SYuval Mintz  * buffer address
3037bff2b9SYuval Mintz  */
3137bff2b9SYuval Mintz struct vfpf_first_tlv {
3237bff2b9SYuval Mintz 	struct channel_tlv tl;
3337bff2b9SYuval Mintz 	u32 padding;
3437bff2b9SYuval Mintz 	u64 reply_address;
3537bff2b9SYuval Mintz };
3637bff2b9SYuval Mintz 
3737bff2b9SYuval Mintz /* header of pf->vf tlvs, carries the status of handling the request */
3837bff2b9SYuval Mintz struct pfvf_tlv {
3937bff2b9SYuval Mintz 	struct channel_tlv tl;
4037bff2b9SYuval Mintz 	u8 status;
4137bff2b9SYuval Mintz 	u8 padding[3];
4237bff2b9SYuval Mintz };
4337bff2b9SYuval Mintz 
4437bff2b9SYuval Mintz /* response tlv used for most tlvs */
4537bff2b9SYuval Mintz struct pfvf_def_resp_tlv {
4637bff2b9SYuval Mintz 	struct pfvf_tlv hdr;
4737bff2b9SYuval Mintz };
4837bff2b9SYuval Mintz 
4937bff2b9SYuval Mintz /* used to terminate and pad a tlv list */
5037bff2b9SYuval Mintz struct channel_list_end_tlv {
5137bff2b9SYuval Mintz 	struct channel_tlv tl;
5237bff2b9SYuval Mintz 	u8 padding[4];
5337bff2b9SYuval Mintz };
5437bff2b9SYuval Mintz 
5532a47e72SYuval Mintz #define TLV_BUFFER_SIZE                 1024
5632a47e72SYuval Mintz struct tlv_buffer_size {
5732a47e72SYuval Mintz 	u8 tlv_buffer[TLV_BUFFER_SIZE];
5832a47e72SYuval Mintz };
5932a47e72SYuval Mintz 
6032a47e72SYuval Mintz union vfpf_tlvs {
6137bff2b9SYuval Mintz 	struct vfpf_first_tlv first_tlv;
6237bff2b9SYuval Mintz 	struct channel_list_end_tlv list_end;
6332a47e72SYuval Mintz 	struct tlv_buffer_size tlv_buf_size;
6432a47e72SYuval Mintz };
6532a47e72SYuval Mintz 
6632a47e72SYuval Mintz union pfvf_tlvs {
6737bff2b9SYuval Mintz 	struct pfvf_def_resp_tlv default_resp;
6832a47e72SYuval Mintz 	struct tlv_buffer_size tlv_buf_size;
6932a47e72SYuval Mintz };
7032a47e72SYuval Mintz 
7132a47e72SYuval Mintz struct qed_bulletin_content {
7232a47e72SYuval Mintz 	/* crc of structure to ensure is not in mid-update */
7332a47e72SYuval Mintz 	u32 crc;
7432a47e72SYuval Mintz 
7532a47e72SYuval Mintz 	u32 version;
7632a47e72SYuval Mintz 
7732a47e72SYuval Mintz 	/* bitmap indicating which fields hold valid values */
7832a47e72SYuval Mintz 	u64 valid_bitmap;
7932a47e72SYuval Mintz };
8032a47e72SYuval Mintz 
8132a47e72SYuval Mintz struct qed_bulletin {
8232a47e72SYuval Mintz 	dma_addr_t phys;
8332a47e72SYuval Mintz 	struct qed_bulletin_content *p_virt;
8432a47e72SYuval Mintz 	u32 size;
8532a47e72SYuval Mintz };
8632a47e72SYuval Mintz 
8737bff2b9SYuval Mintz enum {
8837bff2b9SYuval Mintz 	CHANNEL_TLV_NONE,	/* ends tlv sequence */
8937bff2b9SYuval Mintz 	CHANNEL_TLV_LIST_END,
9037bff2b9SYuval Mintz 	CHANNEL_TLV_MAX
9137bff2b9SYuval Mintz };
9237bff2b9SYuval Mintz 
9332a47e72SYuval Mintz #endif
94