1*4c45a51eSXuan Zhuo /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4c45a51eSXuan Zhuo /* 3*4c45a51eSXuan Zhuo * Driver for Alibaba Elastic Ethernet Adapter. 4*4c45a51eSXuan Zhuo * 5*4c45a51eSXuan Zhuo * Copyright (C) 2025 Alibaba Inc. 6*4c45a51eSXuan Zhuo */ 7*4c45a51eSXuan Zhuo 8*4c45a51eSXuan Zhuo #ifndef __EEA_ADMINQ_H__ 9*4c45a51eSXuan Zhuo #define __EEA_ADMINQ_H__ 10*4c45a51eSXuan Zhuo 11*4c45a51eSXuan Zhuo struct eea_aq_cfg { 12*4c45a51eSXuan Zhuo __le32 rx_depth_max; 13*4c45a51eSXuan Zhuo __le32 rx_depth_def; 14*4c45a51eSXuan Zhuo 15*4c45a51eSXuan Zhuo __le32 tx_depth_max; 16*4c45a51eSXuan Zhuo __le32 tx_depth_def; 17*4c45a51eSXuan Zhuo 18*4c45a51eSXuan Zhuo __le32 max_tso_size; 19*4c45a51eSXuan Zhuo __le32 max_tso_segs; 20*4c45a51eSXuan Zhuo 21*4c45a51eSXuan Zhuo u8 mac[ETH_ALEN]; 22*4c45a51eSXuan Zhuo __le16 status; 23*4c45a51eSXuan Zhuo 24*4c45a51eSXuan Zhuo __le16 mtu; 25*4c45a51eSXuan Zhuo __le16 reserved0; 26*4c45a51eSXuan Zhuo __le16 reserved1; 27*4c45a51eSXuan Zhuo u8 reserved2; 28*4c45a51eSXuan Zhuo u8 reserved3; 29*4c45a51eSXuan Zhuo 30*4c45a51eSXuan Zhuo __le16 reserved4; 31*4c45a51eSXuan Zhuo __le16 reserved5; 32*4c45a51eSXuan Zhuo __le16 reserved6; 33*4c45a51eSXuan Zhuo }; 34*4c45a51eSXuan Zhuo 35*4c45a51eSXuan Zhuo struct eea_aq_queue_status { 36*4c45a51eSXuan Zhuo __le16 qidx; 37*4c45a51eSXuan Zhuo #define EEA_QUEUE_STATUS_OK 0 38*4c45a51eSXuan Zhuo #define EEA_QUEUE_STATUS_NEED_RESET 1 39*4c45a51eSXuan Zhuo __le16 status; 40*4c45a51eSXuan Zhuo }; 41*4c45a51eSXuan Zhuo 42*4c45a51eSXuan Zhuo struct __eea_aq_dev_status { 43*4c45a51eSXuan Zhuo #define EEA_LINK_DOWN_STATUS 0 44*4c45a51eSXuan Zhuo #define EEA_LINK_UP_STATUS 1 45*4c45a51eSXuan Zhuo __le16 link_status; 46*4c45a51eSXuan Zhuo __le16 reserved; 47*4c45a51eSXuan Zhuo 48*4c45a51eSXuan Zhuo struct eea_aq_queue_status q_status[]; 49*4c45a51eSXuan Zhuo }; 50*4c45a51eSXuan Zhuo 51*4c45a51eSXuan Zhuo struct eea_aq_dev_status { 52*4c45a51eSXuan Zhuo u32 num; 53*4c45a51eSXuan Zhuo struct __eea_aq_dev_status *status; 54*4c45a51eSXuan Zhuo }; 55*4c45a51eSXuan Zhuo 56*4c45a51eSXuan Zhuo struct eea_aq { 57*4c45a51eSXuan Zhuo struct eea_ring *ring; 58*4c45a51eSXuan Zhuo u32 num; 59*4c45a51eSXuan Zhuo bool broken; 60*4c45a51eSXuan Zhuo u16 phase; 61*4c45a51eSXuan Zhuo 62*4c45a51eSXuan Zhuo /* lock for adminq exec */ 63*4c45a51eSXuan Zhuo struct mutex lock; 64*4c45a51eSXuan Zhuo 65*4c45a51eSXuan Zhuo u32 q_req_size; 66*4c45a51eSXuan Zhuo u32 q_res_size; 67*4c45a51eSXuan Zhuo struct eea_aq_create *q_req_buf; 68*4c45a51eSXuan Zhuo __le32 *q_res_buf; 69*4c45a51eSXuan Zhuo }; 70*4c45a51eSXuan Zhuo 71*4c45a51eSXuan Zhuo struct eea_net; 72*4c45a51eSXuan Zhuo 73*4c45a51eSXuan Zhuo int eea_create_adminq(struct eea_net *enet, u32 qid); 74*4c45a51eSXuan Zhuo void eea_destroy_adminq(struct eea_net *enet); 75*4c45a51eSXuan Zhuo 76*4c45a51eSXuan Zhuo int eea_adminq_query_cfg(struct eea_net *enet, struct eea_aq_cfg *cfg); 77*4c45a51eSXuan Zhuo 78*4c45a51eSXuan Zhuo int eea_adminq_create_q(struct eea_net *enet, u32 num, u32 flags); 79*4c45a51eSXuan Zhuo int eea_adminq_destroy_all_q(struct eea_net *enet); 80*4c45a51eSXuan Zhuo int eea_adminq_dev_status(struct eea_net *enet, 81*4c45a51eSXuan Zhuo struct eea_aq_dev_status *dstatus); 82*4c45a51eSXuan Zhuo void eea_adminq_config_host_info(struct eea_net *enet); 83*4c45a51eSXuan Zhuo #endif 84