Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

fas216.c File Reference

#include <linux/module.h>
#include <linux/blk.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/ioport.h>
#include <linux/sched.h>
#include <linux/proc_fs.h>
#include <linux/unistd.h>
#include <linux/stat.h>
#include <linux/delay.h>
#include <asm/dma.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/ecard.h>
#include "../../scsi/scsi.h"
#include "../../scsi/hosts.h"
#include "fas216.h"

Include dependency graph for fas216.c:

Go to the source code of this file.

Defines

#define FAS216_C
#define VER_MAJOR   0
#define VER_MINOR   0
#define VER_PATCH   6
#define SCSI2_TAG
#define SCSI2_SYNC
#define SCSI2_WIDE
#define fas216_checkmagic(info, func)
#define STATE(st, ph)   ((ph) << 3 | (st))

Enumerations

enum  msgin_stat_t { mstat_accept, mstat_reject, mstat_unrecognised }
enum  res_abort { res_not_running, res_success, res_success_clear, res_snooze }

Functions

 MODULE_AUTHOR ("Russell King")
 MODULE_DESCRIPTION ("Generic FAS216/NCR53C9x driver")
static void fas216_dumpstate (FAS216_Info *info)
static void fas216_dumpinfo (FAS216_Info *info)
static const char * fas216_bus_phase (int stat)
static const char * fas216_drv_phase (FAS216_Info *info)
static char fas216_target (FAS216_Info *info)
static void add_debug_list (int stat, int ssr, int isr, int ph)
static void print_debug_list (void)
static void fas216_done (FAS216_Info *info, unsigned int result)
static int fas216_clockrate (int clock)
static unsigned short fas216_get_last_msg (FAS216_Info *info, int pos)
static int fas216_syncperiod (FAS216_Info *info, int ns)
static void fas216_set_sync (FAS216_Info *info, int target)
static msgin_stat_t fas216_handlesync (FAS216_Info *info, char *msg)
static msgin_stat_t fas216_handlewide (FAS216_Info *info, char *msg)
static void fas216_updateptrs (FAS216_Info *info, int bytes_transferred)
static void fas216_pio (FAS216_Info *info, fasdmadir_t direction)
static void fas216_starttransfer (FAS216_Info *info, fasdmadir_t direction, int flush_fifo)
static void fas216_stoptransfer (FAS216_Info *info)
static void fas216_disconnect_intr (FAS216_Info *info)
static void fas216_reselected_intr (FAS216_Info *info)
static void fas216_finish_reconnect (FAS216_Info *info)
static int fas216_wait_cmd (FAS216_Info *info, int cmd)
static int fas216_get_msg_byte (FAS216_Info *info)
static msgin_stat_t fas216___message (FAS216_Info *info)
static void fas216_message (FAS216_Info *info)
static void fas216_send_command (FAS216_Info *info)
static void fas216_send_messageout (FAS216_Info *info, int start)
static void fas216_busservice_intr (FAS216_Info *info, unsigned int stat, unsigned int ssr)
static void fas216_funcdone_intr (FAS216_Info *info, unsigned int stat, unsigned int ssr)
void fas216_intr (struct Scsi_Host *instance)
static void fas216_kick (FAS216_Info *info)
int fas216_queue_command (Scsi_Cmnd *SCpnt, void(*done)(Scsi_Cmnd *))
static void fas216_internal_done (Scsi_Cmnd *SCpnt)
int fas216_command (Scsi_Cmnd *SCpnt)
static void fas216_reportstatus (Scsi_Cmnd **SCpntp1, Scsi_Cmnd **SCpntp2, int result, int no_report)
int fas216_eh_abort (Scsi_Cmnd *SCpnt)
int fas216_eh_device_reset (Scsi_Cmnd *SCpnt)
int fas216_eh_bus_reset (Scsi_Cmnd *SCpnt)
int fas216_eh_host_reset (Scsi_Cmnd *SCpnt)
static enum res_abort fas216_do_abort (FAS216_Info *info, Scsi_Cmnd *SCpnt)
int fas216_abort (Scsi_Cmnd *SCpnt)
static void fas216_reset_state (FAS216_Info *info)
static void fas216_init_chip (FAS216_Info *info)
int fas216_reset (Scsi_Cmnd *SCpnt, unsigned int reset_flags)
int fas216_init (struct Scsi_Host *instance)
int fas216_release (struct Scsi_Host *instance)
int fas216_print_stats (FAS216_Info *info, char *buffer)
int fas216_print_device (FAS216_Info *info, Scsi_Device *scd, char *buffer)
 EXPORT_SYMBOL (fas216_init)
 EXPORT_SYMBOL (fas216_abort)
 EXPORT_SYMBOL (fas216_reset)
 EXPORT_SYMBOL (fas216_queue_command)
 EXPORT_SYMBOL (fas216_command)
 EXPORT_SYMBOL (fas216_intr)
 EXPORT_SYMBOL (fas216_release)
 EXPORT_SYMBOL (fas216_eh_abort)
 EXPORT_SYMBOL (fas216_eh_device_reset)
 EXPORT_SYMBOL (fas216_eh_bus_reset)
 EXPORT_SYMBOL (fas216_eh_host_reset)
 EXPORT_SYMBOL (fas216_print_stats)
 EXPORT_SYMBOL (fas216_print_device)

