brintos

brintos / linux-shallow public Read only

0
0
Text · 11.0 KiB · 0b823be Raw
431 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Marvell Octeon EP (EndPoint) Ethernet Driver3 *4 * Copyright (C) 2020 Marvell.5 *6 */7#ifndef __OCTEP_CTRL_NET_H__8#define __OCTEP_CTRL_NET_H__9 10#include "octep_cp_version.h"11 12#define OCTEP_CTRL_NET_INVALID_VFID	(-1)13 14/* Supported commands */15enum octep_ctrl_net_cmd {16	OCTEP_CTRL_NET_CMD_GET = 0,17	OCTEP_CTRL_NET_CMD_SET,18};19 20/* Supported states */21enum octep_ctrl_net_state {22	OCTEP_CTRL_NET_STATE_DOWN = 0,23	OCTEP_CTRL_NET_STATE_UP,24};25 26/* Supported replies */27enum octep_ctrl_net_reply {28	OCTEP_CTRL_NET_REPLY_OK = 0,29	OCTEP_CTRL_NET_REPLY_GENERIC_FAIL,30	OCTEP_CTRL_NET_REPLY_INVALID_PARAM,31};32 33/* Supported host to fw commands */34enum octep_ctrl_net_h2f_cmd {35	OCTEP_CTRL_NET_H2F_CMD_INVALID = 0,36	OCTEP_CTRL_NET_H2F_CMD_MTU,37	OCTEP_CTRL_NET_H2F_CMD_MAC,38	OCTEP_CTRL_NET_H2F_CMD_GET_IF_STATS,39	OCTEP_CTRL_NET_H2F_CMD_GET_XSTATS,40	OCTEP_CTRL_NET_H2F_CMD_GET_Q_STATS,41	OCTEP_CTRL_NET_H2F_CMD_LINK_STATUS,42	OCTEP_CTRL_NET_H2F_CMD_RX_STATE,43	OCTEP_CTRL_NET_H2F_CMD_LINK_INFO,44	OCTEP_CTRL_NET_H2F_CMD_GET_INFO,45	OCTEP_CTRL_NET_H2F_CMD_DEV_REMOVE,46	OCTEP_CTRL_NET_H2F_CMD_OFFLOADS,47	OCTEP_CTRL_NET_H2F_CMD_MAX48};49 50/* Supported fw to host commands */51enum octep_ctrl_net_f2h_cmd {52	OCTEP_CTRL_NET_F2H_CMD_INVALID = 0,53	OCTEP_CTRL_NET_F2H_CMD_LINK_STATUS,54	OCTEP_CTRL_NET_F2H_CMD_MAX55};56 57union octep_ctrl_net_req_hdr {58	u64 words[1];59	struct {60		/* sender id */61		u16 sender;62		/* receiver id */63		u16 receiver;64		/* octep_ctrl_net_h2t_cmd */65		u16 cmd;66		/* reserved */67		u16 rsvd0;68	} s;69};70 71/* get/set mtu request */72struct octep_ctrl_net_h2f_req_cmd_mtu {73	/* enum octep_ctrl_net_cmd */74	u16 cmd;75	/* 0-65535 */76	u16 val;77};78 79/* get/set mac request */80struct octep_ctrl_net_h2f_req_cmd_mac {81	/* enum octep_ctrl_net_cmd */82	u16 cmd;83	/* xx:xx:xx:xx:xx:xx */84	u8 addr[ETH_ALEN];85};86 87/* get/set link state, rx state */88struct octep_ctrl_net_h2f_req_cmd_state {89	/* enum octep_ctrl_net_cmd */90	u16 cmd;91	/* enum octep_ctrl_net_state */92	u16 state;93};94 95/* link info */96struct octep_ctrl_net_link_info {97	/* Bitmap of Supported link speeds/modes */98	u64 supported_modes;99	/* Bitmap of Advertised link speeds/modes */100	u64 advertised_modes;101	/* Autonegotation state; bit 0=disabled; bit 1=enabled */102	u8 autoneg;103	/* Pause frames setting. bit 0=disabled; bit 1=enabled */104	u8 pause;105	/* Negotiated link speed in Mbps */106	u32 speed;107};108 109/* get/set link info */110struct octep_ctrl_net_h2f_req_cmd_link_info {111	/* enum octep_ctrl_net_cmd */112	u16 cmd;113	/* struct octep_ctrl_net_link_info */114	struct octep_ctrl_net_link_info info;115};116 117/* offloads */118struct octep_ctrl_net_offloads {119	/* supported rx offloads OCTEP_RX_OFFLOAD_* */120	u16 rx_offloads;121	/* supported tx offloads OCTEP_TX_OFFLOAD_* */122	u16 tx_offloads;123	/* reserved */124	u32 reserved_offloads;125	/* extra offloads */126	u64 ext_offloads;127};128 129/* get/set offloads */130struct octep_ctrl_net_h2f_req_cmd_offloads {131	/* enum octep_ctrl_net_cmd */132	u16 cmd;133	/* struct octep_ctrl_net_offloads */134	struct octep_ctrl_net_offloads offloads;135};136 137/* Host to fw request data */138struct octep_ctrl_net_h2f_req {139	union octep_ctrl_net_req_hdr hdr;140	union {141		struct octep_ctrl_net_h2f_req_cmd_mtu mtu;142		struct octep_ctrl_net_h2f_req_cmd_mac mac;143		struct octep_ctrl_net_h2f_req_cmd_state link;144		struct octep_ctrl_net_h2f_req_cmd_state rx;145		struct octep_ctrl_net_h2f_req_cmd_link_info link_info;146		struct octep_ctrl_net_h2f_req_cmd_offloads offloads;147	};148} __packed;149 150union octep_ctrl_net_resp_hdr {151	u64 words[1];152	struct {153		/* sender id */154		u16 sender;155		/* receiver id */156		u16 receiver;157		/* octep_ctrl_net_h2t_cmd */158		u16 cmd;159		/* octep_ctrl_net_reply */160		u16 reply;161	} s;162};163 164/* get mtu response */165struct octep_ctrl_net_h2f_resp_cmd_mtu {166	/* 0-65535 */167	u16 val;168};169 170/* get mac response */171struct octep_ctrl_net_h2f_resp_cmd_mac {172	/* xx:xx:xx:xx:xx:xx */173	u8 addr[ETH_ALEN];174};175 176/* get if_stats, xstats, q_stats request */177struct octep_ctrl_net_h2f_resp_cmd_get_stats {178	struct octep_iface_rx_stats rx_stats;179	struct octep_iface_tx_stats tx_stats;180};181 182/* get link state, rx state response */183struct octep_ctrl_net_h2f_resp_cmd_state {184	/* enum octep_ctrl_net_state */185	u16 state;186};187 188/* get info request */189struct octep_ctrl_net_h2f_resp_cmd_get_info {190	struct octep_fw_info fw_info;191};192 193/* Host to fw response data */194struct octep_ctrl_net_h2f_resp {195	union octep_ctrl_net_resp_hdr hdr;196	union {197		struct octep_ctrl_net_h2f_resp_cmd_mtu mtu;198		struct octep_ctrl_net_h2f_resp_cmd_mac mac;199		struct octep_ctrl_net_h2f_resp_cmd_get_stats if_stats;200		struct octep_ctrl_net_h2f_resp_cmd_state link;201		struct octep_ctrl_net_h2f_resp_cmd_state rx;202		struct octep_ctrl_net_link_info link_info;203		struct octep_ctrl_net_h2f_resp_cmd_get_info info;204		struct octep_ctrl_net_offloads offloads;205	};206} __packed;207 208/* link state notofication */209struct octep_ctrl_net_f2h_req_cmd_state {210	/* enum octep_ctrl_net_state */211	u16 state;212};213 214/* Fw to host request data */215struct octep_ctrl_net_f2h_req {216	union octep_ctrl_net_req_hdr hdr;217	union {218		struct octep_ctrl_net_f2h_req_cmd_state link;219	};220};221 222/* Fw to host response data */223struct octep_ctrl_net_f2h_resp {224	union octep_ctrl_net_resp_hdr hdr;225};226 227/* Max data size to be transferred over mbox */228union octep_ctrl_net_max_data {229	struct octep_ctrl_net_h2f_req h2f_req;230	struct octep_ctrl_net_h2f_resp h2f_resp;231	struct octep_ctrl_net_f2h_req f2h_req;232	struct octep_ctrl_net_f2h_resp f2h_resp;233};234 235struct octep_ctrl_net_wait_data {236	struct list_head list;237	int done;238	struct octep_ctrl_mbox_msg msg;239	union {240		struct octep_ctrl_net_h2f_req req;241		struct octep_ctrl_net_h2f_resp resp;242	} data;243};244 245/**246 * octep_ctrl_net_init() - Initialize data for ctrl net.247 *248 * @oct: non-null pointer to struct octep_device.249 *250 * return value: 0 on success, -errno on error.251 */252int octep_ctrl_net_init(struct octep_device *oct);253 254/** 255 * octep_ctrl_net_get_link_status() - Get link status from firmware.256 *257 * @oct: non-null pointer to struct octep_device.258 * @vfid: Index of virtual function.259 *260 * return value: link status 0=down, 1=up.261 */262int octep_ctrl_net_get_link_status(struct octep_device *oct, int vfid);263 264/**265 * octep_ctrl_net_set_link_status() - Set link status in firmware.266 *267 * @oct: non-null pointer to struct octep_device.268 * @vfid: Index of virtual function.269 * @up: boolean status.270 * @wait_for_response: poll for response.271 *272 * return value: 0 on success, -errno on failure273 */274int octep_ctrl_net_set_link_status(struct octep_device *oct, int vfid, bool up,275				   bool wait_for_response);276 277/**278 * octep_ctrl_net_set_rx_state() - Set rx state in firmware.279 *280 * @oct: non-null pointer to struct octep_device.281 * @vfid: Index of virtual function.282 * @up: boolean status.283 * @wait_for_response: poll for response.284 *285 * return value: 0 on success, -errno on failure.286 */287int octep_ctrl_net_set_rx_state(struct octep_device *oct, int vfid, bool up,288				bool wait_for_response);289 290/** 291 * octep_ctrl_net_get_mac_addr() - Get mac address from firmware.292 *293 * @oct: non-null pointer to struct octep_device.294 * @vfid: Index of virtual function.295 * @addr: non-null pointer to mac address.296 *297 * return value: 0 on success, -errno on failure.298 */299int octep_ctrl_net_get_mac_addr(struct octep_device *oct, int vfid, u8 *addr);300 301/**302 * octep_ctrl_net_set_mac_addr() - Set mac address in firmware.303 *304 * @oct: non-null pointer to struct octep_device.305 * @vfid: Index of virtual function.306 * @addr: non-null pointer to mac address.307 * @wait_for_response: poll for response.308 *309 * return value: 0 on success, -errno on failure.310 */311int octep_ctrl_net_set_mac_addr(struct octep_device *oct, int vfid, u8 *addr,312				bool wait_for_response);313 314/**315 * octep_ctrl_net_get_mtu() - Get max MTU from firmware.316 *317 * @oct: non-null pointer to struct octep_device.318 * @vfid: Index of virtual function.319 *320 * return value: mtu on success, -errno on failure.321 */322int octep_ctrl_net_get_mtu(struct octep_device *oct, int vfid);323 324/** 325 * octep_ctrl_net_set_mtu() - Set mtu in firmware.326 *327 * @oct: non-null pointer to struct octep_device.328 * @vfid: Index of virtual function.329 * @mtu: mtu.330 * @wait_for_response: poll for response.331 *332 * return value: 0 on success, -errno on failure.333 */334int octep_ctrl_net_set_mtu(struct octep_device *oct, int vfid, int mtu,335			   bool wait_for_response);336 337/**338 * octep_ctrl_net_get_if_stats() - Get interface statistics from firmware.339 *340 * @oct: non-null pointer to struct octep_device.341 * @vfid: Index of virtual function.342 * @rx_stats: non-null pointer struct octep_iface_rx_stats.343 * @tx_stats: non-null pointer struct octep_iface_tx_stats.344 *345 * return value: 0 on success, -errno on failure.346 */347int octep_ctrl_net_get_if_stats(struct octep_device *oct, int vfid,348				struct octep_iface_rx_stats *rx_stats,349				struct octep_iface_tx_stats *tx_stats);350 351/**352 * octep_ctrl_net_get_link_info() - Get link info from firmware.353 *354 * @oct: non-null pointer to struct octep_device.355 * @vfid: Index of virtual function.356 * @link_info: non-null pointer to struct octep_iface_link_info.357 *358 * return value: 0 on success, -errno on failure.359 */360int octep_ctrl_net_get_link_info(struct octep_device *oct, int vfid,361				 struct octep_iface_link_info *link_info);362 363/**364 * octep_ctrl_net_set_link_info() - Set link info in firmware.365 *366 * @oct: non-null pointer to struct octep_device.367 * @vfid: Index of virtual function.368 * @link_info: non-null pointer to struct octep_iface_link_info.369 * @wait_for_response: poll for response.370 *371 * return value: 0 on success, -errno on failure.372 */373int octep_ctrl_net_set_link_info(struct octep_device *oct,374				 int vfid,375				 struct octep_iface_link_info *link_info,376				 bool wait_for_response);377 378/**379 * octep_ctrl_net_recv_fw_messages() - Poll for firmware messages and process them.380 *381 * @oct: non-null pointer to struct octep_device.382 */383void octep_ctrl_net_recv_fw_messages(struct octep_device *oct);384 385/**386 * octep_ctrl_net_get_info() - Get info from firmware.387 *388 * @oct: non-null pointer to struct octep_device.389 * @vfid: Index of virtual function.390 * @info: non-null pointer to struct octep_fw_info.391 *392 * return value: 0 on success, -errno on failure.393 */394int octep_ctrl_net_get_info(struct octep_device *oct, int vfid,395			    struct octep_fw_info *info);396 397/**398 * octep_ctrl_net_dev_remove() - Indicate to firmware that a device unload has happened.399 *400 * @oct: non-null pointer to struct octep_device.401 * @vfid: Index of virtual function.402 *403 * return value: 0 on success, -errno on failure.404 */405int octep_ctrl_net_dev_remove(struct octep_device *oct, int vfid);406 407/**408 * octep_ctrl_net_set_offloads() - Set offloads in firmware.409 *410 * @oct: non-null pointer to struct octep_device.411 * @vfid: Index of virtual function.412 * @offloads: non-null pointer to struct octep_ctrl_net_offloads.413 * @wait_for_response: poll for response.414 *415 * return value: 0 on success, -errno on failure.416 */417int octep_ctrl_net_set_offloads(struct octep_device *oct, int vfid,418				struct octep_ctrl_net_offloads *offloads,419				bool wait_for_response);420 421/**422 * octep_ctrl_net_uninit() - Uninitialize data for ctrl net.423 *424 * @oct: non-null pointer to struct octep_device.425 *426 * return value: 0 on success, -errno on error.427 */428int octep_ctrl_net_uninit(struct octep_device *oct);429 430#endif /* __OCTEP_CTRL_NET_H__ */431