aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/fcoe
diff options
context:
space:
mode:
authorRobert Love <robert.w.love@intel.com>2009-11-03 14:47:50 -0500
committerJames Bottomley <James.Bottomley@suse.de>2009-12-04 13:01:08 -0500
commit1875f27e291d05711f15a8a3d486abfeaf385931 (patch)
tree7eb368cbc6fcec3a3859c2da092e79daf3bd68d2 /drivers/scsi/fcoe
parent70b51aabf3b03fbf8d61c14847ccce4c69fb0cdd (diff)
[SCSI] fcoe: Formatting cleanups and commenting
Added kernel-doc comment blocks to all structures and functions. Renamed fc_lport instances rom lp to lport to be inline with our naming convention. Renamed all misnamed net_device instances to netdev to be inline with our naming convention. Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/fcoe')
-rw-r--r--drivers/scsi/fcoe/fcoe.c722
-rw-r--r--drivers/scsi/fcoe/fcoe.h75
2 files changed, 441 insertions, 356 deletions
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 8f078d306a0a..5615dfe10bf5 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -66,14 +66,14 @@ LIST_HEAD(fcoe_hostlist);
66DEFINE_PER_CPU(struct fcoe_percpu_s, fcoe_percpu); 66DEFINE_PER_CPU(struct fcoe_percpu_s, fcoe_percpu);
67 67
68/* Function Prototypes */ 68/* Function Prototypes */
69static int fcoe_reset(struct Scsi_Host *shost); 69static int fcoe_reset(struct Scsi_Host *);
70static int fcoe_xmit(struct fc_lport *, struct fc_frame *); 70static int fcoe_xmit(struct fc_lport *, struct fc_frame *);
71static int fcoe_rcv(struct sk_buff *, struct net_device *, 71static int fcoe_rcv(struct sk_buff *, struct net_device *,
72 struct packet_type *, struct net_device *); 72 struct packet_type *, struct net_device *);
73static int fcoe_percpu_receive_thread(void *arg); 73static int fcoe_percpu_receive_thread(void *);
74static void fcoe_clean_pending_queue(struct fc_lport *lp); 74static void fcoe_clean_pending_queue(struct fc_lport *);
75static void fcoe_percpu_clean(struct fc_lport *lp); 75static void fcoe_percpu_clean(struct fc_lport *);
76static int fcoe_link_ok(struct fc_lport *lp); 76static int fcoe_link_ok(struct fc_lport *);
77 77
78static struct fc_lport *fcoe_hostlist_lookup(const struct net_device *); 78static struct fc_lport *fcoe_hostlist_lookup(const struct net_device *);
79static int fcoe_hostlist_add(const struct fc_lport *); 79static int fcoe_hostlist_add(const struct fc_lport *);
@@ -82,21 +82,68 @@ static void fcoe_check_wait_queue(struct fc_lport *, struct sk_buff *);
82static int fcoe_device_notification(struct notifier_block *, ulong, void *); 82static int fcoe_device_notification(struct notifier_block *, ulong, void *);
83static void fcoe_dev_setup(void); 83static void fcoe_dev_setup(void);
84static void fcoe_dev_cleanup(void); 84static void fcoe_dev_cleanup(void);
85static struct fcoe_interface * 85static struct fcoe_interface
86 fcoe_hostlist_lookup_port(const struct net_device *dev); 86*fcoe_hostlist_lookup_port(const struct net_device *);
87
88static int fcoe_fip_recv(struct sk_buff *, struct net_device *,
89 struct packet_type *, struct net_device *);
90
91static void fcoe_fip_send(struct fcoe_ctlr *, struct sk_buff *);
92static void fcoe_update_src_mac(struct fc_lport *, u8 *);
93static u8 *fcoe_get_src_mac(struct fc_lport *);
94static void fcoe_destroy_work(struct work_struct *);
95
96static int fcoe_ddp_setup(struct fc_lport *, u16, struct scatterlist *,
97 unsigned int);
98static int fcoe_ddp_done(struct fc_lport *, u16);
99
100static int fcoe_cpu_callback(struct notifier_block *, unsigned long, void *);
101
102static int fcoe_create(const char *, struct kernel_param *);
103static int fcoe_destroy(const char *, struct kernel_param *);
104
105static u8 *fcoe_get_src_mac(struct fc_lport *);
106static void fcoe_destroy_work(struct work_struct *);
87 107
88/* notification function from net device */ 108static struct fc_seq *fcoe_elsct_send(struct fc_lport *,
109 u32 did, struct fc_frame *,
110 unsigned int op,
111 void (*resp)(struct fc_seq *,
112 struct fc_frame *,
113 void *),
114 void *, u32 timeout);
115
116module_param_call(create, fcoe_create, NULL, NULL, S_IWUSR);
117__MODULE_PARM_TYPE(create, "string");
118MODULE_PARM_DESC(create, "Create fcoe fcoe using net device passed in.");
119module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR);
120__MODULE_PARM_TYPE(destroy, "string");
121MODULE_PARM_DESC(destroy, "Destroy fcoe fcoe");
122
123/* notification function for packets from net device */
89static struct notifier_block fcoe_notifier = { 124static struct notifier_block fcoe_notifier = {
90 .notifier_call = fcoe_device_notification, 125 .notifier_call = fcoe_device_notification,
91}; 126};
92 127
128/* notification function for CPU hotplug events */
129static struct notifier_block fcoe_cpu_notifier = {
130 .notifier_call = fcoe_cpu_callback,
131};
132
93static struct scsi_transport_template *fcoe_transport_template; 133static struct scsi_transport_template *fcoe_transport_template;
94static struct scsi_transport_template *fcoe_vport_transport_template; 134static struct scsi_transport_template *fcoe_vport_transport_template;
95 135
96static int fcoe_vport_destroy(struct fc_vport *vport); 136static int fcoe_vport_destroy(struct fc_vport *);
97static int fcoe_vport_create(struct fc_vport *vport, bool disabled); 137static int fcoe_vport_create(struct fc_vport *, bool disabled);
98static int fcoe_vport_disable(struct fc_vport *vport, bool disable); 138static int fcoe_vport_disable(struct fc_vport *, bool disable);
99static void fcoe_set_vport_symbolic_name(struct fc_vport *vport); 139static void fcoe_set_vport_symbolic_name(struct fc_vport *);
140
141static struct libfc_function_template fcoe_libfc_fcn_templ = {
142 .frame_send = fcoe_xmit,
143 .ddp_setup = fcoe_ddp_setup,
144 .ddp_done = fcoe_ddp_done,
145 .elsct_send = fcoe_elsct_send,
146};
100 147
101struct fc_function_template fcoe_transport_function = { 148struct fc_function_template fcoe_transport_function = {
102 .show_host_node_name = 1, 149 .show_host_node_name = 1,
@@ -192,13 +239,10 @@ static struct scsi_host_template fcoe_shost_template = {
192 .max_sectors = 0xffff, 239 .max_sectors = 0xffff,
193}; 240};
194 241
195static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *dev,
196 struct packet_type *ptype,
197 struct net_device *orig_dev);
198/** 242/**
199 * fcoe_interface_setup() 243 * fcoe_interface_setup() - Setup a FCoE interface
200 * @fcoe: new fcoe_interface 244 * @fcoe: The new FCoE interface
201 * @netdev : ptr to the associated netdevice struct 245 * @netdev: The net device that the fcoe interface is on
202 * 246 *
203 * Returns : 0 for success 247 * Returns : 0 for success
204 * Locking: must be called with the RTNL mutex held 248 * Locking: must be called with the RTNL mutex held
@@ -273,14 +317,9 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe,
273 return 0; 317 return 0;
274} 318}
275 319
276static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb);
277static void fcoe_update_src_mac(struct fc_lport *lport, u8 *addr);
278static u8 *fcoe_get_src_mac(struct fc_lport *lport);
279static void fcoe_destroy_work(struct work_struct *work);
280
281/** 320/**
282 * fcoe_interface_create() 321 * fcoe_interface_create() - Create a FCoE interface on a net device
283 * @netdev: network interface 322 * @netdev: The net device to create the FCoE interface on
284 * 323 *
285 * Returns: pointer to a struct fcoe_interface or NULL on error 324 * Returns: pointer to a struct fcoe_interface or NULL on error
286 */ 325 */
@@ -311,8 +350,8 @@ static struct fcoe_interface *fcoe_interface_create(struct net_device *netdev)
311} 350}
312 351
313/** 352/**
314 * fcoe_interface_cleanup() - clean up netdev configurations 353 * fcoe_interface_cleanup() - Clean up a FCoE interface
315 * @fcoe: 354 * @fcoe: The FCoE interface to be cleaned up
316 * 355 *
317 * Caller must be holding the RTNL mutex 356 * Caller must be holding the RTNL mutex
318 */ 357 */
@@ -351,7 +390,7 @@ void fcoe_interface_cleanup(struct fcoe_interface *fcoe)
351 390
352/** 391/**
353 * fcoe_interface_release() - fcoe_port kref release function 392 * fcoe_interface_release() - fcoe_port kref release function
354 * @kref: embedded reference count in an fcoe_interface struct 393 * @kref: Embedded reference count in an fcoe_interface struct
355 */ 394 */
356static void fcoe_interface_release(struct kref *kref) 395static void fcoe_interface_release(struct kref *kref)
357{ 396{
@@ -367,8 +406,8 @@ static void fcoe_interface_release(struct kref *kref)
367} 406}
368 407
369/** 408/**
370 * fcoe_interface_get() 409 * fcoe_interface_get() - Get a reference to a FCoE interface
371 * @fcoe: 410 * @fcoe: The FCoE interface to be held
372 */ 411 */
373static inline void fcoe_interface_get(struct fcoe_interface *fcoe) 412static inline void fcoe_interface_get(struct fcoe_interface *fcoe)
374{ 413{
@@ -376,8 +415,8 @@ static inline void fcoe_interface_get(struct fcoe_interface *fcoe)
376} 415}
377 416
378/** 417/**
379 * fcoe_interface_put() 418 * fcoe_interface_put() - Put a reference to a FCoE interface
380 * @fcoe: 419 * @fcoe: The FCoE interface to be released
381 */ 420 */
382static inline void fcoe_interface_put(struct fcoe_interface *fcoe) 421static inline void fcoe_interface_put(struct fcoe_interface *fcoe)
383{ 422{
@@ -385,15 +424,16 @@ static inline void fcoe_interface_put(struct fcoe_interface *fcoe)
385} 424}
386 425
387/** 426/**
388 * fcoe_fip_recv - handle a received FIP frame. 427 * fcoe_fip_recv() - Handler for received FIP frames
389 * @skb: the receive skb 428 * @skb: The receive skb
390 * @dev: associated &net_device 429 * @netdev: The associated net device
391 * @ptype: the &packet_type structure which was used to register this handler. 430 * @ptype: The packet_type structure which was used to register this handler
392 * @orig_dev: original receive &net_device, in case @dev is a bond. 431 * @orig_dev: The original net_device the the skb was received on.
432 * (in case dev is a bond)
393 * 433 *
394 * Returns: 0 for success 434 * Returns: 0 for success
395 */ 435 */
396static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *dev, 436static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev,
397 struct packet_type *ptype, 437 struct packet_type *ptype,
398 struct net_device *orig_dev) 438 struct net_device *orig_dev)
399{ 439{
@@ -405,9 +445,9 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *dev,
405} 445}
406 446
407/** 447/**
408 * fcoe_fip_send() - send an Ethernet-encapsulated FIP frame. 448 * fcoe_fip_send() - Send an Ethernet-encapsulated FIP frame
409 * @fip: FCoE controller. 449 * @fip: The FCoE controller
410 * @skb: FIP Packet. 450 * @skb: The FIP packet to be sent
411 */ 451 */
412static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb) 452static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
413{ 453{
@@ -416,9 +456,9 @@ static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
416} 456}
417 457
418/** 458/**
419 * fcoe_update_src_mac() - Update Ethernet MAC filters. 459 * fcoe_update_src_mac() - Update the Ethernet MAC filters
420 * @lport: libfc lport 460 * @lport: The local port to update the source MAC on
421 * @addr: Unicast MAC address to add. 461 * @addr: Unicast MAC address to add
422 * 462 *
423 * Remove any previously-set unicast MAC filter. 463 * Remove any previously-set unicast MAC filter.
424 * Add secondary FCoE MAC address filter for our OUI. 464 * Add secondary FCoE MAC address filter for our OUI.
@@ -449,60 +489,59 @@ static u8 *fcoe_get_src_mac(struct fc_lport *lport)
449} 489}
450 490
451/** 491/**
452 * fcoe_lport_config() - sets up the fc_lport 492 * fcoe_lport_config() - Set up a local port
453 * @lp: ptr to the fc_lport 493 * @lport: The local port to be setup
454 * 494 *
455 * Returns: 0 for success 495 * Returns: 0 for success
456 */ 496 */
457static int fcoe_lport_config(struct fc_lport *lp) 497static int fcoe_lport_config(struct fc_lport *lport)
458{ 498{
459 lp->link_up = 0; 499 lport->link_up = 0;
460 lp->qfull = 0; 500 lport->qfull = 0;
461 lp->max_retry_count = 3; 501 lport->max_retry_count = 3;
462 lp->max_rport_retry_count = 3; 502 lport->max_rport_retry_count = 3;
463 lp->e_d_tov = 2 * 1000; /* FC-FS default */ 503 lport->e_d_tov = 2 * 1000; /* FC-FS default */
464 lp->r_a_tov = 2 * 2 * 1000; 504 lport->r_a_tov = 2 * 2 * 1000;
465 lp->service_params = (FCP_SPPF_INIT_FCN | FCP_SPPF_RD_XRDY_DIS | 505 lport->service_params = (FCP_SPPF_INIT_FCN | FCP_SPPF_RD_XRDY_DIS |
466 FCP_SPPF_RETRY | FCP_SPPF_CONF_COMPL); 506 FCP_SPPF_RETRY | FCP_SPPF_CONF_COMPL);
467 lp->does_npiv = 1; 507 lport->does_npiv = 1;
468 508
469 fc_lport_init_stats(lp); 509 fc_lport_init_stats(lport);
470 510
471 /* lport fc_lport related configuration */ 511 /* lport fc_lport related configuration */
472 fc_lport_config(lp); 512 fc_lport_config(lport);
473 513
474 /* offload related configuration */ 514 /* offload related configuration */
475 lp->crc_offload = 0; 515 lport->crc_offload = 0;
476 lp->seq_offload = 0; 516 lport->seq_offload = 0;
477 lp->lro_enabled = 0; 517 lport->lro_enabled = 0;
478 lp->lro_xid = 0; 518 lport->lro_xid = 0;
479 lp->lso_max = 0; 519 lport->lso_max = 0;
480 520
481 return 0; 521 return 0;
482} 522}
483 523
484/** 524/**
485 * fcoe_queue_timer() - fcoe queue timer 525 * fcoe_queue_timer() - The fcoe queue timer
486 * @lp: the fc_lport pointer 526 * @lport: The local port
487 * 527 *
488 * Calls fcoe_check_wait_queue on timeout 528 * Calls fcoe_check_wait_queue on timeout
489 *
490 */ 529 */
491static void fcoe_queue_timer(ulong lp) 530static void fcoe_queue_timer(ulong lport)
492{ 531{
493 fcoe_check_wait_queue((struct fc_lport *)lp, NULL); 532 fcoe_check_wait_queue((struct fc_lport *)lport, NULL);
494} 533}
495 534
496/** 535/**
497 * fcoe_netdev_config() - Set up netdev for SW FCoE 536 * fcoe_netdev_config() - Set up net devive for SW FCoE
498 * @lp : ptr to the fc_lport 537 * @lport: The local port that is associated with the net device
499 * @netdev : ptr to the associated netdevice struct 538 * @netdev: The associated net device
500 * 539 *
501 * Must be called after fcoe_lport_config() as it will use lport mutex 540 * Must be called after fcoe_lport_config() as it will use local port mutex
502 * 541 *
503 * Returns : 0 for success 542 * Returns: 0 for success
504 */ 543 */
505static int fcoe_netdev_config(struct fc_lport *lp, struct net_device *netdev) 544static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev)
506{ 545{
507 u32 mfs; 546 u32 mfs;
508 u64 wwnn, wwpn; 547 u64 wwnn, wwpn;
@@ -510,7 +549,7 @@ static int fcoe_netdev_config(struct fc_lport *lp, struct net_device *netdev)
510 struct fcoe_port *port; 549 struct fcoe_port *port;
511 550
512 /* Setup lport private data to point to fcoe softc */ 551 /* Setup lport private data to point to fcoe softc */
513 port = lport_priv(lp); 552 port = lport_priv(lport);
514 fcoe = port->fcoe; 553 fcoe = port->fcoe;
515 554
516 /* 555 /*
@@ -524,91 +563,100 @@ static int fcoe_netdev_config(struct fc_lport *lp, struct net_device *netdev)
524 FCOE_NETDEV_DBG(netdev, "Supports FCOE_MTU of %d bytes\n", mfs); 563 FCOE_NETDEV_DBG(netdev, "Supports FCOE_MTU of %d bytes\n", mfs);
525 } 564 }
526 mfs -= (sizeof(struct fcoe_hdr) + sizeof(struct fcoe_crc_eof)); 565 mfs -= (sizeof(struct fcoe_hdr) + sizeof(struct fcoe_crc_eof));
527 if (fc_set_mfs(lp, mfs)) 566 if (fc_set_mfs(lport, mfs))
528 return -EINVAL; 567 return -EINVAL;
529 568
530 /* offload features support */ 569 /* offload features support */
531 if (netdev->features & NETIF_F_SG) 570 if (netdev->features & NETIF_F_SG)
532 lp->sg_supp = 1; 571 lport->sg_supp = 1;
533 572
534 if (netdev->features & NETIF_F_FCOE_CRC) { 573 if (netdev->features & NETIF_F_FCOE_CRC) {
535 lp->crc_offload = 1; 574 lport->crc_offload = 1;
536 FCOE_NETDEV_DBG(netdev, "Supports FCCRC offload\n"); 575 FCOE_NETDEV_DBG(netdev, "Supports FCCRC offload\n");
537 } 576 }
538 if (netdev->features & NETIF_F_FSO) { 577 if (netdev->features & NETIF_F_FSO) {
539 lp->seq_offload = 1; 578 lport->seq_offload = 1;
540 lp->lso_max = netdev->gso_max_size; 579 lport->lso_max = netdev->gso_max_size;
541 FCOE_NETDEV_DBG(netdev, "Supports LSO for max len 0x%x\n", 580 FCOE_NETDEV_DBG(netdev, "Supports LSO for max len 0x%x\n",
542 lp->lso_max); 581 lport->lso_max);
543 } 582 }
544 if (netdev->fcoe_ddp_xid) { 583 if (netdev->fcoe_ddp_xid) {
545 lp->lro_enabled = 1; 584 lport->lro_enabled = 1;
546 lp->lro_xid = netdev->fcoe_ddp_xid; 585 lport->lro_xid = netdev->fcoe_ddp_xid;
547 FCOE_NETDEV_DBG(netdev, "Supports LRO for max xid 0x%x\n", 586 FCOE_NETDEV_DBG(netdev, "Supports LRO for max xid 0x%x\n",
548 lp->lro_xid); 587 lport->lro_xid);
549 } 588 }
550 skb_queue_head_init(&port->fcoe_pending_queue); 589 skb_queue_head_init(&port->fcoe_pending_queue);
551 port->fcoe_pending_queue_active = 0; 590 port->fcoe_pending_queue_active = 0;
552 setup_timer(&port->timer, fcoe_queue_timer, (unsigned long)lp); 591 setup_timer(&port->timer, fcoe_queue_timer, (unsigned long)lport);
553 592
554 if (!lp->vport) { 593 if (!lport->vport) {
555 wwnn = fcoe_wwn_from_mac(netdev->dev_addr, 1, 0); 594 wwnn = fcoe_wwn_from_mac(netdev->dev_addr, 1, 0);
556 fc_set_wwnn(lp, wwnn); 595 fc_set_wwnn(lport, wwnn);
557 /* XXX - 3rd arg needs to be vlan id */ 596 /* XXX - 3rd arg needs to be vlan id */
558 wwpn = fcoe_wwn_from_mac(netdev->dev_addr, 2, 0); 597 wwpn = fcoe_wwn_from_mac(netdev->dev_addr, 2, 0);
559 fc_set_wwpn(lp, wwpn); 598 fc_set_wwpn(lport, wwpn);
560 } 599 }
561 600
562 return 0; 601 return 0;
563} 602}
564 603
565/** 604/**
566 * fcoe_shost_config() - Sets up fc_lport->host 605 * fcoe_shost_config() - Set up the SCSI host associated with a local port
567 * @lp : ptr to the fc_lport 606 * @lport: The local port
568 * @shost : ptr to the associated scsi host 607 * @shost: The SCSI host to associate with the local port
569 * @dev : device associated to scsi host 608 * @dev: The device associated with the SCSI host
570 * 609 *
571 * Must be called after fcoe_lport_config() and fcoe_netdev_config() 610 * Must be called after fcoe_lport_config() and fcoe_netdev_config()
572 * 611 *
573 * Returns : 0 for success 612 * Returns: 0 for success
574 */ 613 */
575static int fcoe_shost_config(struct fc_lport *lp, struct Scsi_Host *shost, 614static int fcoe_shost_config(struct fc_lport *lport, struct Scsi_Host *shost,
576 struct device *dev) 615 struct device *dev)
577{ 616{
578 int rc = 0; 617 int rc = 0;
579 618
580 /* lport scsi host config */ 619 /* lport scsi host config */
581 lp->host->max_lun = FCOE_MAX_LUN; 620 lport->host->max_lun = FCOE_MAX_LUN;
582 lp->host->max_id = FCOE_MAX_FCP_TARGET; 621 lport->host->max_id = FCOE_MAX_FCP_TARGET;
583 lp->host->max_channel = 0; 622 lport->host->max_channel = 0;
584 if (lp->vport) 623 if (lport->vport)
585 lp->host->transportt = fcoe_vport_transport_template; 624 lport->host->transportt = fcoe_vport_transport_template;
586 else 625 else
587 lp->host->transportt = fcoe_transport_template; 626 lport->host->transportt = fcoe_transport_template;
588 627
589 /* add the new host to the SCSI-ml */ 628 /* add the new host to the SCSI-ml */
590 rc = scsi_add_host(lp->host, dev); 629 rc = scsi_add_host(lport->host, dev);
591 if (rc) { 630 if (rc) {
592 FCOE_NETDEV_DBG(fcoe_netdev(lp), "fcoe_shost_config: " 631 FCOE_NETDEV_DBG(fcoe_netdev(lport), "fcoe_shost_config: "
593 "error on scsi_add_host\n"); 632 "error on scsi_add_host\n");
594 return rc; 633 return rc;
595 } 634 }
596 635
597 if (!lp->vport) 636 if (!lport->vport)
598 fc_host_max_npiv_vports(lp->host) = USHORT_MAX; 637 fc_host_max_npiv_vports(lport->host) = USHORT_MAX;
599 638
600 snprintf(fc_host_symbolic_name(lp->host), FC_SYMBOLIC_NAME_SIZE, 639 snprintf(fc_host_symbolic_name(lport->host), FC_SYMBOLIC_NAME_SIZE,
601 "%s v%s over %s", FCOE_NAME, FCOE_VERSION, 640 "%s v%s over %s", FCOE_NAME, FCOE_VERSION,
602 fcoe_netdev(lp)->name); 641 fcoe_netdev(lport)->name);
603 642
604 return 0; 643 return 0;
605} 644}
606 645
607/* 646/**
608 * fcoe_oem_match() - match for read types IO 647 * fcoe_oem_match() - The match routine for the offloaded exchange manager
609 * @fp: the fc_frame for new IO. 648 * @fp: The I/O frame
610 * 649 *
611 * Returns : true for read types IO, otherwise returns false. 650 * This routine will be associated with an exchange manager (EM). When
651 * the libfc exchange handling code is looking for an EM to use it will
652 * call this routine and pass it the frame that it wishes to send. This
653 * routine will return True if the associated EM is to be used and False
654 * if the echange code should continue looking for an EM.
655 *
656 * The offload EM that this routine is associated with will handle any
657 * packets that are for SCSI read requests.
658 *
659 * Returns: True for read types I/O, otherwise returns false.
612 */ 660 */
613bool fcoe_oem_match(struct fc_frame *fp) 661bool fcoe_oem_match(struct fc_frame *fp)
614{ 662{
@@ -617,14 +665,14 @@ bool fcoe_oem_match(struct fc_frame *fp)
617} 665}
618 666
619/** 667/**
620 * fcoe_em_config() - allocates em for this lport 668 * fcoe_em_config() - Allocate and configure an exchange manager
621 * @lp: the fcoe that em is to allocated for 669 * @lport: The local port that the new EM will be associated with
622 * 670 *
623 * Returns : 0 on success 671 * Returns: 0 on success
624 */ 672 */
625static inline int fcoe_em_config(struct fc_lport *lp) 673static inline int fcoe_em_config(struct fc_lport *lport)
626{ 674{
627 struct fcoe_port *port = lport_priv(lp); 675 struct fcoe_port *port = lport_priv(lport);
628 struct fcoe_interface *fcoe = port->fcoe; 676 struct fcoe_interface *fcoe = port->fcoe;
629 struct fcoe_interface *oldfcoe = NULL; 677 struct fcoe_interface *oldfcoe = NULL;
630 struct net_device *old_real_dev, *cur_real_dev; 678 struct net_device *old_real_dev, *cur_real_dev;
@@ -635,8 +683,9 @@ static inline int fcoe_em_config(struct fc_lport *lp)
635 * Check if need to allocate an em instance for 683 * Check if need to allocate an em instance for
636 * offload exchange ids to be shared across all VN_PORTs/lport. 684 * offload exchange ids to be shared across all VN_PORTs/lport.
637 */ 685 */
638 if (!lp->lro_enabled || !lp->lro_xid || (lp->lro_xid >= max_xid)) { 686 if (!lport->lro_enabled || !lport->lro_xid ||
639 lp->lro_xid = 0; 687 (lport->lro_xid >= max_xid)) {
688 lport->lro_xid = 0;
640 goto skip_oem; 689 goto skip_oem;
641 } 690 }
642 691
@@ -662,16 +711,16 @@ static inline int fcoe_em_config(struct fc_lport *lp)
662 } 711 }
663 712
664 if (fcoe->oem) { 713 if (fcoe->oem) {
665 if (!fc_exch_mgr_add(lp, fcoe->oem, fcoe_oem_match)) { 714 if (!fc_exch_mgr_add(lport, fcoe->oem, fcoe_oem_match)) {
666 printk(KERN_ERR "fcoe_em_config: failed to add " 715 printk(KERN_ERR "fcoe_em_config: failed to add "
667 "offload em:%p on interface:%s\n", 716 "offload em:%p on interface:%s\n",
668 fcoe->oem, fcoe->netdev->name); 717 fcoe->oem, fcoe->netdev->name);
669 return -ENOMEM; 718 return -ENOMEM;
670 } 719 }
671 } else { 720 } else {
672 fcoe->oem = fc_exch_mgr_alloc(lp, FC_CLASS_3, 721 fcoe->oem = fc_exch_mgr_alloc(lport, FC_CLASS_3,
673 FCOE_MIN_XID, lp->lro_xid, 722 FCOE_MIN_XID, lport->lro_xid,
674 fcoe_oem_match); 723 fcoe_oem_match);
675 if (!fcoe->oem) { 724 if (!fcoe->oem) {
676 printk(KERN_ERR "fcoe_em_config: failed to allocate " 725 printk(KERN_ERR "fcoe_em_config: failed to allocate "
677 "em for offload exches on interface:%s\n", 726 "em for offload exches on interface:%s\n",
@@ -683,10 +732,10 @@ static inline int fcoe_em_config(struct fc_lport *lp)
683 /* 732 /*
684 * Exclude offload EM xid range from next EM xid range. 733 * Exclude offload EM xid range from next EM xid range.
685 */ 734 */
686 min_xid += lp->lro_xid + 1; 735 min_xid += lport->lro_xid + 1;
687 736
688skip_oem: 737skip_oem:
689 if (!fc_exch_mgr_alloc(lp, FC_CLASS_3, min_xid, max_xid, NULL)) { 738 if (!fc_exch_mgr_alloc(lport, FC_CLASS_3, min_xid, max_xid, NULL)) {
690 printk(KERN_ERR "fcoe_em_config: failed to " 739 printk(KERN_ERR "fcoe_em_config: failed to "
691 "allocate em on interface %s\n", fcoe->netdev->name); 740 "allocate em on interface %s\n", fcoe->netdev->name);
692 return -ENOMEM; 741 return -ENOMEM;
@@ -696,8 +745,8 @@ skip_oem:
696} 745}
697 746
698/** 747/**
699 * fcoe_if_destroy() - FCoE software HBA tear-down function 748 * fcoe_if_destroy() - Tear down a SW FCoE instance
700 * @lport: fc_lport to destroy 749 * @lport: The local port to be destroyed
701 */ 750 */
702static void fcoe_if_destroy(struct fc_lport *lport) 751static void fcoe_if_destroy(struct fc_lport *lport)
703{ 752{
@@ -745,72 +794,62 @@ static void fcoe_if_destroy(struct fc_lport *lport)
745 scsi_host_put(lport->host); 794 scsi_host_put(lport->host);
746} 795}
747 796
748/* 797/**
749 * fcoe_ddp_setup - calls LLD's ddp_setup through net_device 798 * fcoe_ddp_setup() - Call a LLD's ddp_setup through the net device
750 * @lp: the corresponding fc_lport 799 * @lport: The local port to setup DDP for
751 * @xid: the exchange id for this ddp transfer 800 * @xid: The exchange ID for this DDP transfer
752 * @sgl: the scatterlist describing this transfer 801 * @sgl: The scatterlist describing this transfer
753 * @sgc: number of sg items 802 * @sgc: The number of sg items
754 * 803 *
755 * Returns : 0 no ddp 804 * Returns: 0 if the DDP context was not configured
756 */ 805 */
757static int fcoe_ddp_setup(struct fc_lport *lp, u16 xid, 806static int fcoe_ddp_setup(struct fc_lport *lport, u16 xid,
758 struct scatterlist *sgl, unsigned int sgc) 807 struct scatterlist *sgl, unsigned int sgc)
759{ 808{
760 struct net_device *n = fcoe_netdev(lp); 809 struct net_device *netdev = fcoe_netdev(lport);
761 810
762 if (n->netdev_ops->ndo_fcoe_ddp_setup) 811 if (netdev->netdev_ops->ndo_fcoe_ddp_setup)
763 return n->netdev_ops->ndo_fcoe_ddp_setup(n, xid, sgl, sgc); 812 return netdev->netdev_ops->ndo_fcoe_ddp_setup(netdev,
813 xid, sgl,
814 sgc);
764 815
765 return 0; 816 return 0;
766} 817}
767 818
768/* 819/**
769 * fcoe_ddp_done - calls LLD's ddp_done through net_device 820 * fcoe_ddp_done() - Call a LLD's ddp_done through the net device
770 * @lp: the corresponding fc_lport 821 * @lport: The local port to complete DDP on
771 * @xid: the exchange id for this ddp transfer 822 * @xid: The exchange ID for this DDP transfer
772 * 823 *
773 * Returns : the length of data that have been completed by ddp 824 * Returns: the length of data that have been completed by DDP
774 */ 825 */
775static int fcoe_ddp_done(struct fc_lport *lp, u16 xid) 826static int fcoe_ddp_done(struct fc_lport *lport, u16 xid)
776{ 827{
777 struct net_device *n = fcoe_netdev(lp); 828 struct net_device *netdev = fcoe_netdev(lport);
778 829
779 if (n->netdev_ops->ndo_fcoe_ddp_done) 830 if (netdev->netdev_ops->ndo_fcoe_ddp_done)
780 return n->netdev_ops->ndo_fcoe_ddp_done(n, xid); 831 return netdev->netdev_ops->ndo_fcoe_ddp_done(netdev, xid);
781 return 0; 832 return 0;
782} 833}
783 834
784static struct fc_seq *fcoe_elsct_send(struct fc_lport *lport,
785 u32 did, struct fc_frame *fp, unsigned int op,
786 void (*resp)(struct fc_seq *, struct fc_frame *, void *),
787 void *arg, u32 timeout);
788
789static struct libfc_function_template fcoe_libfc_fcn_templ = {
790 .frame_send = fcoe_xmit,
791 .ddp_setup = fcoe_ddp_setup,
792 .ddp_done = fcoe_ddp_done,
793 .elsct_send = fcoe_elsct_send,
794};
795
796/** 835/**
797 * fcoe_if_create() - this function creates the fcoe port 836 * fcoe_if_create() - Create a FCoE instance on an interface
798 * @fcoe: fcoe_interface structure to create an fc_lport instance on 837 * @fcoe: The FCoE interface to create a local port on
799 * @parent: device pointer to be the parent in sysfs for the SCSI host 838 * @parent: The device pointer to be the parent in sysfs for the SCSI host
800 * @npiv: is this a vport? 839 * @npiv: Indicates if the port is a vport or not
801 * 840 *
802 * Creates fc_lport struct and scsi_host for lport, configures lport. 841 * Creates a fc_lport instance and a Scsi_Host instance and configure them.
803 * 842 *
804 * Returns : The allocated fc_lport or an error pointer 843 * Returns: The allocated fc_lport or an error pointer
805 */ 844 */
806static struct fc_lport *fcoe_if_create(struct fcoe_interface *fcoe, 845static struct fc_lport *fcoe_if_create(struct fcoe_interface *fcoe,
807 struct device *parent, int npiv) 846 struct device *parent, int npiv)
808{ 847{
809 int rc; 848 struct net_device *netdev = fcoe->netdev;
810 struct fc_lport *lport = NULL; 849 struct fc_lport *lport = NULL;
811 struct fcoe_port *port; 850 struct fcoe_port *port;
812 struct Scsi_Host *shost; 851 struct Scsi_Host *shost;
813 struct net_device *netdev = fcoe->netdev; 852 int rc;
814 /* 853 /*
815 * parent is only a vport if npiv is 1, 854 * parent is only a vport if npiv is 1,
816 * but we'll only use vport in that case so go ahead and set it 855 * but we'll only use vport in that case so go ahead and set it
@@ -837,7 +876,7 @@ static struct fc_lport *fcoe_if_create(struct fcoe_interface *fcoe,
837 port->fcoe = fcoe; 876 port->fcoe = fcoe;
838 INIT_WORK(&port->destroy_work, fcoe_destroy_work); 877 INIT_WORK(&port->destroy_work, fcoe_destroy_work);
839 878
840 /* configure fc_lport, e.g., em */ 879 /* configure a fc_lport including the exchange manager */
841 rc = fcoe_lport_config(lport); 880 rc = fcoe_lport_config(lport);
842 if (rc) { 881 if (rc) {
843 FCOE_NETDEV_DBG(netdev, "Could not configure lport for the " 882 FCOE_NETDEV_DBG(netdev, "Could not configure lport for the "
@@ -847,7 +886,7 @@ static struct fc_lport *fcoe_if_create(struct fcoe_interface *fcoe,
847 886
848 if (npiv) { 887 if (npiv) {
849 FCOE_NETDEV_DBG(netdev, "Setting vport names, 0x%llX 0x%llX\n", 888 FCOE_NETDEV_DBG(netdev, "Setting vport names, 0x%llX 0x%llX\n",
850 vport->node_name, vport->port_name); 889 vport->node_name, vport->port_name);
851 fc_set_wwnn(lport, vport->node_name); 890 fc_set_wwnn(lport, vport->node_name);
852 fc_set_wwpn(lport, vport->port_name); 891 fc_set_wwpn(lport, vport->port_name);
853 } 892 }
@@ -891,7 +930,7 @@ static struct fc_lport *fcoe_if_create(struct fcoe_interface *fcoe,
891 rc = fcoe_em_config(lport); 930 rc = fcoe_em_config(lport);
892 if (rc) { 931 if (rc) {
893 FCOE_NETDEV_DBG(netdev, "Could not configure the EM " 932 FCOE_NETDEV_DBG(netdev, "Could not configure the EM "
894 "for the interface\n"); 933 "for the interface\n");
895 goto out_lp_destroy; 934 goto out_lp_destroy;
896 } 935 }
897 } 936 }
@@ -908,9 +947,11 @@ out:
908} 947}
909 948
910/** 949/**
911 * fcoe_if_init() - attach to scsi transport 950 * fcoe_if_init() - Initialization routine for fcoe.ko
912 * 951 *
913 * Returns : 0 on success 952 * Attaches the SW FCoE transport to the FC transport
953 *
954 * Returns: 0 on success
914 */ 955 */
915static int __init fcoe_if_init(void) 956static int __init fcoe_if_init(void)
916{ 957{
@@ -928,9 +969,11 @@ static int __init fcoe_if_init(void)
928} 969}
929 970
930/** 971/**
931 * fcoe_if_exit() - detach from scsi transport 972 * fcoe_if_exit() - Tear down fcoe.ko
973 *
974 * Detaches the SW FCoE transport from the FC transport
932 * 975 *
933 * Returns : 0 on success 976 * Returns: 0 on success
934 */ 977 */
935int __exit fcoe_if_exit(void) 978int __exit fcoe_if_exit(void)
936{ 979{
@@ -942,8 +985,8 @@ int __exit fcoe_if_exit(void)
942} 985}
943 986
944/** 987/**
945 * fcoe_percpu_thread_create() - Create a receive thread for an online cpu 988 * fcoe_percpu_thread_create() - Create a receive thread for an online CPU
946 * @cpu: cpu index for the online cpu 989 * @cpu: The CPU index of the CPU to create a receive thread for
947 */ 990 */
948static void fcoe_percpu_thread_create(unsigned int cpu) 991static void fcoe_percpu_thread_create(unsigned int cpu)
949{ 992{
@@ -966,8 +1009,8 @@ static void fcoe_percpu_thread_create(unsigned int cpu)
966} 1009}
967 1010
968/** 1011/**
969 * fcoe_percpu_thread_destroy() - removes the rx thread for the given cpu 1012 * fcoe_percpu_thread_destroy() - Remove the receive thread of a CPU
970 * @cpu: cpu index the rx thread is to be removed 1013 * @cpu: The CPU index of the CPU whose receive thread is to be destroyed
971 * 1014 *
972 * Destroys a per-CPU Rx thread. Any pending skbs are moved to the 1015 * Destroys a per-CPU Rx thread. Any pending skbs are moved to the
973 * current CPU's Rx thread. If the thread being destroyed is bound to 1016 * current CPU's Rx thread. If the thread being destroyed is bound to
@@ -1015,7 +1058,7 @@ static void fcoe_percpu_thread_destroy(unsigned int cpu)
1015 } else { 1058 } else {
1016 /* 1059 /*
1017 * The targeted CPU is not initialized and cannot accept 1060 * The targeted CPU is not initialized and cannot accept
1018 * new skbs. Unlock the targeted CPU and drop the skbs 1061 * new skbs. Unlock the targeted CPU and drop the skbs
1019 * on the CPU that is going offline. 1062 * on the CPU that is going offline.
1020 */ 1063 */
1021 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) 1064 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL)
@@ -1056,12 +1099,12 @@ static void fcoe_percpu_thread_destroy(unsigned int cpu)
1056} 1099}
1057 1100
1058/** 1101/**
1059 * fcoe_cpu_callback() - fcoe cpu hotplug event callback 1102 * fcoe_cpu_callback() - Handler for CPU hotplug events
1060 * @nfb: callback data block 1103 * @nfb: The callback data block
1061 * @action: event triggering the callback 1104 * @action: The event triggering the callback
1062 * @hcpu: index for the cpu of this event 1105 * @hcpu: The index of the CPU that the event is for
1063 * 1106 *
1064 * This creates or destroys per cpu data for fcoe 1107 * This creates or destroys per-CPU data for fcoe
1065 * 1108 *
1066 * Returns NOTIFY_OK always. 1109 * Returns NOTIFY_OK always.
1067 */ 1110 */
@@ -1087,25 +1130,22 @@ static int fcoe_cpu_callback(struct notifier_block *nfb,
1087 return NOTIFY_OK; 1130 return NOTIFY_OK;
1088} 1131}
1089 1132
1090static struct notifier_block fcoe_cpu_notifier = {
1091 .notifier_call = fcoe_cpu_callback,
1092};
1093
1094/** 1133/**
1095 * fcoe_rcv() - this is the fcoe receive function called by NET_RX_SOFTIRQ 1134 * fcoe_rcv() - Receive packets from a net device
1096 * @skb: the receive skb 1135 * @skb: The received packet
1097 * @dev: associated net device 1136 * @netdev: The net device that the packet was received on
1098 * @ptype: context 1137 * @ptype: The packet type context
1099 * @olddev: last device 1138 * @olddev: The last device net device
1100 * 1139 *
1101 * this function will receive the packet and build fc frame and pass it up 1140 * This routine is called by NET_RX_SOFTIRQ. It receives a packet, builds a
1141 * FC frame and passes the frame to libfc.
1102 * 1142 *
1103 * Returns: 0 for success 1143 * Returns: 0 for success
1104 */ 1144 */
1105int fcoe_rcv(struct sk_buff *skb, struct net_device *dev, 1145int fcoe_rcv(struct sk_buff *skb, struct net_device *netdev,
1106 struct packet_type *ptype, struct net_device *olddev) 1146 struct packet_type *ptype, struct net_device *olddev)
1107{ 1147{
1108 struct fc_lport *lp; 1148 struct fc_lport *lport;
1109 struct fcoe_rcv_info *fr; 1149 struct fcoe_rcv_info *fr;
1110 struct fcoe_interface *fcoe; 1150 struct fcoe_interface *fcoe;
1111 struct fc_frame_header *fh; 1151 struct fc_frame_header *fh;
@@ -1113,15 +1153,15 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
1113 unsigned int cpu; 1153 unsigned int cpu;
1114 1154
1115 fcoe = container_of(ptype, struct fcoe_interface, fcoe_packet_type); 1155 fcoe = container_of(ptype, struct fcoe_interface, fcoe_packet_type);
1116 lp = fcoe->ctlr.lp; 1156 lport = fcoe->ctlr.lp;
1117 if (unlikely(lp == NULL)) { 1157 if (unlikely(!lport)) {
1118 FCOE_NETDEV_DBG(dev, "Cannot find hba structure"); 1158 FCOE_NETDEV_DBG(netdev, "Cannot find hba structure");
1119 goto err2; 1159 goto err2;
1120 } 1160 }
1121 if (!lp->link_up) 1161 if (!lport->link_up)
1122 goto err2; 1162 goto err2;
1123 1163
1124 FCOE_NETDEV_DBG(dev, "skb_info: len:%d data_len:%d head:%p " 1164 FCOE_NETDEV_DBG(netdev, "skb_info: len:%d data_len:%d head:%p "
1125 "data:%p tail:%p end:%p sum:%d dev:%s", 1165 "data:%p tail:%p end:%p sum:%d dev:%s",
1126 skb->len, skb->data_len, skb->head, skb->data, 1166 skb->len, skb->data_len, skb->head, skb->data,
1127 skb_tail_pointer(skb), skb_end_pointer(skb), 1167 skb_tail_pointer(skb), skb_end_pointer(skb),
@@ -1129,7 +1169,7 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
1129 1169
1130 /* check for FCOE packet type */ 1170 /* check for FCOE packet type */
1131 if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) { 1171 if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) {
1132 FCOE_NETDEV_DBG(dev, "Wrong FC type frame"); 1172 FCOE_NETDEV_DBG(netdev, "Wrong FC type frame");
1133 goto err; 1173 goto err;
1134 } 1174 }
1135 1175
@@ -1138,14 +1178,14 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
1138 * and FC headers are pulled into the linear data area. 1178 * and FC headers are pulled into the linear data area.
1139 */ 1179 */
1140 if (unlikely((skb->len < FCOE_MIN_FRAME) || 1180 if (unlikely((skb->len < FCOE_MIN_FRAME) ||
1141 !pskb_may_pull(skb, FCOE_HEADER_LEN))) 1181 !pskb_may_pull(skb, FCOE_HEADER_LEN)))
1142 goto err; 1182 goto err;
1143 1183
1144 skb_set_transport_header(skb, sizeof(struct fcoe_hdr)); 1184 skb_set_transport_header(skb, sizeof(struct fcoe_hdr));
1145 fh = (struct fc_frame_header *) skb_transport_header(skb); 1185 fh = (struct fc_frame_header *) skb_transport_header(skb);
1146 1186
1147 fr = fcoe_dev_from_skb(skb); 1187 fr = fcoe_dev_from_skb(skb);
1148 fr->fr_dev = lp; 1188 fr->fr_dev = lport;
1149 fr->ptype = ptype; 1189 fr->ptype = ptype;
1150 1190
1151 /* 1191 /*
@@ -1167,7 +1207,7 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
1167 * the first CPU now. For non-SMP systems this 1207 * the first CPU now. For non-SMP systems this
1168 * will check the same CPU twice. 1208 * will check the same CPU twice.
1169 */ 1209 */
1170 FCOE_NETDEV_DBG(dev, "CPU is online, but no receive thread " 1210 FCOE_NETDEV_DBG(netdev, "CPU is online, but no receive thread "
1171 "ready for incoming skb- using first online " 1211 "ready for incoming skb- using first online "
1172 "CPU.\n"); 1212 "CPU.\n");
1173 1213
@@ -1194,7 +1234,7 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
1194 1234
1195 return 0; 1235 return 0;
1196err: 1236err:
1197 fc_lport_get_stats(lp)->ErrorFrames++; 1237 fc_lport_get_stats(lport)->ErrorFrames++;
1198 1238
1199err2: 1239err2:
1200 kfree_skb(skb); 1240 kfree_skb(skb);
@@ -1202,8 +1242,11 @@ err2:
1202} 1242}
1203 1243
1204/** 1244/**
1205 * fcoe_start_io() - pass to netdev to start xmit for fcoe 1245 * fcoe_start_io() - Start FCoE I/O
1206 * @skb: the skb to be xmitted 1246 * @skb: The packet to be transmitted
1247 *
1248 * This routine is called from the net device to start transmitting
1249 * FCoE packets.
1207 * 1250 *
1208 * Returns: 0 for success 1251 * Returns: 0 for success
1209 */ 1252 */
@@ -1220,9 +1263,15 @@ static inline int fcoe_start_io(struct sk_buff *skb)
1220} 1263}
1221 1264
1222/** 1265/**
1223 * fcoe_get_paged_crc_eof() - in case we need to alloc a page for crc_eof 1266 * fcoe_get_paged_crc_eof() - Allocate a page to be used for the trailer CRC
1224 * @skb: the skb to be xmitted 1267 * @skb: The packet to be transmitted
1225 * @tlen: total len 1268 * @tlen: The total length of the trailer
1269 *
1270 * This routine allocates a page for frame trailers. The page is re-used if
1271 * there is enough room left on it for the current trailer. If there isn't
1272 * enough buffer left a new page is allocated for the trailer. Reference to
1273 * the page from this function as well as the skbs using the page fragments
1274 * ensure that the page is freed at the appropriate time.
1226 * 1275 *
1227 * Returns: 0 for success 1276 * Returns: 0 for success
1228 */ 1277 */
@@ -1261,11 +1310,12 @@ static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen)
1261} 1310}
1262 1311
1263/** 1312/**
1264 * fcoe_fc_crc() - calculates FC CRC in this fcoe skb 1313 * fcoe_fc_crc() - Calculates the CRC for a given frame
1265 * @fp: the fc_frame containing data to be checksummed 1314 * @fp: The frame to be checksumed
1266 * 1315 *
1267 * This uses crc32() to calculate the crc for port frame 1316 * This uses crc32() routine to calculate the CRC for a frame
1268 * Return : 32 bit crc 1317 *
1318 * Return: The 32 bit CRC value
1269 */ 1319 */
1270u32 fcoe_fc_crc(struct fc_frame *fp) 1320u32 fcoe_fc_crc(struct fc_frame *fp)
1271{ 1321{
@@ -1296,13 +1346,13 @@ u32 fcoe_fc_crc(struct fc_frame *fp)
1296} 1346}
1297 1347
1298/** 1348/**
1299 * fcoe_xmit() - FCoE frame transmit function 1349 * fcoe_xmit() - Transmit a FCoE frame
1300 * @lp: the associated local fcoe 1350 * @lport: The local port that the frame is to be transmitted for
1301 * @fp: the fc_frame to be transmitted 1351 * @fp: The frame to be transmitted
1302 * 1352 *
1303 * Return : 0 for success 1353 * Return: 0 for success
1304 */ 1354 */
1305int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp) 1355int fcoe_xmit(struct fc_lport *lport, struct fc_frame *fp)
1306{ 1356{
1307 int wlen; 1357 int wlen;
1308 u32 crc; 1358 u32 crc;
@@ -1314,7 +1364,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1314 unsigned int hlen; /* header length implies the version */ 1364 unsigned int hlen; /* header length implies the version */
1315 unsigned int tlen; /* trailer length */ 1365 unsigned int tlen; /* trailer length */
1316 unsigned int elen; /* eth header, may include vlan */ 1366 unsigned int elen; /* eth header, may include vlan */
1317 struct fcoe_port *port = lport_priv(lp); 1367 struct fcoe_port *port = lport_priv(lport);
1318 struct fcoe_interface *fcoe = port->fcoe; 1368 struct fcoe_interface *fcoe = port->fcoe;
1319 u8 sof, eof; 1369 u8 sof, eof;
1320 struct fcoe_hdr *hp; 1370 struct fcoe_hdr *hp;
@@ -1325,13 +1375,13 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1325 skb = fp_skb(fp); 1375 skb = fp_skb(fp);
1326 wlen = skb->len / FCOE_WORD_TO_BYTE; 1376 wlen = skb->len / FCOE_WORD_TO_BYTE;
1327 1377
1328 if (!lp->link_up) { 1378 if (!lport->link_up) {
1329 kfree_skb(skb); 1379 kfree_skb(skb);
1330 return 0; 1380 return 0;
1331 } 1381 }
1332 1382
1333 if (unlikely(fh->fh_r_ctl == FC_RCTL_ELS_REQ) && 1383 if (unlikely(fh->fh_r_ctl == FC_RCTL_ELS_REQ) &&
1334 fcoe_ctlr_els_send(&fcoe->ctlr, lp, skb)) 1384 fcoe_ctlr_els_send(&fcoe->ctlr, lport, skb))
1335 return 0; 1385 return 0;
1336 1386
1337 sof = fr_sof(fp); 1387 sof = fr_sof(fp);
@@ -1343,7 +1393,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1343 wlen = (skb->len - tlen + sizeof(crc)) / FCOE_WORD_TO_BYTE; 1393 wlen = (skb->len - tlen + sizeof(crc)) / FCOE_WORD_TO_BYTE;
1344 1394
1345 /* crc offload */ 1395 /* crc offload */
1346 if (likely(lp->crc_offload)) { 1396 if (likely(lport->crc_offload)) {
1347 skb->ip_summed = CHECKSUM_PARTIAL; 1397 skb->ip_summed = CHECKSUM_PARTIAL;
1348 skb->csum_start = skb_headroom(skb); 1398 skb->csum_start = skb_headroom(skb);
1349 skb->csum_offset = skb->len; 1399 skb->csum_offset = skb->len;
@@ -1405,7 +1455,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1405 hp->fcoe_sof = sof; 1455 hp->fcoe_sof = sof;
1406 1456
1407 /* fcoe lso, mss is in max_payload which is non-zero for FCP data */ 1457 /* fcoe lso, mss is in max_payload which is non-zero for FCP data */
1408 if (lp->seq_offload && fr_max_payload(fp)) { 1458 if (lport->seq_offload && fr_max_payload(fp)) {
1409 skb_shinfo(skb)->gso_type = SKB_GSO_FCOE; 1459 skb_shinfo(skb)->gso_type = SKB_GSO_FCOE;
1410 skb_shinfo(skb)->gso_size = fr_max_payload(fp); 1460 skb_shinfo(skb)->gso_size = fr_max_payload(fp);
1411 } else { 1461 } else {
@@ -1413,23 +1463,23 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1413 skb_shinfo(skb)->gso_size = 0; 1463 skb_shinfo(skb)->gso_size = 0;
1414 } 1464 }
1415 /* update tx stats: regardless if LLD fails */ 1465 /* update tx stats: regardless if LLD fails */
1416 stats = fc_lport_get_stats(lp); 1466 stats = fc_lport_get_stats(lport);
1417 stats->TxFrames++; 1467 stats->TxFrames++;
1418 stats->TxWords += wlen; 1468 stats->TxWords += wlen;
1419 1469
1420 /* send down to lld */ 1470 /* send down to lld */
1421 fr_dev(fp) = lp; 1471 fr_dev(fp) = lport;
1422 if (port->fcoe_pending_queue.qlen) 1472 if (port->fcoe_pending_queue.qlen)
1423 fcoe_check_wait_queue(lp, skb); 1473 fcoe_check_wait_queue(lport, skb);
1424 else if (fcoe_start_io(skb)) 1474 else if (fcoe_start_io(skb))
1425 fcoe_check_wait_queue(lp, skb); 1475 fcoe_check_wait_queue(lport, skb);
1426 1476
1427 return 0; 1477 return 0;
1428} 1478}
1429 1479
1430/** 1480/**
1431 * fcoe_percpu_flush_done() - Indicate percpu queue flush completion. 1481 * fcoe_percpu_flush_done() - Indicate per-CPU queue flush completion
1432 * @skb: the skb being completed. 1482 * @skb: The completed skb (argument required by destructor)
1433 */ 1483 */
1434static void fcoe_percpu_flush_done(struct sk_buff *skb) 1484static void fcoe_percpu_flush_done(struct sk_buff *skb)
1435{ 1485{
@@ -1437,8 +1487,8 @@ static void fcoe_percpu_flush_done(struct sk_buff *skb)
1437} 1487}
1438 1488
1439/** 1489/**
1440 * fcoe_percpu_receive_thread() - recv thread per cpu 1490 * fcoe_percpu_receive_thread() - The per-CPU packet receive thread
1441 * @arg: ptr to the fcoe per cpu struct 1491 * @arg: The per-CPU context
1442 * 1492 *
1443 * Return: 0 for success 1493 * Return: 0 for success
1444 */ 1494 */
@@ -1446,7 +1496,7 @@ int fcoe_percpu_receive_thread(void *arg)
1446{ 1496{
1447 struct fcoe_percpu_s *p = arg; 1497 struct fcoe_percpu_s *p = arg;
1448 u32 fr_len; 1498 u32 fr_len;
1449 struct fc_lport *lp; 1499 struct fc_lport *lport;
1450 struct fcoe_rcv_info *fr; 1500 struct fcoe_rcv_info *fr;
1451 struct fcoe_dev_stats *stats; 1501 struct fcoe_dev_stats *stats;
1452 struct fc_frame_header *fh; 1502 struct fc_frame_header *fh;
@@ -1473,8 +1523,8 @@ int fcoe_percpu_receive_thread(void *arg)
1473 } 1523 }
1474 spin_unlock_bh(&p->fcoe_rx_list.lock); 1524 spin_unlock_bh(&p->fcoe_rx_list.lock);
1475 fr = fcoe_dev_from_skb(skb); 1525 fr = fcoe_dev_from_skb(skb);
1476 lp = fr->fr_dev; 1526 lport = fr->fr_dev;
1477 if (unlikely(lp == NULL)) { 1527 if (unlikely(!lport)) {
1478 if (skb->destructor != fcoe_percpu_flush_done) 1528 if (skb->destructor != fcoe_percpu_flush_done)
1479 FCOE_NETDEV_DBG(skb->dev, "NULL lport in skb"); 1529 FCOE_NETDEV_DBG(skb->dev, "NULL lport in skb");
1480 kfree_skb(skb); 1530 kfree_skb(skb);
@@ -1491,7 +1541,7 @@ int fcoe_percpu_receive_thread(void *arg)
1491 /* 1541 /*
1492 * Save source MAC address before discarding header. 1542 * Save source MAC address before discarding header.
1493 */ 1543 */
1494 port = lport_priv(lp); 1544 port = lport_priv(lport);
1495 if (skb_is_nonlinear(skb)) 1545 if (skb_is_nonlinear(skb))
1496 skb_linearize(skb); /* not ideal */ 1546 skb_linearize(skb); /* not ideal */
1497 mac = eth_hdr(skb)->h_source; 1547 mac = eth_hdr(skb)->h_source;
@@ -1503,7 +1553,7 @@ int fcoe_percpu_receive_thread(void *arg)
1503 hp = (struct fcoe_hdr *) skb_network_header(skb); 1553 hp = (struct fcoe_hdr *) skb_network_header(skb);
1504 fh = (struct fc_frame_header *) skb_transport_header(skb); 1554 fh = (struct fc_frame_header *) skb_transport_header(skb);
1505 1555
1506 stats = fc_lport_get_stats(lp); 1556 stats = fc_lport_get_stats(lport);
1507 if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) { 1557 if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) {
1508 if (stats->ErrorFrames < 5) 1558 if (stats->ErrorFrames < 5)
1509 printk(KERN_WARNING "fcoe: FCoE version " 1559 printk(KERN_WARNING "fcoe: FCoE version "
@@ -1525,7 +1575,7 @@ int fcoe_percpu_receive_thread(void *arg)
1525 1575
1526 fp = (struct fc_frame *)skb; 1576 fp = (struct fc_frame *)skb;
1527 fc_frame_init(fp); 1577 fc_frame_init(fp);
1528 fr_dev(fp) = lp; 1578 fr_dev(fp) = lport;
1529 fr_sof(fp) = hp->fcoe_sof; 1579 fr_sof(fp) = hp->fcoe_sof;
1530 1580
1531 /* Copy out the CRC and EOF trailer for access */ 1581 /* Copy out the CRC and EOF trailer for access */
@@ -1545,7 +1595,8 @@ int fcoe_percpu_receive_thread(void *arg)
1545 * it's solicited data, in which case, the FCP layer would 1595 * it's solicited data, in which case, the FCP layer would
1546 * check it during the copy. 1596 * check it during the copy.
1547 */ 1597 */
1548 if (lp->crc_offload && skb->ip_summed == CHECKSUM_UNNECESSARY) 1598 if (lport->crc_offload &&
1599 skb->ip_summed == CHECKSUM_UNNECESSARY)
1549 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED; 1600 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED;
1550 else 1601 else
1551 fr_flags(fp) |= FCPHF_CRC_UNCHECKED; 1602 fr_flags(fp) |= FCPHF_CRC_UNCHECKED;
@@ -1553,7 +1604,7 @@ int fcoe_percpu_receive_thread(void *arg)
1553 fh = fc_frame_header_get(fp); 1604 fh = fc_frame_header_get(fp);
1554 if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA && 1605 if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA &&
1555 fh->fh_type == FC_TYPE_FCP) { 1606 fh->fh_type == FC_TYPE_FCP) {
1556 fc_exch_recv(lp, fp); 1607 fc_exch_recv(lport, fp);
1557 continue; 1608 continue;
1558 } 1609 }
1559 if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) { 1610 if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) {
@@ -1569,27 +1620,27 @@ int fcoe_percpu_receive_thread(void *arg)
1569 } 1620 }
1570 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED; 1621 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED;
1571 } 1622 }
1572 fc_exch_recv(lp, fp); 1623 fc_exch_recv(lport, fp);
1573 } 1624 }
1574 return 0; 1625 return 0;
1575} 1626}
1576 1627
1577/** 1628/**
1578 * fcoe_check_wait_queue() - attempt to clear the transmit backlog 1629 * fcoe_check_wait_queue() - Attempt to clear the transmit backlog
1579 * @lp: the fc_lport 1630 * @lport: The local port whose backlog is to be cleared
1580 * 1631 *
1581 * This empties the wait_queue, dequeue the head of the wait_queue queue 1632 * This empties the wait_queue, dequeues the head of the wait_queue queue
1582 * and calls fcoe_start_io() for each packet, if all skb have been 1633 * and calls fcoe_start_io() for each packet. If all skb have been
1583 * transmitted, return qlen or -1 if a error occurs, then restore 1634 * transmitted it returns the qlen. If an error occurs it restores
1584 * wait_queue and try again later. 1635 * wait_queue (to try again later) and returns -1.
1585 * 1636 *
1586 * The wait_queue is used when the skb transmit fails. skb will go 1637 * The wait_queue is used when the skb transmit fails. The failed skb
1587 * in the wait_queue which will be emptied by the timer function or 1638 * will go in the wait_queue which will be emptied by the timer function or
1588 * by the next skb transmit. 1639 * by the next skb transmit.
1589 */ 1640 */
1590static void fcoe_check_wait_queue(struct fc_lport *lp, struct sk_buff *skb) 1641static void fcoe_check_wait_queue(struct fc_lport *lport, struct sk_buff *skb)
1591{ 1642{
1592 struct fcoe_port *port = lport_priv(lp); 1643 struct fcoe_port *port = lport_priv(lport);
1593 int rc; 1644 int rc;
1594 1645
1595 spin_lock_bh(&port->fcoe_pending_queue.lock); 1646 spin_lock_bh(&port->fcoe_pending_queue.lock);
@@ -1621,19 +1672,19 @@ static void fcoe_check_wait_queue(struct fc_lport *lp, struct sk_buff *skb)
1621 } 1672 }
1622 1673
1623 if (port->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH) 1674 if (port->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH)
1624 lp->qfull = 0; 1675 lport->qfull = 0;
1625 if (port->fcoe_pending_queue.qlen && !timer_pending(&port->timer)) 1676 if (port->fcoe_pending_queue.qlen && !timer_pending(&port->timer))
1626 mod_timer(&port->timer, jiffies + 2); 1677 mod_timer(&port->timer, jiffies + 2);
1627 port->fcoe_pending_queue_active = 0; 1678 port->fcoe_pending_queue_active = 0;
1628out: 1679out:
1629 if (port->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH) 1680 if (port->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
1630 lp->qfull = 1; 1681 lport->qfull = 1;
1631 spin_unlock_bh(&port->fcoe_pending_queue.lock); 1682 spin_unlock_bh(&port->fcoe_pending_queue.lock);
1632 return; 1683 return;
1633} 1684}
1634 1685
1635/** 1686/**
1636 * fcoe_dev_setup() - setup link change notification interface 1687 * fcoe_dev_setup() - Setup the link change notification interface
1637 */ 1688 */
1638static void fcoe_dev_setup(void) 1689static void fcoe_dev_setup(void)
1639{ 1690{
@@ -1641,7 +1692,7 @@ static void fcoe_dev_setup(void)
1641} 1692}
1642 1693
1643/** 1694/**
1644 * fcoe_dev_cleanup() - cleanup link change notification interface 1695 * fcoe_dev_cleanup() - Cleanup the link change notification interface
1645 */ 1696 */
1646static void fcoe_dev_cleanup(void) 1697static void fcoe_dev_cleanup(void)
1647{ 1698{
@@ -1649,19 +1700,19 @@ static void fcoe_dev_cleanup(void)
1649} 1700}
1650 1701
1651/** 1702/**
1652 * fcoe_device_notification() - netdev event notification callback 1703 * fcoe_device_notification() - Handler for net device events
1653 * @notifier: context of the notification 1704 * @notifier: The context of the notification
1654 * @event: type of event 1705 * @event: The type of event
1655 * @ptr: fixed array for output parsed ifname 1706 * @ptr: The net device that the event was on
1656 * 1707 *
1657 * This function is called by the ethernet driver in case of link change event 1708 * This function is called by the Ethernet driver in case of link change event.
1658 * 1709 *
1659 * Returns: 0 for success 1710 * Returns: 0 for success
1660 */ 1711 */
1661static int fcoe_device_notification(struct notifier_block *notifier, 1712static int fcoe_device_notification(struct notifier_block *notifier,
1662 ulong event, void *ptr) 1713 ulong event, void *ptr)
1663{ 1714{
1664 struct fc_lport *lp = NULL; 1715 struct fc_lport *lport = NULL;
1665 struct net_device *netdev = ptr; 1716 struct net_device *netdev = ptr;
1666 struct fcoe_interface *fcoe; 1717 struct fcoe_interface *fcoe;
1667 struct fcoe_port *port; 1718 struct fcoe_port *port;
@@ -1672,11 +1723,11 @@ static int fcoe_device_notification(struct notifier_block *notifier,
1672 1723
1673 list_for_each_entry(fcoe, &fcoe_hostlist, list) { 1724 list_for_each_entry(fcoe, &fcoe_hostlist, list) {
1674 if (fcoe->netdev == netdev) { 1725 if (fcoe->netdev == netdev) {
1675 lp = fcoe->ctlr.lp; 1726 lport = fcoe->ctlr.lp;
1676 break; 1727 break;
1677 } 1728 }
1678 } 1729 }
1679 if (lp == NULL) { 1730 if (!lport) {
1680 rc = NOTIFY_DONE; 1731 rc = NOTIFY_DONE;
1681 goto out; 1732 goto out;
1682 } 1733 }
@@ -1695,7 +1746,7 @@ static int fcoe_device_notification(struct notifier_block *notifier,
1695 mfs = netdev->mtu - (sizeof(struct fcoe_hdr) + 1746 mfs = netdev->mtu - (sizeof(struct fcoe_hdr) +
1696 sizeof(struct fcoe_crc_eof)); 1747 sizeof(struct fcoe_crc_eof));
1697 if (mfs >= FC_MIN_MAX_FRAME) 1748 if (mfs >= FC_MIN_MAX_FRAME)
1698 fc_set_mfs(lp, mfs); 1749 fc_set_mfs(lport, mfs);
1699 break; 1750 break;
1700 case NETDEV_REGISTER: 1751 case NETDEV_REGISTER:
1701 break; 1752 break;
@@ -1710,22 +1761,22 @@ static int fcoe_device_notification(struct notifier_block *notifier,
1710 FCOE_NETDEV_DBG(netdev, "Unknown event %ld " 1761 FCOE_NETDEV_DBG(netdev, "Unknown event %ld "
1711 "from netdev netlink\n", event); 1762 "from netdev netlink\n", event);
1712 } 1763 }
1713 if (link_possible && !fcoe_link_ok(lp)) 1764 if (link_possible && !fcoe_link_ok(lport))
1714 fcoe_ctlr_link_up(&fcoe->ctlr); 1765 fcoe_ctlr_link_up(&fcoe->ctlr);
1715 else if (fcoe_ctlr_link_down(&fcoe->ctlr)) { 1766 else if (fcoe_ctlr_link_down(&fcoe->ctlr)) {
1716 stats = fc_lport_get_stats(lp); 1767 stats = fc_lport_get_stats(lport);
1717 stats->LinkFailureCount++; 1768 stats->LinkFailureCount++;
1718 fcoe_clean_pending_queue(lp); 1769 fcoe_clean_pending_queue(lport);
1719 } 1770 }
1720out: 1771out:
1721 return rc; 1772 return rc;
1722} 1773}
1723 1774
1724/** 1775/**
1725 * fcoe_if_to_netdev() - parse a name buffer to get netdev 1776 * fcoe_if_to_netdev() - Parse a name buffer to get a net device
1726 * @buffer: incoming buffer to be copied 1777 * @buffer: The name of the net device
1727 * 1778 *
1728 * Returns: NULL or ptr to net_device 1779 * Returns: NULL or a ptr to net_device
1729 */ 1780 */
1730static struct net_device *fcoe_if_to_netdev(const char *buffer) 1781static struct net_device *fcoe_if_to_netdev(const char *buffer)
1731{ 1782{
@@ -1743,9 +1794,11 @@ static struct net_device *fcoe_if_to_netdev(const char *buffer)
1743} 1794}
1744 1795
1745/** 1796/**
1746 * fcoe_destroy() - handles the destroy from sysfs 1797 * fcoe_destroy() - Destroy a FCoE interface
1747 * @buffer: expected to be an eth if name 1798 * @buffer: The name of the Ethernet interface to be destroyed
1748 * @kp: associated kernel param 1799 * @kp: The associated kernel parameter
1800 *
1801 * Called from sysfs.
1749 * 1802 *
1750 * Returns: 0 for success 1803 * Returns: 0 for success
1751 */ 1804 */
@@ -1792,6 +1845,10 @@ out_nodev:
1792 return rc; 1845 return rc;
1793} 1846}
1794 1847
1848/**
1849 * fcoe_destroy_work() - Destroy a FCoE port in a deferred work context
1850 * @work: Handle to the FCoE port to be destroyed
1851 */
1795static void fcoe_destroy_work(struct work_struct *work) 1852static void fcoe_destroy_work(struct work_struct *work)
1796{ 1853{
1797 struct fcoe_port *port; 1854 struct fcoe_port *port;
@@ -1803,9 +1860,11 @@ static void fcoe_destroy_work(struct work_struct *work)
1803} 1860}
1804 1861
1805/** 1862/**
1806 * fcoe_create() - Handles the create call from sysfs 1863 * fcoe_create() - Create a fcoe interface
1807 * @buffer: expected to be an eth if name 1864 * @buffer: The name of the Ethernet interface to create on
1808 * @kp: associated kernel param 1865 * @kp: The associated kernel param
1866 *
1867 * Called from sysfs.
1809 * 1868 *
1810 * Returns: 0 for success 1869 * Returns: 0 for success
1811 */ 1870 */
@@ -1884,16 +1943,9 @@ out_nodev:
1884 return rc; 1943 return rc;
1885} 1944}
1886 1945
1887module_param_call(create, fcoe_create, NULL, NULL, S_IWUSR);
1888__MODULE_PARM_TYPE(create, "string");
1889MODULE_PARM_DESC(create, "Create fcoe fcoe using net device passed in.");
1890module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR);
1891__MODULE_PARM_TYPE(destroy, "string");
1892MODULE_PARM_DESC(destroy, "Destroy fcoe fcoe");
1893
1894/** 1946/**
1895 * fcoe_link_ok() - Check if link is ok for the fc_lport 1947 * fcoe_link_ok() - Check if the link is OK for a local port
1896 * @lp: ptr to the fc_lport 1948 * @lport: The local port to check link on
1897 * 1949 *
1898 * Any permanently-disqualifying conditions have been previously checked. 1950 * Any permanently-disqualifying conditions have been previously checked.
1899 * This also updates the speed setting, which may change with link for 100/1000. 1951 * This also updates the speed setting, which may change with link for 100/1000.
@@ -1905,26 +1957,26 @@ MODULE_PARM_DESC(destroy, "Destroy fcoe fcoe");
1905 * Returns: 0 if link is OK for use by FCoE. 1957 * Returns: 0 if link is OK for use by FCoE.
1906 * 1958 *
1907 */ 1959 */
1908int fcoe_link_ok(struct fc_lport *lp) 1960int fcoe_link_ok(struct fc_lport *lport)
1909{ 1961{
1910 struct fcoe_port *port = lport_priv(lp); 1962 struct fcoe_port *port = lport_priv(lport);
1911 struct net_device *dev = port->fcoe->netdev; 1963 struct net_device *netdev = port->fcoe->netdev;
1912 struct ethtool_cmd ecmd = { ETHTOOL_GSET }; 1964 struct ethtool_cmd ecmd = { ETHTOOL_GSET };
1913 1965
1914 if ((dev->flags & IFF_UP) && netif_carrier_ok(dev) && 1966 if ((netdev->flags & IFF_UP) && netif_carrier_ok(netdev) &&
1915 (!dev_ethtool_get_settings(dev, &ecmd))) { 1967 (!dev_ethtool_get_settings(netdev, &ecmd))) {
1916 lp->link_supported_speeds &= 1968 lport->link_supported_speeds &=
1917 ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT); 1969 ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT);
1918 if (ecmd.supported & (SUPPORTED_1000baseT_Half | 1970 if (ecmd.supported & (SUPPORTED_1000baseT_Half |
1919 SUPPORTED_1000baseT_Full)) 1971 SUPPORTED_1000baseT_Full))
1920 lp->link_supported_speeds |= FC_PORTSPEED_1GBIT; 1972 lport->link_supported_speeds |= FC_PORTSPEED_1GBIT;
1921 if (ecmd.supported & SUPPORTED_10000baseT_Full) 1973 if (ecmd.supported & SUPPORTED_10000baseT_Full)
1922 lp->link_supported_speeds |= 1974 lport->link_supported_speeds |=
1923 FC_PORTSPEED_10GBIT; 1975 FC_PORTSPEED_10GBIT;
1924 if (ecmd.speed == SPEED_1000) 1976 if (ecmd.speed == SPEED_1000)
1925 lp->link_speed = FC_PORTSPEED_1GBIT; 1977 lport->link_speed = FC_PORTSPEED_1GBIT;
1926 if (ecmd.speed == SPEED_10000) 1978 if (ecmd.speed == SPEED_10000)
1927 lp->link_speed = FC_PORTSPEED_10GBIT; 1979 lport->link_speed = FC_PORTSPEED_10GBIT;
1928 1980
1929 return 0; 1981 return 0;
1930 } 1982 }
@@ -1932,8 +1984,8 @@ int fcoe_link_ok(struct fc_lport *lp)
1932} 1984}
1933 1985
1934/** 1986/**
1935 * fcoe_percpu_clean() - Clear the pending skbs for an lport 1987 * fcoe_percpu_clean() - Clear all pending skbs for an local port
1936 * @lp: the fc_lport 1988 * @lport: The local port whose skbs are to be cleared
1937 * 1989 *
1938 * Must be called with fcoe_create_mutex held to single-thread completion. 1990 * Must be called with fcoe_create_mutex held to single-thread completion.
1939 * 1991 *
@@ -1942,7 +1994,7 @@ int fcoe_link_ok(struct fc_lport *lp)
1942 * there no packets that will be handled by the lport, but also that any 1994 * there no packets that will be handled by the lport, but also that any
1943 * threads already handling packet have returned. 1995 * threads already handling packet have returned.
1944 */ 1996 */
1945void fcoe_percpu_clean(struct fc_lport *lp) 1997void fcoe_percpu_clean(struct fc_lport *lport)
1946{ 1998{
1947 struct fcoe_percpu_s *pp; 1999 struct fcoe_percpu_s *pp;
1948 struct fcoe_rcv_info *fr; 2000 struct fcoe_rcv_info *fr;
@@ -1960,7 +2012,7 @@ void fcoe_percpu_clean(struct fc_lport *lp)
1960 skb = next) { 2012 skb = next) {
1961 next = skb->next; 2013 next = skb->next;
1962 fr = fcoe_dev_from_skb(skb); 2014 fr = fcoe_dev_from_skb(skb);
1963 if (fr->fr_dev == lp) { 2015 if (fr->fr_dev == lport) {
1964 __skb_unlink(skb, list); 2016 __skb_unlink(skb, list);
1965 kfree_skb(skb); 2017 kfree_skb(skb);
1966 } 2018 }
@@ -1989,13 +2041,11 @@ void fcoe_percpu_clean(struct fc_lport *lp)
1989 2041
1990/** 2042/**
1991 * fcoe_clean_pending_queue() - Dequeue a skb and free it 2043 * fcoe_clean_pending_queue() - Dequeue a skb and free it
1992 * @lp: the corresponding fc_lport 2044 * @lport: The local port to dequeue a skb on
1993 *
1994 * Returns: none
1995 */ 2045 */
1996void fcoe_clean_pending_queue(struct fc_lport *lp) 2046void fcoe_clean_pending_queue(struct fc_lport *lport)
1997{ 2047{
1998 struct fcoe_port *port = lport_priv(lp); 2048 struct fcoe_port *port = lport_priv(lport);
1999 struct sk_buff *skb; 2049 struct sk_buff *skb;
2000 2050
2001 spin_lock_bh(&port->fcoe_pending_queue.lock); 2051 spin_lock_bh(&port->fcoe_pending_queue.lock);
@@ -2008,10 +2058,10 @@ void fcoe_clean_pending_queue(struct fc_lport *lp)
2008} 2058}
2009 2059
2010/** 2060/**
2011 * fcoe_reset() - Resets the fcoe 2061 * fcoe_reset() - Reset a local port
2012 * @shost: shost the reset is from 2062 * @shost: The SCSI host associated with the local port to be reset
2013 * 2063 *
2014 * Returns: always 0 2064 * Returns: Always 0 (return value required by FC transport template)
2015 */ 2065 */
2016int fcoe_reset(struct Scsi_Host *shost) 2066int fcoe_reset(struct Scsi_Host *shost)
2017{ 2067{
@@ -2021,30 +2071,33 @@ int fcoe_reset(struct Scsi_Host *shost)
2021} 2071}
2022 2072
2023/** 2073/**
2024 * fcoe_hostlist_lookup_port() - find the corresponding lport by a given device 2074 * fcoe_hostlist_lookup_port() - Find the FCoE interface associated with a net device
2025 * @dev: this is currently ptr to net_device 2075 * @netdev: The net device used as a key
2026 * 2076 *
2027 * Returns: NULL or the located fcoe_port 2077 * Locking: Must be called with the RNL mutex held.
2028 * Locking: must be called with the RNL mutex held 2078 *
2079 * Returns: NULL or the FCoE interface
2029 */ 2080 */
2030static struct fcoe_interface * 2081static struct fcoe_interface *
2031fcoe_hostlist_lookup_port(const struct net_device *dev) 2082fcoe_hostlist_lookup_port(const struct net_device *netdev)
2032{ 2083{
2033 struct fcoe_interface *fcoe; 2084 struct fcoe_interface *fcoe;
2034 2085
2035 list_for_each_entry(fcoe, &fcoe_hostlist, list) { 2086 list_for_each_entry(fcoe, &fcoe_hostlist, list) {
2036 if (fcoe->netdev == dev) 2087 if (fcoe->netdev == netdev)
2037 return fcoe; 2088 return fcoe;
2038 } 2089 }
2039 return NULL; 2090 return NULL;
2040} 2091}
2041 2092
2042/** 2093/**
2043 * fcoe_hostlist_lookup() - Find the corresponding lport by netdev 2094 * fcoe_hostlist_lookup() - Find the local port associated with a
2044 * @netdev: ptr to net_device 2095 * given net device
2096 * @netdev: The netdevice used as a key
2045 * 2097 *
2046 * Returns: 0 for success 2098 * Locking: Must be called with the RTNL mutex held
2047 * Locking: must be called with the RTNL mutex held 2099 *
2100 * Returns: NULL or the local port
2048 */ 2101 */
2049static struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev) 2102static struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev)
2050{ 2103{
@@ -2055,11 +2108,13 @@ static struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev)
2055} 2108}
2056 2109
2057/** 2110/**
2058 * fcoe_hostlist_add() - Add a lport to lports list 2111 * fcoe_hostlist_add() - Add the FCoE interface identified by a local
2059 * @lp: ptr to the fc_lport to be added 2112 * port to the hostlist
2113 * @lport: The local port that identifies the FCoE interface to be added
2060 * 2114 *
2061 * Returns: 0 for success
2062 * Locking: must be called with the RTNL mutex held 2115 * Locking: must be called with the RTNL mutex held
2116 *
2117 * Returns: 0 for success
2063 */ 2118 */
2064static int fcoe_hostlist_add(const struct fc_lport *lport) 2119static int fcoe_hostlist_add(const struct fc_lport *lport)
2065{ 2120{
@@ -2076,15 +2131,15 @@ static int fcoe_hostlist_add(const struct fc_lport *lport)
2076} 2131}
2077 2132
2078/** 2133/**
2079 * fcoe_init() - fcoe module loading initialization 2134 * fcoe_init() - Initialize fcoe.ko
2080 * 2135 *
2081 * Returns 0 on success, negative on failure 2136 * Returns: 0 on success, or a negative value on failure
2082 */ 2137 */
2083static int __init fcoe_init(void) 2138static int __init fcoe_init(void)
2084{ 2139{
2140 struct fcoe_percpu_s *p;
2085 unsigned int cpu; 2141 unsigned int cpu;
2086 int rc = 0; 2142 int rc = 0;
2087 struct fcoe_percpu_s *p;
2088 2143
2089 mutex_lock(&fcoe_config_mutex); 2144 mutex_lock(&fcoe_config_mutex);
2090 2145
@@ -2121,15 +2176,15 @@ out_free:
2121module_init(fcoe_init); 2176module_init(fcoe_init);
2122 2177
2123/** 2178/**
2124 * fcoe_exit() - fcoe module unloading cleanup 2179 * fcoe_exit() - Clean up fcoe.ko
2125 * 2180 *
2126 * Returns 0 on success, negative on failure 2181 * Returns: 0 on success or a negative value on failure
2127 */ 2182 */
2128static void __exit fcoe_exit(void) 2183static void __exit fcoe_exit(void)
2129{ 2184{
2130 unsigned int cpu;
2131 struct fcoe_interface *fcoe, *tmp; 2185 struct fcoe_interface *fcoe, *tmp;
2132 struct fcoe_port *port; 2186 struct fcoe_port *port;
2187 unsigned int cpu;
2133 2188
2134 mutex_lock(&fcoe_config_mutex); 2189 mutex_lock(&fcoe_config_mutex);
2135 2190
@@ -2230,10 +2285,12 @@ static void fcoe_logo_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)
2230 * 2285 *
2231 * Most of the work here is just handed off to the libfc routine. 2286 * Most of the work here is just handed off to the libfc routine.
2232 */ 2287 */
2233static struct fc_seq *fcoe_elsct_send(struct fc_lport *lport, 2288static struct fc_seq *fcoe_elsct_send(struct fc_lport *lport, u32 did,
2234 u32 did, struct fc_frame *fp, unsigned int op, 2289 struct fc_frame *fp, unsigned int op,
2235 void (*resp)(struct fc_seq *, struct fc_frame *, void *), 2290 void (*resp)(struct fc_seq *,
2236 void *arg, u32 timeout) 2291 struct fc_frame *,
2292 void *),
2293 void *arg, u32 timeout)
2237{ 2294{
2238 struct fcoe_port *port = lport_priv(lport); 2295 struct fcoe_port *port = lport_priv(lport);
2239 struct fcoe_interface *fcoe = port->fcoe; 2296 struct fcoe_interface *fcoe = port->fcoe;
@@ -2362,4 +2419,3 @@ static void fcoe_set_vport_symbolic_name(struct fc_vport *vport)
2362 lport->tt.elsct_send(lport, FC_FID_DIR_SERV, fp, FC_NS_RSPN_ID, 2419 lport->tt.elsct_send(lport, FC_FID_DIR_SERV, fp, FC_NS_RSPN_ID,
2363 NULL, NULL, lport->e_d_tov); 2420 NULL, NULL, lport->e_d_tov);
2364} 2421}
2365
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h
index 99dfa7c2aeaa..c69b2c56c2d1 100644
--- a/drivers/scsi/fcoe/fcoe.h
+++ b/drivers/scsi/fcoe/fcoe.h
@@ -50,7 +50,7 @@ unsigned int fcoe_debug_logging;
50module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR); 50module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR);
51MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels"); 51MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels");
52 52
53#define FCOE_LOGGING 0x01 /* General logging, not categorized */ 53#define FCOE_LOGGING 0x01 /* General logging, not categorized */
54#define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */ 54#define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */
55 55
56#define FCOE_CHECK_LOGGING(LEVEL, CMD) \ 56#define FCOE_CHECK_LOGGING(LEVEL, CMD) \
@@ -70,8 +70,13 @@ do { \
70 printk(KERN_INFO "fcoe: %s: " fmt, \ 70 printk(KERN_INFO "fcoe: %s: " fmt, \
71 netdev->name, ##args);) 71 netdev->name, ##args);)
72 72
73/* 73/**
74 * this percpu struct for fcoe 74 * struct fcoe_percpu_s - The per-CPU context for FCoE receive threads
75 * @thread: The thread context
76 * @fcoe_rx_list: The queue of pending packets to process
77 * @page: The memory page for calculating frame trailer CRCs
78 * @crc_eof_offset: The offset into the CRC page pointing to available
79 * memory for a new trailer
75 */ 80 */
76struct fcoe_percpu_s { 81struct fcoe_percpu_s {
77 struct task_struct *thread; 82 struct task_struct *thread;
@@ -80,38 +85,62 @@ struct fcoe_percpu_s {
80 int crc_eof_offset; 85 int crc_eof_offset;
81}; 86};
82 87
83/* 88/**
84 * an FCoE interface, 1:1 with netdev 89 * struct fcoe_interface - A FCoE interface
90 * @list: Handle for a list of FCoE interfaces
91 * @netdev: The associated net device
92 * @fcoe_packet_type: FCoE packet type
93 * @fip_packet_type: FIP packet type
94 * @ctlr: The FCoE controller (for FIP)
95 * @oem: The offload exchange manager for all local port
96 * instances associated with this port
97 * @kref: The kernel reference
98 *
99 * This structure is 1:1 with a net devive.
85 */ 100 */
86struct fcoe_interface { 101struct fcoe_interface {
87 struct list_head list; 102 struct list_head list;
88 struct net_device *netdev; 103 struct net_device *netdev;
89 struct packet_type fcoe_packet_type; 104 struct packet_type fcoe_packet_type;
90 struct packet_type fip_packet_type; 105 struct packet_type fip_packet_type;
91 struct fcoe_ctlr ctlr; 106 struct fcoe_ctlr ctlr;
92 struct fc_exch_mgr *oem; /* offload exchange manager */ 107 struct fc_exch_mgr *oem;
93 struct kref kref; 108 struct kref kref;
94}; 109};
95 110
96/* 111/**
97 * the FCoE private structure that's allocated along with the 112 * struct fcoe_port - The FCoE private structure
98 * Scsi_Host and libfc fc_lport structures 113 * @fcoe: The associated fcoe interface
114 * @lport: The associated local port
115 * @fcoe_pending_queue: The pending Rx queue of skbs
116 * @fcoe_pending_queue_active: Indicates if the pending queue is active
117 * @timer: The queue timer
118 * @destroy_work: Handle for work context
119 * (to prevent RTNL deadlocks)
120 * @data_srt_addr: Source address for data
121 *
122 * An instance of this structure is to be allocated along with the
123 * Scsi_Host and libfc fc_lport structures.
99 */ 124 */
100struct fcoe_port { 125struct fcoe_port {
101 struct fcoe_interface *fcoe; 126 struct fcoe_interface *fcoe;
102 struct fc_lport *lport; 127 struct fc_lport *lport;
103 struct sk_buff_head fcoe_pending_queue; 128 struct sk_buff_head fcoe_pending_queue;
104 u8 fcoe_pending_queue_active; 129 u8 fcoe_pending_queue_active;
105 struct timer_list timer; /* queue timer */ 130 struct timer_list timer;
106 struct work_struct destroy_work; /* to prevent rtnl deadlocks */ 131 struct work_struct destroy_work;
107 u8 data_src_addr[ETH_ALEN]; 132 u8 data_src_addr[ETH_ALEN];
108}; 133};
109 134
110#define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr) 135#define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
111 136
112static inline struct net_device *fcoe_netdev(const struct fc_lport *lp) 137/**
138 * fcoe_netdev() - Return the net device associated with a local port
139 * @lport: The local port to get the net device from
140 */
141static inline struct net_device *fcoe_netdev(const struct fc_lport *lport)
113{ 142{
114 return ((struct fcoe_port *)lport_priv(lp))->fcoe->netdev; 143 return ((struct fcoe_port *)lport_priv(lport))->fcoe->netdev;
115} 144}
116 145
117#endif /* _FCOE_H_ */ 146#endif /* _FCOE_H_ */