[SCSI] wd33c93: cleanups
[safe/jmp/linux-2.6] / drivers / scsi / qla4xxx / ql4_os.c
index 01308e7..e69160a 100644 (file)
@@ -54,8 +54,9 @@ static void qla4xxx_config_dma_addressing(struct scsi_qla_host *ha);
 /*
  * iSCSI template entry points
  */
-static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
-                            uint32_t enable, struct sockaddr *dst_addr);
+static int qla4xxx_tgt_dscvr(struct Scsi_Host *shost,
+                            enum iscsi_tgt_dscvr type, uint32_t enable,
+                            struct sockaddr *dst_addr);
 static int qla4xxx_conn_get_param(struct iscsi_cls_conn *conn,
                                  enum iscsi_param param, char *buf);
 static int qla4xxx_sess_get_param(struct iscsi_cls_session *sess,
@@ -101,9 +102,13 @@ static struct scsi_host_template qla4xxx_driver_template = {
 static struct iscsi_transport qla4xxx_iscsi_transport = {
        .owner                  = THIS_MODULE,
        .name                   = DRIVER_NAME,
+       .caps                   = CAP_FW_DB | CAP_SENDTARGETS_OFFLOAD |
+                                 CAP_DATA_PATH_OFFLOAD,
        .param_mask             = ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS |
                                  ISCSI_TARGET_NAME | ISCSI_TPGT,
-       .host_param_mask        = ISCSI_HOST_HWADDRESS,
+       .host_param_mask        = ISCSI_HOST_HWADDRESS |
+                                 ISCSI_HOST_IPADDRESS |
+                                 ISCSI_HOST_INITIATOR_NAME,
        .sessiondata_size       = sizeof(struct ddb_entry),
        .host_template          = &qla4xxx_driver_template,
 
@@ -189,6 +194,14 @@ static int qla4xxx_host_get_param(struct Scsi_Host *shost,
        case ISCSI_HOST_PARAM_HWADDRESS:
                len = format_addr(buf, ha->my_mac, MAC_ADDR_LEN);
                break;
+       case ISCSI_HOST_PARAM_IPADDRESS:
+               len = sprintf(buf, "%d.%d.%d.%d\n", ha->ip_address[0],
+                             ha->ip_address[1], ha->ip_address[2],
+                             ha->ip_address[3]);
+               break;
+       case ISCSI_HOST_PARAM_INITIATOR_NAME:
+               len = sprintf(buf, "%s\n", ha->name_string);
+               break;
        default:
                return -ENOSYS;
        }
@@ -243,21 +256,15 @@ static int qla4xxx_conn_get_param(struct iscsi_cls_conn *conn,
        return len;
 }
 
-static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
-                            uint32_t enable, struct sockaddr *dst_addr)
+static int qla4xxx_tgt_dscvr(struct Scsi_Host *shost,
+                            enum iscsi_tgt_dscvr type, uint32_t enable,
+                            struct sockaddr *dst_addr)
 {
        struct scsi_qla_host *ha;
-       struct Scsi_Host *shost;
        struct sockaddr_in *addr;
        struct sockaddr_in6 *addr6;
        int ret = 0;
 
-       shost = scsi_host_lookup(host_no);
-       if (IS_ERR(shost)) {
-               printk(KERN_ERR "Could not find host no %u\n", host_no);
-               return -ENODEV;
-       }
-
        ha = (struct scsi_qla_host *) shost->hostdata;
 
        switch (type) {
@@ -281,8 +288,6 @@ static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
        default:
                ret = -ENOSYS;
        }
-
-       scsi_host_put(shost);
        return ret;
 }