189214fe9SHaiyue Wang /* SPDX-License-Identifier: BSD-3-Clause 2*7815caa6SQi Zhang * Copyright(c) 2001-2021 Intel Corporation 389214fe9SHaiyue Wang */ 489214fe9SHaiyue Wang 589214fe9SHaiyue Wang #ifndef _IAVF_ADMINQ_H_ 689214fe9SHaiyue Wang #define _IAVF_ADMINQ_H_ 789214fe9SHaiyue Wang 889214fe9SHaiyue Wang #include "iavf_osdep.h" 989214fe9SHaiyue Wang #include "iavf_status.h" 1089214fe9SHaiyue Wang #include "iavf_adminq_cmd.h" 1189214fe9SHaiyue Wang 1289214fe9SHaiyue Wang #define IAVF_ADMINQ_DESC(R, i) \ 1389214fe9SHaiyue Wang (&(((struct iavf_aq_desc *)((R).desc_buf.va))[i])) 1489214fe9SHaiyue Wang 1589214fe9SHaiyue Wang #define IAVF_ADMINQ_DESC_ALIGNMENT 4096 1689214fe9SHaiyue Wang 1789214fe9SHaiyue Wang struct iavf_adminq_ring { 1889214fe9SHaiyue Wang struct iavf_virt_mem dma_head; /* space for dma structures */ 1989214fe9SHaiyue Wang struct iavf_dma_mem desc_buf; /* descriptor ring memory */ 2089214fe9SHaiyue Wang struct iavf_virt_mem cmd_buf; /* command buffer memory */ 2189214fe9SHaiyue Wang 2289214fe9SHaiyue Wang union { 2389214fe9SHaiyue Wang struct iavf_dma_mem *asq_bi; 2489214fe9SHaiyue Wang struct iavf_dma_mem *arq_bi; 2589214fe9SHaiyue Wang } r; 2689214fe9SHaiyue Wang 2789214fe9SHaiyue Wang u16 count; /* Number of descriptors */ 2889214fe9SHaiyue Wang u16 rx_buf_len; /* Admin Receive Queue buffer length */ 2989214fe9SHaiyue Wang 3089214fe9SHaiyue Wang /* used for interrupt processing */ 3189214fe9SHaiyue Wang u16 next_to_use; 3289214fe9SHaiyue Wang u16 next_to_clean; 3389214fe9SHaiyue Wang 3489214fe9SHaiyue Wang /* used for queue tracking */ 3589214fe9SHaiyue Wang u32 head; 3689214fe9SHaiyue Wang u32 tail; 3789214fe9SHaiyue Wang u32 len; 3889214fe9SHaiyue Wang u32 bah; 3989214fe9SHaiyue Wang u32 bal; 4089214fe9SHaiyue Wang }; 4189214fe9SHaiyue Wang 4289214fe9SHaiyue Wang /* ASQ transaction details */ 4389214fe9SHaiyue Wang struct iavf_asq_cmd_details { 4489214fe9SHaiyue Wang void *callback; /* cast from type IAVF_ADMINQ_CALLBACK */ 4589214fe9SHaiyue Wang u64 cookie; 4689214fe9SHaiyue Wang u16 flags_ena; 4789214fe9SHaiyue Wang u16 flags_dis; 4889214fe9SHaiyue Wang bool async; 4989214fe9SHaiyue Wang bool postpone; 5089214fe9SHaiyue Wang struct iavf_aq_desc *wb_desc; 5189214fe9SHaiyue Wang }; 5289214fe9SHaiyue Wang 5389214fe9SHaiyue Wang #define IAVF_ADMINQ_DETAILS(R, i) \ 5489214fe9SHaiyue Wang (&(((struct iavf_asq_cmd_details *)((R).cmd_buf.va))[i])) 5589214fe9SHaiyue Wang 5689214fe9SHaiyue Wang /* ARQ event information */ 5789214fe9SHaiyue Wang struct iavf_arq_event_info { 5889214fe9SHaiyue Wang struct iavf_aq_desc desc; 5989214fe9SHaiyue Wang u16 msg_len; 6089214fe9SHaiyue Wang u16 buf_len; 6189214fe9SHaiyue Wang u8 *msg_buf; 6289214fe9SHaiyue Wang }; 6389214fe9SHaiyue Wang 6489214fe9SHaiyue Wang /* Admin Queue information */ 6589214fe9SHaiyue Wang struct iavf_adminq_info { 6689214fe9SHaiyue Wang struct iavf_adminq_ring arq; /* receive queue */ 6789214fe9SHaiyue Wang struct iavf_adminq_ring asq; /* send queue */ 6889214fe9SHaiyue Wang u32 asq_cmd_timeout; /* send queue cmd write back timeout*/ 6989214fe9SHaiyue Wang u16 num_arq_entries; /* receive queue depth */ 7089214fe9SHaiyue Wang u16 num_asq_entries; /* send queue depth */ 7189214fe9SHaiyue Wang u16 arq_buf_size; /* receive queue buffer size */ 7289214fe9SHaiyue Wang u16 asq_buf_size; /* send queue buffer size */ 7389214fe9SHaiyue Wang u16 fw_maj_ver; /* firmware major version */ 7489214fe9SHaiyue Wang u16 fw_min_ver; /* firmware minor version */ 7589214fe9SHaiyue Wang u32 fw_build; /* firmware build number */ 7689214fe9SHaiyue Wang u16 api_maj_ver; /* api major version */ 7789214fe9SHaiyue Wang u16 api_min_ver; /* api minor version */ 7889214fe9SHaiyue Wang 7989214fe9SHaiyue Wang struct iavf_spinlock asq_spinlock; /* Send queue spinlock */ 8089214fe9SHaiyue Wang struct iavf_spinlock arq_spinlock; /* Receive queue spinlock */ 8189214fe9SHaiyue Wang 8289214fe9SHaiyue Wang /* last status values on send and receive queues */ 8389214fe9SHaiyue Wang enum iavf_admin_queue_err asq_last_status; 8489214fe9SHaiyue Wang enum iavf_admin_queue_err arq_last_status; 8589214fe9SHaiyue Wang }; 8689214fe9SHaiyue Wang 8789214fe9SHaiyue Wang /* general information */ 8889214fe9SHaiyue Wang #define IAVF_AQ_LARGE_BUF 512 8989214fe9SHaiyue Wang #define IAVF_ASQ_CMD_TIMEOUT 250000 /* usecs */ 9089214fe9SHaiyue Wang 9189214fe9SHaiyue Wang void iavf_fill_default_direct_cmd_desc(struct iavf_aq_desc *desc, 9289214fe9SHaiyue Wang u16 opcode); 9389214fe9SHaiyue Wang 9489214fe9SHaiyue Wang #endif /* _IAVF_ADMINQ_H_ */ 95