Variables

struct {
   int   stat
   int   ssr
   int   isr
   int   ph
list [8]
static int ptr


Define Documentation

#define FAS216_C
 

Definition at line 50 of file fas216.c.

#define fas216_checkmagic info,
func   ) 
 

Definition at line 169 of file fas216.c.

Referenced by fas216___message(), fas216_abort(), fas216_busservice_intr(), fas216_command(), fas216_disconnect_intr(), fas216_done(), fas216_finish_reconnect(), fas216_funcdone_intr(), fas216_init(), fas216_init_chip(), fas216_internal_done(), fas216_intr(), fas216_kick(), fas216_pio(), fas216_queue_command(), fas216_release(), fas216_reselected_intr(), fas216_reset(), fas216_reset_state(), fas216_send_command(), fas216_send_messageout(), fas216_starttransfer(), fas216_stoptransfer(), fas216_syncperiod(), and fas216_updateptrs().

#define SCSI2_SYNC
 

Definition at line 88 of file fas216.c.

#define SCSI2_TAG
 

Definition at line 63 of file fas216.c.

#define SCSI2_WIDE
 

Definition at line 90 of file fas216.c.

#define STATE st,
ph   )     ((ph) << 3 | (st))
 

#define VER_MAJOR   0
 

Definition at line 59 of file fas216.c.

#define VER_MINOR   0
 

Definition at line 60 of file fas216.c.

#define VER_PATCH   6
 

Definition at line 61 of file fas216.c.


Enumeration Type Documentation

enum msgin_stat_t
 

Enumeration values:
mstat_accept 
mstat_reject 
mstat_unrecognised 

Definition at line 329 of file fas216.c.

enum res_abort
 

Enumeration values:
res_not_running 
res_success 
res_success_clear 
res_snooze 

Definition at line 2089 of file fas216.c.


Function Documentation

static void add_debug_list int  stat,
int  ssr,
int  isr,
int  ph
[static]
 

Definition at line 211 of file fas216.c.

References ptr.

Referenced by fas216_intr().

EXPORT_SYMBOL fas216_print_device   ) 
 

EXPORT_SYMBOL fas216_print_stats   ) 
 

EXPORT_SYMBOL fas216_eh_host_reset   ) 
 

EXPORT_SYMBOL fas216_eh_bus_reset   ) 
 

EXPORT_SYMBOL fas216_eh_device_reset   ) 
 

EXPORT_SYMBOL fas216_eh_abort   ) 
 

EXPORT_SYMBOL fas216_release   ) 
 

EXPORT_SYMBOL fas216_intr   ) 
 

EXPORT_SYMBOL fas216_command   ) 
 

EXPORT_SYMBOL fas216_queue_command   ) 
 

EXPORT_SYMBOL fas216_reset   ) 
 

EXPORT_SYMBOL fas216_abort   ) 
 

EXPORT_SYMBOL fas216_init   ) 
 

static msgin_stat_t fas216___message FAS216_Info info  )  [static]
 

Definition at line 1077 of file fas216.c.

References COMMAND_COMPLETE, DISCONNECT, EXTENDED_MESSAGE, EXTENDED_SDTR, EXTENDED_WDTR, fas216_checkmagic, fas216_finish_reconnect(), fas216_get_last_msg(), fas216_get_msg_byte(), fas216_handlesync(), fas216_handlewide(), fas216_target(), FAS216_Info::host, Scsi_Host::host_no, i, inb, KERN_ERR, MESSAGE_REJECT, mstat_accept, mstat_unrecognised, NOP, PHASE_MSGIN, PHASE_MSGIN_DISCONNECT, PHASE_RECONNECTED, printk, REG_FF, RESTORE_POINTERS, SAVE_POINTERS, scsi_cmnd::SCp, FAS216_Info::SCpnt, FAS216_Info::scsi, scsi_pointer::sent_command, SIMPLE_QUEUE_TAG, x20, x30, and x80.

