]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/s390/scsi/zfcp_def.h
[S390] bus_id -> dev_name conversions
[linux-2.6-omap-h63xx.git] / drivers / s390 / scsi / zfcp_def.h
index 699ecaf2e503155e49f2137d77e34df74be9a61e..c69345f1f73c7901b40dfe5af88245a579a0da13 100644 (file)
 
 /*************** FIBRE CHANNEL PROTOCOL SPECIFIC DEFINES ********************/
 
-typedef unsigned long long wwn_t;
-typedef unsigned long long fcp_lun_t;
-/* data length field may be at variable position in FCP-2 FCP_CMND IU */
-typedef unsigned int       fcp_dl_t;
-
 /* timeout for name-server lookup (in seconds) */
 #define ZFCP_NS_GID_PN_TIMEOUT         10
 
@@ -106,7 +101,7 @@ typedef unsigned int       fcp_dl_t;
 
 /* FCP(-2) FCP_CMND IU */
 struct fcp_cmnd_iu {
-       fcp_lun_t fcp_lun;         /* FCP logical unit number */
+       u64 fcp_lun;       /* FCP logical unit number */
        u8  crn;                   /* command reference number */
        u8  reserved0:5;           /* reserved */
        u8  task_attribute:3;      /* task attribute */
@@ -181,7 +176,7 @@ struct fcp_rscn_element {
 struct fcp_logo {
         u32 command;
         u32 nport_did;
-        wwn_t nport_wwpn;
+       u64 nport_wwpn;
 } __attribute__((packed));
 
 /*
@@ -253,6 +248,7 @@ struct zfcp_ls_adisc {
 #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED     0x00000200
 
 /* FC-PH/FC-GS well-known address identifiers for generic services */
+#define ZFCP_DID_WKA                           0xFFFFF0
 #define ZFCP_DID_MANAGEMENT_SERVICE            0xFFFFFA
 #define ZFCP_DID_TIME_SERVICE                  0xFFFFFB
 #define ZFCP_DID_DIRECTORY_SERVICE             0xFFFFFC
@@ -264,13 +260,15 @@ struct zfcp_ls_adisc {
 #define ZFCP_STATUS_PORT_DID_DID               0x00000002
 #define ZFCP_STATUS_PORT_PHYS_CLOSING          0x00000004
 #define ZFCP_STATUS_PORT_NO_WWPN               0x00000008
-#define ZFCP_STATUS_PORT_NO_SCSI_ID            0x00000010
 #define ZFCP_STATUS_PORT_INVALID_WWPN          0x00000020
 
-/* for ports with well known addresses */
-#define ZFCP_STATUS_PORT_WKA \
-               (ZFCP_STATUS_PORT_NO_WWPN | \
-                ZFCP_STATUS_PORT_NO_SCSI_ID)
+/* well known address (WKA) port status*/
+enum zfcp_wka_status {
+       ZFCP_WKA_PORT_OFFLINE,
+       ZFCP_WKA_PORT_CLOSING,
+       ZFCP_WKA_PORT_OPENING,
+       ZFCP_WKA_PORT_ONLINE,
+};
 
 /* logical unit status */
 #define ZFCP_STATUS_UNIT_SHARED                        0x00000004
@@ -327,7 +325,7 @@ struct ct_hdr {
  * a port name is required */
 struct ct_iu_gid_pn_req {
        struct ct_hdr header;
-       wwn_t wwpn;
+       u64 wwpn;
 } __attribute__ ((packed));
 
 /* FS_ACC IU and data unit for GID_PN nameserver request */
@@ -336,11 +334,9 @@ struct ct_iu_gid_pn_resp {
        u32 d_id;
 } __attribute__ ((packed));
 
-typedef void (*zfcp_send_ct_handler_t)(unsigned long);
-
 /**
  * struct zfcp_send_ct - used to pass parameters to function zfcp_fsf_send_ct
- * @port: port where the request is sent to
+ * @wka_port: port where the request is sent to
  * @req: scatter-gather list for request
  * @resp: scatter-gather list for response
  * @req_count: number of elements in request scatter-gather list
@@ -352,12 +348,12 @@ typedef void (*zfcp_send_ct_handler_t)(unsigned long);
  * @status: used to pass error status to calling function
  */
 struct zfcp_send_ct {
-       struct zfcp_port *port;
+       struct zfcp_wka_port *wka_port;
        struct scatterlist *req;
        struct scatterlist *resp;
        unsigned int req_count;
        unsigned int resp_count;
-       zfcp_send_ct_handler_t handler;
+       void (*handler)(unsigned long);
        unsigned long handler_data;
        int timeout;
        struct completion *completion;
@@ -374,8 +370,6 @@ struct zfcp_gid_pn_data {
         struct zfcp_port *port;
 };
 
-typedef void (*zfcp_send_els_handler_t)(unsigned long);
-
 /**
  * struct zfcp_send_els - used to pass parameters to function zfcp_fsf_send_els
  * @adapter: adapter where request is sent from
@@ -399,22 +393,28 @@ struct zfcp_send_els {
        struct scatterlist *resp;
        unsigned int req_count;
        unsigned int resp_count;
-       zfcp_send_els_handler_t handler;
+       void (*handler)(unsigned long);
        unsigned long handler_data;
        struct completion *completion;
        int ls_code;
        int status;
 };
 
+struct zfcp_wka_port {
+       struct zfcp_adapter     *adapter;
+       wait_queue_head_t       completion_wq;
+       enum zfcp_wka_status    status;
+       atomic_t                refcount;
+       u32                     d_id;
+       u32                     handle;
+       struct mutex            mutex;
+       struct delayed_work     work;
+};
+
 struct zfcp_qdio_queue {
-       struct qdio_buffer *sbal[QDIO_MAX_BUFFERS_PER_Q]; /* SBALs */
-       u8                 first;             /* index of next free bfr
-                                                in queue (free_count>0) */
-       atomic_t           count;             /* number of free buffers
-                                                in queue */
-       spinlock_t         lock;              /* lock for operations on queue */
-       int                pci_batch;         /* SBALs since PCI indication
-                                                was last set */
+       struct qdio_buffer *sbal[QDIO_MAX_BUFFERS_PER_Q];
+       u8                 first;       /* index of next free bfr in queue */
+       atomic_t           count;       /* number of free buffers in queue */
 };
 
 struct zfcp_erp_action {
@@ -454,8 +454,8 @@ struct zfcp_adapter {
        atomic_t                refcount;          /* reference count */
        wait_queue_head_t       remove_wq;         /* can be used to wait for
                                                      refcount drop to zero */
-       wwn_t                   peer_wwnn;         /* P2P peer WWNN */
-       wwn_t                   peer_wwpn;         /* P2P peer WWPN */
+       u64                     peer_wwnn;         /* P2P peer WWNN */
+       u64                     peer_wwpn;         /* P2P peer WWPN */
        u32                     peer_d_id;         /* P2P peer D_ID */
        struct ccw_device       *ccw_device;       /* S/390 ccw device */
        u32                     hydra_version;     /* Hydra version */
@@ -466,13 +466,13 @@ struct zfcp_adapter {
        u16                     timer_ticks;       /* time int for a tick */
        struct Scsi_Host        *scsi_host;        /* Pointer to mid-layer */
        struct list_head        port_list_head;    /* remote port list */
-       struct list_head        port_remove_lh;    /* head of ports to be
-                                                     removed */
-       u32                     ports;             /* number of remote ports */
        unsigned long           req_no;            /* unique FSF req number */
        struct list_head        *req_list;         /* list of pending reqs */
        spinlock_t              req_list_lock;     /* request list lock */
        struct zfcp_qdio_queue  req_q;             /* request queue */
+       spinlock_t              req_q_lock;        /* for operations on queue */
+       int                     req_q_pci_batch;   /* SBALs since PCI indication
+                                                     was last set */
        u32                     fsf_req_seq_no;    /* FSF cmnd seq number */
        wait_queue_head_t       request_wq;        /* can be used to wait for
                                                      more avaliable SBALs */
@@ -496,7 +496,7 @@ struct zfcp_adapter {
                                                      actions */
        u32                     erp_low_mem_count; /* nr of erp actions waiting
                                                      for memory */
-       struct zfcp_port        *nameserver_port;  /* adapter's nameserver */
+       struct zfcp_wka_port    nsp;               /* adapter's nameserver */
        debug_info_t            *rec_dbf;
        debug_info_t            *hba_dbf;
        debug_info_t            *san_dbf;          /* debug feature areas */
@@ -511,7 +511,6 @@ struct zfcp_adapter {
        struct zfcp_scsi_dbf_record     scsi_dbf_buf;
        struct zfcp_adapter_mempool     pool;      /* Adapter memory pools */
        struct qdio_initialize  qdio_init_data;    /* for qdio_establish */
-       struct device           generic_services;  /* directory for WKA ports */
        struct fc_host_statistics *fc_stats;
        struct fsf_qtcb_bottom_port *stats_reset_data;
        unsigned long           stats_reset;
@@ -528,18 +527,16 @@ struct zfcp_port {
                                                  refcount drop to zero */
        struct zfcp_adapter    *adapter;       /* adapter used to access port */
        struct list_head       unit_list_head; /* head of logical unit list */
-       struct list_head       unit_remove_lh; /* head of luns to be removed
-                                                 list */
-       u32                    units;          /* # of logical units in list */
        atomic_t               status;         /* status of this remote port */
-       wwn_t                  wwnn;           /* WWNN if known */
-       wwn_t                  wwpn;           /* WWPN */
+       u64                    wwnn;           /* WWNN if known */
+       u64                    wwpn;           /* WWPN */
        u32                    d_id;           /* D_ID */
        u32                    handle;         /* handle assigned by FSF */
        struct zfcp_erp_action erp_action;     /* pending error recovery */
         atomic_t               erp_counter;
        u32                    maxframe_size;
        u32                    supported_classes;
+       struct work_struct     gid_pn_work;
 };
 
 struct zfcp_unit {
@@ -550,8 +547,7 @@ struct zfcp_unit {
                                                  refcount drop to zero */
        struct zfcp_port       *port;          /* remote port of unit */
        atomic_t               status;         /* status of this logical unit */
-       unsigned int           scsi_lun;       /* own SCSI LUN */
-       fcp_lun_t              fcp_lun;        /* own FCP_LUN */
+       u64                    fcp_lun;        /* own FCP_LUN */
        u32                    handle;         /* handle assigned by FSF */
         struct scsi_device     *device;        /* scsi device struct pointer */
        struct zfcp_erp_action erp_action;     /* pending error recovery */
@@ -593,23 +589,20 @@ struct zfcp_fsf_req {
 struct zfcp_data {
        struct scsi_host_template scsi_host_template;
        struct scsi_transport_template *scsi_transport_template;
-        atomic_t                status;             /* Module status flags */
        struct list_head        adapter_list_head;  /* head of adapter list */
-       struct list_head        adapter_remove_lh;  /* head of adapters to be
-                                                      removed */
-       u32                     adapters;           /* # of adapters in list */
        rwlock_t                config_lock;        /* serialises changes
                                                       to adapter/port/unit
                                                       lists */
        struct semaphore        config_sema;        /* serialises configuration
                                                       changes */
        atomic_t                loglevel;            /* current loglevel */
-       char                    init_busid[BUS_ID_SIZE];
-       wwn_t                   init_wwpn;
-       fcp_lun_t               init_fcp_lun;
-       struct kmem_cache               *fsf_req_qtcb_cache;
-       struct kmem_cache               *sr_buffer_cache;
-       struct kmem_cache               *gid_pn_cache;
+       char                    init_busid[20];
+       u64                     init_wwpn;
+       u64                     init_fcp_lun;
+       struct kmem_cache       *fsf_req_qtcb_cache;
+       struct kmem_cache       *sr_buffer_cache;
+       struct kmem_cache       *gid_pn_cache;
+       struct workqueue_struct *work_queue;
 };
 
 /* struct used by memory pools for fsf_requests */