1 /* 2 * Huawei HiNIC PCI Express Linux driver 3 * Copyright(c) 2017 Huawei Technologies Co., Ltd 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms and conditions of the GNU General Public License, 7 * version 2, as published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * for more details. 13 * 14 */ 15 16 #ifndef HINIC_PORT_H 17 #define HINIC_PORT_H 18 19 #include <linux/types.h> 20 #include <linux/etherdevice.h> 21 #include <linux/bitops.h> 22 23 #include "hinic_dev.h" 24 25 enum hinic_rx_mode { 26 HINIC_RX_MODE_UC = BIT(0), 27 HINIC_RX_MODE_MC = BIT(1), 28 HINIC_RX_MODE_BC = BIT(2), 29 HINIC_RX_MODE_MC_ALL = BIT(3), 30 HINIC_RX_MODE_PROMISC = BIT(4), 31 }; 32 33 enum hinic_port_link_state { 34 HINIC_LINK_STATE_DOWN, 35 HINIC_LINK_STATE_UP, 36 }; 37 38 enum hinic_port_state { 39 HINIC_PORT_DISABLE = 0, 40 HINIC_PORT_ENABLE = 3, 41 }; 42 43 enum hinic_func_port_state { 44 HINIC_FUNC_PORT_DISABLE = 0, 45 HINIC_FUNC_PORT_ENABLE = 2, 46 }; 47 48 enum hinic_autoneg_cap { 49 HINIC_AUTONEG_UNSUPPORTED, 50 HINIC_AUTONEG_SUPPORTED, 51 }; 52 53 enum hinic_autoneg_state { 54 HINIC_AUTONEG_DISABLED, 55 HINIC_AUTONEG_ACTIVE, 56 }; 57 58 enum hinic_duplex { 59 HINIC_DUPLEX_HALF, 60 HINIC_DUPLEX_FULL, 61 }; 62 63 enum hinic_speed { 64 HINIC_SPEED_10MB_LINK = 0, 65 HINIC_SPEED_100MB_LINK, 66 HINIC_SPEED_1000MB_LINK, 67 HINIC_SPEED_10GB_LINK, 68 HINIC_SPEED_25GB_LINK, 69 HINIC_SPEED_40GB_LINK, 70 HINIC_SPEED_100GB_LINK, 71 72 HINIC_SPEED_UNKNOWN = 0xFF, 73 }; 74 75 enum hinic_tso_state { 76 HINIC_TSO_DISABLE = 0, 77 HINIC_TSO_ENABLE = 1, 78 }; 79 80 struct hinic_port_mac_cmd { 81 u8 status; 82 u8 version; 83 u8 rsvd0[6]; 84 85 u16 func_idx; 86 u16 vlan_id; 87 u16 rsvd1; 88 unsigned char mac[ETH_ALEN]; 89 }; 90 91 struct hinic_port_mtu_cmd { 92 u8 status; 93 u8 version; 94 u8 rsvd0[6]; 95 96 u16 func_idx; 97 u16 rsvd1; 98 u32 mtu; 99 }; 100 101 struct hinic_port_vlan_cmd { 102 u8 status; 103 u8 version; 104 u8 rsvd0[6]; 105 106 u16 func_idx; 107 u16 vlan_id; 108 }; 109 110 struct hinic_port_rx_mode_cmd { 111 u8 status; 112 u8 version; 113 u8 rsvd0[6]; 114 115 u16 func_idx; 116 u16 rsvd; 117 u32 rx_mode; 118 }; 119 120 struct hinic_port_link_cmd { 121 u8 status; 122 u8 version; 123 u8 rsvd0[6]; 124 125 u16 func_idx; 126 u8 state; 127 u8 rsvd1; 128 }; 129 130 struct hinic_port_state_cmd { 131 u8 status; 132 u8 version; 133 u8 rsvd0[6]; 134 135 u8 state; 136 u8 rsvd1[3]; 137 }; 138 139 struct hinic_port_link_status { 140 u8 status; 141 u8 version; 142 u8 rsvd0[6]; 143 144 u16 rsvd1; 145 u8 link; 146 u8 rsvd2; 147 }; 148 149 struct hinic_port_func_state_cmd { 150 u8 status; 151 u8 version; 152 u8 rsvd0[6]; 153 154 u16 func_idx; 155 u16 rsvd1; 156 u8 state; 157 u8 rsvd2[3]; 158 }; 159 160 struct hinic_port_cap { 161 u8 status; 162 u8 version; 163 u8 rsvd0[6]; 164 165 u16 func_idx; 166 u16 rsvd1; 167 u8 port_type; 168 u8 autoneg_cap; 169 u8 autoneg_state; 170 u8 duplex; 171 u8 speed; 172 u8 rsvd2[3]; 173 }; 174 175 struct hinic_tso_config { 176 u8 status; 177 u8 version; 178 u8 rsvd0[6]; 179 180 u16 func_id; 181 u16 rsvd1; 182 u8 tso_en; 183 u8 resv2[3]; 184 }; 185 186 struct hinic_checksum_offload { 187 u8 status; 188 u8 version; 189 u8 rsvd0[6]; 190 191 u16 func_id; 192 u16 rsvd1; 193 u32 rx_csum_offload; 194 }; 195 int hinic_port_add_mac(struct hinic_dev *nic_dev, const u8 *addr, 196 u16 vlan_id); 197 198 int hinic_port_del_mac(struct hinic_dev *nic_dev, const u8 *addr, 199 u16 vlan_id); 200 201 int hinic_port_get_mac(struct hinic_dev *nic_dev, u8 *addr); 202 203 int hinic_port_set_mtu(struct hinic_dev *nic_dev, int new_mtu); 204 205 int hinic_port_add_vlan(struct hinic_dev *nic_dev, u16 vlan_id); 206 207 int hinic_port_del_vlan(struct hinic_dev *nic_dev, u16 vlan_id); 208 209 int hinic_port_set_rx_mode(struct hinic_dev *nic_dev, u32 rx_mode); 210 211 int hinic_port_link_state(struct hinic_dev *nic_dev, 212 enum hinic_port_link_state *link_state); 213 214 int hinic_port_set_state(struct hinic_dev *nic_dev, 215 enum hinic_port_state state); 216 217 int hinic_port_set_func_state(struct hinic_dev *nic_dev, 218 enum hinic_func_port_state state); 219 220 int hinic_port_get_cap(struct hinic_dev *nic_dev, 221 struct hinic_port_cap *port_cap); 222 223 int hinic_port_set_tso(struct hinic_dev *nic_dev, enum hinic_tso_state state); 224 225 int hinic_set_rx_csum_offload(struct hinic_dev *nic_dev, u32 en); 226 #endif 227