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