hugetlb: factor init_nodemask_of_node()
[safe/jmp/linux-2.6] / include / scsi / libfcoe.h
index 666cc13..c603f4a 100644 (file)
@@ -53,32 +53,36 @@ enum fip_state {
 };
 
 /**
- * struct fcoe_ctlr - FCoE Controller and FIP state.
- * @state:     internal FIP state for network link and FIP or non-FIP mode.
- * @lp:                &fc_lport: libfc local port.
- * @sel_fcf:   currently selected FCF, or NULL.
- * @fcfs:      list of discovered FCFs.
- * @fcf_count: number of discovered FCF entries.
- * @sol_time:  time when a multicast solicitation was last sent.
- * @sel_time:  time after which to select an FCF.
- * @port_ka_time: time of next port keep-alive.
- * @ctlr_ka_time: time of next controller keep-alive.
- * @timer:     timer struct used for all delayed events.
- * @link_work: &work_struct for doing FCF selection.
- * @recv_work: &work_struct for receiving FIP frames.
+ * struct fcoe_ctlr - FCoE Controller and FIP state
+ * @state:        internal FIP state for network link and FIP or non-FIP mode.
+ * @mode:         LLD-selected mode.
+ * @lp:                   &fc_lport: libfc local port.
+ * @sel_fcf:      currently selected FCF, or NULL.
+ * @fcfs:         list of discovered FCFs.
+ * @fcf_count:    number of discovered FCF entries.
+ * @sol_time:     time when a multicast solicitation was last sent.
+ * @sel_time:     time after which to select an FCF.
+ * @port_ka_time:  time of next port keep-alive.
+ * @ctlr_ka_time:  time of next controller keep-alive.
+ * @timer:        timer struct used for all delayed events.
+ * @link_work:    &work_struct for doing FCF selection.
+ * @recv_work:    &work_struct for receiving FIP frames.
  * @fip_recv_list: list of received FIP frames.
- * @user_mfs:  configured maximum FC frame size, including FC header.
- * @flogi_oxid: exchange ID of most recent fabric login.
- * @flogi_count: number of FLOGI attempts in AUTO mode.
- * @link:      current link status for libfc.
- * @last_link: last link state reported to libfc.
- * @map_dest:  use the FC_MAP mode for destination MAC addresses.
- * @dest_addr: MAC address of the selected FC forwarder.
- * @ctl_src_addr: the native MAC address of our local port.
- * @data_src_addr: the assigned MAC address for the local port after FLOGI.
- * @send:      LLD-supplied function to handle sending of FIP Ethernet frames.
- * @update_mac: LLD-supplied function to handle changes to MAC addresses.
- * @lock:      lock protecting this structure.
+ * @user_mfs:     configured maximum FC frame size, including FC header.
+ * @flogi_oxid:    exchange ID of most recent fabric login.
+ * @flogi_count:   number of FLOGI attempts in AUTO mode.
+ * @link:         current link status for libfc.
+ * @last_link:    last link state reported to libfc.
+ * @map_dest:     use the FC_MAP mode for destination MAC addresses.
+ * @spma:         supports SPMA server-provided MACs mode
+ * @send_ctlr_ka:  need to send controller keep alive
+ * @send_port_ka:  need to send port keep alives
+ * @dest_addr:    MAC address of the selected FC forwarder.
+ * @ctl_src_addr:  the native MAC address of our local port.
+ * @send:         LLD-supplied function to handle sending FIP Ethernet frames
+ * @update_mac:    LLD-supplied function to handle changes to MAC addresses.
+ * @get_src_addr:  LLD-supplied function to supply a source MAC address.
+ * @lock:         lock protecting this structure.
  *
  * This structure is used by all FCoE drivers.  It contains information
  * needed by all FCoE low-level drivers (LLDs) as well as internal state
@@ -86,6 +90,7 @@ enum fip_state {
  */
 struct fcoe_ctlr {
        enum fip_state state;
+       enum fip_state mode;
        struct fc_lport *lp;
        struct fcoe_fcf *sel_fcf;
        struct list_head fcfs;
@@ -103,28 +108,32 @@ struct fcoe_ctlr {
        u8 flogi_count;
        u8 link;
        u8 last_link;
+       u8 reset_req;
        u8 map_dest;
+       u8 spma;
+       u8 send_ctlr_ka;
+       u8 send_port_ka;
        u8 dest_addr[ETH_ALEN];
        u8 ctl_src_addr[ETH_ALEN];
-       u8 data_src_addr[ETH_ALEN];
 
        void (*send)(struct fcoe_ctlr *, struct sk_buff *);
-       void (*update_mac)(struct fcoe_ctlr *, u8 *old, u8 *new);
+       void (*update_mac)(struct fc_lport *, u8 *addr);
+       u8 * (*get_src_addr)(struct fc_lport *);
        spinlock_t lock;
 };
 
-/*
- * struct fcoe_fcf - Fibre-Channel Forwarder.
- * @list:      list linkage.
- * @time:      system time (jiffies) when an advertisement was last received.
- * @switch_name: WWN of switch from advertisement.
- * @fabric_name: WWN of fabric from advertisement.
- * @fc_map:    FC_MAP value from advertisement.
- * @fcf_mac:   Ethernet address of the FCF.
- * @vfid:      virtual fabric ID.
- * @pri:       seletion priority, smaller values are better.
- * @flags:     flags received from advertisement.
- * @fka_period:        keep-alive period, in jiffies.
+/**
+ * struct fcoe_fcf - Fibre-Channel Forwarder
+ * @list:       list linkage
+ * @time:       system time (jiffies) when an advertisement was last received
+ * @switch_name: WWN of switch from advertisement
+ * @fabric_name: WWN of fabric from advertisement
+ * @fc_map:     FC_MAP value from advertisement
+ * @fcf_mac:    Ethernet address of the FCF
+ * @vfid:       virtual fabric ID
+ * @pri:        selection priority, smaller values are better
+ * @flags:      flags received from advertisement
+ * @fka_period:         keep-alive period, in jiffies
  *
  * A Fibre-Channel Forwarder (FCF) is the entity on the Ethernet that
  * passes FCoE frames on to an FC fabric.  This structure represents
@@ -146,6 +155,7 @@ struct fcoe_fcf {
        u8 pri;
        u16 flags;
        u32 fka_period;
+       u8 fd_flags:1;
 };
 
 /* FIP API functions */
@@ -153,9 +163,10 @@ void fcoe_ctlr_init(struct fcoe_ctlr *);
 void fcoe_ctlr_destroy(struct fcoe_ctlr *);
 void fcoe_ctlr_link_up(struct fcoe_ctlr *);
 int fcoe_ctlr_link_down(struct fcoe_ctlr *);
-int fcoe_ctlr_els_send(struct fcoe_ctlr *, struct sk_buff *);
+int fcoe_ctlr_els_send(struct fcoe_ctlr *, struct fc_lport *, struct sk_buff *);
 void fcoe_ctlr_recv(struct fcoe_ctlr *, struct sk_buff *);
-int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *, struct fc_frame *fp, u8 *sa);
+int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *, struct fc_lport *,
+                        struct fc_frame *);
 
 /* libfcoe funcs */
 u64 fcoe_wwn_from_mac(unsigned char mac[], unsigned int, unsigned int);