162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef _EFA_ADMIN_H_ 762306a36Sopenharmony_ci#define _EFA_ADMIN_H_ 862306a36Sopenharmony_ci 962306a36Sopenharmony_cienum efa_admin_aq_completion_status { 1062306a36Sopenharmony_ci EFA_ADMIN_SUCCESS = 0, 1162306a36Sopenharmony_ci EFA_ADMIN_RESOURCE_ALLOCATION_FAILURE = 1, 1262306a36Sopenharmony_ci EFA_ADMIN_BAD_OPCODE = 2, 1362306a36Sopenharmony_ci EFA_ADMIN_UNSUPPORTED_OPCODE = 3, 1462306a36Sopenharmony_ci EFA_ADMIN_MALFORMED_REQUEST = 4, 1562306a36Sopenharmony_ci /* Additional status is provided in ACQ entry extended_status */ 1662306a36Sopenharmony_ci EFA_ADMIN_ILLEGAL_PARAMETER = 5, 1762306a36Sopenharmony_ci EFA_ADMIN_UNKNOWN_ERROR = 6, 1862306a36Sopenharmony_ci EFA_ADMIN_RESOURCE_BUSY = 7, 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cistruct efa_admin_aq_common_desc { 2262306a36Sopenharmony_ci /* 2362306a36Sopenharmony_ci * 11:0 : command_id 2462306a36Sopenharmony_ci * 15:12 : reserved12 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_ci u16 command_id; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci /* as appears in efa_admin_aq_opcode */ 2962306a36Sopenharmony_ci u8 opcode; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci /* 3262306a36Sopenharmony_ci * 0 : phase 3362306a36Sopenharmony_ci * 1 : ctrl_data - control buffer address valid 3462306a36Sopenharmony_ci * 2 : ctrl_data_indirect - control buffer address 3562306a36Sopenharmony_ci * points to list of pages with addresses of control 3662306a36Sopenharmony_ci * buffers 3762306a36Sopenharmony_ci * 7:3 : reserved3 3862306a36Sopenharmony_ci */ 3962306a36Sopenharmony_ci u8 flags; 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci/* 4362306a36Sopenharmony_ci * used in efa_admin_aq_entry. Can point directly to control data, or to a 4462306a36Sopenharmony_ci * page list chunk. Used also at the end of indirect mode page list chunks, 4562306a36Sopenharmony_ci * for chaining. 4662306a36Sopenharmony_ci */ 4762306a36Sopenharmony_cistruct efa_admin_ctrl_buff_info { 4862306a36Sopenharmony_ci u32 length; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci struct efa_common_mem_addr address; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistruct efa_admin_aq_entry { 5462306a36Sopenharmony_ci struct efa_admin_aq_common_desc aq_common_descriptor; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci union { 5762306a36Sopenharmony_ci u32 inline_data_w1[3]; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci struct efa_admin_ctrl_buff_info control_buffer; 6062306a36Sopenharmony_ci } u; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci u32 inline_data_w4[12]; 6362306a36Sopenharmony_ci}; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistruct efa_admin_acq_common_desc { 6662306a36Sopenharmony_ci /* 6762306a36Sopenharmony_ci * command identifier to associate it with the aq descriptor 6862306a36Sopenharmony_ci * 11:0 : command_id 6962306a36Sopenharmony_ci * 15:12 : reserved12 7062306a36Sopenharmony_ci */ 7162306a36Sopenharmony_ci u16 command; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci u8 status; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci /* 7662306a36Sopenharmony_ci * 0 : phase 7762306a36Sopenharmony_ci * 7:1 : reserved1 7862306a36Sopenharmony_ci */ 7962306a36Sopenharmony_ci u8 flags; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci u16 extended_status; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci /* 8462306a36Sopenharmony_ci * indicates to the driver which AQ entry has been consumed by the 8562306a36Sopenharmony_ci * device and could be reused 8662306a36Sopenharmony_ci */ 8762306a36Sopenharmony_ci u16 sq_head_indx; 8862306a36Sopenharmony_ci}; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_cistruct efa_admin_acq_entry { 9162306a36Sopenharmony_ci struct efa_admin_acq_common_desc acq_common_descriptor; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci u32 response_specific_data[14]; 9462306a36Sopenharmony_ci}; 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_cistruct efa_admin_aenq_common_desc { 9762306a36Sopenharmony_ci u16 group; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci u16 syndrom; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci /* 10262306a36Sopenharmony_ci * 0 : phase 10362306a36Sopenharmony_ci * 7:1 : reserved - MBZ 10462306a36Sopenharmony_ci */ 10562306a36Sopenharmony_ci u8 flags; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci u8 reserved1[3]; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci u32 timestamp_low; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci u32 timestamp_high; 11262306a36Sopenharmony_ci}; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cistruct efa_admin_aenq_entry { 11562306a36Sopenharmony_ci struct efa_admin_aenq_common_desc aenq_common_desc; 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci /* command specific inline data */ 11862306a36Sopenharmony_ci u32 inline_data_w4[12]; 11962306a36Sopenharmony_ci}; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_cienum efa_admin_eqe_event_type { 12262306a36Sopenharmony_ci EFA_ADMIN_EQE_EVENT_TYPE_COMPLETION = 0, 12362306a36Sopenharmony_ci}; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci/* Completion event */ 12662306a36Sopenharmony_cistruct efa_admin_comp_event { 12762306a36Sopenharmony_ci /* CQ number */ 12862306a36Sopenharmony_ci u16 cqn; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci /* MBZ */ 13162306a36Sopenharmony_ci u16 reserved; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci /* MBZ */ 13462306a36Sopenharmony_ci u32 reserved2; 13562306a36Sopenharmony_ci}; 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci/* Event Queue Element */ 13862306a36Sopenharmony_cistruct efa_admin_eqe { 13962306a36Sopenharmony_ci /* 14062306a36Sopenharmony_ci * 0 : phase 14162306a36Sopenharmony_ci * 8:1 : event_type - Event type 14262306a36Sopenharmony_ci * 31:9 : reserved - MBZ 14362306a36Sopenharmony_ci */ 14462306a36Sopenharmony_ci u32 common; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci /* MBZ */ 14762306a36Sopenharmony_ci u32 reserved; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci union { 15062306a36Sopenharmony_ci /* Event data */ 15162306a36Sopenharmony_ci u32 event_data[2]; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci /* Completion Event */ 15462306a36Sopenharmony_ci struct efa_admin_comp_event comp_event; 15562306a36Sopenharmony_ci } u; 15662306a36Sopenharmony_ci}; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci/* aq_common_desc */ 15962306a36Sopenharmony_ci#define EFA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0) 16062306a36Sopenharmony_ci#define EFA_ADMIN_AQ_COMMON_DESC_PHASE_MASK BIT(0) 16162306a36Sopenharmony_ci#define EFA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK BIT(1) 16262306a36Sopenharmony_ci#define EFA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK BIT(2) 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci/* acq_common_desc */ 16562306a36Sopenharmony_ci#define EFA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0) 16662306a36Sopenharmony_ci#define EFA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK BIT(0) 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci/* aenq_common_desc */ 16962306a36Sopenharmony_ci#define EFA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK BIT(0) 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci/* eqe */ 17262306a36Sopenharmony_ci#define EFA_ADMIN_EQE_PHASE_MASK BIT(0) 17362306a36Sopenharmony_ci#define EFA_ADMIN_EQE_EVENT_TYPE_MASK GENMASK(8, 1) 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci#endif /* _EFA_ADMIN_H_ */ 176