Commit 55808e05 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David Mosberger

[PATCH] ia64: update simscsi to 2.6 scsi APIs

Use the proper (and cleaner) probing API instead of the old
scsi_module.c hack, don't use the typedefs I plan to kill in 2.7 and
mark everything static
parent 1963fd3f
...@@ -8,23 +8,23 @@ ...@@ -8,23 +8,23 @@
* 02/01/15 David Mosberger Updated for v2.5.1 * 02/01/15 David Mosberger Updated for v2.5.1
* 99/12/18 David Mosberger Added support for READ10/WRITE10 needed by linux v2.3.33 * 99/12/18 David Mosberger Added support for READ10/WRITE10 needed by linux v2.3.33
*/ */
#include <linux/config.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <scsi/scsi.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "../drivers/scsi/scsi.h" #include <scsi/scsi.h>
#include "../drivers/scsi/hosts.h" #include <scsi/scsi_cmnd.h>
#include "simscsi.h" #include <scsi/scsi_device.h>
#include <scsi/scsi_host.h>
#define DEBUG_SIMSCSI 0 #define DEBUG_SIMSCSI 0
#define SIMSCSI_REQ_QUEUE_LEN 64
#define DEFAULT_SIMSCSI_ROOT "/var/ski-disks/sd"
/* Simulator system calls: */ /* Simulator system calls: */
#define SSC_OPEN 50 #define SSC_OPEN 50
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
static struct Scsi_Host *host; static struct Scsi_Host *host;
static void simscsi_interrupt (unsigned long val); static void simscsi_interrupt (unsigned long val);
DECLARE_TASKLET(simscsi_tasklet, simscsi_interrupt, 0); static DECLARE_TASKLET(simscsi_tasklet, simscsi_interrupt, 0);
struct disk_req { struct disk_req {
unsigned long addr; unsigned long addr;
...@@ -66,7 +66,7 @@ static int desc[16] = { ...@@ -66,7 +66,7 @@ static int desc[16] = {
}; };
static struct queue_entry { static struct queue_entry {
Scsi_Cmnd *sc; struct scsi_cmnd *sc;
} queue[SIMSCSI_REQ_QUEUE_LEN]; } queue[SIMSCSI_REQ_QUEUE_LEN];
static int rd, wr; static int rd, wr;
...@@ -99,7 +99,7 @@ __setup("simscsi=", simscsi_setup); ...@@ -99,7 +99,7 @@ __setup("simscsi=", simscsi_setup);
static void static void
simscsi_interrupt (unsigned long val) simscsi_interrupt (unsigned long val)
{ {
Scsi_Cmnd *sc; struct scsi_cmnd *sc;
while ((sc = queue[rd].sc) != 0) { while ((sc = queue[rd].sc) != 0) {
atomic_dec(&num_reqs); atomic_dec(&num_reqs);
...@@ -111,30 +111,7 @@ simscsi_interrupt (unsigned long val) ...@@ -111,30 +111,7 @@ simscsi_interrupt (unsigned long val)
} }
} }
int static int
simscsi_detect (Scsi_Host_Template *templ)
{
templ->proc_name = "simscsi";
host = scsi_register(templ, 0);
if(host == NULL)
return 0;
return 1; /* fake one SCSI host adapter */
}
int
simscsi_release (struct Scsi_Host *host)
{
return 0; /* this is easy... */
}
const char *
simscsi_info (struct Scsi_Host *host)
{
return "simulated SCSI host adapter";
}
int
simscsi_biosparam (struct scsi_device *sdev, struct block_device *n, simscsi_biosparam (struct scsi_device *sdev, struct block_device *n,
sector_t capacity, int ip[]) sector_t capacity, int ip[])
{ {
...@@ -145,7 +122,7 @@ simscsi_biosparam (struct scsi_device *sdev, struct block_device *n, ...@@ -145,7 +122,7 @@ simscsi_biosparam (struct scsi_device *sdev, struct block_device *n,
} }
static void static void
simscsi_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset, unsigned long len) simscsi_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset, unsigned long len)
{ {
struct disk_stat stat; struct disk_stat stat;
struct disk_req req; struct disk_req req;
...@@ -171,7 +148,7 @@ simscsi_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset, unsigned long ...@@ -171,7 +148,7 @@ simscsi_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset, unsigned long
} }
static void static void
simscsi_sg_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset) simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset)
{ {
int list_len = sc->use_sg; int list_len = sc->use_sg;
struct scatterlist *sl = (struct scatterlist *)sc->buffer; struct scatterlist *sl = (struct scatterlist *)sc->buffer;
...@@ -208,7 +185,7 @@ simscsi_sg_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset) ...@@ -208,7 +185,7 @@ simscsi_sg_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset)
* Added 02/26/99 S.Eranian * Added 02/26/99 S.Eranian
*/ */
static void static void
simscsi_readwrite6 (Scsi_Cmnd *sc, int mode) simscsi_readwrite6 (struct scsi_cmnd *sc, int mode)
{ {
unsigned long offset; unsigned long offset;
...@@ -244,7 +221,7 @@ simscsi_get_disk_size (int fd) ...@@ -244,7 +221,7 @@ simscsi_get_disk_size (int fd)
} }
static void static void
simscsi_readwrite10 (Scsi_Cmnd *sc, int mode) simscsi_readwrite10 (struct scsi_cmnd *sc, int mode)
{ {
unsigned long offset; unsigned long offset;
...@@ -256,8 +233,8 @@ simscsi_readwrite10 (Scsi_Cmnd *sc, int mode) ...@@ -256,8 +233,8 @@ simscsi_readwrite10 (Scsi_Cmnd *sc, int mode)
simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512); simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512);
} }
int static int
simscsi_queuecommand (Scsi_Cmnd *sc, void (*done)(Scsi_Cmnd *)) simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
{ {
unsigned int target_id = sc->device->id; unsigned int target_id = sc->device->id;
char fname[MAX_ROOT_LEN+16]; char fname[MAX_ROOT_LEN+16];
...@@ -380,18 +357,16 @@ simscsi_queuecommand (Scsi_Cmnd *sc, void (*done)(Scsi_Cmnd *)) ...@@ -380,18 +357,16 @@ simscsi_queuecommand (Scsi_Cmnd *sc, void (*done)(Scsi_Cmnd *))
return 0; return 0;
} }
int static int
simscsi_host_reset (Scsi_Cmnd *sc) simscsi_host_reset (struct scsi_cmnd *sc)
{ {
printk(KERN_ERR "simscsi_host_reset: not implemented\n"); printk(KERN_ERR "simscsi_host_reset: not implemented\n");
return 0; return 0;
} }
static Scsi_Host_Template driver_template = { static struct scsi_host_template driver_template = {
.name = "simscsi", .name = "simulated SCSI host adapter",
.detect = simscsi_detect, .proc_name = "simscsi",
.release = simscsi_release,
.info = simscsi_info,
.queuecommand = simscsi_queuecommand, .queuecommand = simscsi_queuecommand,
.eh_host_reset_handler = simscsi_host_reset, .eh_host_reset_handler = simscsi_host_reset,
.bios_param = simscsi_biosparam, .bios_param = simscsi_biosparam,
...@@ -402,4 +377,28 @@ static Scsi_Host_Template driver_template = { ...@@ -402,4 +377,28 @@ static Scsi_Host_Template driver_template = {
.cmd_per_lun = SIMSCSI_REQ_QUEUE_LEN, .cmd_per_lun = SIMSCSI_REQ_QUEUE_LEN,
.use_clustering = DISABLE_CLUSTERING, .use_clustering = DISABLE_CLUSTERING,
}; };
#include "../drivers/scsi/scsi_module.c"
static int __init
simscsi_init(void)
{
int error;
host = scsi_host_alloc(&driver_template, 0);
if (!host)
return -ENOMEM;
error = scsi_add_host(host, NULL);
if (!error)
scsi_scan_host(host);
return error;
}
static void __exit
simscsi_exit(void)
{
scsi_remove_host(host);
scsi_host_put(host);
}
module_init(simscsi_init);
module_exit(simscsi_exit);
/*
* Simulated SCSI driver.
*
* Copyright (C) 1999, 2002 Hewlett-Packard Co
* David Mosberger-Tang <davidm@hpl.hp.com>
*/
#ifndef SIMSCSI_H
#define SIMSCSI_H
#define SIMSCSI_REQ_QUEUE_LEN 64
#define DEFAULT_SIMSCSI_ROOT "/var/ski-disks/sd"
extern int simscsi_detect (Scsi_Host_Template *);
extern int simscsi_release (struct Scsi_Host *);
extern const char *simscsi_info (struct Scsi_Host *);
extern int simscsi_queuecommand (Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
extern int simscsi_abort (Scsi_Cmnd *);
extern int simscsi_reset (Scsi_Cmnd *, unsigned int);
extern int simscsi_biosparam (struct scsi_device *, struct block_device *,
sector_t, int[]);
#endif /* SIMSCSI_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment