]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/aic7xxx/aic79xx_osm.c
Pull acpi-debug into release branch
[linux-2.6-omap-h63xx.git] / drivers / scsi / aic7xxx / aic79xx_osm.c
index 9bfcca5ede088c0c78a8645525376e3b1cf0eb45..286ab83116f92eb3f6ea3304aa47baf8b98b32b7 100644 (file)
@@ -363,6 +363,8 @@ static int ahd_linux_run_command(struct ahd_softc*,
                                 struct scsi_cmnd *);
 static void ahd_linux_setup_tag_info_global(char *p);
 static int  aic79xx_setup(char *c);
+static void ahd_freeze_simq(struct ahd_softc *ahd);
+static void ahd_release_simq(struct ahd_softc *ahd);
 
 static int ahd_linux_unit;
 
@@ -374,21 +376,10 @@ static __inline void
 ahd_linux_unmap_scb(struct ahd_softc *ahd, struct scb *scb)
 {
        struct scsi_cmnd *cmd;
-       int direction;
 
        cmd = scb->io_ctx;
-       direction = cmd->sc_data_direction;
        ahd_sync_sglist(ahd, scb, BUS_DMASYNC_POSTWRITE);
-       if (cmd->use_sg != 0) {
-               struct scatterlist *sg;
-
-               sg = (struct scatterlist *)cmd->request_buffer;
-               pci_unmap_sg(ahd->dev_softc, sg, cmd->use_sg, direction);
-       } else if (cmd->request_bufflen != 0) {
-               pci_unmap_single(ahd->dev_softc,
-                                scb->platform_data->buf_busaddr,
-                                cmd->request_bufflen, direction);
-       }
+       scsi_dma_unmap(cmd);
 }
 
 /******************************** Macros **************************************/
@@ -418,7 +409,6 @@ ahd_linux_info(struct Scsi_Host *host)
        strcat(bp, "        ");
        ahd_controller_info(ahd, ahd_info);
        strcat(bp, ahd_info);
-       strcat(bp, "\n");
 
        return (bp);
 }
@@ -1126,15 +1116,6 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct scsi_host_template *templa
        return 0;
 }
 
-uint64_t
-ahd_linux_get_memsize(void)
-{
-       struct sysinfo si;
-
-       si_meminfo(&si);
-       return ((uint64_t)si.totalram << PAGE_SHIFT);
-}
-
 /*
  * Place the SCSI bus into a known state by either resetting it,
  * or forcing transfer negotiations on the next command to any
@@ -1430,6 +1411,7 @@ ahd_linux_run_command(struct ahd_softc *ahd, struct ahd_linux_device *dev,
        u_int    col_idx;
        uint16_t mask;
        unsigned long flags;
+       int nseg;
 
        ahd_lock(ahd, &flags);
 
@@ -1502,18 +1484,17 @@ ahd_linux_run_command(struct ahd_softc *ahd, struct ahd_linux_device *dev,
        ahd_set_residual(scb, 0);
        ahd_set_sense_residual(scb, 0);
        scb->sg_count = 0;
-       if (cmd->use_sg != 0) {
-               void    *sg;
-               struct   scatterlist *cur_seg;
-               u_int    nseg;
-               int      dir;
-
-               cur_seg = (struct scatterlist *)cmd->request_buffer;
-               dir = cmd->sc_data_direction;
-               nseg = pci_map_sg(ahd->dev_softc, cur_seg,
-                                 cmd->use_sg, dir);
+
+       nseg = scsi_dma_map(cmd);
+       BUG_ON(nseg < 0);
+       if (nseg > 0) {
+               void *sg = scb->sg_list;
+               struct scatterlist *cur_seg;
+               int i;
+
                scb->platform_data->xfer_len = 0;
-               for (sg = scb->sg_list; nseg > 0; nseg--, cur_seg++) {
+
+               scsi_for_each_sg(cmd, cur_seg, nseg, i) {
                        dma_addr_t addr;
                        bus_size_t len;
 
@@ -1521,22 +1502,8 @@ ahd_linux_run_command(struct ahd_softc *ahd, struct ahd_linux_device *dev,
                        len = sg_dma_len(cur_seg);
                        scb->platform_data->xfer_len += len;
                        sg = ahd_sg_setup(ahd, scb, sg, addr, len,
-                                         /*last*/nseg == 1);
+                                         i == (nseg - 1));
                }
-       } else if (cmd->request_bufflen != 0) {
-               void *sg;
-               dma_addr_t addr;
-               int dir;
-
-               sg = scb->sg_list;
-               dir = cmd->sc_data_direction;
-               addr = pci_map_single(ahd->dev_softc,
-                                     cmd->request_buffer,
-                                     cmd->request_bufflen, dir);
-               scb->platform_data->xfer_len = cmd->request_bufflen;
-               scb->platform_data->buf_busaddr = addr;
-               sg = ahd_sg_setup(ahd, scb, sg, addr,
-                                 cmd->request_bufflen, /*last*/TRUE);
        }
 
        LIST_INSERT_HEAD(&ahd->pending_scbs, scb, pending_links);
@@ -2026,13 +1993,13 @@ ahd_linux_queue_cmd_complete(struct ahd_softc *ahd, struct scsi_cmnd *cmd)
        cmd->scsi_done(cmd);
 }
 
-void
+static void
 ahd_freeze_simq(struct ahd_softc *ahd)
 {
        scsi_block_requests(ahd->platform_data->host);
 }
 
-void
+static void
 ahd_release_simq(struct ahd_softc *ahd)
 {
        scsi_unblock_requests(ahd->platform_data->host);