162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB */
262306a36Sopenharmony_ci/* Copyright (c) 2015 - 2020 Intel Corporation */
362306a36Sopenharmony_ci#ifndef IRDMA_WS_H
462306a36Sopenharmony_ci#define IRDMA_WS_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include "osdep.h"
762306a36Sopenharmony_ci
862306a36Sopenharmony_cienum irdma_ws_node_type {
962306a36Sopenharmony_ci	WS_NODE_TYPE_PARENT,
1062306a36Sopenharmony_ci	WS_NODE_TYPE_LEAF,
1162306a36Sopenharmony_ci};
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cienum irdma_ws_match_type {
1462306a36Sopenharmony_ci	WS_MATCH_TYPE_VSI,
1562306a36Sopenharmony_ci	WS_MATCH_TYPE_TC,
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistruct irdma_ws_node {
1962306a36Sopenharmony_ci	struct list_head siblings;
2062306a36Sopenharmony_ci	struct list_head child_list_head;
2162306a36Sopenharmony_ci	struct irdma_ws_node *parent;
2262306a36Sopenharmony_ci	u64 lan_qs_handle; /* opaque handle used by LAN */
2362306a36Sopenharmony_ci	u32 l2_sched_node_id;
2462306a36Sopenharmony_ci	u16 index;
2562306a36Sopenharmony_ci	u16 qs_handle;
2662306a36Sopenharmony_ci	u16 vsi_index;
2762306a36Sopenharmony_ci	u8 traffic_class;
2862306a36Sopenharmony_ci	u8 user_pri;
2962306a36Sopenharmony_ci	u8 rel_bw;
3062306a36Sopenharmony_ci	u8 abstraction_layer; /* used for splitting a TC */
3162306a36Sopenharmony_ci	u8 prio_type;
3262306a36Sopenharmony_ci	bool type_leaf:1;
3362306a36Sopenharmony_ci	bool enable:1;
3462306a36Sopenharmony_ci};
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistruct irdma_sc_vsi;
3762306a36Sopenharmony_ciint irdma_ws_add(struct irdma_sc_vsi *vsi, u8 user_pri);
3862306a36Sopenharmony_civoid irdma_ws_remove(struct irdma_sc_vsi *vsi, u8 user_pri);
3962306a36Sopenharmony_civoid irdma_ws_reset(struct irdma_sc_vsi *vsi);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#endif /* IRDMA_WS_H */
42