#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/timer.h>
#include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/major.h>
#include <linux/blkdev.h>
#include <linux/stat.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_ioctl.h>
#include <pcmcia/cistpl.h>
#include <pcmcia/cisreg.h>
#include <pcmcia/ds.h>
#include "nsp_cs.h"
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
#include "nsp_io.h"
static int nsp_burst_mode = …;
module_param(nsp_burst_mode, int, 0);
MODULE_PARM_DESC(…) …;
static bool free_ports = …;
module_param(free_ports, bool, 0);
MODULE_PARM_DESC(…) …;
static struct scsi_pointer *nsp_priv(struct scsi_cmnd *cmd)
{ … }
static struct scsi_host_template nsp_driver_template = …;
static nsp_hw_data nsp_data_base;
#ifndef NSP_DEBUG
#define NSP_DEBUG_MASK …
#define nsp_msg(type, args...) …
#define nsp_dbg(mask, args...) …
#else
#define NSP_DEBUG_MASK …
#define nsp_msg …
#define nsp_dbg …
#endif
#define NSP_DEBUG_QUEUECOMMAND …
#define NSP_DEBUG_REGISTER …
#define NSP_DEBUG_AUTOSCSI …
#define NSP_DEBUG_INTR …
#define NSP_DEBUG_SGLIST …
#define NSP_DEBUG_BUSFREE …
#define NSP_DEBUG_CDB_CONTENTS …
#define NSP_DEBUG_RESELECTION …
#define NSP_DEBUG_MSGINOCCUR …
#define NSP_DEBUG_EEPROM …
#define NSP_DEBUG_MSGOUTOCCUR …
#define NSP_DEBUG_BUSRESET …
#define NSP_DEBUG_RESTART …
#define NSP_DEBUG_SYNC …
#define NSP_DEBUG_WAIT …
#define NSP_DEBUG_TARGETFLAG …
#define NSP_DEBUG_PROC …
#define NSP_DEBUG_INIT …
#define NSP_DEBUG_DATA_IO …
#define NSP_SPECIAL_PRINT_REGISTER …
#define NSP_DEBUG_BUF_LEN …
static inline void nsp_inc_resid(struct scsi_cmnd *SCpnt, int residInc)
{ … }
__printf(4, 5)
static void nsp_cs_message(const char *func, int line, char *type, char *fmt, ...)
{ … }
#ifdef NSP_DEBUG
static void nsp_cs_dmessage(const char *func, int line, int mask, char *fmt, ...)
{
va_list args;
char buf[NSP_DEBUG_BUF_LEN];
va_start(args, fmt);
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
if (mask & NSP_DEBUG_MASK) {
printk("nsp_cs-debug: 0x%x %s (%d): %s\n", mask, func, line, buf);
}
}
#endif
static void nsp_scsi_done(struct scsi_cmnd *SCpnt)
{ … }
static int nsp_queuecommand_lck(struct scsi_cmnd *const SCpnt)
{ … }
static DEF_SCSI_QCMD(nsp_queuecommand)
static void nsp_setup_fifo(nsp_hw_data *data, bool enabled)
{ … }
static void nsphw_init_sync(nsp_hw_data *data)
{ … }
static void nsphw_init(nsp_hw_data *data)
{ … }
static bool nsphw_start_selection(struct scsi_cmnd *const SCpnt)
{ … }
struct nsp_sync_table { … };
static struct nsp_sync_table nsp_sync_table_40M[] = …;
static struct nsp_sync_table nsp_sync_table_20M[] = …;
static int nsp_analyze_sdtr(struct scsi_cmnd *SCpnt)
{ … }
static void nsp_start_timer(struct scsi_cmnd *SCpnt, int time)
{ … }
static int nsp_negate_signal(struct scsi_cmnd *SCpnt, unsigned char mask,
char *str)
{ … }
static int nsp_expect_signal(struct scsi_cmnd *SCpnt,
unsigned char current_phase,
unsigned char mask)
{ … }
static int nsp_xfer(struct scsi_cmnd *const SCpnt, int phase)
{ … }
static int nsp_dataphase_bypass(struct scsi_cmnd *const SCpnt)
{ … }
static void nsp_reselected(struct scsi_cmnd *SCpnt)
{ … }
static int nsp_fifo_count(struct scsi_cmnd *SCpnt)
{ … }
#define RFIFO_CRIT …
#define WFIFO_CRIT …
static void nsp_pio_read(struct scsi_cmnd *const SCpnt)
{ … }
static void nsp_pio_write(struct scsi_cmnd *SCpnt)
{ … }
#undef RFIFO_CRIT
#undef WFIFO_CRIT
static int nsp_nexus(struct scsi_cmnd *SCpnt)
{ … }
#include "nsp_message.c"
static irqreturn_t nspintr(int irq, void *dev_id)
{ … }
#ifdef NSP_DEBUG
#include "nsp_debug.c"
#endif
static struct Scsi_Host *nsp_detect(struct scsi_host_template *sht)
{ … }
static const char *nsp_info(struct Scsi_Host *shpnt)
{ … }
static int nsp_show_info(struct seq_file *m, struct Scsi_Host *host)
{ … }
static int nsp_bus_reset(nsp_hw_data *data)
{ … }
static int nsp_eh_bus_reset(struct scsi_cmnd *SCpnt)
{ … }
static int nsp_eh_host_reset(struct scsi_cmnd *SCpnt)
{ … }
static int nsp_cs_probe(struct pcmcia_device *link)
{ … }
static void nsp_cs_detach(struct pcmcia_device *link)
{ … }
static int nsp_cs_config_check(struct pcmcia_device *p_dev, void *priv_data)
{ … }
static int nsp_cs_config(struct pcmcia_device *link)
{ … }
static void nsp_cs_release(struct pcmcia_device *link)
{ … }
static int nsp_cs_suspend(struct pcmcia_device *link)
{ … }
static int nsp_cs_resume(struct pcmcia_device *link)
{ … }
static const struct pcmcia_device_id nsp_cs_ids[] = …;
MODULE_DEVICE_TABLE(…);
static struct pcmcia_driver nsp_driver = …;
module_pcmcia_driver(…);