162306a36Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
262306a36Sopenharmony_ci/* Copyright 2013-2016 Freescale Semiconductor Inc.
362306a36Sopenharmony_ci * Copyright 2019 NXP
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci#ifndef _FSL_DPMAC_CMD_H
662306a36Sopenharmony_ci#define _FSL_DPMAC_CMD_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/* DPMAC Version */
962306a36Sopenharmony_ci#define DPMAC_VER_MAJOR				4
1062306a36Sopenharmony_ci#define DPMAC_VER_MINOR				4
1162306a36Sopenharmony_ci#define DPMAC_CMD_BASE_VERSION			1
1262306a36Sopenharmony_ci#define DPMAC_CMD_2ND_VERSION			2
1362306a36Sopenharmony_ci#define DPMAC_CMD_ID_OFFSET			4
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define DPMAC_CMD(id)	(((id) << DPMAC_CMD_ID_OFFSET) | DPMAC_CMD_BASE_VERSION)
1662306a36Sopenharmony_ci#define DPMAC_CMD_V2(id) (((id) << DPMAC_CMD_ID_OFFSET) | DPMAC_CMD_2ND_VERSION)
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/* Command IDs */
1962306a36Sopenharmony_ci#define DPMAC_CMDID_CLOSE		DPMAC_CMD(0x800)
2062306a36Sopenharmony_ci#define DPMAC_CMDID_OPEN		DPMAC_CMD(0x80c)
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define DPMAC_CMDID_GET_API_VERSION	DPMAC_CMD(0xa0c)
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define DPMAC_CMDID_GET_ATTR		DPMAC_CMD(0x004)
2562306a36Sopenharmony_ci#define DPMAC_CMDID_SET_LINK_STATE	DPMAC_CMD_V2(0x0c3)
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#define DPMAC_CMDID_GET_COUNTER		DPMAC_CMD(0x0c4)
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define DPMAC_CMDID_SET_PROTOCOL	DPMAC_CMD(0x0c7)
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/* Macros for accessing command fields smaller than 1byte */
3262306a36Sopenharmony_ci#define DPMAC_MASK(field)        \
3362306a36Sopenharmony_ci	GENMASK(DPMAC_##field##_SHIFT + DPMAC_##field##_SIZE - 1, \
3462306a36Sopenharmony_ci		DPMAC_##field##_SHIFT)
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#define dpmac_set_field(var, field, val) \
3762306a36Sopenharmony_ci	((var) |= (((val) << DPMAC_##field##_SHIFT) & DPMAC_MASK(field)))
3862306a36Sopenharmony_ci#define dpmac_get_field(var, field)      \
3962306a36Sopenharmony_ci	(((var) & DPMAC_MASK(field)) >> DPMAC_##field##_SHIFT)
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistruct dpmac_cmd_open {
4262306a36Sopenharmony_ci	__le32 dpmac_id;
4362306a36Sopenharmony_ci};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistruct dpmac_rsp_get_attributes {
4662306a36Sopenharmony_ci	u8 eth_if;
4762306a36Sopenharmony_ci	u8 link_type;
4862306a36Sopenharmony_ci	__le16 id;
4962306a36Sopenharmony_ci	__le32 max_rate;
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci#define DPMAC_STATE_SIZE	1
5362306a36Sopenharmony_ci#define DPMAC_STATE_SHIFT	0
5462306a36Sopenharmony_ci#define DPMAC_STATE_VALID_SIZE	1
5562306a36Sopenharmony_ci#define DPMAC_STATE_VALID_SHIFT	1
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_cistruct dpmac_cmd_set_link_state {
5862306a36Sopenharmony_ci	__le64 options;
5962306a36Sopenharmony_ci	__le32 rate;
6062306a36Sopenharmony_ci	__le32 pad0;
6162306a36Sopenharmony_ci	/* from lsb: up:1, state_valid:1 */
6262306a36Sopenharmony_ci	u8 state;
6362306a36Sopenharmony_ci	u8 pad1[7];
6462306a36Sopenharmony_ci	__le64 supported;
6562306a36Sopenharmony_ci	__le64 advertising;
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cistruct dpmac_cmd_get_counter {
6962306a36Sopenharmony_ci	u8 id;
7062306a36Sopenharmony_ci};
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_cistruct dpmac_rsp_get_counter {
7362306a36Sopenharmony_ci	__le64 pad;
7462306a36Sopenharmony_ci	__le64 counter;
7562306a36Sopenharmony_ci};
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_cistruct dpmac_rsp_get_api_version {
7862306a36Sopenharmony_ci	__le16 major;
7962306a36Sopenharmony_ci	__le16 minor;
8062306a36Sopenharmony_ci};
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_cistruct dpmac_cmd_set_protocol {
8362306a36Sopenharmony_ci	u8 eth_if;
8462306a36Sopenharmony_ci};
8562306a36Sopenharmony_ci#endif /* _FSL_DPMAC_CMD_H */
86