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