+++ /dev/null
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2016-2020 Intel Corporation
- */
-
-#ifndef __DLB2_BASE_DLB2_MBOX_H
-#define __DLB2_BASE_DLB2_MBOX_H
-
-#include "dlb2_osdep_types.h"
-#include "dlb2_regs.h"
-
-#define DLB2_MBOX_INTERFACE_VERSION 1
-
-/*
- * The PF uses its PF->VF mailbox to send responses to VF requests, as well as
- * to send requests of its own (e.g. notifying a VF of an impending FLR).
- * To avoid communication race conditions, e.g. the PF sends a response and then
- * sends a request before the VF reads the response, the PF->VF mailbox is
- * divided into two sections:
- * - Bytes 0-47: PF responses
- * - Bytes 48-63: PF requests
- *
- * Partitioning the PF->VF mailbox allows responses and requests to occupy the
- * mailbox simultaneously.
- */
-#define DLB2_PF2VF_RESP_BYTES 48
-#define DLB2_PF2VF_RESP_BASE 0
-#define DLB2_PF2VF_RESP_BASE_WORD (DLB2_PF2VF_RESP_BASE / 4)
-
-#define DLB2_PF2VF_REQ_BYTES 16
-#define DLB2_PF2VF_REQ_BASE (DLB2_PF2VF_RESP_BASE + DLB2_PF2VF_RESP_BYTES)
-#define DLB2_PF2VF_REQ_BASE_WORD (DLB2_PF2VF_REQ_BASE / 4)
-
-/*
- * Similarly, the VF->PF mailbox is divided into two sections:
- * - Bytes 0-239: VF requests
- * -- (Bytes 0-3 are unused due to a hardware errata)
- * - Bytes 240-255: VF responses
- */
-#define DLB2_VF2PF_REQ_BYTES 236
-#define DLB2_VF2PF_REQ_BASE 4
-#define DLB2_VF2PF_REQ_BASE_WORD (DLB2_VF2PF_REQ_BASE / 4)
-
-#define DLB2_VF2PF_RESP_BYTES 16
-#define DLB2_VF2PF_RESP_BASE (DLB2_VF2PF_REQ_BASE + DLB2_VF2PF_REQ_BYTES)
-#define DLB2_VF2PF_RESP_BASE_WORD (DLB2_VF2PF_RESP_BASE / 4)
-
-/* VF-initiated commands */
-enum dlb2_mbox_cmd_type {
- DLB2_MBOX_CMD_REGISTER,
- DLB2_MBOX_CMD_UNREGISTER,
- DLB2_MBOX_CMD_GET_NUM_RESOURCES,
- DLB2_MBOX_CMD_CREATE_SCHED_DOMAIN,
- DLB2_MBOX_CMD_RESET_SCHED_DOMAIN,
- DLB2_MBOX_CMD_CREATE_LDB_QUEUE,
- DLB2_MBOX_CMD_CREATE_DIR_QUEUE,
- DLB2_MBOX_CMD_CREATE_LDB_PORT,
- DLB2_MBOX_CMD_CREATE_DIR_PORT,
- DLB2_MBOX_CMD_ENABLE_LDB_PORT,
- DLB2_MBOX_CMD_DISABLE_LDB_PORT,
- DLB2_MBOX_CMD_ENABLE_DIR_PORT,
- DLB2_MBOX_CMD_DISABLE_DIR_PORT,
- DLB2_MBOX_CMD_LDB_PORT_OWNED_BY_DOMAIN,
- DLB2_MBOX_CMD_DIR_PORT_OWNED_BY_DOMAIN,
- DLB2_MBOX_CMD_MAP_QID,
- DLB2_MBOX_CMD_UNMAP_QID,
- DLB2_MBOX_CMD_START_DOMAIN,
- DLB2_MBOX_CMD_ENABLE_LDB_PORT_INTR,
- DLB2_MBOX_CMD_ENABLE_DIR_PORT_INTR,
- DLB2_MBOX_CMD_ARM_CQ_INTR,
- DLB2_MBOX_CMD_GET_NUM_USED_RESOURCES,
- DLB2_MBOX_CMD_GET_SN_ALLOCATION,
- DLB2_MBOX_CMD_GET_LDB_QUEUE_DEPTH,
- DLB2_MBOX_CMD_GET_DIR_QUEUE_DEPTH,
- DLB2_MBOX_CMD_PENDING_PORT_UNMAPS,
- DLB2_MBOX_CMD_GET_COS_BW,
- DLB2_MBOX_CMD_GET_SN_OCCUPANCY,
- DLB2_MBOX_CMD_QUERY_CQ_POLL_MODE,
-
- /* NUM_QE_CMD_TYPES must be last */
- NUM_DLB2_MBOX_CMD_TYPES,
-};
-
-static const char dlb2_mbox_cmd_type_strings[][128] = {
- "DLB2_MBOX_CMD_REGISTER",
- "DLB2_MBOX_CMD_UNREGISTER",
- "DLB2_MBOX_CMD_GET_NUM_RESOURCES",
- "DLB2_MBOX_CMD_CREATE_SCHED_DOMAIN",
- "DLB2_MBOX_CMD_RESET_SCHED_DOMAIN",
- "DLB2_MBOX_CMD_CREATE_LDB_QUEUE",
- "DLB2_MBOX_CMD_CREATE_DIR_QUEUE",
- "DLB2_MBOX_CMD_CREATE_LDB_PORT",
- "DLB2_MBOX_CMD_CREATE_DIR_PORT",
- "DLB2_MBOX_CMD_ENABLE_LDB_PORT",
- "DLB2_MBOX_CMD_DISABLE_LDB_PORT",
- "DLB2_MBOX_CMD_ENABLE_DIR_PORT",
- "DLB2_MBOX_CMD_DISABLE_DIR_PORT",
- "DLB2_MBOX_CMD_LDB_PORT_OWNED_BY_DOMAIN",
- "DLB2_MBOX_CMD_DIR_PORT_OWNED_BY_DOMAIN",
- "DLB2_MBOX_CMD_MAP_QID",
- "DLB2_MBOX_CMD_UNMAP_QID",
- "DLB2_MBOX_CMD_START_DOMAIN",
- "DLB2_MBOX_CMD_ENABLE_LDB_PORT_INTR",
- "DLB2_MBOX_CMD_ENABLE_DIR_PORT_INTR",
- "DLB2_MBOX_CMD_ARM_CQ_INTR",
- "DLB2_MBOX_CMD_GET_NUM_USED_RESOURCES",
- "DLB2_MBOX_CMD_GET_SN_ALLOCATION",
- "DLB2_MBOX_CMD_GET_LDB_QUEUE_DEPTH",
- "DLB2_MBOX_CMD_GET_DIR_QUEUE_DEPTH",
- "DLB2_MBOX_CMD_PENDING_PORT_UNMAPS",
- "DLB2_MBOX_CMD_GET_COS_BW",
- "DLB2_MBOX_CMD_GET_SN_OCCUPANCY",
- "DLB2_MBOX_CMD_QUERY_CQ_POLL_MODE",
-};
-
-/* PF-initiated commands */
-enum dlb2_mbox_vf_cmd_type {
- DLB2_MBOX_VF_CMD_DOMAIN_ALERT,
- DLB2_MBOX_VF_CMD_NOTIFICATION,
- DLB2_MBOX_VF_CMD_IN_USE,
-
- /* NUM_DLB2_MBOX_VF_CMD_TYPES must be last */
- NUM_DLB2_MBOX_VF_CMD_TYPES,
-};
-
-static const char dlb2_mbox_vf_cmd_type_strings[][128] = {
- "DLB2_MBOX_VF_CMD_DOMAIN_ALERT",
- "DLB2_MBOX_VF_CMD_NOTIFICATION",
- "DLB2_MBOX_VF_CMD_IN_USE",
-};
-
-#define DLB2_MBOX_CMD_TYPE(hdr) \
- (((struct dlb2_mbox_req_hdr *)hdr)->type)
-#define DLB2_MBOX_CMD_STRING(hdr) \
- dlb2_mbox_cmd_type_strings[DLB2_MBOX_CMD_TYPE(hdr)]
-
-enum dlb2_mbox_status_type {
- DLB2_MBOX_ST_SUCCESS,
- DLB2_MBOX_ST_INVALID_CMD_TYPE,
- DLB2_MBOX_ST_VERSION_MISMATCH,
- DLB2_MBOX_ST_INVALID_OWNER_VF,
-};
-
-static const char dlb2_mbox_status_type_strings[][128] = {
- "DLB2_MBOX_ST_SUCCESS",
- "DLB2_MBOX_ST_INVALID_CMD_TYPE",
- "DLB2_MBOX_ST_VERSION_MISMATCH",
- "DLB2_MBOX_ST_INVALID_OWNER_VF",
-};
-
-#define DLB2_MBOX_ST_TYPE(hdr) \
- (((struct dlb2_mbox_resp_hdr *)hdr)->status)
-#define DLB2_MBOX_ST_STRING(hdr) \
- dlb2_mbox_status_type_strings[DLB2_MBOX_ST_TYPE(hdr)]
-
-/* This structure is always the first field in a request structure */
-struct dlb2_mbox_req_hdr {
- u32 type;
-};
-
-/* This structure is always the first field in a response structure */
-struct dlb2_mbox_resp_hdr {
- u32 status;
-};
-
-struct dlb2_mbox_register_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u16 min_interface_version;
- u16 max_interface_version;
-};
-
-struct dlb2_mbox_register_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 interface_version;
- u8 pf_id;
- u8 vf_id;
- u8 is_auxiliary_vf;
- u8 primary_vf_id;
- u32 padding;
-};
-
-struct dlb2_mbox_unregister_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 padding;
-};
-
-struct dlb2_mbox_unregister_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 padding;
-};
-
-struct dlb2_mbox_get_num_resources_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 padding;
-};
-
-struct dlb2_mbox_get_num_resources_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u16 num_sched_domains;
- u16 num_ldb_queues;
- u16 num_ldb_ports;
- u16 num_cos_ldb_ports[4];
- u16 num_dir_ports;
- u32 num_atomic_inflights;
- u32 num_hist_list_entries;
- u32 max_contiguous_hist_list_entries;
- u16 num_ldb_credits;
- u16 num_dir_credits;
-};
-
-struct dlb2_mbox_create_sched_domain_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 num_ldb_queues;
- u32 num_ldb_ports;
- u32 num_cos_ldb_ports[4];
- u32 num_dir_ports;
- u32 num_atomic_inflights;
- u32 num_hist_list_entries;
- u32 num_ldb_credits;
- u32 num_dir_credits;
- u8 cos_strict;
- u8 padding0[3];
- u32 padding1;
-};
-
-struct dlb2_mbox_create_sched_domain_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 id;
-};
-
-struct dlb2_mbox_reset_sched_domain_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 id;
-};
-
-struct dlb2_mbox_reset_sched_domain_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
-};
-
-struct dlb2_mbox_create_ldb_queue_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 num_sequence_numbers;
- u32 num_qid_inflights;
- u32 num_atomic_inflights;
- u32 lock_id_comp_level;
- u32 depth_threshold;
- u32 padding;
-};
-
-struct dlb2_mbox_create_ldb_queue_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 id;
-};
-
-struct dlb2_mbox_create_dir_queue_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 depth_threshold;
-};
-
-struct dlb2_mbox_create_dir_queue_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 id;
-};
-
-struct dlb2_mbox_create_ldb_port_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u16 cq_depth;
- u16 cq_history_list_size;
- u8 cos_id;
- u8 cos_strict;
- u16 padding1;
- u64 cq_base_address;
-};
-
-struct dlb2_mbox_create_ldb_port_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 id;
-};
-
-struct dlb2_mbox_create_dir_port_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u64 cq_base_address;
- u16 cq_depth;
- u16 padding0;
- s32 queue_id;
-};
-
-struct dlb2_mbox_create_dir_port_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 id;
-};
-
-struct dlb2_mbox_enable_ldb_port_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 padding;
-};
-
-struct dlb2_mbox_enable_ldb_port_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_disable_ldb_port_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 padding;
-};
-
-struct dlb2_mbox_disable_ldb_port_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_enable_dir_port_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 padding;
-};
-
-struct dlb2_mbox_enable_dir_port_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_disable_dir_port_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 padding;
-};
-
-struct dlb2_mbox_disable_dir_port_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_ldb_port_owned_by_domain_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 padding;
-};
-
-struct dlb2_mbox_ldb_port_owned_by_domain_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- s32 owned;
-};
-
-struct dlb2_mbox_dir_port_owned_by_domain_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 padding;
-};
-
-struct dlb2_mbox_dir_port_owned_by_domain_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- s32 owned;
-};
-
-struct dlb2_mbox_map_qid_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 qid;
- u32 priority;
- u32 padding0;
-};
-
-struct dlb2_mbox_map_qid_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 id;
-};
-
-struct dlb2_mbox_unmap_qid_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 qid;
-};
-
-struct dlb2_mbox_unmap_qid_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_start_domain_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
-};
-
-struct dlb2_mbox_start_domain_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_enable_ldb_port_intr_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u16 port_id;
- u16 thresh;
- u16 vector;
- u16 owner_vf;
- u16 reserved[2];
-};
-
-struct dlb2_mbox_enable_ldb_port_intr_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_enable_dir_port_intr_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u16 port_id;
- u16 thresh;
- u16 vector;
- u16 owner_vf;
- u16 reserved[2];
-};
-
-struct dlb2_mbox_enable_dir_port_intr_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding;
-};
-
-struct dlb2_mbox_arm_cq_intr_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 is_ldb;
-};
-
-struct dlb2_mbox_arm_cq_intr_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 padding0;
-};
-
-/*
- * The alert_id and aux_alert_data follows the format of the alerts defined in
- * dlb2_types.h. The alert id contains an enum dlb2_domain_alert_id value, and
- * the aux_alert_data value varies depending on the alert.
- */
-struct dlb2_mbox_vf_alert_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 alert_id;
- u32 aux_alert_data;
-};
-
-enum dlb2_mbox_vf_notification_type {
- DLB2_MBOX_VF_NOTIFICATION_PRE_RESET,
- DLB2_MBOX_VF_NOTIFICATION_POST_RESET,
-
- /* NUM_DLB2_MBOX_VF_NOTIFICATION_TYPES must be last */
- NUM_DLB2_MBOX_VF_NOTIFICATION_TYPES,
-};
-
-struct dlb2_mbox_vf_notification_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 notification;
-};
-
-struct dlb2_mbox_vf_in_use_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 padding;
-};
-
-struct dlb2_mbox_vf_in_use_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 in_use;
-};
-
-struct dlb2_mbox_get_sn_allocation_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 group_id;
-};
-
-struct dlb2_mbox_get_sn_allocation_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 num;
-};
-
-struct dlb2_mbox_get_ldb_queue_depth_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 queue_id;
- u32 padding;
-};
-
-struct dlb2_mbox_get_ldb_queue_depth_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 depth;
-};
-
-struct dlb2_mbox_get_dir_queue_depth_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 queue_id;
- u32 padding;
-};
-
-struct dlb2_mbox_get_dir_queue_depth_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 depth;
-};
-
-struct dlb2_mbox_pending_port_unmaps_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 domain_id;
- u32 port_id;
- u32 padding;
-};
-
-struct dlb2_mbox_pending_port_unmaps_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 num;
-};
-
-struct dlb2_mbox_get_cos_bw_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 cos_id;
-};
-
-struct dlb2_mbox_get_cos_bw_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 num;
-};
-
-struct dlb2_mbox_get_sn_occupancy_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 group_id;
-};
-
-struct dlb2_mbox_get_sn_occupancy_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 num;
-};
-
-struct dlb2_mbox_query_cq_poll_mode_cmd_req {
- struct dlb2_mbox_req_hdr hdr;
- u32 padding;
-};
-
-struct dlb2_mbox_query_cq_poll_mode_cmd_resp {
- struct dlb2_mbox_resp_hdr hdr;
- u32 error_code;
- u32 status;
- u32 mode;
-};
-
-#endif /* __DLB2_BASE_DLB2_MBOX_H */