Referenced by fas216_message().

Here is the call graph for this function:

int fas216_abort Scsi_Cmnd SCpnt  ) 
 

Definition at line 2183 of file fas216.c.

References FAS216_Info::busyluns, clear_bit, DID_ABORT, fas216_checkmagic, fas216_do_abort(), fas216_dumpinfo(), fas216_dumpstate(), scsi_cmnd::host, FAS216_Info::host, Scsi_Host::host_no, KERN_WARNING, scsi_cmnd::lun, print_debug_list(), printk, res_not_running, res_success, res_success_clear, result, scsi_cmnd::result, SCSI_ABORT_SNOOZE, SCSI_ABORT_SUCCESS, scsi_cmnd::scsi_done, FAS216_Info::stats, and scsi_cmnd::target.

Here is the call graph for this function:

static const char* fas216_bus_phase int  stat  )  [static]
 

Definition at line 172 of file fas216.c.

References phases, and STAT_BUSMASK.

Referenced by fas216_busservice_intr().

static void fas216_busservice_intr FAS216_Info info,
unsigned int  stat,
unsigned int  ssr
[static]
 

Definition at line 1352 of file fas216.c.

References CFIS_CF, CMD_FLUSHFIFO, CMD_INITCMDCOMPLETE, CMD_NOP, CMD_PADBYTES, CMD_SETATN, CMD_TRANSFERINFO, CMD_WITHDMA, DID_ERROR, DMA_IN, DMA_OUT, fas216_bus_phase(), fas216_checkmagic, fas216_done(), fas216_drv_phase(), fas216_finish_reconnect(), fas216_send_command(), fas216_send_messageout(), fas216_starttransfer(), fas216_stoptransfer(), fas216_target(), FAS216_Info::host, Scsi_Host::host_no, inb, INITIATOR_ERROR, IS_BITS, IS_COMPLETE, IS_EARLYPHASE, IS_MSGBYTESENT, IS_NOTCOMMAND, IS_SELARB, KERN_ERR, msgqueue_addmsg(), msgqueue_flush(), msgqueue_msglength(), outb, PHASE_COMMAND, PHASE_DATAIN, PHASE_DATAOUT, PHASE_MSGIN, PHASE_MSGIN_DISCONNECT, PHASE_MSGOUT, PHASE_MSGOUT_EXPECT, PHASE_RECONNECTED, PHASE_SELECTION, PHASE_SELSTEPS, PHASE_STATUS, print_debug_list(), printk, REG_CFIS, REG_CMD, REG_STCH, REG_STCL, REG_STCM, FAS216_Info::scsi, STAT_BUSMASK, STAT_COMMAND, STAT_DATAIN, STAT_DATAOUT, STAT_MESGIN, STAT_MESGOUT, STAT_STATUS, STATE, and status.

Referenced by fas216_intr().

Here is the call graph for this function:

static int fas216_clockrate int  clock  )  [static]
 

Definition at line 245 of file fas216.c.

References KERN_CRIT, and printk.

Referenced by fas216_init_chip().

int fas216_command Scsi_Cmnd SCpnt  ) 
 

Definition at line 1983 of file fas216.c.

References cli, fas216_checkmagic, fas216_internal_done(), fas216_intr(), fas216_queue_command(), scsi_cmnd::host, FAS216_Info::host, inb, FAS216_Info::internal_done, NO_IRQ, REG_STAT, restore_flags, scsi_cmnd::result, save_flags, FAS216_Info::scsi, STAT_INT, and sti.

Here is the call graph for this function:

static void fas216_disconnect_intr FAS216_Info info  )  [static]
 

Definition at line 795 of file fas216.c.

References ABORT, CMD_ENABLESEL, DID_ABORT, DID_ERROR, DID_NO_CONNECT, DID_OK, fas216_checkmagic, fas216_done(), fas216_drv_phase(), fas216_get_last_msg(), fas216_stoptransfer(), fas216_target(), FAS216_Info::host, Scsi_Host::host_no, KERN_ERR, msgqueue_flush(), outb, PHASE_DONE, PHASE_IDLE, PHASE_MSGIN_DISCONNECT, PHASE_MSGOUT, PHASE_SELECTION, PHASE_SELSTEPS, print_debug_list(), printk, REG_CMD, FAS216_Info::scsi, and FAS216_Info::stats.

Referenced by fas216_intr().

Here is the call graph for this function:

static enum res_abort fas216_do_abort FAS216_Info info,
Scsi_Cmnd SCpnt
[static]
 

Definition at line 2098 of file fas216.c.

