1ce07a121SXiaoyun Wang /* SPDX-License-Identifier: BSD-3-Clause 2ce07a121SXiaoyun Wang * Copyright(c) 2017 Huawei Technologies Co., Ltd 3ce07a121SXiaoyun Wang */ 4ce07a121SXiaoyun Wang 5ce07a121SXiaoyun Wang #ifndef _HINIC_PMD_MBOX_H_ 6ce07a121SXiaoyun Wang #define _HINIC_PMD_MBOX_H_ 7ce07a121SXiaoyun Wang 8ce07a121SXiaoyun Wang #define HINIC_MBOX_PF_SEND_ERR 0x1 9ce07a121SXiaoyun Wang #define HINIC_MBOX_PF_BUSY_ACTIVE_FW 0x2 10ce07a121SXiaoyun Wang #define HINIC_MBOX_VF_CMD_ERROR 0x3 11ce07a121SXiaoyun Wang 12ce07a121SXiaoyun Wang /* PFs do not support enable SR-IOV cap when PFs use PMD, VFs just receive 13ce07a121SXiaoyun Wang * mailbox message from PFs. The max number of PFs is 16, so the max number 14ce07a121SXiaoyun Wang * of mailbox buffer for functions is also 16. 15ce07a121SXiaoyun Wang */ 16ce07a121SXiaoyun Wang #define HINIC_MAX_FUNCTIONS 16 17ce07a121SXiaoyun Wang #define HINIC_MAX_PF_FUNCS 16 18ce07a121SXiaoyun Wang 19ce07a121SXiaoyun Wang #define HINIC_MGMT_CMD_UNSUPPORTED 0xFF 20ce07a121SXiaoyun Wang 21ce07a121SXiaoyun Wang #define HINIC_SEQ_ID_MAX_VAL 42 22ce07a121SXiaoyun Wang #define HINIC_MSG_SEG_LEN 48 23ce07a121SXiaoyun Wang 24ce07a121SXiaoyun Wang enum hinic_mbox_ack_type { 25ce07a121SXiaoyun Wang MBOX_ACK, 26ce07a121SXiaoyun Wang MBOX_NO_ACK, 27ce07a121SXiaoyun Wang }; 28ce07a121SXiaoyun Wang 29ce07a121SXiaoyun Wang struct mbox_msg_info { 30ce07a121SXiaoyun Wang u8 msg_id; 31ce07a121SXiaoyun Wang u8 status; /*can only use 6 bit*/ 32ce07a121SXiaoyun Wang }; 33ce07a121SXiaoyun Wang 34ce07a121SXiaoyun Wang struct hinic_recv_mbox { 35ce07a121SXiaoyun Wang void *mbox; 36ce07a121SXiaoyun Wang u8 cmd; 37ce07a121SXiaoyun Wang enum hinic_mod_type mod; 38ce07a121SXiaoyun Wang u16 mbox_len; 39ce07a121SXiaoyun Wang void *buf_out; 40ce07a121SXiaoyun Wang enum hinic_mbox_ack_type ack_type; 41ce07a121SXiaoyun Wang struct mbox_msg_info msg_info; 42*cb99500dSGuoyang Zhou u8 seq_id; 43ce07a121SXiaoyun Wang }; 44ce07a121SXiaoyun Wang 45ce07a121SXiaoyun Wang struct hinic_send_mbox { 46ce07a121SXiaoyun Wang u8 *data; 47ce07a121SXiaoyun Wang volatile u64 *wb_status; 48ce07a121SXiaoyun Wang void *wb_vaddr; 49ce07a121SXiaoyun Wang dma_addr_t wb_paddr; 50ce07a121SXiaoyun Wang }; 51ce07a121SXiaoyun Wang 52ce07a121SXiaoyun Wang enum mbox_event_state { 53ce07a121SXiaoyun Wang EVENT_START = 0, 54ce07a121SXiaoyun Wang EVENT_TIMEOUT, 55ce07a121SXiaoyun Wang EVENT_END, 56ce07a121SXiaoyun Wang }; 57ce07a121SXiaoyun Wang 58ce07a121SXiaoyun Wang struct hinic_mbox_func_to_func { 59ce07a121SXiaoyun Wang struct hinic_hwdev *hwdev; 60ce07a121SXiaoyun Wang 61ce07a121SXiaoyun Wang pthread_mutex_t mbox_send_mutex; 62ce07a121SXiaoyun Wang pthread_mutex_t msg_send_mutex; 63ce07a121SXiaoyun Wang 64ce07a121SXiaoyun Wang struct hinic_send_mbox send_mbox; 65ce07a121SXiaoyun Wang 66ce07a121SXiaoyun Wang struct hinic_recv_mbox mbox_resp[HINIC_MAX_FUNCTIONS]; 67ce07a121SXiaoyun Wang struct hinic_recv_mbox mbox_send[HINIC_MAX_FUNCTIONS]; 68ce07a121SXiaoyun Wang 6917ff26b6SGuoyang Zhou struct hinic_eq *ack_aeq; 70ce07a121SXiaoyun Wang struct hinic_eq *recv_aeq; 71ce07a121SXiaoyun Wang 72ce07a121SXiaoyun Wang u8 send_msg_id; 73ce07a121SXiaoyun Wang enum mbox_event_state event_flag; 74ce07a121SXiaoyun Wang spinlock_t mbox_lock; /* lock for mbox event flag */ 75ce07a121SXiaoyun Wang }; 76ce07a121SXiaoyun Wang 77ce07a121SXiaoyun Wang /* 78ce07a121SXiaoyun Wang * mbox function prototypes 79ce07a121SXiaoyun Wang */ 80ce07a121SXiaoyun Wang int hinic_comm_func_to_func_init(struct hinic_hwdev *hwdev); 81ce07a121SXiaoyun Wang void hinic_comm_func_to_func_free(struct hinic_hwdev *hwdev); 82ce07a121SXiaoyun Wang int hinic_mbox_func_aeqe_handler(void *handle, u8 *header, 83ce07a121SXiaoyun Wang u8 size, void *param); 84ce07a121SXiaoyun Wang int hinic_mbox_to_pf(struct hinic_hwdev *hwdev, enum hinic_mod_type mod, u8 cmd, 85ce07a121SXiaoyun Wang void *buf_in, u16 in_size, 86ce07a121SXiaoyun Wang void *buf_out, u16 *out_size, u32 timeout); 87ce07a121SXiaoyun Wang int hinic_mbox_to_pf_no_ack(struct hinic_hwdev *hwdev, enum hinic_mod_type mod, 88ce07a121SXiaoyun Wang u8 cmd, void *buf_in, u16 in_size); 89ce07a121SXiaoyun Wang 90ce07a121SXiaoyun Wang #endif /* _HINIC_PMD_MBOX_H_ */ 91