162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2020 Marvell International Ltd. All rights reserved. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef __PRESTERA_DSA_H_
562306a36Sopenharmony_ci#define __PRESTERA_DSA_H_
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/types.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#define PRESTERA_DSA_HLEN	16
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cienum prestera_dsa_cmd {
1262306a36Sopenharmony_ci	/* DSA command is "To CPU" */
1362306a36Sopenharmony_ci	PRESTERA_DSA_CMD_TO_CPU = 0,
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	/* DSA command is "From CPU" */
1662306a36Sopenharmony_ci	PRESTERA_DSA_CMD_FROM_CPU,
1762306a36Sopenharmony_ci};
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct prestera_dsa_vlan {
2062306a36Sopenharmony_ci	u16 vid;
2162306a36Sopenharmony_ci	u8 vpt;
2262306a36Sopenharmony_ci	u8 cfi_bit;
2362306a36Sopenharmony_ci	bool is_tagged;
2462306a36Sopenharmony_ci};
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistruct prestera_dsa {
2762306a36Sopenharmony_ci	struct prestera_dsa_vlan vlan;
2862306a36Sopenharmony_ci	u32 hw_dev_num;
2962306a36Sopenharmony_ci	u32 port_num;
3062306a36Sopenharmony_ci	u8 cpu_code;
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciint prestera_dsa_parse(struct prestera_dsa *dsa, const u8 *dsa_buf);
3462306a36Sopenharmony_ciint prestera_dsa_build(const struct prestera_dsa *dsa, u8 *dsa_buf);
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#endif /* _PRESTERA_DSA_H_ */
37