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

嵌入式Linux

开发平台:

Unix_Linux

  1. /******************************************************************************
  2. **  Device driver for the PCI-SCSI NCR538XX controller family.
  3. **
  4. **  Copyright (C) 1994  Wolfgang Stanglmeier
  5. **
  6. **  This program is free software; you can redistribute it and/or modify
  7. **  it under the terms of the GNU General Public License as published by
  8. **  the Free Software Foundation; either version 2 of the License, or
  9. **  (at your option) any later version.
  10. **
  11. **  This program is distributed in the hope that it will be useful,
  12. **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. **  GNU General Public License for more details.
  15. **
  16. **  You should have received a copy of the GNU General Public License
  17. **  along with this program; if not, write to the Free Software
  18. **  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19. **
  20. **-----------------------------------------------------------------------------
  21. **
  22. **  This driver has been ported to Linux from the FreeBSD NCR53C8XX driver
  23. **  and is currently maintained by
  24. **
  25. **          Gerard Roudier              <groudier@free.fr>
  26. **
  27. **  Being given that this driver originates from the FreeBSD version, and
  28. **  in order to keep synergy on both, any suggested enhancements and corrections
  29. **  received on Linux are automatically a potential candidate for the FreeBSD 
  30. **  version.
  31. **
  32. **  The original driver has been written for 386bsd and FreeBSD by
  33. **          Wolfgang Stanglmeier        <wolf@cologne.de>
  34. **          Stefan Esser                <se@mi.Uni-Koeln.de>
  35. **
  36. **  And has been ported to NetBSD by
  37. **          Charles M. Hannum           <mycroft@gnu.ai.mit.edu>
  38. **
  39. **-----------------------------------------------------------------------------
  40. **
  41. **                     Brief history
  42. **
  43. **  December 10 1995 by Gerard Roudier:
  44. **     Initial port to Linux.
  45. **
  46. **  June 23 1996 by Gerard Roudier:
  47. **     Support for 64 bits architectures (Alpha).
  48. **
  49. **  November 30 1996 by Gerard Roudier:
  50. **     Support for Fast-20 scsi.
  51. **     Support for large DMA fifo and 128 dwords bursting.
  52. **
  53. **  February 27 1997 by Gerard Roudier:
  54. **     Support for Fast-40 scsi.
  55. **     Support for on-Board RAM.
  56. **
  57. **  May 3 1997 by Gerard Roudier:
  58. **     Full support for scsi scripts instructions pre-fetching.
  59. **
  60. **  May 19 1997 by Richard Waltham <dormouse@farsrobt.demon.co.uk>:
  61. **     Support for NvRAM detection and reading.
  62. **
  63. **  August 18 1997 by Cort <cort@cs.nmt.edu>:
  64. **     Support for Power/PC (Big Endian).
  65. **
  66. **  June 20 1998 by Gerard Roudier
  67. **     Support for up to 64 tags per lun.
  68. **     O(1) everywhere (C and SCRIPTS) for normal cases.
  69. **     Low PCI traffic for command handling when on-chip RAM is present.
  70. **     Aggressive SCSI SCRIPTS optimizations.
  71. **
  72. *******************************************************************************
  73. */
  74. /*
  75. ** Supported SCSI-II features:
  76. **     Synchronous negotiation
  77. **     Wide negotiation        (depends on the NCR Chip)
  78. **     Enable disconnection
  79. **     Tagged command queuing
  80. **     Parity checking
  81. **     Etc...
  82. **
  83. ** Supported NCR/SYMBIOS chips:
  84. ** 53C810 (8 bits, Fast SCSI-2, no rom BIOS) 
  85. ** 53C815 (8 bits, Fast SCSI-2, on board rom BIOS)
  86. ** 53C820 (Wide,   Fast SCSI-2, no rom BIOS)
  87. ** 53C825 (Wide,   Fast SCSI-2, on board rom BIOS)
  88. ** 53C860 (8 bits, Fast 20,     no rom BIOS)
  89. ** 53C875 (Wide,   Fast 20,     on board rom BIOS)
  90. ** 53C895 (Wide,   Fast 40,     on board rom BIOS)
  91. ** 53C895A (Wide,   Fast 40,     on board rom BIOS)
  92. ** 53C896 (Wide,   Fast 40,     on board rom BIOS)
  93. ** 53C897 (Wide,   Fast 40,     on board rom BIOS)
  94. ** 53C1510D (Wide,   Fast 40,     on board rom BIOS)
  95. **
  96. ** Other features:
  97. ** Memory mapped IO (linux-1.3.X and above only)
  98. ** Module
  99. ** Shared IRQ (since linux-1.3.72)
  100. */
  101. /*
  102. ** Name and version of the driver
  103. */
  104. #define SCSI_NCR_DRIVER_NAME "ncr53c8xx-3.4.3b-20010512"
  105. #define SCSI_NCR_DEBUG_FLAGS (0)
  106. /*==========================================================
  107. **
  108. **      Include files
  109. **
  110. **==========================================================
  111. */
  112. #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
  113. #include <linux/module.h>
  114. #include <asm/dma.h>
  115. #include <asm/io.h>
  116. #include <asm/system.h>
  117. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,17)
  118. #include <linux/spinlock.h>
  119. #elif LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
  120. #include <asm/spinlock.h>
  121. #endif
  122. #include <linux/delay.h>
  123. #include <linux/signal.h>
  124. #include <linux/sched.h>
  125. #include <linux/errno.h>
  126. #include <linux/pci.h>
  127. #include <linux/string.h>
  128. #include <linux/mm.h>
  129. #include <linux/ioport.h>
  130. #include <linux/time.h>
  131. #include <linux/timer.h>
  132. #include <linux/stat.h>
  133. #include <linux/version.h>
  134. #include <linux/blk.h>
  135. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,35)
  136. #include <linux/init.h>
  137. #endif
  138. #ifndef __init
  139. #define __init
  140. #endif
  141. #ifndef __initdata
  142. #define __initdata
  143. #endif
  144. #if LINUX_VERSION_CODE <= LinuxVersionCode(2,1,92)
  145. #include <linux/bios32.h>
  146. #endif
  147. #include "scsi.h"
  148. #include "hosts.h"
  149. #include "constants.h"
  150. #include "sd.h"
  151. #include <linux/types.h>
  152. /*
  153. ** Define BITS_PER_LONG for earlier linux versions.
  154. */
  155. #ifndef BITS_PER_LONG
  156. #if (~0UL) == 0xffffffffUL
  157. #define BITS_PER_LONG 32
  158. #else
  159. #define BITS_PER_LONG 64
  160. #endif
  161. #endif
  162. /*
  163. ** Define the BSD style u_int32 and u_int64 type.
  164. ** Are in fact u_int32_t and u_int64_t :-)
  165. */
  166. typedef u32 u_int32;
  167. typedef u64 u_int64;
  168. typedef u_long vm_offset_t;
  169. #include "ncr53c8xx.h"
  170. /*
  171. ** Donnot compile integrity checking code for Linux-2.3.0 
  172. ** and above since SCSI data structures are not ready yet.
  173. */
  174. /* #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,0) */
  175. #if 0
  176. #define SCSI_NCR_INTEGRITY_CHECKING
  177. #endif
  178. #define NAME53C "ncr53c"
  179. #define NAME53C8XX "ncr53c8xx"
  180. #define DRIVER_SMP_LOCK ncr53c8xx_lock
  181. #include "sym53c8xx_comm.h"
  182. /*==========================================================
  183. **
  184. ** The CCB done queue uses an array of CCB virtual 
  185. ** addresses. Empty entries are flagged using the bogus 
  186. ** virtual address 0xffffffff.
  187. **
  188. ** Since PCI ensures that only aligned DWORDs are accessed 
  189. ** atomically, 64 bit little-endian architecture requires 
  190. ** to test the high order DWORD of the entry to determine 
  191. ** if it is empty or valid.
  192. **
  193. ** BTW, I will make things differently as soon as I will 
  194. ** have a better idea, but this is simple and should work.
  195. **
  196. **==========================================================
  197. */
  198.  
  199. #define SCSI_NCR_CCB_DONE_SUPPORT
  200. #ifdef  SCSI_NCR_CCB_DONE_SUPPORT
  201. #define MAX_DONE 24
  202. #define CCB_DONE_EMPTY 0xffffffffUL
  203. /* All 32 bit architectures */
  204. #if BITS_PER_LONG == 32
  205. #define CCB_DONE_VALID(cp)  (((u_long) cp) != CCB_DONE_EMPTY)
  206. /* All > 32 bit (64 bit) architectures regardless endian-ness */
  207. #else
  208. #define CCB_DONE_VALID(cp)  
  209. ((((u_long) cp) & 0xffffffff00000000ul) && 
  210.  (((u_long) cp) & 0xfffffffful) != CCB_DONE_EMPTY)
  211. #endif
  212. #endif /* SCSI_NCR_CCB_DONE_SUPPORT */
  213. /*==========================================================
  214. **
  215. ** Configuration and Debugging
  216. **
  217. **==========================================================
  218. */
  219. /*
  220. **    SCSI address of this device.
  221. **    The boot routines should have set it.
  222. **    If not, use this.
  223. */
  224. #ifndef SCSI_NCR_MYADDR
  225. #define SCSI_NCR_MYADDR      (7)
  226. #endif
  227. /*
  228. **    The maximum number of tags per logic unit.
  229. **    Used only for disk devices that support tags.
  230. */
  231. #ifndef SCSI_NCR_MAX_TAGS
  232. #define SCSI_NCR_MAX_TAGS    (8)
  233. #endif
  234. /*
  235. **    TAGS are actually limited to 64 tags/lun.
  236. **    We need to deal with power of 2, for alignment constraints.
  237. */
  238. #if SCSI_NCR_MAX_TAGS > 64
  239. #define MAX_TAGS (64)
  240. #else
  241. #define MAX_TAGS SCSI_NCR_MAX_TAGS
  242. #endif
  243. #define NO_TAG (255)
  244. /*
  245. ** Choose appropriate type for tag bitmap.
  246. */
  247. #if MAX_TAGS > 32
  248. typedef u_int64 tagmap_t;
  249. #else
  250. typedef u_int32 tagmap_t;
  251. #endif
  252. /*
  253. **    Number of targets supported by the driver.
  254. **    n permits target numbers 0..n-1.
  255. **    Default is 16, meaning targets #0..#15.
  256. **    #7 .. is myself.
  257. */
  258. #ifdef SCSI_NCR_MAX_TARGET
  259. #define MAX_TARGET  (SCSI_NCR_MAX_TARGET)
  260. #else
  261. #define MAX_TARGET  (16)
  262. #endif
  263. /*
  264. **    Number of logic units supported by the driver.
  265. **    n enables logic unit numbers 0..n-1.
  266. **    The common SCSI devices require only
  267. **    one lun, so take 1 as the default.
  268. */
  269. #ifdef SCSI_NCR_MAX_LUN
  270. #define MAX_LUN    SCSI_NCR_MAX_LUN
  271. #else
  272. #define MAX_LUN    (1)
  273. #endif
  274. /*
  275. **    Asynchronous pre-scaler (ns). Shall be 40
  276. */
  277.  
  278. #ifndef SCSI_NCR_MIN_ASYNC
  279. #define SCSI_NCR_MIN_ASYNC (40)
  280. #endif
  281. /*
  282. **    The maximum number of jobs scheduled for starting.
  283. **    There should be one slot per target, and one slot
  284. **    for each tag of each target in use.
  285. **    The calculation below is actually quite silly ...
  286. */
  287. #ifdef SCSI_NCR_CAN_QUEUE
  288. #define MAX_START   (SCSI_NCR_CAN_QUEUE + 4)
  289. #else
  290. #define MAX_START   (MAX_TARGET + 7 * MAX_TAGS)
  291. #endif
  292. /*
  293. **   We limit the max number of pending IO to 250.
  294. **   since we donnot want to allocate more than 1 
  295. **   PAGE for 'scripth'.
  296. */
  297. #if MAX_START > 250
  298. #undef MAX_START
  299. #define MAX_START 250
  300. #endif
  301. /*
  302. **    The maximum number of segments a transfer is split into.
  303. **    We support up to 127 segments for both read and write.
  304. **    The data scripts are broken into 2 sub-scripts.
  305. **    80 (MAX_SCATTERL) segments are moved from a sub-script 
  306. **    in on-chip RAM. This makes data transfers shorter than 
  307. **    80k (assuming 1k fs) as fast as possible.
  308. */
  309. #define MAX_SCATTER (SCSI_NCR_MAX_SCATTER)
  310. #if (MAX_SCATTER > 80)
  311. #define MAX_SCATTERL 80
  312. #define MAX_SCATTERH (MAX_SCATTER - MAX_SCATTERL)
  313. #else
  314. #define MAX_SCATTERL (MAX_SCATTER-1)
  315. #define MAX_SCATTERH 1
  316. #endif
  317. /*
  318. ** other
  319. */
  320. #define NCR_SNOOP_TIMEOUT (1000000)
  321. /*
  322. ** Head of list of NCR boards
  323. **
  324. ** For kernel version < 1.3.70, host is retrieved by its irq level.
  325. ** For later kernels, the internal host control block address 
  326. ** (struct ncb) is used as device id parameter of the irq stuff.
  327. */
  328. static struct Scsi_Host *first_host = NULL;
  329. static Scsi_Host_Template *the_template = NULL;
  330. /*
  331. ** Other definitions
  332. */
  333. #define ScsiResult(host_code, scsi_code) (((host_code) << 16) + ((scsi_code) & 0x7f))
  334. static void ncr53c8xx_select_queue_depths(
  335. struct Scsi_Host *host, struct scsi_device *devlist);
  336. static void ncr53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
  337. static void ncr53c8xx_timeout(unsigned long np);
  338. #define initverbose (driver_setup.verbose)
  339. #define bootverbose (np->verbose)
  340. #ifdef SCSI_NCR_NVRAM_SUPPORT
  341. static u_char Tekram_sync[16] __initdata =
  342. {25,31,37,43, 50,62,75,125, 12,15,18,21, 6,7,9,10};
  343. #endif /* SCSI_NCR_NVRAM_SUPPORT */
  344. /*==========================================================
  345. **
  346. ** Command control block states.
  347. **
  348. **==========================================================
  349. */
  350. #define HS_IDLE (0)
  351. #define HS_BUSY (1)
  352. #define HS_NEGOTIATE (2) /* sync/wide data transfer*/
  353. #define HS_DISCONNECT (3) /* Disconnected by target */
  354. #define HS_DONEMASK (0x80)
  355. #define HS_COMPLETE (4|HS_DONEMASK)
  356. #define HS_SEL_TIMEOUT (5|HS_DONEMASK) /* Selection timeout      */
  357. #define HS_RESET (6|HS_DONEMASK) /* SCSI reset           */
  358. #define HS_ABORTED (7|HS_DONEMASK) /* Transfer aborted       */
  359. #define HS_TIMEOUT (8|HS_DONEMASK) /* Software timeout       */
  360. #define HS_FAIL (9|HS_DONEMASK) /* SCSI or PCI bus errors */
  361. #define HS_UNEXPECTED (10|HS_DONEMASK)/* Unexpected disconnect  */
  362. /*
  363. ** Invalid host status values used by the SCRIPTS processor 
  364. ** when the nexus is not fully identified.
  365. ** Shall never appear in a CCB.
  366. */
  367. #define HS_INVALMASK (0x40)
  368. #define HS_SELECTING (0|HS_INVALMASK)
  369. #define HS_IN_RESELECT (1|HS_INVALMASK)
  370. #define HS_STARTING (2|HS_INVALMASK)
  371. /*
  372. ** Flags set by the SCRIPT processor for commands 
  373. ** that have been skipped.
  374. */
  375. #define HS_SKIPMASK (0x20)
  376. /*==========================================================
  377. **
  378. ** Software Interrupt Codes
  379. **
  380. **==========================================================
  381. */
  382. #define SIR_BAD_STATUS (1)
  383. #define SIR_XXXXXXXXXX (2)
  384. #define SIR_NEGO_SYNC (3)
  385. #define SIR_NEGO_WIDE (4)
  386. #define SIR_NEGO_FAILED (5)
  387. #define SIR_NEGO_PROTO (6)
  388. #define SIR_REJECT_RECEIVED (7)
  389. #define SIR_REJECT_SENT (8)
  390. #define SIR_IGN_RESIDUE (9)
  391. #define SIR_MISSING_SAVE (10)
  392. #define SIR_RESEL_NO_MSG_IN (11)
  393. #define SIR_RESEL_NO_IDENTIFY (12)
  394. #define SIR_RESEL_BAD_LUN (13)
  395. #define SIR_RESEL_BAD_TARGET (14)
  396. #define SIR_RESEL_BAD_I_T_L (15)
  397. #define SIR_RESEL_BAD_I_T_L_Q (16)
  398. #define SIR_DONE_OVERFLOW (17)
  399. #define SIR_MAX (17)
  400. /*==========================================================
  401. **
  402. ** Extended error codes.
  403. ** xerr_status field of struct ccb.
  404. **
  405. **==========================================================
  406. */
  407. #define XE_OK (0)
  408. #define XE_EXTRA_DATA (1) /* unexpected data phase */
  409. #define XE_BAD_PHASE (2) /* illegal phase (4/5)   */
  410. /*==========================================================
  411. **
  412. ** Negotiation status.
  413. ** nego_status field of struct ccb.
  414. **
  415. **==========================================================
  416. */
  417. #define NS_NOCHANGE (0)
  418. #define NS_SYNC (1)
  419. #define NS_WIDE (2)
  420. #define NS_PPR (4)
  421. /*==========================================================
  422. **
  423. ** "Special features" of targets.
  424. ** quirks field of struct tcb.
  425. ** actualquirks field of struct ccb.
  426. **
  427. **==========================================================
  428. */
  429. #define QUIRK_AUTOSAVE (0x01)
  430. #define QUIRK_NOMSG (0x02)
  431. #define QUIRK_NOSYNC (0x10)
  432. #define QUIRK_NOWIDE16 (0x20)
  433. /*==========================================================
  434. **
  435. ** Capability bits in Inquire response byte 7.
  436. **
  437. **==========================================================
  438. */
  439. #define INQ7_QUEUE (0x02)
  440. #define INQ7_SYNC (0x10)
  441. #define INQ7_WIDE16 (0x20)
  442. /*==========================================================
  443. **
  444. ** Misc.
  445. **
  446. **==========================================================
  447. */
  448. #define CCB_MAGIC (0xf2691ad2)
  449. /*==========================================================
  450. **
  451. ** Declaration of structs.
  452. **
  453. **==========================================================
  454. */
  455. struct tcb;
  456. struct lcb;
  457. struct ccb;
  458. struct ncb;
  459. struct script;
  460. typedef struct ncb * ncb_p;
  461. typedef struct tcb * tcb_p;
  462. typedef struct lcb * lcb_p;
  463. typedef struct ccb * ccb_p;
  464. struct link {
  465. ncrcmd l_cmd;
  466. ncrcmd l_paddr;
  467. };
  468. struct usrcmd {
  469. u_long target;
  470. u_long lun;
  471. u_long data;
  472. u_long cmd;
  473. };
  474. #define UC_SETSYNC      10
  475. #define UC_SETTAGS 11
  476. #define UC_SETDEBUG 12
  477. #define UC_SETORDER 13
  478. #define UC_SETWIDE 14
  479. #define UC_SETFLAG 15
  480. #define UC_SETVERBOSE 17
  481. #define UF_TRACE (0x01)
  482. #define UF_NODISC (0x02)
  483. #define UF_NOSCAN (0x04)
  484. /*========================================================================
  485. **
  486. ** Declaration of structs: target control block
  487. **
  488. **========================================================================
  489. */
  490. struct tcb {
  491. /*----------------------------------------------------------------
  492. ** During reselection the ncr jumps to this point with SFBR 
  493. ** set to the encoded target number with bit 7 set.
  494. ** if it's not this target, jump to the next.
  495. **
  496. ** JUMP  IF (SFBR != #target#), @(next tcb)
  497. **----------------------------------------------------------------
  498. */
  499. struct link   jump_tcb;
  500. /*----------------------------------------------------------------
  501. ** Load the actual values for the sxfer and the scntl3
  502. ** register (sync/wide mode).
  503. **
  504. ** SCR_COPY (1), @(sval field of this tcb), @(sxfer  register)
  505. ** SCR_COPY (1), @(wval field of this tcb), @(scntl3 register)
  506. **----------------------------------------------------------------
  507. */
  508. ncrcmd getscr[6];
  509. /*----------------------------------------------------------------
  510. ** Get the IDENTIFY message and load the LUN to SFBR.
  511. **
  512. ** CALL, <RESEL_LUN>
  513. **----------------------------------------------------------------
  514. */
  515. struct link   call_lun;
  516. /*----------------------------------------------------------------
  517. ** Now look for the right lun.
  518. **
  519. ** For i = 0 to 3
  520. ** SCR_JUMP ^ IFTRUE(MASK(i, 3)), @(first lcb mod. i)
  521. **
  522. ** Recent chips will prefetch the 4 JUMPS using only 1 burst.
  523. ** It is kind of hashcoding.
  524. **----------------------------------------------------------------
  525. */
  526. struct link     jump_lcb[4]; /* JUMPs for reselection */
  527. lcb_p lp[MAX_LUN]; /* The lcb's of this tcb */
  528. u_char inq_done; /* Target capabilities received */
  529. u_char inq_byte7; /* Contains these capabilities */
  530. /*----------------------------------------------------------------
  531. ** Pointer to the ccb used for negotiation.
  532. ** Prevent from starting a negotiation for all queued commands 
  533. ** when tagged command queuing is enabled.
  534. **----------------------------------------------------------------
  535. */
  536. ccb_p   nego_cp;
  537. /*----------------------------------------------------------------
  538. ** statistical data
  539. **----------------------------------------------------------------
  540. */
  541. u_long transfers;
  542. u_long bytes;
  543. /*----------------------------------------------------------------
  544. ** negotiation of wide and synch transfer and device quirks.
  545. **----------------------------------------------------------------
  546. */
  547. /*0*/ u_char minsync;
  548. /*1*/ u_char sval;
  549. /*2*/ u_short period;
  550. /*0*/ u_char maxoffs;
  551. /*1*/ u_char quirks;
  552. /*2*/ u_char widedone;
  553. /*3*/ u_char wval;
  554. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  555. u_char  ic_min_sync;
  556. u_char  ic_max_width;
  557. u_char  ic_maximums_set;
  558. u_char  ic_done;
  559. #endif
  560. /*----------------------------------------------------------------
  561. ** User settable limits and options.
  562. ** These limits are read from the NVRAM if present.
  563. **----------------------------------------------------------------
  564. */
  565. u_char usrsync;
  566. u_char usrwide;
  567. u_char usrtags;
  568. u_char usrflag;
  569. };
  570. /*========================================================================
  571. **
  572. ** Declaration of structs: lun control block
  573. **
  574. **========================================================================
  575. */
  576. struct lcb {
  577. /*----------------------------------------------------------------
  578. ** During reselection the ncr jumps to this point
  579. ** with SFBR set to the "Identify" message.
  580. ** if it's not this lun, jump to the next.
  581. **
  582. ** JUMP  IF (SFBR != #lun#), @(next lcb of this target)
  583. **
  584. ** It is this lun. Load TEMP with the nexus jumps table 
  585. ** address and jump to RESEL_TAG (or RESEL_NOTAG).
  586. **
  587. ** SCR_COPY (4), p_jump_ccb, TEMP,
  588. ** SCR_JUMP, <RESEL_TAG>
  589. **----------------------------------------------------------------
  590. */
  591. struct link jump_lcb;
  592. ncrcmd load_jump_ccb[3];
  593. struct link jump_tag;
  594. ncrcmd p_jump_ccb; /* Jump table bus address */
  595. /*----------------------------------------------------------------
  596. ** Jump table used by the script processor to directly jump 
  597. ** to the CCB corresponding to the reselected nexus.
  598. ** Address is allocated on 256 bytes boundary in order to 
  599. ** allow 8 bit calculation of the tag jump entry for up to 
  600. ** 64 possible tags.
  601. **----------------------------------------------------------------
  602. */
  603. u_int32 jump_ccb_0; /* Default table if no tags */
  604. u_int32 *jump_ccb; /* Virtual address */
  605. /*----------------------------------------------------------------
  606. ** CCB queue management.
  607. **----------------------------------------------------------------
  608. */
  609. XPT_QUEHEAD free_ccbq; /* Queue of available CCBs */
  610. XPT_QUEHEAD busy_ccbq; /* Queue of busy CCBs */
  611. XPT_QUEHEAD wait_ccbq; /* Queue of waiting for IO CCBs */
  612. XPT_QUEHEAD skip_ccbq; /* Queue of skipped CCBs */
  613. u_char actccbs; /* Number of allocated CCBs */
  614. u_char busyccbs; /* CCBs busy for this lun */
  615. u_char queuedccbs; /* CCBs queued to the controller*/
  616. u_char queuedepth; /* Queue depth for this lun */
  617. u_char scdev_depth; /* SCSI device queue depth */
  618. u_char maxnxs; /* Max possible nexuses */
  619. /*----------------------------------------------------------------
  620. ** Control of tagged command queuing.
  621. ** Tags allocation is performed using a circular buffer.
  622. ** This avoids using a loop for tag allocation.
  623. **----------------------------------------------------------------
  624. */
  625. u_char ia_tag; /* Allocation index */
  626. u_char if_tag; /* Freeing index */
  627. u_char cb_tags[MAX_TAGS]; /* Circular tags buffer */
  628. u_char usetags; /* Command queuing is active */
  629. u_char maxtags; /* Max nr of tags asked by user */
  630. u_char numtags; /* Current number of tags */
  631. u_char inq_byte7; /* Store unit CmdQ capabitility */
  632. /*----------------------------------------------------------------
  633. ** QUEUE FULL control and ORDERED tag control.
  634. **----------------------------------------------------------------
  635. */
  636. /*----------------------------------------------------------------
  637. ** QUEUE FULL and ORDERED tag control.
  638. **----------------------------------------------------------------
  639. */
  640. u_short num_good; /* Nr of GOOD since QUEUE FULL */
  641. tagmap_t tags_umap; /* Used tags bitmap */
  642. tagmap_t tags_smap; /* Tags in use at 'tag_stime' */
  643. u_long tags_stime; /* Last time we set smap=umap */
  644. ccb_p held_ccb; /* CCB held for QUEUE FULL */
  645. };
  646. /*========================================================================
  647. **
  648. **      Declaration of structs:     the launch script.
  649. **
  650. **========================================================================
  651. **
  652. ** It is part of the CCB and is called by the scripts processor to 
  653. ** start or restart the data structure (nexus).
  654. ** This 6 DWORDs mini script makes use of prefetching.
  655. **
  656. **------------------------------------------------------------------------
  657. */
  658. struct launch {
  659. /*----------------------------------------------------------------
  660. ** SCR_COPY(4), @(p_phys), @(dsa register)
  661. ** SCR_JUMP, @(scheduler_point)
  662. **----------------------------------------------------------------
  663. */
  664. ncrcmd setup_dsa[3]; /* Copy 'phys' address to dsa */
  665. struct link schedule; /* Jump to scheduler point */
  666. ncrcmd p_phys; /* 'phys' header bus address */
  667. };
  668. /*========================================================================
  669. **
  670. **      Declaration of structs:     global HEADER.
  671. **
  672. **========================================================================
  673. **
  674. ** This substructure is copied from the ccb to a global address after 
  675. ** selection (or reselection) and copied back before disconnect.
  676. **
  677. ** These fields are accessible to the script processor.
  678. **
  679. **------------------------------------------------------------------------
  680. */
  681. struct head {
  682. /*----------------------------------------------------------------
  683. ** Saved data pointer.
  684. ** Points to the position in the script responsible for the
  685. ** actual transfer transfer of data.
  686. ** It's written after reception of a SAVE_DATA_POINTER message.
  687. ** The goalpointer points after the last transfer command.
  688. **----------------------------------------------------------------
  689. */
  690. u_int32 savep;
  691. u_int32 lastp;
  692. u_int32 goalp;
  693. /*----------------------------------------------------------------
  694. ** Alternate data pointer.
  695. ** They are copied back to savep/lastp/goalp by the SCRIPTS 
  696. ** when the direction is unknown and the device claims data out.
  697. **----------------------------------------------------------------
  698. */
  699. u_int32 wlastp;
  700. u_int32 wgoalp;
  701. /*----------------------------------------------------------------
  702. ** The virtual address of the ccb containing this header.
  703. **----------------------------------------------------------------
  704. */
  705. ccb_p cp;
  706. /*----------------------------------------------------------------
  707. ** Status fields.
  708. **----------------------------------------------------------------
  709. */
  710. u_char scr_st[4]; /* script status */
  711. u_char status[4]; /* host status. must be the  */
  712. /*  last DWORD of the header. */
  713. };
  714. /*
  715. ** The status bytes are used by the host and the script processor.
  716. **
  717. ** The byte corresponding to the host_status must be stored in the 
  718. ** last DWORD of the CCB header since it is used for command 
  719. ** completion (ncr_wakeup()). Doing so, we are sure that the header 
  720. ** has been entirely copied back to the CCB when the host_status is 
  721. ** seen complete by the CPU.
  722. **
  723. ** The last four bytes (status[4]) are copied to the scratchb register
  724. ** (declared as scr0..scr3 in ncr_reg.h) just after the select/reselect,
  725. ** and copied back just after disconnecting.
  726. ** Inside the script the XX_REG are used.
  727. **
  728. ** The first four bytes (scr_st[4]) are used inside the script by 
  729. ** "COPY" commands.
  730. ** Because source and destination must have the same alignment
  731. ** in a DWORD, the fields HAVE to be at the choosen offsets.
  732. ** xerr_st 0 (0x34) scratcha
  733. ** sync_st 1 (0x05) sxfer
  734. ** wide_st 3 (0x03) scntl3
  735. */
  736. /*
  737. ** Last four bytes (script)
  738. */
  739. #define  QU_REG scr0
  740. #define  HS_REG scr1
  741. #define  HS_PRT nc_scr1
  742. #define  SS_REG scr2
  743. #define  SS_PRT nc_scr2
  744. #define  PS_REG scr3
  745. /*
  746. ** Last four bytes (host)
  747. */
  748. #define  actualquirks  phys.header.status[0]
  749. #define  host_status   phys.header.status[1]
  750. #define  scsi_status   phys.header.status[2]
  751. #define  parity_status phys.header.status[3]
  752. /*
  753. ** First four bytes (script)
  754. */
  755. #define  xerr_st       header.scr_st[0]
  756. #define  sync_st       header.scr_st[1]
  757. #define  nego_st       header.scr_st[2]
  758. #define  wide_st       header.scr_st[3]
  759. /*
  760. ** First four bytes (host)
  761. */
  762. #define  xerr_status   phys.xerr_st
  763. #define  nego_status   phys.nego_st
  764. #if 0
  765. #define  sync_status   phys.sync_st
  766. #define  wide_status   phys.wide_st
  767. #endif
  768. /*==========================================================
  769. **
  770. **      Declaration of structs:     Data structure block
  771. **
  772. **==========================================================
  773. **
  774. ** During execution of a ccb by the script processor,
  775. ** the DSA (data structure address) register points
  776. ** to this substructure of the ccb.
  777. ** This substructure contains the header with
  778. ** the script-processor-changable data and
  779. ** data blocks for the indirect move commands.
  780. **
  781. **----------------------------------------------------------
  782. */
  783. struct dsb {
  784. /*
  785. ** Header.
  786. */
  787. struct head header;
  788. /*
  789. ** Table data for Script
  790. */
  791. struct scr_tblsel  select;
  792. struct scr_tblmove smsg  ;
  793. struct scr_tblmove cmd   ;
  794. struct scr_tblmove sense ;
  795. struct scr_tblmove data [MAX_SCATTER];
  796. };
  797. /*========================================================================
  798. **
  799. **      Declaration of structs:     Command control block.
  800. **
  801. **========================================================================
  802. */
  803. struct ccb {
  804. /*----------------------------------------------------------------
  805. ** This is the data structure which is pointed by the DSA 
  806. ** register when it is executed by the script processor.
  807. ** It must be the first entry because it contains the header 
  808. ** as first entry that must be cache line aligned.
  809. **----------------------------------------------------------------
  810. */
  811. struct dsb phys;
  812. /*----------------------------------------------------------------
  813. ** Mini-script used at CCB execution start-up.
  814. ** Load the DSA with the data structure address (phys) and 
  815. ** jump to SELECT. Jump to CANCEL if CCB is to be canceled.
  816. **----------------------------------------------------------------
  817. */
  818. struct launch start;
  819. /*----------------------------------------------------------------
  820. ** Mini-script used at CCB relection to restart the nexus.
  821. ** Load the DSA with the data structure address (phys) and 
  822. ** jump to RESEL_DSA. Jump to ABORT if CCB is to be aborted.
  823. **----------------------------------------------------------------
  824. */
  825. struct launch restart;
  826. /*----------------------------------------------------------------
  827. ** If a data transfer phase is terminated too early
  828. ** (after reception of a message (i.e. DISCONNECT)),
  829. ** we have to prepare a mini script to transfer
  830. ** the rest of the data.
  831. **----------------------------------------------------------------
  832. */
  833. ncrcmd patch[8];
  834. /*----------------------------------------------------------------
  835. ** The general SCSI driver provides a
  836. ** pointer to a control block.
  837. **----------------------------------------------------------------
  838. */
  839. Scsi_Cmnd *cmd; /* SCSI command  */
  840. u_char cdb_buf[16]; /* Copy of CDB */
  841. u_char sense_buf[64];
  842. int data_len; /* Total data length */
  843. /*----------------------------------------------------------------
  844. ** Message areas.
  845. ** We prepare a message to be sent after selection.
  846. ** We may use a second one if the command is rescheduled 
  847. ** due to GETCC or QFULL.
  848. **      Contents are IDENTIFY and SIMPLE_TAG.
  849. ** While negotiating sync or wide transfer,
  850. ** a SDTR or WDTR message is appended.
  851. **----------------------------------------------------------------
  852. */
  853. u_char scsi_smsg [8];
  854. u_char scsi_smsg2[8];
  855. /*----------------------------------------------------------------
  856. ** Other fields.
  857. **----------------------------------------------------------------
  858. */
  859. u_long p_ccb; /* BUS address of this CCB */
  860. u_char sensecmd[6]; /* Sense command */
  861. u_char tag; /* Tag for this transfer */
  862. /*  255 means no tag */
  863. u_char target;
  864. u_char lun;
  865. u_char queued;
  866. u_char auto_sense;
  867. ccb_p link_ccb; /* Host adapter CCB chain */
  868. XPT_QUEHEAD link_ccbq; /* Link to unit CCB queue */
  869. u_int32 startp; /* Initial data pointer */
  870. u_long magic; /* Free / busy  CCB flag */
  871. };
  872. #define CCB_PHYS(cp,lbl) (cp->p_ccb + offsetof(struct ccb, lbl))
  873. /*========================================================================
  874. **
  875. **      Declaration of structs:     NCR device descriptor
  876. **
  877. **========================================================================
  878. */
  879. struct ncb {
  880. /*----------------------------------------------------------------
  881. ** The global header.
  882. ** It is accessible to both the host and the script processor.
  883. ** Must be cache line size aligned (32 for x86) in order to 
  884. ** allow cache line bursting when it is copied to/from CCB.
  885. **----------------------------------------------------------------
  886. */
  887. struct head     header;
  888. /*----------------------------------------------------------------
  889. ** CCBs management queues.
  890. **----------------------------------------------------------------
  891. */
  892. Scsi_Cmnd *waiting_list; /* Commands waiting for a CCB */
  893. /*  when lcb is not allocated. */
  894. Scsi_Cmnd *done_list; /* Commands waiting for done()  */
  895. /* callback to be invoked.      */ 
  896. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
  897. spinlock_t smp_lock; /* Lock for SMP threading       */
  898. #endif
  899. /*----------------------------------------------------------------
  900. ** Chip and controller indentification.
  901. **----------------------------------------------------------------
  902. */
  903. int unit; /* Unit number */
  904. char chip_name[8]; /* Chip name */
  905. char inst_name[16]; /* ncb instance name */
  906. /*----------------------------------------------------------------
  907. ** Initial value of some IO register bits.
  908. ** These values are assumed to have been set by BIOS, and may 
  909. ** be used for probing adapter implementation differences.
  910. **----------------------------------------------------------------
  911. */
  912. u_char sv_scntl0, sv_scntl3, sv_dmode, sv_dcntl, sv_ctest3, sv_ctest4,
  913. sv_ctest5, sv_gpcntl, sv_stest2, sv_stest4;
  914. /*----------------------------------------------------------------
  915. ** Actual initial value of IO register bits used by the 
  916. ** driver. They are loaded at initialisation according to  
  917. ** features that are to be enabled.
  918. **----------------------------------------------------------------
  919. */
  920. u_char rv_scntl0, rv_scntl3, rv_dmode, rv_dcntl, rv_ctest3, rv_ctest4, 
  921. rv_ctest5, rv_stest2;
  922. /*----------------------------------------------------------------
  923. ** Targets management.
  924. ** During reselection the ncr jumps to jump_tcb.
  925. ** The SFBR register is loaded with the encoded target id.
  926. ** For i = 0 to 3
  927. ** SCR_JUMP ^ IFTRUE(MASK(i, 3)), @(next tcb mod. i)
  928. **
  929. ** Recent chips will prefetch the 4 JUMPS using only 1 burst.
  930. ** It is kind of hashcoding.
  931. **----------------------------------------------------------------
  932. */
  933. struct link     jump_tcb[4]; /* JUMPs for reselection */
  934. struct tcb  target[MAX_TARGET]; /* Target data */
  935. /*----------------------------------------------------------------
  936. ** Virtual and physical bus addresses of the chip.
  937. **----------------------------------------------------------------
  938. */
  939. vm_offset_t vaddr; /* Virtual and bus address of */
  940. vm_offset_t     paddr; /*  chip's IO registers. */
  941. vm_offset_t     paddr2; /* On-chip RAM bus address. */
  942. volatile /* Pointer to volatile for  */
  943. struct ncr_reg *reg; /*  memory mapped IO. */
  944. /*----------------------------------------------------------------
  945. ** SCRIPTS virtual and physical bus addresses.
  946. ** 'script'  is loaded in the on-chip RAM if present.
  947. ** 'scripth' stays in main memory.
  948. **----------------------------------------------------------------
  949. */
  950. struct script *script0; /* Copies of script and scripth */
  951. struct scripth *scripth0; /*  relocated for this ncb. */
  952. struct scripth *scripth; /* Actual scripth virt. address */
  953. u_long p_script; /* Actual script and scripth */
  954. u_long p_scripth; /*  bus addresses. */
  955. /*----------------------------------------------------------------
  956. ** General controller parameters and configuration.
  957. **----------------------------------------------------------------
  958. */
  959. pcidev_t pdev;
  960. u_short device_id; /* PCI device id */
  961. u_char revision_id; /* PCI device revision id */
  962. u_char bus; /* PCI BUS number */
  963. u_char device_fn; /* PCI BUS device and function */
  964. u_long base_io; /* IO space base address */
  965. u_int irq; /* IRQ level */
  966. u_int features; /* Chip features map */
  967. u_char myaddr; /* SCSI id of the adapter */
  968. u_char maxburst; /* log base 2 of dwords burst */
  969. u_char maxwide; /* Maximum transfer width */
  970. u_char minsync; /* Minimum sync period factor */
  971. u_char maxsync; /* Maximum sync period factor */
  972. u_char maxoffs; /* Max scsi offset */
  973. u_char multiplier; /* Clock multiplier (1,2,4) */
  974. u_char clock_divn; /* Number of clock divisors */
  975. u_long clock_khz; /* SCSI clock frequency in KHz */
  976. /*----------------------------------------------------------------
  977. ** Start queue management.
  978. ** It is filled up by the host processor and accessed by the 
  979. ** SCRIPTS processor in order to start SCSI commands.
  980. **----------------------------------------------------------------
  981. */
  982. u_short squeueput; /* Next free slot of the queue */
  983. u_short actccbs; /* Number of allocated CCBs */
  984. u_short queuedccbs; /* Number of CCBs in start queue*/
  985. u_short queuedepth; /* Start queue depth */
  986. /*----------------------------------------------------------------
  987. ** Timeout handler.
  988. **----------------------------------------------------------------
  989. */
  990. struct timer_list timer; /* Timer handler link header */
  991. u_long lasttime;
  992. u_long settle_time; /* Resetting the SCSI BUS */
  993. /*----------------------------------------------------------------
  994. ** Debugging and profiling.
  995. **----------------------------------------------------------------
  996. */
  997. struct ncr_reg regdump; /* Register dump */
  998. u_long regtime; /* Time it has been done */
  999. /*----------------------------------------------------------------
  1000. ** Miscellaneous buffers accessed by the scripts-processor.
  1001. ** They shall be DWORD aligned, because they may be read or 
  1002. ** written with a SCR_COPY script command.
  1003. **----------------------------------------------------------------
  1004. */
  1005. u_char msgout[8]; /* Buffer for MESSAGE OUT  */
  1006. u_char msgin [8]; /* Buffer for MESSAGE IN */
  1007. u_int32 lastmsg; /* Last SCSI message sent */
  1008. u_char scratch; /* Scratch for SCSI receive */
  1009. /*----------------------------------------------------------------
  1010. ** Miscellaneous configuration and status parameters.
  1011. **----------------------------------------------------------------
  1012. */
  1013. u_char disc; /* Diconnection allowed */
  1014. u_char scsi_mode; /* Current SCSI BUS mode */
  1015. u_char order; /* Tag order to use */
  1016. u_char verbose; /* Verbosity for this controller*/
  1017. int ncr_cache; /* Used for cache test at init. */
  1018. u_long p_ncb; /* BUS address of this NCB */
  1019. /*----------------------------------------------------------------
  1020. ** Command completion handling.
  1021. **----------------------------------------------------------------
  1022. */
  1023. #ifdef SCSI_NCR_CCB_DONE_SUPPORT
  1024. struct ccb *(ccb_done[MAX_DONE]);
  1025. int ccb_done_ic;
  1026. #endif
  1027. /*----------------------------------------------------------------
  1028. ** Fields that should be removed or changed.
  1029. **----------------------------------------------------------------
  1030. */
  1031. struct ccb *ccb; /* Global CCB */
  1032. struct usrcmd user; /* Command from user */
  1033. u_char release_stage; /* Synchronisation stage on release  */
  1034. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1035. /*----------------------------------------------------------------
  1036. ** Fields that are used for integrity check
  1037. **----------------------------------------------------------------
  1038. */
  1039. unsigned char check_integrity; /* Enable midlayer integ.check on
  1040. * bus scan. */
  1041. unsigned char check_integ_par;  /* Set if par or Init. Det. error
  1042.  * used only during integ check */
  1043. #endif
  1044. };
  1045. #define NCB_SCRIPT_PHYS(np,lbl)  (np->p_script  + offsetof (struct script, lbl))
  1046. #define NCB_SCRIPTH_PHYS(np,lbl) (np->p_scripth + offsetof (struct scripth,lbl))
  1047. /*==========================================================
  1048. **
  1049. **
  1050. **      Script for NCR-Processor.
  1051. **
  1052. ** Use ncr_script_fill() to create the variable parts.
  1053. ** Use ncr_script_copy_and_bind() to make a copy and
  1054. ** bind to physical addresses.
  1055. **
  1056. **
  1057. **==========================================================
  1058. **
  1059. ** We have to know the offsets of all labels before
  1060. ** we reach them (for forward jumps).
  1061. ** Therefore we declare a struct here.
  1062. ** If you make changes inside the script,
  1063. ** DONT FORGET TO CHANGE THE LENGTHS HERE!
  1064. **
  1065. **----------------------------------------------------------
  1066. */
  1067. /*
  1068. ** Script fragments which are loaded into the on-chip RAM 
  1069. ** of 825A, 875 and 895 chips.
  1070. */
  1071. struct script {
  1072. ncrcmd start [  5];
  1073. ncrcmd  startpos [  1];
  1074. ncrcmd select [  6];
  1075. ncrcmd select2 [  9];
  1076. ncrcmd loadpos [  4];
  1077. ncrcmd send_ident [  9];
  1078. ncrcmd prepare [  6];
  1079. ncrcmd prepare2 [  7];
  1080. ncrcmd  command [  6];
  1081. ncrcmd  dispatch [ 32];
  1082. ncrcmd  clrack [  4];
  1083. ncrcmd no_data [ 17];
  1084. ncrcmd  status [  8];
  1085. ncrcmd  msg_in [  2];
  1086. ncrcmd  msg_in2 [ 16];
  1087. ncrcmd  msg_bad [  4];
  1088. ncrcmd setmsg [  7];
  1089. ncrcmd cleanup [  6];
  1090. ncrcmd  complete [  9];
  1091. ncrcmd cleanup_ok [  8];
  1092. ncrcmd cleanup0 [  1];
  1093. #ifndef SCSI_NCR_CCB_DONE_SUPPORT
  1094. ncrcmd signal [ 12];
  1095. #else
  1096. ncrcmd signal [  9];
  1097. ncrcmd done_pos [  1];
  1098. ncrcmd done_plug [  2];
  1099. ncrcmd done_end [  7];
  1100. #endif
  1101. ncrcmd  save_dp [  7];
  1102. ncrcmd  restore_dp [  5];
  1103. ncrcmd  disconnect [ 17];
  1104. ncrcmd msg_out [  9];
  1105. ncrcmd msg_out_done [  7];
  1106. ncrcmd  idle [  2];
  1107. ncrcmd reselect [  8];
  1108. ncrcmd reselected [  8];
  1109. ncrcmd resel_dsa [  6];
  1110. ncrcmd loadpos1 [  4];
  1111. ncrcmd  resel_lun [  6];
  1112. ncrcmd resel_tag [  6];
  1113. ncrcmd jump_to_nexus [  4];
  1114. ncrcmd nexus_indirect [  4];
  1115. ncrcmd resel_notag [  4];
  1116. ncrcmd  data_in [MAX_SCATTERL * 4];
  1117. ncrcmd  data_in2 [  4];
  1118. ncrcmd  data_out [MAX_SCATTERL * 4];
  1119. ncrcmd  data_out2 [  4];
  1120. };
  1121. /*
  1122. ** Script fragments which stay in main memory for all chips.
  1123. */
  1124. struct scripth {
  1125. ncrcmd  tryloop [MAX_START*2];
  1126. ncrcmd  tryloop2 [  2];
  1127. #ifdef SCSI_NCR_CCB_DONE_SUPPORT
  1128. ncrcmd  done_queue [MAX_DONE*5];
  1129. ncrcmd  done_queue2 [  2];
  1130. #endif
  1131. ncrcmd select_no_atn [  8];
  1132. ncrcmd cancel [  4];
  1133. ncrcmd skip [  9];
  1134. ncrcmd skip2 [ 19];
  1135. ncrcmd par_err_data_in [  6];
  1136. ncrcmd par_err_other [  4];
  1137. ncrcmd msg_reject [  8];
  1138. ncrcmd msg_ign_residue [ 24];
  1139. ncrcmd  msg_extended [ 10];
  1140. ncrcmd  msg_ext_2 [ 10];
  1141. ncrcmd msg_wdtr [ 14];
  1142. ncrcmd send_wdtr [  7];
  1143. ncrcmd  msg_ext_3 [ 10];
  1144. ncrcmd msg_sdtr [ 14];
  1145. ncrcmd send_sdtr [  7];
  1146. ncrcmd nego_bad_phase [  4];
  1147. ncrcmd msg_out_abort [ 10];
  1148. ncrcmd  hdata_in [MAX_SCATTERH * 4];
  1149. ncrcmd  hdata_in2 [  2];
  1150. ncrcmd  hdata_out [MAX_SCATTERH * 4];
  1151. ncrcmd  hdata_out2 [  2];
  1152. ncrcmd reset [  4];
  1153. ncrcmd aborttag [  4];
  1154. ncrcmd abort [  2];
  1155. ncrcmd abort_resel [ 20];
  1156. ncrcmd resend_ident [  4];
  1157. ncrcmd clratn_go_on [  3];
  1158. ncrcmd nxtdsp_go_on [  1];
  1159. ncrcmd sdata_in [  8];
  1160. ncrcmd  data_io [ 18];
  1161. ncrcmd bad_identify [ 12];
  1162. ncrcmd bad_i_t_l [  4];
  1163. ncrcmd bad_i_t_l_q [  4];
  1164. ncrcmd bad_target [  8];
  1165. ncrcmd bad_status [  8];
  1166. ncrcmd start_ram [  4];
  1167. ncrcmd start_ram0 [  4];
  1168. ncrcmd sto_restart [  5];
  1169. ncrcmd snooptest [  9];
  1170. ncrcmd snoopend [  2];
  1171. };
  1172. /*==========================================================
  1173. **
  1174. **
  1175. **      Function headers.
  1176. **
  1177. **
  1178. **==========================================================
  1179. */
  1180. static void ncr_alloc_ccb (ncb_p np, u_char tn, u_char ln);
  1181. static void ncr_complete (ncb_p np, ccb_p cp);
  1182. static void ncr_exception (ncb_p np);
  1183. static void ncr_free_ccb (ncb_p np, ccb_p cp);
  1184. static void ncr_init_ccb (ncb_p np, ccb_p cp);
  1185. static void ncr_init_tcb (ncb_p np, u_char tn);
  1186. static lcb_p ncr_alloc_lcb (ncb_p np, u_char tn, u_char ln);
  1187. static lcb_p ncr_setup_lcb (ncb_p np, u_char tn, u_char ln,
  1188.  u_char *inq_data);
  1189. static void ncr_getclock (ncb_p np, int mult);
  1190. static void ncr_selectclock (ncb_p np, u_char scntl3);
  1191. static ccb_p ncr_get_ccb (ncb_p np, u_char tn, u_char ln);
  1192. static void ncr_init (ncb_p np, int reset, char * msg, u_long code);
  1193. static int ncr_int_sbmc (ncb_p np);
  1194. static int ncr_int_par (ncb_p np);
  1195. static void ncr_int_ma (ncb_p np);
  1196. static void ncr_int_sir (ncb_p np);
  1197. static  void    ncr_int_sto     (ncb_p np);
  1198. static u_long ncr_lookup (char* id);
  1199. static void ncr_negotiate (struct ncb* np, struct tcb* tp);
  1200. static int ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr);
  1201. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1202. static int ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr);
  1203. #endif
  1204. static void ncr_script_copy_and_bind
  1205. (ncb_p np, ncrcmd *src, ncrcmd *dst, int len);
  1206. static  void    ncr_script_fill (struct script * scr, struct scripth * scripth);
  1207. static int ncr_scatter (ncb_p np, ccb_p cp, Scsi_Cmnd *cmd);
  1208. static void ncr_getsync (ncb_p np, u_char sfac, u_char *fakp, u_char *scntl3p);
  1209. static void ncr_setsync (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer);
  1210. static void ncr_setup_tags (ncb_p np, u_char tn, u_char ln);
  1211. static void ncr_setwide (ncb_p np, ccb_p cp, u_char wide, u_char ack);
  1212. static int ncr_show_msg (u_char * msg);
  1213. static  void    ncr_print_msg   (ccb_p cp, char *label, u_char *msg);
  1214. static int ncr_snooptest (ncb_p np);
  1215. static void ncr_timeout (ncb_p np);
  1216. static  void    ncr_wakeup      (ncb_p np, u_long code);
  1217. static  void    ncr_wakeup_done (ncb_p np);
  1218. static void ncr_start_next_ccb (ncb_p np, lcb_p lp, int maxn);
  1219. static void ncr_put_start_queue(ncb_p np, ccb_p cp);
  1220. static void ncr_start_reset (ncb_p np);
  1221. static int ncr_reset_scsi_bus (ncb_p np, int enab_int, int settle_delay);
  1222. #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
  1223. static void ncr_usercmd (ncb_p np);
  1224. #endif
  1225. static int ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device);
  1226. static void insert_into_waiting_list(ncb_p np, Scsi_Cmnd *cmd);
  1227. static Scsi_Cmnd *retrieve_from_waiting_list(int to_remove, ncb_p np, Scsi_Cmnd *cmd);
  1228. static void process_waiting_list(ncb_p np, int sts);
  1229. #define remove_from_waiting_list(np, cmd) 
  1230. retrieve_from_waiting_list(1, (np), (cmd))
  1231. #define requeue_waiting_list(np) process_waiting_list((np), DID_OK)
  1232. #define reset_waiting_list(np) process_waiting_list((np), DID_RESET)
  1233. static inline char *ncr_name (ncb_p np)
  1234. {
  1235. return np->inst_name;
  1236. }
  1237. /*==========================================================
  1238. **
  1239. **
  1240. **      Scripts for NCR-Processor.
  1241. **
  1242. **      Use ncr_script_bind for binding to physical addresses.
  1243. **
  1244. **
  1245. **==========================================================
  1246. **
  1247. ** NADDR generates a reference to a field of the controller data.
  1248. ** PADDR generates a reference to another part of the script.
  1249. ** RADDR generates a reference to a script processor register.
  1250. ** FADDR generates a reference to a script processor register
  1251. ** with offset.
  1252. **
  1253. **----------------------------------------------------------
  1254. */
  1255. #define RELOC_SOFTC 0x40000000
  1256. #define RELOC_LABEL 0x50000000
  1257. #define RELOC_REGISTER 0x60000000
  1258. #if 0
  1259. #define RELOC_KVAR 0x70000000
  1260. #endif
  1261. #define RELOC_LABELH 0x80000000
  1262. #define RELOC_MASK 0xf0000000
  1263. #define NADDR(label) (RELOC_SOFTC | offsetof(struct ncb, label))
  1264. #define PADDR(label)    (RELOC_LABEL | offsetof(struct script, label))
  1265. #define PADDRH(label)   (RELOC_LABELH | offsetof(struct scripth, label))
  1266. #define RADDR(label) (RELOC_REGISTER | REG(label))
  1267. #define FADDR(label,ofs)(RELOC_REGISTER | ((REG(label))+(ofs)))
  1268. #if 0
  1269. #define KVAR(which) (RELOC_KVAR | (which))
  1270. #endif
  1271. #if 0
  1272. #define SCRIPT_KVAR_JIFFIES (0)
  1273. #define SCRIPT_KVAR_FIRST SCRIPT_KVAR_JIFFIES
  1274. #define SCRIPT_KVAR_LAST SCRIPT_KVAR_JIFFIES
  1275. /*
  1276.  * Kernel variables referenced in the scripts.
  1277.  * THESE MUST ALL BE ALIGNED TO A 4-BYTE BOUNDARY.
  1278.  */
  1279. static void *script_kvars[] __initdata =
  1280. { (void *)&jiffies };
  1281. #endif
  1282. static struct script script0 __initdata = {
  1283. /*--------------------------< START >-----------------------*/ {
  1284. /*
  1285. ** This NOP will be patched with LED ON
  1286. ** SCR_REG_REG (gpreg, SCR_AND, 0xfe)
  1287. */
  1288. SCR_NO_OP,
  1289. 0,
  1290. /*
  1291. **      Clear SIGP.
  1292. */
  1293. SCR_FROM_REG (ctest2),
  1294. 0,
  1295. /*
  1296. ** Then jump to a certain point in tryloop.
  1297. ** Due to the lack of indirect addressing the code
  1298. ** is self modifying here.
  1299. */
  1300. SCR_JUMP,
  1301. }/*-------------------------< STARTPOS >--------------------*/,{
  1302. PADDRH(tryloop),
  1303. }/*-------------------------< SELECT >----------------------*/,{
  1304. /*
  1305. ** DSA contains the address of a scheduled
  1306. ** data structure.
  1307. **
  1308. ** SCRATCHA contains the address of the script,
  1309. ** which starts the next entry.
  1310. **
  1311. ** Set Initiator mode.
  1312. **
  1313. ** (Target mode is left as an exercise for the reader)
  1314. */
  1315. SCR_CLR (SCR_TRG),
  1316. 0,
  1317. SCR_LOAD_REG (HS_REG, HS_SELECTING),
  1318. 0,
  1319. /*
  1320. **      And try to select this target.
  1321. */
  1322. SCR_SEL_TBL_ATN ^ offsetof (struct dsb, select),
  1323. PADDR (reselect),
  1324. }/*-------------------------< SELECT2 >----------------------*/,{
  1325. /*
  1326. ** Now there are 4 possibilities:
  1327. **
  1328. ** (1) The ncr looses arbitration.
  1329. ** This is ok, because it will try again,
  1330. ** when the bus becomes idle.
  1331. ** (But beware of the timeout function!)
  1332. **
  1333. ** (2) The ncr is reselected.
  1334. ** Then the script processor takes the jump
  1335. ** to the RESELECT label.
  1336. **
  1337. ** (3) The ncr wins arbitration.
  1338. ** Then it will execute SCRIPTS instruction until 
  1339. ** the next instruction that checks SCSI phase.
  1340. ** Then will stop and wait for selection to be 
  1341. ** complete or selection time-out to occur.
  1342. ** As a result the SCRIPTS instructions until 
  1343. ** LOADPOS + 2 should be executed in parallel with 
  1344. ** the SCSI core performing selection.
  1345. */
  1346. /*
  1347. ** The M_REJECT problem seems to be due to a selection 
  1348. ** timing problem.
  1349. ** Wait immediately for the selection to complete. 
  1350. ** (2.5x behaves so)
  1351. */
  1352. SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  1353. 0,
  1354. /*
  1355. ** Next time use the next slot.
  1356. */
  1357. SCR_COPY (4),
  1358. RADDR (temp),
  1359. PADDR (startpos),
  1360. /*
  1361. **      The ncr doesn't have an indirect load
  1362. ** or store command. So we have to
  1363. ** copy part of the control block to a
  1364. ** fixed place, where we can access it.
  1365. **
  1366. ** We patch the address part of a
  1367. ** COPY command with the DSA-register.
  1368. */
  1369. SCR_COPY_F (4),
  1370. RADDR (dsa),
  1371. PADDR (loadpos),
  1372. /*
  1373. ** then we do the actual copy.
  1374. */
  1375. SCR_COPY (sizeof (struct head)),
  1376. /*
  1377. ** continued after the next label ...
  1378. */
  1379. }/*-------------------------< LOADPOS >---------------------*/,{
  1380. 0,
  1381. NADDR (header),
  1382. /*
  1383. ** Wait for the next phase or the selection
  1384. ** to complete or time-out.
  1385. */
  1386. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  1387. PADDR (prepare),
  1388. }/*-------------------------< SEND_IDENT >----------------------*/,{
  1389. /*
  1390. ** Selection complete.
  1391. ** Send the IDENTIFY and SIMPLE_TAG messages
  1392. ** (and the M_X_SYNC_REQ message)
  1393. */
  1394. SCR_MOVE_TBL ^ SCR_MSG_OUT,
  1395. offsetof (struct dsb, smsg),
  1396. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
  1397. PADDRH (resend_ident),
  1398. SCR_LOAD_REG (scratcha, 0x80),
  1399. 0,
  1400. SCR_COPY (1),
  1401. RADDR (scratcha),
  1402. NADDR (lastmsg),
  1403. }/*-------------------------< PREPARE >----------------------*/,{
  1404. /*
  1405. **      load the savep (saved pointer) into
  1406. **      the TEMP register (actual pointer)
  1407. */
  1408. SCR_COPY (4),
  1409. NADDR (header.savep),
  1410. RADDR (temp),
  1411. /*
  1412. **      Initialize the status registers
  1413. */
  1414. SCR_COPY (4),
  1415. NADDR (header.status),
  1416. RADDR (scr0),
  1417. }/*-------------------------< PREPARE2 >---------------------*/,{
  1418. /*
  1419. ** Initialize the msgout buffer with a NOOP message.
  1420. */
  1421. SCR_LOAD_REG (scratcha, M_NOOP),
  1422. 0,
  1423. SCR_COPY (1),
  1424. RADDR (scratcha),
  1425. NADDR (msgout),
  1426. #if 0
  1427. SCR_COPY (1),
  1428. RADDR (scratcha),
  1429. NADDR (msgin),
  1430. #endif
  1431. /*
  1432. ** Anticipate the COMMAND phase.
  1433. ** This is the normal case for initial selection.
  1434. */
  1435. SCR_JUMP ^ IFFALSE (WHEN (SCR_COMMAND)),
  1436. PADDR (dispatch),
  1437. }/*-------------------------< COMMAND >--------------------*/,{
  1438. /*
  1439. ** ... and send the command
  1440. */
  1441. SCR_MOVE_TBL ^ SCR_COMMAND,
  1442. offsetof (struct dsb, cmd),
  1443. /*
  1444. ** If status is still HS_NEGOTIATE, negotiation failed.
  1445. ** We check this here, since we want to do that 
  1446. ** only once.
  1447. */
  1448. SCR_FROM_REG (HS_REG),
  1449. 0,
  1450. SCR_INT ^ IFTRUE (DATA (HS_NEGOTIATE)),
  1451. SIR_NEGO_FAILED,
  1452. }/*-----------------------< DISPATCH >----------------------*/,{
  1453. /*
  1454. ** MSG_IN is the only phase that shall be 
  1455. ** entered at least once for each (re)selection.
  1456. ** So we test it first.
  1457. */
  1458. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
  1459. PADDR (msg_in),
  1460. SCR_RETURN ^ IFTRUE (IF (SCR_DATA_OUT)),
  1461. 0,
  1462. /*
  1463. ** DEL 397 - 53C875 Rev 3 - Part Number 609-0392410 - ITEM 4.
  1464. ** Possible data corruption during Memory Write and Invalidate.
  1465. ** This work-around resets the addressing logic prior to the 
  1466. ** start of the first MOVE of a DATA IN phase.
  1467. ** (See README.ncr53c8xx for more information)
  1468. */
  1469. SCR_JUMPR ^ IFFALSE (IF (SCR_DATA_IN)),
  1470. 20,
  1471. SCR_COPY (4),
  1472. RADDR (scratcha),
  1473. RADDR (scratcha),
  1474. SCR_RETURN,
  1475.   0,
  1476. SCR_JUMP ^ IFTRUE (IF (SCR_STATUS)),
  1477. PADDR (status),
  1478. SCR_JUMP ^ IFTRUE (IF (SCR_COMMAND)),
  1479. PADDR (command),
  1480. SCR_JUMP ^ IFTRUE (IF (SCR_MSG_OUT)),
  1481. PADDR (msg_out),
  1482. /*
  1483. **      Discard one illegal phase byte, if required.
  1484. */
  1485. SCR_LOAD_REG (scratcha, XE_BAD_PHASE),
  1486. 0,
  1487. SCR_COPY (1),
  1488. RADDR (scratcha),
  1489. NADDR (xerr_st),
  1490. SCR_JUMPR ^ IFFALSE (IF (SCR_ILG_OUT)),
  1491. 8,
  1492. SCR_MOVE_ABS (1) ^ SCR_ILG_OUT,
  1493. NADDR (scratch),
  1494. SCR_JUMPR ^ IFFALSE (IF (SCR_ILG_IN)),
  1495. 8,
  1496. SCR_MOVE_ABS (1) ^ SCR_ILG_IN,
  1497. NADDR (scratch),
  1498. SCR_JUMP,
  1499. PADDR (dispatch),
  1500. }/*-------------------------< CLRACK >----------------------*/,{
  1501. /*
  1502. ** Terminate possible pending message phase.
  1503. */
  1504. SCR_CLR (SCR_ACK),
  1505. 0,
  1506. SCR_JUMP,
  1507. PADDR (dispatch),
  1508. }/*-------------------------< NO_DATA >--------------------*/,{
  1509. /*
  1510. ** The target wants to tranfer too much data
  1511. ** or in the wrong direction.
  1512. **      Remember that in extended error.
  1513. */
  1514. SCR_LOAD_REG (scratcha, XE_EXTRA_DATA),
  1515. 0,
  1516. SCR_COPY (1),
  1517. RADDR (scratcha),
  1518. NADDR (xerr_st),
  1519. /*
  1520. **      Discard one data byte, if required.
  1521. */
  1522. SCR_JUMPR ^ IFFALSE (WHEN (SCR_DATA_OUT)),
  1523. 8,
  1524. SCR_MOVE_ABS (1) ^ SCR_DATA_OUT,
  1525. NADDR (scratch),
  1526. SCR_JUMPR ^ IFFALSE (IF (SCR_DATA_IN)),
  1527. 8,
  1528. SCR_MOVE_ABS (1) ^ SCR_DATA_IN,
  1529. NADDR (scratch),
  1530. /*
  1531. **      .. and repeat as required.
  1532. */
  1533. SCR_CALL,
  1534. PADDR (dispatch),
  1535. SCR_JUMP,
  1536. PADDR (no_data),
  1537. }/*-------------------------< STATUS >--------------------*/,{
  1538. /*
  1539. ** get the status
  1540. */
  1541. SCR_MOVE_ABS (1) ^ SCR_STATUS,
  1542. NADDR (scratch),
  1543. /*
  1544. ** save status to scsi_status.
  1545. ** mark as complete.
  1546. */
  1547. SCR_TO_REG (SS_REG),
  1548. 0,
  1549. SCR_LOAD_REG (HS_REG, HS_COMPLETE),
  1550. 0,
  1551. SCR_JUMP,
  1552. PADDR (dispatch),
  1553. }/*-------------------------< MSG_IN >--------------------*/,{
  1554. /*
  1555. ** Get the first byte of the message
  1556. ** and save it to SCRATCHA.
  1557. **
  1558. ** The script processor doesn't negate the
  1559. ** ACK signal after this transfer.
  1560. */
  1561. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  1562. NADDR (msgin[0]),
  1563. }/*-------------------------< MSG_IN2 >--------------------*/,{
  1564. /*
  1565. ** Handle this message.
  1566. */
  1567. SCR_JUMP ^ IFTRUE (DATA (M_COMPLETE)),
  1568. PADDR (complete),
  1569. SCR_JUMP ^ IFTRUE (DATA (M_DISCONNECT)),
  1570. PADDR (disconnect),
  1571. SCR_JUMP ^ IFTRUE (DATA (M_SAVE_DP)),
  1572. PADDR (save_dp),
  1573. SCR_JUMP ^ IFTRUE (DATA (M_RESTORE_DP)),
  1574. PADDR (restore_dp),
  1575. SCR_JUMP ^ IFTRUE (DATA (M_EXTENDED)),
  1576. PADDRH (msg_extended),
  1577. SCR_JUMP ^ IFTRUE (DATA (M_NOOP)),
  1578. PADDR (clrack),
  1579. SCR_JUMP ^ IFTRUE (DATA (M_REJECT)),
  1580. PADDRH (msg_reject),
  1581. SCR_JUMP ^ IFTRUE (DATA (M_IGN_RESIDUE)),
  1582. PADDRH (msg_ign_residue),
  1583. /*
  1584. ** Rest of the messages left as
  1585. ** an exercise ...
  1586. **
  1587. ** Unimplemented messages:
  1588. ** fall through to MSG_BAD.
  1589. */
  1590. }/*-------------------------< MSG_BAD >------------------*/,{
  1591. /*
  1592. ** unimplemented message - reject it.
  1593. */
  1594. SCR_INT,
  1595. SIR_REJECT_SENT,
  1596. SCR_LOAD_REG (scratcha, M_REJECT),
  1597. 0,
  1598. }/*-------------------------< SETMSG >----------------------*/,{
  1599. SCR_COPY (1),
  1600. RADDR (scratcha),
  1601. NADDR (msgout),
  1602. SCR_SET (SCR_ATN),
  1603. 0,
  1604. SCR_JUMP,
  1605. PADDR (clrack),
  1606. }/*-------------------------< CLEANUP >-------------------*/,{
  1607. /*
  1608. **      dsa:    Pointer to ccb
  1609. **       or xxxxxxFF (no ccb)
  1610. **
  1611. **      HS_REG:   Host-Status (<>0!)
  1612. */
  1613. SCR_FROM_REG (dsa),
  1614. 0,
  1615. SCR_JUMP ^ IFTRUE (DATA (0xff)),
  1616. PADDR (start),
  1617. /*
  1618. **      dsa is valid.
  1619. ** complete the cleanup.
  1620. */
  1621. SCR_JUMP,
  1622. PADDR (cleanup_ok),
  1623. }/*-------------------------< COMPLETE >-----------------*/,{
  1624. /*
  1625. ** Complete message.
  1626. **
  1627. ** Copy TEMP register to LASTP in header.
  1628. */
  1629. SCR_COPY (4),
  1630. RADDR (temp),
  1631. NADDR (header.lastp),
  1632. /*
  1633. ** When we terminate the cycle by clearing ACK,
  1634. ** the target may disconnect immediately.
  1635. **
  1636. ** We don't want to be told of an
  1637. ** "unexpected disconnect",
  1638. ** so we disable this feature.
  1639. */
  1640. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  1641. 0,
  1642. /*
  1643. ** Terminate cycle ...
  1644. */
  1645. SCR_CLR (SCR_ACK|SCR_ATN),
  1646. 0,
  1647. /*
  1648. ** ... and wait for the disconnect.
  1649. */
  1650. SCR_WAIT_DISC,
  1651. 0,
  1652. }/*-------------------------< CLEANUP_OK >----------------*/,{
  1653. /*
  1654. ** Save host status to header.
  1655. */
  1656. SCR_COPY (4),
  1657. RADDR (scr0),
  1658. NADDR (header.status),
  1659. /*
  1660. ** and copy back the header to the ccb.
  1661. */
  1662. SCR_COPY_F (4),
  1663. RADDR (dsa),
  1664. PADDR (cleanup0),
  1665. SCR_COPY (sizeof (struct head)),
  1666. NADDR (header),
  1667. }/*-------------------------< CLEANUP0 >--------------------*/,{
  1668. 0,
  1669. }/*-------------------------< SIGNAL >----------------------*/,{
  1670. /*
  1671. ** if job not completed ...
  1672. */
  1673. SCR_FROM_REG (HS_REG),
  1674. 0,
  1675. /*
  1676. ** ... start the next command.
  1677. */
  1678. SCR_JUMP ^ IFTRUE (MASK (0, (HS_DONEMASK|HS_SKIPMASK))),
  1679. PADDR(start),
  1680. /*
  1681. ** If command resulted in not GOOD status,
  1682. ** call the C code if needed.
  1683. */
  1684. SCR_FROM_REG (SS_REG),
  1685. 0,
  1686. SCR_CALL ^ IFFALSE (DATA (S_GOOD)),
  1687. PADDRH (bad_status),
  1688. #ifndef SCSI_NCR_CCB_DONE_SUPPORT
  1689. /*
  1690. ** ... signal completion to the host
  1691. */
  1692. SCR_INT_FLY,
  1693. 0,
  1694. /*
  1695. ** Auf zu neuen Schandtaten!
  1696. */
  1697. SCR_JUMP,
  1698. PADDR(start),
  1699. #else /* defined SCSI_NCR_CCB_DONE_SUPPORT */
  1700. /*
  1701. ** ... signal completion to the host
  1702. */
  1703. SCR_JUMP,
  1704. }/*------------------------< DONE_POS >---------------------*/,{
  1705. PADDRH (done_queue),
  1706. }/*------------------------< DONE_PLUG >--------------------*/,{
  1707. SCR_INT,
  1708. SIR_DONE_OVERFLOW,
  1709. }/*------------------------< DONE_END >---------------------*/,{
  1710. SCR_INT_FLY,
  1711. 0,
  1712. SCR_COPY (4),
  1713. RADDR (temp),
  1714. PADDR (done_pos),
  1715. SCR_JUMP,
  1716. PADDR (start),
  1717. #endif /* SCSI_NCR_CCB_DONE_SUPPORT */
  1718. }/*-------------------------< SAVE_DP >------------------*/,{
  1719. /*
  1720. ** SAVE_DP message:
  1721. ** Copy TEMP register to SAVEP in header.
  1722. */
  1723. SCR_COPY (4),
  1724. RADDR (temp),
  1725. NADDR (header.savep),
  1726. SCR_CLR (SCR_ACK),
  1727. 0,
  1728. SCR_JUMP,
  1729. PADDR (dispatch),
  1730. }/*-------------------------< RESTORE_DP >---------------*/,{
  1731. /*
  1732. ** RESTORE_DP message:
  1733. ** Copy SAVEP in header to TEMP register.
  1734. */
  1735. SCR_COPY (4),
  1736. NADDR (header.savep),
  1737. RADDR (temp),
  1738. SCR_JUMP,
  1739. PADDR (clrack),
  1740. }/*-------------------------< DISCONNECT >---------------*/,{
  1741. /*
  1742. ** DISCONNECTing  ...
  1743. **
  1744. ** disable the "unexpected disconnect" feature,
  1745. ** and remove the ACK signal.
  1746. */
  1747. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  1748. 0,
  1749. SCR_CLR (SCR_ACK|SCR_ATN),
  1750. 0,
  1751. /*
  1752. ** Wait for the disconnect.
  1753. */
  1754. SCR_WAIT_DISC,
  1755. 0,
  1756. /*
  1757. ** Status is: DISCONNECTED.
  1758. */
  1759. SCR_LOAD_REG (HS_REG, HS_DISCONNECT),
  1760. 0,
  1761. /*
  1762. ** If QUIRK_AUTOSAVE is set,
  1763. ** do an "save pointer" operation.
  1764. */
  1765. SCR_FROM_REG (QU_REG),
  1766. 0,
  1767. SCR_JUMP ^ IFFALSE (MASK (QUIRK_AUTOSAVE, QUIRK_AUTOSAVE)),
  1768. PADDR (cleanup_ok),
  1769. /*
  1770. ** like SAVE_DP message:
  1771. ** Copy TEMP register to SAVEP in header.
  1772. */
  1773. SCR_COPY (4),
  1774. RADDR (temp),
  1775. NADDR (header.savep),
  1776. SCR_JUMP,
  1777. PADDR (cleanup_ok),
  1778. }/*-------------------------< MSG_OUT >-------------------*/,{
  1779. /*
  1780. ** The target requests a message.
  1781. */
  1782. SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
  1783. NADDR (msgout),
  1784. SCR_COPY (1),
  1785. NADDR (msgout),
  1786. NADDR (lastmsg),
  1787. /*
  1788. ** If it was no ABORT message ...
  1789. */
  1790. SCR_JUMP ^ IFTRUE (DATA (M_ABORT)),
  1791. PADDRH (msg_out_abort),
  1792. /*
  1793. ** ... wait for the next phase
  1794. ** if it's a message out, send it again, ...
  1795. */
  1796. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
  1797. PADDR (msg_out),
  1798. }/*-------------------------< MSG_OUT_DONE >--------------*/,{
  1799. /*
  1800. ** ... else clear the message ...
  1801. */
  1802. SCR_LOAD_REG (scratcha, M_NOOP),
  1803. 0,
  1804. SCR_COPY (4),
  1805. RADDR (scratcha),
  1806. NADDR (msgout),
  1807. /*
  1808. ** ... and process the next phase
  1809. */
  1810. SCR_JUMP,
  1811. PADDR (dispatch),
  1812. }/*-------------------------< IDLE >------------------------*/,{
  1813. /*
  1814. ** Nothing to do?
  1815. ** Wait for reselect.
  1816. ** This NOP will be patched with LED OFF
  1817. ** SCR_REG_REG (gpreg, SCR_OR, 0x01)
  1818. */
  1819. SCR_NO_OP,
  1820. 0,
  1821. }/*-------------------------< RESELECT >--------------------*/,{
  1822. /*
  1823. ** make the DSA invalid.
  1824. */
  1825. SCR_LOAD_REG (dsa, 0xff),
  1826. 0,
  1827. SCR_CLR (SCR_TRG),
  1828. 0,
  1829. SCR_LOAD_REG (HS_REG, HS_IN_RESELECT),
  1830. 0,
  1831. /*
  1832. ** Sleep waiting for a reselection.
  1833. ** If SIGP is set, special treatment.
  1834. **
  1835. ** Zu allem bereit ..
  1836. */
  1837. SCR_WAIT_RESEL,
  1838. PADDR(start),
  1839. }/*-------------------------< RESELECTED >------------------*/,{
  1840. /*
  1841. ** This NOP will be patched with LED ON
  1842. ** SCR_REG_REG (gpreg, SCR_AND, 0xfe)
  1843. */
  1844. SCR_NO_OP,
  1845. 0,
  1846. /*
  1847. ** ... zu nichts zu gebrauchen ?
  1848. **
  1849. **      load the target id into the SFBR
  1850. ** and jump to the control block.
  1851. **
  1852. ** Look at the declarations of
  1853. ** - struct ncb
  1854. ** - struct tcb
  1855. ** - struct lcb
  1856. ** - struct ccb
  1857. ** to understand what's going on.
  1858. */
  1859. SCR_REG_SFBR (ssid, SCR_AND, 0x8F),
  1860. 0,
  1861. SCR_TO_REG (sdid),
  1862. 0,
  1863. SCR_JUMP,
  1864. NADDR (jump_tcb),
  1865. }/*-------------------------< RESEL_DSA >-------------------*/,{
  1866. /*
  1867. ** Ack the IDENTIFY or TAG previously received.
  1868. */
  1869. SCR_CLR (SCR_ACK),
  1870. 0,
  1871. /*
  1872. **      The ncr doesn't have an indirect load
  1873. ** or store command. So we have to
  1874. ** copy part of the control block to a
  1875. ** fixed place, where we can access it.
  1876. **
  1877. ** We patch the address part of a
  1878. ** COPY command with the DSA-register.
  1879. */
  1880. SCR_COPY_F (4),
  1881. RADDR (dsa),
  1882. PADDR (loadpos1),
  1883. /*
  1884. ** then we do the actual copy.
  1885. */
  1886. SCR_COPY (sizeof (struct head)),
  1887. /*
  1888. ** continued after the next label ...
  1889. */
  1890. }/*-------------------------< LOADPOS1 >-------------------*/,{
  1891. 0,
  1892. NADDR (header),
  1893. /*
  1894. ** The DSA contains the data structure address.
  1895. */
  1896. SCR_JUMP,
  1897. PADDR (prepare),
  1898. }/*-------------------------< RESEL_LUN >-------------------*/,{
  1899. /*
  1900. ** come back to this point
  1901. ** to get an IDENTIFY message
  1902. ** Wait for a msg_in phase.
  1903. */
  1904. SCR_INT ^ IFFALSE (WHEN (SCR_MSG_IN)),
  1905. SIR_RESEL_NO_MSG_IN,
  1906. /*
  1907. ** message phase.
  1908. ** Read the data directly from the BUS DATA lines.
  1909. ** This helps to support very old SCSI devices that 
  1910. ** may reselect without sending an IDENTIFY.
  1911. */
  1912. SCR_FROM_REG (sbdl),
  1913. 0,
  1914. /*
  1915. ** It should be an Identify message.
  1916. */
  1917. SCR_RETURN,
  1918. 0,
  1919. }/*-------------------------< RESEL_TAG >-------------------*/,{
  1920. /*
  1921. ** Read IDENTIFY + SIMPLE + TAG using a single MOVE.
  1922. ** Agressive optimization, is'nt it?
  1923. ** No need to test the SIMPLE TAG message, since the 
  1924. ** driver only supports conformant devices for tags. ;-)
  1925. */
  1926. SCR_MOVE_ABS (3) ^ SCR_MSG_IN,
  1927. NADDR (msgin),
  1928. /*
  1929. ** Read the TAG from the SIDL.
  1930. ** Still an aggressive optimization. ;-)
  1931. ** Compute the CCB indirect jump address which 
  1932. ** is (#TAG*2 & 0xfc) due to tag numbering using 
  1933. ** 1,3,5..MAXTAGS*2+1 actual values.
  1934. */
  1935. SCR_REG_SFBR (sidl, SCR_SHL, 0),
  1936. 0,
  1937. SCR_SFBR_REG (temp, SCR_AND, 0xfc),
  1938. 0,
  1939. }/*-------------------------< JUMP_TO_NEXUS >-------------------*/,{
  1940. SCR_COPY_F (4),
  1941. RADDR (temp),
  1942. PADDR (nexus_indirect),
  1943. SCR_COPY (4),
  1944. }/*-------------------------< NEXUS_INDIRECT >-------------------*/,{
  1945. 0,
  1946. RADDR (temp),
  1947. SCR_RETURN,
  1948. 0,
  1949. }/*-------------------------< RESEL_NOTAG >-------------------*/,{
  1950. /*
  1951. ** No tag expected.
  1952. ** Read an throw away the IDENTIFY.
  1953. */
  1954. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  1955. NADDR (msgin),
  1956. SCR_JUMP,
  1957. PADDR (jump_to_nexus),
  1958. }/*-------------------------< DATA_IN >--------------------*/,{
  1959. /*
  1960. ** Because the size depends on the
  1961. ** #define MAX_SCATTERL parameter,
  1962. ** it is filled in at runtime.
  1963. **
  1964. **  ##===========< i=0; i<MAX_SCATTERL >=========
  1965. **  || SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN)),
  1966. **  || PADDR (dispatch),
  1967. **  || SCR_MOVE_TBL ^ SCR_DATA_IN,
  1968. **  || offsetof (struct dsb, data[ i]),
  1969. **  ##==========================================
  1970. **
  1971. **---------------------------------------------------------
  1972. */
  1973. 0
  1974. }/*-------------------------< DATA_IN2 >-------------------*/,{
  1975. SCR_CALL,
  1976. PADDR (dispatch),
  1977. SCR_JUMP,
  1978. PADDR (no_data),
  1979. }/*-------------------------< DATA_OUT >--------------------*/,{
  1980. /*
  1981. ** Because the size depends on the
  1982. ** #define MAX_SCATTERL parameter,
  1983. ** it is filled in at runtime.
  1984. **
  1985. **  ##===========< i=0; i<MAX_SCATTERL >=========
  1986. **  || SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT)),
  1987. **  || PADDR (dispatch),
  1988. **  || SCR_MOVE_TBL ^ SCR_DATA_OUT,
  1989. **  || offsetof (struct dsb, data[ i]),
  1990. **  ##==========================================
  1991. **
  1992. **---------------------------------------------------------
  1993. */
  1994. 0
  1995. }/*-------------------------< DATA_OUT2 >-------------------*/,{
  1996. SCR_CALL,
  1997. PADDR (dispatch),
  1998. SCR_JUMP,
  1999. PADDR (no_data),
  2000. }/*--------------------------------------------------------*/
  2001. };
  2002. static struct scripth scripth0 __initdata = {
  2003. /*-------------------------< TRYLOOP >---------------------*/{
  2004. /*
  2005. ** Start the next entry.
  2006. ** Called addresses point to the launch script in the CCB.
  2007. ** They are patched by the main processor.
  2008. **
  2009. ** Because the size depends on the
  2010. ** #define MAX_START parameter, it is filled
  2011. ** in at runtime.
  2012. **
  2013. **-----------------------------------------------------------
  2014. **
  2015. **  ##===========< I=0; i<MAX_START >===========
  2016. **  || SCR_CALL,
  2017. **  || PADDR (idle),
  2018. **  ##==========================================
  2019. **
  2020. **-----------------------------------------------------------
  2021. */
  2022. 0
  2023. }/*------------------------< TRYLOOP2 >---------------------*/,{
  2024. SCR_JUMP,
  2025. PADDRH(tryloop),
  2026. #ifdef SCSI_NCR_CCB_DONE_SUPPORT
  2027. }/*------------------------< DONE_QUEUE >-------------------*/,{
  2028. /*
  2029. ** Copy the CCB address to the next done entry.
  2030. ** Because the size depends on the
  2031. ** #define MAX_DONE parameter, it is filled
  2032. ** in at runtime.
  2033. **
  2034. **-----------------------------------------------------------
  2035. **
  2036. **  ##===========< I=0; i<MAX_DONE >===========
  2037. **  || SCR_COPY (sizeof(ccb_p)),
  2038. **  || NADDR (header.cp),
  2039. **  || NADDR (ccb_done[i]),
  2040. **  || SCR_CALL,
  2041. **  || PADDR (done_end),
  2042. **  ##==========================================
  2043. **
  2044. **-----------------------------------------------------------
  2045. */
  2046. 0
  2047. }/*------------------------< DONE_QUEUE2 >------------------*/,{
  2048. SCR_JUMP,
  2049. PADDRH (done_queue),
  2050. #endif /* SCSI_NCR_CCB_DONE_SUPPORT */
  2051. }/*------------------------< SELECT_NO_ATN >-----------------*/,{
  2052. /*
  2053. ** Set Initiator mode.
  2054. **      And try to select this target without ATN.
  2055. */
  2056. SCR_CLR (SCR_TRG),
  2057. 0,
  2058. SCR_LOAD_REG (HS_REG, HS_SELECTING),
  2059. 0,
  2060. SCR_SEL_TBL ^ offsetof (struct dsb, select),
  2061. PADDR (reselect),
  2062. SCR_JUMP,
  2063. PADDR (select2),
  2064. }/*-------------------------< CANCEL >------------------------*/,{
  2065. SCR_LOAD_REG (scratcha, HS_ABORTED),
  2066. 0,
  2067. SCR_JUMPR,
  2068. 8,
  2069. }/*-------------------------< SKIP >------------------------*/,{
  2070. SCR_LOAD_REG (scratcha, 0),
  2071. 0,
  2072. /*
  2073. ** This entry has been canceled.
  2074. ** Next time use the next slot.
  2075. */
  2076. SCR_COPY (4),
  2077. RADDR (temp),
  2078. PADDR (startpos),
  2079. /*
  2080. **      The ncr doesn't have an indirect load
  2081. ** or store command. So we have to
  2082. ** copy part of the control block to a
  2083. ** fixed place, where we can access it.
  2084. **
  2085. ** We patch the address part of a
  2086. ** COPY command with the DSA-register.
  2087. */
  2088. SCR_COPY_F (4),
  2089. RADDR (dsa),
  2090. PADDRH (skip2),
  2091. /*
  2092. ** then we do the actual copy.
  2093. */
  2094. SCR_COPY (sizeof (struct head)),
  2095. /*
  2096. ** continued after the next label ...
  2097. */
  2098. }/*-------------------------< SKIP2 >---------------------*/,{
  2099. 0,
  2100. NADDR (header),
  2101. /*
  2102. **      Initialize the status registers
  2103. */
  2104. SCR_COPY (4),
  2105. NADDR (header.status),
  2106. RADDR (scr0),
  2107. /*
  2108. ** Force host status.
  2109. */
  2110. SCR_FROM_REG (scratcha),
  2111. 0,
  2112. SCR_JUMPR ^ IFFALSE (MASK (0, HS_DONEMASK)),
  2113. 16,
  2114. SCR_REG_REG (HS_REG, SCR_OR, HS_SKIPMASK),
  2115. 0,
  2116. SCR_JUMPR,
  2117. 8,
  2118. SCR_TO_REG (HS_REG),
  2119. 0,
  2120. SCR_LOAD_REG (SS_REG, S_GOOD),
  2121. 0,
  2122. SCR_JUMP,
  2123. PADDR (cleanup_ok),
  2124. },/*-------------------------< PAR_ERR_DATA_IN >---------------*/{
  2125. /*
  2126. ** Ignore all data in byte, until next phase
  2127. */
  2128. SCR_JUMP ^ IFFALSE (WHEN (SCR_DATA_IN)),
  2129. PADDRH (par_err_other),
  2130. SCR_MOVE_ABS (1) ^ SCR_DATA_IN,
  2131. NADDR (scratch),
  2132. SCR_JUMPR,
  2133. -24,
  2134. },/*-------------------------< PAR_ERR_OTHER >------------------*/{
  2135. /*
  2136. ** count it.
  2137. */
  2138. SCR_REG_REG (PS_REG, SCR_ADD, 0x01),
  2139. 0,
  2140. /*
  2141. ** jump to dispatcher.
  2142. */
  2143. SCR_JUMP,
  2144. PADDR (dispatch),
  2145. }/*-------------------------< MSG_REJECT >---------------*/,{
  2146. /*
  2147. ** If a negotiation was in progress,
  2148. ** negotiation failed.
  2149. ** Otherwise, let the C code print 
  2150. ** some message.
  2151. */
  2152. SCR_FROM_REG (HS_REG),
  2153. 0,
  2154. SCR_INT ^ IFFALSE (DATA (HS_NEGOTIATE)),
  2155. SIR_REJECT_RECEIVED,
  2156. SCR_INT ^ IFTRUE (DATA (HS_NEGOTIATE)),
  2157. SIR_NEGO_FAILED,
  2158. SCR_JUMP,
  2159. PADDR (clrack),
  2160. }/*-------------------------< MSG_IGN_RESIDUE >----------*/,{
  2161. /*
  2162. ** Terminate cycle
  2163. */
  2164. SCR_CLR (SCR_ACK),
  2165. 0,
  2166. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2167. PADDR (dispatch),
  2168. /*
  2169. ** get residue size.
  2170. */
  2171. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2172. NADDR (msgin[1]),
  2173. /*
  2174. ** Size is 0 .. ignore message.
  2175. */
  2176. SCR_JUMP ^ IFTRUE (DATA (0)),
  2177. PADDR (clrack),
  2178. /*
  2179. ** Size is not 1 .. have to interrupt.
  2180. */
  2181. SCR_JUMPR ^ IFFALSE (DATA (1)),
  2182. 40,
  2183. /*
  2184. ** Check for residue byte in swide register
  2185. */
  2186. SCR_FROM_REG (scntl2),
  2187. 0,
  2188. SCR_JUMPR ^ IFFALSE (MASK (WSR, WSR)),
  2189. 16,
  2190. /*
  2191. ** There IS data in the swide register.
  2192. ** Discard it.
  2193. */
  2194. SCR_REG_REG (scntl2, SCR_OR, WSR),
  2195. 0,
  2196. SCR_JUMP,
  2197. PADDR (clrack),
  2198. /*
  2199. ** Load again the size to the sfbr register.
  2200. */
  2201. SCR_FROM_REG (scratcha),
  2202. 0,
  2203. SCR_INT,
  2204. SIR_IGN_RESIDUE,
  2205. SCR_JUMP,
  2206. PADDR (clrack),
  2207. }/*-------------------------< MSG_EXTENDED >-------------*/,{
  2208. /*
  2209. ** Terminate cycle
  2210. */
  2211. SCR_CLR (SCR_ACK),
  2212. 0,
  2213. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2214. PADDR (dispatch),
  2215. /*
  2216. ** get length.
  2217. */
  2218. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2219. NADDR (msgin[1]),
  2220. /*
  2221. */
  2222. SCR_JUMP ^ IFTRUE (DATA (3)),
  2223. PADDRH (msg_ext_3),
  2224. SCR_JUMP ^ IFFALSE (DATA (2)),
  2225. PADDR (msg_bad),
  2226. }/*-------------------------< MSG_EXT_2 >----------------*/,{
  2227. SCR_CLR (SCR_ACK),
  2228. 0,
  2229. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2230. PADDR (dispatch),
  2231. /*
  2232. ** get extended message code.
  2233. */
  2234. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2235. NADDR (msgin[2]),
  2236. SCR_JUMP ^ IFTRUE (DATA (M_X_WIDE_REQ)),
  2237. PADDRH (msg_wdtr),
  2238. /*
  2239. ** unknown extended message
  2240. */
  2241. SCR_JUMP,
  2242. PADDR (msg_bad)
  2243. }/*-------------------------< MSG_WDTR >-----------------*/,{
  2244. SCR_CLR (SCR_ACK),
  2245. 0,
  2246. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2247. PADDR (dispatch),
  2248. /*
  2249. ** get data bus width
  2250. */
  2251. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2252. NADDR (msgin[3]),
  2253. /*
  2254. ** let the host do the real work.
  2255. */
  2256. SCR_INT,
  2257. SIR_NEGO_WIDE,
  2258. /*
  2259. ** let the target fetch our answer.
  2260. */
  2261. SCR_SET (SCR_ATN),
  2262. 0,
  2263. SCR_CLR (SCR_ACK),
  2264. 0,
  2265. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  2266. PADDRH (nego_bad_phase),
  2267. }/*-------------------------< SEND_WDTR >----------------*/,{
  2268. /*
  2269. ** Send the M_X_WIDE_REQ
  2270. */
  2271. SCR_MOVE_ABS (4) ^ SCR_MSG_OUT,
  2272. NADDR (msgout),
  2273. SCR_COPY (1),
  2274. NADDR (msgout),
  2275. NADDR (lastmsg),
  2276. SCR_JUMP,
  2277. PADDR (msg_out_done),
  2278. }/*-------------------------< MSG_EXT_3 >----------------*/,{
  2279. SCR_CLR (SCR_ACK),
  2280. 0,
  2281. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2282. PADDR (dispatch),
  2283. /*
  2284. ** get extended message code.
  2285. */
  2286. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2287. NADDR (msgin[2]),
  2288. SCR_JUMP ^ IFTRUE (DATA (M_X_SYNC_REQ)),
  2289. PADDRH (msg_sdtr),
  2290. /*
  2291. ** unknown extended message
  2292. */
  2293. SCR_JUMP,
  2294. PADDR (msg_bad)
  2295. }/*-------------------------< MSG_SDTR >-----------------*/,{
  2296. SCR_CLR (SCR_ACK),
  2297. 0,
  2298. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2299. PADDR (dispatch),
  2300. /*
  2301. ** get period and offset
  2302. */
  2303. SCR_MOVE_ABS (2) ^ SCR_MSG_IN,
  2304. NADDR (msgin[3]),
  2305. /*
  2306. ** let the host do the real work.
  2307. */
  2308. SCR_INT,
  2309. SIR_NEGO_SYNC,
  2310. /*
  2311. ** let the target fetch our answer.
  2312. */
  2313. SCR_SET (SCR_ATN),
  2314. 0,
  2315. SCR_CLR (SCR_ACK),
  2316. 0,
  2317. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  2318. PADDRH (nego_bad_phase),
  2319. }/*-------------------------< SEND_SDTR >-------------*/,{
  2320. /*
  2321. ** Send the M_X_SYNC_REQ
  2322. */
  2323. SCR_MOVE_ABS (5) ^ SCR_MSG_OUT,
  2324. NADDR (msgout),
  2325. SCR_COPY (1),
  2326. NADDR (msgout),
  2327. NADDR (lastmsg),
  2328. SCR_JUMP,
  2329. PADDR (msg_out_done),
  2330. }/*-------------------------< NEGO_BAD_PHASE >------------*/,{
  2331. SCR_INT,
  2332. SIR_NEGO_PROTO,
  2333. SCR_JUMP,
  2334. PADDR (dispatch),
  2335. }/*-------------------------< MSG_OUT_ABORT >-------------*/,{
  2336. /*
  2337. ** After ABORT message,
  2338. **
  2339. ** expect an immediate disconnect, ...
  2340. */
  2341. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  2342. 0,
  2343. SCR_CLR (SCR_ACK|SCR_ATN),
  2344. 0,
  2345. SCR_WAIT_DISC,
  2346. 0,
  2347. /*
  2348. ** ... and set the status to "ABORTED"
  2349. */
  2350. SCR_LOAD_REG (HS_REG, HS_ABORTED),
  2351. 0,
  2352. SCR_JUMP,
  2353. PADDR (cleanup),
  2354. }/*-------------------------< HDATA_IN >-------------------*/,{
  2355. /*
  2356. ** Because the size depends on the
  2357. ** #define MAX_SCATTERH parameter,
  2358. ** it is filled in at runtime.
  2359. **
  2360. **  ##==< i=MAX_SCATTERL; i<MAX_SCATTERL+MAX_SCATTERH >==
  2361. **  || SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN)),
  2362. **  || PADDR (dispatch),
  2363. **  || SCR_MOVE_TBL ^ SCR_DATA_IN,
  2364. **  || offsetof (struct dsb, data[ i]),
  2365. **  ##===================================================
  2366. **
  2367. **---------------------------------------------------------
  2368. */
  2369. 0
  2370. }/*-------------------------< HDATA_IN2 >------------------*/,{
  2371. SCR_JUMP,
  2372. PADDR (data_in),
  2373. }/*-------------------------< HDATA_OUT >-------------------*/,{
  2374. /*
  2375. ** Because the size depends on the
  2376. ** #define MAX_SCATTERH parameter,
  2377. ** it is filled in at runtime.
  2378. **
  2379. **  ##==< i=MAX_SCATTERL; i<MAX_SCATTERL+MAX_SCATTERH >==
  2380. **  || SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT)),
  2381. **  || PADDR (dispatch),
  2382. **  || SCR_MOVE_TBL ^ SCR_DATA_OUT,
  2383. **  || offsetof (struct dsb, data[ i]),
  2384. **  ##===================================================
  2385. **
  2386. **---------------------------------------------------------
  2387. */
  2388. 0
  2389. }/*-------------------------< HDATA_OUT2 >------------------*/,{
  2390. SCR_JUMP,
  2391. PADDR (data_out),
  2392. }/*-------------------------< RESET >----------------------*/,{
  2393. /*
  2394. **      Send a M_RESET message if bad IDENTIFY 
  2395. ** received on reselection.
  2396. */
  2397. SCR_LOAD_REG (scratcha, M_ABORT_TAG),
  2398. 0,
  2399. SCR_JUMP,
  2400. PADDRH (abort_resel),
  2401. }/*-------------------------< ABORTTAG >-------------------*/,{
  2402. /*
  2403. **      Abort a wrong tag received on reselection.
  2404. */
  2405. SCR_LOAD_REG (scratcha, M_ABORT_TAG),
  2406. 0,
  2407. SCR_JUMP,
  2408. PADDRH (abort_resel),
  2409. }/*-------------------------< ABORT >----------------------*/,{
  2410. /*
  2411. **      Abort a reselection when no active CCB.
  2412. */
  2413. SCR_LOAD_REG (scratcha, M_ABORT),
  2414. 0,
  2415. }/*-------------------------< ABORT_RESEL >----------------*/,{
  2416. SCR_COPY (1),
  2417. RADDR (scratcha),
  2418. NADDR (msgout),
  2419. SCR_SET (SCR_ATN),
  2420. 0,
  2421. SCR_CLR (SCR_ACK),
  2422. 0,
  2423. /*
  2424. ** and send it.
  2425. ** we expect an immediate disconnect
  2426. */
  2427. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  2428. 0,
  2429. SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
  2430. NADDR (msgout),
  2431. SCR_COPY (1),
  2432. NADDR (msgout),
  2433. NADDR (lastmsg),
  2434. SCR_CLR (SCR_ACK|SCR_ATN),
  2435. 0,
  2436. SCR_WAIT_DISC,
  2437. 0,
  2438. SCR_JUMP,
  2439. PADDR (start),
  2440. }/*-------------------------< RESEND_IDENT >-------------------*/,{
  2441. /*
  2442. ** The target stays in MSG OUT phase after having acked 
  2443. ** Identify [+ Tag [+ Extended message ]]. Targets shall
  2444. ** behave this way on parity error.
  2445. ** We must send it again all the messages.
  2446. */
  2447. SCR_SET (SCR_ATN), /* Shall be asserted 2 deskew delays before the  */
  2448. 0,         /* 1rst ACK = 90 ns. Hope the NCR is'nt too fast */
  2449. SCR_JUMP,
  2450. PADDR (send_ident),
  2451. }/*-------------------------< CLRATN_GO_ON >-------------------*/,{
  2452. SCR_CLR (SCR_ATN),
  2453. 0,
  2454. SCR_JUMP,
  2455. }/*-------------------------< NXTDSP_GO_ON >-------------------*/,{
  2456. 0,
  2457. }/*-------------------------< SDATA_IN >-------------------*/,{
  2458. SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN)),
  2459. PADDR (dispatch),
  2460. SCR_MOVE_TBL ^ SCR_DATA_IN,
  2461. offsetof (struct dsb, sense),
  2462. SCR_CALL,
  2463. PADDR (dispatch),
  2464. SCR_JUMP,
  2465. PADDR (no_data),
  2466. }/*-------------------------< DATA_IO >--------------------*/,{
  2467. /*
  2468. ** We jump here if the data direction was unknown at the 
  2469. ** time we had to queue the command to the scripts processor.
  2470. ** Pointers had been set as follow in this situation:
  2471. **   savep   -->   DATA_IO
  2472. **   lastp   -->   start pointer when DATA_IN
  2473. **   goalp   -->   goal  pointer when DATA_IN
  2474. **   wlastp  -->   start pointer when DATA_OUT
  2475. **   wgoalp  -->   goal  pointer when DATA_OUT
  2476. ** This script sets savep/lastp/goalp according to the 
  2477. ** direction chosen by the target.
  2478. */
  2479. SCR_JUMPR ^ IFTRUE (WHEN (SCR_DATA_OUT)),
  2480. 32,
  2481. /*
  2482. ** Direction is DATA IN.
  2483. ** Warning: we jump here, even when phase is DATA OUT.
  2484. */
  2485. SCR_COPY (4),
  2486. NADDR (header.lastp),
  2487. NADDR (header.savep),
  2488. /*
  2489. ** Jump to the SCRIPTS according to actual direction.
  2490. */
  2491. SCR_COPY (4),
  2492. NADDR (header.savep),
  2493. RADDR (temp),
  2494. SCR_RETURN,
  2495. 0,
  2496. /*
  2497. ** Direction is DATA OUT.
  2498. */
  2499. SCR_COPY (4),
  2500. NADDR (header.wlastp),
  2501. NADDR (header.lastp),
  2502. SCR_COPY (4),
  2503. NADDR (header.wgoalp),
  2504. NADDR (header.goalp),
  2505. SCR_JUMPR,
  2506. -64,
  2507. }/*-------------------------< BAD_IDENTIFY >---------------*/,{
  2508. /*
  2509. ** If message phase but not an IDENTIFY,
  2510. ** get some help from the C code.
  2511. ** Old SCSI device may behave so.
  2512. */
  2513. SCR_JUMPR ^ IFTRUE (MASK (0x80, 0x80)),
  2514. 16,
  2515. SCR_INT,
  2516. SIR_RESEL_NO_IDENTIFY,
  2517. SCR_JUMP,
  2518. PADDRH (reset),
  2519. /*
  2520. ** Message is an IDENTIFY, but lun is unknown.
  2521. ** Read the message, since we got it directly 
  2522. ** from the SCSI BUS data lines.
  2523. ** Signal problem to C code for logging the event.
  2524. ** Send a M_ABORT to clear all pending tasks.
  2525. */
  2526. SCR_INT,
  2527. SIR_RESEL_BAD_LUN,
  2528. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2529. NADDR (msgin),
  2530. SCR_JUMP,
  2531. PADDRH (abort),
  2532. }/*-------------------------< BAD_I_T_L >------------------*/,{
  2533. /*
  2534. ** We donnot have a task for that I_T_L.
  2535. ** Signal problem to C code for logging the event.
  2536. ** Send a M_ABORT message.
  2537. */
  2538. SCR_INT,
  2539. SIR_RESEL_BAD_I_T_L,
  2540. SCR_JUMP,
  2541. PADDRH (abort),
  2542. }/*-------------------------< BAD_I_T_L_Q >----------------*/,{
  2543. /*
  2544. ** We donnot have a task that matches the tag.
  2545. ** Signal problem to C code for logging the event.
  2546. ** Send a M_ABORTTAG message.
  2547. */
  2548. SCR_INT,
  2549. SIR_RESEL_BAD_I_T_L_Q,
  2550. SCR_JUMP,
  2551. PADDRH (aborttag),
  2552. }/*-------------------------< BAD_TARGET >-----------------*/,{
  2553. /*
  2554. ** We donnot know the target that reselected us.
  2555. ** Grab the first message if any (IDENTIFY).
  2556. ** Signal problem to C code for logging the event.
  2557. ** M_RESET message.
  2558. */
  2559. SCR_INT,
  2560. SIR_RESEL_BAD_TARGET,
  2561. SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2562. 8,
  2563. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2564. NADDR (msgin),
  2565. SCR_JUMP,
  2566. PADDRH (reset),
  2567. }/*-------------------------< BAD_STATUS >-----------------*/,{
  2568. /*
  2569. ** If command resulted in either QUEUE FULL,
  2570. ** CHECK CONDITION or COMMAND TERMINATED,
  2571. ** call the C code.
  2572. */
  2573. SCR_INT ^ IFTRUE (DATA (S_QUEUE_FULL)),
  2574. SIR_BAD_STATUS,
  2575. SCR_INT ^ IFTRUE (DATA (S_CHECK_COND)),
  2576. SIR_BAD_STATUS,
  2577. SCR_INT ^ IFTRUE (DATA (S_TERMINATED)),
  2578. SIR_BAD_STATUS,
  2579. SCR_RETURN,
  2580. 0,
  2581. }/*-------------------------< START_RAM >-------------------*/,{
  2582. /*
  2583. ** Load the script into on-chip RAM, 
  2584. ** and jump to start point.
  2585. */
  2586. SCR_COPY_F (4),
  2587. RADDR (scratcha),
  2588. PADDRH (start_ram0),
  2589. SCR_COPY (sizeof (struct script)),
  2590. }/*-------------------------< START_RAM0 >--------------------*/,{
  2591. 0,
  2592. PADDR (start),
  2593. SCR_JUMP,
  2594. PADDR (start),
  2595. }/*-------------------------< STO_RESTART >-------------------*/,{
  2596. /*
  2597. **
  2598. ** Repair start queue (e.g. next time use the next slot) 
  2599. ** and jump to start point.
  2600. */
  2601. SCR_COPY (4),
  2602. RADDR (temp),
  2603. PADDR (startpos),
  2604. SCR_JUMP,
  2605. PADDR (start),
  2606. }/*-------------------------< SNOOPTEST >-------------------*/,{
  2607. /*
  2608. ** Read the variable.
  2609. */
  2610. SCR_COPY (4),
  2611. NADDR(ncr_cache),
  2612. RADDR (scratcha),
  2613. /*
  2614. ** Write the variable.
  2615. */
  2616. SCR_COPY (4),
  2617. RADDR (temp),
  2618. NADDR(ncr_cache),
  2619. /*
  2620. ** Read back the variable.
  2621. */
  2622. SCR_COPY (4),
  2623. NADDR(ncr_cache),
  2624. RADDR (temp),
  2625. }/*-------------------------< SNOOPEND >-------------------*/,{
  2626. /*
  2627. ** And stop.
  2628. */
  2629. SCR_INT,
  2630. 99,
  2631. }/*--------------------------------------------------------*/
  2632. };
  2633. /*==========================================================
  2634. **
  2635. **
  2636. ** Fill in #define dependent parts of the script
  2637. **
  2638. **
  2639. **==========================================================
  2640. */
  2641. void __init ncr_script_fill (struct script * scr, struct scripth * scrh)
  2642. {
  2643. int i;
  2644. ncrcmd *p;
  2645. p = scrh->tryloop;
  2646. for (i=0; i<MAX_START; i++) {
  2647. *p++ =SCR_CALL;
  2648. *p++ =PADDR (idle);
  2649. };
  2650. assert ((u_long)p == (u_long)&scrh->tryloop + sizeof (scrh->tryloop));
  2651. #ifdef SCSI_NCR_CCB_DONE_SUPPORT
  2652. p = scrh->done_queue;
  2653. for (i = 0; i<MAX_DONE; i++) {
  2654. *p++ =SCR_COPY (sizeof(ccb_p));
  2655. *p++ =NADDR (header.cp);
  2656. *p++ =NADDR (ccb_done[i]);
  2657. *p++ =SCR_CALL;
  2658. *p++ =PADDR (done_end);
  2659. }
  2660. assert ((u_long)p ==(u_long)&scrh->done_queue+sizeof(scrh->done_queue));
  2661. #endif /* SCSI_NCR_CCB_DONE_SUPPORT */
  2662. p = scrh->hdata_in;
  2663. for (i=0; i<MAX_SCATTERH; i++) {
  2664. *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN));
  2665. *p++ =PADDR (dispatch);
  2666. *p++ =SCR_MOVE_TBL ^ SCR_DATA_IN;
  2667. *p++ =offsetof (struct dsb, data[i]);
  2668. };
  2669. assert ((u_long)p == (u_long)&scrh->hdata_in + sizeof (scrh->hdata_in));
  2670. p = scr->data_in;
  2671. for (i=MAX_SCATTERH; i<MAX_SCATTERH+MAX_SCATTERL; i++) {
  2672. *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN));
  2673. *p++ =PADDR (dispatch);
  2674. *p++ =SCR_MOVE_TBL ^ SCR_DATA_IN;
  2675. *p++ =offsetof (struct dsb, data[i]);
  2676. };
  2677. assert ((u_long)p == (u_long)&scr->data_in + sizeof (scr->data_in));
  2678. p = scrh->hdata_out;
  2679. for (i=0; i<MAX_SCATTERH; i++) {
  2680. *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT));
  2681. *p++ =PADDR (dispatch);
  2682. *p++ =SCR_MOVE_TBL ^ SCR_DATA_OUT;
  2683. *p++ =offsetof (struct dsb, data[i]);
  2684. };
  2685. assert ((u_long)p==(u_long)&scrh->hdata_out + sizeof (scrh->hdata_out));
  2686. p = scr->data_out;
  2687. for (i=MAX_SCATTERH; i<MAX_SCATTERH+MAX_SCATTERL; i++) {
  2688. *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT));
  2689. *p++ =PADDR (dispatch);
  2690. *p++ =SCR_MOVE_TBL ^ SCR_DATA_OUT;
  2691. *p++ =offsetof (struct dsb, data[i]);
  2692. };
  2693. assert ((u_long)p == (u_long)&scr->data_out + sizeof (scr->data_out));
  2694. }
  2695. /*==========================================================
  2696. **
  2697. **
  2698. ** Copy and rebind a script.
  2699. **
  2700. **
  2701. **==========================================================
  2702. */
  2703. static void __init 
  2704. ncr_script_copy_and_bind (ncb_p np, ncrcmd *src, ncrcmd *dst, int len)
  2705. {
  2706. ncrcmd  opcode, new, old, tmp1, tmp2;
  2707. ncrcmd *start, *end;
  2708. int relocs;
  2709. int opchanged = 0;
  2710. start = src;
  2711. end = src + len/4;
  2712. while (src < end) {
  2713. opcode = *src++;
  2714. *dst++ = cpu_to_scr(opcode);
  2715. /*
  2716. ** If we forget to change the length
  2717. ** in struct script, a field will be
  2718. ** padded with 0. This is an illegal
  2719. ** command.
  2720. */
  2721. if (opcode == 0) {
  2722. printk (KERN_ERR "%s: ERROR0 IN SCRIPT at %d.n",
  2723. ncr_name(np), (int) (src-start-1));
  2724. MDELAY (1000);
  2725. };
  2726. if (DEBUG_FLAGS & DEBUG_SCRIPT)
  2727. printk (KERN_DEBUG "%p:  <%x>n",
  2728. (src-1), (unsigned)opcode);
  2729. /*
  2730. ** We don't have to decode ALL commands
  2731. */
  2732. switch (opcode >> 28) {
  2733. case 0xc:
  2734. /*
  2735. ** COPY has TWO arguments.
  2736. */
  2737. relocs = 2;
  2738. tmp1 = src[0];
  2739. #ifdef RELOC_KVAR
  2740. if ((tmp1 & RELOC_MASK) == RELOC_KVAR)
  2741. tmp1 = 0;
  2742. #endif
  2743. tmp2 = src[1];
  2744. #ifdef RELOC_KVAR
  2745. if ((tmp2 & RELOC_MASK) == RELOC_KVAR)
  2746. tmp2 = 0;
  2747. #endif
  2748. if ((tmp1 ^ tmp2) & 3) {
  2749. printk (KERN_ERR"%s: ERROR1 IN SCRIPT at %d.n",
  2750. ncr_name(np), (int) (src-start-1));
  2751. MDELAY (1000);
  2752. }
  2753. /*
  2754. ** If PREFETCH feature not enabled, remove 
  2755. ** the NO FLUSH bit if present.
  2756. */
  2757. if ((opcode & SCR_NO_FLUSH) && !(np->features & FE_PFEN)) {
  2758. dst[-1] = cpu_to_scr(opcode & ~SCR_NO_FLUSH);
  2759. ++opchanged;
  2760. }
  2761. break;
  2762. case 0x0:
  2763. /*
  2764. ** MOVE (absolute address)
  2765. */
  2766. relocs = 1;
  2767. break;
  2768. case 0x8:
  2769. /*
  2770. ** JUMP / CALL
  2771. ** dont't relocate if relative :-)
  2772. */
  2773. if (opcode & 0x00800000)
  2774. relocs = 0;
  2775. else
  2776. relocs = 1;
  2777. break;
  2778. case 0x4:
  2779. case 0x5:
  2780. case 0x6:
  2781. case 0x7:
  2782. relocs = 1;
  2783. break;
  2784. default:
  2785. relocs = 0;
  2786. break;
  2787. };
  2788. if (relocs) {
  2789. while (relocs--) {
  2790. old = *src++;
  2791. switch (old & RELOC_MASK) {
  2792. case RELOC_REGISTER:
  2793. new = (old & ~RELOC_MASK) + np->paddr;
  2794. break;
  2795. case RELOC_LABEL:
  2796. new = (old & ~RELOC_MASK) + np->p_script;
  2797. break;
  2798. case RELOC_LABELH:
  2799. new = (old & ~RELOC_MASK) + np->p_scripth;
  2800. break;
  2801. case RELOC_SOFTC:
  2802. new = (old & ~RELOC_MASK) + np->p_ncb;
  2803. break;
  2804. #ifdef RELOC_KVAR
  2805. case RELOC_KVAR:
  2806. if (((old & ~RELOC_MASK) <
  2807.      SCRIPT_KVAR_FIRST) ||
  2808.     ((old & ~RELOC_MASK) >
  2809.      SCRIPT_KVAR_LAST))
  2810. panic("ncr KVAR out of range");
  2811. new = vtophys(script_kvars[old &
  2812.     ~RELOC_MASK]);
  2813. break;
  2814. #endif
  2815. case 0:
  2816. /* Don't relocate a 0 address. */
  2817. if (old == 0) {
  2818. new = old;
  2819. break;
  2820. }
  2821. /* fall through */
  2822. default:
  2823. panic("ncr_script_copy_and_bind: weird relocation %xn", old);
  2824. break;
  2825. }
  2826. *dst++ = cpu_to_scr(new);
  2827. }
  2828. } else
  2829. *dst++ = cpu_to_scr(*src++);
  2830. };
  2831. }
  2832. /*==========================================================
  2833. **
  2834. **
  2835. **      Auto configuration:  attach and init a host adapter.
  2836. **
  2837. **
  2838. **==========================================================
  2839. */
  2840. /*
  2841. ** Linux host data structure
  2842. **
  2843. ** The script area is allocated in the host data structure
  2844. ** because kmalloc() returns NULL during scsi initialisations
  2845. ** with Linux 1.2.X
  2846. */
  2847. struct host_data {
  2848.      struct ncb *ncb;
  2849. };
  2850. /*
  2851. ** Print something which allows to retrieve the controller type, unit,
  2852. ** target, lun concerned by a kernel message.
  2853. */
  2854. static void PRINT_TARGET(ncb_p np, int target)
  2855. {
  2856. printk(KERN_INFO "%s-<%d,*>: ", ncr_name(np), target);
  2857. }
  2858. static void PRINT_LUN(ncb_p np, int target, int lun)
  2859. {
  2860. printk(KERN_INFO "%s-<%d,%d>: ", ncr_name(np), target, lun);
  2861. }
  2862. static void PRINT_ADDR(Scsi_Cmnd *cmd)
  2863. {
  2864. struct host_data *host_data = (struct host_data *) cmd->host->hostdata;
  2865. PRINT_LUN(host_data->ncb, cmd->target, cmd->lun);
  2866. }
  2867. /*==========================================================
  2868. **
  2869. ** NCR chip clock divisor table.
  2870. ** Divisors are multiplied by 10,000,000 in order to make 
  2871. ** calculations more simple.
  2872. **
  2873. **==========================================================
  2874. */
  2875. #define _5M 5000000
  2876. static u_long div_10M[] =
  2877. {2*_5M, 3*_5M, 4*_5M, 6*_5M, 8*_5M, 12*_5M, 16*_5M};
  2878. /*===============================================================
  2879. **
  2880. ** Prepare io register values used by ncr_init() according 
  2881. ** to selected and supported features.
  2882. **
  2883. ** NCR chips allow burst lengths of 2, 4, 8, 16, 32, 64, 128 
  2884. ** transfers. 32,64,128 are only supported by 875 and 895 chips.
  2885. ** We use log base 2 (burst length) as internal code, with 
  2886. ** value 0 meaning "burst disabled".
  2887. **
  2888. **===============================================================
  2889. */
  2890. /*
  2891.  * Burst length from burst code.
  2892.  */
  2893. #define burst_length(bc) (!(bc))? 0 : 1 << (bc)
  2894. /*
  2895.  * Burst code from io register bits.
  2896.  */
  2897. #define burst_code(dmode, ctest4, ctest5) 
  2898. (ctest4) & 0x80? 0 : (((dmode) & 0xc0) >> 6) + ((ctest5) & 0x04) + 1
  2899. /*
  2900.  * Set initial io register bits from burst code.
  2901.  */
  2902. static inline void ncr_init_burst(ncb_p np, u_char bc)
  2903. {
  2904. np->rv_ctest4 &= ~0x80;
  2905. np->rv_dmode &= ~(0x3 << 6);
  2906. np->rv_ctest5 &= ~0x4;
  2907. if (!bc) {
  2908. np->rv_ctest4 |= 0x80;
  2909. }
  2910. else {
  2911. --bc;
  2912. np->rv_dmode |= ((bc & 0x3) << 6);
  2913. np->rv_ctest5 |= (bc & 0x4);
  2914. }
  2915. }
  2916. #ifdef SCSI_NCR_NVRAM_SUPPORT
  2917. /*
  2918. ** Get target set-up from Symbios format NVRAM.
  2919. */
  2920. static void __init 
  2921. ncr_Symbios_setup_target(ncb_p np, int target, Symbios_nvram *nvram)
  2922. {
  2923. tcb_p tp = &np->target[target];
  2924. Symbios_target *tn = &nvram->target[target];
  2925. tp->usrsync = tn->sync_period ? (tn->sync_period + 3) / 4 : 255;
  2926. tp->usrwide = tn->bus_width == 0x10 ? 1 : 0;
  2927. tp->usrtags =
  2928. (tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? MAX_TAGS : 0;
  2929. if (!(tn->flags & SYMBIOS_DISCONNECT_ENABLE))
  2930. tp->usrflag |= UF_NODISC;
  2931. if (!(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME))
  2932. tp->usrflag |= UF_NOSCAN;
  2933. }
  2934. /*
  2935. ** Get target set-up from Tekram format NVRAM.
  2936. */
  2937. static void __init 
  2938. ncr_Tekram_setup_target(ncb_p np, int target, Tekram_nvram *nvram)
  2939. {
  2940. tcb_p tp = &np->target[target];
  2941. struct Tekram_target *tn = &nvram->target[target];
  2942. int i;
  2943. if (tn->flags & TEKRAM_SYNC_NEGO) {
  2944. i = tn->sync_index & 0xf;
  2945. tp->usrsync = Tekram_sync[i];
  2946. }
  2947. tp->usrwide = (tn->flags & TEKRAM_WIDE_NEGO) ? 1 : 0;
  2948. if (tn->flags & TEKRAM_TAGGED_COMMANDS) {
  2949. tp->usrtags = 2 << nvram->max_tags_index;
  2950. }
  2951. if (!(tn->flags & TEKRAM_DISCONNECT_ENABLE))
  2952. tp->usrflag = UF_NODISC;
  2953.  
  2954. /* If any device does not support parity, we will not use this option */
  2955. if (!(tn->flags & TEKRAM_PARITY_CHECK))
  2956. np->rv_scntl0  &= ~0x0a; /* SCSI parity checking disabled */
  2957. }
  2958. #endif /* SCSI_NCR_NVRAM_SUPPORT */
  2959. static int __init ncr_prepare_setting(ncb_p np, ncr_nvram *nvram)
  2960. {
  2961. u_char burst_max;
  2962. u_long period;
  2963. int i;
  2964. /*
  2965. ** Save assumed BIOS setting
  2966. */
  2967. np->sv_scntl0 = INB(nc_scntl0) & 0x0a;
  2968. np->sv_scntl3 = INB(nc_scntl3) & 0x07;
  2969. np->sv_dmode = INB(nc_dmode)  & 0xce;
  2970. np->sv_dcntl = INB(nc_dcntl)  & 0xa8;
  2971. np->sv_ctest3 = INB(nc_ctest3) & 0x01;
  2972. np->sv_ctest4 = INB(nc_ctest4) & 0x80;
  2973. np->sv_ctest5 = INB(nc_ctest5) & 0x24;
  2974. np->sv_gpcntl = INB(nc_gpcntl);
  2975. np->sv_stest2 = INB(nc_stest2) & 0x20;
  2976. np->sv_stest4 = INB(nc_stest4);
  2977. /*
  2978. ** Wide ?
  2979. */
  2980. np->maxwide = (np->features & FE_WIDE)? 1 : 0;
  2981.   /*
  2982.  *  Guess the frequency of the chip's clock.
  2983.  */
  2984. if (np->features & (FE_ULTRA3 | FE_ULTRA2))
  2985. np->clock_khz = 160000;
  2986. else if (np->features & FE_ULTRA)
  2987. np->clock_khz = 80000;
  2988. else
  2989. np->clock_khz = 40000;
  2990. /*
  2991.  *  Get the clock multiplier factor.
  2992.    */
  2993. if (np->features & FE_QUAD)
  2994. np->multiplier = 4;
  2995. else if (np->features & FE_DBLR)
  2996. np->multiplier = 2;
  2997. else
  2998. np->multiplier = 1;
  2999. /*
  3000.  *  Measure SCSI clock frequency for chips 
  3001.  *  it may vary from assumed one.
  3002.  */
  3003. if (np->features & FE_VARCLK)
  3004. ncr_getclock(np, np->multiplier);
  3005. /*
  3006.  * Divisor to be used for async (timer pre-scaler).
  3007.  */
  3008. i = np->clock_divn - 1;
  3009. while (--i >= 0) {
  3010. if (10ul * SCSI_NCR_MIN_ASYNC * np->clock_khz > div_10M[i]) {
  3011. ++i;
  3012. break;
  3013. }
  3014. }
  3015. np->rv_scntl3 = i+1;
  3016. /*
  3017.  * Minimum synchronous period factor supported by the chip.
  3018.  * Btw, 'period' is in tenths of nanoseconds.
  3019.  */
  3020. period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
  3021. if (period <= 250) np->minsync = 10;
  3022. else if (period <= 303) np->minsync = 11;
  3023. else if (period <= 500) np->minsync = 12;
  3024. else np->minsync = (period + 40 - 1) / 40;
  3025. /*
  3026.  * Check against chip SCSI standard support (SCSI-2,ULTRA,ULTRA2).
  3027.  */
  3028. if (np->minsync < 25 && !(np->features & (FE_ULTRA|FE_ULTRA2)))
  3029. np->minsync = 25;
  3030. else if (np->minsync < 12 && !(np->features & FE_ULTRA2))
  3031. np->minsync = 12;
  3032. /*
  3033.  * Maximum synchronous period factor supported by the chip.
  3034.  */
  3035. period = (11 * div_10M[np->clock_divn - 1]) / (4 * np->clock_khz);
  3036. np->maxsync = period > 2540 ? 254 : period / 10;
  3037. /*
  3038. ** Prepare initial value of other IO registers
  3039. */
  3040. #if defined SCSI_NCR_TRUST_BIOS_SETTING
  3041. np->rv_scntl0 = np->sv_scntl0;
  3042. np->rv_dmode = np->sv_dmode;
  3043. np->rv_dcntl = np->sv_dcntl;
  3044. np->rv_ctest3 = np->sv_ctest3;
  3045. np->rv_ctest4 = np->sv_ctest4;
  3046. np->rv_ctest5 = np->sv_ctest5;
  3047. burst_max = burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
  3048. #else
  3049. /*
  3050. ** Select burst length (dwords)
  3051. */
  3052. burst_max = driver_setup.burst_max;
  3053. if (burst_max == 255)
  3054. burst_max = burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
  3055. if (burst_max > 7)
  3056. burst_max = 7;
  3057. if (burst_max > np->maxburst)
  3058. burst_max = np->maxburst;
  3059. /*
  3060. ** Select all supported special features
  3061. */
  3062. if (np->features & FE_ERL)
  3063. np->rv_dmode |= ERL; /* Enable Read Line */
  3064. if (np->features & FE_BOF)
  3065. np->rv_dmode |= BOF; /* Burst Opcode Fetch */
  3066. if (np->features & FE_ERMP)
  3067. np->rv_dmode |= ERMP; /* Enable Read Multiple */
  3068. if (np->features & FE_PFEN)
  3069. np->rv_dcntl |= PFEN; /* Prefetch Enable */
  3070. if (np->features & FE_CLSE)
  3071. np->rv_dcntl |= CLSE; /* Cache Line Size Enable */
  3072. if (np->features & FE_WRIE)
  3073. np->rv_ctest3 |= WRIE; /* Write and Invalidate */
  3074. if (np->features & FE_DFS)
  3075. np->rv_ctest5 |= DFS; /* Dma Fifo Size */
  3076. /*
  3077. ** Select some other
  3078. */
  3079. if (driver_setup.master_parity)
  3080. np->rv_ctest4 |= MPEE; /* Master parity checking */
  3081. if (driver_setup.scsi_parity)
  3082. np->rv_scntl0 |= 0x0a; /*  full arb., ena parity, par->ATN  */
  3083. #ifdef SCSI_NCR_NVRAM_SUPPORT
  3084. /*
  3085. ** Get parity checking, host ID and verbose mode from NVRAM
  3086. **/
  3087. if (nvram) {
  3088. switch(nvram->type) {
  3089. case SCSI_NCR_TEKRAM_NVRAM:
  3090. np->myaddr = nvram->data.Tekram.host_id & 0x0f;
  3091. break;
  3092. case SCSI_NCR_SYMBIOS_NVRAM:
  3093. if (!(nvram->data.Symbios.flags & SYMBIOS_PARITY_ENABLE))
  3094. np->rv_scntl0  &= ~0x0a;
  3095. np->myaddr = nvram->data.Symbios.host_id & 0x0f;
  3096. if (nvram->data.Symbios.flags & SYMBIOS_VERBOSE_MSGS)
  3097. np->verbose += 1;
  3098. break;
  3099. }
  3100. }
  3101. #endif
  3102. /*
  3103. **  Get SCSI addr of host adapter (set by bios?).
  3104. */
  3105. if (np->myaddr == 255) {
  3106. np->myaddr = INB(nc_scid) & 0x07;
  3107. if (!np->myaddr)
  3108. np->myaddr = SCSI_NCR_MYADDR;
  3109. }
  3110. #endif /* SCSI_NCR_TRUST_BIOS_SETTING */
  3111. /*
  3112.  * Prepare initial io register bits for burst length
  3113.  */
  3114. ncr_init_burst(np, burst_max);
  3115. /*
  3116. ** Set SCSI BUS mode.
  3117. **
  3118. ** - ULTRA2 chips (895/895A/896) report the current 
  3119. **   BUS mode through the STEST4 IO register.
  3120. ** - For previous generation chips (825/825A/875), 
  3121. **   user has to tell us how to check against HVD, 
  3122. **   since a 100% safe algorithm is not possible.
  3123. */
  3124. np->scsi_mode = SMODE_SE;
  3125. if (np->features & FE_ULTRA2)
  3126. np->scsi_mode = (np->sv_stest4 & SMODE);
  3127. else if (np->features & FE_DIFF) {
  3128. switch(driver_setup.diff_support) {
  3129. case 4: /* Trust previous settings if present, then GPIO3 */
  3130. if (np->sv_scntl3) {
  3131. if (np->sv_stest2 & 0x20)
  3132. np->scsi_mode = SMODE_HVD;
  3133. break;
  3134. }
  3135. case 3: /* SYMBIOS controllers report HVD through GPIO3 */
  3136. if (nvram && nvram->type != SCSI_NCR_SYMBIOS_NVRAM)
  3137. break;
  3138. if (INB(nc_gpreg) & 0x08)
  3139. break;
  3140. case 2: /* Set HVD unconditionally */
  3141. np->scsi_mode = SMODE_HVD;
  3142. case 1: /* Trust previous settings for HVD */
  3143. if (np->sv_stest2 & 0x20)
  3144. np->scsi_mode = SMODE_HVD;
  3145. break;
  3146. default:/* Don't care about HVD */
  3147. break;
  3148. }
  3149. }
  3150. if (np->scsi_mode == SMODE_HVD)
  3151. np->rv_stest2 |= 0x20;
  3152. /*
  3153. ** Set LED support from SCRIPTS.
  3154. ** Ignore this feature for boards known to use a 
  3155. ** specific GPIO wiring and for the 895A or 896 
  3156. ** that drive the LED directly.
  3157. ** Also probe initial setting of GPIO0 as output.
  3158. */
  3159. if ((driver_setup.led_pin ||
  3160.      (nvram && nvram->type == SCSI_NCR_SYMBIOS_NVRAM)) &&
  3161.     !(np->features & FE_LEDC) && !(np->sv_gpcntl & 0x01))
  3162. np->features |= FE_LED0;
  3163. /*
  3164. ** Set irq mode.
  3165. */
  3166. switch(driver_setup.irqm & 3) {
  3167. case 2:
  3168. np->rv_dcntl |= IRQM;
  3169. break;
  3170. case 1:
  3171. np->rv_dcntl |= (np->sv_dcntl & IRQM);
  3172. break;
  3173. default:
  3174. break;
  3175. }
  3176. /*
  3177. ** Configure targets according to driver setup.
  3178. ** If NVRAM present get targets setup from NVRAM.
  3179. ** Allow to override sync, wide and NOSCAN from 
  3180. ** boot command line.
  3181. */
  3182. for (i = 0 ; i < MAX_TARGET ; i++) {
  3183. tcb_p tp = &np->target[i];
  3184. tp->usrsync = 255;
  3185. #ifdef SCSI_NCR_NVRAM_SUPPORT
  3186. if (nvram) {
  3187. switch(nvram->type) {
  3188. case SCSI_NCR_TEKRAM_NVRAM:
  3189. ncr_Tekram_setup_target(np, i, &nvram->data.Tekram);
  3190. break;
  3191. case SCSI_NCR_SYMBIOS_NVRAM:
  3192. ncr_Symbios_setup_target(np, i, &nvram->data.Symbios);
  3193. break;
  3194. }
  3195. if (driver_setup.use_nvram & 0x2)
  3196. tp->usrsync = driver_setup.default_sync;
  3197. if (driver_setup.use_nvram & 0x4)
  3198. tp->usrwide = driver_setup.max_wide;
  3199. if (driver_setup.use_nvram & 0x8)
  3200. tp->usrflag &= ~UF_NOSCAN;
  3201. }
  3202. else {
  3203. #else
  3204. if (1) {
  3205. #endif
  3206. tp->usrsync = driver_setup.default_sync;
  3207. tp->usrwide = driver_setup.max_wide;
  3208. tp->usrtags = MAX_TAGS;
  3209. if (!driver_setup.disconnection)
  3210. np->target[i].usrflag = UF_NODISC;
  3211. }
  3212. }
  3213. /*
  3214. ** Announce all that stuff to user.
  3215. */
  3216. i = nvram ? nvram->type : 0;
  3217. printk(KERN_INFO "%s: %sID %d, Fast-%d%s%sn", ncr_name(np),
  3218. i  == SCSI_NCR_SYMBIOS_NVRAM ? "Symbios format NVRAM, " :
  3219. (i == SCSI_NCR_TEKRAM_NVRAM  ? "Tekram format NVRAM, " : ""),
  3220. np->myaddr,
  3221. np->minsync < 12 ? 40 : (np->minsync < 25 ? 20 : 10),
  3222. (np->rv_scntl0 & 0xa) ? ", Parity Checking" : ", NO Parity",
  3223. (np->rv_stest2 & 0x20) ? ", Differential" : "");
  3224. if (bootverbose > 1) {
  3225. printk (KERN_INFO "%s: initial SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
  3226. "(hex) %02x/%02x/%02x/%02x/%02x/%02xn",
  3227. ncr_name(np), np->sv_scntl3, np->sv_dmode, np->sv_dcntl,
  3228. np->sv_ctest3, np->sv_ctest4, np->sv_ctest5);
  3229. printk (KERN_INFO "%s: final   SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
  3230. "(hex) %02x/%02x/%02x/%02x/%02x/%02xn",
  3231. ncr_name(np), np->rv_scntl3, np->rv_dmode, np->rv_dcntl,
  3232. np->rv_ctest3, np->rv_ctest4, np->rv_ctest5);
  3233. }
  3234. if (bootverbose && np->paddr2)
  3235. printk (KERN_INFO "%s: on-chip RAM at 0x%lxn",
  3236. ncr_name(np), np->paddr2);
  3237. return 0;
  3238. }
  3239. /*
  3240. ** Host attach and initialisations.
  3241. **
  3242. ** Allocate host data and ncb structure.
  3243. ** Request IO region and remap MMIO region.
  3244. ** Do chip initialization.
  3245. ** If all is OK, install interrupt handling and
  3246. ** start the timer daemon.
  3247. */
  3248. static int __init 
  3249. ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device)
  3250. {
  3251.         struct host_data *host_data;
  3252. ncb_p np = 0;
  3253.         struct Scsi_Host *instance = 0;
  3254. u_long flags = 0;
  3255. ncr_nvram *nvram = device->nvram;
  3256. int i;
  3257. printk(KERN_INFO "ncr53c%s-%d: rev 0x%x on pci bus %d device %d function %d "
  3258. #ifdef __sparc__
  3259. "irq %sn",
  3260. #else
  3261. "irq %dn",
  3262. #endif
  3263. device->chip.name, unit, device->chip.revision_id,
  3264. device->slot.bus, (device->slot.device_fn & 0xf8) >> 3,
  3265. device->slot.device_fn & 7,
  3266. #ifdef __sparc__
  3267. __irq_itoa(device->slot.irq));
  3268. #else
  3269. device->slot.irq);
  3270. #endif
  3271. /*
  3272. ** Allocate host_data structure
  3273. */
  3274.         if (!(instance = scsi_register(tpnt, sizeof(*host_data))))
  3275.         goto attach_error;
  3276. host_data = (struct host_data *) instance->hostdata;
  3277. /*
  3278. ** Allocate the host control block.
  3279. */
  3280. np = __m_calloc_dma(device->pdev, sizeof(struct ncb), "NCB");
  3281. if (!np)
  3282. goto attach_error;
  3283. NCR_INIT_LOCK_NCB(np);
  3284. np->pdev  = device->pdev;
  3285. np->p_ncb = vtobus(np);
  3286. host_data->ncb = np;
  3287. /*
  3288. ** Allocate the default CCB.
  3289. */
  3290. np->ccb = (ccb_p) m_calloc_dma(sizeof(struct ccb), "CCB");
  3291. if (!np->ccb)
  3292. goto attach_error;
  3293. /*
  3294. ** Store input informations in the host data structure.
  3295. */
  3296. strncpy(np->chip_name, device->chip.name, sizeof(np->chip_name) - 1);
  3297. np->unit = unit;
  3298. np->verbose = driver_setup.verbose;
  3299. sprintf(np->inst_name, "ncr53c%s-%d", np->chip_name, np->unit);
  3300. np->device_id = device->chip.device_id;
  3301. np->revision_id = device->chip.revision_id;
  3302. np->bus = device->slot.bus;
  3303. np->device_fn = device->slot.device_fn;
  3304. np->features = device->chip.features;
  3305. np->clock_divn = device->chip.nr_divisor;
  3306. np->maxoffs = device->chip.offset_max;
  3307. np->maxburst = device->chip.burst_max;
  3308. np->myaddr = device->host_id;
  3309. /*
  3310. ** Allocate SCRIPTS areas.
  3311. */
  3312. np->script0  = (struct script *)
  3313. m_calloc_dma(sizeof(struct script), "SCRIPT");
  3314. if (!np->script0)
  3315. goto attach_error;
  3316. np->scripth0  = (struct scripth *)
  3317. m_calloc_dma(sizeof(struct scripth), "SCRIPTH");
  3318. if (!np->scripth0)
  3319. goto attach_error;
  3320. /*
  3321. **    Initialize timer structure
  3322.         **
  3323.         */
  3324. init_timer(&np->timer);
  3325. np->timer.data     = (unsigned long) np;
  3326. np->timer.function = ncr53c8xx_timeout;
  3327. /*
  3328. ** Try to map the controller chip to
  3329. ** virtual and physical memory.
  3330. */
  3331. np->paddr = device->slot.base;
  3332. np->paddr2 = (np->features & FE_RAM)? device->slot.base_2 : 0;
  3333. #ifndef SCSI_NCR_IOMAPPED
  3334. np->vaddr = remap_pci_mem(device->slot.base_c, (u_long) 128);
  3335. if (!np->vaddr) {
  3336. printk(KERN_ERR
  3337. "%s: can't map memory mapped IO regionn",ncr_name(np));
  3338. goto attach_error;
  3339. }
  3340. else
  3341. if (bootverbose > 1)
  3342. printk(KERN_INFO
  3343. "%s: using memory mapped IO at virtual address 0x%lxn", ncr_name(np), (u_long) np->vaddr);
  3344. /*
  3345. ** Make the controller's registers available.
  3346. ** Now the INB INW INL OUTB OUTW OUTL macros
  3347. ** can be used safely.
  3348. */
  3349. np->reg = (struct ncr_reg*) np->vaddr;
  3350. #endif /* !defined SCSI_NCR_IOMAPPED */
  3351. /*
  3352. ** Try to map the controller chip into iospace.
  3353. */
  3354. request_region(device->slot.io_port, 128, "ncr53c8xx");
  3355. np->base_io = device->slot.io_port;
  3356. #ifdef SCSI_NCR_NVRAM_SUPPORT
  3357. if (nvram) {
  3358. switch(nvram->type) {
  3359. case SCSI_NCR_SYMBIOS_NVRAM:
  3360. #ifdef SCSI_NCR_DEBUG_NVRAM
  3361. ncr_display_Symbios_nvram(&nvram->data.Symbios);
  3362. #endif
  3363. break;
  3364. case SCSI_NCR_TEKRAM_NVRAM:
  3365. #ifdef SCSI_NCR_DEBUG_NVRAM
  3366. ncr_display_Tekram_nvram(&nvram->data.Tekram);
  3367. #endif
  3368. break;
  3369. default:
  3370. nvram = 0;
  3371. #ifdef SCSI_NCR_DEBUG_NVRAM
  3372. printk(KERN_DEBUG "%s: NVRAM: None or invalid data.n", ncr_name(np));
  3373. #endif
  3374. }
  3375. }
  3376. #endif
  3377. /*
  3378. ** Do chip dependent initialization.
  3379. */
  3380. (void)ncr_prepare_setting(np, nvram);
  3381. if (np->paddr2 && sizeof(struct script) > 4096) {
  3382. np->paddr2 = 0;
  3383. printk(KERN_WARNING "%s: script too large, NOT using on chip RAM.n",
  3384. ncr_name(np));
  3385. }
  3386. /*
  3387. ** Fill Linux host instance structure
  3388. */
  3389. instance->max_channel = 0;
  3390. instance->this_id       = np->myaddr;
  3391. instance->max_id = np->maxwide ? 16 : 8;
  3392. instance->max_lun = SCSI_NCR_MAX_LUN;
  3393. #ifndef SCSI_NCR_IOMAPPED
  3394. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,29)
  3395. instance->base = (unsigned long) np->reg;
  3396. #else
  3397. instance->base = (char *) np->reg;
  3398. #endif
  3399. #endif
  3400. instance->irq = device->slot.irq;
  3401. instance->unique_id = device->slot.io_port;
  3402. instance->io_port = device->slot.io_port;
  3403. instance->n_io_port = 128;
  3404. instance->dma_channel = 0;
  3405. instance->cmd_per_lun = MAX_TAGS;
  3406. instance->can_queue = (MAX_START-4);
  3407. instance->select_queue_depths = ncr53c8xx_select_queue_depths;
  3408. scsi_set_pci_device(instance, device->pdev);
  3409. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  3410. np->check_integrity   = 0;
  3411. instance->check_integrity = 0;
  3412. #ifdef SCSI_NCR_ENABLE_INTEGRITY_CHECK
  3413. if ( !(driver_setup.bus_check & 0x04) ) {
  3414. np->check_integrity   = 1;
  3415. instance->check_integrity = 1;
  3416. }
  3417. #endif
  3418. #endif
  3419. /*
  3420. ** Patch script to physical addresses
  3421. */
  3422. ncr_script_fill (&script0, &scripth0);
  3423. np->scripth = np->scripth0;
  3424. np->p_scripth = vtobus(np->scripth);
  3425. np->p_script = (np->paddr2) ?  np->paddr2 : vtobus(np->script0);
  3426. ncr_script_copy_and_bind (np, (ncrcmd *) &script0, (ncrcmd *) np->script0, sizeof(struct script));
  3427. ncr_script_copy_and_bind (np, (ncrcmd *) &scripth0, (ncrcmd *) np->scripth0, sizeof(struct scripth));
  3428. np->ccb->p_ccb = vtobus (np->ccb);
  3429. /*
  3430. **    Patch the script for LED support.
  3431. */
  3432. if (np->features & FE_LED0) {
  3433. np->script0->idle[0]  =
  3434. cpu_to_scr(SCR_REG_REG(gpreg, SCR_OR,  0x01));
  3435. np->script0->reselected[0] =
  3436. cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
  3437. np->script0->start[0] =
  3438. cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
  3439. }
  3440. /*
  3441. ** Look for the target control block of this nexus.
  3442. ** For i = 0 to 3
  3443. ** JUMP ^ IFTRUE (MASK (i, 3)), @(next_lcb)
  3444. */
  3445. for (i = 0 ; i < 4 ; i++) {
  3446. np->jump_tcb[i].l_cmd   =
  3447. cpu_to_scr((SCR_JUMP ^ IFTRUE (MASK (i, 3))));
  3448. np->jump_tcb[i].l_paddr =
  3449. cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_target));
  3450. }
  3451. /*
  3452. ** Reset chip.
  3453. */
  3454. OUTB (nc_istat,  SRST);
  3455. UDELAY (100);
  3456. OUTB (nc_istat,  0   );
  3457. /*
  3458. ** Now check the cache handling of the pci chipset.
  3459. */
  3460. if (ncr_snooptest (np)) {
  3461. printk (KERN_ERR "CACHE INCORRECTLY CONFIGURED.n");
  3462. goto attach_error;
  3463. };
  3464. /*
  3465. ** Install the interrupt handler.
  3466. */
  3467. if (request_irq(device->slot.irq, ncr53c8xx_intr,
  3468. ((driver_setup.irqm & 0x10) ? 0 : SA_SHIRQ) |
  3469. #if LINUX_VERSION_CODE < LinuxVersionCode(2,2,0)
  3470. ((driver_setup.irqm & 0x20) ? 0 : SA_INTERRUPT),
  3471. #else
  3472. 0,
  3473. #endif
  3474. "ncr53c8xx", np)) {
  3475. #ifdef __sparc__
  3476. printk(KERN_ERR "%s: request irq %s failuren",
  3477. ncr_name(np), __irq_itoa(device->slot.irq));
  3478. #else
  3479. printk(KERN_ERR "%s: request irq %d failuren",
  3480. ncr_name(np), device->slot.irq);
  3481. #endif
  3482. goto attach_error;
  3483. }
  3484. np->irq = device->slot.irq;
  3485. /*
  3486. ** Initialize the fixed part of the default ccb.
  3487. */
  3488. ncr_init_ccb(np, np->ccb);
  3489. /*
  3490. ** After SCSI devices have been opened, we cannot
  3491. ** reset the bus safely, so we do it here.
  3492. ** Interrupt handler does the real work.
  3493. ** Process the reset exception,
  3494. ** if interrupts are not enabled yet.
  3495. ** Then enable disconnects.
  3496. */
  3497. NCR_LOCK_NCB(np, flags);
  3498. if (ncr_reset_scsi_bus(np, 0, driver_setup.settle_delay) != 0) {
  3499. printk(KERN_ERR "%s: FATAL ERROR: CHECK SCSI BUS - CABLES, TERMINATION, DEVICE POWER etc.!n", ncr_name(np));
  3500. NCR_UNLOCK_NCB(np, flags);
  3501. goto attach_error;
  3502. }
  3503. ncr_exception (np);
  3504. np->disc = 1;
  3505. /*
  3506. ** The middle-level SCSI driver does not
  3507. ** wait for devices to settle.
  3508. ** Wait synchronously if more than 2 seconds.
  3509. */
  3510. if (driver_setup.settle_delay > 2) {
  3511. printk(KERN_INFO "%s: waiting %d seconds for scsi devices to settle...n",
  3512. ncr_name(np), driver_setup.settle_delay);
  3513. MDELAY (1000 * driver_setup.settle_delay);
  3514. }
  3515. /*
  3516. ** Now let the generic SCSI driver
  3517. ** look for the SCSI devices on the bus ..
  3518. */
  3519. /*
  3520. ** start the timeout daemon
  3521. */
  3522. np->lasttime=0;
  3523. ncr_timeout (np);
  3524. /*
  3525. **  use SIMPLE TAG messages by default
  3526. */
  3527. #ifdef SCSI_NCR_ALWAYS_SIMPLE_TAG
  3528. np->order = M_SIMPLE_TAG;
  3529. #endif
  3530. /*
  3531. **  Done.
  3532. */
  3533.         if (!the_template) {
  3534.          the_template = instance->hostt;
  3535.          first_host = instance;
  3536. }
  3537. NCR_UNLOCK_NCB(np, flags);
  3538. return 0;
  3539. attach_error:
  3540. if (!instance) return -1;
  3541. printk(KERN_INFO "%s: detaching...n", ncr_name(np));
  3542. if (!np)
  3543. goto unregister;
  3544. #ifndef SCSI_NCR_IOMAPPED
  3545. if (np->vaddr) {
  3546. #ifdef DEBUG_NCR53C8XX
  3547. printk(KERN_DEBUG "%s: releasing memory mapped IO region %lx[%d]n", ncr_name(np), (u_long) np->vaddr, 128);
  3548. #endif
  3549. unmap_pci_mem((vm_offset_t) np->vaddr, (u_long) 128);
  3550. }
  3551. #endif /* !SCSI_NCR_IOMAPPED */
  3552. if (np->base_io) {
  3553. #ifdef DEBUG_NCR53C8XX
  3554. printk(KERN_DEBUG "%s: releasing IO region %x[%d]n", ncr_name(np), np->base_io, 128);
  3555. #endif
  3556. release_region(np->base_io, 128);
  3557. }
  3558. if (np->irq) {
  3559. #ifdef DEBUG_NCR53C8XX
  3560. #ifdef __sparc__
  3561. printk(KERN_INFO "%s: freeing irq %sn", ncr_name(np),
  3562.        __irq_itoa(np->irq));
  3563. #else
  3564. printk(KERN_INFO "%s: freeing irq %dn", ncr_name(np), np->irq);
  3565. #endif
  3566. #endif
  3567. free_irq(np->irq, np);
  3568. }
  3569. if (np->scripth0)
  3570. m_free_dma(np->scripth0, sizeof(struct scripth), "SCRIPTH");
  3571. if (np->script0)
  3572. m_free_dma(np->script0, sizeof(struct script), "SCRIPT");
  3573. if (np->ccb)
  3574. m_free_dma(np->ccb, sizeof(struct ccb), "CCB");
  3575. m_free_dma(np, sizeof(struct ncb), "NCB");
  3576. unregister:
  3577. scsi_unregister(instance);
  3578.         return -1;
  3579.  }
  3580. /*==========================================================
  3581. **
  3582. **
  3583. ** Done SCSI commands list management.
  3584. **
  3585. ** We donnot enter the scsi_done() callback immediately 
  3586. ** after a command has been seen as completed but we 
  3587. ** insert it into a list which is flushed outside any kind 
  3588. ** of driver critical section.
  3589. ** This allows to do minimal stuff under interrupt and 
  3590. ** inside critical sections and to also avoid locking up 
  3591. ** on recursive calls to driver entry points under SMP.
  3592. ** In fact, the only kernel point which is entered by the 
  3593. ** driver with a driver lock set is kmalloc(GFP_ATOMIC) 
  3594. ** that shall not reenter the driver under any circumstances,
  3595. ** AFAIK.
  3596. **
  3597. **==========================================================
  3598. */
  3599. static inline void ncr_queue_done_cmd(ncb_p np, Scsi_Cmnd *cmd)
  3600. {
  3601. unmap_scsi_data(np, cmd);
  3602. cmd->host_scribble = (char *) np->done_list;
  3603. np->done_list = cmd;
  3604. }
  3605. static inline void ncr_flush_done_cmds(Scsi_Cmnd *lcmd)
  3606. {
  3607. Scsi_Cmnd *cmd;
  3608. while (lcmd) {
  3609. cmd = lcmd;
  3610. lcmd = (Scsi_Cmnd *) cmd->host_scribble;
  3611. cmd->scsi_done(cmd);
  3612. }
  3613. }
  3614. /*==========================================================
  3615. **
  3616. **
  3617. ** Prepare the next negotiation message for integrity check,
  3618. ** if needed.
  3619. **
  3620. ** Fill in the part of message buffer that contains the 
  3621. ** negotiation and the nego_status field of the CCB.
  3622. ** Returns the size of the message in bytes.
  3623. **
  3624. **
  3625. **==========================================================
  3626. */
  3627. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  3628. static int ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr)
  3629. {
  3630. tcb_p tp = &np->target[cp->target];
  3631. int msglen = 0;
  3632. int nego = 0;
  3633. u_char no_increase;
  3634. if (tp->inq_done) {
  3635. if (!tp->ic_maximums_set) {
  3636. tp->ic_maximums_set = 1;
  3637. /* check target and host adapter capabilities */
  3638. if ( (tp->inq_byte7 & INQ7_WIDE16) && 
  3639. np->maxwide && tp->usrwide ) 
  3640. tp->ic_max_width = 1;
  3641. else
  3642. tp->ic_max_width = 0;
  3643. if ((tp->inq_byte7 & INQ7_SYNC) && tp->maxoffs) {
  3644. tp->ic_min_sync   = (tp->minsync < np->minsync) ?
  3645. np->minsync : tp->minsync;
  3646. }
  3647. else 
  3648. tp->ic_min_sync   = 255;
  3649. tp->period   = 1;
  3650. tp->widedone = 1;
  3651. }
  3652. if (DEBUG_FLAGS & DEBUG_IC) {
  3653. printk("%s: cmd->ic_nego %d, 1st byte 0x%2Xn",
  3654. ncr_name(np), cmd->ic_nego, cmd->cmnd[0]);
  3655. }
  3656. /* First command from integrity check routine will request
  3657.  * a PPR message.  Disable.
  3658.  */
  3659. if ((cmd->ic_nego & NS_PPR) == NS_PPR)
  3660. cmd->ic_nego &= ~NS_PPR;
  3661. /* Previous command recorded a parity or an initiator
  3662.  * detected error condition. Force bus to narrow for this
  3663.  * target. Clear flag. Negotation on request sense.
  3664.  * Note: kernel forces 2 bus resets :o( but clears itself out.
  3665.  * Minor bug? in scsi_obsolete.c (ugly)
  3666.  */
  3667. if (np->check_integ_par) {
  3668. printk("%s: Parity Error. Target set to narrow.n",
  3669. ncr_name(np));
  3670. tp->ic_max_width = 0;
  3671. tp->widedone = tp->period = 0;
  3672. }
  3673. /* In case of a bus reset, ncr_negotiate will reset 
  3674.                  * the flags tp->widedone and tp->period to 0, forcing
  3675.  * a new negotiation. 
  3676.  */
  3677. no_increase = 0;
  3678. if (tp->widedone == 0) {
  3679. cmd->ic_nego = NS_WIDE;
  3680. tp->widedone = 1;
  3681. no_increase = 1;
  3682. }
  3683. else if (tp->period == 0) {
  3684. cmd->ic_nego = NS_SYNC;
  3685. tp->period = 1;
  3686. no_increase = 1;
  3687. }
  3688. switch (cmd->ic_nego) {
  3689. case NS_WIDE:
  3690. /*
  3691. ** negotiate wide transfers ?
  3692. ** Do NOT negotiate if device only supports
  3693. ** narrow.
  3694. */
  3695. if (tp->ic_max_width | np->check_integ_par) {
  3696. nego = NS_WIDE;
  3697. msgptr[msglen++] = M_EXTENDED;
  3698. msgptr[msglen++] = 2;
  3699. msgptr[msglen++] = M_X_WIDE_REQ;
  3700. msgptr[msglen++] = cmd->ic_nego_width & tp->ic_max_width;
  3701. }
  3702. else
  3703. cmd->ic_nego_width &= tp->ic_max_width;
  3704.               
  3705. break;
  3706. case NS_SYNC:
  3707. /*
  3708. ** negotiate synchronous transfers?
  3709. ** Target must support sync transfers.
  3710. **
  3711. ** If period becomes longer than max, reset to async
  3712. */
  3713. if (tp->inq_byte7 & INQ7_SYNC) {
  3714. nego = NS_SYNC;
  3715. msgptr[msglen++] = M_EXTENDED;
  3716. msgptr[msglen++] = 3;
  3717. msgptr[msglen++] = M_X_SYNC_REQ;
  3718. switch (cmd->ic_nego_sync) {
  3719. case 2: /* increase the period */
  3720. if (!no_increase) {
  3721.   if (tp->ic_min_sync <= 0x0A)
  3722.       tp->ic_min_sync = 0x0C;
  3723.   else if (tp->ic_min_sync <= 0x0C)
  3724.       tp->ic_min_sync = 0x19;
  3725.   else if (tp->ic_min_sync <= 0x19)
  3726.       tp->ic_min_sync *= 2;
  3727.   else {
  3728. tp->ic_min_sync = 255;
  3729. cmd->ic_nego_sync = 0;
  3730. tp->maxoffs = 0;
  3731.    }
  3732. }
  3733. msgptr[msglen++] = tp->maxoffs?tp->ic_min_sync:0;
  3734. msgptr[msglen++] = tp->maxoffs;
  3735. break;
  3736. case 1: /* nego. to maximum */
  3737. msgptr[msglen++] = tp->maxoffs?tp->ic_min_sync:0;
  3738. msgptr[msglen++] = tp->maxoffs;
  3739. break;
  3740. case 0: /* nego to async */
  3741. default:
  3742. msgptr[msglen++] = 0;
  3743. msgptr[msglen++] = 0;
  3744. break;
  3745. };
  3746. }
  3747. else
  3748. cmd->ic_nego_sync = 0;
  3749. break;
  3750. case NS_NOCHANGE:
  3751. default:
  3752. break;
  3753. };
  3754. };
  3755. cp->nego_status = nego;
  3756. np->check_integ_par = 0;
  3757. if (nego) {
  3758. tp->nego_cp = cp;
  3759. if (DEBUG_FLAGS & DEBUG_NEGO) {
  3760. ncr_print_msg(cp, nego == NS_WIDE ?
  3761.   "wide/narrow msgout": "sync/async msgout", msgptr);
  3762. };
  3763. };
  3764. return msglen;
  3765. }
  3766. #endif /* SCSI_NCR_INTEGRITY_CHECKING */
  3767. /*==========================================================
  3768. **
  3769. **
  3770. ** Prepare the next negotiation message if needed.
  3771. **
  3772. ** Fill in the part of message buffer that contains the 
  3773. ** negotiation and the nego_status field of the CCB.
  3774. ** Returns the size of the message in bytes.
  3775. **
  3776. **
  3777. **==========================================================
  3778. */
  3779. static int ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr)
  3780. {
  3781. tcb_p tp = &np->target[cp->target];
  3782. int msglen = 0;
  3783. int nego = 0;
  3784. if (tp->inq_done) {
  3785. /*
  3786. ** negotiate wide transfers ?
  3787. */
  3788. if (!tp->widedone) {
  3789. if (tp->inq_byte7 & INQ7_WIDE16) {
  3790. nego = NS_WIDE;
  3791. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  3792. if (tp->ic_done)
  3793.          tp->usrwide &= tp->ic_max_width;
  3794. #endif
  3795. } else
  3796. tp->widedone=1;
  3797. };
  3798. /*
  3799. ** negotiate synchronous transfers?
  3800. */
  3801. if (!nego && !tp->period) {
  3802. if (tp->inq_byte7 & INQ7_SYNC) {
  3803. nego = NS_SYNC;
  3804. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  3805. if ((tp->ic_done) &&
  3806.         (tp->minsync < tp->ic_min_sync))
  3807.          tp->minsync = tp->ic_min_sync;
  3808. #endif
  3809. } else {
  3810. tp->period  =0xffff;
  3811. PRINT_TARGET(np, cp->target);
  3812. printk ("target did not report SYNC.n");
  3813. };
  3814. };
  3815. };
  3816. switch (nego) {
  3817. case NS_SYNC:
  3818. msgptr[msglen++] = M_EXTENDED;
  3819. msgptr[msglen++] = 3;
  3820. msgptr[msglen++] = M_X_SYNC_REQ;
  3821. msgptr[msglen++] = tp->maxoffs ? tp->minsync : 0;
  3822. msgptr[msglen++] = tp->maxoffs;
  3823. break;
  3824. case NS_WIDE:
  3825. msgptr[msglen++] = M_EXTENDED;
  3826. msgptr[msglen++] = 2;
  3827. msgptr[msglen++] = M_X_WIDE_REQ;
  3828. msgptr[msglen++] = tp->usrwide;
  3829. break;
  3830. };
  3831. cp->nego_status = nego;
  3832. if (nego) {
  3833. tp->nego_cp = cp;
  3834. if (DEBUG_FLAGS & DEBUG_NEGO) {
  3835. ncr_print_msg(cp, nego == NS_WIDE ?
  3836.   "wide msgout":"sync_msgout", msgptr);
  3837. };
  3838. };
  3839. return msglen;
  3840. }
  3841. /*==========================================================
  3842. **
  3843. **
  3844. ** Start execution of a SCSI command.
  3845. ** This is called from the generic SCSI driver.
  3846. **
  3847. **
  3848. **==========================================================
  3849. */
  3850. static int ncr_queue_command (ncb_p np, Scsi_Cmnd *cmd)
  3851. {
  3852. /* Scsi_Device        *device    = cmd->device; */
  3853. tcb_p tp                      = &np->target[cmd->target];
  3854. lcb_p lp       = tp->lp[cmd->lun];
  3855. ccb_p cp;
  3856. int segments;
  3857. u_char idmsg, *msgptr;
  3858. u_int  msglen;
  3859. int direction;
  3860. u_int32 lastp, goalp;
  3861. /*---------------------------------------------
  3862. **
  3863. **      Some shortcuts ...
  3864. **
  3865. **---------------------------------------------
  3866. */
  3867. if ((cmd->target == np->myaddr   ) ||
  3868. (cmd->target >= MAX_TARGET) ||
  3869. (cmd->lun    >= MAX_LUN   )) {
  3870. return(DID_BAD_TARGET);
  3871.         }
  3872. /*---------------------------------------------
  3873. **
  3874. ** Complete the 1st TEST UNIT READY command
  3875. ** with error condition if the device is 
  3876. ** flagged NOSCAN, in order to speed up 
  3877. ** the boot.
  3878. **
  3879. **---------------------------------------------
  3880. */
  3881. if ((cmd->cmnd[0] == 0 || cmd->cmnd[0] == 0x12) && 
  3882.     (tp->usrflag & UF_NOSCAN)) {
  3883. tp->usrflag &= ~UF_NOSCAN;
  3884. return DID_BAD_TARGET;
  3885. }
  3886. if (DEBUG_FLAGS & DEBUG_TINY) {
  3887. PRINT_ADDR(cmd);
  3888. printk ("CMD=%x ", cmd->cmnd[0]);
  3889. }
  3890. /*---------------------------------------------------
  3891. **
  3892. ** Assign a ccb / bind cmd.
  3893. ** If resetting, shorten settle_time if necessary
  3894. ** in order to avoid spurious timeouts.
  3895. ** If resetting or no free ccb,
  3896. ** insert cmd into the waiting list.
  3897. **
  3898. **----------------------------------------------------
  3899. */
  3900. if (np->settle_time && cmd->timeout_per_command >= HZ) {
  3901. u_long tlimit = ktime_get(cmd->timeout_per_command - HZ);
  3902. if (ktime_dif(np->settle_time, tlimit) > 0)
  3903. np->settle_time = tlimit;
  3904. }
  3905.         if (np->settle_time || !(cp=ncr_get_ccb (np, cmd->target, cmd->lun))) {
  3906. insert_into_waiting_list(np, cmd);
  3907. return(DID_OK);
  3908. }
  3909. cp->cmd = cmd;
  3910. /*---------------------------------------------------
  3911. **
  3912. ** Enable tagged queue if asked by scsi ioctl
  3913. **
  3914. **----------------------------------------------------
  3915. */
  3916. #if 0 /* This stuff was only useful for linux-1.2.13 */
  3917. if (lp && !lp->numtags && cmd->device && cmd->device->tagged_queue) {
  3918. lp->numtags = tp->usrtags;
  3919. ncr_setup_tags (np, cmd->target, cmd->lun);
  3920. }
  3921. #endif
  3922. /*----------------------------------------------------
  3923. **
  3924. ** Build the identify / tag / sdtr message
  3925. **
  3926. **----------------------------------------------------
  3927. */
  3928. idmsg = M_IDENTIFY | cmd->lun;
  3929. if (cp ->tag != NO_TAG ||
  3930. (cp != np->ccb && np->disc && !(tp->usrflag & UF_NODISC)))
  3931. idmsg |= 0x40;
  3932. msgptr = cp->scsi_smsg;
  3933. msglen = 0;
  3934. msgptr[msglen++] = idmsg;
  3935. if (cp->tag != NO_TAG) {
  3936. char order = np->order;
  3937. /*
  3938. ** Force ordered tag if necessary to avoid timeouts 
  3939. ** and to preserve interactivity.
  3940. */
  3941. if (lp && ktime_exp(lp->tags_stime)) {
  3942. if (lp->tags_smap) {
  3943. order = M_ORDERED_TAG;
  3944. if ((DEBUG_FLAGS & DEBUG_TAGS)||bootverbose>2){ 
  3945. PRINT_ADDR(cmd);
  3946. printk("ordered tag forced.n");
  3947. }
  3948. }
  3949. lp->tags_stime = ktime_get(3*HZ);
  3950. lp->tags_smap = lp->tags_umap;
  3951. }
  3952. if (order == 0) {
  3953. /*
  3954. ** Ordered write ops, unordered read ops.
  3955. */
  3956. switch (cmd->cmnd[0]) {
  3957. case 0x08:  /* READ_SMALL (6) */
  3958. case 0x28:  /* READ_BIG  (10) */
  3959. case 0xa8:  /* READ_HUGE (12) */
  3960. order = M_SIMPLE_TAG;
  3961. break;
  3962. default:
  3963. order = M_ORDERED_TAG;
  3964. }
  3965. }
  3966. msgptr[msglen++] = order;
  3967. /*
  3968. ** Actual tags are numbered 1,3,5,..2*MAXTAGS+1,
  3969. ** since we may have to deal with devices that have 
  3970. ** problems with #TAG 0 or too great #TAG numbers.
  3971. */
  3972. msgptr[msglen++] = (cp->tag << 1) + 1;
  3973. }
  3974. /*----------------------------------------------------
  3975. **
  3976. ** Build the data descriptors
  3977. **
  3978. **----------------------------------------------------
  3979. */
  3980. direction = scsi_data_direction(cmd);
  3981. if (direction != SCSI_DATA_NONE) {
  3982. segments = ncr_scatter (np, cp, cp->cmd);
  3983. if (segments < 0) {
  3984. ncr_free_ccb(np, cp);
  3985. return(DID_ERROR);
  3986. }
  3987. }
  3988. else {
  3989. cp->data_len = 0;
  3990. segments = 0;
  3991. }
  3992. /*---------------------------------------------------
  3993. **
  3994. ** negotiation required?
  3995. **
  3996. ** (nego_status is filled by ncr_prepare_nego())
  3997. **
  3998. **---------------------------------------------------
  3999. */
  4000. cp->nego_status = 0;
  4001. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  4002. if ((np->check_integrity && tp->ic_done) || !np->check_integrity) {
  4003.  if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
  4004. msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
  4005.  }
  4006. }
  4007. else if (np->check_integrity && (cmd->ic_in_progress)) { 
  4008. msglen += ncr_ic_nego (np, cp, cmd, msgptr + msglen);
  4009.         }
  4010. else if (np->check_integrity && cmd->ic_complete) {
  4011.                 /*
  4012.                  * Midlayer signal to the driver that all of the scsi commands
  4013.                  * for the integrity check have completed. Save the negotiated
  4014.                  * parameters (extracted from sval and wval). 
  4015.                  */ 
  4016. {
  4017. u_char idiv;
  4018. idiv = (tp->wval>>4) & 0x07;
  4019. if ((tp->sval&0x1f) && idiv )
  4020. tp->period = (((tp->sval>>5)+4)  
  4021. *div_10M[idiv-1])/np->clock_khz;
  4022. else
  4023. tp->period = 0xffff;
  4024. }
  4025. /*
  4026.  * tp->period contains 10 times the transfer period, 
  4027.  * which itself is 4 * the requested negotiation rate.
  4028.  */
  4029. if (tp->period <= 250) tp->ic_min_sync = 10;
  4030. else if (tp->period <= 303) tp->ic_min_sync = 11;
  4031. else if (tp->period <= 500) tp->ic_min_sync = 12;
  4032. else
  4033. tp->ic_min_sync = (tp->period + 40 - 1) / 40;
  4034. /*
  4035.                  * Negotiation for this target it complete.
  4036.                  */
  4037. tp->ic_max_width =  (tp->wval & EWS) ? 1: 0;
  4038. tp->ic_done = 1;
  4039. tp->widedone = 1;
  4040. printk("%s: Integrity Check Complete: n", ncr_name(np)); 
  4041. printk("%s: %s %s SCSI", ncr_name(np), 
  4042. (tp->sval&0x1f)?"SYNC":"ASYNC",
  4043. tp->ic_max_width?"WIDE":"NARROW");
  4044. if (tp->sval&0x1f) {
  4045.                         u_long mbs = 10000 * (tp->ic_max_width + 1);
  4046.                         printk(" %d.%d  MB/s", 
  4047.                                 (int) (mbs / tp->period), (int) (mbs % tp->period));
  4048. printk(" (%d ns, %d offset)n", 
  4049.   tp->period/10, tp->sval&0x1f);
  4050. }
  4051. else
  4052.                         printk(" %d MB/s. n ", (tp->ic_max_width+1)*5);
  4053.         }
  4054. #else
  4055. if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
  4056. msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
  4057. }
  4058. #endif /* SCSI_NCR_INTEGRITY_CHECKING */
  4059. /*----------------------------------------------------
  4060. **
  4061. ** Determine xfer direction.
  4062. **
  4063. **----------------------------------------------------
  4064. */
  4065. if (!cp->data_len)
  4066. direction = SCSI_DATA_NONE;
  4067. /*
  4068. ** If data direction is UNKNOWN, speculate DATA_READ 
  4069. ** but prepare alternate pointers for WRITE in case 
  4070. ** of our speculation will be just wrong.
  4071. ** SCRIPTS will swap values if needed.
  4072. */
  4073. switch(direction) {
  4074. case SCSI_DATA_UNKNOWN:
  4075. case SCSI_DATA_WRITE:
  4076. goalp = NCB_SCRIPT_PHYS (np, data_out2) + 8;
  4077. if (segments <= MAX_SCATTERL)
  4078. lastp = goalp - 8 - (segments * 16);
  4079. else {
  4080. lastp = NCB_SCRIPTH_PHYS (np, hdata_out2);
  4081. lastp -= (segments - MAX_SCATTERL) * 16;
  4082. }
  4083. if (direction != SCSI_DATA_UNKNOWN)
  4084. break;
  4085. cp->phys.header.wgoalp = cpu_to_scr(goalp);
  4086. cp->phys.header.wlastp = cpu_to_scr(lastp);
  4087. /* fall through */
  4088. case SCSI_DATA_READ:
  4089. goalp = NCB_SCRIPT_PHYS (np, data_in2) + 8;
  4090. if (segments <= MAX_SCATTERL)
  4091. lastp = goalp - 8 - (segments * 16);
  4092. else {
  4093. lastp = NCB_SCRIPTH_PHYS (np, hdata_in2);
  4094. lastp -= (segments - MAX_SCATTERL) * 16;
  4095. }
  4096. break;
  4097. default:
  4098. case SCSI_DATA_NONE:
  4099. lastp = goalp = NCB_SCRIPT_PHYS (np, no_data);
  4100. break;
  4101. }
  4102. /*
  4103. ** Set all pointers values needed by SCRIPTS.
  4104. ** If direction is unknown, start at data_io.
  4105. */
  4106. cp->phys.header.lastp = cpu_to_scr(lastp);
  4107. cp->phys.header.goalp = cpu_to_scr(goalp);
  4108. if (direction == SCSI_DATA_UNKNOWN)
  4109. cp->phys.header.savep = 
  4110. cpu_to_scr(NCB_SCRIPTH_PHYS (np, data_io));
  4111. else
  4112. cp->phys.header.savep= cpu_to_scr(lastp);
  4113. /*
  4114. ** Save the initial data pointer in order to be able 
  4115. ** to redo the command.
  4116. */
  4117. cp->startp = cp->phys.header.savep;
  4118. /*----------------------------------------------------
  4119. **
  4120. ** fill in ccb
  4121. **
  4122. **----------------------------------------------------
  4123. **
  4124. **
  4125. ** physical -> virtual backlink
  4126. ** Generic SCSI command
  4127. */
  4128. /*
  4129. ** Startqueue
  4130. */
  4131. cp->start.schedule.l_paddr   = cpu_to_scr(NCB_SCRIPT_PHYS (np, select));
  4132. cp->restart.schedule.l_paddr = cpu_to_scr(NCB_SCRIPT_PHYS (np, resel_dsa));
  4133. /*
  4134. ** select
  4135. */
  4136. cp->phys.select.sel_id = cmd->target;
  4137. cp->phys.select.sel_scntl3 = tp->wval;
  4138. cp->phys.select.sel_sxfer = tp->sval;
  4139. /*
  4140. ** message
  4141. */
  4142. cp->phys.smsg.addr = cpu_to_scr(CCB_PHYS (cp, scsi_smsg));
  4143. cp->phys.smsg.size = cpu_to_scr(msglen);
  4144. /*
  4145. ** command
  4146. */
  4147. memcpy(cp->cdb_buf, cmd->cmnd, MIN(cmd->cmd_len, sizeof(cp->cdb_buf)));
  4148. cp->phys.cmd.addr = cpu_to_scr(CCB_PHYS (cp, cdb_buf[0]));
  4149. cp->phys.cmd.size = cpu_to_scr(cmd->cmd_len);
  4150. /*
  4151. ** status
  4152. */
  4153. cp->actualquirks = tp->quirks;
  4154. cp->host_status = cp->nego_status ? HS_NEGOTIATE : HS_BUSY;
  4155. cp->scsi_status = S_ILLEGAL;
  4156. cp->parity_status = 0;
  4157. cp->xerr_status = XE_OK;
  4158. #if 0
  4159. cp->sync_status = tp->sval;
  4160. cp->wide_status = tp->wval;
  4161. #endif
  4162. /*----------------------------------------------------
  4163. **
  4164. ** Critical region: start this job.
  4165. **
  4166. **----------------------------------------------------
  4167. */
  4168. /*
  4169. ** activate this job.
  4170. */
  4171. cp->magic = CCB_MAGIC;
  4172. /*
  4173. ** insert next CCBs into start queue.
  4174. ** 2 max at a time is enough to flush the CCB wait queue.
  4175. */
  4176. cp->auto_sense = 0;
  4177. if (lp)
  4178. ncr_start_next_ccb(np, lp, 2);
  4179. else
  4180. ncr_put_start_queue(np, cp);
  4181. /*
  4182. ** Command is successfully queued.
  4183. */
  4184. return(DID_OK);
  4185. }
  4186. /*==========================================================
  4187. **
  4188. **
  4189. ** Insert a CCB into the start queue and wake up the 
  4190. ** SCRIPTS processor.
  4191. **
  4192. **
  4193. **==========================================================
  4194. */
  4195. static void ncr_start_next_ccb(ncb_p np, lcb_p lp, int maxn)
  4196. {
  4197. XPT_QUEHEAD *qp;
  4198. ccb_p cp;
  4199. if (lp->held_ccb)
  4200. return;
  4201. while (maxn-- && lp->queuedccbs < lp->queuedepth) {
  4202. qp = xpt_remque_head(&lp->wait_ccbq);
  4203. if (!qp)
  4204. break;
  4205. ++lp->queuedccbs;
  4206. cp = xpt_que_entry(qp, struct ccb, link_ccbq);
  4207. xpt_insque_tail(qp, &lp->busy_ccbq);
  4208. lp->jump_ccb[cp->tag == NO_TAG ? 0 : cp->tag] =
  4209. cpu_to_scr(CCB_PHYS (cp, restart));
  4210. ncr_put_start_queue(np, cp);
  4211. }
  4212. }
  4213. static void ncr_put_start_queue(ncb_p np, ccb_p cp)