References cli, NULL, FAS216_Info::origSCpnt, PHASE_IDLE, PHASE_SELECTION, printk, queue_removecmd(), FAS216_Info::queues, res, res_not_running, res_success, res_success_clear, restore_flags, save_flags, FAS216_Info::SCpnt, and FAS216_Info::scsi.

Referenced by fas216_abort().

Here is the call graph for this function:

static void fas216_done FAS216_Info info,
unsigned int  result
[static]
 

Definition at line 1825 of file fas216.c.

References BUSY, FAS216_Info::busyluns, CHECK_CONDITION, clear_bit, scsi_cmnd::cmnd, COMMAND_TERMINATED, DID_ABORT, DID_OK, fas216_checkmagic, fas216_kick(), fas216_target(), FAS216_Info::host, Scsi_Host::host_no, INQUIRY, KERN_ERR, scsi_cmnd::lun, MODE_SENSE, NO_IRQ, NULL, panic(), PHASE_IDLE, print_command(), printk, QUEUE_FULL, READ_CAPACITY, RESERVATION_CONFLICT, scsi_cmnd::result, FAS216_Info::SCpnt, FAS216_Info::scsi, scsi_cmnd::scsi_done, START_STOP, FAS216_Info::stats, status_byte, scsi_cmnd::target, and TEST_UNIT_READY.

Referenced by fas216_busservice_intr(), and fas216_disconnect_intr().

Here is the call graph for this function:

static const char* fas216_drv_phase FAS216_Info info  )  [static]
 

Definition at line 184 of file fas216.c.

References PHASE_COMMAND, PHASE_DATAIN, PHASE_DATAOUT, PHASE_DONE, PHASE_IDLE, PHASE_MSGIN, PHASE_MSGIN_DISCONNECT, PHASE_MSGOUT, PHASE_MSGOUT_EXPECT, PHASE_RECONNECTED, PHASE_SELECTION, PHASE_STATUS, and FAS216_Info::scsi.

Referenced by fas216_busservice_intr(), fas216_disconnect_intr(), fas216_funcdone_intr(), and fas216_intr().

static void fas216_dumpinfo FAS216_Info info  )  [static]
 

Definition at line 120 of file fas216.c.

References FAS216_Info::busyluns, FAS216_Info::device, FAS216_Info::fas216_device::disconnect_ok, FAS216_Info::dma, i, FAS216_Info::internal_done, FAS216_Info::origSCpnt, printk, FAS216_Info::SCpnt, FAS216_Info::scsi, FAS216_Info::fas216_device::sof, FAS216_Info::fas216_device::stp, FAS216_Info::fas216_device::sync_state, and used.

Referenced by fas216_abort().

static void fas216_dumpstate FAS216_Info info  )  [static]
 

Definition at line 102 of file fas216.c.

References inb, is, printk, REG_CFIS, REG_CMD, REG_CNTL1, REG_CNTL2, REG_CNTL3, REG_CTCH, REG_CTCL, REG_CTCM, REG_INST, REG_IS, and REG_STAT.

Referenced by fas216_abort(), fas216_intr(), and fas216_message().

int fas216_eh_abort Scsi_Cmnd SCpnt  ) 
 

Definition at line 2054 of file fas216.c.

References FAILED.

int fas216_eh_bus_reset Scsi_Cmnd SCpnt  ) 
 

Definition at line 2074 of file fas216.c.

References FAILED.

int fas216_eh_device_reset Scsi_Cmnd SCpnt  ) 
 

Definition at line 2064 of file fas216.c.

References FAILED.

int fas216_eh_host_reset Scsi_Cmnd SCpnt  ) 
 

Definition at line 2084 of file fas216.c.

References FAILED.

static void fas216_finish_reconnect FAS216_Info info  )  [static]
 

Definition at line 957 of file fas216.c.

References ABORT, ABORT_TAG, CMD_SETATN, fas216_checkmagic, fas216_target(), FAS216_Info::host, Scsi_Host::host_no, scsi_cmnd::lun, msgqueue_addmsg(), msgqueue_flush(), NULL, outb, PHASE_MSGOUT_EXPECT, printk, queue_add_cmd_tail(), queue_remove_tgtluntag(), FAS216_Info::queues, REG_CMD, scsi_cmnd::SCp, FAS216_Info::SCpnt, FAS216_Info::scsi, scsi_cmnd::tag, and scsi_cmnd::target.

Referenced by fas216___message(), and fas216_busservice_intr().

Here is the call graph for this function:

static void fas216_funcdone_intr FAS216_Info info,
unsigned int  stat,
unsigned int  ssr
[static]
 

Definition at line 1556 of file fas216.c.

