168 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| /* Marvell Octeon EP (EndPoint) Ethernet Driver
 | |
|  *
 | |
|  * Copyright (C) 2020 Marvell.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #ifndef _OCTEP_PFVF_MBOX_H_
 | |
| #define _OCTEP_PFVF_MBOX_H_
 | |
| 
 | |
| /* VF flags */
 | |
| #define OCTEON_PFVF_FLAG_MAC_SET_BY_PF  BIT_ULL(0) /* PF has set VF MAC address */
 | |
| #define OCTEON_SDP_16K_HW_FRS  16380UL
 | |
| #define OCTEON_SDP_64K_HW_FRS  65531UL
 | |
| 
 | |
| /* When a new command is implemented,PF Mbox version should be bumped.
 | |
|  */
 | |
| enum octep_pfvf_mbox_version {
 | |
| 	OCTEP_PFVF_MBOX_VERSION_V0,
 | |
| 	OCTEP_PFVF_MBOX_VERSION_V1,
 | |
| 	OCTEP_PFVF_MBOX_VERSION_V2,
 | |
| };
 | |
| 
 | |
| #define OCTEP_PFVF_MBOX_VERSION_CURRENT	OCTEP_PFVF_MBOX_VERSION_V2
 | |
| 
 | |
| enum octep_pfvf_mbox_opcode {
 | |
| 	OCTEP_PFVF_MBOX_CMD_VERSION,
 | |
| 	OCTEP_PFVF_MBOX_CMD_SET_MTU,
 | |
| 	OCTEP_PFVF_MBOX_CMD_SET_MAC_ADDR,
 | |
| 	OCTEP_PFVF_MBOX_CMD_GET_MAC_ADDR,
 | |
| 	OCTEP_PFVF_MBOX_CMD_GET_LINK_INFO,
 | |
| 	OCTEP_PFVF_MBOX_CMD_GET_STATS,
 | |
| 	OCTEP_PFVF_MBOX_CMD_SET_RX_STATE,
 | |
| 	OCTEP_PFVF_MBOX_CMD_SET_LINK_STATUS,
 | |
| 	OCTEP_PFVF_MBOX_CMD_GET_LINK_STATUS,
 | |
| 	OCTEP_PFVF_MBOX_CMD_GET_MTU,
 | |
| 	OCTEP_PFVF_MBOX_CMD_DEV_REMOVE,
 | |
| 	OCTEP_PFVF_MBOX_CMD_GET_FW_INFO,
 | |
| 	OCTEP_PFVF_MBOX_CMD_SET_OFFLOADS,
 | |
| 	OCTEP_PFVF_MBOX_NOTIF_LINK_STATUS,
 | |
| 	OCTEP_PFVF_MBOX_CMD_MAX,
 | |
| };
 | |
| 
 | |
| enum octep_pfvf_mbox_word_type {
 | |
| 	OCTEP_PFVF_MBOX_TYPE_CMD,
 | |
| 	OCTEP_PFVF_MBOX_TYPE_RSP_ACK,
 | |
| 	OCTEP_PFVF_MBOX_TYPE_RSP_NACK,
 | |
| };
 | |
| 
 | |
| enum octep_pfvf_mbox_cmd_status {
 | |
| 	OCTEP_PFVF_MBOX_CMD_STATUS_NOT_SETUP = 1,
 | |
| 	OCTEP_PFVF_MBOX_CMD_STATUS_TIMEDOUT = 2,
 | |
| 	OCTEP_PFVF_MBOX_CMD_STATUS_NACK = 3,
 | |
| 	OCTEP_PFVF_MBOX_CMD_STATUS_BUSY = 4
 | |
| };
 | |
| 
 | |
| enum octep_pfvf_mbox_state {
 | |
| 	OCTEP_PFVF_MBOX_STATE_IDLE = 0,
 | |
| 	OCTEP_PFVF_MBOX_STATE_BUSY = 1,
 | |
| };
 | |
