Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (37 commits) [SCSI] zfcp: fix double dbf id usage [SCSI] zfcp: wait on SCSI work to be finished before proceeding with init dev [SCSI] zfcp: fix erp list usage without using locks [SCSI] zfcp: prevent fc_remote_port_delete calls for unregistered rport [SCSI] zfcp: fix deadlock caused by shared work queue tasks [SCSI] zfcp: put threshold data in hba trace [SCSI] zfcp: Simplify zfcp data structures [SCSI] zfcp: Simplify get_adapter_by_busid [SCSI] zfcp: remove all typedefs and replace them with standards [SCSI] zfcp: attach and release SAN nameserver port on demand [SCSI] zfcp: remove unused references, declarations and flags [SCSI] zfcp: Update message with input from review [SCSI] zfcp: add queue_full sysfs attribute [SCSI] scsi_dh: suppress comparison warning [SCSI] scsi_dh: add Dell product information into rdac device handler [SCSI] qla2xxx: remove the unused SCSI_QLOGIC_FC_FIRMWARE option [SCSI] qla2xxx: fix printk format warnings [SCSI] qla2xxx: Update version number to 8.02.01-k8. [SCSI] qla2xxx: Ignore payload reserved-bits during RSCN processing. [SCSI] qla2xxx: Additional residual-count corrections during UNDERRUN handling. ...
This commit is contained in:
@@ -42,9 +42,11 @@ enum scsi_device_state {
|
||||
* originate in the mid-layer) */
|
||||
SDEV_OFFLINE, /* Device offlined (by error handling or
|
||||
* user request */
|
||||
SDEV_BLOCK, /* Device blocked by scsi lld. No scsi
|
||||
* commands from user or midlayer should be issued
|
||||
* to the scsi lld. */
|
||||
SDEV_BLOCK, /* Device blocked by scsi lld. No
|
||||
* scsi commands from user or midlayer
|
||||
* should be issued to the scsi
|
||||
* lld. */
|
||||
SDEV_CREATED_BLOCK, /* same as above but for created devices */
|
||||
};
|
||||
|
||||
enum scsi_device_event {
|
||||
@@ -384,10 +386,23 @@ static inline unsigned int sdev_id(struct scsi_device *sdev)
|
||||
#define scmd_id(scmd) sdev_id((scmd)->device)
|
||||
#define scmd_channel(scmd) sdev_channel((scmd)->device)
|
||||
|
||||
/*
|
||||
* checks for positions of the SCSI state machine
|
||||
*/
|
||||
static inline int scsi_device_online(struct scsi_device *sdev)
|
||||
{
|
||||
return sdev->sdev_state != SDEV_OFFLINE;
|
||||
}
|
||||
static inline int scsi_device_blocked(struct scsi_device *sdev)
|
||||
{
|
||||
return sdev->sdev_state == SDEV_BLOCK ||
|
||||
sdev->sdev_state == SDEV_CREATED_BLOCK;
|
||||
}
|
||||
static inline int scsi_device_created(struct scsi_device *sdev)
|
||||
{
|
||||
return sdev->sdev_state == SDEV_CREATED ||
|
||||
sdev->sdev_state == SDEV_CREATED_BLOCK;
|
||||
}
|
||||
|
||||
/* accessor functions for the SCSI parameters */
|
||||
static inline int scsi_device_sync(struct scsi_device *sdev)
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
#ifndef SCSI_NETLINK_H
|
||||
#define SCSI_NETLINK_H
|
||||
|
||||
#include <linux/netlink.h>
|
||||
|
||||
|
||||
/*
|
||||
* This file intended to be included by both kernel and user space
|
||||
*/
|
||||
@@ -55,7 +58,41 @@ struct scsi_nl_hdr {
|
||||
#define SCSI_NL_TRANSPORT_FC 1
|
||||
#define SCSI_NL_MAX_TRANSPORTS 2
|
||||
|
||||
/* scsi_nl_hdr->msgtype values are defined in each transport */
|
||||
/* Transport-based scsi_nl_hdr->msgtype values are defined in each transport */
|
||||
|
||||
/*
|
||||
* GENERIC SCSI scsi_nl_hdr->msgtype Values
|
||||
*/
|
||||
/* kernel -> user */
|
||||
#define SCSI_NL_SHOST_VENDOR 0x0001
|
||||
/* user -> kernel */
|
||||
/* SCSI_NL_SHOST_VENDOR msgtype is kernel->user and user->kernel */
|
||||
|
||||
|
||||
/*
|
||||
* Message Structures :
|
||||
*/
|
||||
|
||||
/* macro to round up message lengths to 8byte boundary */
|
||||
#define SCSI_NL_MSGALIGN(len) (((len) + 7) & ~7)
|
||||
|
||||
|
||||
/*
|
||||
* SCSI HOST Vendor Unique messages :
|
||||
* SCSI_NL_SHOST_VENDOR
|
||||
*
|
||||
* Note: The Vendor Unique message payload will begin directly after
|
||||
* this structure, with the length of the payload per vmsg_datalen.
|
||||
*
|
||||
* Note: When specifying vendor_id, be sure to read the Vendor Type and ID
|
||||
* formatting requirements specified below
|
||||
*/
|
||||
struct scsi_nl_host_vendor_msg {
|
||||
struct scsi_nl_hdr snlh; /* must be 1st element ! */
|
||||
uint64_t vendor_id;
|
||||
uint16_t host_no;
|
||||
uint16_t vmsg_datalen;
|
||||
} __attribute__((aligned(sizeof(uint64_t))));
|
||||
|
||||
|
||||
/*
|
||||
@@ -83,5 +120,28 @@ struct scsi_nl_hdr {
|
||||
}
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <scsi/scsi_host.h>
|
||||
|
||||
/* Exported Kernel Interfaces */
|
||||
int scsi_nl_add_transport(u8 tport,
|
||||
int (*msg_handler)(struct sk_buff *),
|
||||
void (*event_handler)(struct notifier_block *, unsigned long, void *));
|
||||
void scsi_nl_remove_transport(u8 tport);
|
||||
|
||||
int scsi_nl_add_driver(u64 vendor_id, struct scsi_host_template *hostt,
|
||||
int (*nlmsg_handler)(struct Scsi_Host *shost, void *payload,
|
||||
u32 len, u32 pid),
|
||||
void (*nlevt_handler)(struct notifier_block *nb,
|
||||
unsigned long event, void *notify_ptr));
|
||||
void scsi_nl_remove_driver(u64 vendor_id);
|
||||
|
||||
void scsi_nl_send_transport_msg(u32 pid, struct scsi_nl_hdr *hdr);
|
||||
int scsi_nl_send_vendor_msg(u32 pid, unsigned short host_no, u64 vendor_id,
|
||||
char *data_buf, u32 data_len);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* SCSI_NETLINK_H */
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user