Eliminate pointless casts from void* in a few driver irq handlers.
[safe/jmp/linux-2.6] / drivers / block / sx8.c
index a7e0975..52dc5e1 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/spinlock.h>
 #include <linux/blkdev.h>
 #include <linux/sched.h>
-#include <linux/devfs_fs_kernel.h>
 #include <linux/interrupt.h>
 #include <linux/compiler.h>
 #include <linux/workqueue.h>
@@ -27,8 +26,9 @@
 #include <linux/time.h>
 #include <linux/hdreg.h>
 #include <linux/dma-mapping.h>
+#include <linux/completion.h>
+#include <linux/scatterlist.h>
 #include <asm/io.h>
-#include <asm/semaphore.h>
 #include <asm/uaccess.h>
 
 #if 0
@@ -279,7 +279,7 @@ struct carm_host {
        unsigned int                    state;
        u32                             fw_ver;
 
-       request_queue_t                 *oob_q;
+       struct request_queue            *oob_q;
        unsigned int                    n_oob;
 
        unsigned int                    hw_sg_used;
@@ -288,7 +288,7 @@ struct carm_host {
 
        unsigned int                    wait_q_prod;
        unsigned int                    wait_q_cons;
-       request_queue_t                 *wait_q[CARM_MAX_WAIT_Q];
+       struct request_queue            *wait_q[CARM_MAX_WAIT_Q];
 
        unsigned int                    n_msgs;
        u64                             msg_alloc;
@@ -303,7 +303,7 @@ struct carm_host {
 
        struct work_struct              fsm_task;
 
-       struct semaphore                probe_sem;
+       struct completion               probe_comp;
 };
 
 struct carm_response {
@@ -523,6 +523,7 @@ static struct carm_request *carm_get_request(struct carm_host *host)
                        host->n_msgs++;
 
                        assert(host->n_msgs <= CARM_MAX_REQ);
+                       sg_init_table(crq->sg, CARM_MAX_REQ_SG);
                        return crq;
                }
 
@@ -757,7 +758,7 @@ static inline void carm_end_request_queued(struct carm_host *host,
        assert(rc == 0);
 }
 
-static inline void carm_push_q (struct carm_host *host, request_queue_t *q)
+static inline void carm_push_q (struct carm_host *host, struct request_queue *q)
 {
        unsigned int idx = host->wait_q_prod % CARM_MAX_WAIT_Q;
 
@@ -769,7 +770,7 @@ static inline void carm_push_q (struct carm_host *host, request_queue_t *q)
        BUG_ON(host->wait_q_prod == host->wait_q_cons); /* overrun */
 }
 
-static inline request_queue_t *carm_pop_q(struct carm_host *host)
+static inline struct request_queue *carm_pop_q(struct carm_host *host)
 {
        unsigned int idx;
 
@@ -784,7 +785,7 @@ static inline request_queue_t *carm_pop_q(struct carm_host *host)
 
 static inline void carm_round_robin(struct carm_host *host)
 {
-       request_queue_t *q = carm_pop_q(host);
+       struct request_queue *q = carm_pop_q(host);
        if (q) {
                blk_start_queue(q);
                VPRINTK("STARTED QUEUE %p\n", q);
@@ -803,7 +804,7 @@ static inline void carm_end_rq(struct carm_host *host, struct carm_request *crq,
        }
 }
 
-static void carm_oob_rq_fn(request_queue_t *q)
+static void carm_oob_rq_fn(struct request_queue *q)
 {
        struct carm_host *host = q->queuedata;
        struct carm_request *crq;
@@ -834,7 +835,7 @@ static void carm_oob_rq_fn(request_queue_t *q)
        }
 }
 
-static void carm_rq_fn(request_queue_t *q)
+static void carm_rq_fn(struct request_queue *q)
 {
        struct carm_port *port = q->queuedata;
        struct carm_host *host = port->host;
@@ -1201,7 +1202,7 @@ static inline void carm_handle_responses(struct carm_host *host)
        host->resp_idx += work;
 }
 
-static irqreturn_t carm_interrupt(int irq, void *__host, struct pt_regs *regs)
+static irqreturn_t carm_interrupt(int irq, void *__host)
 {
        struct carm_host *host = __host;
        void __iomem *mmio;
@@ -1245,9 +1246,10 @@ out:
        return IRQ_RETVAL(handled);
 }
 
-static void carm_fsm_task (void *_data)
+static void carm_fsm_task (struct work_struct *work)
 {
-       struct carm_host *host = _data;
+       struct carm_host *host =
+               container_of(work, struct carm_host, fsm_task);
        unsigned long flags;
        unsigned int state;
        int rc, i, next_dev;
@@ -1346,7 +1348,7 @@ static void carm_fsm_task (void *_data)
        }
 
        case HST_PROBE_FINISHED:
-               up(&host->probe_sem);
+               complete(&host->probe_comp);
                break;
 
        case HST_ERROR:
@@ -1494,7 +1496,7 @@ static int carm_init_disks(struct carm_host *host)
 
        for (i = 0; i < CARM_MAX_PORTS; i++) {
                struct gendisk *disk;
-               request_queue_t *q;
+               struct request_queue *q;
                struct carm_port *port;
 
                port = &host->port[i];
@@ -1510,7 +1512,6 @@ static int carm_init_disks(struct carm_host *host)
                port->disk = disk;
                sprintf(disk->disk_name, DRV_NAME "/%u",
                        (unsigned int) (host->id * CARM_MAX_PORTS) + i);
-               sprintf(disk->devfs_name, DRV_NAME "/%u_%u", host->id, i);
                disk->major = host->major;
                disk->first_minor = i * CARM_MINORS_PER_MAJOR;
                disk->fops = &carm_bd_ops;
@@ -1539,7 +1540,7 @@ static void carm_free_disks(struct carm_host *host)
        for (i = 0; i < CARM_MAX_PORTS; i++) {
                struct gendisk *disk = host->port[i].disk;
                if (disk) {
-                       request_queue_t *q = disk->queue;
+                       struct request_queue *q = disk->queue;
 
                        if (disk->flags & GENHD_FL_UP)
                                del_gendisk(disk);
@@ -1572,7 +1573,7 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        struct carm_host *host;
        unsigned int pci_dac;
        int rc;
-       request_queue_t *q;
+       struct request_queue *q;
        unsigned int i;
 
        if (!printed_version++)
@@ -1609,7 +1610,7 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        }
 #endif
 
-       host = kmalloc(sizeof(*host), GFP_KERNEL);
+       host = kzalloc(sizeof(*host), GFP_KERNEL);
        if (!host) {
                printk(KERN_ERR DRV_NAME "(%s): memory alloc failure\n",
                       pci_name(pdev));
@@ -1617,12 +1618,11 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
                goto err_out_regions;
        }
 
-       memset(host, 0, sizeof(*host));
        host->pdev = pdev;
        host->flags = pci_dac ? FL_DAC : 0;
        spin_lock_init(&host->lock);
-       INIT_WORK(&host->fsm_task, carm_fsm_task, host);
-       init_MUTEX_LOCKED(&host->probe_sem);
+       INIT_WORK(&host->fsm_task, carm_fsm_task);
+       init_completion(&host->probe_comp);
 
        for (i = 0; i < ARRAY_SIZE(host->req); i++)
                host->req[i].tag = i;
@@ -1672,15 +1672,13 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        if (host->flags & FL_DYN_MAJOR)
                host->major = rc;
 
-       devfs_mk_dir(DRV_NAME);
-
        rc = carm_init_disks(host);
        if (rc)
                goto err_out_blkdev_disks;
 
        pci_set_master(pdev);
 
-       rc = request_irq(pdev->irq, carm_interrupt, SA_SHIRQ, DRV_NAME, host);
+       rc = request_irq(pdev->irq, carm_interrupt, IRQF_SHARED, DRV_NAME, host);
        if (rc) {
                printk(KERN_ERR DRV_NAME "(%s): irq alloc failure\n",
                       pci_name(pdev));
@@ -1691,12 +1689,13 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        if (rc)
                goto err_out_free_irq;
 
-       DPRINTK("waiting for probe_sem\n");
-       down(&host->probe_sem);
+       DPRINTK("waiting for probe_comp\n");
+       wait_for_completion(&host->probe_comp);
 
-       printk(KERN_INFO "%s: pci %s, ports %d, io %lx, irq %u, major %d\n",
+       printk(KERN_INFO "%s: pci %s, ports %d, io %llx, irq %u, major %d\n",
               host->name, pci_name(pdev), (int) CARM_MAX_PORTS,
-              pci_resource_start(pdev, 0), pdev->irq, host->major);
+              (unsigned long long)pci_resource_start(pdev, 0),
+                  pdev->irq, host->major);
 
        carm_host_id++;
        pci_set_drvdata(pdev, host);
@@ -1738,7 +1737,6 @@ static void carm_remove_one (struct pci_dev *pdev)
 
        free_irq(pdev->irq, host);
        carm_free_disks(host);
-       devfs_remove(DRV_NAME);
        unregister_blkdev(host->major, host->name);
        if (host->major == 160)
                clear_bit(0, &carm_major_alloc);