Linux Audio

Check our new training course

Loading...
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/* Marvell Octeon EP (EndPoint) Ethernet Driver
  3 *
  4 * Copyright (C) 2020 Marvell.
  5 *
  6 */
  7#ifndef _OCTEP_VF_MBOX_H_
  8#define _OCTEP_VF_MBOX_H_
  9
 10/* When a new command is implemented, VF Mbox version should be bumped.
 11 */
 12enum octep_pfvf_mbox_version {
 13	OCTEP_PFVF_MBOX_VERSION_V0,
 14	OCTEP_PFVF_MBOX_VERSION_V1,
 15	OCTEP_PFVF_MBOX_VERSION_V2
 16};
 17
 18#define OCTEP_PFVF_MBOX_VERSION_CURRENT OCTEP_PFVF_MBOX_VERSION_V2
 19
 20enum octep_pfvf_mbox_opcode {
 21	OCTEP_PFVF_MBOX_CMD_VERSION,
 22	OCTEP_PFVF_MBOX_CMD_SET_MTU,
 23	OCTEP_PFVF_MBOX_CMD_SET_MAC_ADDR,
 24	OCTEP_PFVF_MBOX_CMD_GET_MAC_ADDR,
 25	OCTEP_PFVF_MBOX_CMD_GET_LINK_INFO,
 26	OCTEP_PFVF_MBOX_CMD_GET_STATS,
 27	OCTEP_PFVF_MBOX_CMD_SET_RX_STATE,
 28	OCTEP_PFVF_MBOX_CMD_SET_LINK_STATUS,
 29	OCTEP_PFVF_MBOX_CMD_GET_LINK_STATUS,
 30	OCTEP_PFVF_MBOX_CMD_GET_MTU,
 31	OCTEP_PFVF_MBOX_CMD_DEV_REMOVE,
 32	OCTEP_PFVF_MBOX_CMD_GET_FW_INFO,
 33	OCTEP_PFVF_MBOX_CMD_SET_OFFLOADS,
 34	OCTEP_PFVF_MBOX_NOTIF_LINK_STATUS,
 35	OCTEP_PFVF_MBOX_CMD_MAX,
 36};
 37
 38enum octep_pfvf_mbox_word_type {
 39	OCTEP_PFVF_MBOX_TYPE_CMD,
 40	OCTEP_PFVF_MBOX_TYPE_RSP_ACK,
 41	OCTEP_PFVF_MBOX_TYPE_RSP_NACK,
 42};
 43
 44enum octep_pfvf_mbox_cmd_status {
 45	OCTEP_PFVF_MBOX_CMD_STATUS_NOT_SETUP = 1,
 46	OCTEP_PFVF_MBOX_CMD_STATUS_TIMEDOUT = 2,
 47	OCTEP_PFVF_MBOX_CMD_STATUS_NACK = 3,
 48	OCTEP_PFVF_MBOX_CMD_STATUS_BUSY = 4,
 49	OCTEP_PFVF_MBOX_CMD_STATUS_ERR = 5
 50};
 51
 52enum octep_pfvf_link_status {
 53	OCTEP_PFVF_LINK_STATUS_DOWN,
 54	OCTEP_PFVF_LINK_STATUS_UP,
 55};
 56
 57enum octep_pfvf_link_speed {
 58	OCTEP_PFVF_LINK_SPEED_NONE,
 59	OCTEP_PFVF_LINK_SPEED_1000,
 60	OCTEP_PFVF_LINK_SPEED_10000,
 61	OCTEP_PFVF_LINK_SPEED_25000,
 62	OCTEP_PFVF_LINK_SPEED_40000,
 63	OCTEP_PFVF_LINK_SPEED_50000,
 64	OCTEP_PFVF_LINK_SPEED_100000,
 65	OCTEP_PFVF_LINK_SPEED_LAST,
 66};
 67
 68enum octep_pfvf_link_duplex {
 69	OCTEP_PFVF_LINK_HALF_DUPLEX,
 70	OCTEP_PFVF_LINK_FULL_DUPLEX,
 71};
 72
 73enum octep_pfvf_link_autoneg {
 74	OCTEP_PFVF_LINK_AUTONEG,
 75	OCTEP_PFVF_LINK_FIXED,
 76};
 77
 78#define OCTEP_PFVF_MBOX_TIMEOUT_WAIT_COUNT  8000
 79#define OCTEP_PFVF_MBOX_TIMEOUT_WAIT_UDELAY 1000
 80#define OCTEP_PFVF_MBOX_MAX_RETRIES    2
 81#define OCTEP_PFVF_MBOX_VERSION        0
 82#define OCTEP_PFVF_MBOX_MAX_DATA_SIZE  6
 83#define OCTEP_PFVF_MBOX_MAX_DATA_BUF_SIZE 320
 84#define OCTEP_PFVF_MBOX_MORE_FRAG_FLAG 1
 85
 86union octep_pfvf_mbox_word {
 87	u64 u64;
 88	struct {
 89		u64 opcode:8;
 90		u64 type:2;
 91		u64 rsvd:6;
 92		u64 data:48;
 93	} s;
 94	struct {
 95		u64 opcode:8;
 96		u64 type:2;
 97		u64 frag:1;
 98		u64 rsvd:5;
 99		u8 data[6];
100	} s_data;
101	struct {
102		u64 opcode:8;
103		u64 type:2;
104		u64 rsvd:6;
105		u64 version:48;
106	} s_version;
107	struct {
108		u64 opcode:8;
109		u64 type:2;
110		u64 rsvd:6;
111		u8 mac_addr[6];
112	} s_set_mac;
113	struct {
114		u64 opcode:8;
115		u64 type:2;
116		u64 rsvd:6;
117		u64 mtu:48;
118	} s_set_mtu;
119	struct {
120		u64 opcode:8;
121		u64 type:2;
122		u64 state:1;
123		u64 rsvd:53;
124	} s_link_state;
125	struct {
126		u64 opcode:8;
127		u64 type:2;
128		u64 status:1;
129		u64 rsvd:53;
130	} s_link_status;
131	struct {
132		u64 opcode:8;
133		u64 type:2;
134		u64 pkind:8;
135		u64 fsz:8;
136		u64 rx_ol_flags:16;
137		u64 tx_ol_flags:16;
138		u64 rsvd:6;
139	} s_fw_info;
140	struct {
141		u64 opcode:8;
142		u64 type:2;
143		u64 rsvd:22;
144		u64 rx_ol_flags:16;
145		u64 tx_ol_flags:16;
146	} s_offloads;
147} __packed;
148
149int octep_vf_setup_mbox(struct octep_vf_device *oct);
150void octep_vf_delete_mbox(struct octep_vf_device *oct);
151int octep_vf_mbox_send_cmd(struct octep_vf_device *oct, union octep_pfvf_mbox_word cmd,
152			   union octep_pfvf_mbox_word *rsp);
153int octep_vf_mbox_bulk_read(struct octep_vf_device *oct, enum octep_pfvf_mbox_opcode opcode,
154			    u8 *data, int *size);
155int octep_vf_mbox_set_mtu(struct octep_vf_device *oct, int mtu);
156int octep_vf_mbox_set_mac_addr(struct octep_vf_device *oct, char *mac_addr);
157int octep_vf_mbox_get_mac_addr(struct octep_vf_device *oct, char *mac_addr);
158int octep_vf_mbox_version_check(struct octep_vf_device *oct);
159int octep_vf_mbox_set_rx_state(struct octep_vf_device *oct, bool state);
160int octep_vf_mbox_set_link_status(struct octep_vf_device *oct, bool status);
161int octep_vf_mbox_get_link_status(struct octep_vf_device *oct, u8 *oper_up);
162int octep_vf_mbox_dev_remove(struct octep_vf_device *oct);
163int octep_vf_mbox_get_fw_info(struct octep_vf_device *oct);
164int octep_vf_mbox_set_offloads(struct octep_vf_device *oct, u16 tx_offloads, u16 rx_offloads);
165
166#endif