/* Broadcom NetXtreme-C/E network driver.
 *
 * Copyright (c) 2014-2016 Broadcom Corporation
 * Copyright (c) 2016-2018 Broadcom Limited
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 */

#ifndef BNXT_DCB_H
#define BNXT_DCB_H

#include <net/dcbnl.h>

struct bnxt_dcb {
	u8			max_tc;
	struct ieee_pfc		*ieee_pfc;
	struct ieee_ets		*ieee_ets;
	u8			dcbx_cap;
	u8			default_pri;
};

struct bnxt_cos2bw_cfg {
	u8			pad[3];
	struct_group_attr(cfg, __packed,
		u8		queue_id;
		__le32		min_bw;
		__le32		max_bw;
		u8		tsa;
		u8		pri_lvl;
		u8		bw_weight;
	);
/* for min_bw / max_bw */
#define BW_VALUE_UNIT_PERCENT1_100		(0x1UL << 29)
	u8			unused;
};

struct bnxt_dscp2pri_entry {
	u8	dscp;
	u8	mask;
	u8	pri;
};

#define BNXT_LLQ(q_profile)	\
	((q_profile) ==		\
	 QUEUE_QPORTCFG_RESP_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS_ROCE)

#define BNXT_CNPQ(q_profile)	\
	((q_profile) ==		\
	 QUEUE_QPORTCFG_RESP_QUEUE_ID0_SERVICE_PROFILE_LOSSY_ROCE_CNP)

#define HWRM_STRUCT_DATA_SUBTYPE_HOST_OPERATIONAL	0x0300

void bnxt_dcb_init(struct bnxt *bp);
void bnxt_dcb_free(struct bnxt *bp);
#endif
