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 struct hinic_port_mac_cmd { 49 u8 status; 50 u8 version; 51 u8 rsvd0[6]; 52 53 u16 func_idx; 54 u16 vlan_id; 55 u16 rsvd1; 56 unsigned char mac[ETH_ALEN]; 57 }; 58 59 struct hinic_port_mtu_cmd { 60 u8 status; 61 u8 version; 62 u8 rsvd0[6]; 63 64 u16 func_idx; 65 u16 rsvd1; 66 u32 mtu; 67 }; 68 69 struct hinic_port_vlan_cmd { 70 u8 status; 71 u8 version; 72 u8 rsvd0[6]; 73 74 u16 func_idx; 75 u16 vlan_id; 76 }; 77 78 struct hinic_port_rx_mode_cmd { 79 u8 status; 80 u8 version; 81 u8 rsvd0[6]; 82 83 u16 func_idx; 84 u16 rsvd; 85 u32 rx_mode; 86 }; 87 88 struct hinic_port_link_cmd { 89 u8 status; 90 u8 version; 91 u8 rsvd0[6]; 92 93 u16 func_idx; 94 u8 state; 95 u8 rsvd1; 96 }; 97 98 struct hinic_port_state_cmd { 99 u8 status; 100 u8 version; 101 u8 rsvd0[6]; 102 103 u8 state; 104 u8 rsvd1[3]; 105 }; 106 107 struct hinic_port_link_status { 108 u8 status; 109 u8 version; 110 u8 rsvd0[6]; 111 112 u16 rsvd1; 113 u8 link; 114 u8 rsvd2; 115 }; 116 117 struct hinic_port_func_state_cmd { 118 u8 status; 119 u8 version; 120 u8 rsvd0[6]; 121 122 u16 func_idx; 123 u16 rsvd1; 124 u8 state; 125 u8 rsvd2[3]; 126 }; 127 128 int hinic_port_add_mac(struct hinic_dev *nic_dev, const u8 *addr, 129 u16 vlan_id); 130 131 int hinic_port_del_mac(struct hinic_dev *nic_dev, const u8 *addr, 132 u16 vlan_id); 133 134 int hinic_port_get_mac(struct hinic_dev *nic_dev, u8 *addr); 135 136 int hinic_port_set_mtu(struct hinic_dev *nic_dev, int new_mtu); 137 138 int hinic_port_add_vlan(struct hinic_dev *nic_dev, u16 vlan_id); 139 140 int hinic_port_del_vlan(struct hinic_dev *nic_dev, u16 vlan_id); 141 142 int hinic_port_set_rx_mode(struct hinic_dev *nic_dev, u32 rx_mode); 143 144 int hinic_port_link_state(struct hinic_dev *nic_dev, 145 enum hinic_port_link_state *link_state); 146 147 int hinic_port_set_state(struct hinic_dev *nic_dev, 148 enum hinic_port_state state); 149 150 int hinic_port_set_func_state(struct hinic_dev *nic_dev, 151 enum hinic_func_port_state state); 152 153 #endif 154