fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / scsi / ibmvscsi / rpa_vscsi.c
index f47dd87..227c0f2 100644 (file)
@@ -34,7 +34,6 @@
 #include <linux/dma-mapping.h>
 #include <linux/interrupt.h>
 #include "ibmvscsi.h"
-#include "srp.h"
 
 static char partition_name[97] = "UNKNOWN";
 static unsigned int partition_number = -1;
@@ -46,14 +45,11 @@ static unsigned int partition_number = -1;
  * ibmvscsi_handle_event: - Interrupt handler for crq events
  * @irq:       number of irq to handle, not used
  * @dev_instance: ibmvscsi_host_data of host that received interrupt
- * @regs:      pt_regs with registers
  *
  * Disables interrupts and schedules srp_task
  * Always returns IRQ_HANDLED
  */
-static irqreturn_t ibmvscsi_handle_event(int irq,
-                                        void *dev_instance,
-                                        struct pt_regs *regs)
+static irqreturn_t ibmvscsi_handle_event(int irq, void *dev_instance)
 {
        struct ibmvscsi_host_data *hostdata =
            (struct ibmvscsi_host_data *)dev_instance;
@@ -80,7 +76,7 @@ void ibmvscsi_release_crq_queue(struct crq_queue *queue,
        tasklet_kill(&hostdata->srp_task);
        do {
                rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
-       } while ((rc == H_Busy) || (H_isLongBusy(rc)));
+       } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
        dma_unmap_single(hostdata->dev,
                         queue->msg_token,
                         queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL);
@@ -157,8 +153,8 @@ static void gather_partition_info(void)
 {
        struct device_node *rootdn;
 
-       char *ppartition_name;
-       unsigned int *p_number_ptr;
+       const char *ppartition_name;
+       const unsigned int *p_number_ptr;
 
        /* Retrieve information about this partition */
        rootdn = find_path_device("/");
@@ -166,14 +162,11 @@ static void gather_partition_info(void)
                return;
        }
 
-       ppartition_name =
-               get_property(rootdn, "ibm,partition-name", NULL);
+       ppartition_name = get_property(rootdn, "ibm,partition-name", NULL);
        if (ppartition_name)
                strncpy(partition_name, ppartition_name,
                                sizeof(partition_name));
-       p_number_ptr =
-               (unsigned int *)get_property(rootdn, "ibm,partition-no",
-                                            NULL);
+       p_number_ptr = get_property(rootdn, "ibm,partition-no", NULL);
        if (p_number_ptr)
                partition_number = *p_number_ptr;
 }
@@ -209,6 +202,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
                            int max_requests)
 {
        int rc;
+       int retrc;
        struct vio_dev *vdev = to_vio_dev(hostdata->dev);
 
        queue->msgs = (struct viosrp_crq *)get_zeroed_page(GFP_KERNEL);
@@ -227,10 +221,10 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
        gather_partition_info();
        set_adapter_info(hostdata);
 
-       rc = plpar_hcall_norets(H_REG_CRQ,
+       retrc = rc = plpar_hcall_norets(H_REG_CRQ,
                                vdev->unit_address,
                                queue->msg_token, PAGE_SIZE);
-       if (rc == H_Resource) 
+       if (rc == H_RESOURCE)
                /* maybe kexecing and resource is busy. try a reset */
                rc = ibmvscsi_reset_crq_queue(queue,
                                              hostdata);
@@ -238,6 +232,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
        if (rc == 2) {
                /* Adapter is good, but other end is not ready */
                printk(KERN_WARNING "ibmvscsi: Partner adapter not ready\n");
+               retrc = 0;
        } else if (rc != 0) {
                printk(KERN_WARNING "ibmvscsi: Error %d opening adapter\n", rc);
                goto reg_crq_failed;
@@ -264,12 +259,12 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
        tasklet_init(&hostdata->srp_task, (void *)ibmvscsi_task,
                     (unsigned long)hostdata);
 
-       return 0;
+       return retrc;
 
       req_irq_failed:
        do {
                rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
-       } while ((rc == H_Busy) || (H_isLongBusy(rc)));
+       } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
       reg_crq_failed:
        dma_unmap_single(hostdata->dev,
                         queue->msg_token,
@@ -295,7 +290,7 @@ int ibmvscsi_reenable_crq_queue(struct crq_queue *queue,
        /* Re-enable the CRQ */
        do {
                rc = plpar_hcall_norets(H_ENABLE_CRQ, vdev->unit_address);
-       } while ((rc == H_InProgress) || (rc == H_Busy) || (H_isLongBusy(rc)));
+       } while ((rc == H_IN_PROGRESS) || (rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
 
        if (rc)
                printk(KERN_ERR "ibmvscsi: Error %d enabling adapter\n", rc);
@@ -317,7 +312,7 @@ int ibmvscsi_reset_crq_queue(struct crq_queue *queue,
        /* Close the CRQ */
        do {
                rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
-       } while ((rc == H_Busy) || (H_isLongBusy(rc)));
+       } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
 
        /* Clean out the queue */
        memset(queue->msgs, 0x00, PAGE_SIZE);