| 
 | |
| enum octep_pfvf_link_status {
 | |
| 	OCTEP_PFVF_LINK_STATUS_DOWN,
 | |
| 	OCTEP_PFVF_LINK_STATUS_UP,
 | |
| };
 | |
| 
 | |
| enum octep_pfvf_link_speed {
 | |
| 	OCTEP_PFVF_LINK_SPEED_NONE,
 | |
| 	OCTEP_PFVF_LINK_SPEED_1000,
 | |
| 	OCTEP_PFVF_LINK_SPEED_10000,
 | |
| 	OCTEP_PFVF_LINK_SPEED_25000,
 | |
| 	OCTEP_PFVF_LINK_SPEED_40000,
 | |
| 	OCTEP_PFVF_LINK_SPEED_50000,
 | |
| 	OCTEP_PFVF_LINK_SPEED_100000,
 | |
| 	OCTEP_PFVF_LINK_SPEED_LAST,
 | |
| };
 | |
| 
 | |
| enum octep_pfvf_link_duplex {
 | |
| 	OCTEP_PFVF_LINK_HALF_DUPLEX,
 | |
| 	OCTEP_PFVF_LINK_FULL_DUPLEX,
 | |
| };
 | |
| 
 | |
| enum octep_pfvf_link_autoneg {
 | |
| 	OCTEP_PFVF_LINK_AUTONEG,
 | |
| 	OCTEP_PFVF_LINK_FIXED,
 | |
| };
 | |
| 
 | |
| #define OCTEP_PFVF_MBOX_TIMEOUT_MS     500
 | |
| #define OCTEP_PFVF_MBOX_MAX_RETRIES    2
 | |
| #define OCTEP_PFVF_MBOX_MAX_DATA_SIZE  6
 | |
| #define OCTEP_PFVF_MBOX_MORE_FRAG_FLAG 1
 | |
| #define OCTEP_PFVF_MBOX_WRITE_WAIT_TIME msecs_to_jiffies(1)
 | |
| 
 | |
| union octep_pfvf_mbox_word {
 | |
| 	u64 u64;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 rsvd:6;
 | |
| 		u64 data:48;
 | |
| 	} s;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 frag:1;
 | |
| 		u64 rsvd:5;
 | |
| 		u8 data[6];
 | |
| 	} s_data;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 rsvd:6;
 | |
| 		u64 version:48;
 | |
| 	} s_version;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 rsvd:6;
 | |
| 		u8 mac_addr[6];
 | |
| 	} s_set_mac;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 rsvd:6;
 | |
| 		u64 mtu:48;
 | |
| 	} s_set_mtu;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 rsvd:6;
 | |
| 		u64 mtu:48;
 | |
| 	} s_get_mtu;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 state:1;
 | |
| 		u64 rsvd:53;
 | |
| 	} s_link_state;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 status:1;
 | |
| 		u64 rsvd:53;
 | |
| 	} s_link_status;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 pkind:8;
 | |
| 		u64 fsz:8;
 | |
| 		u64 rx_ol_flags:16;
 | |
| 		u64 tx_ol_flags:16;
 | |
| 		u64 rsvd:6;
 | |
| 	} s_fw_info;
 | |
| 	struct {
 | |
| 		u64 opcode:8;
 | |
| 		u64 type:2;
 | |
| 		u64 rsvd:22;
 | |
| 		u64 rx_ol_flags:16;
 | |
| 		u64 tx_ol_flags:16;
 | |
| 	} s_offloads;
 | |
| } __packed;
 | |
| 
 | |
| void octep_pfvf_mbox_work(struct work_struct *work);
 | |
| int octep_setup_pfvf_mbox(struct octep_device *oct);
 | |
| void octep_delete_pfvf_mbox(struct octep_device *oct);
 | |
| void octep_pfvf_notify(struct octep_device *oct, struct octep_ctrl_mbox_msg *msg);
 | |
| #endif
 |