69 lines
2.1 KiB
C
69 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. */
|
|
|
|
#ifndef _HINIC3_MGMT_H_
|
|
#define _HINIC3_MGMT_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include "hinic3_mbox.h"
|
|
#include "hinic3_hw_intf.h"
|
|
|
|
struct hinic3_hwdev;
|
|
|
|
struct hinic3_recv_msg {
|
|
/* Preallocated buffer of size MAX_PF_MGMT_BUF_SIZE that accumulates
|
|
* receive message, segment-by-segment.
|
|
*/
|
|
void *msg;
|
|
/* Message id for which segments are accumulated. */
|
|
u8 msg_id;
|
|
/* Sequence id of last received segment of current message. */
|
|
u8 seq_id;
|
|
u16 msg_len;
|
|
int async_mgmt_to_pf;
|
|
enum mgmt_mod_type mod;
|
|
u16 cmd;
|
|
struct completion recv_done;
|
|
};
|
|
|
|
enum comm_pf_to_mgmt_event_state {
|
|
COMM_SEND_EVENT_UNINIT,
|
|
COMM_SEND_EVENT_START,
|
|
COMM_SEND_EVENT_SUCCESS,
|
|
COMM_SEND_EVENT_TIMEOUT,
|
|
};
|
|
|
|
struct hinic3_msg_pf_to_mgmt {
|
|
struct hinic3_hwdev *hwdev;
|
|
struct workqueue_struct *workq;
|
|
void *mgmt_ack_buf;
|
|
struct hinic3_recv_msg recv_msg_from_mgmt;
|
|
struct hinic3_recv_msg recv_resp_msg_from_mgmt;
|
|
u16 async_msg_id;
|
|
u16 sync_msg_id;
|
|
void *async_msg_cb_data[MGMT_MOD_HW_MAX];
|
|
/* synchronizes message send with message receives via event queue */
|
|
spinlock_t sync_event_lock;
|
|
enum comm_pf_to_mgmt_event_state event_flag;
|
|
};
|
|
|
|
struct mgmt_msg_handle_work {
|
|
struct work_struct work;
|
|
struct hinic3_msg_pf_to_mgmt *pf_to_mgmt;
|
|
void *msg;
|
|
u16 msg_len;
|
|
enum mgmt_mod_type mod;
|
|
u16 cmd;
|
|
u16 msg_id;
|
|
int async_mgmt_to_pf;
|
|
};
|
|
|
|
int hinic3_pf_to_mgmt_init(struct hinic3_hwdev *hwdev);
|
|
void hinic3_pf_to_mgmt_free(struct hinic3_hwdev *hwdev);
|
|
void hinic3_flush_mgmt_workq(struct hinic3_hwdev *hwdev);
|
|
void hinic3_mgmt_msg_aeqe_handler(struct hinic3_hwdev *hwdev,
|
|
u8 *header, u8 size);
|
|
|
|
#endif
|