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

嵌入式Linux

开发平台:

Unix_Linux

  1. /******************************************************************************
  2. **  High Performance device driver for the Symbios 53C896 controller.
  3. **
  4. **  Copyright (C) 1998-2001  Gerard Roudier <groudier@free.fr>
  5. **
  6. **  This driver also supports all the Symbios 53C8XX controller family, 
  7. **  except 53C810 revisions < 16, 53C825 revisions < 16 and all 
  8. **  revisions of 53C815 controllers.
  9. **
  10. **  This driver is based on the Linux port of the FreeBSD ncr driver.
  11. ** 
  12. **  Copyright (C) 1994  Wolfgang Stanglmeier
  13. **  
  14. **-----------------------------------------------------------------------------
  15. **  
  16. **  This program is free software; you can redistribute it and/or modify
  17. **  it under the terms of the GNU General Public License as published by
  18. **  the Free Software Foundation; either version 2 of the License, or
  19. **  (at your option) any later version.
  20. **
  21. **  This program is distributed in the hope that it will be useful,
  22. **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  23. **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  24. **  GNU General Public License for more details.
  25. **
  26. **  You should have received a copy of the GNU General Public License
  27. **  along with this program; if not, write to the Free Software
  28. **  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  29. **
  30. **-----------------------------------------------------------------------------
  31. **
  32. **  The Linux port of the FreeBSD ncr driver has been achieved in 
  33. **  november 1995 by:
  34. **
  35. **          Gerard Roudier              <groudier@free.fr>
  36. **
  37. **  Being given that this driver originates from the FreeBSD version, and
  38. **  in order to keep synergy on both, any suggested enhancements and corrections
  39. **  received on Linux are automatically a potential candidate for the FreeBSD 
  40. **  version.
  41. **
  42. **  The original driver has been written for 386bsd and FreeBSD by
  43. **          Wolfgang Stanglmeier        <wolf@cologne.de>
  44. **          Stefan Esser                <se@mi.Uni-Koeln.de>
  45. **
  46. **-----------------------------------------------------------------------------
  47. **
  48. **  Major contributions:
  49. **  --------------------
  50. **
  51. **  NVRAM detection and reading.
  52. **    Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk>
  53. **
  54. *******************************************************************************
  55. */
  56. /*
  57. ** Supported SCSI features:
  58. **     Synchronous data transfers
  59. **     Wide16 SCSI BUS
  60. **     Disconnection/Reselection
  61. **     Tagged command queuing
  62. **     SCSI Parity checking
  63. **
  64. ** Supported NCR/SYMBIOS chips:
  65. ** 53C810A   (8 bits, Fast 10,  no rom BIOS) 
  66. ** 53C825A   (Wide,   Fast 10,  on-board rom BIOS)
  67. ** 53C860   (8 bits, Fast 20,  no rom BIOS)
  68. ** 53C875   (Wide,   Fast 20,  on-board rom BIOS)
  69. ** 53C876   (Wide,   Fast 20 Dual, on-board rom BIOS)
  70. ** 53C895   (Wide,   Fast 40,  on-board rom BIOS)
  71. ** 53C895A   (Wide,   Fast 40,  on-board rom BIOS)
  72. ** 53C896   (Wide,   Fast 40 Dual, on-board rom BIOS)
  73. ** 53C897   (Wide,   Fast 40 Dual, on-board rom BIOS)
  74. ** 53C1510D  (Wide,   Fast 40 Dual, on-board rom BIOS)
  75. ** 53C1010   (Wide,   Fast 80 Dual, on-board rom BIOS)
  76. ** 53C1010_66(Wide,   Fast 80 Dual, on-board rom BIOS, 33/66MHz PCI)
  77. **
  78. ** Other features:
  79. ** Memory mapped IO
  80. ** Module
  81. ** Shared IRQ
  82. */
  83. /*
  84. ** Name and version of the driver
  85. */
  86. #define SCSI_NCR_DRIVER_NAME "sym53c8xx-1.7.3c-20010512"
  87. #define SCSI_NCR_DEBUG_FLAGS (0)
  88. #define NAME53C "sym53c"
  89. #define NAME53C8XX "sym53c8xx"
  90. /*==========================================================
  91. **
  92. **      Include files
  93. **
  94. **==========================================================
  95. */
  96. #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
  97. #include <linux/module.h>
  98. #include <asm/dma.h>
  99. #include <asm/io.h>
  100. #include <asm/system.h>
  101. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,17)
  102. #include <linux/spinlock.h>
  103. #elif LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
  104. #include <asm/spinlock.h>
  105. #endif
  106. #include <linux/delay.h>
  107. #include <linux/signal.h>
  108. #include <linux/sched.h>
  109. #include <linux/errno.h>
  110. #include <linux/pci.h>
  111. #include <linux/string.h>
  112. #include <linux/mm.h>
  113. #include <linux/ioport.h>
  114. #include <linux/time.h>
  115. #include <linux/timer.h>
  116. #include <linux/stat.h>
  117. #include <linux/version.h>
  118. #include <linux/blk.h>
  119. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,35)
  120. #include <linux/init.h>
  121. #endif
  122. #ifndef __init
  123. #define __init
  124. #endif
  125. #ifndef __initdata
  126. #define __initdata
  127. #endif
  128. #if LINUX_VERSION_CODE <= LinuxVersionCode(2,1,92)
  129. #include <linux/bios32.h>
  130. #endif
  131. #include "scsi.h"
  132. #include "hosts.h"
  133. #include "constants.h"
  134. #include "sd.h"
  135. #include <linux/types.h>
  136. /*
  137. ** Define BITS_PER_LONG for earlier linux versions.
  138. */
  139. #ifndef BITS_PER_LONG
  140. #if (~0UL) == 0xffffffffUL
  141. #define BITS_PER_LONG 32
  142. #else
  143. #define BITS_PER_LONG 64
  144. #endif
  145. #endif
  146. /*
  147. ** Define the BSD style u_int32 and u_int64 type.
  148. ** Are in fact u_int32_t and u_int64_t :-)
  149. */
  150. typedef u32 u_int32;
  151. typedef u64 u_int64;
  152. #include "sym53c8xx.h"
  153. /*
  154. ** Donnot compile integrity checking code for Linux-2.3.0 
  155. ** and above since SCSI data structures are not ready yet.
  156. */
  157. /* #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,0) */
  158. #if 0
  159. #define SCSI_NCR_INTEGRITY_CHECKING
  160. #endif
  161. #define MIN(a,b)        (((a) < (b)) ? (a) : (b))
  162. #define MAX(a,b)        (((a) > (b)) ? (a) : (b))
  163. /*
  164. ** Hmmm... What complex some PCI-HOST bridges actually are, 
  165. ** despite the fact that the PCI specifications are looking 
  166. ** so smart and simple! ;-)
  167. */
  168. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,47)
  169. #define SCSI_NCR_DYNAMIC_DMA_MAPPING
  170. #endif
  171. /*==========================================================
  172. **
  173. ** A la VMS/CAM-3 queue management.
  174. ** Implemented from linux list management.
  175. **
  176. **==========================================================
  177. */
  178. typedef struct xpt_quehead {
  179. struct xpt_quehead *flink; /* Forward  pointer */
  180. struct xpt_quehead *blink; /* Backward pointer */
  181. } XPT_QUEHEAD;
  182. #define xpt_que_init(ptr) do { 
  183. (ptr)->flink = (ptr); (ptr)->blink = (ptr); 
  184. } while (0)
  185. static inline void __xpt_que_add(struct xpt_quehead * new,
  186. struct xpt_quehead * blink,
  187. struct xpt_quehead * flink)
  188. {
  189. flink->blink = new;
  190. new->flink = flink;
  191. new->blink = blink;
  192. blink->flink = new;
  193. }
  194. static inline void __xpt_que_del(struct xpt_quehead * blink,
  195. struct xpt_quehead * flink)
  196. {
  197. flink->blink = blink;
  198. blink->flink = flink;
  199. }
  200. static inline int xpt_que_empty(struct xpt_quehead *head)
  201. {
  202. return head->flink == head;
  203. }
  204. static inline void xpt_que_splice(struct xpt_quehead *list,
  205. struct xpt_quehead *head)
  206. {
  207. struct xpt_quehead *first = list->flink;
  208. if (first != list) {
  209. struct xpt_quehead *last = list->blink;
  210. struct xpt_quehead *at   = head->flink;
  211. first->blink = head;
  212. head->flink  = first;
  213. last->flink = at;
  214. at->blink   = last;
  215. }
  216. }
  217. #define xpt_que_entry(ptr, type, member) 
  218. ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
  219. #define xpt_insque(new, pos) __xpt_que_add(new, pos, (pos)->flink)
  220. #define xpt_remque(el) __xpt_que_del((el)->blink, (el)->flink)
  221. #define xpt_insque_head(new, head) __xpt_que_add(new, head, (head)->flink)
  222. static inline struct xpt_quehead *xpt_remque_head(struct xpt_quehead *head)
  223. {
  224. struct xpt_quehead *elem = head->flink;
  225. if (elem != head)
  226. __xpt_que_del(head, elem->flink);
  227. else
  228. elem = 0;
  229. return elem;
  230. }
  231. #define xpt_insque_tail(new, head) __xpt_que_add(new, (head)->blink, head)
  232. static inline struct xpt_quehead *xpt_remque_tail(struct xpt_quehead *head)
  233. {
  234. struct xpt_quehead *elem = head->blink;
  235. if (elem != head)
  236. __xpt_que_del(elem->blink, head);
  237. else
  238. elem = 0;
  239. return elem;
  240. }
  241. /*==========================================================
  242. **
  243. ** Configuration and Debugging
  244. **
  245. **==========================================================
  246. */
  247. /*
  248. **    SCSI address of this device.
  249. **    The boot routines should have set it.
  250. **    If not, use this.
  251. */
  252. #ifndef SCSI_NCR_MYADDR
  253. #define SCSI_NCR_MYADDR      (7)
  254. #endif
  255. /*
  256. **    The maximum number of tags per logic unit.
  257. **    Used only for devices that support tags.
  258. */
  259. #ifndef SCSI_NCR_MAX_TAGS
  260. #define SCSI_NCR_MAX_TAGS    (8)
  261. #endif
  262. /*
  263. **    TAGS are actually unlimited (256 tags/lun).
  264. **    But Linux only supports 255. :)
  265. */
  266. #if SCSI_NCR_MAX_TAGS > 255
  267. #define MAX_TAGS 255
  268. #else
  269. #define MAX_TAGS SCSI_NCR_MAX_TAGS
  270. #endif
  271. /*
  272. **    Since the ncr chips only have a 8 bit ALU, we try to be clever 
  273. **    about offset calculation in the TASK TABLE per LUN that is an 
  274. **    array of DWORDS = 4 bytes.
  275. */
  276. #if MAX_TAGS > (512/4)
  277. #define MAX_TASKS  (1024/4)
  278. #elif MAX_TAGS > (256/4) 
  279. #define MAX_TASKS  (512/4)
  280. #else
  281. #define MAX_TASKS  (256/4)
  282. #endif
  283. /*
  284. **    This one means 'NO TAG for this job'
  285. */
  286. #define NO_TAG (256)
  287. /*
  288. **    Number of targets supported by the driver.
  289. **    n permits target numbers 0..n-1.
  290. **    Default is 16, meaning targets #0..#15.
  291. **    #7 .. is myself.
  292. */
  293. #ifdef SCSI_NCR_MAX_TARGET
  294. #define MAX_TARGET  (SCSI_NCR_MAX_TARGET)
  295. #else
  296. #define MAX_TARGET  (16)
  297. #endif
  298. /*
  299. **    Number of logic units supported by the driver.
  300. **    n enables logic unit numbers 0..n-1.
  301. **    The common SCSI devices require only
  302. **    one lun, so take 1 as the default.
  303. */
  304. #ifdef SCSI_NCR_MAX_LUN
  305. #define MAX_LUN    64
  306. #else
  307. #define MAX_LUN    (1)
  308. #endif
  309. /*
  310. **    Asynchronous pre-scaler (ns). Shall be 40 for 
  311. **    the SCSI timings to be compliant.
  312. */
  313.  
  314. #ifndef SCSI_NCR_MIN_ASYNC
  315. #define SCSI_NCR_MIN_ASYNC (40)
  316. #endif
  317. /*
  318. **    The maximum number of jobs scheduled for starting.
  319. **    We allocate 4 entries more than the value we announce 
  320. **    to the SCSI upper layer. Guess why ! :-)
  321. */
  322. #ifdef SCSI_NCR_CAN_QUEUE
  323. #define MAX_START   (SCSI_NCR_CAN_QUEUE + 4)
  324. #else
  325. #define MAX_START   (MAX_TARGET + 7 * MAX_TAGS)
  326. #endif
  327. /*
  328. **    We donnot want to allocate more than 1 PAGE for the 
  329. **    the start queue and the done queue. We hard-code entry 
  330. **    size to 8 in order to let cpp do the checking.
  331. **    Allows 512-4=508 pending IOs for i386 but Linux seems for 
  332. **    now not able to provide the driver with this amount of IOs.
  333. */
  334. #if MAX_START > PAGE_SIZE/8
  335. #undef MAX_START
  336. #define MAX_START (PAGE_SIZE/8)
  337. #endif
  338. /*
  339. **    The maximum number of segments a transfer is split into.
  340. **    We support up to 127 segments for both read and write.
  341. */
  342. #define MAX_SCATTER (SCSI_NCR_MAX_SCATTER)
  343. #define SCR_SG_SIZE (2)
  344. /*
  345. ** other
  346. */
  347. #define NCR_SNOOP_TIMEOUT (1000000)
  348. /*==========================================================
  349. **
  350. ** Miscallaneous BSDish defines.
  351. **
  352. **==========================================================
  353. */
  354. #define u_char unsigned char
  355. #define u_short unsigned short
  356. #define u_int unsigned int
  357. #define u_long unsigned long
  358. #ifndef bcopy
  359. #define bcopy(s, d, n) memcpy((d), (s), (n))
  360. #endif
  361. #ifndef bzero
  362. #define bzero(d, n) memset((d), 0, (n))
  363. #endif
  364.  
  365. #ifndef offsetof
  366. #define offsetof(t, m) ((size_t) (&((t *)0)->m))
  367. #endif
  368. /*
  369. ** Simple Wrapper to kernel PCI bus interface.
  370. **
  371. ** This wrapper allows to get rid of old kernel PCI interface 
  372. ** and still allows to preserve linux-2.0 compatibilty.
  373. ** In fact, it is mostly an incomplete emulation of the new 
  374. ** PCI code for pre-2.2 kernels. When kernel-2.0 support 
  375. ** will be dropped, we will just have to remove most of this 
  376. ** code.
  377. */
  378. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,2,0)
  379. typedef struct pci_dev *pcidev_t;
  380. #define PCIDEV_NULL (0)
  381. #define PciBusNumber(d) (d)->bus->number
  382. #define PciDeviceFn(d) (d)->devfn
  383. #define PciVendorId(d) (d)->vendor
  384. #define PciDeviceId(d) (d)->device
  385. #define PciIrqLine(d) (d)->irq
  386. static u_long __init
  387. pci_get_base_cookie(struct pci_dev *pdev, int index)
  388. {
  389. u_long base;
  390. #if LINUX_VERSION_CODE > LinuxVersionCode(2,3,12)
  391. base = pdev->resource[index].start;
  392. #else
  393. base = pdev->base_address[index];
  394. #if BITS_PER_LONG > 32
  395. if ((base & 0x7) == 0x4)
  396. *base |= (((u_long)pdev->base_address[++index]) << 32);
  397. #endif
  398. #endif
  399. return (base & ~0x7ul);
  400. }
  401. static int __init
  402. pci_get_base_address(struct pci_dev *pdev, int index, u_long *base)
  403. {
  404. u32 tmp;
  405. #define PCI_BAR_OFFSET(index) (PCI_BASE_ADDRESS_0 + (index<<2))
  406. pci_read_config_dword(pdev, PCI_BAR_OFFSET(index), &tmp);
  407. *base = tmp;
  408. ++index;
  409. if ((tmp & 0x7) == 0x4) {
  410. #if BITS_PER_LONG > 32
  411. pci_read_config_dword(pdev, PCI_BAR_OFFSET(index), &tmp);
  412. *base |= (((u_long)tmp) << 32);
  413. #endif
  414. ++index;
  415. }
  416. return index;
  417. #undef PCI_BAR_OFFSET
  418. }
  419. #else /* Incomplete emulation of current PCI code for pre-2.2 kernels */
  420. typedef unsigned int pcidev_t;
  421. #define PCIDEV_NULL (~0u)
  422. #define PciBusNumber(d) ((d)>>8)
  423. #define PciDeviceFn(d) ((d)&0xff)
  424. #define __PciDev(busn, devfn) (((busn)<<8)+(devfn))
  425. #define pci_present pcibios_present
  426. #define pci_read_config_byte(d, w, v) 
  427. pcibios_read_config_byte(PciBusNumber(d), PciDeviceFn(d), w, v)
  428. #define pci_read_config_word(d, w, v) 
  429. pcibios_read_config_word(PciBusNumber(d), PciDeviceFn(d), w, v)
  430. #define pci_read_config_dword(d, w, v) 
  431. pcibios_read_config_dword(PciBusNumber(d), PciDeviceFn(d), w, v)
  432. #define pci_write_config_byte(d, w, v) 
  433. pcibios_write_config_byte(PciBusNumber(d), PciDeviceFn(d), w, v)
  434. #define pci_write_config_word(d, w, v) 
  435. pcibios_write_config_word(PciBusNumber(d), PciDeviceFn(d), w, v)
  436. #define pci_write_config_dword(d, w, v) 
  437. pcibios_write_config_dword(PciBusNumber(d), PciDeviceFn(d), w, v)
  438. static pcidev_t __init
  439. pci_find_device(unsigned int vendor, unsigned int device, pcidev_t prev)
  440. {
  441. static unsigned short pci_index;
  442. int retv;
  443. unsigned char bus_number, device_fn;
  444. if (prev == PCIDEV_NULL)
  445. pci_index = 0;
  446. else
  447. ++pci_index;
  448. retv = pcibios_find_device (vendor, device, pci_index,
  449.     &bus_number, &device_fn);
  450. return retv ? PCIDEV_NULL : __PciDev(bus_number, device_fn);
  451. }
  452. static u_short __init PciVendorId(pcidev_t dev)
  453. {
  454. u_short vendor_id;
  455. pci_read_config_word(dev, PCI_VENDOR_ID, &vendor_id);
  456. return vendor_id;
  457. }
  458. static u_short __init PciDeviceId(pcidev_t dev)
  459. {
  460. u_short device_id;
  461. pci_read_config_word(dev, PCI_DEVICE_ID, &device_id);
  462. return device_id;
  463. }
  464. static u_int __init PciIrqLine(pcidev_t dev)
  465. {
  466. u_char irq;
  467. pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
  468. return irq;
  469. }
  470. static int __init 
  471. pci_get_base_address(pcidev_t dev, int offset, u_long *base)
  472. {
  473. u_int32 tmp;
  474. pci_read_config_dword(dev, PCI_BASE_ADDRESS_0 + offset, &tmp);
  475. *base = tmp;
  476. offset += sizeof(u_int32);
  477. if ((tmp & 0x7) == 0x4) {
  478. #if BITS_PER_LONG > 32
  479. pci_read_config_dword(dev, PCI_BASE_ADDRESS_0 + offset, &tmp);
  480. *base |= (((u_long)tmp) << 32);
  481. #endif
  482. offset += sizeof(u_int32);
  483. }
  484. return offset;
  485. }
  486. static u_long __init
  487. pci_get_base_cookie(struct pci_dev *pdev, int offset)
  488. {
  489. u_long base;
  490. (void) pci_get_base_address(dev, offset, &base);
  491. return base;
  492. }
  493. #endif /* LINUX_VERSION_CODE >= LinuxVersionCode(2,2,0) */
  494. /* Does not make sense in earlier kernels */
  495. #if LINUX_VERSION_CODE < LinuxVersionCode(2,4,0)
  496. #define pci_enable_device(pdev) (0)
  497. #endif
  498. #if LINUX_VERSION_CODE < LinuxVersionCode(2,4,4)
  499. #define scsi_set_pci_device(inst, pdev) (0)
  500. #endif
  501. /*==========================================================
  502. **
  503. ** Debugging tags
  504. **
  505. **==========================================================
  506. */
  507. #define DEBUG_ALLOC    (0x0001)
  508. #define DEBUG_PHASE    (0x0002)
  509. #define DEBUG_QUEUE    (0x0008)
  510. #define DEBUG_RESULT   (0x0010)
  511. #define DEBUG_POINTER  (0x0020)
  512. #define DEBUG_SCRIPT   (0x0040)
  513. #define DEBUG_TINY     (0x0080)
  514. #define DEBUG_TIMING   (0x0100)
  515. #define DEBUG_NEGO     (0x0200)
  516. #define DEBUG_TAGS     (0x0400)
  517. #define DEBUG_IC       (0x0800)
  518. /*
  519. **    Enable/Disable debug messages.
  520. **    Can be changed at runtime too.
  521. */
  522. #ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
  523. static int ncr_debug = SCSI_NCR_DEBUG_FLAGS;
  524. #define DEBUG_FLAGS ncr_debug
  525. #else
  526. #define DEBUG_FLAGS SCSI_NCR_DEBUG_FLAGS
  527. #endif
  528. /*
  529. ** SMP threading.
  530. **
  531. ** Assuming that SMP systems are generally high end systems and may 
  532. ** use several SCSI adapters, we are using one lock per controller 
  533. ** instead of some global one. For the moment (linux-2.1.95), driver's 
  534. ** entry points are called with the 'io_request_lock' lock held, so:
  535. ** - We are uselessly loosing a couple of micro-seconds to lock the 
  536. **   controller data structure.
  537. ** - But the driver is not broken by design for SMP and so can be 
  538. **   more resistant to bugs or bad changes in the IO sub-system code.
  539. ** - A small advantage could be that the interrupt code is grained as 
  540. **   wished (e.g.: threaded by controller).
  541. */
  542. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
  543. spinlock_t sym53c8xx_lock = SPIN_LOCK_UNLOCKED;
  544. #define NCR_LOCK_DRIVER(flags)     spin_lock_irqsave(&sym53c8xx_lock, flags)
  545. #define NCR_UNLOCK_DRIVER(flags)   spin_unlock_irqrestore(&sym53c8xx_lock,flags)
  546. #define NCR_INIT_LOCK_NCB(np)      spin_lock_init(&np->smp_lock);
  547. #define NCR_LOCK_NCB(np, flags)    spin_lock_irqsave(&np->smp_lock, flags)
  548. #define NCR_UNLOCK_NCB(np, flags)  spin_unlock_irqrestore(&np->smp_lock, flags)
  549. #define NCR_LOCK_SCSI_DONE(np, flags) 
  550. spin_lock_irqsave(&io_request_lock, flags)
  551. #define NCR_UNLOCK_SCSI_DONE(np, flags) 
  552. spin_unlock_irqrestore(&io_request_lock, flags)
  553. #else
  554. #define NCR_LOCK_DRIVER(flags)     do { save_flags(flags); cli(); } while (0)
  555. #define NCR_UNLOCK_DRIVER(flags)   do { restore_flags(flags); } while (0)
  556. #define NCR_INIT_LOCK_NCB(np)      do { } while (0)
  557. #define NCR_LOCK_NCB(np, flags)    do { save_flags(flags); cli(); } while (0)
  558. #define NCR_UNLOCK_NCB(np, flags)  do { restore_flags(flags); } while (0)
  559. #define NCR_LOCK_SCSI_DONE(np, flags)    do {;} while (0)
  560. #define NCR_UNLOCK_SCSI_DONE(np, flags)  do {;} while (0)
  561. #endif
  562. /*
  563. ** Memory mapped IO
  564. **
  565. ** Since linux-2.1, we must use ioremap() to map the io memory space.
  566. ** iounmap() to unmap it. That allows portability.
  567. ** Linux 1.3.X and 2.0.X allow to remap physical pages addresses greater 
  568. ** than the highest physical memory address to kernel virtual pages with 
  569. ** vremap() / vfree(). That was not portable but worked with i386 
  570. ** architecture.
  571. */
  572. #if LINUX_VERSION_CODE < LinuxVersionCode(2,1,0)
  573. #define ioremap vremap
  574. #define iounmap vfree
  575. #endif
  576. #ifdef __sparc__
  577. #  include <asm/irq.h>
  578. #  define memcpy_to_pci(a, b, c) memcpy_toio((a), (b), (c))
  579. #elif defined(__alpha__)
  580. #  define memcpy_to_pci(a, b, c) memcpy_toio((a), (b), (c))
  581. #else /* others */
  582. #  define memcpy_to_pci(a, b, c) memcpy_toio((a), (b), (c))
  583. #endif
  584. #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  585. static u_long __init remap_pci_mem(u_long base, u_long size)
  586. {
  587. u_long page_base = ((u_long) base) & PAGE_MASK;
  588. u_long page_offs = ((u_long) base) - page_base;
  589. u_long page_remapped = (u_long) ioremap(page_base, page_offs+size);
  590. return page_remapped? (page_remapped + page_offs) : 0UL;
  591. }
  592. static void __init unmap_pci_mem(u_long vaddr, u_long size)
  593. {
  594. if (vaddr)
  595. iounmap((void *) (vaddr & PAGE_MASK));
  596. }
  597. #endif /* not def SCSI_NCR_PCI_MEM_NOT_SUPPORTED */
  598. /*
  599. ** Insert a delay in micro-seconds and milli-seconds.
  600. ** -------------------------------------------------
  601. ** Under Linux, udelay() is restricted to delay < 1 milli-second.
  602. ** In fact, it generally works for up to 1 second delay.
  603. ** Since 2.1.105, the mdelay() function is provided for delays 
  604. ** in milli-seconds.
  605. ** Under 2.0 kernels, udelay() is an inline function that is very 
  606. ** inaccurate on Pentium processors.
  607. */
  608. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,105)
  609. #define UDELAY udelay
  610. #define MDELAY mdelay
  611. #else
  612. static void UDELAY(long us) { udelay(us); }
  613. static void MDELAY(long ms) { while (ms--) UDELAY(1000); }
  614. #endif
  615. /*
  616. ** Simple power of two buddy-like allocator
  617. ** ----------------------------------------
  618. ** This simple code is not intended to be fast, but to provide 
  619. ** power of 2 aligned memory allocations.
  620. ** Since the SCRIPTS processor only supplies 8 bit arithmetic,
  621. ** this allocator allows simple and fast address calculations  
  622. ** from the SCRIPTS code. In addition, cache line alignment 
  623. ** is guaranteed for power of 2 cache line size.
  624. ** Enhanced in linux-2.3.44 to provide a memory pool per pcidev 
  625. ** to support dynamic dma mapping. (I would have preferred a 
  626. ** real bus astraction, btw).
  627. */
  628. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,0)
  629. #define __GetFreePages(flags, order) __get_free_pages(flags, order)
  630. #else
  631. #define __GetFreePages(flags, order) __get_free_pages(flags, order, 0)
  632. #endif
  633. #define MEMO_SHIFT 4 /* 16 bytes minimum memory chunk */
  634. #if PAGE_SIZE >= 8192
  635. #define MEMO_PAGE_ORDER 0 /* 1 PAGE  maximum */
  636. #else
  637. #define MEMO_PAGE_ORDER 1 /* 2 PAGES maximum */
  638. #endif
  639. #define MEMO_FREE_UNUSED /* Free unused pages immediately */
  640. #define MEMO_WARN 1
  641. #define MEMO_GFP_FLAGS GFP_ATOMIC
  642. #define MEMO_CLUSTER_SHIFT (PAGE_SHIFT+MEMO_PAGE_ORDER)
  643. #define MEMO_CLUSTER_SIZE (1UL << MEMO_CLUSTER_SHIFT)
  644. #define MEMO_CLUSTER_MASK (MEMO_CLUSTER_SIZE-1)
  645. typedef u_long m_addr_t; /* Enough bits to bit-hack addresses */
  646. typedef pcidev_t m_bush_t; /* Something that addresses DMAable */
  647. typedef struct m_link { /* Link between free memory chunks */
  648. struct m_link *next;
  649. } m_link_s;
  650. #ifdef SCSI_NCR_DYNAMIC_DMA_MAPPING
  651. typedef struct m_vtob { /* Virtual to Bus address translation */
  652. struct m_vtob *next;
  653. m_addr_t vaddr;
  654. m_addr_t baddr;
  655. } m_vtob_s;
  656. #define VTOB_HASH_SHIFT 5
  657. #define VTOB_HASH_SIZE (1UL << VTOB_HASH_SHIFT)
  658. #define VTOB_HASH_MASK (VTOB_HASH_SIZE-1)
  659. #define VTOB_HASH_CODE(m)
  660. ((((m_addr_t) (m)) >> MEMO_CLUSTER_SHIFT) & VTOB_HASH_MASK)
  661. #endif
  662. typedef struct m_pool { /* Memory pool of a given kind */
  663. #ifdef SCSI_NCR_DYNAMIC_DMA_MAPPING
  664. m_bush_t bush;
  665. m_addr_t (*getp)(struct m_pool *);
  666. void (*freep)(struct m_pool *, m_addr_t);
  667. #define M_GETP() mp->getp(mp)
  668. #define M_FREEP(p) mp->freep(mp, p)
  669. #define GetPages() __GetFreePages(MEMO_GFP_FLAGS, MEMO_PAGE_ORDER)
  670. #define FreePages(p) free_pages(p, MEMO_PAGE_ORDER)
  671. int nump;
  672. m_vtob_s *(vtob[VTOB_HASH_SIZE]);
  673. struct m_pool *next;
  674. #else
  675. #define M_GETP() __GetFreePages(MEMO_GFP_FLAGS, MEMO_PAGE_ORDER)
  676. #define M_FREEP(p) free_pages(p, MEMO_PAGE_ORDER)
  677. #endif /* SCSI_NCR_DYNAMIC_DMA_MAPPING */
  678. struct m_link h[PAGE_SHIFT-MEMO_SHIFT+MEMO_PAGE_ORDER+1];
  679. } m_pool_s;
  680. static void *___m_alloc(m_pool_s *mp, int size)
  681. {
  682. int i = 0;
  683. int s = (1 << MEMO_SHIFT);
  684. int j;
  685. m_addr_t a;
  686. m_link_s *h = mp->h;
  687. if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
  688. return 0;
  689. while (size > s) {
  690. s <<= 1;
  691. ++i;
  692. }
  693. j = i;
  694. while (!h[j].next) {
  695. if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
  696. h[j].next = (m_link_s *) M_GETP();
  697. if (h[j].next)
  698. h[j].next->next = 0;
  699. break;
  700. }
  701. ++j;
  702. s <<= 1;
  703. }
  704. a = (m_addr_t) h[j].next;
  705. if (a) {
  706. h[j].next = h[j].next->next;
  707. while (j > i) {
  708. j -= 1;
  709. s >>= 1;
  710. h[j].next = (m_link_s *) (a+s);
  711. h[j].next->next = 0;
  712. }
  713. }
  714. #ifdef DEBUG
  715. printk("___m_alloc(%d) = %pn", size, (void *) a);
  716. #endif
  717. return (void *) a;
  718. }
  719. static void ___m_free(m_pool_s *mp, void *ptr, int size)
  720. {
  721. int i = 0;
  722. int s = (1 << MEMO_SHIFT);
  723. m_link_s *q;
  724. m_addr_t a, b;
  725. m_link_s *h = mp->h;
  726. #ifdef DEBUG
  727. printk("___m_free(%p, %d)n", ptr, size);
  728. #endif
  729. if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
  730. return;
  731. while (size > s) {
  732. s <<= 1;
  733. ++i;
  734. }
  735. a = (m_addr_t) ptr;
  736. while (1) {
  737. #ifdef MEMO_FREE_UNUSED
  738. if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
  739. M_FREEP(a);
  740. break;
  741. }
  742. #endif
  743. b = a ^ s;
  744. q = &h[i];
  745. while (q->next && q->next != (m_link_s *) b) {
  746. q = q->next;
  747. }
  748. if (!q->next) {
  749. ((m_link_s *) a)->next = h[i].next;
  750. h[i].next = (m_link_s *) a;
  751. break;
  752. }
  753. q->next = q->next->next;
  754. a = a & b;
  755. s <<= 1;
  756. ++i;
  757. }
  758. }
  759. static void *__m_calloc2(m_pool_s *mp, int size, char *name, int uflags)
  760. {
  761. void *p;
  762. p = ___m_alloc(mp, size);
  763. if (DEBUG_FLAGS & DEBUG_ALLOC)
  764. printk ("new %-10s[%4d] @%p.n", name, size, p);
  765. if (p)
  766. bzero(p, size);
  767. else if (uflags & MEMO_WARN)
  768. printk (NAME53C8XX ": failed to allocate %s[%d]n", name, size);
  769. return p;
  770. }
  771. #define __m_calloc(mp, s, n) __m_calloc2(mp, s, n, MEMO_WARN)
  772. static void __m_free(m_pool_s *mp, void *ptr, int size, char *name)
  773. {
  774. if (DEBUG_FLAGS & DEBUG_ALLOC)
  775. printk ("freeing %-10s[%4d] @%p.n", name, size, ptr);
  776. ___m_free(mp, ptr, size);
  777. }
  778. /*
  779.  * With pci bus iommu support, we use a default pool of unmapped memory 
  780.  * for memory we donnot need to DMA from/to and one pool per pcidev for 
  781.  * memory accessed by the PCI chip. `mp0' is the default not DMAable pool.
  782.  */
  783. #ifndef SCSI_NCR_DYNAMIC_DMA_MAPPING
  784. static m_pool_s mp0;
  785. #else
  786. static m_addr_t ___mp0_getp(m_pool_s *mp)
  787. {
  788. m_addr_t m = GetPages();
  789. if (m)
  790. ++mp->nump;
  791. return m;
  792. }
  793. static void ___mp0_freep(m_pool_s *mp, m_addr_t m)
  794. {
  795. FreePages(m);
  796. --mp->nump;
  797. }
  798. static m_pool_s mp0 = {0, ___mp0_getp, ___mp0_freep};
  799. #endif /* SCSI_NCR_DYNAMIC_DMA_MAPPING */
  800. static void *m_calloc(int size, char *name)
  801. {
  802. u_long flags;
  803. void *m;
  804. NCR_LOCK_DRIVER(flags);
  805. m = __m_calloc(&mp0, size, name);
  806. NCR_UNLOCK_DRIVER(flags);
  807. return m;
  808. }
  809. static void m_free(void *ptr, int size, char *name)
  810. {
  811. u_long flags;
  812. NCR_LOCK_DRIVER(flags);
  813. __m_free(&mp0, ptr, size, name);
  814. NCR_UNLOCK_DRIVER(flags);
  815. }
  816. /*
  817.  * DMAable pools.
  818.  */
  819. #ifndef SCSI_NCR_DYNAMIC_DMA_MAPPING
  820. /* Without pci bus iommu support, all the memory is assumed DMAable */
  821. #define __m_calloc_dma(b, s, n) m_calloc(s, n)
  822. #define __m_free_dma(b, p, s, n) m_free(p, s, n)
  823. #define __vtobus(b, p) virt_to_bus(p)
  824. #else
  825. /*
  826.  * With pci bus iommu support, we maintain one pool per pcidev and a 
  827.  * hashed reverse table for virtual to bus physical address translations.
  828.  */
  829. static m_addr_t ___dma_getp(m_pool_s *mp)
  830. {
  831. m_addr_t vp;
  832. m_vtob_s *vbp;
  833. vbp = __m_calloc(&mp0, sizeof(*vbp), "VTOB");
  834. if (vbp) {
  835. dma_addr_t daddr;
  836. vp = (m_addr_t) pci_alloc_consistent(mp->bush,
  837.      PAGE_SIZE<<MEMO_PAGE_ORDER,
  838.      &daddr);
  839. if (vp) {
  840. int hc = VTOB_HASH_CODE(vp);
  841. vbp->vaddr = vp;
  842. vbp->baddr = daddr;
  843. vbp->next = mp->vtob[hc];
  844. mp->vtob[hc] = vbp;
  845. ++mp->nump;
  846. return vp;
  847. }
  848. else
  849. __m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
  850. }
  851. return 0;
  852. }
  853. static void ___dma_freep(m_pool_s *mp, m_addr_t m)
  854. {
  855. m_vtob_s **vbpp, *vbp;
  856. int hc = VTOB_HASH_CODE(m);
  857. vbpp = &mp->vtob[hc];
  858. while (*vbpp && (*vbpp)->vaddr != m)
  859. vbpp = &(*vbpp)->next;
  860. if (*vbpp) {
  861. vbp = *vbpp;
  862. *vbpp = (*vbpp)->next;
  863. pci_free_consistent(mp->bush, PAGE_SIZE<<MEMO_PAGE_ORDER,
  864.     (void *)vbp->vaddr, (dma_addr_t)vbp->baddr);
  865. __m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
  866. --mp->nump;
  867. }
  868. }
  869. static inline m_pool_s *___get_dma_pool(m_bush_t bush)
  870. {
  871. m_pool_s *mp;
  872. for (mp = mp0.next; mp && mp->bush != bush; mp = mp->next);
  873. return mp;
  874. }
  875. static m_pool_s *___cre_dma_pool(m_bush_t bush)
  876. {
  877. m_pool_s *mp;
  878. mp = __m_calloc(&mp0, sizeof(*mp), "MPOOL");
  879. if (mp) {
  880. bzero(mp, sizeof(*mp));
  881. mp->bush = bush;
  882. mp->getp = ___dma_getp;
  883. mp->freep = ___dma_freep;
  884. mp->next = mp0.next;
  885. mp0.next = mp;
  886. }
  887. return mp;
  888. }
  889. static void ___del_dma_pool(m_pool_s *p)
  890. {
  891. struct m_pool **pp = &mp0.next;
  892. while (*pp && *pp != p)
  893. pp = &(*pp)->next;
  894. if (*pp) {
  895. *pp = (*pp)->next;
  896. __m_free(&mp0, p, sizeof(*p), "MPOOL");
  897. }
  898. }
  899. static void *__m_calloc_dma(m_bush_t bush, int size, char *name)
  900. {
  901. u_long flags;
  902. struct m_pool *mp;
  903. void *m = 0;
  904. NCR_LOCK_DRIVER(flags);
  905. mp = ___get_dma_pool(bush);
  906. if (!mp)
  907. mp = ___cre_dma_pool(bush);
  908. if (mp)
  909. m = __m_calloc(mp, size, name);
  910. if (mp && !mp->nump)
  911. ___del_dma_pool(mp);
  912. NCR_UNLOCK_DRIVER(flags);
  913. return m;
  914. }
  915. static void __m_free_dma(m_bush_t bush, void *m, int size, char *name)
  916. {
  917. u_long flags;
  918. struct m_pool *mp;
  919. NCR_LOCK_DRIVER(flags);
  920. mp = ___get_dma_pool(bush);
  921. if (mp)
  922. __m_free(mp, m, size, name);
  923. if (mp && !mp->nump)
  924. ___del_dma_pool(mp);
  925. NCR_UNLOCK_DRIVER(flags);
  926. }
  927. static m_addr_t __vtobus(m_bush_t bush, void *m)
  928. {
  929. u_long flags;
  930. m_pool_s *mp;
  931. int hc = VTOB_HASH_CODE(m);
  932. m_vtob_s *vp = 0;
  933. m_addr_t a = ((m_addr_t) m) & ~MEMO_CLUSTER_MASK;
  934. NCR_LOCK_DRIVER(flags);
  935. mp = ___get_dma_pool(bush);
  936. if (mp) {
  937. vp = mp->vtob[hc];
  938. while (vp && (m_addr_t) vp->vaddr != a)
  939. vp = vp->next;
  940. }
  941. NCR_UNLOCK_DRIVER(flags);
  942. return vp ? vp->baddr + (((m_addr_t) m) - a) : 0;
  943. }
  944. #endif /* SCSI_NCR_DYNAMIC_DMA_MAPPING */
  945. #define _m_calloc_dma(np, s, n) __m_calloc_dma(np->pdev, s, n)
  946. #define _m_free_dma(np, p, s, n) __m_free_dma(np->pdev, p, s, n)
  947. #define m_calloc_dma(s, n) _m_calloc_dma(np, s, n)
  948. #define m_free_dma(p, s, n) _m_free_dma(np, p, s, n)
  949. #define _vtobus(np, p) __vtobus(np->pdev, p)
  950. #define vtobus(p) _vtobus(np, p)
  951. /*
  952.  *  Deal with DMA mapping/unmapping.
  953.  */
  954. #ifndef SCSI_NCR_DYNAMIC_DMA_MAPPING
  955. /* Linux versions prior to pci bus iommu kernel interface */
  956. #define __unmap_scsi_data(pdev, cmd) do {; } while (0)
  957. #define __map_scsi_single_data(pdev, cmd) (__vtobus(pdev,(cmd)->request_buffer))
  958. #define __map_scsi_sg_data(pdev, cmd) ((cmd)->use_sg)
  959. #define __sync_scsi_data(pdev, cmd) do {; } while (0)
  960. #define scsi_sg_dma_address(sc) vtobus((sc)->address)
  961. #define scsi_sg_dma_len(sc) ((sc)->length)
  962. #else
  963. /* Linux version with pci bus iommu kernel interface */
  964. /* To keep track of the dma mapping (sg/single) that has been set */
  965. #define __data_mapped(cmd) (cmd)->SCp.phase
  966. #define __data_mapping(cmd) (cmd)->SCp.dma_handle
  967. static void __unmap_scsi_data(pcidev_t pdev, Scsi_Cmnd *cmd)
  968. {
  969. int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
  970. switch(__data_mapped(cmd)) {
  971. case 2:
  972. pci_unmap_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir);
  973. break;
  974. case 1:
  975. pci_unmap_page(pdev, __data_mapping(cmd),
  976.        cmd->request_bufflen, dma_dir);
  977. break;
  978. }
  979. __data_mapped(cmd) = 0;
  980. }
  981. static dma_addr_t __map_scsi_single_data(pcidev_t pdev, Scsi_Cmnd *cmd)
  982. {
  983. dma_addr_t mapping;
  984. int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
  985. if (cmd->request_bufflen == 0)
  986. return 0;
  987. mapping = pci_map_page(pdev,
  988.        virt_to_page(cmd->request_buffer),
  989.        ((unsigned long)cmd->request_buffer &
  990. ~PAGE_MASK),
  991.        cmd->request_bufflen, dma_dir);
  992. __data_mapped(cmd) = 1;
  993. __data_mapping(cmd) = mapping;
  994. return mapping;
  995. }
  996. static int __map_scsi_sg_data(pcidev_t pdev, Scsi_Cmnd *cmd)
  997. {
  998. int use_sg;
  999. int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
  1000. if (cmd->use_sg == 0)
  1001. return 0;
  1002. use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir);
  1003. __data_mapped(cmd) = 2;
  1004. __data_mapping(cmd) = use_sg;
  1005. return use_sg;
  1006. }
  1007. static void __sync_scsi_data(pcidev_t pdev, Scsi_Cmnd *cmd)
  1008. {
  1009. int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
  1010. switch(__data_mapped(cmd)) {
  1011. case 2:
  1012. pci_dma_sync_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir);
  1013. break;
  1014. case 1:
  1015. pci_dma_sync_single(pdev, __data_mapping(cmd),
  1016.     cmd->request_bufflen, dma_dir);
  1017. break;
  1018. }
  1019. }
  1020. #define scsi_sg_dma_address(sc) sg_dma_address(sc)
  1021. #define scsi_sg_dma_len(sc) sg_dma_len(sc)
  1022. #endif /* SCSI_NCR_DYNAMIC_DMA_MAPPING */
  1023. #define unmap_scsi_data(np, cmd) __unmap_scsi_data(np->pdev, cmd)
  1024. #define map_scsi_single_data(np, cmd) __map_scsi_single_data(np->pdev, cmd)
  1025. #define map_scsi_sg_data(np, cmd) __map_scsi_sg_data(np->pdev, cmd)
  1026. #define sync_scsi_data(np, cmd) __sync_scsi_data(np->pdev, cmd)
  1027. /*
  1028.  * Print out some buffer.
  1029.  */
  1030. static void ncr_print_hex(u_char *p, int n)
  1031. {
  1032. while (n-- > 0)
  1033. printk (" %x", *p++);
  1034. }
  1035. static void ncr_printl_hex(char *label, u_char *p, int n)
  1036. {
  1037. printk("%s", label);
  1038. ncr_print_hex(p, n);
  1039. printk (".n");
  1040. }
  1041. /*
  1042. ** Transfer direction
  1043. **
  1044. ** Until some linux kernel version near 2.3.40, low-level scsi 
  1045. ** drivers were not told about data transfer direction.
  1046. ** We check the existence of this feature that has been expected 
  1047. ** for a _long_ time by all SCSI driver developers by just 
  1048. ** testing against the definition of SCSI_DATA_UNKNOWN. Indeed 
  1049. ** this is a hack, but testing against a kernel version would 
  1050. ** have been a shame. ;-)
  1051. */
  1052. #ifdef SCSI_DATA_UNKNOWN
  1053. #define scsi_data_direction(cmd) (cmd->sc_data_direction)
  1054. #else
  1055. #define SCSI_DATA_UNKNOWN 0
  1056. #define SCSI_DATA_WRITE 1
  1057. #define SCSI_DATA_READ 2
  1058. #define SCSI_DATA_NONE 3
  1059. static __inline__ int scsi_data_direction(Scsi_Cmnd *cmd)
  1060. {
  1061. int direction;
  1062. switch((int) cmd->cmnd[0]) {
  1063. case 0x08:  /* READ(6) 08 */
  1064. case 0x28:  /* READ(10) 28 */
  1065. case 0xA8:  /* READ(12) A8 */
  1066. direction = SCSI_DATA_READ;
  1067. break;
  1068. case 0x0A:  /* WRITE(6) 0A */
  1069. case 0x2A:  /* WRITE(10) 2A */
  1070. case 0xAA:  /* WRITE(12) AA */
  1071. direction = SCSI_DATA_WRITE;
  1072. break;
  1073. default:
  1074. direction = SCSI_DATA_UNKNOWN;
  1075. break;
  1076. }
  1077. return direction;
  1078. }
  1079. #endif /* SCSI_DATA_UNKNOWN */
  1080. /*
  1081. ** Head of list of NCR boards
  1082. **
  1083. ** For kernel version < 1.3.70, host is retrieved by its irq level.
  1084. ** For later kernels, the internal host control block address 
  1085. ** (struct ncb) is used as device id parameter of the irq stuff.
  1086. */
  1087. static struct Scsi_Host *first_host = NULL;
  1088. /*
  1089. ** /proc directory entry and proc_info function
  1090. */
  1091. #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27)
  1092. static struct proc_dir_entry proc_scsi_sym53c8xx = {
  1093.     PROC_SCSI_SYM53C8XX, 9, NAME53C8XX,
  1094.     S_IFDIR | S_IRUGO | S_IXUGO, 2
  1095. };
  1096. #endif
  1097. #ifdef SCSI_NCR_PROC_INFO_SUPPORT
  1098. static int sym53c8xx_proc_info(char *buffer, char **start, off_t offset,
  1099. int length, int hostno, int func);
  1100. #endif
  1101. /*
  1102. ** Driver setup.
  1103. **
  1104. ** This structure is initialized from linux config options.
  1105. ** It can be overridden at boot-up by the boot command line.
  1106. */
  1107. static struct ncr_driver_setup
  1108. driver_setup = SCSI_NCR_DRIVER_SETUP;
  1109. #ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
  1110. static struct ncr_driver_setup
  1111. driver_safe_setup __initdata = SCSI_NCR_DRIVER_SAFE_SETUP;
  1112. # ifdef MODULE
  1113. char *sym53c8xx = 0; /* command line passed by insmod */
  1114. #  if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,30)
  1115. MODULE_PARM(sym53c8xx, "s");
  1116. #  endif
  1117. # endif
  1118. #endif
  1119. /*
  1120. ** Other Linux definitions
  1121. */
  1122. #define SetScsiResult(cmd, h_sts, s_sts) 
  1123. cmd->result = (((h_sts) << 16) + ((s_sts) & 0x7f))
  1124. /* We may have to remind our amnesiac SCSI layer of the reason of the abort */
  1125. #if 0
  1126. #define SetScsiAbortResult(cmd)
  1127.   SetScsiResult(
  1128.     cmd, 
  1129.     (cmd)->abort_reason == DID_TIME_OUT ? DID_TIME_OUT : DID_ABORT, 
  1130.     0xff)
  1131. #else
  1132. #define SetScsiAbortResult(cmd) SetScsiResult(cmd, DID_ABORT, 0xff)
  1133. #endif
  1134. static void sym53c8xx_select_queue_depths(
  1135. struct Scsi_Host *host, struct scsi_device *devlist);
  1136. static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
  1137. static void sym53c8xx_timeout(unsigned long np);
  1138. #define initverbose (driver_setup.verbose)
  1139. #define bootverbose (np->verbose)
  1140. #ifdef SCSI_NCR_NVRAM_SUPPORT
  1141. static u_char Tekram_sync[16] __initdata =
  1142. {25,31,37,43, 50,62,75,125, 12,15,18,21, 6,7,9,10};
  1143. #endif /* SCSI_NCR_NVRAM_SUPPORT */
  1144. /*
  1145. ** Structures used by sym53c8xx_detect/sym53c8xx_pci_init to 
  1146. ** transmit device configuration to the ncr_attach() function.
  1147. */
  1148. typedef struct {
  1149. int bus;
  1150. u_char device_fn;
  1151. u_long base;
  1152. u_long base_2;
  1153. u_long io_port;
  1154. u_long base_c;
  1155. u_long base_2_c;
  1156. int irq;
  1157. /* port and reg fields to use INB, OUTB macros */
  1158. u_long base_io;
  1159. volatile struct ncr_reg *reg;
  1160. } ncr_slot;
  1161. typedef struct {
  1162. int type;
  1163. #define SCSI_NCR_SYMBIOS_NVRAM (1)
  1164. #define SCSI_NCR_TEKRAM_NVRAM (2)
  1165. #ifdef SCSI_NCR_NVRAM_SUPPORT
  1166. union {
  1167. Symbios_nvram Symbios;
  1168. Tekram_nvram Tekram;
  1169. } data;
  1170. #endif
  1171. } ncr_nvram;
  1172. /*
  1173. ** Structure used by sym53c8xx_detect/sym53c8xx_pci_init
  1174. ** to save data on each detected board for ncr_attach().
  1175. */
  1176. typedef struct {
  1177. pcidev_t  pdev;
  1178. ncr_slot  slot;
  1179. ncr_chip  chip;
  1180. ncr_nvram *nvram;
  1181. u_char host_id;
  1182. #ifdef SCSI_NCR_PQS_PDS_SUPPORT
  1183. u_char pqs_pds;
  1184. #endif
  1185. int attach_done;
  1186. } ncr_device;
  1187. /*==========================================================
  1188. **
  1189. ** assert ()
  1190. **
  1191. **==========================================================
  1192. **
  1193. ** modified copy from 386bsd:/usr/include/sys/assert.h
  1194. **
  1195. **----------------------------------------------------------
  1196. */
  1197. #define assert(expression) { 
  1198. if (!(expression)) { 
  1199. (void)panic( 
  1200. "assertion "%s" failed: file "%s", line %dn", 
  1201. #expression, 
  1202. __FILE__, __LINE__); 
  1203. }
  1204. /*==========================================================
  1205. **
  1206. ** Command control block states.
  1207. **
  1208. **==========================================================
  1209. */
  1210. #define HS_IDLE (0)
  1211. #define HS_BUSY (1)
  1212. #define HS_NEGOTIATE (2) /* sync/wide data transfer*/
  1213. #define HS_DISCONNECT (3) /* Disconnected by target */
  1214. #define HS_DONEMASK (0x80)
  1215. #define HS_COMPLETE (4|HS_DONEMASK)
  1216. #define HS_SEL_TIMEOUT (5|HS_DONEMASK) /* Selection timeout      */
  1217. #define HS_RESET (6|HS_DONEMASK) /* SCSI reset           */
  1218. #define HS_ABORTED (7|HS_DONEMASK) /* Transfer aborted       */
  1219. #define HS_TIMEOUT (8|HS_DONEMASK) /* Software timeout       */
  1220. #define HS_FAIL (9|HS_DONEMASK) /* SCSI or PCI bus errors */
  1221. #define HS_UNEXPECTED (10|HS_DONEMASK)/* Unexpected disconnect  */
  1222. #define DSA_INVALID 0xffffffff
  1223. /*==========================================================
  1224. **
  1225. ** Software Interrupt Codes
  1226. **
  1227. **==========================================================
  1228. */
  1229. #define SIR_BAD_STATUS (1)
  1230. #define SIR_SEL_ATN_NO_MSG_OUT (2)
  1231. #define SIR_MSG_RECEIVED (3)
  1232. #define SIR_MSG_WEIRD (4)
  1233. #define SIR_NEGO_FAILED (5)
  1234. #define SIR_NEGO_PROTO (6)
  1235. #define SIR_SCRIPT_STOPPED (7)
  1236. #define SIR_REJECT_TO_SEND (8)
  1237. #define SIR_SWIDE_OVERRUN (9)
  1238. #define SIR_SODL_UNDERRUN (10)
  1239. #define SIR_RESEL_NO_MSG_IN (11)
  1240. #define SIR_RESEL_NO_IDENTIFY (12)
  1241. #define SIR_RESEL_BAD_LUN (13)
  1242. #define SIR_TARGET_SELECTED (14)
  1243. #define SIR_RESEL_BAD_I_T_L (15)
  1244. #define SIR_RESEL_BAD_I_T_L_Q (16)
  1245. #define SIR_ABORT_SENT (17)
  1246. #define SIR_RESEL_ABORTED (18)
  1247. #define SIR_MSG_OUT_DONE (19)
  1248. #define SIR_AUTO_SENSE_DONE (20)
  1249. #define SIR_DUMMY_INTERRUPT (21)
  1250. #define SIR_DATA_OVERRUN (22)
  1251. #define SIR_BAD_PHASE (23)
  1252. #define SIR_MAX (23)
  1253. /*==========================================================
  1254. **
  1255. ** Extended error bits.
  1256. ** xerr_status field of struct ccb.
  1257. **
  1258. **==========================================================
  1259. */
  1260. #define XE_EXTRA_DATA (1) /* unexpected data phase  */
  1261. #define XE_BAD_PHASE (2) /* illegal phase (4/5)  */
  1262. #define XE_PARITY_ERR (4) /* unrecovered SCSI parity error */
  1263. #define XE_SODL_UNRUN   (1<<3)
  1264. #define XE_SWIDE_OVRUN  (1<<4)
  1265. /*==========================================================
  1266. **
  1267. ** Negotiation status.
  1268. ** nego_status field of struct ccb.
  1269. **
  1270. **==========================================================
  1271. */
  1272. #define NS_NOCHANGE (0)
  1273. #define NS_SYNC (1)
  1274. #define NS_WIDE (2)
  1275. #define NS_PPR (4)
  1276. /*==========================================================
  1277. **
  1278. ** "Special features" of targets.
  1279. ** quirks field of struct tcb.
  1280. ** actualquirks field of struct ccb.
  1281. **
  1282. **==========================================================
  1283. */
  1284. #define QUIRK_AUTOSAVE (0x01)
  1285. /*==========================================================
  1286. **
  1287. ** Capability bits in Inquire response byte 7.
  1288. **
  1289. **==========================================================
  1290. */
  1291. #define INQ7_QUEUE (0x02)
  1292. #define INQ7_SYNC (0x10)
  1293. #define INQ7_WIDE16 (0x20)
  1294. /*==========================================================
  1295. **
  1296. ** A CCB hashed table is used to retrieve CCB address 
  1297. ** from DSA value.
  1298. **
  1299. **==========================================================
  1300. */
  1301. #define CCB_HASH_SHIFT 8
  1302. #define CCB_HASH_SIZE (1UL << CCB_HASH_SHIFT)
  1303. #define CCB_HASH_MASK (CCB_HASH_SIZE-1)
  1304. #define CCB_HASH_CODE(dsa) (((dsa) >> 11) & CCB_HASH_MASK)
  1305. /*==========================================================
  1306. **
  1307. ** Declaration of structs.
  1308. **
  1309. **==========================================================
  1310. */
  1311. struct tcb;
  1312. struct lcb;
  1313. struct ccb;
  1314. struct ncb;
  1315. struct script;
  1316. typedef struct ncb * ncb_p;
  1317. typedef struct tcb * tcb_p;
  1318. typedef struct lcb * lcb_p;
  1319. typedef struct ccb * ccb_p;
  1320. struct link {
  1321. ncrcmd l_cmd;
  1322. ncrcmd l_paddr;
  1323. };
  1324. struct usrcmd {
  1325. u_long target;
  1326. u_long lun;
  1327. u_long data;
  1328. u_long cmd;
  1329. };
  1330. #define UC_SETSYNC      10
  1331. #define UC_SETTAGS 11
  1332. #define UC_SETDEBUG 12
  1333. #define UC_SETORDER 13
  1334. #define UC_SETWIDE 14
  1335. #define UC_SETFLAG 15
  1336. #define UC_SETVERBOSE 17
  1337. #define UC_RESETDEV 18
  1338. #define UC_CLEARDEV 19
  1339. #define UF_TRACE (0x01)
  1340. #define UF_NODISC (0x02)
  1341. #define UF_NOSCAN (0x04)
  1342. /*========================================================================
  1343. **
  1344. ** Declaration of structs: target control block
  1345. **
  1346. **========================================================================
  1347. */
  1348. struct tcb {
  1349. /*----------------------------------------------------------------
  1350. ** LUN tables.
  1351. ** An array of bus addresses is used on reselection by 
  1352. ** the SCRIPT.
  1353. **----------------------------------------------------------------
  1354. */
  1355. u_int32 *luntbl; /* lcbs bus address table */
  1356. u_int32 b_luntbl; /* bus address of this table */
  1357. u_int32 b_lun0; /* bus address of lun0 */
  1358. lcb_p l0p; /* lcb of LUN #0 (normal case) */
  1359. #if MAX_LUN > 1
  1360. lcb_p *lmp; /* Other lcb's [1..MAX_LUN] */
  1361. #endif
  1362. /*----------------------------------------------------------------
  1363. ** Target capabilities.
  1364. **----------------------------------------------------------------
  1365. */
  1366. u_char inq_done; /* Target capabilities received */
  1367. u_char inq_byte7; /* Contains these capabilities */
  1368. /*----------------------------------------------------------------
  1369. ** Some flags.
  1370. **----------------------------------------------------------------
  1371. */
  1372. u_char to_reset; /* This target is to be reset */
  1373. /*----------------------------------------------------------------
  1374. ** Pointer to the ccb used for negotiation.
  1375. ** Prevent from starting a negotiation for all queued commands 
  1376. ** when tagged command queuing is enabled.
  1377. **----------------------------------------------------------------
  1378. */
  1379. ccb_p   nego_cp;
  1380. /*----------------------------------------------------------------
  1381. ** negotiation of wide and synch transfer and device quirks.
  1382. ** sval, wval and uval are read from SCRIPTS and so have alignment 
  1383. ** constraints.
  1384. **----------------------------------------------------------------
  1385. */
  1386. /*0*/ u_char uval;
  1387. /*1*/ u_char sval;
  1388. /*2*/ u_char filler2;
  1389. /*3*/ u_char wval;
  1390. u_short period;
  1391. u_char minsync;
  1392. u_char maxoffs;
  1393. u_char quirks;
  1394. u_char widedone;
  1395. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1396. u_char ic_min_sync;
  1397. u_char ic_max_width;
  1398. u_char ic_done;
  1399. #endif
  1400. u_char ic_maximums_set;
  1401. u_char ppr_negotiation;
  1402. /*----------------------------------------------------------------
  1403. ** User settable limits and options.
  1404. ** These limits are read from the NVRAM if present.
  1405. **----------------------------------------------------------------
  1406. */
  1407. u_char usrsync;
  1408. u_char usrwide;
  1409. u_short usrtags;
  1410. u_char usrflag;
  1411. };
  1412. /*========================================================================
  1413. **
  1414. ** Declaration of structs: lun control block
  1415. **
  1416. **========================================================================
  1417. */
  1418. struct lcb {
  1419. /*----------------------------------------------------------------
  1420. ** On reselection, SCRIPTS use this value as a JUMP address 
  1421. ** after the IDENTIFY has been successfully received.
  1422. ** This field is set to 'resel_tag' if TCQ is enabled and 
  1423. ** to 'resel_notag' if TCQ is disabled.
  1424. ** (Must be at zero due to bad lun handling on reselection)
  1425. **----------------------------------------------------------------
  1426. */
  1427. /*0*/ u_int32 resel_task;
  1428. /*----------------------------------------------------------------
  1429. ** Task table used by the script processor to retrieve the 
  1430. ** task corresponding to a reselected nexus. The TAG is used 
  1431. ** as offset to determine the corresponding entry.
  1432. ** Each entry contains the associated CCB bus address.
  1433. **----------------------------------------------------------------
  1434. */
  1435. u_int32 tasktbl_0; /* Used if TCQ not enabled */
  1436. u_int32 *tasktbl;
  1437. u_int32 b_tasktbl;
  1438. /*----------------------------------------------------------------
  1439. ** CCB queue management.
  1440. **----------------------------------------------------------------
  1441. */
  1442. XPT_QUEHEAD busy_ccbq; /* Queue of busy CCBs */
  1443. XPT_QUEHEAD wait_ccbq; /* Queue of waiting for IO CCBs */
  1444. u_short busyccbs; /* CCBs busy for this lun */
  1445. u_short queuedccbs; /* CCBs queued to the controller*/
  1446. u_short queuedepth; /* Queue depth for this lun */
  1447. u_short scdev_depth; /* SCSI device queue depth */
  1448. u_short maxnxs; /* Max possible nexuses */
  1449. /*----------------------------------------------------------------
  1450. ** Control of tagged command queuing.
  1451. ** Tags allocation is performed using a circular buffer.
  1452. ** This avoids using a loop for tag allocation.
  1453. **----------------------------------------------------------------
  1454. */
  1455. u_short ia_tag; /* Tag allocation index */
  1456. u_short if_tag; /* Tag release index */
  1457. u_char *cb_tags; /* Circular tags buffer */
  1458. u_char inq_byte7; /* Store unit CmdQ capability */
  1459. u_char usetags; /* Command queuing is active */
  1460. u_char to_clear; /* User wants to clear all tasks*/
  1461. u_short maxtags; /* Max NR of tags asked by user */
  1462. u_short numtags; /* Current number of tags */
  1463. /*----------------------------------------------------------------
  1464. ** QUEUE FULL and ORDERED tag control.
  1465. **----------------------------------------------------------------
  1466. */
  1467. u_short num_good; /* Nr of GOOD since QUEUE FULL */
  1468. u_short tags_sum[2]; /* Tags sum counters */
  1469. u_char tags_si; /* Current index to tags sum */
  1470. u_long tags_stime; /* Last time we switch tags_sum */
  1471. };
  1472. /*========================================================================
  1473. **
  1474. **      Declaration of structs: actions for a task.
  1475. **
  1476. **========================================================================
  1477. **
  1478. ** It is part of the CCB and is called by the scripts processor to 
  1479. ** start or restart the data structure (nexus).
  1480. **
  1481. **------------------------------------------------------------------------
  1482. */
  1483. struct action {
  1484. u_int32 start;
  1485. u_int32 restart;
  1486. };
  1487. /*========================================================================
  1488. **
  1489. **      Declaration of structs: Phase mismatch context.
  1490. **
  1491. **========================================================================
  1492. **
  1493. ** It is part of the CCB and is used as parameters for the DATA 
  1494. ** pointer. We need two contexts to handle correctly the SAVED 
  1495. ** DATA POINTER.
  1496. **
  1497. **------------------------------------------------------------------------
  1498. */
  1499. struct pm_ctx {
  1500. struct scr_tblmove sg; /* Updated interrupted SG block */
  1501. u_int32 ret; /* SCRIPT return address */
  1502. };
  1503. /*========================================================================
  1504. **
  1505. **      Declaration of structs:     global HEADER.
  1506. **
  1507. **========================================================================
  1508. **
  1509. ** In earlier driver versions, this substructure was copied from the 
  1510. ** ccb to a global address after selection (or reselection) and copied 
  1511. ** back before disconnect. Since we are now using LOAD/STORE DSA 
  1512. ** RELATIVE instructions, the script is able to access directly these 
  1513. ** fields, and so, this header is no more copied.
  1514. **
  1515. **------------------------------------------------------------------------
  1516. */
  1517. struct head {
  1518. /*----------------------------------------------------------------
  1519. ** Start and restart SCRIPTS addresses (must be at 0).
  1520. **----------------------------------------------------------------
  1521. */
  1522. struct action go;
  1523. /*----------------------------------------------------------------
  1524. ** Saved data pointer.
  1525. ** Points to the position in the script responsible for the
  1526. ** actual transfer of data.
  1527. ** It's written after reception of a SAVE_DATA_POINTER message.
  1528. ** The goalpointer points after the last transfer command.
  1529. **----------------------------------------------------------------
  1530. */
  1531. u_int32 savep;
  1532. u_int32 lastp;
  1533. u_int32 goalp;
  1534. /*----------------------------------------------------------------
  1535. ** Alternate data pointer.
  1536. ** They are copied back to savep/lastp/goalp by the SCRIPTS 
  1537. ** when the direction is unknown and the device claims data out.
  1538. **----------------------------------------------------------------
  1539. */
  1540. u_int32 wlastp;
  1541. u_int32 wgoalp;
  1542. /*----------------------------------------------------------------
  1543. ** Status fields.
  1544. **----------------------------------------------------------------
  1545. */
  1546. u_char status[4]; /* host status */
  1547. };
  1548. /*
  1549. ** LUN control block lookup.
  1550. ** We use a direct pointer for LUN #0, and a table of pointers 
  1551. ** which is only allocated for devices that support LUN(s) > 0.
  1552. */
  1553. #if MAX_LUN <= 1
  1554. #define ncr_lp(np, tp, lun) (!lun) ? (tp)->l0p : 0
  1555. #else
  1556. #define ncr_lp(np, tp, lun) 
  1557. (!lun) ? (tp)->l0p : (tp)->lmp ? (tp)->lmp[(lun)] : 0
  1558. #endif
  1559. /*
  1560. ** The status bytes are used by the host and the script processor.
  1561. **
  1562. ** The four bytes (status[4]) are copied to the scratchb register
  1563. ** (declared as scr0..scr3 in ncr_reg.h) just after the select/reselect,
  1564. ** and copied back just after disconnecting.
  1565. ** Inside the script the XX_REG are used.
  1566. */
  1567. /*
  1568. ** Last four bytes (script)
  1569. */
  1570. #define  QU_REG scr0
  1571. #define  HS_REG scr1
  1572. #define  HS_PRT nc_scr1
  1573. #define  SS_REG scr2
  1574. #define  SS_PRT nc_scr2
  1575. #define  HF_REG scr3
  1576. #define  HF_PRT nc_scr3
  1577. /*
  1578. ** Last four bytes (host)
  1579. */
  1580. #define  actualquirks  phys.header.status[0]
  1581. #define  host_status   phys.header.status[1]
  1582. #define  scsi_status   phys.header.status[2]
  1583. #define  host_flags    phys.header.status[3]
  1584. /*
  1585. ** Host flags
  1586. */
  1587. #define HF_IN_PM0 1u
  1588. #define HF_IN_PM1 (1u<<1)
  1589. #define HF_ACT_PM (1u<<2)
  1590. #define HF_DP_SAVED (1u<<3)
  1591. #define HF_AUTO_SENSE (1u<<4)
  1592. #define HF_DATA_IN (1u<<5)
  1593. #define HF_PM_TO_C (1u<<6)
  1594. #define HF_EXT_ERR (1u<<7)
  1595. #ifdef SCSI_NCR_IARB_SUPPORT
  1596. #define HF_HINT_IARB (1u<<7)
  1597. #endif
  1598. /*
  1599. ** This one is stolen from QU_REG.:)
  1600. */
  1601. #define HF_DATA_ST (1u<<7)
  1602. /*==========================================================
  1603. **
  1604. **      Declaration of structs:     Data structure block
  1605. **
  1606. **==========================================================
  1607. **
  1608. ** During execution of a ccb by the script processor,
  1609. ** the DSA (data structure address) register points
  1610. ** to this substructure of the ccb.
  1611. ** This substructure contains the header with
  1612. ** the script-processor-changable data and
  1613. ** data blocks for the indirect move commands.
  1614. **
  1615. **----------------------------------------------------------
  1616. */
  1617. struct dsb {
  1618. /*
  1619. ** Header.
  1620. */
  1621. struct head header;
  1622. /*
  1623. ** Table data for Script
  1624. */
  1625. struct scr_tblsel  select;
  1626. struct scr_tblmove smsg  ;
  1627. struct scr_tblmove smsg_ext ;
  1628. struct scr_tblmove cmd   ;
  1629. struct scr_tblmove sense ;
  1630. struct scr_tblmove wresid;
  1631. struct scr_tblmove data [MAX_SCATTER];
  1632. /*
  1633. ** Phase mismatch contexts.
  1634. ** We need two to handle correctly the
  1635. ** SAVED DATA POINTER.
  1636. */
  1637. struct pm_ctx pm0;
  1638. struct pm_ctx pm1;
  1639. };
  1640. /*========================================================================
  1641. **
  1642. **      Declaration of structs:     Command control block.
  1643. **
  1644. **========================================================================
  1645. */
  1646. struct ccb {
  1647. /*----------------------------------------------------------------
  1648. ** This is the data structure which is pointed by the DSA 
  1649. ** register when it is executed by the script processor.
  1650. ** It must be the first entry.
  1651. **----------------------------------------------------------------
  1652. */
  1653. struct dsb phys;
  1654. /*----------------------------------------------------------------
  1655. ** The general SCSI driver provides a
  1656. ** pointer to a control block.
  1657. **----------------------------------------------------------------
  1658. */
  1659. Scsi_Cmnd *cmd; /* SCSI command  */
  1660. u_char cdb_buf[16]; /* Copy of CDB */
  1661. u_char sense_buf[64];
  1662. int data_len; /* Total data length */
  1663. int segments; /* Number of SG segments */
  1664. /*----------------------------------------------------------------
  1665. ** Message areas.
  1666. ** We prepare a message to be sent after selection.
  1667. ** We may use a second one if the command is rescheduled 
  1668. ** due to CHECK_CONDITION or QUEUE FULL status.
  1669. **      Contents are IDENTIFY and SIMPLE_TAG.
  1670. ** While negotiating sync or wide transfer,
  1671. ** a SDTR or WDTR message is appended.
  1672. **----------------------------------------------------------------
  1673. */
  1674. u_char scsi_smsg [12];
  1675. u_char scsi_smsg2[12];
  1676. /*----------------------------------------------------------------
  1677. ** Miscellaneous status'.
  1678. **----------------------------------------------------------------
  1679. */
  1680. u_char nego_status; /* Negotiation status */
  1681. u_char xerr_status; /* Extended error flags */
  1682. u_int32 extra_bytes; /* Extraneous bytes transferred */
  1683. /*----------------------------------------------------------------
  1684. ** Saved info for auto-sense
  1685. **----------------------------------------------------------------
  1686. */
  1687. u_char sv_scsi_status;
  1688. u_char sv_xerr_status;
  1689. /*----------------------------------------------------------------
  1690. ** Other fields.
  1691. **----------------------------------------------------------------
  1692. */
  1693. u_long p_ccb; /* BUS address of this CCB */
  1694. u_char sensecmd[6]; /* Sense command */
  1695. u_char to_abort; /* This CCB is to be aborted */
  1696. u_short tag; /* Tag for this transfer */
  1697. /*  NO_TAG means no tag */
  1698. u_char tags_si; /* Lun tags sum index (0,1) */
  1699. u_char target;
  1700. u_char lun;
  1701. u_short queued;
  1702. ccb_p link_ccb; /* Host adapter CCB chain */
  1703. ccb_p link_ccbh; /* Host adapter CCB hash chain */
  1704. XPT_QUEHEAD link_ccbq; /* Link to unit CCB queue */
  1705. u_int32 startp; /* Initial data pointer */
  1706. u_int32 lastp0; /* Initial 'lastp' */
  1707. int ext_sg; /* Extreme data pointer, used */
  1708. int ext_ofs; /*  to calculate the residual. */
  1709. int resid;
  1710. };
  1711. #define CCB_PHYS(cp,lbl) (cp->p_ccb + offsetof(struct ccb, lbl))
  1712. /*========================================================================
  1713. **
  1714. **      Declaration of structs:     NCR device descriptor
  1715. **
  1716. **========================================================================
  1717. */
  1718. struct ncb {
  1719. /*----------------------------------------------------------------
  1720. ** Idle task and invalid task actions and their bus
  1721. ** addresses.
  1722. **----------------------------------------------------------------
  1723. */
  1724. struct action idletask;
  1725. struct action notask;
  1726. struct action bad_i_t_l;
  1727. struct action bad_i_t_l_q;
  1728. u_long p_idletask;
  1729. u_long p_notask;
  1730. u_long p_bad_i_t_l;
  1731. u_long p_bad_i_t_l_q;
  1732. /*----------------------------------------------------------------
  1733. ** Dummy lun table to protect us against target returning bad  
  1734. ** lun number on reselection.
  1735. **----------------------------------------------------------------
  1736. */
  1737. u_int32 *badluntbl; /* Table physical address */
  1738. u_int32 resel_badlun; /* SCRIPT handler BUS address */
  1739. /*----------------------------------------------------------------
  1740. ** Bit 32-63 of the on-chip RAM bus address in LE format.
  1741. ** The START_RAM64 script loads the MMRS and MMWS from this 
  1742. ** field.
  1743. **----------------------------------------------------------------
  1744. */
  1745. u_int32 scr_ram_seg;
  1746. /*----------------------------------------------------------------
  1747. ** CCBs management queues.
  1748. **----------------------------------------------------------------
  1749. */
  1750. Scsi_Cmnd *waiting_list; /* Commands waiting for a CCB */
  1751. /*  when lcb is not allocated. */
  1752. Scsi_Cmnd *done_list; /* Commands waiting for done()  */
  1753. /* callback to be invoked.      */ 
  1754. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
  1755. spinlock_t smp_lock; /* Lock for SMP threading       */
  1756. #endif
  1757. /*----------------------------------------------------------------
  1758. ** Chip and controller indentification.
  1759. **----------------------------------------------------------------
  1760. */
  1761. int unit; /* Unit number */
  1762. char chip_name[8]; /* Chip name */
  1763. char inst_name[16]; /* ncb instance name */
  1764. /*----------------------------------------------------------------
  1765. ** Initial value of some IO register bits.
  1766. ** These values are assumed to have been set by BIOS, and may 
  1767. ** be used for probing adapter implementation differences.
  1768. **----------------------------------------------------------------
  1769. */
  1770. u_char sv_scntl0, sv_scntl3, sv_dmode, sv_dcntl, sv_ctest3, sv_ctest4,
  1771. sv_ctest5, sv_gpcntl, sv_stest2, sv_stest4, sv_stest1, sv_scntl4;
  1772. /*----------------------------------------------------------------
  1773. ** Actual initial value of IO register bits used by the 
  1774. ** driver. They are loaded at initialisation according to  
  1775. ** features that are to be enabled.
  1776. **----------------------------------------------------------------
  1777. */
  1778. u_char rv_scntl0, rv_scntl3, rv_dmode, rv_dcntl, rv_ctest3, rv_ctest4, 
  1779. rv_ctest5, rv_stest2, rv_ccntl0, rv_ccntl1, rv_scntl4;
  1780. /*----------------------------------------------------------------
  1781. ** Target data.
  1782. ** Target control block bus address array used by the SCRIPT 
  1783. ** on reselection.
  1784. **----------------------------------------------------------------
  1785. */
  1786. struct tcb target[MAX_TARGET];
  1787. u_int32 *targtbl;
  1788. /*----------------------------------------------------------------
  1789. ** Virtual and physical bus addresses of the chip.
  1790. **----------------------------------------------------------------
  1791. */
  1792. #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  1793. u_long base_va; /* MMIO base virtual address */
  1794. u_long base2_va; /* On-chip RAM virtual address */
  1795. #endif
  1796. u_long base_ba; /* MMIO base bus address */
  1797. u_long base_io; /* IO space base address */
  1798. u_long base_ws; /* (MM)IO window size */
  1799. u_long base2_ba; /* On-chip RAM bus address */
  1800. u_long base2_ws; /* On-chip RAM window size */
  1801. u_int irq; /* IRQ number */
  1802. volatile /* Pointer to volatile for  */
  1803. struct ncr_reg *reg; /*  memory mapped IO. */
  1804. /*----------------------------------------------------------------
  1805. ** SCRIPTS virtual and physical bus addresses.
  1806. ** 'script'  is loaded in the on-chip RAM if present.
  1807. ** 'scripth' stays in main memory for all chips except the 
  1808. ** 53C895A and 53C896 that provide 8K on-chip RAM.
  1809. **----------------------------------------------------------------
  1810. */
  1811. struct script *script0; /* Copies of script and scripth */
  1812. struct scripth *scripth0; /*  relocated for this ncb. */
  1813. u_long p_script; /* Actual script and scripth */
  1814. u_long p_scripth; /*  bus addresses. */
  1815. u_long p_scripth0;
  1816. /*----------------------------------------------------------------
  1817. ** General controller parameters and configuration.
  1818. **----------------------------------------------------------------
  1819. */
  1820. pcidev_t pdev;
  1821. u_short device_id; /* PCI device id */
  1822. u_char revision_id; /* PCI device revision id */
  1823. u_char bus; /* PCI BUS number */
  1824. u_char device_fn; /* PCI BUS device and function */
  1825. u_char myaddr; /* SCSI id of the adapter */
  1826. u_char maxburst; /* log base 2 of dwords burst */
  1827. u_char maxwide; /* Maximum transfer width */
  1828. u_char minsync; /* Minimum sync period factor */
  1829. u_char maxsync; /* Maximum sync period factor */
  1830. u_char maxoffs; /* Max scsi offset */
  1831. u_char maxoffs_st; /* Max scsi offset in ST mode */
  1832. u_char multiplier; /* Clock multiplier (1,2,4) */
  1833. u_char clock_divn; /* Number of clock divisors */
  1834. u_long clock_khz; /* SCSI clock frequency in KHz */
  1835. u_int features; /* Chip features map */
  1836. /*----------------------------------------------------------------
  1837. ** Range for the PCI clock frequency measurement result
  1838. ** that ensures the algorithm used by the driver can be 
  1839. ** trusted for the SCSI clock frequency measurement.
  1840. ** (Assuming a PCI clock frequency of 33 MHz).
  1841. **----------------------------------------------------------------
  1842. */
  1843. u_int pciclock_min;
  1844. u_int pciclock_max;
  1845. /*----------------------------------------------------------------
  1846. ** Start queue management.
  1847. ** It is filled up by the host processor and accessed by the 
  1848. ** SCRIPTS processor in order to start SCSI commands.
  1849. **----------------------------------------------------------------
  1850. */
  1851. u_long p_squeue; /* Start queue BUS address */
  1852. u_int32 *squeue; /* Start queue virtual address */
  1853. u_short squeueput; /* Next free slot of the queue */
  1854. u_short actccbs; /* Number of allocated CCBs */
  1855. u_short queuedepth; /* Start queue depth */
  1856. /*----------------------------------------------------------------
  1857. ** Command completion queue.
  1858. ** It is the same size as the start queue to avoid overflow.
  1859. **----------------------------------------------------------------
  1860. */
  1861. u_short dqueueget; /* Next position to scan */
  1862. u_int32 *dqueue; /* Completion (done) queue */
  1863. /*----------------------------------------------------------------
  1864. ** Timeout handler.
  1865. **----------------------------------------------------------------
  1866. */
  1867. struct timer_list timer; /* Timer handler link header */
  1868. u_long lasttime;
  1869. u_long settle_time; /* Resetting the SCSI BUS */
  1870. /*----------------------------------------------------------------
  1871. ** Debugging and profiling.
  1872. **----------------------------------------------------------------
  1873. */
  1874. struct ncr_reg regdump; /* Register dump */
  1875. u_long regtime; /* Time it has been done */
  1876. /*----------------------------------------------------------------
  1877. ** Miscellaneous buffers accessed by the scripts-processor.
  1878. ** They shall be DWORD aligned, because they may be read or 
  1879. ** written with a script command.
  1880. **----------------------------------------------------------------
  1881. */
  1882. u_char msgout[12]; /* Buffer for MESSAGE OUT  */
  1883. u_char msgin [12]; /* Buffer for MESSAGE IN */
  1884. u_int32 lastmsg; /* Last SCSI message sent */
  1885. u_char scratch; /* Scratch for SCSI receive */
  1886. /*----------------------------------------------------------------
  1887. ** Miscellaneous configuration and status parameters.
  1888. **----------------------------------------------------------------
  1889. */
  1890. u_char scsi_mode; /* Current SCSI BUS mode */
  1891. u_char order; /* Tag order to use */
  1892. u_char verbose; /* Verbosity for this controller*/
  1893. u_int32 ncr_cache; /* Used for cache test at init. */
  1894. u_long p_ncb; /* BUS address of this NCB */
  1895. /*----------------------------------------------------------------
  1896. ** CCB lists and queue.
  1897. **----------------------------------------------------------------
  1898. */
  1899. ccb_p ccbh[CCB_HASH_SIZE]; /* CCB hashed by DSA value */
  1900. struct ccb *ccbc; /* CCB chain */
  1901. XPT_QUEHEAD free_ccbq; /* Queue of available CCBs */
  1902. /*----------------------------------------------------------------
  1903. ** IMMEDIATE ARBITRATION (IARB) control.
  1904. ** We keep track in 'last_cp' of the last CCB that has been 
  1905. ** queued to the SCRIPTS processor and clear 'last_cp' when 
  1906. ** this CCB completes. If last_cp is not zero at the moment 
  1907. ** we queue a new CCB, we set a flag in 'last_cp' that is 
  1908. ** used by the SCRIPTS as a hint for setting IARB.
  1909. ** We donnot set more than 'iarb_max' consecutive hints for 
  1910. ** IARB in order to leave devices a chance to reselect.
  1911. ** By the way, any non zero value of 'iarb_max' is unfair. :)
  1912. **----------------------------------------------------------------
  1913. */
  1914. #ifdef SCSI_NCR_IARB_SUPPORT
  1915. struct ccb *last_cp; /* Last queud CCB used for IARB */
  1916. u_short iarb_max; /* Max. # consecutive IARB hints*/
  1917. u_short iarb_count; /* Actual # of these hints */
  1918. #endif
  1919. /*----------------------------------------------------------------
  1920. ** We need the LCB in order to handle disconnections and 
  1921. ** to count active CCBs for task management. So, we use 
  1922. ** a unique CCB for LUNs we donnot have the LCB yet.
  1923. ** This queue normally should have at most 1 element.
  1924. **----------------------------------------------------------------
  1925. */
  1926. XPT_QUEHEAD b0_ccbq;
  1927. /*----------------------------------------------------------------
  1928. ** We use a different scatter function for 896 rev 1.
  1929. **----------------------------------------------------------------
  1930. */
  1931. int (*scatter) (ncb_p, ccb_p, Scsi_Cmnd *);
  1932. /*----------------------------------------------------------------
  1933. ** Command abort handling.
  1934. ** We need to synchronize tightly with the SCRIPTS 
  1935. ** processor in order to handle things correctly.
  1936. **----------------------------------------------------------------
  1937. */
  1938. u_char abrt_msg[4]; /* Message to send buffer */
  1939. struct scr_tblmove abrt_tbl; /* Table for the MOV of it  */
  1940. struct scr_tblsel  abrt_sel; /* Sync params for selection */
  1941. u_char istat_sem; /* Tells the chip to stop (SEM) */
  1942. /*----------------------------------------------------------------
  1943. ** Fields that should be removed or changed.
  1944. **----------------------------------------------------------------
  1945. */
  1946. struct usrcmd user; /* Command from user */
  1947. volatile u_char release_stage; /* Synchronisation stage on release  */
  1948. /*----------------------------------------------------------------
  1949. ** Fields that are used (primarily) for integrity check
  1950. **----------------------------------------------------------------
  1951. */
  1952. unsigned char  check_integrity; /* Enable midlayer integ. check on
  1953.  * bus scan. */
  1954. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1955. unsigned char check_integ_par; /* Set if par or Init. Det. error
  1956.  * used only during integ check */
  1957. #endif
  1958. };
  1959. #define NCB_PHYS(np, lbl)  (np->p_ncb + offsetof(struct ncb, lbl))
  1960. #define NCB_SCRIPT_PHYS(np,lbl)  (np->p_script  + offsetof (struct script, lbl))
  1961. #define NCB_SCRIPTH_PHYS(np,lbl) (np->p_scripth + offsetof (struct scripth,lbl))
  1962. #define NCB_SCRIPTH0_PHYS(np,lbl) (np->p_scripth0+offsetof (struct scripth,lbl))
  1963. /*==========================================================
  1964. **
  1965. **
  1966. **      Script for NCR-Processor.
  1967. **
  1968. ** Use ncr_script_fill() to create the variable parts.
  1969. ** Use ncr_script_copy_and_bind() to make a copy and
  1970. ** bind to physical addresses.
  1971. **
  1972. **
  1973. **==========================================================
  1974. **
  1975. ** We have to know the offsets of all labels before
  1976. ** we reach them (for forward jumps).
  1977. ** Therefore we declare a struct here.
  1978. ** If you make changes inside the script,
  1979. ** DONT FORGET TO CHANGE THE LENGTHS HERE!
  1980. **
  1981. **----------------------------------------------------------
  1982. */
  1983. /*
  1984. ** Script fragments which are loaded into the on-chip RAM 
  1985. ** of 825A, 875, 876, 895, 895A and 896 chips.
  1986. */
  1987. struct script {
  1988. ncrcmd start [ 14];
  1989. ncrcmd getjob_begin [  4];
  1990. ncrcmd getjob_end [  4];
  1991. ncrcmd select [  8];
  1992. ncrcmd wf_sel_done [  2];
  1993. ncrcmd send_ident [  2];
  1994. #ifdef SCSI_NCR_IARB_SUPPORT
  1995. ncrcmd select2 [  8];
  1996. #else
  1997. ncrcmd select2 [  2];
  1998. #endif
  1999. ncrcmd  command [  2];
  2000. ncrcmd  dispatch [ 28];
  2001. ncrcmd  sel_no_cmd [ 10];
  2002. ncrcmd  init [  6];
  2003. ncrcmd  clrack [  4];
  2004. ncrcmd  disp_status [  4];
  2005. ncrcmd  datai_done [ 26];
  2006. ncrcmd  datao_done [ 12];
  2007. ncrcmd  ign_i_w_r_msg [  4];
  2008. ncrcmd  datai_phase [  2];
  2009. ncrcmd  datao_phase [  4];
  2010. ncrcmd  msg_in [  2];
  2011. ncrcmd  msg_in2 [ 10];
  2012. #ifdef SCSI_NCR_IARB_SUPPORT
  2013. ncrcmd  status [ 14];
  2014. #else
  2015. ncrcmd  status [ 10];
  2016. #endif
  2017. ncrcmd  complete [  8];
  2018. #ifdef SCSI_NCR_PCIQ_MAY_REORDER_WRITES
  2019. ncrcmd  complete2 [ 12];
  2020. #else
  2021. ncrcmd  complete2 [ 10];
  2022. #endif
  2023. #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
  2024. ncrcmd done [ 18];
  2025. #else
  2026. ncrcmd done [ 14];
  2027. #endif
  2028. ncrcmd done_end [  2];
  2029. ncrcmd  save_dp [  8];
  2030. ncrcmd  restore_dp [  4];
  2031. ncrcmd  disconnect [ 20];
  2032. #ifdef SCSI_NCR_IARB_SUPPORT
  2033. ncrcmd  idle [  4];
  2034. #else
  2035. ncrcmd  idle [  2];
  2036. #endif
  2037. #ifdef SCSI_NCR_IARB_SUPPORT
  2038. ncrcmd  ungetjob [  6];
  2039. #else
  2040. ncrcmd  ungetjob [  4];
  2041. #endif
  2042. ncrcmd reselect [  4];
  2043. ncrcmd reselected [ 20];
  2044. ncrcmd resel_scntl4 [ 30];
  2045. #if   MAX_TASKS*4 > 512
  2046. ncrcmd resel_tag [ 18];
  2047. #elif MAX_TASKS*4 > 256
  2048. ncrcmd resel_tag [ 12];
  2049. #else
  2050. ncrcmd resel_tag [  8];
  2051. #endif
  2052. ncrcmd resel_go [  6];
  2053. ncrcmd resel_notag [  2];
  2054. ncrcmd resel_dsa [  8];
  2055. ncrcmd  data_in [MAX_SCATTER * SCR_SG_SIZE];
  2056. ncrcmd  data_in2 [  4];
  2057. ncrcmd  data_out [MAX_SCATTER * SCR_SG_SIZE];
  2058. ncrcmd  data_out2 [  4];
  2059. ncrcmd  pm0_data [ 12];
  2060. ncrcmd  pm0_data_out [  6];
  2061. ncrcmd  pm0_data_end [  6];
  2062. ncrcmd  pm1_data [ 12];
  2063. ncrcmd  pm1_data_out [  6];
  2064. ncrcmd  pm1_data_end [  6];
  2065. };
  2066. /*
  2067. ** Script fragments which stay in main memory for all chips 
  2068. ** except for the 895A and 896 that support 8K on-chip RAM.
  2069. */
  2070. struct scripth {
  2071. ncrcmd start64 [  2];
  2072. ncrcmd no_data [  2];
  2073. ncrcmd sel_for_abort [ 18];
  2074. ncrcmd sel_for_abort_1 [  2];
  2075. ncrcmd select_no_atn [  8];
  2076. ncrcmd wf_sel_done_no_atn [ 4];
  2077. ncrcmd msg_in_etc [ 14];
  2078. ncrcmd msg_received [  4];
  2079. ncrcmd msg_weird_seen [  4];
  2080. ncrcmd msg_extended [ 20];
  2081. ncrcmd  msg_bad [  6];
  2082. ncrcmd msg_weird [  4];
  2083. ncrcmd msg_weird1 [  8];
  2084. ncrcmd wdtr_resp [  6];
  2085. ncrcmd send_wdtr [  4];
  2086. ncrcmd sdtr_resp [  6];
  2087. ncrcmd send_sdtr [  4];
  2088. ncrcmd ppr_resp [  6];
  2089. ncrcmd send_ppr [  4];
  2090. ncrcmd nego_bad_phase [  4];
  2091. ncrcmd msg_out [  4];
  2092. ncrcmd msg_out_done [  4];
  2093. ncrcmd data_ovrun [  2];
  2094. ncrcmd data_ovrun1 [ 22];
  2095. ncrcmd data_ovrun2 [  8];
  2096. ncrcmd abort_resel [ 16];
  2097. ncrcmd resend_ident [  4];
  2098. ncrcmd ident_break [  4];
  2099. ncrcmd ident_break_atn [  4];
  2100. ncrcmd sdata_in [  6];
  2101. ncrcmd  data_io [  2];
  2102. ncrcmd  data_io_com [  8];
  2103. ncrcmd  data_io_out [ 12];
  2104. ncrcmd resel_bad_lun [  4];
  2105. ncrcmd bad_i_t_l [  4];
  2106. ncrcmd bad_i_t_l_q [  4];
  2107. ncrcmd bad_status [  6];
  2108. ncrcmd tweak_pmj [ 12];
  2109. ncrcmd pm_handle [ 20];
  2110. ncrcmd pm_handle1 [  4];
  2111. ncrcmd pm_save [  4];
  2112. ncrcmd pm0_save [ 14];
  2113. ncrcmd pm1_save [ 14];
  2114. /* WSR handling */
  2115. #ifdef SYM_DEBUG_PM_WITH_WSR
  2116. ncrcmd  pm_wsr_handle [ 44];
  2117. #else
  2118. ncrcmd  pm_wsr_handle [ 42];
  2119. #endif
  2120. ncrcmd  wsr_ma_helper [  4];
  2121. /* Data area */
  2122. ncrcmd zero [  1];
  2123. ncrcmd scratch [  1];
  2124. ncrcmd scratch1 [  1];
  2125. ncrcmd pm0_data_addr [  1];
  2126. ncrcmd pm1_data_addr [  1];
  2127. ncrcmd saved_dsa [  1];
  2128. ncrcmd saved_drs [  1];
  2129. ncrcmd done_pos [  1];
  2130. ncrcmd startpos [  1];
  2131. ncrcmd targtbl [  1];
  2132. /* End of data area */
  2133. #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  2134. ncrcmd start_ram [  1];
  2135. ncrcmd script0_ba [  4];
  2136. ncrcmd start_ram64 [  3];
  2137. ncrcmd script0_ba64 [  3];
  2138. ncrcmd scripth0_ba64 [  6];
  2139. ncrcmd ram_seg64 [  1];
  2140. #endif
  2141. ncrcmd snooptest [  6];
  2142. ncrcmd snoopend [  2];
  2143. };
  2144. /*==========================================================
  2145. **
  2146. **
  2147. **      Function headers.
  2148. **
  2149. **
  2150. **==========================================================
  2151. */
  2152. static ccb_p ncr_alloc_ccb (ncb_p np);
  2153. static void ncr_complete (ncb_p np, ccb_p cp);
  2154. static void ncr_exception (ncb_p np);
  2155. static void ncr_free_ccb (ncb_p np, ccb_p cp);
  2156. static ccb_p ncr_ccb_from_dsa(ncb_p np, u_long dsa);
  2157. static void ncr_init_tcb (ncb_p np, u_char tn);
  2158. static lcb_p ncr_alloc_lcb (ncb_p np, u_char tn, u_char ln);
  2159. static lcb_p ncr_setup_lcb (ncb_p np, u_char tn, u_char ln,
  2160.  u_char *inq_data);
  2161. static void ncr_getclock (ncb_p np, int mult);
  2162. static u_int ncr_getpciclock (ncb_p np);
  2163. static void ncr_selectclock (ncb_p np, u_char scntl3);
  2164. static ccb_p ncr_get_ccb (ncb_p np, u_char tn, u_char ln);
  2165. static void ncr_init (ncb_p np, int reset, char * msg, u_long code);
  2166. static void ncr_int_sbmc (ncb_p np);
  2167. static void ncr_int_par (ncb_p np, u_short sist);
  2168. static void ncr_int_ma (ncb_p np);
  2169. static void ncr_int_sir (ncb_p np);
  2170. static  void    ncr_int_sto     (ncb_p np);
  2171. static  void    ncr_int_udc     (ncb_p np);
  2172. static void ncr_negotiate (ncb_p np, tcb_p tp);
  2173. static int ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr);
  2174. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  2175. static int ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr);
  2176. #endif
  2177. static void ncr_script_copy_and_bind
  2178. (ncb_p np, ncrcmd *src, ncrcmd *dst, int len);
  2179. static  void    ncr_script_fill (struct script * scr, struct scripth * scripth);
  2180. static int ncr_scatter_896R1 (ncb_p np, ccb_p cp, Scsi_Cmnd *cmd);
  2181. static int ncr_scatter (ncb_p np, ccb_p cp, Scsi_Cmnd *cmd);
  2182. static void ncr_getsync (ncb_p np, u_char sfac, u_char *fakp, u_char *scntl3p);
  2183. static  void    ncr_get_xfer_info(ncb_p np, tcb_p tp, u_char *factor, u_char *offset, u_char *width);
  2184. static void ncr_setsync (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer, u_char scntl4);
  2185. static void  ncr_set_sync_wide_status (ncb_p np, u_char target);
  2186. static void ncr_setup_tags (ncb_p np, u_char tn, u_char ln);
  2187. static void ncr_setwide (ncb_p np, ccb_p cp, u_char wide, u_char ack);
  2188. static void ncr_setsyncwide (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer, u_char scntl4, u_char wide);
  2189. static int ncr_show_msg (u_char * msg);
  2190. static void ncr_print_msg (ccb_p cp, char *label, u_char * msg);
  2191. static int ncr_snooptest (ncb_p np);
  2192. static void ncr_timeout (ncb_p np);
  2193. static  void    ncr_wakeup      (ncb_p np, u_long code);
  2194. static  int     ncr_wakeup_done (ncb_p np);
  2195. static void ncr_start_next_ccb (ncb_p np, lcb_p lp, int maxn);
  2196. static void ncr_put_start_queue(ncb_p np, ccb_p cp);
  2197. static void ncr_chip_reset (ncb_p np);
  2198. static void ncr_soft_reset (ncb_p np);
  2199. static void ncr_start_reset (ncb_p np);
  2200. static int ncr_reset_scsi_bus (ncb_p np, int enab_int, int settle_delay);
  2201. static int ncr_compute_residual (ncb_p np, ccb_p cp);
  2202. #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
  2203. static void ncr_usercmd (ncb_p np);
  2204. #endif
  2205. static int ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device);
  2206. static void ncr_free_resources(ncb_p np);
  2207. static void insert_into_waiting_list(ncb_p np, Scsi_Cmnd *cmd);
  2208. static Scsi_Cmnd *retrieve_from_waiting_list(int to_remove, ncb_p np, Scsi_Cmnd *cmd);
  2209. static void process_waiting_list(ncb_p np, int sts);
  2210. #define remove_from_waiting_list(np, cmd) 
  2211. retrieve_from_waiting_list(1, (np), (cmd))
  2212. #define requeue_waiting_list(np) process_waiting_list((np), DID_OK)
  2213. #define reset_waiting_list(np) process_waiting_list((np), DID_RESET)
  2214. #ifdef SCSI_NCR_NVRAM_SUPPORT
  2215. static  void ncr_get_nvram        (ncr_device *devp, ncr_nvram *nvp);
  2216. static  int sym_read_Tekram_nvram  (ncr_slot *np, u_short device_id,
  2217.         Tekram_nvram *nvram);
  2218. static  int sym_read_Symbios_nvram (ncr_slot *np, Symbios_nvram *nvram);
  2219. #endif
  2220. /*==========================================================
  2221. **
  2222. **
  2223. **      Global static data.
  2224. **
  2225. **
  2226. **==========================================================
  2227. */
  2228. static inline char *ncr_name (ncb_p np)
  2229. {
  2230. return np->inst_name;
  2231. }
  2232. /*==========================================================
  2233. **
  2234. **
  2235. **      Scripts for NCR-Processor.
  2236. **
  2237. **      Use ncr_script_bind for binding to physical addresses.
  2238. **
  2239. **
  2240. **==========================================================
  2241. **
  2242. ** NADDR generates a reference to a field of the controller data.
  2243. ** PADDR generates a reference to another part of the script.
  2244. ** RADDR generates a reference to a script processor register.
  2245. ** FADDR generates a reference to a script processor register
  2246. ** with offset.
  2247. **
  2248. **----------------------------------------------------------
  2249. */
  2250. #define RELOC_SOFTC 0x40000000
  2251. #define RELOC_LABEL 0x50000000
  2252. #define RELOC_REGISTER 0x60000000
  2253. #if 0
  2254. #define RELOC_KVAR 0x70000000
  2255. #endif
  2256. #define RELOC_LABELH 0x80000000
  2257. #define RELOC_MASK 0xf0000000
  2258. #define NADDR(label) (RELOC_SOFTC | offsetof(struct ncb, label))
  2259. #define PADDR(label)    (RELOC_LABEL | offsetof(struct script, label))
  2260. #define PADDRH(label)   (RELOC_LABELH | offsetof(struct scripth, label))
  2261. #define RADDR(label) (RELOC_REGISTER | REG(label))
  2262. #define FADDR(label,ofs)(RELOC_REGISTER | ((REG(label))+(ofs)))
  2263. #define KVAR(which) (RELOC_KVAR | (which))
  2264. #define SCR_DATA_ZERO 0xf00ff00f
  2265. #ifdef RELOC_KVAR
  2266. #define SCRIPT_KVAR_JIFFIES (0)
  2267. #define SCRIPT_KVAR_FIRST SCRIPT_KVAR_JIFFIES
  2268. #define SCRIPT_KVAR_LAST SCRIPT_KVAR_JIFFIES
  2269. /*
  2270.  * Kernel variables referenced in the scripts.
  2271.  * THESE MUST ALL BE ALIGNED TO A 4-BYTE BOUNDARY.
  2272.  */
  2273. static void *script_kvars[] __initdata =
  2274. { (void *)&jiffies };
  2275. #endif
  2276. static struct script script0 __initdata = {
  2277. /*--------------------------< START >-----------------------*/ {
  2278. /*
  2279. ** This NOP will be patched with LED ON
  2280. ** SCR_REG_REG (gpreg, SCR_AND, 0xfe)
  2281. */
  2282. SCR_NO_OP,
  2283. 0,
  2284. /*
  2285. **      Clear SIGP.
  2286. */
  2287. SCR_FROM_REG (ctest2),
  2288. 0,
  2289. /*
  2290. ** Stop here if the C code wants to perform 
  2291. ** some error recovery procedure manually.
  2292. ** (Indicate this by setting SEM in ISTAT)
  2293. */
  2294. SCR_FROM_REG (istat),
  2295. 0,
  2296. /*
  2297. ** Report to the C code the next position in 
  2298. ** the start queue the SCRIPTS will schedule.
  2299. ** The C code must not change SCRATCHA.
  2300. */
  2301. SCR_LOAD_ABS (scratcha, 4),
  2302. PADDRH (startpos),
  2303. SCR_INT ^ IFTRUE (MASK (SEM, SEM)),
  2304. SIR_SCRIPT_STOPPED,
  2305. /*
  2306. ** Start the next job.
  2307. **
  2308. ** @DSA  = start point for this job.
  2309. ** SCRATCHA = address of this job in the start queue.
  2310. **
  2311. ** We will restore startpos with SCRATCHA if we fails the 
  2312. ** arbitration or if it is the idle job.
  2313. **
  2314. ** The below GETJOB_BEGIN to GETJOB_END section of SCRIPTS 
  2315. ** is a critical path. If it is partially executed, it then 
  2316. ** may happen that the job address is not yet in the DSA 
  2317. ** and the the next queue position points to the next JOB.
  2318. */
  2319. SCR_LOAD_ABS (dsa, 4),
  2320. PADDRH (startpos),
  2321. SCR_LOAD_REL (temp, 4),
  2322. 4,
  2323. }/*-------------------------< GETJOB_BEGIN >------------------*/,{
  2324. SCR_STORE_ABS (temp, 4),
  2325. PADDRH (startpos),
  2326. SCR_LOAD_REL (dsa, 4),
  2327. 0,
  2328. }/*-------------------------< GETJOB_END >--------------------*/,{
  2329. SCR_LOAD_REL (temp, 4),
  2330. 0,
  2331. SCR_RETURN,
  2332. 0,
  2333. }/*-------------------------< SELECT >----------------------*/,{
  2334. /*
  2335. ** DSA contains the address of a scheduled
  2336. ** data structure.
  2337. **
  2338. ** SCRATCHA contains the address of the start queue  
  2339. ** entry which points to the next job.
  2340. **
  2341. ** Set Initiator mode.
  2342. **
  2343. ** (Target mode is left as an exercise for the reader)
  2344. */
  2345. SCR_CLR (SCR_TRG),
  2346. 0,
  2347. /*
  2348. **      And try to select this target.
  2349. */
  2350. SCR_SEL_TBL_ATN ^ offsetof (struct dsb, select),
  2351. PADDR (ungetjob),
  2352. /*
  2353. ** Now there are 4 possibilities:
  2354. **
  2355. ** (1) The ncr looses arbitration.
  2356. ** This is ok, because it will try again,
  2357. ** when the bus becomes idle.
  2358. ** (But beware of the timeout function!)
  2359. **
  2360. ** (2) The ncr is reselected.
  2361. ** Then the script processor takes the jump
  2362. ** to the RESELECT label.
  2363. **
  2364. ** (3) The ncr wins arbitration.
  2365. ** Then it will execute SCRIPTS instruction until 
  2366. ** the next instruction that checks SCSI phase.
  2367. ** Then will stop and wait for selection to be 
  2368. ** complete or selection time-out to occur.
  2369. **
  2370. ** After having won arbitration, the ncr SCRIPTS  
  2371. ** processor is able to execute instructions while 
  2372. ** the SCSI core is performing SCSI selection. But 
  2373. ** some script instruction that is not waiting for 
  2374. ** a valid phase (or selection timeout) to occur 
  2375. ** breaks the selection procedure, by probably 
  2376. ** affecting timing requirements.
  2377. ** So we have to wait immediately for the next phase 
  2378. ** or the selection to complete or time-out.
  2379. */
  2380. /*
  2381. **      load the savep (saved pointer) into
  2382. **      the actual data pointer.
  2383. */
  2384. SCR_LOAD_REL (temp, 4),
  2385. offsetof (struct ccb, phys.header.savep),
  2386. /*
  2387. **      Initialize the status registers
  2388. */
  2389. SCR_LOAD_REL (scr0, 4),
  2390. offsetof (struct ccb, phys.header.status),
  2391. }/*-------------------------< WF_SEL_DONE >----------------------*/,{
  2392. SCR_INT ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  2393. SIR_SEL_ATN_NO_MSG_OUT,
  2394. }/*-------------------------< SEND_IDENT >----------------------*/,{
  2395. /*
  2396. ** Selection complete.
  2397. ** Send the IDENTIFY and SIMPLE_TAG messages
  2398. ** (and the M_X_SYNC_REQ / M_X_WIDE_REQ message)
  2399. */
  2400. SCR_MOVE_TBL ^ SCR_MSG_OUT,
  2401. offsetof (struct dsb, smsg),
  2402. }/*-------------------------< SELECT2 >----------------------*/,{
  2403. #ifdef SCSI_NCR_IARB_SUPPORT
  2404. /*
  2405. ** Set IMMEDIATE ARBITRATION if we have been given 
  2406. ** a hint to do so. (Some job to do after this one).
  2407. */
  2408. SCR_FROM_REG (HF_REG),
  2409. 0,
  2410. SCR_JUMPR ^ IFFALSE (MASK (HF_HINT_IARB, HF_HINT_IARB)),
  2411. 8,
  2412. SCR_REG_REG (scntl1, SCR_OR, IARB),
  2413. 0,
  2414. #endif
  2415. /*
  2416. ** Anticipate the COMMAND phase.
  2417. ** This is the PHASE we expect at this point.
  2418. */
  2419. SCR_JUMP ^ IFFALSE (WHEN (SCR_COMMAND)),
  2420. PADDR (sel_no_cmd),
  2421. }/*-------------------------< COMMAND >--------------------*/,{
  2422. /*
  2423. ** ... and send the command
  2424. */
  2425. SCR_MOVE_TBL ^ SCR_COMMAND,
  2426. offsetof (struct dsb, cmd),
  2427. }/*-----------------------< DISPATCH >----------------------*/,{
  2428. /*
  2429. ** MSG_IN is the only phase that shall be 
  2430. ** entered at least once for each (re)selection.
  2431. ** So we test it first.
  2432. */
  2433. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
  2434. PADDR (msg_in),
  2435. SCR_JUMP ^ IFTRUE (IF (SCR_DATA_OUT)),
  2436. PADDR (datao_phase),
  2437. SCR_JUMP ^ IFTRUE (IF (SCR_DATA_IN)),
  2438. PADDR (datai_phase),
  2439. SCR_JUMP ^ IFTRUE (IF (SCR_STATUS)),
  2440. PADDR (status),
  2441. SCR_JUMP ^ IFTRUE (IF (SCR_COMMAND)),
  2442. PADDR (command),
  2443. SCR_JUMP ^ IFTRUE (IF (SCR_MSG_OUT)),
  2444. PADDRH (msg_out),
  2445. /*
  2446.  *  Discard as many illegal phases as 
  2447.  *  required and tell the C code about.
  2448.  */
  2449. SCR_JUMPR ^ IFFALSE (WHEN (SCR_ILG_OUT)),
  2450. 16,
  2451. SCR_MOVE_ABS (1) ^ SCR_ILG_OUT,
  2452. NADDR (scratch),
  2453. SCR_JUMPR ^ IFTRUE (WHEN (SCR_ILG_OUT)),
  2454. -16,
  2455. SCR_JUMPR ^ IFFALSE (WHEN (SCR_ILG_IN)),
  2456. 16,
  2457. SCR_MOVE_ABS (1) ^ SCR_ILG_IN,
  2458. NADDR (scratch),
  2459. SCR_JUMPR ^ IFTRUE (WHEN (SCR_ILG_IN)),
  2460. -16,
  2461. SCR_INT,
  2462. SIR_BAD_PHASE,
  2463. SCR_JUMP,
  2464. PADDR (dispatch),
  2465. }/*---------------------< SEL_NO_CMD >----------------------*/,{
  2466. /*
  2467. ** The target does not switch to command 
  2468. ** phase after IDENTIFY has been sent.
  2469. **
  2470. ** If it stays in MSG OUT phase send it 
  2471. ** the IDENTIFY again.
  2472. */
  2473. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
  2474. PADDRH (resend_ident),
  2475. /*
  2476. ** If target does not switch to MSG IN phase 
  2477. ** and we sent a negotiation, assert the 
  2478. ** failure immediately.
  2479. */
  2480. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
  2481. PADDR (dispatch),
  2482. SCR_FROM_REG (HS_REG),
  2483. 0,
  2484. SCR_INT ^ IFTRUE (DATA (HS_NEGOTIATE)),
  2485. SIR_NEGO_FAILED,
  2486. /*
  2487. ** Jump to dispatcher.
  2488. */
  2489. SCR_JUMP,
  2490. PADDR (dispatch),
  2491. }/*-------------------------< INIT >------------------------*/,{
  2492. /*
  2493. ** Wait for the SCSI RESET signal to be 
  2494. ** inactive before restarting operations, 
  2495. ** since the chip may hang on SEL_ATN 
  2496. ** if SCSI RESET is active.
  2497. */
  2498. SCR_FROM_REG (sstat0),
  2499. 0,
  2500. SCR_JUMPR ^ IFTRUE (MASK (IRST, IRST)),
  2501. -16,
  2502. SCR_JUMP,
  2503. PADDR (start),
  2504. }/*-------------------------< CLRACK >----------------------*/,{
  2505. /*
  2506. ** Terminate possible pending message phase.
  2507. */
  2508. SCR_CLR (SCR_ACK),
  2509. 0,
  2510. SCR_JUMP,
  2511. PADDR (dispatch),
  2512. }/*-------------------------< DISP_STATUS >----------------------*/,{
  2513. /*
  2514. ** Anticipate STATUS phase.
  2515. **
  2516. ** Does spare 3 SCRIPTS instructions when we have 
  2517. ** completed the INPUT of the data.
  2518. */
  2519. SCR_JUMP ^ IFTRUE (WHEN (SCR_STATUS)),
  2520. PADDR (status),
  2521. SCR_JUMP,
  2522. PADDR (dispatch),
  2523. }/*-------------------------< DATAI_DONE >-------------------*/,{
  2524. /*
  2525.  *  If the device wants us to send more data,
  2526.  *  we must count the extra bytes.
  2527.  */
  2528. SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_IN)),
  2529. PADDRH (data_ovrun),
  2530. /*
  2531. ** If the SWIDE is not full, jump to dispatcher.
  2532. ** We anticipate a STATUS phase.
  2533. ** If we get later an IGNORE WIDE RESIDUE, we 
  2534. ** will alias it as a MODIFY DP (-1).
  2535. */
  2536. SCR_FROM_REG (scntl2),
  2537. 0,
  2538. SCR_JUMP ^ IFFALSE (MASK (WSR, WSR)),
  2539. PADDR (disp_status),
  2540. /*
  2541. ** The SWIDE is full.
  2542. ** Clear this condition.
  2543. */
  2544. SCR_REG_REG (scntl2, SCR_OR, WSR),
  2545. 0,
  2546. /*
  2547.          * We are expecting an IGNORE RESIDUE message
  2548.          * from the device, otherwise we are in data
  2549.          * overrun condition. Check against MSG_IN phase.
  2550. */
  2551. SCR_INT ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2552. SIR_SWIDE_OVERRUN,
  2553. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2554. PADDR (disp_status),
  2555. /*
  2556.  * We are in MSG_IN phase,
  2557.  * Read the first byte of the message.
  2558.  * If it is not an IGNORE RESIDUE message,
  2559.  * signal overrun and jump to message
  2560.  * processing.
  2561.  */
  2562. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2563. NADDR (msgin[0]),
  2564. SCR_INT ^ IFFALSE (DATA (M_IGN_RESIDUE)),
  2565. SIR_SWIDE_OVERRUN,
  2566. SCR_JUMP ^ IFFALSE (DATA (M_IGN_RESIDUE)),
  2567. PADDR (msg_in2),
  2568. /*
  2569.  * We got the message we expected.
  2570.  * Read the 2nd byte, and jump to dispatcher.
  2571.  */
  2572. SCR_CLR (SCR_ACK),
  2573. 0,
  2574. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2575. NADDR (msgin[1]),
  2576. SCR_CLR (SCR_ACK),
  2577. 0,
  2578. SCR_JUMP,
  2579. PADDR (disp_status),
  2580. }/*-------------------------< DATAO_DONE >-------------------*/,{
  2581. /*
  2582.  *  If the device wants us to send more data,
  2583.  *  we must count the extra bytes.
  2584.  */
  2585. SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
  2586. PADDRH (data_ovrun),
  2587. /*
  2588. ** If the SODL is not full jump to dispatcher.
  2589. ** We anticipate a MSG IN phase or a STATUS phase.
  2590. */
  2591. SCR_FROM_REG (scntl2),
  2592. 0,
  2593. SCR_JUMP ^ IFFALSE (MASK (WSS, WSS)),
  2594. PADDR (disp_status),
  2595. /*
  2596. ** The SODL is full, clear this condition.
  2597. */
  2598. SCR_REG_REG (scntl2, SCR_OR, WSS),
  2599. 0,
  2600. /*
  2601. ** And signal a DATA UNDERRUN condition 
  2602. ** to the C code.
  2603. */
  2604. SCR_INT,
  2605. SIR_SODL_UNDERRUN,
  2606. SCR_JUMP,
  2607. PADDR (dispatch),
  2608. }/*-------------------------< IGN_I_W_R_MSG >--------------*/,{
  2609. /*
  2610. ** We jump here from the phase mismatch interrupt, 
  2611. ** When we have a SWIDE and the device has presented 
  2612. ** a IGNORE WIDE RESIDUE message on the BUS.
  2613. ** We just have to throw away this message and then 
  2614. ** to jump to dispatcher.
  2615. */
  2616. SCR_MOVE_ABS (2) ^ SCR_MSG_IN,
  2617. NADDR (scratch),
  2618. /*
  2619. ** Clear ACK and jump to dispatcher.
  2620. */
  2621. SCR_JUMP,
  2622. PADDR (clrack),
  2623. }/*-------------------------< DATAI_PHASE >------------------*/,{
  2624. SCR_RETURN,
  2625. 0,
  2626. }/*-------------------------< DATAO_PHASE >------------------*/,{
  2627. /*
  2628. ** Patch for 53c1010_66 only - to allow A0 part
  2629. ** to operate properly in a 33MHz PCI bus.
  2630. **
  2631. **  SCR_REG_REG(scntl4, SCR_OR, 0x0c),
  2632. ** 0,
  2633. */
  2634. SCR_NO_OP,
  2635. 0,
  2636. SCR_RETURN,
  2637. 0,
  2638. }/*-------------------------< MSG_IN >--------------------*/,{
  2639. /*
  2640. ** Get the first byte of the message.
  2641. **
  2642. ** The script processor doesn't negate the
  2643. ** ACK signal after this transfer.
  2644. */
  2645. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2646. NADDR (msgin[0]),
  2647. }/*-------------------------< MSG_IN2 >--------------------*/,{
  2648. /*
  2649. ** Check first against 1 byte messages 
  2650. ** that we handle from SCRIPTS.
  2651. */
  2652. SCR_JUMP ^ IFTRUE (DATA (M_COMPLETE)),
  2653. PADDR (complete),
  2654. SCR_JUMP ^ IFTRUE (DATA (M_DISCONNECT)),
  2655. PADDR (disconnect),
  2656. SCR_JUMP ^ IFTRUE (DATA (M_SAVE_DP)),
  2657. PADDR (save_dp),
  2658. SCR_JUMP ^ IFTRUE (DATA (M_RESTORE_DP)),
  2659. PADDR (restore_dp),
  2660. /*
  2661. ** We handle all other messages from the 
  2662. ** C code, so no need to waste on-chip RAM 
  2663. ** for those ones.
  2664. */
  2665. SCR_JUMP,
  2666. PADDRH (msg_in_etc),
  2667. }/*-------------------------< STATUS >--------------------*/,{
  2668. /*
  2669. ** get the status
  2670. */
  2671. SCR_MOVE_ABS (1) ^ SCR_STATUS,
  2672. NADDR (scratch),
  2673. #ifdef SCSI_NCR_IARB_SUPPORT
  2674. /*
  2675. ** If STATUS is not GOOD, clear IMMEDIATE ARBITRATION, 
  2676. ** since we may have to tamper the start queue from 
  2677. ** the C code.
  2678. */
  2679. SCR_JUMPR ^ IFTRUE (DATA (S_GOOD)),
  2680. 8,
  2681. SCR_REG_REG (scntl1, SCR_AND, ~IARB),
  2682. 0,
  2683. #endif
  2684. /*
  2685. ** save status to scsi_status.
  2686. ** mark as complete.
  2687. */
  2688. SCR_TO_REG (SS_REG),
  2689. 0,
  2690. SCR_LOAD_REG (HS_REG, HS_COMPLETE),
  2691. 0,
  2692. /*
  2693. ** Anticipate the MESSAGE PHASE for 
  2694. ** the TASK COMPLETE message.
  2695. */
  2696. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
  2697. PADDR (msg_in),
  2698. SCR_JUMP,
  2699. PADDR (dispatch),
  2700. }/*-------------------------< COMPLETE >-----------------*/,{
  2701. /*
  2702. ** Complete message.
  2703. **
  2704. ** Copy the data pointer to LASTP in header.
  2705. */
  2706. SCR_STORE_REL (temp, 4),
  2707. offsetof (struct ccb, phys.header.lastp),
  2708. /*
  2709. ** When we terminate the cycle by clearing ACK,
  2710. ** the target may disconnect immediately.
  2711. **
  2712. ** We don't want to be told of an
  2713. ** "unexpected disconnect",
  2714. ** so we disable this feature.
  2715. */
  2716. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  2717. 0,
  2718. /*
  2719. ** Terminate cycle ...
  2720. */
  2721. SCR_CLR (SCR_ACK|SCR_ATN),
  2722. 0,
  2723. /*
  2724. ** ... and wait for the disconnect.
  2725. */
  2726. SCR_WAIT_DISC,
  2727. 0,
  2728. }/*-------------------------< COMPLETE2 >-----------------*/,{
  2729. /*
  2730. ** Save host status to header.
  2731. */
  2732. SCR_STORE_REL (scr0, 4),
  2733. offsetof (struct ccb, phys.header.status),
  2734. #ifdef SCSI_NCR_PCIQ_MAY_REORDER_WRITES
  2735. /*
  2736. ** Some bridges may reorder DMA writes to memory.
  2737. ** We donnot want the CPU to deal with completions  
  2738. ** without all the posted write having been flushed 
  2739. ** to memory. This DUMMY READ should flush posted 
  2740. ** buffers prior to the CPU having to deal with 
  2741. ** completions.
  2742. */
  2743. SCR_LOAD_REL (scr0, 4), /* DUMMY READ */
  2744. offsetof (struct ccb, phys.header.status),
  2745. #endif
  2746. /*
  2747. ** If command resulted in not GOOD status,
  2748. ** call the C code if needed.
  2749. */
  2750. SCR_FROM_REG (SS_REG),
  2751. 0,
  2752. SCR_CALL ^ IFFALSE (DATA (S_GOOD)),
  2753. PADDRH (bad_status),
  2754. /*
  2755. ** If we performed an auto-sense, call 
  2756. ** the C code to synchronyze task aborts 
  2757. ** with UNIT ATTENTION conditions.
  2758. */
  2759. SCR_FROM_REG (HF_REG),
  2760. 0,
  2761. SCR_INT ^ IFTRUE (MASK (HF_AUTO_SENSE, HF_AUTO_SENSE)),
  2762. SIR_AUTO_SENSE_DONE,
  2763. }/*------------------------< DONE >-----------------*/,{
  2764. #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
  2765. /*
  2766. ** It seems that some bridges flush everything 
  2767. ** when the INTR line is raised. For these ones, 
  2768. ** we can just ensure that the INTR line will be 
  2769. ** raised before each completion. So, if it happens 
  2770. ** that we have been faster that the CPU, we just 
  2771. ** have to synchronize with it. A dummy programmed 
  2772. ** interrupt will do the trick.
  2773. ** Note that we overlap at most 1 IO with the CPU 
  2774. ** in this situation and that the IRQ line must not 
  2775. ** be shared.
  2776. */
  2777. SCR_FROM_REG (istat),
  2778. 0,
  2779. SCR_INT ^ IFTRUE (MASK (INTF, INTF)),
  2780. SIR_DUMMY_INTERRUPT,
  2781. #endif
  2782. /*
  2783. ** Copy the DSA to the DONE QUEUE and 
  2784. ** signal completion to the host.
  2785. ** If we are interrupted between DONE 
  2786. ** and DONE_END, we must reset, otherwise 
  2787. ** the completed CCB will be lost.
  2788. */
  2789. SCR_STORE_ABS (dsa, 4),
  2790. PADDRH (saved_dsa),
  2791. SCR_LOAD_ABS (dsa, 4),
  2792. PADDRH (done_pos),
  2793. SCR_LOAD_ABS (scratcha, 4),
  2794. PADDRH (saved_dsa),
  2795. SCR_STORE_REL (scratcha, 4),
  2796. 0,
  2797. /*
  2798. ** The instruction below reads the DONE QUEUE next 
  2799. ** free position from memory.
  2800. ** In addition it ensures that all PCI posted writes  
  2801. ** are flushed and so the DSA value of the done 
  2802. ** CCB is visible by the CPU before INTFLY is raised.
  2803. */
  2804. SCR_LOAD_REL (temp, 4),
  2805. 4,
  2806. SCR_INT_FLY,
  2807. 0,
  2808. SCR_STORE_ABS (temp, 4),
  2809. PADDRH (done_pos),
  2810. }/*------------------------< DONE_END >-----------------*/,{
  2811. SCR_JUMP,
  2812. PADDR (start),
  2813. }/*-------------------------< SAVE_DP >------------------*/,{
  2814. /*
  2815. ** Clear ACK immediately.
  2816. ** No need to delay it.
  2817. */
  2818. SCR_CLR (SCR_ACK),
  2819. 0,
  2820. /*
  2821. ** Keep track we received a SAVE DP, so 
  2822. ** we will switch to the other PM context 
  2823. ** on the next PM since the DP may point 
  2824. ** to the current PM context.
  2825. */
  2826. SCR_REG_REG (HF_REG, SCR_OR, HF_DP_SAVED),
  2827. 0,
  2828. /*
  2829. ** SAVE_DP message:
  2830. ** Copy the data pointer to SAVEP in header.
  2831. */
  2832. SCR_STORE_REL (temp, 4),
  2833. offsetof (struct ccb, phys.header.savep),
  2834. SCR_JUMP,
  2835. PADDR (dispatch),
  2836. }/*-------------------------< RESTORE_DP >---------------*/,{
  2837. /*
  2838. ** RESTORE_DP message:
  2839. ** Copy SAVEP in header to actual data pointer.
  2840. */
  2841. SCR_LOAD_REL  (temp, 4),
  2842. offsetof (struct ccb, phys.header.savep),
  2843. SCR_JUMP,
  2844. PADDR (clrack),
  2845. }/*-------------------------< DISCONNECT >---------------*/,{
  2846. /*
  2847. ** DISCONNECTing  ...
  2848. **
  2849. ** disable the "unexpected disconnect" feature,
  2850. ** and remove the ACK signal.
  2851. */
  2852. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  2853. 0,
  2854. SCR_CLR (SCR_ACK|SCR_ATN),
  2855. 0,
  2856. /*
  2857. ** Wait for the disconnect.
  2858. */
  2859. SCR_WAIT_DISC,
  2860. 0,
  2861. /*
  2862. ** Status is: DISCONNECTED.
  2863. */
  2864. SCR_LOAD_REG (HS_REG, HS_DISCONNECT),
  2865. 0,
  2866. /*
  2867. ** Save host status to header.
  2868. */
  2869. SCR_STORE_REL (scr0, 4),
  2870. offsetof (struct ccb, phys.header.status),
  2871. /*
  2872. ** If QUIRK_AUTOSAVE is set,
  2873. ** do an "save pointer" operation.
  2874. */
  2875. SCR_FROM_REG (QU_REG),
  2876. 0,
  2877. SCR_JUMP ^ IFFALSE (MASK (QUIRK_AUTOSAVE, QUIRK_AUTOSAVE)),
  2878. PADDR (start),
  2879. /*
  2880. ** like SAVE_DP message:
  2881. ** Remember we saved the data pointer.
  2882. ** Copy data pointer to SAVEP in header.
  2883. */
  2884. SCR_REG_REG (HF_REG, SCR_OR, HF_DP_SAVED),
  2885. 0,
  2886. SCR_STORE_REL (temp, 4),
  2887. offsetof (struct ccb, phys.header.savep),
  2888. SCR_JUMP,
  2889. PADDR (start),
  2890. }/*-------------------------< IDLE >------------------------*/,{
  2891. /*
  2892. ** Nothing to do?
  2893. ** Wait for reselect.
  2894. ** This NOP will be patched with LED OFF
  2895. ** SCR_REG_REG (gpreg, SCR_OR, 0x01)
  2896. */
  2897. SCR_NO_OP,
  2898. 0,
  2899. #ifdef SCSI_NCR_IARB_SUPPORT
  2900. SCR_JUMPR,
  2901. 8,
  2902. #endif
  2903. }/*-------------------------< UNGETJOB >-----------------*/,{
  2904. #ifdef SCSI_NCR_IARB_SUPPORT
  2905. /*
  2906. ** Set IMMEDIATE ARBITRATION, for the next time.
  2907. ** This will give us better chance to win arbitration 
  2908. ** for the job we just wanted to do.
  2909. */
  2910. SCR_REG_REG (scntl1, SCR_OR, IARB),
  2911. 0,
  2912. #endif
  2913. /*
  2914. ** We are not able to restart the SCRIPTS if we are 
  2915. ** interrupted and these instruction haven't been 
  2916. ** all executed. BTW, this is very unlikely to 
  2917. ** happen, but we check that from the C code.
  2918. */
  2919. SCR_LOAD_REG (dsa, 0xff),
  2920. 0,
  2921. SCR_STORE_ABS (scratcha, 4),
  2922. PADDRH (startpos),
  2923. }/*-------------------------< RESELECT >--------------------*/,{
  2924. /*
  2925. ** make the host status invalid.
  2926. */
  2927. SCR_CLR (SCR_TRG),
  2928. 0,
  2929. /*
  2930. ** Sleep waiting for a reselection.
  2931. ** If SIGP is set, special treatment.
  2932. **
  2933. ** Zu allem bereit ..
  2934. */
  2935. SCR_WAIT_RESEL,
  2936. PADDR(start),
  2937. }/*-------------------------< RESELECTED >------------------*/,{
  2938. /*
  2939. ** This NOP will be patched with LED ON
  2940. ** SCR_REG_REG (gpreg, SCR_AND, 0xfe)
  2941. */
  2942. SCR_NO_OP,
  2943. 0,
  2944. /*
  2945. **      load the target id into the sdid
  2946. */
  2947. SCR_REG_SFBR (ssid, SCR_AND, 0x8F),
  2948. 0,
  2949. SCR_TO_REG (sdid),
  2950. 0,
  2951. /*
  2952. ** load the target control block address
  2953. */
  2954. SCR_LOAD_ABS (dsa, 4),
  2955. PADDRH (targtbl),
  2956. SCR_SFBR_REG (dsa, SCR_SHL, 0),
  2957. 0,
  2958. SCR_REG_REG (dsa, SCR_SHL, 0),
  2959. 0,
  2960. SCR_REG_REG (dsa, SCR_AND, 0x3c),
  2961. 0,
  2962. SCR_LOAD_REL (dsa, 4),
  2963. 0,
  2964. /*
  2965. ** Load the synchronous transfer registers.
  2966. */
  2967. SCR_LOAD_REL (scntl3, 1),
  2968. offsetof(struct tcb, wval),
  2969. SCR_LOAD_REL (sxfer, 1),
  2970. offsetof(struct tcb, sval),
  2971. }/*-------------------------< RESEL_SCNTL4 >------------------*/,{
  2972. /*
  2973. ** Write with uval value. Patch if device
  2974. ** does not support Ultra3.
  2975. **
  2976. ** SCR_LOAD_REL (scntl4, 1),
  2977. ** offsetof(struct tcb, uval),
  2978. */
  2979. SCR_NO_OP,
  2980. 0,
  2981.         /*
  2982.          *  We expect MESSAGE IN phase.
  2983.          *  If not, get help from the C code.
  2984.          */
  2985. SCR_INT ^ IFFALSE (WHEN (SCR_MSG_IN)),
  2986. SIR_RESEL_NO_MSG_IN,
  2987. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  2988. NADDR (msgin),
  2989. /*
  2990.  *  If IDENTIFY LUN #0, use a faster path 
  2991.  *  to find the LCB structure.
  2992.  */
  2993. SCR_JUMPR ^ IFTRUE (MASK (0x80, 0xbf)),
  2994. 56,
  2995. /*
  2996.  *  If message isn't an IDENTIFY, 
  2997.  *  tell the C code about.
  2998.  */
  2999. SCR_INT ^ IFFALSE (MASK (0x80, 0x80)),
  3000. SIR_RESEL_NO_IDENTIFY,
  3001. /*
  3002.  *  It is an IDENTIFY message,
  3003.  *  Load the LUN control block address.
  3004.  */
  3005. SCR_LOAD_REL (dsa, 4),
  3006. offsetof(struct tcb, b_luntbl),
  3007. SCR_SFBR_REG (dsa, SCR_SHL, 0),
  3008. 0,
  3009. SCR_REG_REG (dsa, SCR_SHL, 0),
  3010. 0,
  3011. SCR_REG_REG (dsa, SCR_AND, 0xfc),
  3012. 0,
  3013. SCR_LOAD_REL (dsa, 4),
  3014. 0,
  3015. SCR_JUMPR,
  3016. 8,
  3017. /*
  3018. ** LUN 0 special case (but usual one :))
  3019. */
  3020. SCR_LOAD_REL (dsa, 4),
  3021. offsetof(struct tcb, b_lun0),
  3022. /*
  3023. ** Load the reselect task action for this LUN.
  3024. ** Load the tasks DSA array for this LUN.
  3025. ** Call the action.
  3026. */
  3027. SCR_LOAD_REL (temp, 4),
  3028. offsetof(struct lcb, resel_task),
  3029. SCR_LOAD_REL (dsa, 4),
  3030. offsetof(struct lcb, b_tasktbl),
  3031. SCR_RETURN,
  3032. 0,
  3033. }/*-------------------------< RESEL_TAG >-------------------*/,{
  3034. /*
  3035. ** ACK the IDENTIFY or TAG previously received
  3036. */
  3037. SCR_CLR (SCR_ACK),
  3038. 0,
  3039. /*
  3040. ** Read IDENTIFY + SIMPLE + TAG using a single MOVE.
  3041. ** Agressive optimization, is'nt it?
  3042. ** No need to test the SIMPLE TAG message, since the 
  3043. ** driver only supports conformant devices for tags. ;-)
  3044. */
  3045. SCR_MOVE_ABS (2) ^ SCR_MSG_IN,
  3046. NADDR (msgin),
  3047. /*
  3048. ** Read the TAG from the SIDL.
  3049. ** Still an aggressive optimization. ;-)
  3050. ** Compute the CCB indirect jump address which 
  3051. ** is (#TAG*2 & 0xfc) due to tag numbering using 
  3052. ** 1,3,5..MAXTAGS*2+1 actual values.
  3053. */
  3054. SCR_REG_SFBR (sidl, SCR_SHL, 0),
  3055. 0,
  3056. #if MAX_TASKS*4 > 512
  3057. SCR_JUMPR ^ IFFALSE (CARRYSET),
  3058. 8,
  3059. SCR_REG_REG (dsa1, SCR_OR, 2),
  3060. 0,
  3061. SCR_REG_REG (sfbr, SCR_SHL, 0),
  3062. 0,
  3063. SCR_JUMPR ^ IFFALSE (CARRYSET),
  3064. 8,
  3065. SCR_REG_REG (dsa1, SCR_OR, 1),
  3066. 0,
  3067. #elif MAX_TASKS*4 > 256
  3068. SCR_JUMPR ^ IFFALSE (CARRYSET),
  3069. 8,
  3070. SCR_REG_REG (dsa1, SCR_OR, 1),
  3071. 0,
  3072. #endif
  3073. /*
  3074. ** Retrieve the DSA of this task.
  3075. ** JUMP indirectly to the restart point of the CCB.
  3076. */
  3077. SCR_SFBR_REG (dsa, SCR_AND, 0xfc),
  3078. 0,
  3079. }/*-------------------------< RESEL_GO >-------------------*/,{
  3080. SCR_LOAD_REL (dsa, 4),
  3081. 0,
  3082. SCR_LOAD_REL (temp, 4),
  3083. offsetof(struct ccb, phys.header.go.restart),
  3084. SCR_RETURN,
  3085. 0,
  3086. /* In normal situations we branch to RESEL_DSA */
  3087. }/*-------------------------< RESEL_NOTAG >-------------------*/,{
  3088. /*
  3089. ** JUMP indirectly to the restart point of the CCB.
  3090. */
  3091. SCR_JUMP,
  3092. PADDR (resel_go),
  3093. }/*-------------------------< RESEL_DSA >-------------------*/,{
  3094. /*
  3095. ** Ack the IDENTIFY or TAG previously received.
  3096. */
  3097. SCR_CLR (SCR_ACK),
  3098. 0,
  3099. /*
  3100. **      load the savep (saved pointer) into
  3101. **      the actual data pointer.
  3102. */
  3103. SCR_LOAD_REL (temp, 4),
  3104. offsetof (struct ccb, phys.header.savep),
  3105. /*
  3106. **      Initialize the status registers
  3107. */
  3108. SCR_LOAD_REL (scr0, 4),
  3109. offsetof (struct ccb, phys.header.status),
  3110. /*
  3111. ** Jump to dispatcher.
  3112. */
  3113. SCR_JUMP,
  3114. PADDR (dispatch),
  3115. }/*-------------------------< DATA_IN >--------------------*/,{
  3116. /*
  3117. ** Because the size depends on the
  3118. ** #define MAX_SCATTER parameter,
  3119. ** it is filled in at runtime.
  3120. **
  3121. **  ##===========< i=0; i<MAX_SCATTER >=========
  3122. **  || SCR_CHMOV_TBL ^ SCR_DATA_IN,
  3123. **  || offsetof (struct dsb, data[ i]),
  3124. **  ##==========================================
  3125. **
  3126. **---------------------------------------------------------
  3127. */
  3128. 0
  3129. }/*-------------------------< DATA_IN2 >-------------------*/,{
  3130. SCR_CALL,
  3131. PADDR (datai_done),
  3132. SCR_JUMP,
  3133. PADDRH (data_ovrun),
  3134. }/*-------------------------< DATA_OUT >--------------------*/,{
  3135. /*
  3136. ** Because the size depends on the
  3137. ** #define MAX_SCATTER parameter,
  3138. ** it is filled in at runtime.
  3139. **
  3140. **  ##===========< i=0; i<MAX_SCATTER >=========
  3141. **  || SCR_CHMOV_TBL ^ SCR_DATA_OUT,
  3142. **  || offsetof (struct dsb, data[ i]),
  3143. **  ##==========================================
  3144. **
  3145. **---------------------------------------------------------
  3146. */
  3147. 0
  3148. }/*-------------------------< DATA_OUT2 >-------------------*/,{
  3149. SCR_CALL,
  3150. PADDR (datao_done),
  3151. SCR_JUMP,
  3152. PADDRH (data_ovrun),
  3153. }/*-------------------------< PM0_DATA >--------------------*/,{
  3154. /*
  3155. ** Read our host flags to SFBR, so we will be able 
  3156. ** to check against the data direction we expect.
  3157. */
  3158. SCR_FROM_REG (HF_REG),
  3159. 0,
  3160. /*
  3161. ** Check against actual DATA PHASE.
  3162. */
  3163. SCR_JUMP ^ IFFALSE (WHEN (SCR_DATA_IN)),
  3164. PADDR (pm0_data_out),
  3165. /*
  3166. ** Actual phase is DATA IN.
  3167. ** Check against expected direction.
  3168. */
  3169. SCR_JUMP ^ IFFALSE (MASK (HF_DATA_IN, HF_DATA_IN)),
  3170. PADDRH (data_ovrun),
  3171. /*
  3172. ** Keep track we are moving data from the 
  3173. ** PM0 DATA mini-script.
  3174. */
  3175. SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM0),
  3176. 0,
  3177. /*
  3178. ** Move the data to memory.
  3179. */
  3180. SCR_CHMOV_TBL ^ SCR_DATA_IN,
  3181. offsetof (struct ccb, phys.pm0.sg),
  3182. SCR_JUMP,
  3183. PADDR (pm0_data_end),
  3184. }/*-------------------------< PM0_DATA_OUT >----------------*/,{
  3185. /*
  3186. ** Actual phase is DATA OUT.
  3187. ** Check against expected direction.
  3188. */
  3189. SCR_JUMP ^ IFTRUE (MASK (HF_DATA_IN, HF_DATA_IN)),
  3190. PADDRH (data_ovrun),
  3191. /*
  3192. ** Keep track we are moving data from the 
  3193. ** PM0 DATA mini-script.
  3194. */
  3195. SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM0),
  3196. 0,
  3197. /*
  3198. ** Move the data from memory.
  3199. */
  3200. SCR_CHMOV_TBL ^ SCR_DATA_OUT,
  3201. offsetof (struct ccb, phys.pm0.sg),
  3202. }/*-------------------------< PM0_DATA_END >----------------*/,{
  3203. /*
  3204. ** Clear the flag that told we were moving  
  3205. ** data from the PM0 DATA mini-script.
  3206. */
  3207. SCR_REG_REG (HF_REG, SCR_AND, (~HF_IN_PM0)),
  3208. 0,
  3209. /*
  3210. ** Return to the previous DATA script which 
  3211. ** is guaranteed by design (if no bug) to be 
  3212. ** the main DATA script for this transfer.
  3213. */
  3214. SCR_LOAD_REL (temp, 4),
  3215. offsetof (struct ccb, phys.pm0.ret),
  3216. SCR_RETURN,
  3217. 0,
  3218. }/*-------------------------< PM1_DATA >--------------------*/,{
  3219. /*
  3220. ** Read our host flags to SFBR, so we will be able 
  3221. ** to check against the data direction we expect.
  3222. */
  3223. SCR_FROM_REG (HF_REG),
  3224. 0,
  3225. /*
  3226. ** Check against actual DATA PHASE.
  3227. */
  3228. SCR_JUMP ^ IFFALSE (WHEN (SCR_DATA_IN)),
  3229. PADDR (pm1_data_out),
  3230. /*
  3231. ** Actual phase is DATA IN.
  3232. ** Check against expected direction.
  3233. */
  3234. SCR_JUMP ^ IFFALSE (MASK (HF_DATA_IN, HF_DATA_IN)),
  3235. PADDRH (data_ovrun),
  3236. /*
  3237. ** Keep track we are moving data from the 
  3238. ** PM1 DATA mini-script.
  3239. */
  3240. SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM1),
  3241. 0,
  3242. /*
  3243. ** Move the data to memory.
  3244. */
  3245. SCR_CHMOV_TBL ^ SCR_DATA_IN,
  3246. offsetof (struct ccb, phys.pm1.sg),
  3247. SCR_JUMP,
  3248. PADDR (pm1_data_end),
  3249. }/*-------------------------< PM1_DATA_OUT >----------------*/,{
  3250. /*
  3251. ** Actual phase is DATA OUT.
  3252. ** Check against expected direction.
  3253. */
  3254. SCR_JUMP ^ IFTRUE (MASK (HF_DATA_IN, HF_DATA_IN)),
  3255. PADDRH (data_ovrun),
  3256. /*
  3257. ** Keep track we are moving data from the 
  3258. ** PM1 DATA mini-script.
  3259. */
  3260. SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM1),
  3261. 0,
  3262. /*
  3263. ** Move the data from memory.
  3264. */
  3265. SCR_CHMOV_TBL ^ SCR_DATA_OUT,
  3266. offsetof (struct ccb, phys.pm1.sg),
  3267. }/*-------------------------< PM1_DATA_END >----------------*/,{
  3268. /*
  3269. ** Clear the flag that told we were moving  
  3270. ** data from the PM1 DATA mini-script.
  3271. */
  3272. SCR_REG_REG (HF_REG, SCR_AND, (~HF_IN_PM1)),
  3273. 0,
  3274. /*
  3275. ** Return to the previous DATA script which 
  3276. ** is guaranteed by design (if no bug) to be 
  3277. ** the main DATA script for this transfer.
  3278. */
  3279. SCR_LOAD_REL (temp, 4),
  3280. offsetof (struct ccb, phys.pm1.ret),
  3281. SCR_RETURN,
  3282. 0,
  3283. }/*---------------------------------------------------------*/
  3284. };
  3285. static struct scripth scripth0 __initdata = {
  3286. /*------------------------< START64 >-----------------------*/{
  3287. /*
  3288. ** SCRIPT entry point for the 895A and the 896.
  3289. ** For now, there is no specific stuff for that 
  3290. ** chip at this point, but this may come.
  3291. */
  3292. SCR_JUMP,
  3293. PADDR (init),
  3294. }/*-------------------------< NO_DATA >-------------------*/,{
  3295. SCR_JUMP,
  3296. PADDRH (data_ovrun),
  3297. }/*-----------------------< SEL_FOR_ABORT >------------------*/,{
  3298. /*
  3299. ** We are jumped here by the C code, if we have 
  3300. ** some target to reset or some disconnected 
  3301. ** job to abort. Since error recovery is a serious 
  3302. ** busyness, we will really reset the SCSI BUS, if 
  3303. ** case of a SCSI interrupt occuring in this path.
  3304. */
  3305. /*
  3306. ** Set initiator mode.
  3307. */
  3308. SCR_CLR (SCR_TRG),
  3309. 0,
  3310. /*
  3311. **      And try to select this target.
  3312. */
  3313. SCR_SEL_TBL_ATN ^ offsetof (struct ncb, abrt_sel),
  3314. PADDR (reselect),
  3315. /*
  3316. ** Wait for the selection to complete or 
  3317. ** the selection to time out.
  3318. */
  3319. SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  3320. -8,
  3321. /*
  3322. ** Call the C code.
  3323. */
  3324. SCR_INT,
  3325. SIR_TARGET_SELECTED,
  3326. /*
  3327. ** The C code should let us continue here. 
  3328. ** Send the 'kiss of death' message.
  3329. ** We expect an immediate disconnect once 
  3330. ** the target has eaten the message.
  3331. */
  3332. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  3333. 0,
  3334. SCR_MOVE_TBL ^ SCR_MSG_OUT,
  3335. offsetof (struct ncb, abrt_tbl),
  3336. SCR_CLR (SCR_ACK|SCR_ATN),
  3337. 0,
  3338. SCR_WAIT_DISC,
  3339. 0,
  3340. /*
  3341. ** Tell the C code that we are done.
  3342. */
  3343. SCR_INT,
  3344. SIR_ABORT_SENT,
  3345. }/*-----------------------< SEL_FOR_ABORT_1 >--------------*/,{
  3346. /*
  3347. ** Jump at scheduler.
  3348. */
  3349. SCR_JUMP,
  3350. PADDR (start),
  3351. }/*------------------------< SELECT_NO_ATN >-----------------*/,{
  3352. /*
  3353. ** Set Initiator mode.
  3354. **      And try to select this target without ATN.
  3355. */
  3356. SCR_CLR (SCR_TRG),
  3357. 0,
  3358. SCR_SEL_TBL ^ offsetof (struct dsb, select),
  3359. PADDR (ungetjob),
  3360. /*
  3361. **      load the savep (saved pointer) into
  3362. **      the actual data pointer.
  3363. */
  3364. SCR_LOAD_REL (temp, 4),
  3365. offsetof (struct ccb, phys.header.savep),
  3366. /*
  3367. **      Initialize the status registers
  3368. */
  3369. SCR_LOAD_REL (scr0, 4),
  3370. offsetof (struct ccb, phys.header.status),
  3371. }/*------------------------< WF_SEL_DONE_NO_ATN >-----------------*/,{
  3372. /*
  3373. ** Wait immediately for the next phase or 
  3374. ** the selection to complete or time-out.
  3375. */
  3376. SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  3377. 0,
  3378. SCR_JUMP,
  3379. PADDR (select2),
  3380. }/*-------------------------< MSG_IN_ETC >--------------------*/,{
  3381. /*
  3382. ** If it is an EXTENDED (variable size message)
  3383. ** Handle it.
  3384. */
  3385. SCR_JUMP ^ IFTRUE (DATA (M_EXTENDED)),
  3386. PADDRH (msg_extended),
  3387. /*
  3388. ** Let the C code handle any other 
  3389. ** 1 byte message.
  3390. */
  3391. SCR_JUMP ^ IFTRUE (MASK (0x00, 0xf0)),
  3392. PADDRH (msg_received),
  3393. SCR_JUMP ^ IFTRUE (MASK (0x10, 0xf0)),
  3394. PADDRH (msg_received),
  3395. /*
  3396. ** We donnot handle 2 bytes messages from SCRIPTS.
  3397. ** So, let the C code deal with these ones too.
  3398. */
  3399. SCR_JUMP ^ IFFALSE (MASK (0x20, 0xf0)),
  3400. PADDRH (msg_weird_seen),
  3401. SCR_CLR (SCR_ACK),
  3402. 0,
  3403. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  3404. NADDR (msgin[1]),
  3405. SCR_JUMP,
  3406. PADDRH (msg_received),
  3407. }/*-------------------------< MSG_RECEIVED >--------------------*/,{
  3408. SCR_LOAD_REL (scratcha, 4), /* DUMMY READ */
  3409. 0,
  3410. SCR_INT,
  3411. SIR_MSG_RECEIVED,
  3412. }/*-------------------------< MSG_WEIRD_SEEN >------------------*/,{
  3413. SCR_LOAD_REL (scratcha, 4), /* DUMMY READ */
  3414. 0,
  3415. SCR_INT,
  3416. SIR_MSG_WEIRD,
  3417. }/*-------------------------< MSG_EXTENDED >--------------------*/,{
  3418. /*
  3419. ** Clear ACK and get the next byte 
  3420. ** assumed to be the message length.
  3421. */
  3422. SCR_CLR (SCR_ACK),
  3423. 0,
  3424. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  3425. NADDR (msgin[1]),
  3426. /*
  3427. ** Try to catch some unlikely situations as 0 length 
  3428. ** or too large the length.
  3429. */
  3430. SCR_JUMP ^ IFTRUE (DATA (0)),
  3431. PADDRH (msg_weird_seen),
  3432. SCR_TO_REG (scratcha),
  3433. 0,
  3434. SCR_REG_REG (sfbr, SCR_ADD, (256-8)),
  3435. 0,
  3436. SCR_JUMP ^ IFTRUE (CARRYSET),
  3437. PADDRH (msg_weird_seen),
  3438. /*
  3439. ** We donnot handle extended messages from SCRIPTS.
  3440. ** Read the amount of data correponding to the 
  3441. ** message length and call the C code.
  3442. */
  3443. SCR_STORE_REL (scratcha, 1),
  3444. offsetof (struct dsb, smsg_ext.size),
  3445. SCR_CLR (SCR_ACK),
  3446. 0,
  3447. SCR_MOVE_TBL ^ SCR_MSG_IN,
  3448. offsetof (struct dsb, smsg_ext),
  3449. SCR_JUMP,
  3450. PADDRH (msg_received),
  3451. }/*-------------------------< MSG_BAD >------------------*/,{
  3452. /*
  3453. ** unimplemented message - reject it.
  3454. */
  3455. SCR_INT,
  3456. SIR_REJECT_TO_SEND,
  3457. SCR_SET (SCR_ATN),
  3458. 0,
  3459. SCR_JUMP,
  3460. PADDR (clrack),
  3461. }/*-------------------------< MSG_WEIRD >--------------------*/,{
  3462. /*
  3463. ** weird message received
  3464. ** ignore all MSG IN phases and reject it.
  3465. */
  3466. SCR_INT,
  3467. SIR_REJECT_TO_SEND,
  3468. SCR_SET (SCR_ATN),
  3469. 0,
  3470. }/*-------------------------< MSG_WEIRD1 >--------------------*/,{
  3471. SCR_CLR (SCR_ACK),
  3472. 0,
  3473. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
  3474. PADDR (dispatch),
  3475. SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
  3476. NADDR (scratch),
  3477. SCR_JUMP,
  3478. PADDRH (msg_weird1),
  3479. }/*-------------------------< WDTR_RESP >----------------*/,{
  3480. /*
  3481. ** let the target fetch our answer.
  3482. */
  3483. SCR_SET (SCR_ATN),
  3484. 0,
  3485. SCR_CLR (SCR_ACK),
  3486. 0,
  3487. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  3488. PADDRH (nego_bad_phase),
  3489. }/*-------------------------< SEND_WDTR >----------------*/,{
  3490. /*
  3491. ** Send the M_X_WIDE_REQ
  3492. */
  3493. SCR_MOVE_ABS (4) ^ SCR_MSG_OUT,
  3494. NADDR (msgout),
  3495. SCR_JUMP,
  3496. PADDRH (msg_out_done),
  3497. }/*-------------------------< SDTR_RESP >-------------*/,{
  3498. /*
  3499. ** let the target fetch our answer.
  3500. */
  3501. SCR_SET (SCR_ATN),
  3502. 0,
  3503. SCR_CLR (SCR_ACK),
  3504. 0,
  3505. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  3506. PADDRH (nego_bad_phase),
  3507. }/*-------------------------< SEND_SDTR >-------------*/,{
  3508. /*
  3509. ** Send the M_X_SYNC_REQ
  3510. */
  3511. SCR_MOVE_ABS (5) ^ SCR_MSG_OUT,
  3512. NADDR (msgout),
  3513. SCR_JUMP,
  3514. PADDRH (msg_out_done),
  3515. }/*-------------------------< PPR_RESP >-------------*/,{
  3516. /*
  3517. ** let the target fetch our answer.
  3518. */
  3519. SCR_SET (SCR_ATN),
  3520. 0,
  3521. SCR_CLR (SCR_ACK),
  3522. 0,
  3523. SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
  3524. PADDRH (nego_bad_phase),
  3525. }/*-------------------------< SEND_PPR >-------------*/,{
  3526. /*
  3527. ** Send the M_X_PPR_REQ
  3528. */
  3529. SCR_MOVE_ABS (8) ^ SCR_MSG_OUT,
  3530. NADDR (msgout),
  3531. SCR_JUMP,
  3532. PADDRH (msg_out_done),
  3533. }/*-------------------------< NEGO_BAD_PHASE >------------*/,{
  3534. SCR_INT,
  3535. SIR_NEGO_PROTO,
  3536. SCR_JUMP,
  3537. PADDR (dispatch),
  3538. }/*-------------------------< MSG_OUT >-------------------*/,{
  3539. /*
  3540. ** The target requests a message.
  3541. */
  3542. SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
  3543. NADDR (msgout),
  3544. /*
  3545. ** ... wait for the next phase
  3546. ** if it's a message out, send it again, ...
  3547. */
  3548. SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
  3549. PADDRH (msg_out),
  3550. }/*-------------------------< MSG_OUT_DONE >--------------*/,{
  3551. /*
  3552. ** ... else clear the message ...
  3553. */
  3554. SCR_INT,
  3555. SIR_MSG_OUT_DONE,
  3556. /*
  3557. ** ... and process the next phase
  3558. */
  3559. SCR_JUMP,
  3560. PADDR (dispatch),
  3561. }/*-------------------------< DATA_OVRUN >-----------------------*/,{
  3562. /*
  3563.  *  Use scratcha to count the extra bytes.
  3564.  */
  3565. SCR_LOAD_ABS (scratcha, 4),
  3566. PADDRH (zero),
  3567. }/*-------------------------< DATA_OVRUN1 >----------------------*/,{
  3568. /*
  3569.  *  The target may want to transfer too much data.
  3570.  *
  3571.  *  If phase is DATA OUT write 1 byte and count it.
  3572.  */
  3573. SCR_JUMPR ^ IFFALSE (WHEN (SCR_DATA_OUT)),
  3574. 16,
  3575. SCR_CHMOV_ABS (1) ^ SCR_DATA_OUT,
  3576. NADDR (scratch),
  3577. SCR_JUMP,
  3578. PADDRH (data_ovrun2),
  3579. /*
  3580.  *  If WSR is set, clear this condition, and 
  3581.  *  count this byte.
  3582.  */
  3583. SCR_FROM_REG (scntl2),
  3584. 0,
  3585. SCR_JUMPR ^ IFFALSE (MASK (WSR, WSR)),
  3586. 16,
  3587. SCR_REG_REG (scntl2, SCR_OR, WSR),
  3588. 0,
  3589. SCR_JUMP,
  3590. PADDRH (data_ovrun2),
  3591. /*
  3592.  *  Finally check against DATA IN phase.
  3593.  *  Signal data overrun to the C code 
  3594.  *  and jump to dispatcher if not so.
  3595.  *  Read 1 byte otherwise and count it.
  3596.  */
  3597. SCR_JUMPR ^ IFTRUE (WHEN (SCR_DATA_IN)),
  3598. 16,
  3599. SCR_INT,
  3600. SIR_DATA_OVERRUN,
  3601. SCR_JUMP,
  3602. PADDR (dispatch),
  3603. SCR_CHMOV_ABS (1) ^ SCR_DATA_IN,
  3604. NADDR (scratch),
  3605. }/*-------------------------< DATA_OVRUN2 >----------------------*/,{
  3606. /*
  3607.  *  Count this byte.
  3608.  *  This will allow to return a negative 
  3609.  *  residual to user.
  3610.  */
  3611. SCR_REG_REG (scratcha,  SCR_ADD,  0x01),
  3612. 0,
  3613. SCR_REG_REG (scratcha1, SCR_ADDC, 0),
  3614. 0,
  3615. SCR_REG_REG (scratcha2, SCR_ADDC, 0),
  3616. 0,
  3617. /*
  3618.  *  .. and repeat as required.
  3619.  */
  3620. SCR_JUMP,
  3621. PADDRH (data_ovrun1),
  3622. }/*-------------------------< ABORT_RESEL >----------------*/,{
  3623. SCR_SET (SCR_ATN),
  3624. 0,
  3625. SCR_CLR (SCR_ACK),
  3626. 0,
  3627. /*
  3628. ** send the abort/abortag/reset message
  3629. ** we expect an immediate disconnect
  3630. */
  3631. SCR_REG_REG (scntl2, SCR_AND, 0x7f),
  3632. 0,
  3633. SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
  3634. NADDR (msgout),
  3635. SCR_CLR (SCR_ACK|SCR_ATN),
  3636. 0,
  3637. SCR_WAIT_DISC,
  3638. 0,
  3639. SCR_INT,
  3640. SIR_RESEL_ABORTED,
  3641. SCR_JUMP,
  3642. PADDR (start),
  3643. }/*-------------------------< RESEND_IDENT >-------------------*/,{
  3644. /*
  3645. ** The target stays in MSG OUT phase after having acked 
  3646. ** Identify [+ Tag [+ Extended message ]]. Targets shall
  3647. ** behave this way on parity error.
  3648. ** We must send it again all the messages.
  3649. */
  3650. SCR_SET (SCR_ATN), /* Shall be asserted 2 deskew delays before the  */
  3651. 0,         /* 1rst ACK = 90 ns. Hope the NCR is'nt too fast */
  3652. SCR_JUMP,
  3653. PADDR (send_ident),
  3654. }/*-------------------------< IDENT_BREAK >-------------------*/,{
  3655. SCR_CLR (SCR_ATN),
  3656. 0,
  3657. SCR_JUMP,
  3658. PADDR (select2),
  3659. }/*-------------------------< IDENT_BREAK_ATN >----------------*/,{
  3660. SCR_SET (SCR_ATN),
  3661. 0,
  3662. SCR_JUMP,
  3663. PADDR (select2),
  3664. }/*-------------------------< SDATA_IN >-------------------*/,{
  3665. SCR_CHMOV_TBL ^ SCR_DATA_IN,
  3666. offsetof (struct dsb, sense),
  3667. SCR_CALL,
  3668. PADDR (datai_done),
  3669. SCR_JUMP,
  3670. PADDRH (data_ovrun),
  3671. }/*-------------------------< DATA_IO >--------------------*/,{
  3672. /*
  3673. ** We jump here if the data direction was unknown at the 
  3674. ** time we had to queue the command to the scripts processor.
  3675. ** Pointers had been set as follow in this situation:
  3676. **   savep   -->   DATA_IO
  3677. **   lastp   -->   start pointer when DATA_IN
  3678. **   goalp   -->   goal  pointer when DATA_IN
  3679. **   wlastp  -->   start pointer when DATA_OUT
  3680. **   wgoalp  -->   goal  pointer when DATA_OUT
  3681. ** This script sets savep/lastp/goalp according to the 
  3682. ** direction chosen by the target.
  3683. */
  3684. SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
  3685. PADDRH(data_io_out),
  3686. }/*-------------------------< DATA_IO_COM >-----------------*/,{
  3687. /*
  3688. ** Direction is DATA IN.
  3689. ** Warning: we jump here, even when phase is DATA OUT.
  3690. */
  3691. SCR_LOAD_REL  (scratcha, 4),
  3692. offsetof (struct ccb, phys.header.lastp),
  3693. SCR_STORE_REL (scratcha, 4),
  3694. offsetof (struct ccb, phys.header.savep),
  3695. /*
  3696. ** Jump to the SCRIPTS according to actual direction.
  3697. */
  3698. SCR_LOAD_REL  (temp, 4),
  3699. offsetof (struct ccb, phys.header.savep),
  3700. SCR_RETURN,
  3701. 0,
  3702. }/*-------------------------< DATA_IO_OUT >-----------------*/,{
  3703. /*
  3704. ** Direction is DATA OUT.
  3705. */
  3706. SCR_REG_REG (HF_REG, SCR_AND, (~HF_DATA_IN)),
  3707. 0,
  3708. SCR_LOAD_REL  (scratcha, 4),
  3709. offsetof (struct ccb, phys.header.wlastp),
  3710. SCR_STORE_REL (scratcha, 4),
  3711. offsetof (struct ccb, phys.header.lastp),
  3712. SCR_LOAD_REL  (scratcha, 4),
  3713. offsetof (struct ccb, phys.header.wgoalp),
  3714. SCR_STORE_REL (scratcha, 4),
  3715. offsetof (struct ccb, phys.header.goalp),
  3716. SCR_JUMP,
  3717. PADDRH(data_io_com),
  3718. }/*-------------------------< RESEL_BAD_LUN >---------------*/,{
  3719. /*
  3720. ** Message is an IDENTIFY, but lun is unknown.
  3721. ** Signal problem to C code for logging the event.
  3722. ** Send a M_ABORT to clear all pending tasks.
  3723. */
  3724. SCR_INT,
  3725. SIR_RESEL_BAD_LUN,
  3726. SCR_JUMP,
  3727. PADDRH (abort_resel),
  3728. }/*-------------------------< BAD_I_T_L >------------------*/,{
  3729. /*
  3730. ** We donnot have a task for that I_T_L.
  3731. ** Signal problem to C code for logging the event.
  3732. ** Send a M_ABORT message.
  3733. */
  3734. SCR_INT,
  3735. SIR_RESEL_BAD_I_T_L,
  3736. SCR_JUMP,
  3737. PADDRH (abort_resel),
  3738. }/*-------------------------< BAD_I_T_L_Q >----------------*/,{
  3739. /*
  3740. ** We donnot have a task that matches the tag.
  3741. ** Signal problem to C code for logging the event.
  3742. ** Send a M_ABORTTAG message.
  3743. */
  3744. SCR_INT,
  3745. SIR_RESEL_BAD_I_T_L_Q,
  3746. SCR_JUMP,
  3747. PADDRH (abort_resel),
  3748. }/*-------------------------< BAD_STATUS >-----------------*/,{
  3749. /*
  3750. ** Anything different from INTERMEDIATE 
  3751. ** CONDITION MET should be a bad SCSI status, 
  3752. ** given that GOOD status has already been tested.
  3753. ** Call the C code.
  3754. */
  3755. SCR_LOAD_ABS (scratcha, 4),
  3756. PADDRH (startpos),
  3757. SCR_INT ^ IFFALSE (DATA (S_COND_MET)),
  3758. SIR_BAD_STATUS,
  3759. SCR_RETURN,
  3760. 0,
  3761. }/*-------------------------< TWEAK_PMJ >------------------*/,{
  3762. /*
  3763. ** Disable PM handling from SCRIPTS for the data phase 
  3764. ** and so force PM to be handled from C code if HF_PM_TO_C 
  3765. ** flag is set.
  3766. */
  3767. SCR_FROM_REG(HF_REG),
  3768. 0,
  3769. SCR_JUMPR ^ IFTRUE (MASK (HF_PM_TO_C, HF_PM_TO_C)),
  3770. 16,
  3771. SCR_REG_REG (ccntl0, SCR_OR, ENPMJ),
  3772. 0,
  3773. SCR_RETURN,
  3774.   0,
  3775. SCR_REG_REG (ccntl0, SCR_AND, (~ENPMJ)),
  3776. 0,
  3777. SCR_RETURN,
  3778.   0,
  3779. }/*-------------------------< PM_HANDLE >------------------*/,{
  3780. /*
  3781. ** Phase mismatch handling.
  3782. **
  3783. ** Since we have to deal with 2 SCSI data pointers  
  3784. ** (current and saved), we need at least 2 contexts.
  3785. ** Each context (pm0 and pm1) has a saved area, a 
  3786. ** SAVE mini-script and a DATA phase mini-script.
  3787. */
  3788. /*
  3789. ** Get the PM handling flags.
  3790. */
  3791. SCR_FROM_REG (HF_REG),
  3792. 0,
  3793. /*
  3794. ** If no flags (1rst PM for example), avoid 
  3795. ** all the below heavy flags testing.
  3796. ** This makes the normal case a bit faster.
  3797. */
  3798. SCR_JUMP ^ IFTRUE (MASK (0, (HF_IN_PM0 | HF_IN_PM1 | HF_DP_SAVED))),
  3799. PADDRH (pm_handle1),
  3800. /*
  3801. ** If we received a SAVE DP, switch to the 
  3802. ** other PM context since the savep may point 
  3803. ** to the current PM context.
  3804. */
  3805. SCR_JUMPR ^ IFFALSE (MASK (HF_DP_SAVED, HF_DP_SAVED)),
  3806. 8,
  3807. SCR_REG_REG (sfbr, SCR_XOR, HF_ACT_PM),
  3808. 0,
  3809. /*
  3810. ** If we have been interrupt in a PM DATA mini-script,
  3811. ** we take the return address from the corresponding 
  3812. ** saved area.
  3813. ** This ensure the return address always points to the 
  3814. ** main DATA script for this transfer.
  3815. */
  3816. SCR_JUMP ^ IFTRUE (MASK (0, (HF_IN_PM0 | HF_IN_PM1))),
  3817. PADDRH (pm_handle1),
  3818. SCR_JUMPR ^ IFFALSE (MASK (HF_IN_PM0, HF_IN_PM0)),
  3819. 16,
  3820. SCR_LOAD_REL (ia, 4),
  3821. offsetof(struct ccb, phys.pm0.ret),
  3822. SCR_JUMP,
  3823. PADDRH (pm_save),
  3824. SCR_LOAD_REL (ia, 4),
  3825. offsetof(struct ccb, phys.pm1.ret),
  3826. SCR_JUMP,
  3827. PADDRH (pm_save),
  3828. }/*-------------------------< PM_HANDLE1 >-----------------*/,{
  3829. /*
  3830. ** Normal case.
  3831. ** Update the return address so that it 
  3832. ** will point after the interrupted MOVE.
  3833. */
  3834. SCR_REG_REG (ia, SCR_ADD, 8),
  3835. 0,
  3836. SCR_REG_REG (ia1, SCR_ADDC, 0),
  3837. 0,
  3838. }/*-------------------------< PM_SAVE >--------------------*/,{
  3839. /*
  3840. ** Clear all the flags that told us if we were 
  3841. ** interrupted in a PM DATA mini-script and/or 
  3842. ** we received a SAVE DP.
  3843. */
  3844. SCR_SFBR_REG (HF_REG, SCR_AND, (~(HF_IN_PM0|HF_IN_PM1|HF_DP_SAVED))),
  3845. 0,
  3846. /*
  3847. ** Choose the current PM context.
  3848. */
  3849. SCR_JUMP ^ IFTRUE (MASK (HF_ACT_PM, HF_ACT_PM)),
  3850. PADDRH (pm1_save),
  3851. }/*-------------------------< PM0_SAVE >-------------------*/,{
  3852. SCR_STORE_REL (ia, 4),
  3853. offsetof(struct ccb, phys.pm0.ret),
  3854. /*
  3855. ** If WSR bit is set, either UA and RBC may 
  3856. ** have to be changed whatever the device wants 
  3857. ** to ignore this residue ot not.
  3858. */
  3859. SCR_FROM_REG (scntl2),
  3860. 0,
  3861. SCR_CALL ^ IFTRUE (MASK (WSR, WSR)),
  3862. PADDRH (pm_wsr_handle),
  3863. /*
  3864. ** Save the remaining byte count, the updated 
  3865. ** address and the return address.
  3866. */
  3867. SCR_STORE_REL (rbc, 4),
  3868. offsetof(struct ccb, phys.pm0.sg.size),
  3869. SCR_STORE_REL (ua, 4),
  3870. offsetof(struct ccb, phys.pm0.sg.addr),
  3871. /*
  3872. ** Set the current pointer at the PM0 DATA mini-script.
  3873. */
  3874. SCR_LOAD_ABS (temp, 4),
  3875. PADDRH (pm0_data_addr),
  3876. SCR_JUMP,
  3877. PADDR (dispatch),
  3878. }/*-------------------------< PM1_SAVE >-------------------*/,{
  3879. SCR_STORE_REL (ia, 4),
  3880. offsetof(struct ccb, phys.pm1.ret),
  3881. /*
  3882. ** If WSR bit is set, either UA and RBC may 
  3883. ** have been changed whatever the device wants 
  3884. ** to ignore this residue or not.
  3885. */
  3886. SCR_FROM_REG (scntl2),
  3887. 0,
  3888. SCR_CALL ^ IFTRUE (MASK (WSR, WSR)),
  3889. PADDRH (pm_wsr_handle),
  3890. /*
  3891. ** Save the remaining byte count, the updated 
  3892. ** address and the return address.
  3893. */
  3894. SCR_STORE_REL (rbc, 4),
  3895. offsetof(struct ccb, phys.pm1.sg.size),
  3896. SCR_STORE_REL (ua, 4),
  3897. offsetof(struct ccb, phys.pm1.sg.addr),
  3898. /*
  3899. ** Set the current pointer at the PM1 DATA mini-script.
  3900. */
  3901. SCR_LOAD_ABS (temp, 4),
  3902. PADDRH (pm1_data_addr),
  3903. SCR_JUMP,
  3904. PADDR (dispatch),
  3905. }/*--------------------------< PM_WSR_HANDLE >-----------------------*/,{
  3906. /*
  3907.  *  Phase mismatch handling from SCRIPT with WSR set.
  3908.  *  Such a condition can occur if the chip wants to 
  3909.  *  execute a CHMOV(size > 1) when the WSR bit is 
  3910.  *  set and the target changes PHASE.
  3911.  */
  3912. #ifdef SYM_DEBUG_PM_WITH_WSR
  3913. /*
  3914.  *  Some debugging may still be needed.:)
  3915.  */ 
  3916. SCR_INT,
  3917. SIR_PM_WITH_WSR,
  3918. #endif
  3919. /*
  3920.  *  We must move the residual byte to memory.
  3921.  *
  3922.  *  UA contains bit 0..31 of the address to 
  3923.  *  move the residual byte.
  3924.  *  Move it to the table indirect.
  3925.  */
  3926. SCR_STORE_REL (ua, 4),
  3927. offsetof (struct ccb, phys.wresid.addr),
  3928. /*
  3929.  *  Increment UA (move address to next position).
  3930.  */
  3931. SCR_REG_REG (ua, SCR_ADD, 1),
  3932. 0,
  3933. SCR_REG_REG (ua1, SCR_ADDC, 0),
  3934. 0,
  3935. SCR_REG_REG (ua2, SCR_ADDC, 0),
  3936. 0,
  3937. SCR_REG_REG (ua3, SCR_ADDC, 0),
  3938. 0,
  3939. /*
  3940.  *  Compute SCRATCHA as:
  3941.  *  - size to transfer = 1 byte.
  3942.  *  - bit 24..31 = high address bit [32...39].
  3943.  */
  3944. SCR_LOAD_ABS (scratcha, 4),
  3945. PADDRH (zero),
  3946. SCR_REG_REG (scratcha, SCR_OR, 1),
  3947. 0,
  3948. SCR_FROM_REG (rbc3),
  3949. 0,
  3950. SCR_TO_REG (scratcha3),
  3951. 0,
  3952. /*
  3953.  *  Move this value to the table indirect.
  3954.  */
  3955. SCR_STORE_REL (scratcha, 4),
  3956. offsetof (struct ccb, phys.wresid.size),
  3957. /*
  3958.  *  Wait for a valid phase.
  3959.  *  While testing with bogus QUANTUM drives, the C1010 
  3960.  *  sometimes raised a spurious phase mismatch with 
  3961.  *  WSR and the CHMOV(1) triggered another PM.
  3962.  *  Waiting explicitely for the PHASE seemed to avoid 
  3963.  *  the nested phase mismatch. Btw, this didn't happen 
  3964.  *  using my IBM drives.
  3965.  */
  3966. SCR_JUMPR ^ IFFALSE (WHEN (SCR_DATA_IN)),
  3967. 0,
  3968. /*
  3969.  *  Perform the move of the residual byte.
  3970.  */
  3971. SCR_CHMOV_TBL ^ SCR_DATA_IN,
  3972. offsetof (struct ccb, phys.wresid),
  3973. /*
  3974.  *  We can now handle the phase mismatch with UA fixed.
  3975.  *  RBC[0..23]=0 is a special case that does not require 
  3976.  *  a PM context. The C code also checks against this.
  3977.  */
  3978. SCR_FROM_REG (rbc),
  3979. 0,
  3980. SCR_RETURN ^ IFFALSE (DATA (0)),
  3981. 0,
  3982. SCR_FROM_REG (rbc1),
  3983. 0,
  3984. SCR_RETURN ^ IFFALSE (DATA (0)),
  3985. 0,
  3986. SCR_FROM_REG (rbc2),
  3987. 0,
  3988. SCR_RETURN ^ IFFALSE (DATA (0)),
  3989. 0,
  3990. /*
  3991.  *  RBC[0..23]=0.
  3992.  *  Not only we donnot need a PM context, but this would 
  3993.  *  lead to a bogus CHMOV(0). This condition means that 
  3994.  *  the residual was the last byte to move from this CHMOV.
  3995.  *  So, we just have to move the current data script pointer 
  3996.  *  (i.e. TEMP) to the SCRIPTS address following the 
  3997.  *  interrupted CHMOV and jump to dispatcher.
  3998.  */
  3999. SCR_STORE_ABS (ia, 4),
  4000. PADDRH (scratch),
  4001. SCR_LOAD_ABS (temp, 4),
  4002. PADDRH (scratch),
  4003. SCR_JUMP,
  4004. PADDR (dispatch),
  4005. }/*--------------------------< WSR_MA_HELPER >-----------------------*/,{
  4006. /*
  4007.  *  Helper for the C code when WSR bit is set.
  4008.  *  Perform the move of the residual byte.
  4009.  */
  4010. SCR_CHMOV_TBL ^ SCR_DATA_IN,
  4011. offsetof (struct ccb, phys.wresid),
  4012. SCR_JUMP,
  4013. PADDR (dispatch),
  4014. }/*-------------------------< ZERO >------------------------*/,{
  4015. SCR_DATA_ZERO,
  4016. }/*-------------------------< SCRATCH >---------------------*/,{
  4017. SCR_DATA_ZERO,
  4018. }/*-------------------------< SCRATCH1 >--------------------*/,{
  4019. SCR_DATA_ZERO,
  4020. }/*-------------------------< PM0_DATA_ADDR >---------------*/,{
  4021. SCR_DATA_ZERO,
  4022. }/*-------------------------< PM1_DATA_ADDR >---------------*/,{
  4023. SCR_DATA_ZERO,
  4024. }/*-------------------------< SAVED_DSA >-------------------*/,{
  4025. SCR_DATA_ZERO,
  4026. }/*-------------------------< SAVED_DRS >-------------------*/,{
  4027. SCR_DATA_ZERO,
  4028. }/*-------------------------< DONE_POS >--------------------*/,{
  4029. SCR_DATA_ZERO,
  4030. }/*-------------------------< STARTPOS >--------------------*/,{
  4031. SCR_DATA_ZERO,
  4032. }/*-------------------------< TARGTBL >---------------------*/,{
  4033. SCR_DATA_ZERO,
  4034. /*
  4035. ** We may use MEMORY MOVE instructions to load the on chip-RAM,
  4036. ** if it happens that mapping PCI memory is not possible.
  4037. ** But writing the RAM from the CPU is the preferred method, 
  4038. ** since PCI 2.2 seems to disallow PCI self-mastering.
  4039. */
  4040. #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  4041. }/*-------------------------< START_RAM >-------------------*/,{
  4042. /*
  4043. ** Load the script into on-chip RAM, 
  4044. ** and jump to start point.
  4045. */
  4046. SCR_COPY (sizeof (struct script)),
  4047. }/*-------------------------< SCRIPT0_BA >--------------------*/,{
  4048. 0,
  4049. PADDR (start),
  4050. SCR_JUMP,
  4051. PADDR (init),
  4052. }/*-------------------------< START_RAM64 >--------------------*/,{
  4053. /*
  4054. ** Load the RAM and start for 64 bit PCI (895A,896).
  4055. ** Both scripts (script and scripth) are loaded into 
  4056. ** the RAM which is 8K (4K for 825A/875/895).
  4057. ** We also need to load some 32-63 bit segments 
  4058. ** address of the SCRIPTS processor.
  4059. ** LOAD/STORE ABSOLUTE always refers to on-chip RAM 
  4060. ** in our implementation. The main memory is 
  4061. ** accessed using LOAD/STORE DSA RELATIVE.
  4062. */
  4063. SCR_LOAD_REL (mmws, 4),
  4064. offsetof (struct ncb, scr_ram_seg),
  4065. SCR_COPY (sizeof(struct script)),
  4066. }/*-------------------------< SCRIPT0_BA64 >--------------------*/,{
  4067. 0,
  4068. PADDR (start),
  4069. SCR_COPY (sizeof(struct scripth)),
  4070. }/*-------------------------< SCRIPTH0_BA64 >--------------------*/,{
  4071. 0,
  4072. PADDRH  (start64),
  4073. SCR_LOAD_REL  (mmrs, 4),
  4074. offsetof (struct ncb, scr_ram_seg),
  4075. SCR_JUMP64,
  4076. PADDRH (start64),
  4077. }/*-------------------------< RAM_SEG64 >--------------------*/,{
  4078. 0,
  4079. #endif /* SCSI_NCR_PCI_MEM_NOT_SUPPORTED */
  4080. }/*-------------------------< SNOOPTEST >-------------------*/,{
  4081. /*
  4082. ** Read the variable.
  4083. */
  4084. SCR_LOAD_REL (scratcha, 4),
  4085. offsetof(struct ncb, ncr_cache),
  4086. SCR_STORE_REL (temp, 4),
  4087. offsetof(struct ncb, ncr_cache),
  4088. SCR_LOAD_REL (temp, 4),
  4089. offsetof(struct ncb, ncr_cache),
  4090. }/*-------------------------< SNOOPEND >-------------------*/,{
  4091. /*
  4092. ** And stop.
  4093. */
  4094. SCR_INT,
  4095. 99,
  4096. }/*--------------------------------------------------------*/
  4097. };
  4098. /*==========================================================
  4099. **
  4100. **
  4101. ** Fill in #define dependent parts of the script
  4102. **
  4103. **
  4104. **==========================================================
  4105. */
  4106. void __init ncr_script_fill (struct script * scr, struct scripth * scrh)
  4107. {
  4108. int i;
  4109. ncrcmd *p;
  4110. p = scr->data_in;
  4111. for (i=0; i<MAX_SCATTER; i++) {
  4112. *p++ =SCR_CHMOV_TBL ^ SCR_DATA_IN;
  4113. *p++ =offsetof (struct dsb, data[i]);
  4114. };
  4115. assert ((u_long)p == (u_long)&scr->data_in + sizeof (scr->data_in));
  4116. p = scr->data_out;
  4117. for (i=0; i<MAX_SCATTER; i++) {
  4118. *p++ =SCR_CHMOV_TBL ^ SCR_DATA_OUT;
  4119. *p++ =offsetof (struct dsb, data[i]);
  4120. };
  4121. assert ((u_long)p == (u_long)&scr->data_out + sizeof (scr->data_out));
  4122. }
  4123. /*==========================================================
  4124. **
  4125. **
  4126. ** Copy and rebind a script.
  4127. **
  4128. **
  4129. **==========================================================
  4130. */
  4131. static void __init 
  4132. ncr_script_copy_and_bind (ncb_p np,ncrcmd *src,ncrcmd *dst,int len)
  4133. {
  4134. ncrcmd  opcode, new, old, tmp1, tmp2;
  4135. ncrcmd *start, *end;
  4136. int relocs;
  4137. int opchanged = 0;
  4138. start = src;
  4139. end = src + len/4;
  4140. while (src < end) {
  4141. opcode = *src++;
  4142. *dst++ = cpu_to_scr(opcode);
  4143. /*
  4144. ** If we forget to change the length
  4145. ** in struct script, a field will be
  4146. ** padded with 0. This is an illegal
  4147. ** command.
  4148. */
  4149. if (opcode == 0) {
  4150. printk (KERN_INFO "%s: ERROR0 IN SCRIPT at %d.n",
  4151. ncr_name(np), (int) (src-start-1));
  4152. MDELAY (10000);
  4153. continue;
  4154. };
  4155. /*
  4156. ** We use the bogus value 0xf00ff00f ;-)
  4157. ** to reserve data area in SCRIPTS.
  4158. */
  4159. if (opcode == SCR_DATA_ZERO) {
  4160. dst[-1] = 0;
  4161. continue;
  4162. }
  4163. if (DEBUG_FLAGS & DEBUG_SCRIPT)
  4164. printk (KERN_INFO "%p:  <%x>n",
  4165. (src-1), (unsigned)opcode);
  4166. /*
  4167. ** We don't have to decode ALL commands
  4168. */
  4169. switch (opcode >> 28) {
  4170. case 0xf:
  4171. /*
  4172. ** LOAD / STORE DSA relative, don't relocate.
  4173. */
  4174. relocs = 0;
  4175. break;
  4176. case 0xe:
  4177. /*
  4178. ** LOAD / STORE absolute.
  4179. */
  4180. relocs = 1;
  4181. break;
  4182. case 0xc:
  4183. /*
  4184. ** COPY has TWO arguments.
  4185. */
  4186. relocs = 2;
  4187. tmp1 = src[0];
  4188. tmp2 = src[1];
  4189. #ifdef RELOC_KVAR
  4190. if ((tmp1 & RELOC_MASK) == RELOC_KVAR)
  4191. tmp1 = 0;
  4192. if ((tmp2 & RELOC_MASK) == RELOC_KVAR)
  4193. tmp2 = 0;
  4194. #endif
  4195. if ((tmp1 ^ tmp2) & 3) {
  4196. printk (KERN_ERR"%s: ERROR1 IN SCRIPT at %d.n",
  4197. ncr_name(np), (int) (src-start-1));
  4198. MDELAY (1000);
  4199. }
  4200. /*
  4201. ** If PREFETCH feature not enabled, remove 
  4202. ** the NO FLUSH bit if present.
  4203. */
  4204. if ((opcode & SCR_NO_FLUSH) &&
  4205.     !(np->features & FE_PFEN)) {
  4206. dst[-1] = cpu_to_scr(opcode & ~SCR_NO_FLUSH);
  4207. ++opchanged;
  4208. }
  4209. break;
  4210. case 0x0:
  4211. /*
  4212. ** MOVE/CHMOV (absolute address)
  4213. */
  4214. if (!(np->features & FE_WIDE))
  4215. dst[-1] = cpu_to_scr(opcode | OPC_MOVE);
  4216. relocs = 1;
  4217. break;
  4218. case 0x1:
  4219. /*
  4220. ** MOVE/CHMOV (table indirect)
  4221. */
  4222. if (!(np->features & FE_WIDE))
  4223. dst[-1] = cpu_to_scr(opcode | OPC_MOVE);
  4224. relocs = 0;
  4225. break;
  4226. case 0x8:
  4227. /*
  4228. ** JUMP / CALL
  4229. ** dont't relocate if relative :-)
  4230. */
  4231. if (opcode & 0x00800000)
  4232. relocs = 0;
  4233. else if ((opcode & 0xf8400000) == 0x80400000)/*JUMP64*/
  4234. relocs = 2;
  4235. else
  4236. relocs = 1;
  4237. break;
  4238. case 0x4:
  4239. case 0x5:
  4240. case 0x6:
  4241. case 0x7:
  4242. relocs = 1;
  4243. break;
  4244. default:
  4245. relocs = 0;
  4246. break;
  4247. };
  4248. if (!relocs) {
  4249. *dst++ = cpu_to_scr(*src++);
  4250. continue;
  4251. }
  4252. while (relocs--) {
  4253. old = *src++;
  4254. switch (old & RELOC_MASK) {
  4255. case RELOC_REGISTER:
  4256. new = (old & ~RELOC_MASK) + np->base_ba;
  4257. break;
  4258. case RELOC_LABEL:
  4259. new = (old & ~RELOC_MASK) + np->p_script;
  4260. break;
  4261. case RELOC_LABELH:
  4262. new = (old & ~RELOC_MASK) + np->p_scripth;
  4263. break;
  4264. case RELOC_SOFTC:
  4265. new = (old & ~RELOC_MASK) + np->p_ncb;
  4266. break;
  4267. #ifdef RELOC_KVAR
  4268. case RELOC_KVAR:
  4269. new=0;
  4270. if (((old & ~RELOC_MASK) < SCRIPT_KVAR_FIRST) ||
  4271.     ((old & ~RELOC_MASK) > SCRIPT_KVAR_LAST))
  4272. panic("ncr KVAR out of range");
  4273. new = vtobus(script_kvars[old & ~RELOC_MASK]);
  4274. #endif
  4275. break;
  4276. case 0:
  4277. /* Don't relocate a 0 address. */
  4278. if (old == 0) {
  4279. new = old;
  4280. break;
  4281. }
  4282. /* fall through */
  4283. default:
  4284. new = 0; /* For 'cc' not to complain */
  4285. panic("ncr_script_copy_and_bind: "
  4286.       "weird relocation %xn", old);
  4287. break;
  4288. }
  4289. *dst++ = cpu_to_scr(new);
  4290. }
  4291. };
  4292. }
  4293. /*==========================================================
  4294. **
  4295. **
  4296. **      Auto configuration:  attach and init a host adapter.
  4297. **
  4298. **
  4299. **==========================================================
  4300. */
  4301. /*
  4302. ** Linux host data structure.
  4303. */
  4304. struct host_data {
  4305.      struct ncb *ncb;
  4306. };
  4307. /*
  4308. ** Print something which allows to retrieve the controler type, unit,
  4309. ** target, lun concerned by a kernel message.
  4310. */
  4311. static void PRINT_TARGET(ncb_p np, int target)
  4312. {
  4313. printk(KERN_INFO "%s-<%d,*>: ", ncr_name(np), target);
  4314. }
  4315. static void PRINT_LUN(ncb_p np, int target, int lun)
  4316. {
  4317. printk(KERN_INFO "%s-<%d,%d>: ", ncr_name(np), target, lun);
  4318. }
  4319. static void PRINT_ADDR(Scsi_Cmnd *cmd)
  4320. {
  4321. struct host_data *host_data = (struct host_data *) cmd->host->hostdata;
  4322. PRINT_LUN(host_data->ncb, cmd->target, cmd->lun);
  4323. }
  4324. /*==========================================================
  4325. **
  4326. ** NCR chip clock divisor table.
  4327. ** Divisors are multiplied by 10,000,000 in order to make 
  4328. ** calculations more simple.
  4329. **
  4330. **==========================================================
  4331. */
  4332. #define _5M 5000000
  4333. static u_long div_10M[] =
  4334. {2*_5M, 3*_5M, 4*_5M, 6*_5M, 8*_5M, 12*_5M, 16*_5M};
  4335. /*===============================================================
  4336. **
  4337. ** Prepare io register values used by ncr_init() according 
  4338. ** to selected and supported features.
  4339. **
  4340. ** NCR/SYMBIOS chips allow burst lengths of 2, 4, 8, 16, 32, 64,
  4341. ** 128 transfers. All chips support at least 16 transfers bursts. 
  4342. ** The 825A, 875 and 895 chips support bursts of up to 128 
  4343. ** transfers and the 895A and 896 support bursts of up to 64 
  4344. ** transfers. All other chips support up to 16 transfers bursts.
  4345. **
  4346. ** For PCI 32 bit data transfers each transfer is a DWORD (4 bytes).
  4347. ** It is a QUADWORD (8 bytes) for PCI 64 bit data transfers.
  4348. ** Only the 896 is able to perform 64 bit data transfers.
  4349. **
  4350. ** We use log base 2 (burst length) as internal code, with 
  4351. ** value 0 meaning "burst disabled".
  4352. **
  4353. **===============================================================
  4354. */
  4355. /*
  4356.  * Burst length from burst code.
  4357.  */
  4358. #define burst_length(bc) (!(bc))? 0 : 1 << (bc)
  4359. /*
  4360.  * Burst code from io register bits.
  4361.  */
  4362. #define burst_code(dmode, ctest4, ctest5) 
  4363. (ctest4) & 0x80? 0 : (((dmode) & 0xc0) >> 6) + ((ctest5) & 0x04) + 1
  4364. /*
  4365.  * Set initial io register bits from burst code.
  4366.  */
  4367. static inline void ncr_init_burst(ncb_p np, u_char bc)
  4368. {
  4369. np->rv_ctest4 &= ~0x80;
  4370. np->rv_dmode &= ~(0x3 << 6);
  4371. np->rv_ctest5 &= ~0x4;
  4372. if (!bc) {
  4373. np->rv_ctest4 |= 0x80;
  4374. }
  4375. else {
  4376. --bc;
  4377. np->rv_dmode |= ((bc & 0x3) << 6);
  4378. np->rv_ctest5 |= (bc & 0x4);
  4379. }
  4380. }
  4381. #ifdef SCSI_NCR_NVRAM_SUPPORT
  4382. /*
  4383. ** Get target set-up from Symbios format NVRAM.
  4384. */
  4385. static void __init 
  4386. ncr_Symbios_setup_target(ncb_p np, int target, Symbios_nvram *nvram)
  4387. {
  4388. tcb_p tp = &np->target[target];
  4389. Symbios_target *tn = &nvram->target[target];
  4390. tp->usrsync = tn->sync_period ? (tn->sync_period + 3) / 4 : 255;
  4391. tp->usrwide = tn->bus_width == 0x10 ? 1 : 0;
  4392. tp->usrtags =
  4393. (tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? MAX_TAGS : 0;
  4394. if (!(tn->flags & SYMBIOS_DISCONNECT_ENABLE))
  4395. tp->usrflag |= UF_NODISC;
  4396. if (!(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME))
  4397. tp->usrflag |= UF_NOSCAN;
  4398. }
  4399. /*
  4400. ** Get target set-up from Tekram format NVRAM.
  4401. */
  4402. static void __init
  4403. ncr_Tekram_setup_target(ncb_p np, int target, Tekram_nvram *nvram)
  4404. {
  4405. tcb_p tp = &np->target[target];
  4406. struct Tekram_target *tn = &nvram->target[target];
  4407. int i;
  4408. if (tn->flags & TEKRAM_SYNC_NEGO) {
  4409. i = tn->sync_index & 0xf;
  4410. tp->usrsync = Tekram_sync[i];
  4411. }
  4412. tp->usrwide = (tn->flags & TEKRAM_WIDE_NEGO) ? 1 : 0;
  4413. if (tn->flags & TEKRAM_TAGGED_COMMANDS) {
  4414. tp->usrtags = 2 << nvram->max_tags_index;
  4415. }
  4416. if (!(tn->flags & TEKRAM_DISCONNECT_ENABLE))
  4417. tp->usrflag = UF_NODISC;
  4418.  
  4419. /* If any device does not support parity, we will not use this option */
  4420. if (!(tn->flags & TEKRAM_PARITY_CHECK))
  4421. np->rv_scntl0  &= ~0x0a; /* SCSI parity checking disabled */
  4422. }
  4423. #endif /* SCSI_NCR_NVRAM_SUPPORT */
  4424. /*
  4425. ** Save initial settings of some IO registers.
  4426. ** Assumed to have been set by BIOS.
  4427. */
  4428. static void __init ncr_save_initial_setting(ncb_p np)
  4429. {
  4430. np->sv_scntl0 = INB(nc_scntl0) & 0x0a;
  4431. np->sv_dmode = INB(nc_dmode)  & 0xce;
  4432. np->sv_dcntl = INB(nc_dcntl)  & 0xa8;
  4433. np->sv_ctest3 = INB(nc_ctest3) & 0x01;
  4434. np->sv_ctest4 = INB(nc_ctest4) & 0x80;
  4435. np->sv_gpcntl = INB(nc_gpcntl);
  4436. np->sv_stest2 = INB(nc_stest2) & 0x20;
  4437. np->sv_stest4 = INB(nc_stest4);
  4438. np->sv_stest1 = INB(nc_stest1);
  4439.   np->sv_scntl3   = INB(nc_scntl3) & 0x07;
  4440.  
  4441.   if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  4442.     (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66) ){
  4443.   /*
  4444.   ** C1010 always uses large fifo, bit 5 rsvd
  4445.   ** scntl4 used ONLY with C1010
  4446.   */
  4447.   np->sv_ctest5 = INB(nc_ctest5) & 0x04 ; 
  4448.   np->sv_scntl4 = INB(nc_scntl4); 
  4449.          }
  4450.          else {
  4451.   np->sv_ctest5 = INB(nc_ctest5) & 0x24 ; 
  4452.   np->sv_scntl4 = 0;
  4453.          }
  4454. }
  4455. /*