aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
diff options
context:
space:
mode:
authorSony Chacko <sony.chacko@qlogic.com>2012-11-27 23:34:26 -0500
committerDavid S. Miller <davem@davemloft.net>2012-11-28 11:07:43 -0500
commitc70001a952e561775222d28a9e2f2a0075af51f3 (patch)
tree8698785c3426bc26eeb98af21f06a19d6d687e1c /drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
parent3a858a86922f3aeb85a352f3d1ce44c2a99b69a6 (diff)
qlcnic: create file qlcnic_io.c for datapath routines
Physical refactoring of 82xx adapter data path routines. Move data path code to new file qlcnic_io.c Existing data path code has coding stye issues, the code is moved to the new file without fixing the style issues. There is a seperate patch to fix the style issues in qlcnic_io.c Signed-off-by: Sony Chacko <sony.chacko@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic.h')
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic.h115
1 files changed, 24 insertions, 91 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index ec29f7988d42..db4508fa5c93 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -89,16 +89,6 @@
89#define QLCNIC_CT_DEFAULT_RX_BUF_LEN 2048 89#define QLCNIC_CT_DEFAULT_RX_BUF_LEN 2048
90#define QLCNIC_LRO_BUFFER_EXTRA 2048 90#define QLCNIC_LRO_BUFFER_EXTRA 2048
91 91
92/* Opcodes to be used with the commands */
93#define TX_ETHER_PKT 0x01
94#define TX_TCP_PKT 0x02
95#define TX_UDP_PKT 0x03
96#define TX_IP_PKT 0x04
97#define TX_TCP_LSO 0x05
98#define TX_TCP_LSO6 0x06
99#define TX_TCPV6_PKT 0x0b
100#define TX_UDPV6_PKT 0x0c
101
102/* Tx defines */ 92/* Tx defines */
103#define QLCNIC_MAX_FRAGS_PER_TX 14 93#define QLCNIC_MAX_FRAGS_PER_TX 14
104#define MAX_TSO_HEADER_DESC 2 94#define MAX_TSO_HEADER_DESC 2
@@ -147,28 +137,6 @@
147 * Added fileds of tcpHdrSize and ipHdrSize, The driver needs to do it only when 137 * Added fileds of tcpHdrSize and ipHdrSize, The driver needs to do it only when
148 * we are doing LSO (above the 1500 size packet) only. 138 * we are doing LSO (above the 1500 size packet) only.
149 */ 139 */
150
151#define FLAGS_VLAN_TAGGED 0x10
152#define FLAGS_VLAN_OOB 0x40
153
154#define qlcnic_set_tx_vlan_tci(cmd_desc, v) \
155 (cmd_desc)->vlan_TCI = cpu_to_le16(v);
156#define qlcnic_set_cmd_desc_port(cmd_desc, var) \
157 ((cmd_desc)->port_ctxid |= ((var) & 0x0F))
158#define qlcnic_set_cmd_desc_ctxid(cmd_desc, var) \
159 ((cmd_desc)->port_ctxid |= ((var) << 4 & 0xF0))
160
161#define qlcnic_set_tx_port(_desc, _port) \
162 ((_desc)->port_ctxid = ((_port) & 0xf) | (((_port) << 4) & 0xf0))
163
164#define qlcnic_set_tx_flags_opcode(_desc, _flags, _opcode) \
165 ((_desc)->flags_opcode |= \
166 cpu_to_le16(((_flags) & 0x7f) | (((_opcode) & 0x3f) << 7)))
167
168#define qlcnic_set_tx_frags_len(_desc, _frags, _len) \
169 ((_desc)->nfrags__length = \
170 cpu_to_le32(((_frags) & 0xff) | (((_len) & 0xffffff) << 8)))
171
172struct cmd_desc_type0 { 140struct cmd_desc_type0 {
173 u8 tcp_hdr_offset; /* For LSO only */ 141 u8 tcp_hdr_offset; /* For LSO only */
174 u8 ip_hdr_offset; /* For LSO only */ 142 u8 ip_hdr_offset; /* For LSO only */
@@ -203,65 +171,6 @@ struct rcv_desc {
203 __le64 addr_buffer; 171 __le64 addr_buffer;
204} __packed; 172} __packed;
205 173
206/* opcode field in status_desc */
207#define QLCNIC_SYN_OFFLOAD 0x03
208#define QLCNIC_RXPKT_DESC 0x04
209#define QLCNIC_OLD_RXPKT_DESC 0x3f
210#define QLCNIC_RESPONSE_DESC 0x05
211#define QLCNIC_LRO_DESC 0x12
212
213/* for status field in status_desc */
214#define STATUS_CKSUM_LOOP 0
215#define STATUS_CKSUM_OK 2
216
217/* owner bits of status_desc */
218#define STATUS_OWNER_HOST (0x1ULL << 56)
219#define STATUS_OWNER_PHANTOM (0x2ULL << 56)
220
221/* Status descriptor:
222 0-3 port, 4-7 status, 8-11 type, 12-27 total_length
223 28-43 reference_handle, 44-47 protocol, 48-52 pkt_offset
224 53-55 desc_cnt, 56-57 owner, 58-63 opcode
225 */
226#define qlcnic_get_sts_port(sts_data) \
227 ((sts_data) & 0x0F)
228#define qlcnic_get_sts_status(sts_data) \
229 (((sts_data) >> 4) & 0x0F)
230#define qlcnic_get_sts_type(sts_data) \
231 (((sts_data) >> 8) & 0x0F)
232#define qlcnic_get_sts_totallength(sts_data) \
233 (((sts_data) >> 12) & 0xFFFF)
234#define qlcnic_get_sts_refhandle(sts_data) \
235 (((sts_data) >> 28) & 0xFFFF)
236#define qlcnic_get_sts_prot(sts_data) \
237 (((sts_data) >> 44) & 0x0F)
238#define qlcnic_get_sts_pkt_offset(sts_data) \
239 (((sts_data) >> 48) & 0x1F)
240#define qlcnic_get_sts_desc_cnt(sts_data) \
241 (((sts_data) >> 53) & 0x7)
242#define qlcnic_get_sts_opcode(sts_data) \
243 (((sts_data) >> 58) & 0x03F)
244
245#define qlcnic_get_lro_sts_refhandle(sts_data) \
246 ((sts_data) & 0x0FFFF)
247#define qlcnic_get_lro_sts_length(sts_data) \
248 (((sts_data) >> 16) & 0x0FFFF)
249#define qlcnic_get_lro_sts_l2_hdr_offset(sts_data) \
250 (((sts_data) >> 32) & 0x0FF)
251#define qlcnic_get_lro_sts_l4_hdr_offset(sts_data) \
252 (((sts_data) >> 40) & 0x0FF)
253#define qlcnic_get_lro_sts_timestamp(sts_data) \
254 (((sts_data) >> 48) & 0x1)
255#define qlcnic_get_lro_sts_type(sts_data) \
256 (((sts_data) >> 49) & 0x7)
257#define qlcnic_get_lro_sts_push_flag(sts_data) \
258 (((sts_data) >> 52) & 0x1)
259#define qlcnic_get_lro_sts_seq_number(sts_data) \
260 ((sts_data) & 0x0FFFFFFFF)
261#define qlcnic_get_lro_sts_mss(sts_data1) \
262 ((sts_data1 >> 32) & 0x0FFFF)
263
264
265struct status_desc { 174struct status_desc {
266 __le64 status_desc_data[2]; 175 __le64 status_desc_data[2];
267} __attribute__ ((aligned(16))); 176} __attribute__ ((aligned(16)));
@@ -1648,6 +1557,15 @@ int qlcnic_clear_esw_stats(struct qlcnic_adapter *adapter, u8, u8, u8);
1648int qlcnic_get_mac_stats(struct qlcnic_adapter *, struct qlcnic_mac_statistics *); 1557int qlcnic_get_mac_stats(struct qlcnic_adapter *, struct qlcnic_mac_statistics *);
1649extern int qlcnic_config_tso; 1558extern int qlcnic_config_tso;
1650 1559
1560int qlcnic_napi_add(struct qlcnic_adapter *, struct net_device *);
1561void qlcnic_napi_del(struct qlcnic_adapter *adapter);
1562void qlcnic_napi_enable(struct qlcnic_adapter *adapter);
1563void qlcnic_napi_disable(struct qlcnic_adapter *adapter);
1564int qlcnic_alloc_sds_rings(struct qlcnic_recv_context *, int);
1565void qlcnic_free_sds_rings(struct qlcnic_recv_context *);
1566void qlcnic_free_tx_rings(struct qlcnic_adapter *);
1567int qlcnic_alloc_tx_rings(struct qlcnic_adapter *, struct net_device *);
1568
1651/* 1569/*
1652 * QLOGIC Board information 1570 * QLOGIC Board information
1653 */ 1571 */
@@ -1694,6 +1612,21 @@ static inline u32 qlcnic_tx_avail(struct qlcnic_host_tx_ring *tx_ring)
1694 tx_ring->producer; 1612 tx_ring->producer;
1695} 1613}
1696 1614
1615static inline void qlcnic_disable_int(struct qlcnic_host_sds_ring *sds_ring)
1616{
1617 writel(0, sds_ring->crb_intr_mask);
1618}
1619
1620static inline void qlcnic_enable_int(struct qlcnic_host_sds_ring *sds_ring)
1621{
1622 struct qlcnic_adapter *adapter = sds_ring->adapter;
1623
1624 writel(0x1, sds_ring->crb_intr_mask);
1625
1626 if (!QLCNIC_IS_MSI_FAMILY(adapter))
1627 writel(0xfbff, adapter->tgt_mask_reg);
1628}
1629
1697extern const struct ethtool_ops qlcnic_ethtool_ops; 1630extern const struct ethtool_ops qlcnic_ethtool_ops;
1698extern const struct ethtool_ops qlcnic_ethtool_failed_ops; 1631extern const struct ethtool_ops qlcnic_ethtool_failed_ops;
1699 1632