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 --- |