linux/Documentation/scsi/53c700.txt
<<
>>
Prefs
   1General Description
   2===================
   3
   4This driver supports the 53c700 and 53c700-66 chips.  It also supports
   5the 53c710 but only in 53c700 emulation mode.  It is full featured and
   6does sync (-66 and 710 only), disconnects and tag command queueing.
   7
   8Since the 53c700 must be interfaced to a bus, you need to wrapper the
   9card detector around this driver.  For an example, see the
  10NCR_D700.[ch] or lasi700.[ch] files.
  11
  12The comments in the 53c700.[ch] files tell you which parts you need to
  13fill in to get the driver working.
  14
  15
  16Compile Time Flags
  17==================
  18
  19A compile time flag is:
  20
  21CONFIG_53C700_LE_ON_BE
  22
  23define if the chipset must be supported in little endian mode on a big
  24endian architecture (used for the 700 on parisc).
  25
  26
  27Using the Chip Core Driver
  28==========================
  29
  30In order to plumb the 53c700 chip core driver into a working SCSI
  31driver, you need to know three things about the way the chip is wired
  32into your system (or expansion card).
  33
  341. The clock speed of the SCSI core
  352. The interrupt line used
  363. The memory (or io space) location of the 53c700 registers.
  37
  38Optionally, you may also need to know other things, like how to read
  39the SCSI Id from the card bios or whether the chip is wired for
  40differential operation.
  41
  42Usually you can find items 2. and 3. from general spec. documents or
  43even by examining the configuration of a working driver under another
  44operating system.
  45
  46The clock speed is usually buried deep in the technical literature.
  47It is required because it is used to set up both the synchronous and
  48asynchronous dividers for the chip.  As a general rule of thumb,
  49manufacturers set the clock speed at the lowest possible setting
  50consistent with the best operation of the chip (although some choose
  51to drive it off the CPU or bus clock rather than going to the expense
  52of an extra clock chip).  The best operation clock speeds are:
  53
  5453c700 - 25MHz
  5553c700-66 - 50MHz
  5653c710 - 40Mhz
  57
  58Writing Your Glue Driver
  59========================
  60
  61This will be a standard SCSI driver (I don't know of a good document
  62describing this, just copy from some other driver) with at least a
  63detect and release entry.
  64
  65In the detect routine, you need to allocate a struct
  66NCR_700_Host_Parameters sized memory area and clear it (so that the
  67default values for everything are 0).  Then you must fill in the
  68parameters that matter to you (see below), plumb the NCR_700_intr
  69routine into the interrupt line and call NCR_700_detect with the host
  70template and the new parameters as arguments.  You should also call
  71the relevant request_*_region function and place the register base
  72address into the `base' pointer of the host parameters.
  73
  74In the release routine, you must free the NCR_700_Host_Parameters that
  75you allocated, call the corresponding release_*_region and free the
  76interrupt.
  77
  78Handling Interrupts
  79-------------------
  80
  81In general, you should just plumb the card's interrupt line in with 
  82
  83request_irq(irq, NCR_700_intr, <irq flags>, <driver name>, host);
  84
  85where host is the return from the relevant NCR_700_detect() routine.
  86
  87You may also write your own interrupt handling routine which calls
  88NCR_700_intr() directly.  However, you should only really do this if
  89you have a card with more than one chip on it and you can read a
  90register to tell which set of chips wants the interrupt.
  91
  92Settable NCR_700_Host_Parameters
  93--------------------------------
  94
  95The following are a list of the user settable parameters:
  96
  97clock: (MANDATORY)
  98
  99Set to the clock speed of the chip in MHz.
 100
 101base: (MANDATORY)
 102
 103set to the base of the io or mem region for the register set. On 64
 104bit architectures this is only 32 bits wide, so the registers must be
 105mapped into the low 32 bits of memory.
 106
 107pci_dev: (OPTIONAL)
 108
 109set to the PCI board device.  Leave NULL for a non-pci board.  This is
 110used for the pci_alloc_consistent() and pci_map_*() functions.
 111
 112dmode_extra: (OPTIONAL, 53c710 only)
 113
 114extra flags for the DMODE register.  These are used to control bus
 115output pins on the 710.  The settings should be a combination of
 116DMODE_FC1 and DMODE_FC2.  What these pins actually do is entirely up
 117to the board designer.  Usually it is safe to ignore this setting.
 118
 119differential: (OPTIONAL)
 120
 121set to 1 if the chip drives a differential bus.
 122
 123force_le_on_be: (OPTIONAL, only if CONFIG_53C700_LE_ON_BE is set)
 124
 125set to 1 if the chip is operating in little endian mode on a big
 126endian architecture.
 127
 128chip710: (OPTIONAL)
 129
 130set to 1 if the chip is a 53c710.
 131
 132burst_disable: (OPTIONAL, 53c710 only)
 133
 134disable 8 byte bursting for DMA transfers.
 135
 136
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.