cxgb4i.c (e0eed8ab7379faba26f9d85a5904b8292dc4d8b9) cxgb4i.c (586be7cb694fdbb3a35cc35c03387ce0fc534572)
1/*
2 * cxgb4i.c: Chelsio T4 iSCSI driver.
3 *
4 * Copyright (c) 2010-2015 Chelsio Communications, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation.

--- 175 unchanged lines hidden (view full) ---

184
185 return len <= MAX_IMM_TX_PKT_LEN;
186}
187
188static void send_act_open_req(struct cxgbi_sock *csk, struct sk_buff *skb,
189 struct l2t_entry *e)
190{
191 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
1/*
2 * cxgb4i.c: Chelsio T4 iSCSI driver.
3 *
4 * Copyright (c) 2010-2015 Chelsio Communications, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation.

--- 175 unchanged lines hidden (view full) ---

184
185 return len <= MAX_IMM_TX_PKT_LEN;
186}
187
188static void send_act_open_req(struct cxgbi_sock *csk, struct sk_buff *skb,
189 struct l2t_entry *e)
190{
191 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
192 int t4 = is_t4(lldi->adapter_type);
193 int wscale = cxgbi_sock_compute_wscale(csk->mss_idx);
194 unsigned long long opt0;
195 unsigned int opt2;
196 unsigned int qid_atid = ((unsigned int)csk->atid) |
197 (((unsigned int)csk->rss_qid) << 14);
198
199 opt0 = KEEP_ALIVE_F |
200 WND_SCALE_V(wscale) |

--- 26 unchanged lines hidden (view full) ---

227 opt2 |= RX_FC_VALID_F;
228 req->opt2 = cpu_to_be32(opt2);
229
230 log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
231 "csk t4 0x%p, %pI4:%u-%pI4:%u, atid %d, qid %u.\n",
232 csk, &req->local_ip, ntohs(req->local_port),
233 &req->peer_ip, ntohs(req->peer_port),
234 csk->atid, csk->rss_qid);
192 int wscale = cxgbi_sock_compute_wscale(csk->mss_idx);
193 unsigned long long opt0;
194 unsigned int opt2;
195 unsigned int qid_atid = ((unsigned int)csk->atid) |
196 (((unsigned int)csk->rss_qid) << 14);
197
198 opt0 = KEEP_ALIVE_F |
199 WND_SCALE_V(wscale) |

--- 26 unchanged lines hidden (view full) ---

226 opt2 |= RX_FC_VALID_F;
227 req->opt2 = cpu_to_be32(opt2);
228
229 log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
230 "csk t4 0x%p, %pI4:%u-%pI4:%u, atid %d, qid %u.\n",
231 csk, &req->local_ip, ntohs(req->local_port),
232 &req->peer_ip, ntohs(req->peer_port),
233 csk->atid, csk->rss_qid);
235 } else {
234 } else if (is_t5(lldi->adapter_type)) {
236 struct cpl_t5_act_open_req *req =
237 (struct cpl_t5_act_open_req *)skb->head;
238 u32 isn = (prandom_u32() & ~7UL) - 1;
239
240 INIT_TP_WR(req, 0);
241 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ,
242 qid_atid));
243 req->local_port = csk->saddr.sin_port;

--- 11 unchanged lines hidden (view full) ---

255
256 req->opt2 = cpu_to_be32(opt2);
257
258 log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
259 "csk t5 0x%p, %pI4:%u-%pI4:%u, atid %d, qid %u.\n",
260 csk, &req->local_ip, ntohs(req->local_port),
261 &req->peer_ip, ntohs(req->peer_port),
262 csk->atid, csk->rss_qid);
235 struct cpl_t5_act_open_req *req =
236 (struct cpl_t5_act_open_req *)skb->head;
237 u32 isn = (prandom_u32() & ~7UL) - 1;
238
239 INIT_TP_WR(req, 0);
240 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ,
241 qid_atid));
242 req->local_port = csk->saddr.sin_port;

--- 11 unchanged lines hidden (view full) ---

254
255 req->opt2 = cpu_to_be32(opt2);
256
257 log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
258 "csk t5 0x%p, %pI4:%u-%pI4:%u, atid %d, qid %u.\n",
259 csk, &req->local_ip, ntohs(req->local_port),
260 &req->peer_ip, ntohs(req->peer_port),
261 csk->atid, csk->rss_qid);
262 } else {
263 struct cpl_t6_act_open_req *req =
264 (struct cpl_t6_act_open_req *)skb->head;
265 u32 isn = (prandom_u32() & ~7UL) - 1;
266
267 INIT_TP_WR(req, 0);
268 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ,
269 qid_atid));
270 req->local_port = csk->saddr.sin_port;
271 req->peer_port = csk->daddr.sin_port;
272 req->local_ip = csk->saddr.sin_addr.s_addr;
273 req->peer_ip = csk->daddr.sin_addr.s_addr;
274 req->opt0 = cpu_to_be64(opt0);
275 req->params = cpu_to_be64(FILTER_TUPLE_V(
276 cxgb4_select_ntuple(
277 csk->cdev->ports[csk->port_id],
278 csk->l2t)));
279 req->rsvd = cpu_to_be32(isn);
280
281 opt2 |= T5_ISS_VALID;
282 opt2 |= RX_FC_DISABLE_F;
283 opt2 |= T5_OPT_2_VALID_F;
284
285 req->opt2 = cpu_to_be32(opt2);
286 req->rsvd2 = cpu_to_be32(0);
287 req->opt3 = cpu_to_be32(0);
288
289 log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
290 "csk t6 0x%p, %pI4:%u-%pI4:%u, atid %d, qid %u.\n",
291 csk, &req->local_ip, ntohs(req->local_port),
292 &req->peer_ip, ntohs(req->peer_port),
293 csk->atid, csk->rss_qid);
263 }
264
265 set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id);
266
267 pr_info_ipaddr("t%d csk 0x%p,%u,0x%lx,%u, rss_qid %u.\n",
294 }
295
296 set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id);
297
298 pr_info_ipaddr("t%d csk 0x%p,%u,0x%lx,%u, rss_qid %u.\n",
268 (&csk->saddr), (&csk->daddr), t4 ? 4 : 5, csk,
299 (&csk->saddr), (&csk->daddr),
300 CHELSIO_CHIP_VERSION(lldi->adapter_type), csk,
269 csk->state, csk->flags, csk->atid, csk->rss_qid);
270
271 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
272}
273
274#if IS_ENABLED(CONFIG_IPV6)
275static void send_act_open_req6(struct cxgbi_sock *csk, struct sk_buff *skb,
276 struct l2t_entry *e)
277{
278 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
301 csk->state, csk->flags, csk->atid, csk->rss_qid);
302
303 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
304}
305
306#if IS_ENABLED(CONFIG_IPV6)
307static void send_act_open_req6(struct cxgbi_sock *csk, struct sk_buff *skb,
308 struct l2t_entry *e)
309{
310 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
279 int t4 = is_t4(lldi->adapter_type);
280 int wscale = cxgbi_sock_compute_wscale(csk->mss_idx);
281 unsigned long long opt0;
282 unsigned int opt2;
283 unsigned int qid_atid = ((unsigned int)csk->atid) |
284 (((unsigned int)csk->rss_qid) << 14);
285
286 opt0 = KEEP_ALIVE_F |
287 WND_SCALE_V(wscale) |
288 MSS_IDX_V(csk->mss_idx) |
289 L2T_IDX_V(((struct l2t_entry *)csk->l2t)->idx) |
290 TX_CHAN_V(csk->tx_chan) |
291 SMAC_SEL_V(csk->smac_idx) |
292 ULP_MODE_V(ULP_MODE_ISCSI) |
293 RCV_BUFSIZ_V(csk->rcv_win >> 10);
294
295 opt2 = RX_CHANNEL_V(0) |
296 RSS_QUEUE_VALID_F |
311 int wscale = cxgbi_sock_compute_wscale(csk->mss_idx);
312 unsigned long long opt0;
313 unsigned int opt2;
314 unsigned int qid_atid = ((unsigned int)csk->atid) |
315 (((unsigned int)csk->rss_qid) << 14);
316
317 opt0 = KEEP_ALIVE_F |
318 WND_SCALE_V(wscale) |
319 MSS_IDX_V(csk->mss_idx) |
320 L2T_IDX_V(((struct l2t_entry *)csk->l2t)->idx) |
321 TX_CHAN_V(csk->tx_chan) |
322 SMAC_SEL_V(csk->smac_idx) |
323 ULP_MODE_V(ULP_MODE_ISCSI) |
324 RCV_BUFSIZ_V(csk->rcv_win >> 10);
325
326 opt2 = RX_CHANNEL_V(0) |
327 RSS_QUEUE_VALID_F |
297 RX_FC_DISABLE_F |
298 RSS_QUEUE_V(csk->rss_qid);
299
328 RSS_QUEUE_V(csk->rss_qid);
329
300 if (t4) {
330 if (is_t4(lldi->adapter_type)) {
301 struct cpl_act_open_req6 *req =
302 (struct cpl_act_open_req6 *)skb->head;
303
304 INIT_TP_WR(req, 0);
305 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
306 qid_atid));
307 req->local_port = csk->saddr6.sin6_port;
308 req->peer_port = csk->daddr6.sin6_port;

--- 8 unchanged lines hidden (view full) ---

317 req->opt0 = cpu_to_be64(opt0);
318
319 opt2 |= RX_FC_VALID_F;
320 req->opt2 = cpu_to_be32(opt2);
321
322 req->params = cpu_to_be32(cxgb4_select_ntuple(
323 csk->cdev->ports[csk->port_id],
324 csk->l2t));
331 struct cpl_act_open_req6 *req =
332 (struct cpl_act_open_req6 *)skb->head;
333
334 INIT_TP_WR(req, 0);
335 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
336 qid_atid));
337 req->local_port = csk->saddr6.sin6_port;
338 req->peer_port = csk->daddr6.sin6_port;

--- 8 unchanged lines hidden (view full) ---

347 req->opt0 = cpu_to_be64(opt0);
348
349 opt2 |= RX_FC_VALID_F;
350 req->opt2 = cpu_to_be32(opt2);
351
352 req->params = cpu_to_be32(cxgb4_select_ntuple(
353 csk->cdev->ports[csk->port_id],
354 csk->l2t));
325 } else {
355 } else if (is_t5(lldi->adapter_type)) {
326 struct cpl_t5_act_open_req6 *req =
327 (struct cpl_t5_act_open_req6 *)skb->head;
328
329 INIT_TP_WR(req, 0);
330 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
331 qid_atid));
332 req->local_port = csk->saddr6.sin6_port;
333 req->peer_port = csk->daddr6.sin6_port;

--- 6 unchanged lines hidden (view full) ---

340 req->opt0 = cpu_to_be64(opt0);
341
342 opt2 |= T5_OPT_2_VALID_F;
343 req->opt2 = cpu_to_be32(opt2);
344
345 req->params = cpu_to_be64(FILTER_TUPLE_V(cxgb4_select_ntuple(
346 csk->cdev->ports[csk->port_id],
347 csk->l2t)));
356 struct cpl_t5_act_open_req6 *req =
357 (struct cpl_t5_act_open_req6 *)skb->head;
358
359 INIT_TP_WR(req, 0);
360 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
361 qid_atid));
362 req->local_port = csk->saddr6.sin6_port;
363 req->peer_port = csk->daddr6.sin6_port;

--- 6 unchanged lines hidden (view full) ---

370 req->opt0 = cpu_to_be64(opt0);
371
372 opt2 |= T5_OPT_2_VALID_F;
373 req->opt2 = cpu_to_be32(opt2);
374
375 req->params = cpu_to_be64(FILTER_TUPLE_V(cxgb4_select_ntuple(
376 csk->cdev->ports[csk->port_id],
377 csk->l2t)));
378 } else {
379 struct cpl_t6_act_open_req6 *req =
380 (struct cpl_t6_act_open_req6 *)skb->head;
381
382 INIT_TP_WR(req, 0);
383 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
384 qid_atid));
385 req->local_port = csk->saddr6.sin6_port;
386 req->peer_port = csk->daddr6.sin6_port;
387 req->local_ip_hi = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr);
388 req->local_ip_lo = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr +
389 8);
390 req->peer_ip_hi = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr);
391 req->peer_ip_lo = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr +
392 8);
393 req->opt0 = cpu_to_be64(opt0);
394
395 opt2 |= RX_FC_DISABLE_F;
396 opt2 |= T5_OPT_2_VALID_F;
397
398 req->opt2 = cpu_to_be32(opt2);
399
400 req->params = cpu_to_be64(FILTER_TUPLE_V(cxgb4_select_ntuple(
401 csk->cdev->ports[csk->port_id],
402 csk->l2t)));
403
404 req->rsvd2 = cpu_to_be32(0);
405 req->opt3 = cpu_to_be32(0);
348 }
349
350 set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id);
351
352 pr_info("t%d csk 0x%p,%u,0x%lx,%u, [%pI6]:%u-[%pI6]:%u, rss_qid %u.\n",
406 }
407
408 set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id);
409
410 pr_info("t%d csk 0x%p,%u,0x%lx,%u, [%pI6]:%u-[%pI6]:%u, rss_qid %u.\n",
353 t4 ? 4 : 5, csk, csk->state, csk->flags, csk->atid,
411 CHELSIO_CHIP_VERSION(lldi->adapter_type), csk, csk->state,
412 csk->flags, csk->atid,
354 &csk->saddr6.sin6_addr, ntohs(csk->saddr.sin_port),
355 &csk->daddr6.sin6_addr, ntohs(csk->daddr.sin_port),
356 csk->rss_qid);
357
358 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
359}
360#endif
361

--- 1015 unchanged lines hidden (view full) ---

1377 struct cxgbi_device *cdev = csk->cdev;
1378 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1379 struct net_device *ndev = cdev->ports[csk->port_id];
1380 struct sk_buff *skb = NULL;
1381 struct neighbour *n = NULL;
1382 void *daddr;
1383 unsigned int step;
1384 unsigned int size, size6;
413 &csk->saddr6.sin6_addr, ntohs(csk->saddr.sin_port),
414 &csk->daddr6.sin6_addr, ntohs(csk->daddr.sin_port),
415 csk->rss_qid);
416
417 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
418}
419#endif
420

--- 1015 unchanged lines hidden (view full) ---

1436 struct cxgbi_device *cdev = csk->cdev;
1437 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1438 struct net_device *ndev = cdev->ports[csk->port_id];
1439 struct sk_buff *skb = NULL;
1440 struct neighbour *n = NULL;
1441 void *daddr;
1442 unsigned int step;
1443 unsigned int size, size6;
1385 int t4 = is_t4(lldi->adapter_type);
1386 unsigned int linkspeed;
1387 unsigned int rcv_winf, snd_winf;
1388
1389 log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1390 "csk 0x%p,%u,0x%lx,%u.\n",
1391 csk, csk->state, csk->flags, csk->tid);
1392
1393 if (csk->csk_family == AF_INET)

--- 29 unchanged lines hidden (view full) ---

1423 }
1424 cxgbi_sock_get(csk);
1425
1426#if IS_ENABLED(CONFIG_IPV6)
1427 if (csk->csk_family == AF_INET6)
1428 cxgb4_clip_get(ndev, (const u32 *)&csk->saddr6.sin6_addr, 1);
1429#endif
1430
1444 unsigned int linkspeed;
1445 unsigned int rcv_winf, snd_winf;
1446
1447 log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1448 "csk 0x%p,%u,0x%lx,%u.\n",
1449 csk, csk->state, csk->flags, csk->tid);
1450
1451 if (csk->csk_family == AF_INET)

--- 29 unchanged lines hidden (view full) ---

1481 }
1482 cxgbi_sock_get(csk);
1483
1484#if IS_ENABLED(CONFIG_IPV6)
1485 if (csk->csk_family == AF_INET6)
1486 cxgb4_clip_get(ndev, (const u32 *)&csk->saddr6.sin6_addr, 1);
1487#endif
1488
1431 if (t4) {
1489 if (is_t4(lldi->adapter_type)) {
1432 size = sizeof(struct cpl_act_open_req);
1433 size6 = sizeof(struct cpl_act_open_req6);
1490 size = sizeof(struct cpl_act_open_req);
1491 size6 = sizeof(struct cpl_act_open_req6);
1434 } else {
1492 } else if (is_t5(lldi->adapter_type)) {
1435 size = sizeof(struct cpl_t5_act_open_req);
1436 size6 = sizeof(struct cpl_t5_act_open_req6);
1493 size = sizeof(struct cpl_t5_act_open_req);
1494 size6 = sizeof(struct cpl_t5_act_open_req6);
1495 } else {
1496 size = sizeof(struct cpl_t6_act_open_req);
1497 size6 = sizeof(struct cpl_t6_act_open_req6);
1437 }
1438
1439 if (csk->csk_family == AF_INET)
1440 skb = alloc_wr(size, 0, GFP_NOIO);
1441#if IS_ENABLED(CONFIG_IPV6)
1442 else
1443 skb = alloc_wr(size6, 0, GFP_NOIO);
1444#endif

--- 344 unchanged lines hidden (view full) ---

1789
1790 memcpy(cxgbi_cdev_priv(cdev), lldi, sizeof(*lldi));
1791 cdev->flags = CXGBI_FLAG_DEV_T4;
1792 cdev->pdev = lldi->pdev;
1793 cdev->ports = lldi->ports;
1794 cdev->nports = lldi->nports;
1795 cdev->mtus = lldi->mtus;
1796 cdev->nmtus = NMTUS;
1498 }
1499
1500 if (csk->csk_family == AF_INET)
1501 skb = alloc_wr(size, 0, GFP_NOIO);
1502#if IS_ENABLED(CONFIG_IPV6)
1503 else
1504 skb = alloc_wr(size6, 0, GFP_NOIO);
1505#endif

--- 344 unchanged lines hidden (view full) ---

1850
1851 memcpy(cxgbi_cdev_priv(cdev), lldi, sizeof(*lldi));
1852 cdev->flags = CXGBI_FLAG_DEV_T4;
1853 cdev->pdev = lldi->pdev;
1854 cdev->ports = lldi->ports;
1855 cdev->nports = lldi->nports;
1856 cdev->mtus = lldi->mtus;
1857 cdev->nmtus = NMTUS;
1797 cdev->rx_credit_thres = cxgb4i_rx_credit_thres;
1858 cdev->rx_credit_thres = (CHELSIO_CHIP_VERSION(lldi->adapter_type) <=
1859 CHELSIO_T5) ? cxgb4i_rx_credit_thres : 0;
1798 cdev->skb_tx_rsvd = CXGB4I_TX_HEADER_LEN;
1799 cdev->skb_rx_extra = sizeof(struct cpl_iscsi_hdr);
1800 cdev->itp = &cxgb4i_iscsi_transport;
1801
1802 cdev->pfvf = FW_VIID_PFN_G(cxgb4_port_viid(lldi->ports[0]))
1803 << FW_VIID_PFN_S;
1804 pr_info("cdev 0x%p,%s, pfvf %u.\n",
1805 cdev, lldi->ports[0]->name, cdev->pfvf);

--- 123 unchanged lines hidden ---
1860 cdev->skb_tx_rsvd = CXGB4I_TX_HEADER_LEN;
1861 cdev->skb_rx_extra = sizeof(struct cpl_iscsi_hdr);
1862 cdev->itp = &cxgb4i_iscsi_transport;
1863
1864 cdev->pfvf = FW_VIID_PFN_G(cxgb4_port_viid(lldi->ports[0]))
1865 << FW_VIID_PFN_S;
1866 pr_info("cdev 0x%p,%s, pfvf %u.\n",
1867 cdev, lldi->ports[0]->name, cdev->pfvf);

--- 123 unchanged lines hidden ---