Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 110583
b: refs/heads/master
c: a30c3f6
h: refs/heads/master
i:
  110581: 8703566
  110579: 7b1768f
  110575: 9188d0f
v: v3
  • Loading branch information
Andrew Vasquez authored and James Bottomley committed Oct 3, 2008
1 parent 8ff4c45 commit be847e0
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7404ad3b6d04efbd918e9e2e776bf560fbedf47d
refs/heads/master: a30c3f69e6336cb9b09a989595e417367e4e9b1b
36 changes: 36 additions & 0 deletions trunk/Documentation/scsi/scsi_fc_transport.txt
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,42 @@ Other:
was updated to remove all vports for the fc_host as well.


Transport supplied functions
----------------------------

The following functions are supplied by the FC-transport for use by LLDs.

fc_vport_create - create a vport
fc_vport_terminate - detach and remove a vport

Details:

/**
* fc_vport_create - Admin App or LLDD requests creation of a vport
* @shost: scsi host the virtual port is connected to.
* @ids: The world wide names, FC4 port roles, etc for
* the virtual port.
*
* Notes:
* This routine assumes no locks are held on entry.
*/
struct fc_vport *
fc_vport_create(struct Scsi_Host *shost, struct fc_vport_identifiers *ids)

/**
* fc_vport_terminate - Admin App or LLDD requests termination of a vport
* @vport: fc_vport to be terminated
*
* Calls the LLDD vport_delete() function, then deallocates and removes
* the vport from the shost and object tree.
*
* Notes:
* This routine assumes no locks are held on entry.
*/
int
fc_vport_terminate(struct fc_vport *vport)


Credits
=======
The following people have contributed to this document:
Expand Down
54 changes: 26 additions & 28 deletions trunk/drivers/scsi/scsi_transport_fc.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,31 +40,7 @@

static int fc_queue_work(struct Scsi_Host *, struct work_struct *);
static void fc_vport_sched_delete(struct work_struct *work);

/*
* This is a temporary carrier for creating a vport. It will eventually
* be replaced by a real message definition for sgio or netlink.
*
* fc_vport_identifiers: This set of data contains all elements
* to uniquely identify and instantiate a FC virtual port.
*
* Notes:
* symbolic_name: The driver is to append the symbolic_name string data
* to the symbolic_node_name data that it generates by default.
* the resulting combination should then be registered with the switch.
* It is expected that things like Xen may stuff a VM title into
* this field.
*/
struct fc_vport_identifiers {
u64 node_name;
u64 port_name;
u32 roles;
bool disable;
enum fc_port_type vport_type; /* only FC_PORTTYPE_NPIV allowed */
char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN];
};

static int fc_vport_create(struct Scsi_Host *shost, int channel,
static int fc_vport_setup(struct Scsi_Host *shost, int channel,
struct device *pdev, struct fc_vport_identifiers *ids,
struct fc_vport **vport);

Expand Down Expand Up @@ -1760,7 +1736,7 @@ store_fc_host_vport_create(struct device *dev, struct device_attribute *attr,
vid.disable = false; /* always enabled */

/* we only allow support on Channel 0 !!! */
stat = fc_vport_create(shost, 0, &shost->shost_gendev, &vid, &vport);
stat = fc_vport_setup(shost, 0, &shost->shost_gendev, &vid, &vport);
return stat ? stat : count;
}
static FC_DEVICE_ATTR(host, vport_create, S_IWUSR, NULL,
Expand Down Expand Up @@ -3103,7 +3079,7 @@ fc_scsi_scan_rport(struct work_struct *work)


/**
* fc_vport_create - allocates and creates a FC virtual port.
* fc_vport_setup - allocates and creates a FC virtual port.
* @shost: scsi host the virtual port is connected to.
* @channel: Channel on shost port connected to.
* @pdev: parent device for vport
Expand All @@ -3118,7 +3094,7 @@ fc_scsi_scan_rport(struct work_struct *work)
* This routine assumes no locks are held on entry.
*/
static int
fc_vport_create(struct Scsi_Host *shost, int channel, struct device *pdev,
fc_vport_setup(struct Scsi_Host *shost, int channel, struct device *pdev,
struct fc_vport_identifiers *ids, struct fc_vport **ret_vport)
{
struct fc_host_attrs *fc_host = shost_to_fc_host(shost);
Expand Down Expand Up @@ -3231,6 +3207,28 @@ fc_vport_create(struct Scsi_Host *shost, int channel, struct device *pdev,
return error;
}

/**
* fc_vport_create - Admin App or LLDD requests creation of a vport
* @shost: scsi host the virtual port is connected to.
* @channel: channel on shost port connected to.
* @ids: The world wide names, FC4 port roles, etc for
* the virtual port.
*
* Notes:
* This routine assumes no locks are held on entry.
*/
struct fc_vport *
fc_vport_create(struct Scsi_Host *shost, int channel,
struct fc_vport_identifiers *ids)
{
int stat;
struct fc_vport *vport;

stat = fc_vport_setup(shost, channel, &shost->shost_gendev,
ids, &vport);
return stat ? NULL : vport;
}
EXPORT_SYMBOL(fc_vport_create);

/**
* fc_vport_terminate - Admin App or LLDD requests termination of a vport
Expand Down
23 changes: 22 additions & 1 deletion trunk/include/scsi/scsi_transport_fc.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,26 @@ enum fc_tgtid_binding_type {
struct device_attribute dev_attr_vport_##_name = \
__ATTR(_name,_mode,_show,_store)

/*
* fc_vport_identifiers: This set of data contains all elements
* to uniquely identify and instantiate a FC virtual port.
*
* Notes:
* symbolic_name: The driver is to append the symbolic_name string data
* to the symbolic_node_name data that it generates by default.
* the resulting combination should then be registered with the switch.
* It is expected that things like Xen may stuff a VM title into
* this field.
*/
#define FC_VPORT_SYMBOLIC_NAMELEN 64
struct fc_vport_identifiers {
u64 node_name;
u64 port_name;
u32 roles;
bool disable;
enum fc_port_type vport_type; /* only FC_PORTTYPE_NPIV allowed */
char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN];
};

/*
* FC Virtual Port Attributes
Expand Down Expand Up @@ -197,7 +217,6 @@ struct device_attribute dev_attr_vport_##_name = \
* managed by the transport w/o driver interaction.
*/

#define FC_VPORT_SYMBOLIC_NAMELEN 64
struct fc_vport {
/* Fixed Attributes */

Expand Down Expand Up @@ -732,6 +751,8 @@ void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number,
* be sure to read the Vendor Type and ID formatting requirements
* specified in scsi_netlink.h
*/
struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel,
struct fc_vport_identifiers *);
int fc_vport_terminate(struct fc_vport *vport);

#endif /* SCSI_TRANSPORT_FC_H */

0 comments on commit be847e0

Please sign in to comment.