scsi: qla2xxx: Enable type checking for the SRB free and done callback functions
[linux-2.6-block.git] / drivers / scsi / qla2xxx / qla_iocb.c
index 6b120254f41418d22dc147f05c97f18092ec2ae1..59a0a778d31c83aaad1a54e6366ab5c70d19264a 100644 (file)
@@ -2544,10 +2544,8 @@ void qla2x00_init_timer(srb_t *sp, unsigned long tmo)
        sp->start_timer = 1;
 }
 
-static void
-qla2x00_els_dcmd_sp_free(void *data)
+static void qla2x00_els_dcmd_sp_free(srb_t *sp)
 {
-       srb_t *sp = data;
        struct srb_iocb *elsio = &sp->u.iocb_cmd;
 
        kfree(sp->fcport);
@@ -2577,10 +2575,8 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
        complete(&lio->u.els_logo.comp);
 }
 
-static void
-qla2x00_els_dcmd_sp_done(void *ptr, int res)
+static void qla2x00_els_dcmd_sp_done(srb_t *sp, int res)
 {
-       srb_t *sp = ptr;
        fc_port_t *fcport = sp->fcport;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
        struct scsi_qla_host *vha = sp->vha;
@@ -2700,16 +2696,16 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
        els_iocb->s_id[0] = vha->d_id.b.al_pa;
        els_iocb->s_id[1] = vha->d_id.b.area;
        els_iocb->s_id[2] = vha->d_id.b.domain;
-       els_iocb->control_flags = 0;
 
        if (elsio->u.els_logo.els_cmd == ELS_DCMD_PLOGI) {
+               els_iocb->control_flags = 0;
                els_iocb->tx_byte_count = els_iocb->tx_len =
-                       sizeof(struct els_plogi_payload);
+                       cpu_to_le32(sizeof(struct els_plogi_payload));
                put_unaligned_le64(elsio->u.els_plogi.els_plogi_pyld_dma,
                                   &els_iocb->tx_address);
                els_iocb->rx_dsd_count = 1;
                els_iocb->rx_byte_count = els_iocb->rx_len =
-                       sizeof(struct els_plogi_payload);
+                       cpu_to_le32(sizeof(struct els_plogi_payload));
                put_unaligned_le64(elsio->u.els_plogi.els_resp_pyld_dma,
                                   &els_iocb->rx_address);
 
@@ -2718,7 +2714,9 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
                ql_dump_buffer(ql_log_info, vha, 0x0109,
                    (uint8_t *)els_iocb, 0x70);
        } else {
-               els_iocb->tx_byte_count = sizeof(struct els_logo_payload);
+               els_iocb->control_flags = 1 << 13;
+               els_iocb->tx_byte_count =
+                       cpu_to_le32(sizeof(struct els_logo_payload));
                put_unaligned_le64(elsio->u.els_logo.els_logo_pyld_dma,
                                   &els_iocb->tx_address);
                els_iocb->tx_len = cpu_to_le32(sizeof(struct els_logo_payload));
@@ -2756,10 +2754,8 @@ qla2x00_els_dcmd2_iocb_timeout(void *data)
        sp->done(sp, QLA_FUNCTION_TIMEOUT);
 }
 
-static void
-qla2x00_els_dcmd2_sp_done(void *ptr, int res)
+static void qla2x00_els_dcmd2_sp_done(srb_t *sp, int res)
 {
-       srb_t *sp = ptr;
        fc_port_t *fcport = sp->fcport;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
        struct scsi_qla_host *vha = sp->vha;