1a4957d87SZiyang Xuan /* SPDX-License-Identifier: BSD-3-Clause 2a4957d87SZiyang Xuan * Copyright(c) 2017 Huawei Technologies Co., Ltd 3a4957d87SZiyang Xuan */ 4a4957d87SZiyang Xuan 5a4957d87SZiyang Xuan #ifndef _HINIC_PMD_MGMT_H_ 6a4957d87SZiyang Xuan #define _HINIC_PMD_MGMT_H_ 7a4957d87SZiyang Xuan 8a4957d87SZiyang Xuan #include "hinic_pmd_api_cmd.h" 9a4957d87SZiyang Xuan #include "hinic_pmd_eqs.h" 10a4957d87SZiyang Xuan 11a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_LEN_SHIFT 0 12a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MODULE_SHIFT 11 13a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEG_LEN_SHIFT 16 14a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_NO_ACK_SHIFT 22 15a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_SHIFT 23 16a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEQID_SHIFT 24 17a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_LAST_SHIFT 30 18a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_DIRECTION_SHIFT 31 19a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_CMD_SHIFT 32 20a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_PCI_INTF_IDX_SHIFT 48 21a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_P2P_IDX_SHIFT 50 22a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_ID_SHIFT 54 23a4957d87SZiyang Xuan 24a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_LEN_MASK 0x7FF 25a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MODULE_MASK 0x1F 26a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEG_LEN_MASK 0x3F 27a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_NO_ACK_MASK 0x1 28a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_MASK 0x1 29a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SEQID_MASK 0x3F 30a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_LAST_MASK 0x1 31a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_DIRECTION_MASK 0x1 32a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_CMD_MASK 0xFF 33a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_PCI_INTF_IDX_MASK 0x3 34a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_P2P_IDX_MASK 0xF 35a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_MSG_ID_MASK 0x3FF 36a4957d87SZiyang Xuan 37036b61d8SXiaoyun Wang #define HINIC_DEV_BUSY_ACTIVE_FW 0xFE 38036b61d8SXiaoyun Wang 39a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_GET(val, member) \ 40a4957d87SZiyang Xuan (((val) >> HINIC_MSG_HEADER_##member##_SHIFT) & \ 41a4957d87SZiyang Xuan HINIC_MSG_HEADER_##member##_MASK) 42a4957d87SZiyang Xuan 43a4957d87SZiyang Xuan #define HINIC_MSG_HEADER_SET(val, member) \ 44a4957d87SZiyang Xuan ((u64)((val) & HINIC_MSG_HEADER_##member##_MASK) << \ 45a4957d87SZiyang Xuan HINIC_MSG_HEADER_##member##_SHIFT) 46a4957d87SZiyang Xuan 47a4957d87SZiyang Xuan #define HINIC_MGMT_RSP_AEQN (1) 48a4957d87SZiyang Xuan 49a4957d87SZiyang Xuan enum hinic_msg_direction_type { 50a4957d87SZiyang Xuan HINIC_MSG_DIRECT_SEND = 0, 51a4957d87SZiyang Xuan HINIC_MSG_RESPONSE = 1 52a4957d87SZiyang Xuan }; 53a4957d87SZiyang Xuan enum hinic_msg_segment_type { 54a4957d87SZiyang Xuan NOT_LAST_SEGMENT = 0, 55a4957d87SZiyang Xuan LAST_SEGMENT = 1, 56a4957d87SZiyang Xuan }; 57a4957d87SZiyang Xuan 58a4957d87SZiyang Xuan enum hinic_msg_ack_type { 59a4957d87SZiyang Xuan HINIC_MSG_ACK = 0, 60a4957d87SZiyang Xuan HINIC_MSG_NO_ACK = 1, 61a4957d87SZiyang Xuan }; 62a4957d87SZiyang Xuan 63a4957d87SZiyang Xuan struct hinic_recv_msg { 64a4957d87SZiyang Xuan void *msg; 65a4957d87SZiyang Xuan void *buf_out; 66a4957d87SZiyang Xuan 67a4957d87SZiyang Xuan u16 msg_len; 68a4957d87SZiyang Xuan enum hinic_mod_type mod; 69a4957d87SZiyang Xuan u8 cmd; 70a4957d87SZiyang Xuan u16 msg_id; 71a4957d87SZiyang Xuan int async_mgmt_to_pf; 72*cb99500dSGuoyang Zhou u8 seq_id; 73a4957d87SZiyang Xuan }; 74a4957d87SZiyang Xuan 75a4957d87SZiyang Xuan #define HINIC_COMM_SELF_CMD_MAX 8 76a4957d87SZiyang Xuan 77a4957d87SZiyang Xuan enum comm_pf_to_mgmt_event_state { 78a4957d87SZiyang Xuan SEND_EVENT_START = 0, 79a4957d87SZiyang Xuan SEND_EVENT_TIMEOUT, 80a4957d87SZiyang Xuan SEND_EVENT_END, 81a4957d87SZiyang Xuan }; 82a4957d87SZiyang Xuan 83a4957d87SZiyang Xuan struct hinic_msg_pf_to_mgmt { 84a4957d87SZiyang Xuan struct hinic_hwdev *hwdev; 85a4957d87SZiyang Xuan 86ae865766SZiyang Xuan /* mutex for sync message */ 87b8582d05SXiaoyun Wang pthread_mutex_t sync_msg_mutex; 88a4957d87SZiyang Xuan 89a4957d87SZiyang Xuan void *async_msg_buf; 90a4957d87SZiyang Xuan void *sync_msg_buf; 91a4957d87SZiyang Xuan 92a4957d87SZiyang Xuan struct hinic_recv_msg recv_msg_from_mgmt; 93a4957d87SZiyang Xuan struct hinic_recv_msg recv_resp_msg_from_mgmt; 94a4957d87SZiyang Xuan 95a4957d87SZiyang Xuan u16 async_msg_id; 96a4957d87SZiyang Xuan u16 sync_msg_id; 97a4957d87SZiyang Xuan 98a4957d87SZiyang Xuan struct hinic_api_cmd_chain *cmd_chain[HINIC_API_CMD_MAX]; 99a4957d87SZiyang Xuan 100a4957d87SZiyang Xuan struct hinic_eq *rx_aeq; 101a4957d87SZiyang Xuan }; 102a4957d87SZiyang Xuan 103a4957d87SZiyang Xuan int hinic_msg_to_mgmt_no_ack(void *hwdev, enum hinic_mod_type mod, u8 cmd, 104214164a6SXiaoyun Wang void *buf_in, u16 in_size); 105a4957d87SZiyang Xuan 106a4957d87SZiyang Xuan int hinic_comm_pf_to_mgmt_init(struct hinic_hwdev *hwdev); 107a4957d87SZiyang Xuan 108a4957d87SZiyang Xuan void hinic_comm_pf_to_mgmt_free(struct hinic_hwdev *hwdev); 109a4957d87SZiyang Xuan 110a4957d87SZiyang Xuan int hinic_aeq_poll_msg(struct hinic_eq *eq, u32 timeout, void *param); 111a4957d87SZiyang Xuan 112a4957d87SZiyang Xuan int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd, 113a4957d87SZiyang Xuan void *buf_in, u16 in_size, 114a4957d87SZiyang Xuan void *buf_out, u16 *out_size, u32 timeout); 115a4957d87SZiyang Xuan 116a4957d87SZiyang Xuan void hinic_dev_handle_aeq_event(struct hinic_hwdev *hwdev, void *param); 117a4957d87SZiyang Xuan 118a4957d87SZiyang Xuan #endif /* _HINIC_PMD_MGMT_H_ */ 119