brintos

brintos / linux-shallow public Read only

0
0
Text · 4.1 KiB · 9b5efad Raw
167 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_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_V216};17 18#define OCTEP_PFVF_MBOX_VERSION_CURRENT OCTEP_PFVF_MBOX_VERSION_V219 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 = 550};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  800079#define OCTEP_PFVF_MBOX_TIMEOUT_WAIT_UDELAY 100080#define OCTEP_PFVF_MBOX_MAX_RETRIES    281#define OCTEP_PFVF_MBOX_VERSION        082#define OCTEP_PFVF_MBOX_MAX_DATA_SIZE  683#define OCTEP_PFVF_MBOX_MAX_DATA_BUF_SIZE 32084#define OCTEP_PFVF_MBOX_MORE_FRAG_FLAG 185 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#endif167