References CFIS_CF, CMD_MSGACCEPTED, fas216_checkmagic, fas216_drv_phase(), fas216_message(), fas216_target(), FAS216_Info::host, Scsi_Host::host_no, inb, outb, PHASE_DONE, PHASE_IDLE, PHASE_MSGIN, PHASE_RECONNECTED, PHASE_STATUS, printk, REG_CFIS, REG_CMD, REG_FF, FAS216_Info::scsi, STAT_BUSMASK, STAT_MESGIN, and status.

Referenced by fas216_intr().

Here is the call graph for this function:

static unsigned short fas216_get_last_msg FAS216_Info info,
int  pos
[inline, static]
 

Definition at line 263 of file fas216.c.

References EXTENDED_MESSAGE, message::fifo, message::msg, msg(), msgqueue_getmsg(), NOP, NULL, printk, and FAS216_Info::scsi.

Referenced by fas216___message(), and fas216_disconnect_intr().

Here is the call graph for this function:

static int fas216_get_msg_byte FAS216_Info info  )  [static]
 

Definition at line 1039 of file fas216.c.

References CMD_MSGACCEPTED, CMD_TRANSFERINFO, fas216_target(), fas216_wait_cmd(), inb, printk, REG_FF, REG_INST, STAT_BUSMASK, STAT_INT, and STAT_MESGIN.

Referenced by fas216___message().

Here is the call graph for this function:

static msgin_stat_t fas216_handlesync FAS216_Info info,
char *  msg
[static]
 

Definition at line 365 of file fas216.c.

References CMD_SETATN, dev, FAS216_Info::device, EXTENDED_MESSAGE, EXTENDED_SDTR, fas216_set_sync(), fas216_syncperiod(), FAS216_Info::ifcfg, MESSAGE_REJECT, msgqueue_addmsg(), msgqueue_flush(), mstat_accept, mstat_reject, mstat_unrecognised, neg_complete, neg_inprogress, neg_invalid, neg_targcomplete, none, outb, PHASE_MSGOUT_EXPECT, REG_CMD, reject, res, FAS216_Info::SCpnt, FAS216_Info::scsi, sync, and scsi_cmnd::target.

Referenced by fas216___message().

Here is the call graph for this function:

static msgin_stat_t fas216_handlewide FAS216_Info info,
char *  msg
[static]
 

Definition at line 480 of file fas216.c.

References CMD_SETATN, dev, FAS216_Info::device, EXTENDED_MESSAGE, EXTENDED_WDTR, FAS216_Info::ifcfg, MESSAGE_REJECT, msgqueue_addmsg(), msgqueue_flush(), mstat_accept, mstat_reject, mstat_unrecognised, neg_complete, neg_inprogress, neg_invalid, none, outb, PHASE_MSGOUT_EXPECT, REG_CMD, reject, res, FAS216_Info::SCpnt, FAS216_Info::scsi, and scsi_cmnd::target.

Referenced by fas216___message().

Here is the call graph for this function:

int fas216_init struct Scsi_Host instance  ) 
 

Definition at line 2417 of file fas216.c.

References CMD_NOP, CMD_RESETCHIP, CMD_RESETSCSI, CMD_WITHDMA, CNTL1_DISR, CNTL2_ENF, CNTL2_S2FE, CNTL3_ADIDCHK, CNTL3_G2CB, fas216_checkmagic, fas216_init_chip(), fas216_reset_state(), FAS216_Info::host, HZ, FAS216_Info::ifcfg, inb, jiffies, MAGIC, FAS216_Info::magic_end, FAS216_Info::magic_start, memset, msgqueue_initialise(), NULL, outb, queue_free(), queue_initialise(), FAS216_Info::queues, REG1_ID, REG_CMD, REG_CNTL1, REG_CNTL2, REG_CNTL3, REG_INST, restore_flags, save_flags, FAS216_Info::SCpnt, FAS216_Info::scsi, FAS216_Info::stats, sti, time_before, and udelay.

Referenced by arxescsi_detect(), cumanascsi_2_detect(), eesoxscsi_detect(), and powertecscsi_detect().

Here is the call graph for this function:

static void fas216_init_chip FAS216_Info info  )  [static]
 

Definition at line 2302 of file fas216.c.

References fas216_checkmagic, fas216_clockrate(), FAS216_Info::ifcfg, outb, REG_CLKF, REG_CNTL1, REG_CNTL2, REG_CNTL3, REG_SOF, REG_STIM, REG_STP, and FAS216_Info::scsi.

Referenced by fas216_init(), and fas216_reset().

Here is the call graph for this function:

static void fas216_internal_done Scsi_Cmnd SCpnt