sym_hipd.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:39k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Device driver for the SYMBIOS/LSILOGIC 53C8XX and 53C1010 family 
  3.  * of PCI-SCSI IO processors.
  4.  *
  5.  * Copyright (C) 1999-2001  Gerard Roudier <groudier@free.fr>
  6.  *
  7.  * This driver is derived from the Linux sym53c8xx driver.
  8.  * Copyright (C) 1998-2000  Gerard Roudier
  9.  *
  10.  * The sym53c8xx driver is derived from the ncr53c8xx driver that had been 
  11.  * a port of the FreeBSD ncr driver to Linux-1.2.13.
  12.  *
  13.  * The original ncr driver has been written for 386bsd and FreeBSD by
  14.  *         Wolfgang Stanglmeier        <wolf@cologne.de>
  15.  *         Stefan Esser                <se@mi.Uni-Koeln.de>
  16.  * Copyright (C) 1994  Wolfgang Stanglmeier
  17.  *
  18.  * Other major contributions:
  19.  *
  20.  * NVRAM detection and reading.
  21.  * Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk>
  22.  *
  23.  *-----------------------------------------------------------------------------
  24.  *
  25.  * Redistribution and use in source and binary forms, with or without
  26.  * modification, are permitted provided that the following conditions
  27.  * are met:
  28.  * 1. Redistributions of source code must retain the above copyright
  29.  *    notice, this list of conditions and the following disclaimer.
  30.  * 2. The name of the author may not be used to endorse or promote products
  31.  *    derived from this software without specific prior written permission.
  32.  *
  33.  * Where this Software is combined with software released under the terms of 
  34.  * the GNU Public License ("GPL") and the terms of the GPL would require the 
  35.  * combined work to also be released under the terms of the GPL, the terms
  36.  * and conditions of this License will apply in addition to those of the
  37.  * GPL with the exception of any terms or conditions of this License that
  38.  * conflict with, or are expressly prohibited by, the GPL.
  39.  *
  40.  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
  41.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  42.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  43.  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  44.  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  45.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  46.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  47.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  48.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  49.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  50.  * SUCH DAMAGE.
  51.  */
  52. #ifndef SYM_HIPD_H
  53. #define SYM_HIPD_H
  54. /*
  55.  *  Generic driver options.
  56.  *
  57.  *  They may be defined in platform specific headers, if they 
  58.  *  are useful.
  59.  *
  60.  *    SYM_OPT_NO_BUS_MEMORY_MAPPING
  61.  *        When this option is set, the driver will not load the 
  62.  *        on-chip RAM using MMIO, but let the SCRIPTS processor 
  63.  *        do the work using MOVE MEMORY instructions.
  64.  *        (set for Linux/PPC)
  65.  *
  66.  *    SYM_OPT_HANDLE_DIR_UNKNOWN
  67.  *        When this option is set, the SCRIPTS used by the driver 
  68.  *        are able to handle SCSI transfers with direction not 
  69.  *        supplied by user.
  70.  *        (set for Linux-2.0.X)
  71.  *
  72.  *    SYM_OPT_HANDLE_DEVICE_QUEUEING
  73.  *        When this option is set, the driver will use a queue per 
  74.  *        device and handle QUEUE FULL status requeuing internally.
  75.  *
  76.  *    SYM_OPT_BUS_DMA_ABSTRACTION
  77.  *        When this option is set, the driver allocator is responsible 
  78.  *        of maintaining bus physical addresses and so provides virtual 
  79.  *        to bus physical address translation of driver data structures.
  80.  *        (set for FreeBSD-4 and Linux 2.3)
  81.  *
  82.  *    SYM_OPT_SNIFF_INQUIRY
  83.  *        When this option is set, the driver sniff out successful 
  84.  *        INQUIRY response and performs negotiations accordingly.
  85.  *        (set for Linux)
  86.  *
  87.  *    SYM_OPT_LIMIT_COMMAND_REORDERING
  88.  *        When this option is set, the driver tries to limit tagged 
  89.  *        command reordering to some reasonnable value.
  90.  *        (set for Linux)
  91.  */
  92. #if 0
  93. #define SYM_OPT_NO_BUS_MEMORY_MAPPING
  94. #define SYM_OPT_HANDLE_DIR_UNKNOWN
  95. #define SYM_OPT_HANDLE_DEVICE_QUEUEING
  96. #define SYM_OPT_BUS_DMA_ABSTRACTION
  97. #define SYM_OPT_SNIFF_INQUIRY
  98. #define SYM_OPT_LIMIT_COMMAND_REORDERING
  99. #endif
  100. /*
  101.  *  Active debugging tags and verbosity.
  102.  *  Both DEBUG_FLAGS and sym_verbose can be redefined 
  103.  *  by the platform specific code to something else.
  104.  */
  105. #define DEBUG_ALLOC (0x0001)
  106. #define DEBUG_PHASE (0x0002)
  107. #define DEBUG_POLL (0x0004)
  108. #define DEBUG_QUEUE (0x0008)
  109. #define DEBUG_RESULT (0x0010)
  110. #define DEBUG_SCATTER (0x0020)
  111. #define DEBUG_SCRIPT (0x0040)
  112. #define DEBUG_TINY (0x0080)
  113. #define DEBUG_TIMING (0x0100)
  114. #define DEBUG_NEGO (0x0200)
  115. #define DEBUG_TAGS (0x0400)
  116. #define DEBUG_POINTER (0x0800)
  117. #ifndef DEBUG_FLAGS
  118. #define DEBUG_FLAGS (0x0000)
  119. #endif
  120. #ifndef sym_verbose
  121. #define sym_verbose (np->verbose)
  122. #endif
  123. /*
  124.  *  These ones should have been already defined.
  125.  */
  126. #ifndef offsetof
  127. #define offsetof(t, m) ((size_t) (&((t *)0)->m))
  128. #endif
  129. #ifndef MIN
  130. #define MIN(a, b) (((a) < (b)) ? (a) : (b))
  131. #endif
  132. #ifndef assert
  133. #define assert(expression) { 
  134. if (!(expression)) { 
  135. (void)panic( 
  136. "assertion "%s" failed: file "%s", line %dn", 
  137. #expression, 
  138. __FILE__, __LINE__); 
  139. }
  140. #endif
  141. /*
  142.  *  Number of tasks per device we want to handle.
  143.  */
  144. #if SYM_CONF_MAX_TAG_ORDER > 8
  145. #error "more than 256 tags per logical unit not allowed."
  146. #endif
  147. #define SYM_CONF_MAX_TASK (1<<SYM_CONF_MAX_TAG_ORDER)
  148. /*
  149.  *  Donnot use more tasks that we can handle.
  150.  */
  151. #ifndef SYM_CONF_MAX_TAG
  152. #define SYM_CONF_MAX_TAG SYM_CONF_MAX_TASK
  153. #endif
  154. #if SYM_CONF_MAX_TAG > SYM_CONF_MAX_TASK
  155. #undef SYM_CONF_MAX_TAG
  156. #define SYM_CONF_MAX_TAG SYM_CONF_MAX_TASK
  157. #endif
  158. /*
  159.  *    This one means 'NO TAG for this job'
  160.  */
  161. #define NO_TAG (256)
  162. /*
  163.  *  Number of SCSI targets.
  164.  */
  165. #if SYM_CONF_MAX_TARGET > 16
  166. #error "more than 16 targets not allowed."
  167. #endif
  168. /*
  169.  *  Number of logical units per target.
  170.  */
  171. #if SYM_CONF_MAX_LUN > 64
  172. #error "more than 64 logical units per target not allowed."
  173. #endif
  174. /*
  175.  *    Asynchronous pre-scaler (ns). Shall be 40 for 
  176.  *    the SCSI timings to be compliant.
  177.  */
  178. #define SYM_CONF_MIN_ASYNC (40)
  179. /*
  180.  *  Number of entries in the START and DONE queues.
  181.  *
  182.  *  We limit to 1 PAGE in order to succeed allocation of 
  183.  *  these queues. Each entry is 8 bytes long (2 DWORDS).
  184.  */
  185. #ifdef SYM_CONF_MAX_START
  186. #define SYM_CONF_MAX_QUEUE (SYM_CONF_MAX_START+2)
  187. #else
  188. #define SYM_CONF_MAX_QUEUE (7*SYM_CONF_MAX_TASK+2)
  189. #define SYM_CONF_MAX_START (SYM_CONF_MAX_QUEUE-2)
  190. #endif
  191. #if SYM_CONF_MAX_QUEUE > SYM_MEM_CLUSTER_SIZE/8
  192. #undef SYM_CONF_MAX_QUEUE
  193. #define SYM_CONF_MAX_QUEUE (SYM_MEM_CLUSTER_SIZE/8)
  194. #undef SYM_CONF_MAX_START
  195. #define SYM_CONF_MAX_START (SYM_CONF_MAX_QUEUE-2)
  196. #endif
  197. /*
  198.  *  For this one, we want a short name :-)
  199.  */
  200. #define MAX_QUEUE SYM_CONF_MAX_QUEUE
  201. /*
  202.  *  Union of supported NVRAM formats.
  203.  */
  204. struct sym_nvram {
  205. int type;
  206. #define SYM_SYMBIOS_NVRAM (1)
  207. #define SYM_TEKRAM_NVRAM (2)
  208. #if SYM_CONF_NVRAM_SUPPORT
  209. union {
  210. Symbios_nvram Symbios;
  211. Tekram_nvram Tekram;
  212. } data;
  213. #endif
  214. };
  215. /*
  216.  *  Common definitions for both bus space based and legacy IO methods.
  217.  */
  218. #define INB(r) INB_OFF(offsetof(struct sym_reg,r))
  219. #define INW(r) INW_OFF(offsetof(struct sym_reg,r))
  220. #define INL(r) INL_OFF(offsetof(struct sym_reg,r))
  221. #define OUTB(r, v) OUTB_OFF(offsetof(struct sym_reg,r), (v))
  222. #define OUTW(r, v) OUTW_OFF(offsetof(struct sym_reg,r), (v))
  223. #define OUTL(r, v) OUTL_OFF(offsetof(struct sym_reg,r), (v))
  224. #define OUTONB(r, m) OUTB(r, INB(r) | (m))
  225. #define OUTOFFB(r, m) OUTB(r, INB(r) & ~(m))
  226. #define OUTONW(r, m) OUTW(r, INW(r) | (m))
  227. #define OUTOFFW(r, m) OUTW(r, INW(r) & ~(m))
  228. #define OUTONL(r, m) OUTL(r, INL(r) | (m))
  229. #define OUTOFFL(r, m) OUTL(r, INL(r) & ~(m))
  230. /*
  231.  *  We normally want the chip to have a consistent view
  232.  *  of driver internal data structures when we restart it.
  233.  *  Thus these macros.
  234.  */
  235. #define OUTL_DSP(v)
  236. do {
  237. MEMORY_WRITE_BARRIER();
  238. OUTL (nc_dsp, (v));
  239. } while (0)
  240. #define OUTONB_STD()
  241. do {
  242. MEMORY_WRITE_BARRIER();
  243. OUTONB (nc_dcntl, (STD|NOCOM));
  244. } while (0)
  245. /*
  246.  *  Command control block states.
  247.  */
  248. #define HS_IDLE (0)
  249. #define HS_BUSY (1)
  250. #define HS_NEGOTIATE (2) /* sync/wide data transfer*/
  251. #define HS_DISCONNECT (3) /* Disconnected by target */
  252. #define HS_WAIT (4) /* waiting for resource   */
  253. #define HS_DONEMASK (0x80)
  254. #define HS_COMPLETE (4|HS_DONEMASK)
  255. #define HS_SEL_TIMEOUT (5|HS_DONEMASK) /* Selection timeout      */
  256. #define HS_UNEXPECTED (6|HS_DONEMASK) /* Unexpected disconnect  */
  257. #define HS_COMP_ERR (7|HS_DONEMASK) /* Completed with error   */
  258. /*
  259.  *  Software Interrupt Codes
  260.  */
  261. #define SIR_BAD_SCSI_STATUS (1)
  262. #define SIR_SEL_ATN_NO_MSG_OUT (2)
  263. #define SIR_MSG_RECEIVED (3)
  264. #define SIR_MSG_WEIRD (4)
  265. #define SIR_NEGO_FAILED (5)
  266. #define SIR_NEGO_PROTO (6)
  267. #define SIR_SCRIPT_STOPPED (7)
  268. #define SIR_REJECT_TO_SEND (8)
  269. #define SIR_SWIDE_OVERRUN (9)
  270. #define SIR_SODL_UNDERRUN (10)
  271. #define SIR_RESEL_NO_MSG_IN (11)
  272. #define SIR_RESEL_NO_IDENTIFY (12)
  273. #define SIR_RESEL_BAD_LUN (13)
  274. #define SIR_TARGET_SELECTED (14)
  275. #define SIR_RESEL_BAD_I_T_L (15)
  276. #define SIR_RESEL_BAD_I_T_L_Q (16)
  277. #define SIR_ABORT_SENT (17)
  278. #define SIR_RESEL_ABORTED (18)
  279. #define SIR_MSG_OUT_DONE (19)
  280. #define SIR_COMPLETE_ERROR (20)
  281. #define SIR_DATA_OVERRUN (21)
  282. #define SIR_BAD_PHASE (22)
  283. #if SYM_CONF_DMA_ADDRESSING_MODE == 2
  284. #define SIR_DMAP_DIRTY (23)
  285. #define SIR_MAX (23)
  286. #else
  287. #define SIR_MAX (22)
  288. #endif
  289. /*
  290.  *  Extended error bit codes.
  291.  *  xerr_status field of struct sym_ccb.
  292.  */
  293. #define XE_EXTRA_DATA (1) /* unexpected data phase  */
  294. #define XE_BAD_PHASE (1<<1) /* illegal phase (4/5)  */
  295. #define XE_PARITY_ERR (1<<2) /* unrecovered SCSI parity error */
  296. #define XE_SODL_UNRUN (1<<3) /* ODD transfer in DATA OUT phase */
  297. #define XE_SWIDE_OVRUN (1<<4) /* ODD transfer in DATA IN phase */
  298. /*
  299.  *  Negotiation status.
  300.  *  nego_status field of struct sym_ccb.
  301.  */
  302. #define NS_SYNC (1)
  303. #define NS_WIDE (2)
  304. #define NS_PPR (3)
  305. /*
  306.  *  A CCB hashed table is used to retrieve CCB address 
  307.  *  from DSA value.
  308.  */
  309. #define CCB_HASH_SHIFT 8
  310. #define CCB_HASH_SIZE (1UL << CCB_HASH_SHIFT)
  311. #define CCB_HASH_MASK (CCB_HASH_SIZE-1)
  312. #if 1
  313. #define CCB_HASH_CODE(dsa)
  314. (((dsa) >> (_LGRU16_(sizeof(struct sym_ccb)))) & CCB_HASH_MASK)
  315. #else
  316. #define CCB_HASH_CODE(dsa) (((dsa) >> 9) & CCB_HASH_MASK)
  317. #endif
  318. #if SYM_CONF_DMA_ADDRESSING_MODE == 2
  319. /*
  320.  *  We may want to use segment registers for 64 bit DMA.
  321.  *  16 segments registers -> up to 64 GB addressable.
  322.  */
  323. #define SYM_DMAP_SHIFT (4)
  324. #define SYM_DMAP_SIZE (1u<<SYM_DMAP_SHIFT)
  325. #define SYM_DMAP_MASK (SYM_DMAP_SIZE-1)
  326. #endif
  327. /*
  328.  *  Device flags.
  329.  */
  330. #define SYM_DISC_ENABLED (1)
  331. #define SYM_TAGS_ENABLED (1<<1)
  332. #define SYM_SCAN_BOOT_DISABLED (1<<2)
  333. #define SYM_SCAN_LUNS_DISABLED (1<<3)
  334. /*
  335.  *  Host adapter miscellaneous flags.
  336.  */
  337. #define SYM_AVOID_BUS_RESET (1)
  338. #define SYM_SCAN_TARGETS_HILO (1<<1)
  339. /*
  340.  *  Misc.
  341.  */
  342. #define SYM_SNOOP_TIMEOUT (10000000)
  343. #define BUS_8_BIT 0
  344. #define BUS_16_BIT 1
  345. /*
  346.  *  Gather negotiable parameters value
  347.  */
  348. struct sym_trans {
  349. u8 scsi_version;
  350. u8 spi_version;
  351. u8 period;
  352. u8 offset;
  353. u8 width;
  354. u8 options; /* PPR options */
  355. };
  356. struct sym_tinfo {
  357. struct sym_trans curr;
  358. struct sym_trans goal;
  359. struct sym_trans user;
  360. #ifdef SYM_OPT_ANNOUNCE_TRANSFER_RATE
  361. struct sym_trans prev;
  362. #endif
  363. };
  364. /*
  365.  *  Global TCB HEADER.
  366.  *
  367.  *  Due to lack of indirect addressing on earlier NCR chips,
  368.  *  this substructure is copied from the TCB to a global 
  369.  *  address after selection.
  370.  *  For SYMBIOS chips that support LOAD/STORE this copy is 
  371.  *  not needed and thus not performed.
  372.  */
  373. struct sym_tcbh {
  374. /*
  375.  *  Scripts bus addresses of LUN table accessed from scripts.
  376.  *  LUN #0 is a special case, since multi-lun devices are rare, 
  377.  *  and we we want to speed-up the general case and not waste 
  378.  *  resources.
  379.  */
  380. u32 luntbl_sa; /* bus address of this table */
  381. u32 lun0_sa; /* bus address of LCB #0 */
  382. /*
  383.  *  Actual SYNC/WIDE IO registers value for this target.
  384.  *  'sval', 'wval' and 'uval' are read from SCRIPTS and 
  385.  *  so have alignment constraints.
  386.  */
  387. /*0*/ u_char uval; /* -> SCNTL4 register */
  388. /*1*/ u_char sval; /* -> SXFER  io register */
  389. /*2*/ u_char filler1;
  390. /*3*/ u_char wval; /* -> SCNTL3 io register */
  391. };
  392. /*
  393.  *  Target Control Block
  394.  */
  395. struct sym_tcb {
  396. /*
  397.  *  TCB header.
  398.  *  Assumed at offset 0.
  399.  */
  400. /*0*/ struct sym_tcbh head;
  401. /*
  402.  *  LUN table used by the SCRIPTS processor.
  403.  *  An array of bus addresses is used on reselection.
  404.  */
  405. u32 *luntbl; /* LCBs bus address table */
  406. /*
  407.  *  LUN table used by the C code.
  408.  */
  409. lcb_p lun0p; /* LCB of LUN #0 (usual case) */
  410. #if SYM_CONF_MAX_LUN > 1
  411. lcb_p *lunmp; /* Other LCBs [1..MAX_LUN] */
  412. #endif
  413. /*
  414.  *  Bitmap that tells about LUNs that succeeded at least 
  415.  *  1 IO and therefore assumed to be a real device.
  416.  *  Avoid useless allocation of the LCB structure.
  417.  */
  418. u32 lun_map[(SYM_CONF_MAX_LUN+31)/32];
  419. /*
  420.  *  Bitmap that tells about LUNs that haven't yet an LCB 
  421.  *  allocated (not discovered or LCB allocation failed).
  422.  */
  423. u32 busy0_map[(SYM_CONF_MAX_LUN+31)/32];
  424. #ifdef SYM_HAVE_STCB
  425. /*
  426.  *  O/S specific data structure.
  427.  */
  428. struct sym_stcb s;
  429. #endif
  430. /*
  431.  *  Transfer capabilities (SIP)
  432.  */
  433. struct sym_tinfo tinfo;
  434. /*
  435.  * Keep track of the CCB used for the negotiation in order
  436.  * to ensure that only 1 negotiation is queued at a time.
  437.  */
  438. ccb_p   nego_cp; /* CCB used for the nego */
  439. /*
  440.  *  Set when we want to reset the device.
  441.  */
  442. u_char to_reset;
  443. /*
  444.  *  Other user settable limits and options.
  445.  *  These limits are read from the NVRAM if present.
  446.  */
  447. u_char usrflags;
  448. u_short usrtags;
  449. #ifdef SYM_OPT_SNIFF_INQUIRY
  450. /*
  451.  *  Some minimal information from INQUIRY response.
  452.  */
  453. u32 cmdq_map[(SYM_CONF_MAX_LUN+31)/32];
  454. u_char inq_version;
  455. u_char inq_byte7;
  456. u_char inq_byte56;
  457. u_char inq_byte7_valid;
  458. #endif
  459. };
  460. /*
  461.  *  Global LCB HEADER.
  462.  *
  463.  *  Due to lack of indirect addressing on earlier NCR chips,
  464.  *  this substructure is copied from the LCB to a global 
  465.  *  address after selection.
  466.  *  For SYMBIOS chips that support LOAD/STORE this copy is 
  467.  *  not needed and thus not performed.
  468.  */
  469. struct sym_lcbh {
  470. /*
  471.  *  SCRIPTS address jumped by SCRIPTS on reselection.
  472.  *  For not probed logical units, this address points to 
  473.  *  SCRIPTS that deal with bad LU handling (must be at 
  474.  *  offset zero of the LCB for that reason).
  475.  */
  476. /*0*/ u32 resel_sa;
  477. /*
  478.  *  Task (bus address of a CCB) read from SCRIPTS that points 
  479.  *  to the unique ITL nexus allowed to be disconnected.
  480.  */
  481. u32 itl_task_sa;
  482. /*
  483.  *  Task table bus address (read from SCRIPTS).
  484.  */
  485. u32 itlq_tbl_sa;
  486. };
  487. /*
  488.  *  Logical Unit Control Block
  489.  */
  490. struct sym_lcb {
  491. /*
  492.  *  TCB header.
  493.  *  Assumed at offset 0.
  494.  */
  495. /*0*/ struct sym_lcbh head;
  496. /*
  497.  *  Task table read from SCRIPTS that contains pointers to 
  498.  *  ITLQ nexuses. The bus address read from SCRIPTS is 
  499.  *  inside the header.
  500.  */
  501. u32 *itlq_tbl; /* Kernel virtual address */
  502. /*
  503.  *  Busy CCBs management.
  504.  */
  505. u_short busy_itlq; /* Number of busy tagged CCBs */
  506. u_short busy_itl; /* Number of busy untagged CCBs */
  507. /*
  508.  *  Circular tag allocation buffer.
  509.  */
  510. u_short ia_tag; /* Tag allocation index */
  511. u_short if_tag; /* Tag release index */
  512. u_char *cb_tags; /* Circular tags buffer */
  513. /*
  514.  *  O/S specific data structure.
  515.  */
  516. #ifdef SYM_HAVE_SLCB
  517. struct sym_slcb s;
  518. #endif
  519. #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
  520. /*
  521.  *  Optionnaly the driver can handle device queueing, 
  522.  *  and requeues internally command to redo.
  523.  */
  524. SYM_QUEHEAD
  525. waiting_ccbq;
  526. SYM_QUEHEAD
  527. started_ccbq;
  528. int num_sgood;
  529. u_short started_tags;
  530. u_short started_no_tag;
  531. u_short started_max;
  532. u_short started_limit;
  533. #endif
  534. #ifdef SYM_OPT_LIMIT_COMMAND_REORDERING
  535. /*
  536.  *  Optionnaly the driver can try to prevent SCSI 
  537.  *  IOs from being too much reordering.
  538.  */
  539. u_char tags_si; /* Current index to tags sum */
  540. u_short tags_sum[2]; /* Tags sum counters */
  541. u_short tags_since; /* # of tags since last switch */
  542. #endif
  543. /*
  544.  *  Set when we want to clear all tasks.
  545.  */
  546. u_char to_clear;
  547. /*
  548.  *  Capabilities.
  549.  */
  550. u_char user_flags;
  551. u_char curr_flags;
  552. };
  553. /*
  554.  *  Action from SCRIPTS on a task.
  555.  *  Is part of the CCB, but is also used separately to plug 
  556.  *  error handling action to perform from SCRIPTS.
  557.  */
  558. struct sym_actscr {
  559. u32 start; /* Jumped by SCRIPTS after selection */
  560. u32 restart; /* Jumped by SCRIPTS on relection */
  561. };
  562. /*
  563.  *  Phase mismatch context.
  564.  *
  565.  *  It is part of the CCB and is used as parameters for the 
  566.  *  DATA pointer. We need two contexts to handle correctly the 
  567.  *  SAVED DATA POINTER.
  568.  */
  569. struct sym_pmc {
  570. struct sym_tblmove sg; /* Updated interrupted SG block */
  571. u32 ret; /* SCRIPT return address */
  572. };
  573. /*
  574.  *  LUN control block lookup.
  575.  *  We use a direct pointer for LUN #0, and a table of 
  576.  *  pointers which is only allocated for devices that support 
  577.  *  LUN(s) > 0.
  578.  */
  579. #if SYM_CONF_MAX_LUN <= 1
  580. #define sym_lp(np, tp, lun) (!lun) ? (tp)->lun0p : 0
  581. #else
  582. #define sym_lp(np, tp, lun) 
  583. (!lun) ? (tp)->lun0p : (tp)->lunmp ? (tp)->lunmp[(lun)] : 0
  584. #endif
  585. /*
  586.  *  Status are used by the host and the script processor.
  587.  *
  588.  *  The last four bytes (status[4]) are copied to the 
  589.  *  scratchb register (declared as scr0..scr3) just after the 
  590.  *  select/reselect, and copied back just after disconnecting.
  591.  *  Inside the script the XX_REG are used.
  592.  */
  593. /*
  594.  *  Last four bytes (script)
  595.  */
  596. #define  HX_REG scr0
  597. #define  HX_PRT nc_scr0
  598. #define  HS_REG scr1
  599. #define  HS_PRT nc_scr1
  600. #define  SS_REG scr2
  601. #define  SS_PRT nc_scr2
  602. #define  HF_REG scr3
  603. #define  HF_PRT nc_scr3
  604. /*
  605.  *  Last four bytes (host)
  606.  */
  607. #define  host_xflags   phys.head.status[0]
  608. #define  host_status   phys.head.status[1]
  609. #define  ssss_status   phys.head.status[2]
  610. #define  host_flags    phys.head.status[3]
  611. /*
  612.  *  Host flags
  613.  */
  614. #define HF_IN_PM0 1u
  615. #define HF_IN_PM1 (1u<<1)
  616. #define HF_ACT_PM (1u<<2)
  617. #define HF_DP_SAVED (1u<<3)
  618. #define HF_SENSE (1u<<4)
  619. #define HF_EXT_ERR (1u<<5)
  620. #define HF_DATA_IN (1u<<6)
  621. #ifdef SYM_CONF_IARB_SUPPORT
  622. #define HF_HINT_IARB (1u<<7)
  623. #endif
  624. /*
  625.  *  More host flags
  626.  */
  627. #if SYM_CONF_DMA_ADDRESSING_MODE == 2
  628. #define HX_DMAP_DIRTY (1u<<7)
  629. #endif
  630. /*
  631.  *  Global CCB HEADER.
  632.  *
  633.  *  Due to lack of indirect addressing on earlier NCR chips,
  634.  *  this substructure is copied from the ccb to a global 
  635.  *  address after selection (or reselection) and copied back 
  636.  *  before disconnect.
  637.  *  For SYMBIOS chips that support LOAD/STORE this copy is 
  638.  *  not needed and thus not performed.
  639.  */
  640. struct sym_ccbh {
  641. /*
  642.  *  Start and restart SCRIPTS addresses (must be at 0).
  643.  */
  644. /*0*/ struct sym_actscr go;
  645. /*
  646.  *  SCRIPTS jump address that deal with data pointers.
  647.  *  'savep' points to the position in the script responsible 
  648.  *  for the actual transfer of data.
  649.  *  It's written on reception of a SAVE_DATA_POINTER message.
  650.  */
  651. u32 savep; /* Jump address to saved data pointer */
  652. u32 lastp; /* SCRIPTS address at end of data */
  653. #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
  654. u32 wlastp;
  655. #endif
  656. /*
  657.  *  Status fields.
  658.  */
  659. u8 status[4];
  660. };
  661. /*
  662.  *  GET/SET the value of the data pointer used by SCRIPTS.
  663.  *
  664.  *  We must distinguish between the LOAD/STORE-based SCRIPTS 
  665.  *  that use directly the header in the CCB, and the NCR-GENERIC 
  666.  *  SCRIPTS that use the copy of the header in the HCB.
  667.  */
  668. #if SYM_CONF_GENERIC_SUPPORT
  669. #define sym_set_script_dp(np, cp, dp)
  670. do {
  671. if (np->features & FE_LDSTR)
  672. cp->phys.head.lastp = cpu_to_scr(dp);
  673. else
  674. np->ccb_head.lastp = cpu_to_scr(dp);
  675. } while (0)
  676. #define sym_get_script_dp(np, cp) 
  677. scr_to_cpu((np->features & FE_LDSTR) ?
  678. cp->phys.head.lastp : np->ccb_head.lastp)
  679. #else
  680. #define sym_set_script_dp(np, cp, dp)
  681. do {
  682. cp->phys.head.lastp = cpu_to_scr(dp);
  683. } while (0)
  684. #define sym_get_script_dp(np, cp) (cp->phys.head.lastp)
  685. #endif
  686. /*
  687.  *  Data Structure Block
  688.  *
  689.  *  During execution of a ccb by the script processor, the 
  690.  *  DSA (data structure address) register points to this 
  691.  *  substructure of the ccb.
  692.  */
  693. struct sym_dsb {
  694. /*
  695.  *  CCB header.
  696.  *  Also assumed at offset 0 of the sym_ccb structure.
  697.  */
  698. /*0*/ struct sym_ccbh head;
  699. /*
  700.  *  Phase mismatch contexts.
  701.  *  We need two to handle correctly the SAVED DATA POINTER.
  702.  *  MUST BOTH BE AT OFFSET < 256, due to using 8 bit arithmetic 
  703.  *  for address calculation from SCRIPTS.
  704.  */
  705. struct sym_pmc pm0;
  706. struct sym_pmc pm1;
  707. /*
  708.  *  Table data for Script
  709.  */
  710. struct sym_tblsel  select;
  711. struct sym_tblmove smsg;
  712. struct sym_tblmove smsg_ext;
  713. struct sym_tblmove cmd;
  714. struct sym_tblmove sense;
  715. struct sym_tblmove wresid;
  716. struct sym_tblmove data [SYM_CONF_MAX_SG];
  717. };
  718. /*
  719.  *  Our Command Control Block
  720.  */
  721. struct sym_ccb {
  722. /*
  723.  *  This is the data structure which is pointed by the DSA 
  724.  *  register when it is executed by the script processor.
  725.  *  It must be the first entry.
  726.  */
  727. struct sym_dsb phys;
  728. /*
  729.  *  Pointer to CAM ccb and related stuff.
  730.  */
  731. cam_ccb_p cam_ccb; /* CAM scsiio ccb */
  732. u8 cdb_buf[16]; /* Copy of CDB */
  733. u8 *sns_bbuf; /* Bounce buffer for sense data */
  734. #ifndef SYM_SNS_BBUF_LEN
  735. #define SYM_SNS_BBUF_LEN (32)
  736. #endif
  737. int data_len; /* Total data length */
  738. int segments; /* Number of SG segments */
  739. u8 order; /* Tag type (if tagged command) */
  740. /*
  741.  *  Miscellaneous status'.
  742.  */
  743. u_char nego_status; /* Negotiation status */
  744. u_char xerr_status; /* Extended error flags */
  745. u32 extra_bytes; /* Extraneous bytes transferred */
  746. /*
  747.  *  Message areas.
  748.  *  We prepare a message to be sent after selection.
  749.  *  We may use a second one if the command is rescheduled 
  750.  *  due to CHECK_CONDITION or COMMAND TERMINATED.
  751.  *  Contents are IDENTIFY and SIMPLE_TAG.
  752.  *  While negotiating sync or wide transfer,
  753.  *  a SDTR or WDTR message is appended.
  754.  */
  755. u_char scsi_smsg [12];
  756. u_char scsi_smsg2[12];
  757. /*
  758.  *  Auto request sense related fields.
  759.  */
  760. u_char sensecmd[6]; /* Request Sense command */
  761. u_char sv_scsi_status; /* Saved SCSI status  */
  762. u_char sv_xerr_status; /* Saved extended status */
  763. int sv_resid; /* Saved residual */
  764. /*
  765.  *  O/S specific data structure.
  766.  */
  767. #ifdef SYM_HAVE_SCCB
  768. struct sym_sccb s;
  769. #endif
  770. /*
  771.  *  Other fields.
  772.  */
  773. #ifdef SYM_OPT_HANDLE_IO_TIMEOUT
  774. SYM_QUEHEAD tmo_linkq; /* Optional timeout handling */
  775. u_int tmo_clock; /* (link and dealine value) */
  776. #endif
  777. u32 ccb_ba; /* BUS address of this CCB */
  778. u_short tag; /* Tag for this transfer */
  779. /*  NO_TAG means no tag */
  780. u_char target;
  781. u_char lun;
  782. ccb_p link_ccbh; /* Host adapter CCB hash chain */
  783. SYM_QUEHEAD
  784. link_ccbq; /* Link to free/busy CCB queue */
  785. u32 startp; /* Initial data pointer */
  786. u32 goalp; /* Expected last data pointer */
  787. #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
  788. u32 wgoalp;
  789. #endif
  790. int ext_sg; /* Extreme data pointer, used */
  791. int ext_ofs; /*  to calculate the residual. */
  792. #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
  793. SYM_QUEHEAD
  794. link2_ccbq; /* Link for device queueing */
  795. u_char started; /* CCB queued to the squeue */
  796. #endif
  797. u_char to_abort; /* Want this IO to be aborted */
  798. #ifdef SYM_OPT_LIMIT_COMMAND_REORDERING
  799. u_char tags_si; /* Lun tags sum index (0,1) */
  800. #endif
  801. };
  802. #define CCB_BA(cp,lbl) (cp->ccb_ba + offsetof(struct sym_ccb, lbl))
  803. #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
  804. #define sym_goalp(cp) ((cp->host_flags & HF_DATA_IN) ? cp->goalp : cp->wgoalp)
  805. #else
  806. #define sym_goalp(cp) (cp->goalp)
  807. #endif
  808. /*
  809.  *  Host Control Block
  810.  */
  811. struct sym_hcb {
  812. /*
  813.  *  Global headers.
  814.  *  Due to poorness of addressing capabilities, earlier 
  815.  *  chips (810, 815, 825) copy part of the data structures 
  816.  *  (CCB, TCB and LCB) in fixed areas.
  817.  */
  818. #if SYM_CONF_GENERIC_SUPPORT
  819. struct sym_ccbh ccb_head;
  820. struct sym_tcbh tcb_head;
  821. struct sym_lcbh lcb_head;
  822. #endif
  823. /*
  824.  *  Idle task and invalid task actions and 
  825.  *  their bus addresses.
  826.  */
  827. struct sym_actscr idletask, notask, bad_itl, bad_itlq;
  828. u32 idletask_ba, notask_ba, bad_itl_ba, bad_itlq_ba;
  829. /*
  830.  *  Dummy lun table to protect us against target 
  831.  *  returning bad lun number on reselection.
  832.  */
  833. u32 *badluntbl; /* Table physical address */
  834. u32 badlun_sa; /* SCRIPT handler BUS address */
  835. /*
  836.  *  Bus address of this host control block.
  837.  */
  838. u32 hcb_ba;
  839. /*
  840.  *  Bit 32-63 of the on-chip RAM bus address in LE format.
  841.  *  The START_RAM64 script loads the MMRS and MMWS from this 
  842.  *  field.
  843.  */
  844. u32 scr_ram_seg;
  845. /*
  846.  *  Initial value of some IO register bits.
  847.  *  These values are assumed to have been set by BIOS, and may 
  848.  *  be used to probe adapter implementation differences.
  849.  */
  850. u_char sv_scntl0, sv_scntl3, sv_dmode, sv_dcntl, sv_ctest3, sv_ctest4,
  851. sv_ctest5, sv_gpcntl, sv_stest2, sv_stest4, sv_scntl4,
  852. sv_stest1;
  853. /*
  854.  *  Actual initial value of IO register bits used by the 
  855.  *  driver. They are loaded at initialisation according to  
  856.  *  features that are to be enabled/disabled.
  857.  */
  858. u_char rv_scntl0, rv_scntl3, rv_dmode, rv_dcntl, rv_ctest3, rv_ctest4, 
  859. rv_ctest5, rv_stest2, rv_ccntl0, rv_ccntl1, rv_scntl4;
  860. /*
  861.  *  Target data.
  862.  */
  863. struct sym_tcb target[SYM_CONF_MAX_TARGET];
  864. /*
  865.  *  Target control block bus address array used by the SCRIPT 
  866.  *  on reselection.
  867.  */
  868. u32 *targtbl;
  869. u32 targtbl_ba;
  870. /*
  871.  *  DMA pool handle for this HBA.
  872.  */
  873. #ifdef SYM_OPT_BUS_DMA_ABSTRACTION
  874. m_pool_ident_t bus_dmat;
  875. #endif
  876. /*
  877.  *  O/S specific data structure
  878.  */
  879. struct sym_shcb s;
  880. /*
  881.  *  Physical bus addresses of the chip.
  882.  */
  883. u32 mmio_ba; /* MMIO 32 bit BUS address */
  884. int mmio_ws; /* MMIO Window size */
  885. u32 ram_ba; /* RAM 32 bit BUS address */
  886. int ram_ws; /* RAM window size */
  887. /*
  888.  *  SCRIPTS virtual and physical bus addresses.
  889.  *  'script'  is loaded in the on-chip RAM if present.
  890.  *  'scripth' stays in main memory for all chips except the 
  891.  *  53C895A, 53C896 and 53C1010 that provide 8K on-chip RAM.
  892.  */
  893. u_char *scripta0; /* Copy of scripts A, B, Z */
  894. u_char *scriptb0;
  895. u_char *scriptz0;
  896. u32 scripta_ba; /* Actual scripts A, B, Z */
  897. u32 scriptb_ba; /* 32 bit bus addresses. */
  898. u32 scriptz_ba;
  899. u_short scripta_sz; /* Actual size of script A, B, Z*/
  900. u_short scriptb_sz;
  901. u_short scriptz_sz;
  902. /*
  903.  *  Bus addresses, setup and patch methods for 
  904.  *  the selected firmware.
  905.  */
  906. struct sym_fwa_ba fwa_bas; /* Useful SCRIPTA bus addresses */
  907. struct sym_fwb_ba fwb_bas; /* Useful SCRIPTB bus addresses */
  908. struct sym_fwz_ba fwz_bas; /* Useful SCRIPTZ bus addresses */
  909. void (*fw_setup)(hcb_p np, struct sym_fw *fw);
  910. void (*fw_patch)(hcb_p np);
  911. char *fw_name;
  912. /*
  913.  *  General controller parameters and configuration.
  914.  */
  915. u_short device_id; /* PCI device id */
  916. u_char revision_id; /* PCI device revision id */
  917. u_int features; /* Chip features map */
  918. u_char myaddr; /* SCSI id of the adapter */
  919. u_char maxburst; /* log base 2 of dwords burst */
  920. u_char maxwide; /* Maximum transfer width */
  921. u_char minsync; /* Min sync period factor (ST) */
  922. u_char maxsync; /* Max sync period factor (ST) */
  923. u_char maxoffs; /* Max scsi offset        (ST) */
  924. u_char minsync_dt; /* Min sync period factor (DT) */
  925. u_char maxsync_dt; /* Max sync period factor (DT) */
  926. u_char maxoffs_dt; /* Max scsi offset        (DT) */
  927. u_char multiplier; /* Clock multiplier (1,2,4) */
  928. u_char clock_divn; /* Number of clock divisors */
  929. u32 clock_khz; /* SCSI clock frequency in KHz */
  930. u32 pciclk_khz; /* Estimated PCI clock  in KHz */
  931. /*
  932.  *  Start queue management.
  933.  *  It is filled up by the host processor and accessed by the 
  934.  *  SCRIPTS processor in order to start SCSI commands.
  935.  */
  936. volatile /* Prevent code optimizations */
  937. u32 *squeue; /* Start queue virtual address */
  938. u32 squeue_ba; /* Start queue BUS address */
  939. u_short squeueput; /* Next free slot of the queue */
  940. u_short actccbs; /* Number of allocated CCBs */
  941. /*
  942.  *  Command completion queue.
  943.  *  It is the same size as the start queue to avoid overflow.
  944.  */
  945. u_short dqueueget; /* Next position to scan */
  946. volatile /* Prevent code optimizations */
  947. u32 *dqueue; /* Completion (done) queue */
  948. u32 dqueue_ba; /* Done queue BUS address */
  949. /*
  950.  *  Miscellaneous buffers accessed by the scripts-processor.
  951.  *  They shall be DWORD aligned, because they may be read or 
  952.  *  written with a script command.
  953.  */
  954. u_char msgout[8]; /* Buffer for MESSAGE OUT  */
  955. u_char msgin [8]; /* Buffer for MESSAGE IN */
  956. u32 lastmsg; /* Last SCSI message sent */
  957. u32 scratch; /* Scratch for SCSI receive */
  958. /* Also used for cache test  */
  959. /*
  960.  *  Miscellaneous configuration and status parameters.
  961.  */
  962. u_char usrflags; /* Miscellaneous user flags */
  963. u_char scsi_mode; /* Current SCSI BUS mode */
  964. u_char verbose; /* Verbosity for this controller*/
  965. /*
  966.  *  CCB lists and queue.
  967.  */
  968. ccb_p *ccbh; /* CCBs hashed by DSA value */
  969. /* CCB_HASH_SIZE lists of CCBs */
  970. SYM_QUEHEAD free_ccbq; /* Queue of available CCBs */
  971. SYM_QUEHEAD busy_ccbq; /* Queue of busy CCBs */
  972. /*
  973.  *  During error handling and/or recovery,
  974.  *  active CCBs that are to be completed with 
  975.  *  error or requeued are moved from the busy_ccbq
  976.  *  to the comp_ccbq prior to completion.
  977.  */
  978. SYM_QUEHEAD comp_ccbq;
  979. #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
  980. SYM_QUEHEAD dummy_ccbq;
  981. #endif
  982. /*
  983.  *  Optional handling of IO timeouts.
  984.  */
  985. #ifdef SYM_OPT_HANDLE_IO_TIMEOUT
  986. SYM_QUEHEAD tmo0_ccbq;
  987. SYM_QUEHEAD *tmo_ccbq; /* [2*SYM_TIMEOUT_ORDER_MAX] */
  988. u_int tmo_clock;
  989. u_int tmo_actq;
  990. #endif
  991. /*
  992.  *  IMMEDIATE ARBITRATION (IARB) control.
  993.  *
  994.  *  We keep track in 'last_cp' of the last CCB that has been 
  995.  *  queued to the SCRIPTS processor and clear 'last_cp' when 
  996.  *  this CCB completes. If last_cp is not zero at the moment 
  997.  *  we queue a new CCB, we set a flag in 'last_cp' that is 
  998.  *  used by the SCRIPTS as a hint for setting IARB.
  999.  *  We donnot set more than 'iarb_max' consecutive hints for 
  1000.  *  IARB in order to leave devices a chance to reselect.
  1001.  *  By the way, any non zero value of 'iarb_max' is unfair. :)
  1002.  */
  1003. #ifdef SYM_CONF_IARB_SUPPORT
  1004. u_short iarb_max; /* Max. # consecutive IARB hints*/
  1005. u_short iarb_count; /* Actual # of these hints */
  1006. ccb_p last_cp;
  1007. #endif
  1008. /*
  1009.  *  Command abort handling.
  1010.  *  We need to synchronize tightly with the SCRIPTS 
  1011.  *  processor in order to handle things correctly.
  1012.  */
  1013. u_char abrt_msg[4]; /* Message to send buffer */
  1014. struct sym_tblmove abrt_tbl; /* Table for the MOV of it  */
  1015. struct sym_tblsel  abrt_sel; /* Sync params for selection */
  1016. u_char istat_sem; /* Tells the chip to stop (SEM) */
  1017. /*
  1018.  *  64 bit DMA handling.
  1019.  */
  1020. #if SYM_CONF_DMA_ADDRESSING_MODE != 0
  1021. u_char use_dac; /* Use PCI DAC cycles */
  1022. #if SYM_CONF_DMA_ADDRESSING_MODE == 2
  1023. u_char dmap_dirty; /* Dma segments registers dirty */
  1024. u32 dmap_bah[SYM_DMAP_SIZE];/* Segment registers map */
  1025. #endif
  1026. #endif
  1027. };
  1028. #define HCB_BA(np, lbl) (np->hcb_ba + offsetof(struct sym_hcb, lbl))
  1029. /*
  1030.  *  NVRAM reading (sym_nvram.c).
  1031.  */
  1032. void sym_nvram_setup_host (hcb_p np, struct sym_nvram *nvram);
  1033. void sym_nvram_setup_target (hcb_p np, int target, struct sym_nvram *nvp);
  1034. int sym_read_nvram (sdev_p np, struct sym_nvram *nvp);
  1035. /*
  1036.  *  FIRMWARES (sym_fw.c)
  1037.  */
  1038. struct sym_fw * sym_find_firmware(struct sym_pci_chip *chip);
  1039. void sym_fw_bind_script (hcb_p np, u32 *start, int len);
  1040. /*
  1041.  *  Driver methods called from O/S specific code.
  1042.  */
  1043. char *sym_driver_name(void);
  1044. void sym_print_xerr(ccb_p cp, int x_status);
  1045. int sym_reset_scsi_bus(hcb_p np, int enab_int);
  1046. struct sym_pci_chip *
  1047. sym_lookup_pci_chip_table (u_short device_id, u_char revision);
  1048. void sym_put_start_queue(hcb_p np, ccb_p cp);
  1049. #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
  1050. void sym_start_next_ccbs(hcb_p np, lcb_p lp, int maxn);
  1051. #endif
  1052. void sym_start_up (hcb_p np, int reason);
  1053. void sym_interrupt (hcb_p np);
  1054. void sym_flush_comp_queue(hcb_p np, int cam_status);
  1055. int sym_clear_tasks(hcb_p np, int cam_status, int target, int lun, int task);
  1056. ccb_p sym_get_ccb (hcb_p np, u_char tn, u_char ln, u_char tag_order);
  1057. void sym_free_ccb (hcb_p np, ccb_p cp);
  1058. lcb_p sym_alloc_lcb (hcb_p np, u_char tn, u_char ln);
  1059. int sym_queue_scsiio(hcb_p np, cam_scsiio_p csio, ccb_p cp);
  1060. int sym_abort_scsiio(hcb_p np, cam_ccb_p ccb, int timed_out);
  1061. int sym_abort_ccb(hcb_p np, ccb_p cp, int timed_out);
  1062. int sym_reset_scsi_target(hcb_p np, int target);
  1063. void sym_hcb_free(hcb_p np);
  1064. #ifdef SYM_OPT_NVRAM_PRE_READ
  1065. int sym_hcb_attach(hcb_p np, struct sym_fw *fw, struct sym_nvram *nvram);
  1066. #else
  1067. int sym_hcb_attach(hcb_p np, struct sym_fw *fw);
  1068. #endif
  1069. /*
  1070.  *  Optionnaly, the driver may handle IO timeouts.
  1071.  */
  1072. #ifdef SYM_OPT_HANDLE_IO_TIMEOUT
  1073. int sym_abort_ccb(hcb_p np, ccb_p cp, int timed_out);
  1074. void sym_timeout_ccb(hcb_p np, ccb_p cp, u_int ticks);
  1075. static void __inline sym_untimeout_ccb(hcb_p np, ccb_p cp)
  1076. {
  1077. sym_remque(&cp->tmo_linkq);
  1078. sym_insque_head(&cp->tmo_linkq, &np->tmo0_ccbq);
  1079. }
  1080. void sym_clock(hcb_p np);
  1081. #endif /* SYM_OPT_HANDLE_IO_TIMEOUT */
  1082. /*
  1083.  *  Optionnaly, the driver may provide a function
  1084.  *  to announce transfer rate changes.
  1085.  */
  1086. #ifdef SYM_OPT_ANNOUNCE_TRANSFER_RATE
  1087. void sym_announce_transfer_rate(hcb_p np, int target);
  1088. #endif
  1089. /*
  1090.  *  Optionnaly, the driver may sniff inquiry data.
  1091.  */
  1092. #ifdef SYM_OPT_SNIFF_INQUIRY
  1093. #define INQ7_CMDQ (0x02)
  1094. #define INQ7_SYNC (0x10)
  1095. #define INQ7_WIDE16 (0x20)
  1096. #define INQ56_CLOCKING (3<<2)
  1097. #define INQ56_ST_ONLY (0<<2)
  1098. #define INQ56_DT_ONLY (1<<2)
  1099. #define INQ56_ST_DT (3<<2)
  1100. void sym_update_trans_settings(hcb_p np, tcb_p tp);
  1101. int  
  1102. __sym_sniff_inquiry(hcb_p np, u_char tn, u_char ln,
  1103.                     u_char *inq_data, int inq_len);
  1104. #endif
  1105. /*
  1106.  *  Build a scatter/gather entry.
  1107.  *
  1108.  *  For 64 bit systems, we use the 8 upper bits of the size field 
  1109.  *  to provide bus address bits 32-39 to the SCRIPTS processor.
  1110.  *  This allows the 895A, 896, 1010 to address up to 1 TB of memory.
  1111.  */
  1112. #if   SYM_CONF_DMA_ADDRESSING_MODE == 0
  1113. #define sym_build_sge(np, data, badd, len)
  1114. do {
  1115. (data)->addr = cpu_to_scr(badd);
  1116. (data)->size = cpu_to_scr(len);
  1117. } while (0)
  1118. #elif SYM_CONF_DMA_ADDRESSING_MODE == 1
  1119. #define sym_build_sge(np, data, badd, len)
  1120. do {
  1121. (data)->addr = cpu_to_scr(badd);
  1122. (data)->size = cpu_to_scr((((badd) >> 8) & 0xff000000) + len);
  1123. } while (0)
  1124. #elif SYM_CONF_DMA_ADDRESSING_MODE == 2
  1125. int sym_lookup_dmap(hcb_p np, u32 h, int s);
  1126. static __inline void 
  1127. sym_build_sge(hcb_p np, struct sym_tblmove *data, u64 badd, int len)
  1128. {
  1129. u32 h = (badd>>32);
  1130. int s = (h&SYM_DMAP_MASK);
  1131. if (h != np->dmap_bah[s])
  1132. goto bad;
  1133. good:
  1134. (data)->addr = cpu_to_scr(badd);
  1135. (data)->size = cpu_to_scr((s<<24) + len);
  1136. return;
  1137. bad:
  1138. s = sym_lookup_dmap(np, h, s);
  1139. goto good;
  1140. }
  1141. #else
  1142. #error "Unsupported DMA addressing mode"
  1143. #endif
  1144. /*
  1145.  *  Set up data pointers used by SCRIPTS.
  1146.  *  Called from O/S specific code.
  1147.  */
  1148. static void __inline 
  1149. sym_setup_data_pointers(hcb_p np, ccb_p cp, int dir)
  1150. {
  1151. u32 lastp, goalp;
  1152. /*
  1153.  *  No segments means no data.
  1154.  */
  1155. if (!cp->segments)
  1156. dir = CAM_DIR_NONE;
  1157. /*
  1158.  *  Set the data pointer.
  1159.  */
  1160. switch(dir) {
  1161. #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
  1162. case CAM_DIR_UNKNOWN:
  1163. #endif
  1164. case CAM_DIR_OUT:
  1165. goalp = SCRIPTA_BA (np, data_out2) + 8;
  1166. lastp = goalp - 8 - (cp->segments * (2*4));
  1167. #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
  1168. cp->wgoalp = cpu_to_scr(goalp);
  1169. if (dir != CAM_DIR_UNKNOWN)
  1170. break;
  1171. cp->phys.head.wlastp = cpu_to_scr(lastp);
  1172. /* fall through */
  1173. #else
  1174. break;
  1175. #endif
  1176. case CAM_DIR_IN:
  1177. cp->host_flags |= HF_DATA_IN;
  1178. goalp = SCRIPTA_BA (np, data_in2) + 8;
  1179. lastp = goalp - 8 - (cp->segments * (2*4));
  1180. break;
  1181. case CAM_DIR_NONE:
  1182. default:
  1183. #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
  1184. cp->host_flags |= HF_DATA_IN;
  1185. #endif
  1186. lastp = goalp = SCRIPTB_BA (np, no_data);
  1187. break;
  1188. }
  1189. /*
  1190.  *  Set all pointers values needed by SCRIPTS.
  1191.  */
  1192. cp->phys.head.lastp = cpu_to_scr(lastp);
  1193. cp->phys.head.savep = cpu_to_scr(lastp);
  1194. cp->startp     = cp->phys.head.savep;
  1195. cp->goalp     = cpu_to_scr(goalp);
  1196. #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
  1197. /*
  1198.  *  If direction is unknown, start at data_io.
  1199.  */
  1200. if (dir == CAM_DIR_UNKNOWN)
  1201. cp->phys.head.savep = cpu_to_scr(SCRIPTB_BA (np, data_io));
  1202. #endif
  1203. }
  1204. /*
  1205.  *  MEMORY ALLOCATOR.
  1206.  */
  1207. /*
  1208.  *  Shortest memory chunk is (1<<SYM_MEM_SHIFT), currently 16.
  1209.  *  Actual allocations happen as SYM_MEM_CLUSTER_SIZE sized.
  1210.  *  (1 PAGE at a time is just fine).
  1211.  */
  1212. #define SYM_MEM_SHIFT 4
  1213. #define SYM_MEM_CLUSTER_SIZE (1UL << SYM_MEM_CLUSTER_SHIFT)
  1214. #define SYM_MEM_CLUSTER_MASK (SYM_MEM_CLUSTER_SIZE-1)
  1215. /*
  1216.  *  Link between free memory chunks of a given size.
  1217.  */
  1218. typedef struct sym_m_link {
  1219. struct sym_m_link *next;
  1220. } *m_link_p;
  1221. /*
  1222.  *  Virtual to bus physical translation for a given cluster.
  1223.  *  Such a structure is only useful with DMA abstraction.
  1224.  */
  1225. #ifdef SYM_OPT_BUS_DMA_ABSTRACTION
  1226. typedef struct sym_m_vtob { /* Virtual to Bus address translation */
  1227. struct sym_m_vtob *next;
  1228. #ifdef SYM_HAVE_M_SVTOB
  1229. struct sym_m_svtob s; /* OS specific data structure */
  1230. #endif
  1231. m_addr_t vaddr; /* Virtual address */
  1232. m_addr_t baddr; /* Bus physical address */
  1233. } *m_vtob_p;
  1234. /* Hash this stuff a bit to speed up translations */
  1235. #define VTOB_HASH_SHIFT 5
  1236. #define VTOB_HASH_SIZE (1UL << VTOB_HASH_SHIFT)
  1237. #define VTOB_HASH_MASK (VTOB_HASH_SIZE-1)
  1238. #define VTOB_HASH_CODE(m)
  1239. ((((m_addr_t) (m)) >> SYM_MEM_CLUSTER_SHIFT) & VTOB_HASH_MASK)
  1240. #endif /* SYM_OPT_BUS_DMA_ABSTRACTION */
  1241. /*
  1242.  *  Memory pool of a given kind.
  1243.  *  Ideally, we want to use:
  1244.  *  1) 1 pool for memory we donnot need to involve in DMA.
  1245.  *  2) The same pool for controllers that require same DMA 
  1246.  *     constraints and features.
  1247.  *     The OS specific m_pool_id_t thing and the sym_m_pool_match() 
  1248.  *     method are expected to tell the driver about.
  1249.  */
  1250. typedef struct sym_m_pool {
  1251. #ifdef SYM_OPT_BUS_DMA_ABSTRACTION
  1252. m_pool_ident_t dev_dmat; /* Identifies the pool (see above) */
  1253. m_addr_t (*get_mem_cluster)(struct sym_m_pool *);
  1254. #ifdef SYM_MEM_FREE_UNUSED
  1255. void (*free_mem_cluster)(struct sym_m_pool *, m_addr_t);
  1256. #endif
  1257. #define M_GET_MEM_CLUSTER() mp->get_mem_cluster(mp)
  1258. #define M_FREE_MEM_CLUSTER(p) mp->free_mem_cluster(mp, p)
  1259. #ifdef SYM_HAVE_M_SPOOL
  1260. struct sym_m_spool s; /* OS specific data structure */
  1261. #endif
  1262. int nump;
  1263. m_vtob_p vtob[VTOB_HASH_SIZE];
  1264. struct sym_m_pool *next;
  1265. #else
  1266. #define M_GET_MEM_CLUSTER() sym_get_mem_cluster()
  1267. #define M_FREE_MEM_CLUSTER(p) sym_free_mem_cluster(p)
  1268. #endif /* SYM_OPT_BUS_DMA_ABSTRACTION */
  1269. struct sym_m_link h[SYM_MEM_CLUSTER_SHIFT - SYM_MEM_SHIFT + 1];
  1270. } *m_pool_p;
  1271. /*
  1272.  *  Alloc and free non DMAable memory.
  1273.  */
  1274. void sym_mfree_unlocked(void *ptr, int size, char *name);
  1275. void *sym_calloc_unlocked(int size, char *name);
  1276. /*
  1277.  *  Alloc, free and translate addresses to bus physical 
  1278.  *  for DMAable memory.
  1279.  */
  1280. #ifdef SYM_OPT_BUS_DMA_ABSTRACTION
  1281. void *__sym_calloc_dma_unlocked(m_pool_ident_t dev_dmat, int size, char *name);
  1282. void 
  1283. __sym_mfree_dma_unlocked(m_pool_ident_t dev_dmat, void *m,int size, char *name);
  1284. u32 __vtobus_unlocked(m_pool_ident_t dev_dmat, void *m);
  1285. #endif
  1286. /*
  1287.  * Verbs used by the driver code for DMAable memory handling.
  1288.  * The _uvptv_ macro avoids a nasty warning about pointer to volatile 
  1289.  * being discarded.
  1290.  */
  1291. #define _uvptv_(p) ((void *)((u_long)(p)))
  1292. #define _sym_calloc_dma(np, l, n) __sym_calloc_dma(np->bus_dmat, l, n)
  1293. #define _sym_mfree_dma(np, p, l, n)
  1294. __sym_mfree_dma(np->bus_dmat, _uvptv_(p), l, n)
  1295. #define sym_calloc_dma(l, n) _sym_calloc_dma(np, l, n)
  1296. #define sym_mfree_dma(p, l, n) _sym_mfree_dma(np, p, l, n)
  1297. #define _vtobus(np, p) __vtobus(np->bus_dmat, _uvptv_(p))
  1298. #define vtobus(p) _vtobus(np, p)
  1299. /*
  1300.  *  Override some function names.
  1301.  */
  1302. #define PRINT_ADDR sym_print_addr
  1303. #define PRINT_TARGET sym_print_target
  1304. #define PRINT_LUN sym_print_lun
  1305. #define MDELAY sym_mdelay
  1306. #define UDELAY sym_udelay
  1307. #endif /* SYM_HIPD_H */