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

嵌入式Linux

开发平台:

Unix_Linux

  1. ** Prepare io register values used by ncr_init() 
  2. ** according to selected and supported features.
  3. */
  4. static int __init ncr_prepare_setting(ncb_p np, ncr_nvram *nvram)
  5. {
  6. u_char burst_max;
  7. u_long period;
  8. int i;
  9. /*
  10. ** Wide ?
  11. */
  12. np->maxwide = (np->features & FE_WIDE)? 1 : 0;
  13.   /*
  14.  *  Guess the frequency of the chip's clock.
  15.  */
  16. if (np->features & (FE_ULTRA3 | FE_ULTRA2))
  17. np->clock_khz = 160000;
  18. else if (np->features & FE_ULTRA)
  19. np->clock_khz = 80000;
  20. else
  21. np->clock_khz = 40000;
  22. /*
  23.  *  Get the clock multiplier factor.
  24.    */
  25. if (np->features & FE_QUAD)
  26. np->multiplier = 4;
  27. else if (np->features & FE_DBLR)
  28. np->multiplier = 2;
  29. else
  30. np->multiplier = 1;
  31. /*
  32.  *  Measure SCSI clock frequency for chips 
  33.  *  it may vary from assumed one.
  34.  */
  35. if (np->features & FE_VARCLK)
  36. ncr_getclock(np, np->multiplier);
  37. /*
  38.  * Divisor to be used for async (timer pre-scaler).
  39.  *
  40.  * Note: For C1010 the async divisor is 2(8) if he
  41.  * quadrupler is disabled (enabled).
  42.  */
  43. if ( (np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  44. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
  45. np->rv_scntl3 = 0; 
  46. }
  47. else
  48. {
  49. i = np->clock_divn - 1;
  50. while (--i >= 0) {
  51. if (10ul * SCSI_NCR_MIN_ASYNC * np->clock_khz 
  52. > div_10M[i]) {
  53. ++i;
  54. break;
  55. }
  56. }
  57. np->rv_scntl3 = i+1;
  58. }
  59. /*
  60.  * Save the ultra3 register for the C1010/C1010_66
  61.  */
  62. np->rv_scntl4 = np->sv_scntl4;
  63. /*
  64.  * Minimum synchronous period factor supported by the chip.
  65.  * Btw, 'period' is in tenths of nanoseconds.
  66.  */
  67. period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
  68. if (period <= 250) np->minsync = 10;
  69. else if (period <= 303) np->minsync = 11;
  70. else if (period <= 500) np->minsync = 12;
  71. else np->minsync = (period + 40 - 1) / 40;
  72. /*
  73.  * Fix up. If sync. factor is 10 (160000Khz clock) and chip
  74.  * supports ultra3, then min. sync. period 12.5ns and the factor is 9 
  75.  * Also keep track of the maximum offset in ST mode which may differ  
  76.  * from the maximum offset in DT mode. For now hardcoded to 31. 
  77.  */
  78. if (np->features & FE_ULTRA3) {
  79. if (np->minsync == 10)
  80. np->minsync = 9;
  81. np->maxoffs_st = 31;
  82. }
  83. else
  84. np->maxoffs_st = np->maxoffs;
  85. /*
  86.  * Check against chip SCSI standard support (SCSI-2,ULTRA,ULTRA2).
  87.  *
  88.  * Transfer period minimums: SCSI-1 200 (50); Fast 100 (25)
  89.  * Ultra 50 (12); Ultra2 (6); Ultra3 (3)
  90.  */
  91. if (np->minsync < 25 && !(np->features & (FE_ULTRA|FE_ULTRA2|FE_ULTRA3)))
  92. np->minsync = 25;
  93. else if (np->minsync < 12 && (np->features & FE_ULTRA))
  94. np->minsync = 12;
  95. else if (np->minsync < 10 && (np->features & FE_ULTRA2))
  96. np->minsync = 10;
  97. else if (np->minsync < 9 && (np->features & FE_ULTRA3))
  98. np->minsync = 9;
  99. /*
  100.  * Maximum synchronous period factor supported by the chip.
  101.  */
  102. period = (11 * div_10M[np->clock_divn - 1]) / (4 * np->clock_khz);
  103. np->maxsync = period > 2540 ? 254 : period / 10;
  104. /*
  105. ** 64 bit (53C895A or 53C896) ?
  106. */
  107. if (np->features & FE_DAC) {
  108. if (np->features & FE_DAC_IN_USE)
  109. np->rv_ccntl1 |= (XTIMOD | EXTIBMV);
  110. else
  111. np->rv_ccntl1 |= (DDAC);
  112. }
  113. /*
  114. ** Phase mismatch handled by SCRIPTS (53C895A, 53C896 or C1010) ?
  115.    */
  116. if (np->features & FE_NOPM)
  117. np->rv_ccntl0 |= (ENPMJ);
  118. /*
  119. ** Prepare initial value of other IO registers
  120. */
  121. #if defined SCSI_NCR_TRUST_BIOS_SETTING
  122. np->rv_scntl0 = np->sv_scntl0;
  123. np->rv_dmode = np->sv_dmode;
  124. np->rv_dcntl = np->sv_dcntl;
  125. np->rv_ctest3 = np->sv_ctest3;
  126. np->rv_ctest4 = np->sv_ctest4;
  127. np->rv_ctest5 = np->sv_ctest5;
  128. burst_max = burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
  129. #else
  130. /*
  131. ** Select burst length (dwords)
  132. */
  133. burst_max = driver_setup.burst_max;
  134. if (burst_max == 255)
  135. burst_max = burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
  136. if (burst_max > 7)
  137. burst_max = 7;
  138. if (burst_max > np->maxburst)
  139. burst_max = np->maxburst;
  140. /*
  141. ** DEL 352 - 53C810 Rev x11 - Part Number 609-0392140 - ITEM 2.
  142. ** This chip and the 860 Rev 1 may wrongly use PCI cache line 
  143. ** based transactions on LOAD/STORE instructions. So we have 
  144. ** to prevent these chips from using such PCI transactions in 
  145. ** this driver. The generic sym53c8xx driver that does not use 
  146. ** LOAD/STORE instructions does not need this work-around.
  147. */
  148. if ((np->device_id == PCI_DEVICE_ID_NCR_53C810 &&
  149.      np->revision_id >= 0x10 && np->revision_id <= 0x11) ||
  150.     (np->device_id == PCI_DEVICE_ID_NCR_53C860 &&
  151.      np->revision_id <= 0x1))
  152. np->features &= ~(FE_WRIE|FE_ERL|FE_ERMP);
  153. /*
  154. ** DEL ? - 53C1010 Rev 1 - Part Number 609-0393638
  155. ** 64-bit Slave Cycles must be disabled.
  156. */
  157. if ( ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) && (np->revision_id < 0x02) )
  158. || (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66 ) )
  159. np->rv_ccntl1  |=  0x10;
  160. /*
  161. ** Select all supported special features.
  162. ** If we are using on-board RAM for scripts, prefetch (PFEN) 
  163. ** does not help, but burst op fetch (BOF) does.
  164. ** Disabling PFEN makes sure BOF will be used.
  165. */
  166. if (np->features & FE_ERL)
  167. np->rv_dmode |= ERL; /* Enable Read Line */
  168. if (np->features & FE_BOF)
  169. np->rv_dmode |= BOF; /* Burst Opcode Fetch */
  170. if (np->features & FE_ERMP)
  171. np->rv_dmode |= ERMP; /* Enable Read Multiple */
  172. #if 1
  173. if ((np->features & FE_PFEN) && !np->base2_ba)
  174. #else
  175. if (np->features & FE_PFEN)
  176. #endif
  177. np->rv_dcntl |= PFEN; /* Prefetch Enable */
  178. if (np->features & FE_CLSE)
  179. np->rv_dcntl |= CLSE; /* Cache Line Size Enable */
  180. if (np->features & FE_WRIE)
  181. np->rv_ctest3 |= WRIE; /* Write and Invalidate */
  182. if ( (np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  183. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) &&
  184. (np->features & FE_DFS))
  185. np->rv_ctest5 |= DFS; /* Dma Fifo Size */
  186. /* C1010/C1010_66 always large fifo */
  187. /*
  188. ** Select some other
  189. */
  190. if (driver_setup.master_parity)
  191. np->rv_ctest4 |= MPEE; /* Master parity checking */
  192. if (driver_setup.scsi_parity)
  193. np->rv_scntl0 |= 0x0a; /*  full arb., ena parity, par->ATN  */
  194. #ifdef SCSI_NCR_NVRAM_SUPPORT
  195. /*
  196. ** Get parity checking, host ID and verbose mode from NVRAM
  197. **/
  198. if (nvram) {
  199. switch(nvram->type) {
  200. case SCSI_NCR_TEKRAM_NVRAM:
  201. np->myaddr = nvram->data.Tekram.host_id & 0x0f;
  202. break;
  203. case SCSI_NCR_SYMBIOS_NVRAM:
  204. if (!(nvram->data.Symbios.flags & SYMBIOS_PARITY_ENABLE))
  205. np->rv_scntl0  &= ~0x0a;
  206. np->myaddr = nvram->data.Symbios.host_id & 0x0f;
  207. if (nvram->data.Symbios.flags & SYMBIOS_VERBOSE_MSGS)
  208. np->verbose += 1;
  209. break;
  210. }
  211. }
  212. #endif
  213. /*
  214. **  Get SCSI addr of host adapter (set by bios?).
  215. */
  216. if (np->myaddr == 255) {
  217. np->myaddr = INB(nc_scid) & 0x07;
  218. if (!np->myaddr)
  219. np->myaddr = SCSI_NCR_MYADDR;
  220. }
  221. #endif /* SCSI_NCR_TRUST_BIOS_SETTING */
  222. /*
  223.  * Prepare initial io register bits for burst length
  224.  */
  225. ncr_init_burst(np, burst_max);
  226. /*
  227. ** Set SCSI BUS mode.
  228. **
  229. ** - ULTRA2 chips (895/895A/896) 
  230. **   and ULTRA 3 chips (1010) report the current 
  231. **   BUS mode through the STEST4 IO register.
  232. ** - For previous generation chips (825/825A/875), 
  233. **   user has to tell us how to check against HVD, 
  234. **   since a 100% safe algorithm is not possible.
  235. */
  236. np->scsi_mode = SMODE_SE;
  237. if (np->features & (FE_ULTRA2 | FE_ULTRA3))
  238. np->scsi_mode = (np->sv_stest4 & SMODE);
  239. else if (np->features & FE_DIFF) {
  240. switch(driver_setup.diff_support) {
  241. case 4: /* Trust previous settings if present, then GPIO3 */
  242. if (np->sv_scntl3) {
  243. if (np->sv_stest2 & 0x20)
  244. np->scsi_mode = SMODE_HVD;
  245. break;
  246. }
  247. case 3: /* SYMBIOS controllers report HVD through GPIO3 */
  248. if (nvram && nvram->type != SCSI_NCR_SYMBIOS_NVRAM)
  249. break;
  250. if (INB(nc_gpreg) & 0x08)
  251. break;
  252. case 2: /* Set HVD unconditionally */
  253. np->scsi_mode = SMODE_HVD;
  254. case 1: /* Trust previous settings for HVD */
  255. if (np->sv_stest2 & 0x20)
  256. np->scsi_mode = SMODE_HVD;
  257. break;
  258. default:/* Don't care about HVD */
  259. break;
  260. }
  261. }
  262. if (np->scsi_mode == SMODE_HVD)
  263. np->rv_stest2 |= 0x20;
  264. /*
  265. ** Set LED support from SCRIPTS.
  266. ** Ignore this feature for boards known to use a 
  267. ** specific GPIO wiring and for the 895A or 896 
  268. ** that drive the LED directly.
  269. ** Also probe initial setting of GPIO0 as output.
  270. */
  271. if ((driver_setup.led_pin ||
  272.      (nvram && nvram->type == SCSI_NCR_SYMBIOS_NVRAM)) &&
  273.     !(np->features & FE_LEDC) && !(np->sv_gpcntl & 0x01))
  274. np->features |= FE_LED0;
  275. /*
  276. ** Set irq mode.
  277. */
  278. switch(driver_setup.irqm & 3) {
  279. case 2:
  280. np->rv_dcntl |= IRQM;
  281. break;
  282. case 1:
  283. np->rv_dcntl |= (np->sv_dcntl & IRQM);
  284. break;
  285. default:
  286. break;
  287. }
  288. /*
  289. ** Configure targets according to driver setup.
  290. ** If NVRAM present get targets setup from NVRAM.
  291. ** Allow to override sync, wide and NOSCAN from 
  292. ** boot command line.
  293. */
  294. for (i = 0 ; i < MAX_TARGET ; i++) {
  295. tcb_p tp = &np->target[i];
  296. tp->usrsync = 255;
  297. #ifdef SCSI_NCR_NVRAM_SUPPORT
  298. if (nvram) {
  299. switch(nvram->type) {
  300. case SCSI_NCR_TEKRAM_NVRAM:
  301. ncr_Tekram_setup_target(np, i, &nvram->data.Tekram);
  302. break;
  303. case SCSI_NCR_SYMBIOS_NVRAM:
  304. ncr_Symbios_setup_target(np, i, &nvram->data.Symbios);
  305. break;
  306. }
  307. if (driver_setup.use_nvram & 0x2)
  308. tp->usrsync = driver_setup.default_sync;
  309. if (driver_setup.use_nvram & 0x4)
  310. tp->usrwide = driver_setup.max_wide;
  311. if (driver_setup.use_nvram & 0x8)
  312. tp->usrflag &= ~UF_NOSCAN;
  313. }
  314. else {
  315. #else
  316. if (1) {
  317. #endif
  318. tp->usrsync = driver_setup.default_sync;
  319. tp->usrwide = driver_setup.max_wide;
  320. tp->usrtags = MAX_TAGS;
  321. if (!driver_setup.disconnection)
  322. np->target[i].usrflag = UF_NODISC;
  323. }
  324. }
  325. /*
  326. ** Announce all that stuff to user.
  327. */
  328. i = nvram ? nvram->type : 0;
  329. printk(KERN_INFO "%s: %sID %d, Fast-%d%s%sn", ncr_name(np),
  330. i  == SCSI_NCR_SYMBIOS_NVRAM ? "Symbios format NVRAM, " :
  331. (i == SCSI_NCR_TEKRAM_NVRAM  ? "Tekram format NVRAM, " : ""),
  332. np->myaddr,
  333. np->minsync < 10 ? 80 : 
  334. (np->minsync < 12 ? 40 : (np->minsync < 25 ? 20 : 10) ),
  335. (np->rv_scntl0 & 0xa) ? ", Parity Checking" : ", NO Parity",
  336. (np->rv_stest2 & 0x20) ? ", Differential" : "");
  337. if (bootverbose > 1) {
  338. printk (KERN_INFO "%s: initial SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
  339. "(hex) %02x/%02x/%02x/%02x/%02x/%02xn",
  340. ncr_name(np), np->sv_scntl3, np->sv_dmode, np->sv_dcntl,
  341. np->sv_ctest3, np->sv_ctest4, np->sv_ctest5);
  342. printk (KERN_INFO "%s: final   SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
  343. "(hex) %02x/%02x/%02x/%02x/%02x/%02xn",
  344. ncr_name(np), np->rv_scntl3, np->rv_dmode, np->rv_dcntl,
  345. np->rv_ctest3, np->rv_ctest4, np->rv_ctest5);
  346. }
  347. if (bootverbose && np->base2_ba)
  348. printk (KERN_INFO "%s: on-chip RAM at 0x%lxn",
  349. ncr_name(np), np->base2_ba);
  350. return 0;
  351. }
  352. #ifdef SCSI_NCR_DEBUG_NVRAM
  353. void __init ncr_display_Symbios_nvram(ncb_p np, Symbios_nvram *nvram)
  354. {
  355. int i;
  356. /* display Symbios nvram host data */
  357. printk(KERN_DEBUG "%s: HOST ID=%d%s%s%s%s%sn",
  358. ncr_name(np), nvram->host_id & 0x0f,
  359. (nvram->flags  & SYMBIOS_SCAM_ENABLE) ? " SCAM" :"",
  360. (nvram->flags  & SYMBIOS_PARITY_ENABLE) ? " PARITY" :"",
  361. (nvram->flags  & SYMBIOS_VERBOSE_MSGS) ? " VERBOSE" :"", 
  362. (nvram->flags  & SYMBIOS_CHS_MAPPING) ? " CHS_ALT" :"", 
  363. (nvram->flags1 & SYMBIOS_SCAN_HI_LO) ? " HI_LO" :"");
  364. /* display Symbios nvram drive data */
  365. for (i = 0 ; i < 15 ; i++) {
  366. struct Symbios_target *tn = &nvram->target[i];
  367. printk(KERN_DEBUG "%s-%d:%s%s%s%s WIDTH=%d SYNC=%d TMO=%dn",
  368. ncr_name(np), i,
  369. (tn->flags & SYMBIOS_DISCONNECT_ENABLE) ? " DISC" : "",
  370. (tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME) ? " SCAN_BOOT" : "",
  371. (tn->flags & SYMBIOS_SCAN_LUNS) ? " SCAN_LUNS" : "",
  372. (tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? " TCQ" : "",
  373. tn->bus_width,
  374. tn->sync_period / 4,
  375. tn->timeout);
  376. }
  377. }
  378. static u_char Tekram_boot_delay[7] __initdata = {3, 5, 10, 20, 30, 60, 120};
  379. void __init ncr_display_Tekram_nvram(ncb_p np, Tekram_nvram *nvram)
  380. {
  381. int i, tags, boot_delay;
  382. char *rem;
  383. /* display Tekram nvram host data */
  384. tags = 2 << nvram->max_tags_index;
  385. boot_delay = 0;
  386. if (nvram->boot_delay_index < 6)
  387. boot_delay = Tekram_boot_delay[nvram->boot_delay_index];
  388. switch((nvram->flags & TEKRAM_REMOVABLE_FLAGS) >> 6) {
  389. default:
  390. case 0: rem = ""; break;
  391. case 1: rem = " REMOVABLE=boot device"; break;
  392. case 2: rem = " REMOVABLE=all"; break;
  393. }
  394. printk(KERN_DEBUG
  395. "%s: HOST ID=%d%s%s%s%s%s%s%s%s%s BOOT DELAY=%d tags=%dn",
  396. ncr_name(np), nvram->host_id & 0x0f,
  397. (nvram->flags1 & SYMBIOS_SCAM_ENABLE) ? " SCAM" :"",
  398. (nvram->flags & TEKRAM_MORE_THAN_2_DRIVES) ? " >2DRIVES" :"",
  399. (nvram->flags & TEKRAM_DRIVES_SUP_1GB) ? " >1GB" :"",
  400. (nvram->flags & TEKRAM_RESET_ON_POWER_ON) ? " RESET" :"",
  401. (nvram->flags & TEKRAM_ACTIVE_NEGATION) ? " ACT_NEG" :"",
  402. (nvram->flags & TEKRAM_IMMEDIATE_SEEK) ? " IMM_SEEK" :"",
  403. (nvram->flags & TEKRAM_SCAN_LUNS) ? " SCAN_LUNS" :"",
  404. (nvram->flags1 & TEKRAM_F2_F6_ENABLED) ? " F2_F6" :"",
  405. rem, boot_delay, tags);
  406. /* display Tekram nvram drive data */
  407. for (i = 0; i <= 15; i++) {
  408. int sync, j;
  409. struct Tekram_target *tn = &nvram->target[i];
  410. j = tn->sync_index & 0xf;
  411. sync = Tekram_sync[j];
  412. printk(KERN_DEBUG "%s-%d:%s%s%s%s%s%s PERIOD=%dn",
  413. ncr_name(np), i,
  414. (tn->flags & TEKRAM_PARITY_CHECK) ? " PARITY" : "",
  415. (tn->flags & TEKRAM_SYNC_NEGO) ? " SYNC" : "",
  416. (tn->flags & TEKRAM_DISCONNECT_ENABLE) ? " DISC" : "",
  417. (tn->flags & TEKRAM_START_CMD) ? " START" : "",
  418. (tn->flags & TEKRAM_TAGGED_COMMANDS) ? " TCQ" : "",
  419. (tn->flags & TEKRAM_WIDE_NEGO) ? " WIDE" : "",
  420. sync);
  421. }
  422. }
  423. #endif /* SCSI_NCR_DEBUG_NVRAM */
  424. /*
  425. ** Host attach and initialisations.
  426. **
  427. ** Allocate host data and ncb structure.
  428. ** Request IO region and remap MMIO region.
  429. ** Do chip initialization.
  430. ** If all is OK, install interrupt handling and
  431. ** start the timer daemon.
  432. */
  433. static int __init 
  434. ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device)
  435. {
  436.         struct host_data *host_data;
  437. ncb_p np = 0;
  438.         struct Scsi_Host *instance = 0;
  439. u_long flags = 0;
  440. ncr_nvram *nvram = device->nvram;
  441. int i;
  442. printk(KERN_INFO NAME53C "%s-%d: rev 0x%x on pci bus %d device %d function %d "
  443. #ifdef __sparc__
  444. "irq %sn",
  445. #else
  446. "irq %dn",
  447. #endif
  448. device->chip.name, unit, device->chip.revision_id,
  449. device->slot.bus, (device->slot.device_fn & 0xf8) >> 3,
  450. device->slot.device_fn & 7,
  451. #ifdef __sparc__
  452. __irq_itoa(device->slot.irq));
  453. #else
  454. device->slot.irq);
  455. #endif
  456. /*
  457. ** Allocate host_data structure
  458. */
  459.         if (!(instance = scsi_register(tpnt, sizeof(*host_data))))
  460.         goto attach_error;
  461. host_data = (struct host_data *) instance->hostdata;
  462. /*
  463. ** Allocate the host control block.
  464. */
  465. np = __m_calloc_dma(device->pdev, sizeof(struct ncb), "NCB");
  466. if (!np)
  467. goto attach_error;
  468. NCR_INIT_LOCK_NCB(np);
  469. np->pdev  = device->pdev;
  470. np->p_ncb = vtobus(np);
  471. host_data->ncb = np;
  472. /*
  473. ** Store input informations in the host data structure.
  474. */
  475. strncpy(np->chip_name, device->chip.name, sizeof(np->chip_name) - 1);
  476. np->unit = unit;
  477. np->verbose = driver_setup.verbose;
  478. sprintf(np->inst_name, NAME53C "%s-%d", np->chip_name, np->unit);
  479. np->device_id = device->chip.device_id;
  480. np->revision_id = device->chip.revision_id;
  481. np->bus = device->slot.bus;
  482. np->device_fn = device->slot.device_fn;
  483. np->features = device->chip.features;
  484. np->clock_divn = device->chip.nr_divisor;
  485. np->maxoffs = device->chip.offset_max;
  486. np->maxburst = device->chip.burst_max;
  487. np->myaddr = device->host_id;
  488. /*
  489. ** Allocate the start queue.
  490. */
  491. np->squeue = (ncrcmd *)
  492. m_calloc_dma(sizeof(ncrcmd)*(MAX_START*2), "SQUEUE");
  493. if (!np->squeue)
  494. goto attach_error;
  495. np->p_squeue = vtobus(np->squeue);
  496. /*
  497. ** Allocate the done queue.
  498. */
  499. np->dqueue = (ncrcmd *)
  500. m_calloc_dma(sizeof(ncrcmd)*(MAX_START*2), "DQUEUE");
  501. if (!np->dqueue)
  502. goto attach_error;
  503. /*
  504. ** Allocate the target bus address array.
  505. */
  506. np->targtbl = (u_int32 *) m_calloc_dma(256, "TARGTBL");
  507. if (!np->targtbl)
  508. goto attach_error;
  509. /*
  510. ** Allocate SCRIPTS areas
  511. */
  512. np->script0 = (struct script *) 
  513. m_calloc_dma(sizeof(struct script),  "SCRIPT");
  514. if (!np->script0)
  515. goto attach_error;
  516. np->scripth0 = (struct scripth *)
  517. m_calloc_dma(sizeof(struct scripth), "SCRIPTH");
  518. if (!np->scripth0)
  519. goto attach_error;
  520. /*
  521. ** Initialyze the CCB free queue and,
  522. ** allocate some CCB. We need at least ONE.
  523. */
  524. xpt_que_init(&np->free_ccbq);
  525. xpt_que_init(&np->b0_ccbq);
  526. if (!ncr_alloc_ccb(np))
  527. goto attach_error;
  528. /*
  529. **    Initialize timer structure
  530.         **
  531.         */
  532. init_timer(&np->timer);
  533. np->timer.data     = (unsigned long) np;
  534. np->timer.function = sym53c8xx_timeout;
  535. /*
  536. ** Try to map the controller chip to
  537. ** virtual and physical memory.
  538. */
  539. np->base_ba = device->slot.base;
  540. np->base_ws = (np->features & FE_IO256)? 256 : 128;
  541. np->base2_ba = (np->features & FE_RAM)? device->slot.base_2 : 0;
  542. #ifndef SCSI_NCR_IOMAPPED
  543. np->base_va = remap_pci_mem(device->slot.base_c, np->base_ws);
  544. if (!np->base_va) {
  545. printk(KERN_ERR "%s: can't map PCI MMIO regionn",ncr_name(np));
  546. goto attach_error;
  547. }
  548. else if (bootverbose > 1)
  549. printk(KERN_INFO "%s: using memory mapped IOn", ncr_name(np));
  550. /*
  551. ** Make the controller's registers available.
  552. ** Now the INB INW INL OUTB OUTW OUTL macros
  553. ** can be used safely.
  554. */
  555. np->reg = (struct ncr_reg *) np->base_va;
  556. #endif /* !defined SCSI_NCR_IOMAPPED */
  557. /*
  558. ** If on-chip RAM is used, make sure SCRIPTS isn't too large.
  559. */
  560. if (np->base2_ba && sizeof(struct script) > 4096) {
  561. printk(KERN_ERR "%s: script too large.n", ncr_name(np));
  562. goto attach_error;
  563. }
  564. /*
  565. ** Try to map the controller chip into iospace.
  566. */
  567. if (device->slot.io_port) {
  568. request_region(device->slot.io_port, np->base_ws, NAME53C8XX);
  569. np->base_io = device->slot.io_port;
  570. }
  571. #ifdef SCSI_NCR_NVRAM_SUPPORT
  572. if (nvram) {
  573. switch(nvram->type) {
  574. case SCSI_NCR_SYMBIOS_NVRAM:
  575. #ifdef SCSI_NCR_DEBUG_NVRAM
  576. ncr_display_Symbios_nvram(np, &nvram->data.Symbios);
  577. #endif
  578. break;
  579. case SCSI_NCR_TEKRAM_NVRAM:
  580. #ifdef SCSI_NCR_DEBUG_NVRAM
  581. ncr_display_Tekram_nvram(np, &nvram->data.Tekram);
  582. #endif
  583. break;
  584. default:
  585. nvram = 0;
  586. #ifdef SCSI_NCR_DEBUG_NVRAM
  587. printk(KERN_DEBUG "%s: NVRAM: None or invalid data.n", ncr_name(np));
  588. #endif
  589. }
  590. }
  591. #endif
  592.   /*
  593. ** Save setting of some IO registers, so we will 
  594. ** be able to probe specific implementations.
  595. */
  596. ncr_save_initial_setting (np);
  597. /*
  598. ** Reset the chip now, since it has been reported 
  599. ** that SCSI clock calibration may not work properly 
  600. ** if the chip is currently active.
  601. */
  602. ncr_chip_reset (np);
  603. /*
  604. ** Do chip dependent initialization.
  605. */
  606. (void) ncr_prepare_setting(np, nvram);
  607. /*
  608. ** Check the PCI clock frequency if needed.
  609. **
  610. ** Must be done after ncr_prepare_setting since it destroys 
  611. ** STEST1 that is used to probe for the clock multiplier.
  612. **
  613. ** The range is currently [22688 - 45375 Khz], given 
  614. ** the values used by ncr_getclock().
  615. ** This calibration of the frequecy measurement 
  616. ** algorithm against the PCI clock frequency is only 
  617. ** performed if the driver has had to measure the SCSI 
  618. ** clock due to other heuristics not having been enough 
  619. ** to deduce the SCSI clock frequency.
  620. **
  621. ** When the chip has been initialized correctly by the 
  622. ** SCSI BIOS, the driver deduces the presence of the 
  623. ** clock multiplier and the value of the SCSI clock from 
  624. ** initial values of IO registers, and therefore no 
  625. ** clock measurement is performed.
  626. ** Normally the driver should never have to measure any 
  627. ** clock, unless the controller may use a 80 MHz clock 
  628. ** or has a clock multiplier and any of the following 
  629. ** condition is met:
  630. **
  631. ** - No SCSI BIOS is present.
  632. ** - SCSI BIOS did'nt enable the multiplier for some reason.
  633. ** - User has disabled the controller from the SCSI BIOS.
  634. ** - User booted the O/S from another O/S that did'nt enable 
  635. **   the multiplier for some reason.
  636. **
  637. ** As a result, the driver may only have to measure some 
  638. ** frequency in very unusual situations.
  639. **
  640. ** For this reality test against the PCI clock to really 
  641. ** protect against flaws in the udelay() calibration or 
  642. ** driver problem that affect the clock measurement 
  643. ** algorithm, the actual PCI clock frequency must be 33 MHz.
  644. */
  645. i = np->pciclock_max ? ncr_getpciclock(np) : 0;
  646. if (i && (i < np->pciclock_min  || i > np->pciclock_max)) {
  647. printk(KERN_ERR "%s: PCI clock (%u KHz) is out of range "
  648. "[%u KHz - %u KHz].n",
  649.        ncr_name(np), i, np->pciclock_min, np->pciclock_max);
  650. goto attach_error;
  651. }
  652. /*
  653. ** Patch script to physical addresses
  654. */
  655. ncr_script_fill (&script0, &scripth0);
  656. np->p_script = vtobus(np->script0);
  657. np->p_scripth = vtobus(np->scripth0);
  658. np->p_scripth0 = np->p_scripth;
  659. if (np->base2_ba) {
  660. np->p_script = np->base2_ba;
  661. if (np->features & FE_RAM8K) {
  662. np->base2_ws = 8192;
  663. np->p_scripth = np->p_script + 4096;
  664. #if BITS_PER_LONG > 32
  665. np->scr_ram_seg = cpu_to_scr(np->base2_ba >> 32);
  666. #endif
  667. }
  668. else
  669. np->base2_ws = 4096;
  670. #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  671. np->base2_va = 
  672. remap_pci_mem(device->slot.base_2_c, np->base2_ws);
  673. if (!np->base2_va) {
  674. printk(KERN_ERR "%s: can't map PCI MEMORY regionn",
  675.        ncr_name(np));
  676. goto attach_error;
  677. }
  678. #endif
  679. }
  680. ncr_script_copy_and_bind (np, (ncrcmd *) &script0, (ncrcmd *) np->script0, sizeof(struct script));
  681. ncr_script_copy_and_bind (np, (ncrcmd *) &scripth0, (ncrcmd *) np->scripth0, sizeof(struct scripth));
  682. /*
  683. ** Patch some variables in SCRIPTS
  684. */
  685. np->scripth0->pm0_data_addr[0] = 
  686. cpu_to_scr(NCB_SCRIPT_PHYS(np, pm0_data));
  687. np->scripth0->pm1_data_addr[0] = 
  688. cpu_to_scr(NCB_SCRIPT_PHYS(np, pm1_data));
  689. /*
  690. ** Patch if not Ultra 3 - Do not write to scntl4
  691. */
  692. if (np->features & FE_ULTRA3) {
  693. np->script0->resel_scntl4[0] = cpu_to_scr(SCR_LOAD_REL (scntl4, 1));
  694. np->script0->resel_scntl4[1] = cpu_to_scr(offsetof(struct tcb, uval));
  695. }
  696. #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  697. np->scripth0->script0_ba[0] = cpu_to_scr(vtobus(np->script0));
  698. np->scripth0->script0_ba64[0] = cpu_to_scr(vtobus(np->script0));
  699. np->scripth0->scripth0_ba64[0] = cpu_to_scr(vtobus(np->scripth0));
  700. np->scripth0->ram_seg64[0] = np->scr_ram_seg;
  701. #endif
  702. /*
  703. ** Prepare the idle and invalid task actions.
  704. */
  705. np->idletask.start = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
  706. np->idletask.restart = cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_i_t_l));
  707. np->p_idletask = NCB_PHYS(np, idletask);
  708. np->notask.start = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
  709. np->notask.restart = cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_i_t_l));
  710. np->p_notask = NCB_PHYS(np, notask);
  711. np->bad_i_t_l.start = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
  712. np->bad_i_t_l.restart = cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_i_t_l));
  713. np->p_bad_i_t_l = NCB_PHYS(np, bad_i_t_l);
  714. np->bad_i_t_l_q.start = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
  715. np->bad_i_t_l_q.restart = cpu_to_scr(NCB_SCRIPTH_PHYS (np,bad_i_t_l_q));
  716. np->p_bad_i_t_l_q = NCB_PHYS(np, bad_i_t_l_q);
  717. /*
  718. ** Allocate and prepare the bad lun table.
  719. */
  720. np->badluntbl = m_calloc_dma(256, "BADLUNTBL");
  721. if (!np->badluntbl)
  722. goto attach_error;
  723. assert (offsetof(struct lcb, resel_task) == 0);
  724. np->resel_badlun = cpu_to_scr(NCB_SCRIPTH_PHYS(np, resel_bad_lun));
  725. for (i = 0 ; i < 64 ; i++)
  726. np->badluntbl[i] = cpu_to_scr(NCB_PHYS(np, resel_badlun));
  727. /*
  728. ** Prepare the target bus address array.
  729. */
  730. np->scripth0->targtbl[0] = cpu_to_scr(vtobus(np->targtbl));
  731. for (i = 0 ; i < MAX_TARGET ; i++) {
  732. np->targtbl[i] = cpu_to_scr(NCB_PHYS(np, target[i]));
  733. np->target[i].b_luntbl = cpu_to_scr(vtobus(np->badluntbl));
  734. np->target[i].b_lun0   = cpu_to_scr(NCB_PHYS(np, resel_badlun));
  735. }
  736. /*
  737. **    Patch the script for LED support.
  738. */
  739. if (np->features & FE_LED0) {
  740. np->script0->idle[0]  =
  741. cpu_to_scr(SCR_REG_REG(gpreg, SCR_OR,  0x01));
  742. np->script0->reselected[0] =
  743. cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
  744. np->script0->start[0] =
  745. cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
  746. }
  747. /*
  748. ** Patch the script to provide an extra clock cycle on
  749. ** data out phase - 53C1010_66MHz part only.
  750. ** (Fixed in rev. 1 of the chip)
  751. */
  752. if (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66 &&
  753.     np->revision_id < 1){
  754. np->script0->datao_phase[0] =
  755. cpu_to_scr(SCR_REG_REG(scntl4, SCR_OR, 0x0c));
  756. }
  757. #ifdef SCSI_NCR_IARB_SUPPORT
  758. /*
  759. **    If user does not want to use IMMEDIATE ARBITRATION
  760. **    when we are reselected while attempting to arbitrate,
  761. **    patch the SCRIPTS accordingly with a SCRIPT NO_OP.
  762. */
  763. if (!(driver_setup.iarb & 1))
  764. np->script0->ungetjob[0] = cpu_to_scr(SCR_NO_OP);
  765. /*
  766. **    If user wants IARB to be set when we win arbitration 
  767. **    and have other jobs, compute the max number of consecutive 
  768. **    settings of IARB hint before we leave devices a chance to 
  769. **    arbitrate for reselection.
  770. */
  771. np->iarb_max = (driver_setup.iarb >> 4);
  772. #endif
  773. /*
  774. ** DEL 472 - 53C896 Rev 1 - Part Number 609-0393055 - ITEM 5.
  775. */
  776. if (np->device_id == PCI_DEVICE_ID_NCR_53C896 &&
  777.     np->revision_id <= 0x1 && (np->features & FE_NOPM)) {
  778. np->scatter = ncr_scatter_896R1;
  779. np->script0->datai_phase[0] = cpu_to_scr(SCR_JUMP);
  780. np->script0->datai_phase[1] = 
  781. cpu_to_scr(NCB_SCRIPTH_PHYS (np, tweak_pmj));
  782. np->script0->datao_phase[0] = cpu_to_scr(SCR_JUMP);
  783. np->script0->datao_phase[1] = 
  784. cpu_to_scr(NCB_SCRIPTH_PHYS (np, tweak_pmj));
  785. }
  786. else
  787. #ifdef DEBUG_896R1
  788. np->scatter = ncr_scatter_896R1;
  789. #else
  790. np->scatter = ncr_scatter;
  791. #endif
  792. /*
  793. ** Reset chip.
  794. ** We should use ncr_soft_reset(), but we donnot want to do 
  795. ** so, since we may not be safe if ABRT interrupt occurs due 
  796. ** to the BIOS or previous O/S having enable this interrupt.
  797. **
  798. ** For C1010 need to set ABRT bit prior to SRST if SCRIPTs
  799. ** are running. Not true in this case.
  800. */
  801. ncr_chip_reset(np);
  802. /*
  803. ** Now check the cache handling of the pci chipset.
  804. */
  805. if (ncr_snooptest (np)) {
  806. printk (KERN_ERR "CACHE INCORRECTLY CONFIGURED.n");
  807. goto attach_error;
  808. };
  809. /*
  810. ** Install the interrupt handler.
  811. ** If we synchonize the C code with SCRIPTS on interrupt, 
  812. ** we donnot want to share the INTR line at all.
  813. */
  814. if (request_irq(device->slot.irq, sym53c8xx_intr,
  815. #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
  816. ((driver_setup.irqm & 0x20) ? 0 : SA_INTERRUPT),
  817. #else
  818. ((driver_setup.irqm & 0x10) ? 0 : SA_SHIRQ) |
  819. #if LINUX_VERSION_CODE < LinuxVersionCode(2,2,0)
  820. ((driver_setup.irqm & 0x20) ? 0 : SA_INTERRUPT),
  821. #else
  822. 0,
  823. #endif
  824. #endif
  825. NAME53C8XX, np)) {
  826. printk(KERN_ERR "%s: request irq %d failuren",
  827. ncr_name(np), device->slot.irq);
  828. goto attach_error;
  829. }
  830. np->irq = device->slot.irq;
  831. /*
  832. ** After SCSI devices have been opened, we cannot
  833. ** reset the bus safely, so we do it here.
  834. ** Interrupt handler does the real work.
  835. ** Process the reset exception,
  836. ** if interrupts are not enabled yet.
  837. ** Then enable disconnects.
  838. */
  839. NCR_LOCK_NCB(np, flags);
  840. if (ncr_reset_scsi_bus(np, 0, driver_setup.settle_delay) != 0) {
  841. printk(KERN_ERR "%s: FATAL ERROR: CHECK SCSI BUS - CABLES, TERMINATION, DEVICE POWER etc.!n", ncr_name(np));
  842. NCR_UNLOCK_NCB(np, flags);
  843. goto attach_error;
  844. }
  845. ncr_exception (np);
  846. /*
  847. ** The middle-level SCSI driver does not
  848. ** wait for devices to settle.
  849. ** Wait synchronously if more than 2 seconds.
  850. */
  851. if (driver_setup.settle_delay > 2) {
  852. printk(KERN_INFO "%s: waiting %d seconds for scsi devices to settle...n",
  853. ncr_name(np), driver_setup.settle_delay);
  854. MDELAY (1000 * driver_setup.settle_delay);
  855. }
  856. /*
  857. ** start the timeout daemon
  858. */
  859. np->lasttime=0;
  860. ncr_timeout (np);
  861. /*
  862. **  use SIMPLE TAG messages by default
  863. */
  864. #ifdef SCSI_NCR_ALWAYS_SIMPLE_TAG
  865. np->order = M_SIMPLE_TAG;
  866. #endif
  867. /*
  868. **  Done.
  869. */
  870.         if (!first_host)
  871.          first_host = instance;
  872. /*
  873. ** Fill Linux host instance structure
  874. ** and return success.
  875. */
  876. instance->max_channel = 0;
  877. instance->this_id = np->myaddr;
  878. instance->max_id = np->maxwide ? 16 : 8;
  879. instance->max_lun = MAX_LUN;
  880. #ifndef SCSI_NCR_IOMAPPED
  881. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,29)
  882. instance->base = (unsigned long) np->reg;
  883. #else
  884. instance->base = (char *) np->reg;
  885. #endif
  886. #endif
  887. instance->irq = np->irq;
  888. instance->unique_id = np->base_io;
  889. instance->io_port = np->base_io;
  890. instance->n_io_port = np->base_ws;
  891. instance->dma_channel = 0;
  892. instance->cmd_per_lun = MAX_TAGS;
  893. instance->can_queue = (MAX_START-4);
  894. scsi_set_pci_device(instance, device->pdev);
  895. np->check_integrity       = 0;
  896. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  897. instance->check_integrity = 0;
  898. #ifdef SCSI_NCR_ENABLE_INTEGRITY_CHECK
  899. if ( !(driver_setup.bus_check & 0x04) ) {
  900. np->check_integrity       = 1;
  901. instance->check_integrity = 1;
  902. }
  903. #endif
  904. #endif
  905. instance->select_queue_depths = sym53c8xx_select_queue_depths;
  906. NCR_UNLOCK_NCB(np, flags);
  907. /*
  908. ** Now let the generic SCSI driver
  909. ** look for the SCSI devices on the bus ..
  910. */
  911. return 0;
  912. attach_error:
  913. if (!instance) return -1;
  914. printk(KERN_INFO "%s: giving up ...n", ncr_name(np));
  915. if (np)
  916. ncr_free_resources(np);
  917. scsi_unregister(instance);
  918.         return -1;
  919.  }
  920. /*
  921. ** Free controller resources.
  922. */
  923. static void ncr_free_resources(ncb_p np)
  924. {
  925. ccb_p cp;
  926. tcb_p tp;
  927. lcb_p lp;
  928. int target, lun;
  929. if (np->irq)
  930. free_irq(np->irq, np);
  931. if (np->base_io)
  932. release_region(np->base_io, np->base_ws);
  933. #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  934. if (np->base_va)
  935. unmap_pci_mem(np->base_va, np->base_ws);
  936. if (np->base2_va)
  937. unmap_pci_mem(np->base2_va, np->base2_ws);
  938. #endif
  939. if (np->scripth0)
  940. m_free_dma(np->scripth0, sizeof(struct scripth), "SCRIPTH");
  941. if (np->script0)
  942. m_free_dma(np->script0, sizeof(struct script), "SCRIPT");
  943. if (np->squeue)
  944. m_free_dma(np->squeue, sizeof(ncrcmd)*(MAX_START*2), "SQUEUE");
  945. if (np->dqueue)
  946. m_free_dma(np->dqueue, sizeof(ncrcmd)*(MAX_START*2),"DQUEUE");
  947. while ((cp = np->ccbc) != NULL) {
  948. np->ccbc = cp->link_ccb;
  949. m_free_dma(cp, sizeof(*cp), "CCB");
  950. }
  951. if (np->badluntbl)
  952. m_free_dma(np->badluntbl, 256,"BADLUNTBL");
  953. for (target = 0; target < MAX_TARGET ; target++) {
  954. tp = &np->target[target];
  955. for (lun = 0 ; lun < MAX_LUN ; lun++) {
  956. lp = ncr_lp(np, tp, lun);
  957. if (!lp)
  958. continue;
  959. if (lp->tasktbl != &lp->tasktbl_0)
  960. m_free_dma(lp->tasktbl, MAX_TASKS*4, "TASKTBL");
  961. if (lp->cb_tags)
  962. m_free(lp->cb_tags, MAX_TAGS, "CB_TAGS");
  963. m_free_dma(lp, sizeof(*lp), "LCB");
  964. }
  965. #if MAX_LUN > 1
  966. if (tp->lmp)
  967. m_free(tp->lmp, MAX_LUN * sizeof(lcb_p), "LMP");
  968. if (tp->luntbl)
  969. m_free_dma(tp->luntbl, 256, "LUNTBL");
  970. #endif 
  971. }
  972. if (np->targtbl)
  973. m_free_dma(np->targtbl, 256, "TARGTBL");
  974. m_free_dma(np, sizeof(*np), "NCB");
  975. }
  976. /*==========================================================
  977. **
  978. **
  979. ** Done SCSI commands list management.
  980. **
  981. ** We donnot enter the scsi_done() callback immediately 
  982. ** after a command has been seen as completed but we 
  983. ** insert it into a list which is flushed outside any kind 
  984. ** of driver critical section.
  985. ** This allows to do minimal stuff under interrupt and 
  986. ** inside critical sections and to also avoid locking up 
  987. ** on recursive calls to driver entry points under SMP.
  988. ** In fact, the only kernel point which is entered by the 
  989. ** driver with a driver lock set is get_free_pages(GFP_ATOMIC...) 
  990. ** that shall not reenter the driver under any circumstance.
  991. **
  992. **==========================================================
  993. */
  994. static inline void ncr_queue_done_cmd(ncb_p np, Scsi_Cmnd *cmd)
  995. {
  996. unmap_scsi_data(np, cmd);
  997. cmd->host_scribble = (char *) np->done_list;
  998. np->done_list = cmd;
  999. }
  1000. static inline void ncr_flush_done_cmds(Scsi_Cmnd *lcmd)
  1001. {
  1002. Scsi_Cmnd *cmd;
  1003. while (lcmd) {
  1004. cmd = lcmd;
  1005. lcmd = (Scsi_Cmnd *) cmd->host_scribble;
  1006. cmd->scsi_done(cmd);
  1007. }
  1008. }
  1009. /*==========================================================
  1010. **
  1011. **
  1012. ** Prepare the next negotiation message for integrity check,
  1013. ** if needed.
  1014. **
  1015. ** Fill in the part of message buffer that contains the 
  1016. ** negotiation and the nego_status field of the CCB.
  1017. ** Returns the size of the message in bytes.
  1018. **
  1019. ** If tp->ppr_negotiation is 1 and a M_REJECT occurs, then
  1020. ** we disable ppr_negotiation.  If the first ppr_negotiation is
  1021. ** successful, set this flag to 2.
  1022. **
  1023. **==========================================================
  1024. */
  1025. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1026. static int ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr)
  1027. {
  1028. tcb_p tp = &np->target[cp->target];
  1029. int msglen = 0;
  1030. int nego = 0;
  1031. u_char new_width, new_offset, new_period;
  1032. u_char no_increase;
  1033. if (tp->ppr_negotiation == 1) /* PPR message successful */
  1034. tp->ppr_negotiation = 2;
  1035. if (tp->inq_done) {
  1036. if (!tp->ic_maximums_set) {
  1037. tp->ic_maximums_set = 1;
  1038. /* 
  1039.  * Check against target, host and user limits  
  1040.  */
  1041. if ( (tp->inq_byte7 & INQ7_WIDE16) && 
  1042. np->maxwide  && tp->usrwide) 
  1043. tp->ic_max_width = 1;
  1044. else
  1045. tp->ic_max_width = 0;
  1046. if ((tp->inq_byte7 & INQ7_SYNC) && tp->maxoffs)
  1047. tp->ic_min_sync = (tp->minsync < np->minsync) ?
  1048. np->minsync : tp->minsync;
  1049. else 
  1050. tp->ic_min_sync = 255;
  1051. tp->period   = 1;
  1052. tp->widedone = 1;
  1053. /*
  1054.  * Enable PPR negotiation - only if Ultra3 support
  1055.  * is accessible.
  1056.  */
  1057. #if 0
  1058. if (tp->ic_max_width && (tp->ic_min_sync != 255 ))
  1059. tp->ppr_negotiation = 1;
  1060. #endif
  1061. tp->ppr_negotiation = 0;
  1062. if (np->features & FE_ULTRA3) {
  1063.     if (tp->ic_max_width && (tp->ic_min_sync == 0x09))
  1064. tp->ppr_negotiation = 1;
  1065. }
  1066. if (!tp->ppr_negotiation)
  1067. cmd->ic_nego &= ~NS_PPR;
  1068. }
  1069. if (DEBUG_FLAGS & DEBUG_IC) {
  1070. printk("%s: cmd->ic_nego %d, 1st byte 0x%2Xn",
  1071. ncr_name(np), cmd->ic_nego, cmd->cmnd[0]);
  1072. }
  1073. /* Previous command recorded a parity or an initiator
  1074.  * detected error condition. Force bus to narrow for this
  1075.  * target. Clear flag. Negotation on request sense.
  1076.  * Note: kernel forces 2 bus resets :o( but clears itself out. 
  1077.  * Minor bug? in scsi_obsolete.c (ugly)
  1078.  */
  1079. if (np->check_integ_par) { 
  1080. printk("%s: Parity Error. Target set to narrow.n",
  1081. ncr_name(np));
  1082. tp->ic_max_width = 0;
  1083. tp->widedone = tp->period = 0;
  1084. }
  1085. /* Initializing:
  1086.  * If ic_nego == NS_PPR, we are in the initial test for
  1087.  * PPR messaging support. If driver flag is clear, then
  1088.  * either we don't support PPR nego (narrow or async device)
  1089.  * or this is the second TUR and we have had a M. REJECT 
  1090.  * or unexpected disconnect on the first PPR negotiation.  
  1091.  * Do not negotiate, reset nego flags (in case a reset has
  1092.  * occurred), clear ic_nego and return.
  1093.  * General case: Kernel will clear flag on a fallback. 
  1094.  * Do only SDTR or WDTR in the future.
  1095.  */
  1096.                 if (!tp->ppr_negotiation &&  (cmd->ic_nego == NS_PPR )) {
  1097. tp->ppr_negotiation = 0;
  1098. cmd->ic_nego &= ~NS_PPR;
  1099. tp->widedone = tp->period = 1;
  1100. return msglen;
  1101. }
  1102. else if (( tp->ppr_negotiation && !(cmd->ic_nego & NS_PPR )) || 
  1103.                         (!tp->ppr_negotiation &&  (cmd->ic_nego & NS_PPR )) ) {
  1104. tp->ppr_negotiation = 0;
  1105. cmd->ic_nego &= ~NS_PPR;
  1106. }
  1107. /*
  1108.  * Always check the PPR nego. flag bit if ppr_negotiation
  1109.  * is set.  If the ic_nego PPR bit is clear,
  1110.  * there must have been a fallback. Do only
  1111.  * WDTR / SDTR in the future.
  1112.  */
  1113. if ((tp->ppr_negotiation) && (!(cmd->ic_nego & NS_PPR)))
  1114. tp->ppr_negotiation = 0;
  1115. /* In case of a bus reset, ncr_negotiate will reset 
  1116.                  * the flags tp->widedone and tp->period to 0, forcing
  1117.  * a new negotiation.  Do WDTR then SDTR. If PPR, do both.
  1118.  * Do NOT increase the period.  It is possible for the Scsi_Cmnd
  1119.  * flags to be set to increase the period when a bus reset 
  1120.  * occurs - we don't want to change anything.
  1121.  */
  1122. no_increase = 0;
  1123. if (tp->ppr_negotiation && (!tp->widedone) && (!tp->period) ) {
  1124. cmd->ic_nego = NS_PPR;
  1125. tp->widedone = tp->period = 1;
  1126. no_increase = 1;
  1127. }
  1128. else if (!tp->widedone) {
  1129. cmd->ic_nego = NS_WIDE;
  1130. tp->widedone = 1;
  1131. no_increase = 1;
  1132. }
  1133. else if (!tp->period) {
  1134. cmd->ic_nego = NS_SYNC;
  1135. tp->period = 1;
  1136. no_increase = 1;
  1137. }
  1138. new_width = cmd->ic_nego_width & tp->ic_max_width;
  1139. switch (cmd->ic_nego_sync) {
  1140. case 2: /* increase the period */
  1141. if (!no_increase) {
  1142.     if (tp->ic_min_sync <= 0x09)      
  1143. tp->ic_min_sync = 0x0A;
  1144.     else if (tp->ic_min_sync <= 0x0A) 
  1145. tp->ic_min_sync = 0x0C;
  1146.     else if (tp->ic_min_sync <= 0x0C) 
  1147. tp->ic_min_sync = 0x19;
  1148.     else if (tp->ic_min_sync <= 0x19) 
  1149. tp->ic_min_sync *= 2;
  1150.     else  {
  1151. tp->ic_min_sync = 255;
  1152. cmd->ic_nego_sync = 0;
  1153. tp->maxoffs = 0;
  1154.     }
  1155. }
  1156. new_period  = tp->maxoffs?tp->ic_min_sync:0;
  1157. new_offset  = tp->maxoffs;
  1158. break;
  1159. case 1: /* nego. to maximum */
  1160. new_period  = tp->maxoffs?tp->ic_min_sync:0;
  1161. new_offset  = tp->maxoffs;
  1162. break;
  1163. case 0: /* nego to async */
  1164. default:
  1165. new_period = 0;
  1166. new_offset = 0;
  1167. break;
  1168. };
  1169. nego = NS_NOCHANGE;
  1170. if (tp->ppr_negotiation) { 
  1171. u_char options_byte = 0;
  1172. /*
  1173. ** Must make sure data is consistent.
  1174. ** If period is 9 and sync, must be wide and DT bit set.
  1175. ** else period must be larger. If the width is 0, 
  1176. ** reset bus to wide but increase the period to 0x0A.
  1177. ** Note: The strange else clause is due to the integrity check.
  1178. ** If fails at 0x09, wide, the I.C. code will redo at the same
  1179. ** speed but a narrow bus. The driver must take care of slowing
  1180. ** the bus speed down.
  1181. **
  1182. ** The maximum offset in ST mode is 31, in DT mode 62 (1010/1010_66 only)
  1183. */
  1184. if ( (new_period==0x09) && new_offset) {
  1185. if (new_width) 
  1186. options_byte = 0x02;
  1187. else {
  1188. tp->ic_min_sync = 0x0A;
  1189. new_period = 0x0A;
  1190. cmd->ic_nego_width = 1;
  1191. new_width = 1;
  1192. }
  1193. }
  1194. if (!options_byte && new_offset > np->maxoffs_st)
  1195. new_offset = np->maxoffs_st;
  1196. nego = NS_PPR;
  1197. msgptr[msglen++] = M_EXTENDED;
  1198. msgptr[msglen++] = 6;
  1199. msgptr[msglen++] = M_X_PPR_REQ;
  1200. msgptr[msglen++] = new_period;
  1201. msgptr[msglen++] = 0;
  1202. msgptr[msglen++] = new_offset;
  1203. msgptr[msglen++] = new_width;
  1204. msgptr[msglen++] = options_byte;
  1205. }
  1206. else {
  1207. switch (cmd->ic_nego & ~NS_PPR) {
  1208. case NS_WIDE:
  1209.     /*
  1210.     ** WDTR negotiation on if device supports
  1211.     **  wide or if wide device forced narrow
  1212.     ** due to a parity error. 
  1213.     */
  1214.     cmd->ic_nego_width &= tp->ic_max_width;
  1215.     if (tp->ic_max_width | np->check_integ_par) {
  1216. nego = NS_WIDE;
  1217. msgptr[msglen++] = M_EXTENDED;
  1218. msgptr[msglen++] = 2;
  1219. msgptr[msglen++] = M_X_WIDE_REQ;
  1220. msgptr[msglen++] = new_width;
  1221.     }
  1222.       break;
  1223. case NS_SYNC:
  1224.     /*
  1225.     ** negotiate synchronous transfers
  1226.     ** Target must support sync transfers.
  1227.     **  Min. period = 0x0A, maximum offset of 31=0x1f.
  1228.          */
  1229.     if (tp->inq_byte7 & INQ7_SYNC) {
  1230. if (new_offset && (new_period < 0x0A)) {
  1231. tp->ic_min_sync = 0x0A;
  1232. new_period = 0x0A;
  1233. }
  1234. if (new_offset > np->maxoffs_st)
  1235. new_offset = np->maxoffs_st;
  1236. nego = NS_SYNC;
  1237. msgptr[msglen++] = M_EXTENDED;
  1238. msgptr[msglen++] = 3;
  1239. msgptr[msglen++] = M_X_SYNC_REQ;
  1240. msgptr[msglen++] = new_period;
  1241. msgptr[msglen++] = new_offset;
  1242.     }
  1243.     else 
  1244. cmd->ic_nego_sync = 0;
  1245.     break;
  1246. case NS_NOCHANGE:
  1247.     break;
  1248. }
  1249. }
  1250. };
  1251. cp->nego_status = nego;
  1252. np->check_integ_par = 0;
  1253. if (nego) {
  1254. tp->nego_cp = cp;
  1255. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1256. ncr_print_msg(cp, nego == NS_WIDE ?
  1257.   "wide/narrow msgout":
  1258. (nego == NS_SYNC ? "sync/async msgout" : "ppr msgout"), 
  1259. msgptr);
  1260. };
  1261. };
  1262. return msglen;
  1263. }
  1264. #endif /* SCSI_NCR_INTEGRITY_CHECKING */
  1265. /*==========================================================
  1266. **
  1267. **
  1268. ** Prepare the next negotiation message if needed.
  1269. **
  1270. ** Fill in the part of message buffer that contains the 
  1271. ** negotiation and the nego_status field of the CCB.
  1272. ** Returns the size of the message in bytes.
  1273. **
  1274. **
  1275. **==========================================================
  1276. */
  1277. static int ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr)
  1278. {
  1279. tcb_p tp = &np->target[cp->target];
  1280. int msglen = 0;
  1281. int nego = 0;
  1282. u_char width, offset, factor, last_byte;
  1283. if (!np->check_integrity) {
  1284. /* If integrity checking disabled, enable PPR messaging
  1285.  * if device supports wide, sync and ultra 3
  1286.  */
  1287. if (tp->ppr_negotiation == 1) /* PPR message successful */
  1288. tp->ppr_negotiation = 2;
  1289. if ((tp->inq_done) && (!tp->ic_maximums_set)) {
  1290. tp->ic_maximums_set = 1;
  1291. /*
  1292.  * Issue PPR only if board is capable
  1293.  * and set-up for Ultra3 transfers.
  1294.  */
  1295. tp->ppr_negotiation = 0;
  1296. if ( (np->features & FE_ULTRA3) &&
  1297. (tp->usrwide) && (tp->maxoffs) &&
  1298. (tp->minsync == 0x09) )
  1299. tp->ppr_negotiation = 1;
  1300. }
  1301. }
  1302. if (tp->inq_done) {
  1303. /*
  1304.  * Get the current width, offset and period
  1305.  */
  1306. ncr_get_xfer_info( np, tp, &factor,
  1307. &offset, &width);
  1308. /*
  1309. ** negotiate wide transfers ?
  1310. */
  1311. if (!tp->widedone) {
  1312. if (tp->inq_byte7 & INQ7_WIDE16) {
  1313. if (tp->ppr_negotiation)
  1314. nego = NS_PPR;
  1315. else
  1316. nego = NS_WIDE;
  1317. width = tp->usrwide;
  1318. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1319. if (tp->ic_done)
  1320.          width &= tp->ic_max_width;
  1321. #endif
  1322. } else
  1323. tp->widedone=1;
  1324. };
  1325. /*
  1326. ** negotiate synchronous transfers?
  1327. */
  1328. if ((nego != NS_WIDE) && !tp->period) {
  1329. if (tp->inq_byte7 & INQ7_SYNC) {
  1330. if (tp->ppr_negotiation)
  1331. nego = NS_PPR;
  1332. else
  1333. nego = NS_SYNC;
  1334. /* Check for async flag */
  1335. if (tp->maxoffs == 0) {
  1336.     offset = 0;
  1337.     factor = 0;
  1338. }
  1339. else {
  1340.     offset = tp->maxoffs;
  1341.     factor = tp->minsync;
  1342. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1343.       if ((tp->ic_done) && 
  1344. (factor < tp->ic_min_sync))
  1345.          factor = tp->ic_min_sync;
  1346. #endif
  1347. }
  1348. } else {
  1349. offset = 0;
  1350. factor = 0;
  1351. tp->period  =0xffff;
  1352. PRINT_TARGET(np, cp->target);
  1353. printk ("target did not report SYNC.n");
  1354. };
  1355. };
  1356. };
  1357. switch (nego) {
  1358. case NS_PPR:
  1359. /*
  1360. ** Must make sure data is consistent.
  1361. ** If period is 9 and sync, must be wide and DT bit set
  1362. ** else period must be larger. 
  1363. ** Maximum offset is 31=0x1f is ST mode, 62 if DT mode
  1364. */
  1365. last_byte = 0;
  1366. if ( (factor==9) && offset) {
  1367. if (!width) {
  1368. factor = 0x0A;
  1369. }
  1370. else 
  1371. last_byte = 0x02;
  1372. }
  1373. if (!last_byte && offset > np->maxoffs_st)
  1374. offset = np->maxoffs_st;
  1375. msgptr[msglen++] = M_EXTENDED;
  1376. msgptr[msglen++] = 6;
  1377. msgptr[msglen++] = M_X_PPR_REQ;
  1378. msgptr[msglen++] = factor;
  1379. msgptr[msglen++] = 0;
  1380. msgptr[msglen++] = offset;
  1381. msgptr[msglen++] = width;
  1382. msgptr[msglen++] = last_byte;
  1383. break;
  1384. case NS_SYNC:
  1385. /*
  1386. ** Never negotiate faster than Ultra 2 (25ns periods)
  1387. */
  1388. if (offset && (factor < 0x0A)) {
  1389. factor = 0x0A;
  1390. tp->minsync = 0x0A;
  1391. }
  1392. if (offset > np->maxoffs_st)
  1393. offset = np->maxoffs_st;
  1394. msgptr[msglen++] = M_EXTENDED;
  1395. msgptr[msglen++] = 3;
  1396. msgptr[msglen++] = M_X_SYNC_REQ;
  1397. msgptr[msglen++] = factor;
  1398. msgptr[msglen++] = offset;
  1399. break;
  1400. case NS_WIDE:
  1401. msgptr[msglen++] = M_EXTENDED;
  1402. msgptr[msglen++] = 2;
  1403. msgptr[msglen++] = M_X_WIDE_REQ;
  1404. msgptr[msglen++] = width;
  1405. break;
  1406. };
  1407. cp->nego_status = nego;
  1408. if (nego) {
  1409. tp->nego_cp = cp;
  1410. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1411. ncr_print_msg(cp, nego == NS_WIDE ?
  1412.   "wide msgout":
  1413. (nego == NS_SYNC ? "sync msgout" : "ppr msgout"), 
  1414. msgptr);
  1415. };
  1416. };
  1417. return msglen;
  1418. }
  1419. /*==========================================================
  1420. **
  1421. **
  1422. ** Start execution of a SCSI command.
  1423. ** This is called from the generic SCSI driver.
  1424. **
  1425. **
  1426. **==========================================================
  1427. */
  1428. static int ncr_queue_command (ncb_p np, Scsi_Cmnd *cmd)
  1429. {
  1430. /* Scsi_Device        *device    = cmd->device; */
  1431. tcb_p tp                      = &np->target[cmd->target];
  1432. lcb_p lp       = ncr_lp(np, tp, cmd->lun);
  1433. ccb_p cp;
  1434. u_char idmsg, *msgptr;
  1435. u_int   msglen;
  1436. int direction;
  1437. u_int32 lastp, goalp;
  1438. /*---------------------------------------------
  1439. **
  1440. **      Some shortcuts ...
  1441. **
  1442. **---------------------------------------------
  1443. */
  1444. if ((cmd->target == np->myaddr   ) ||
  1445. (cmd->target >= MAX_TARGET) ||
  1446. (cmd->lun    >= MAX_LUN   )) {
  1447. return(DID_BAD_TARGET);
  1448.         }
  1449. /*---------------------------------------------
  1450. **
  1451. ** Complete the 1st TEST UNIT READY command
  1452. ** with error condition if the device is 
  1453. ** flagged NOSCAN, in order to speed up 
  1454. ** the boot.
  1455. **
  1456. **---------------------------------------------
  1457. */
  1458. if ((cmd->cmnd[0] == 0 || cmd->cmnd[0] == 0x12) && 
  1459.     (tp->usrflag & UF_NOSCAN)) {
  1460. tp->usrflag &= ~UF_NOSCAN;
  1461. return DID_BAD_TARGET;
  1462. }
  1463. if (DEBUG_FLAGS & DEBUG_TINY) {
  1464. PRINT_ADDR(cmd);
  1465. printk ("CMD=%x ", cmd->cmnd[0]);
  1466. }
  1467. /*---------------------------------------------------
  1468. **
  1469. ** Assign a ccb / bind cmd.
  1470. ** If resetting, shorten settle_time if necessary
  1471. ** in order to avoid spurious timeouts.
  1472. ** If resetting or no free ccb,
  1473. ** insert cmd into the waiting list.
  1474. **
  1475. **----------------------------------------------------
  1476. */
  1477. if (np->settle_time && cmd->timeout_per_command >= HZ) {
  1478. u_long tlimit = ktime_get(cmd->timeout_per_command - HZ);
  1479. if (ktime_dif(np->settle_time, tlimit) > 0)
  1480. np->settle_time = tlimit;
  1481. }
  1482.         if (np->settle_time || !(cp=ncr_get_ccb (np, cmd->target, cmd->lun))) {
  1483. insert_into_waiting_list(np, cmd);
  1484. return(DID_OK);
  1485. }
  1486. cp->cmd = cmd;
  1487. /*---------------------------------------------------
  1488. **
  1489. ** Enable tagged queue if asked by scsi ioctl
  1490. **
  1491. **----------------------------------------------------
  1492. */
  1493. #if 0 /* This stuff was only useful for linux-1.2.13 */
  1494. if (lp && !lp->numtags && cmd->device && cmd->device->tagged_queue) {
  1495. lp->numtags = tp->usrtags;
  1496. ncr_setup_tags (np, cp->target, cp->lun);
  1497. }
  1498. #endif
  1499. /*----------------------------------------------------
  1500. **
  1501. ** Build the identify / tag / sdtr message
  1502. **
  1503. **----------------------------------------------------
  1504. */
  1505. idmsg = M_IDENTIFY | cp->lun;
  1506. if (cp ->tag != NO_TAG || (lp && !(tp->usrflag & UF_NODISC)))
  1507. idmsg |= 0x40;
  1508. msgptr = cp->scsi_smsg;
  1509. msglen = 0;
  1510. msgptr[msglen++] = idmsg;
  1511. if (cp->tag != NO_TAG) {
  1512. char order = np->order;
  1513. /*
  1514. ** Force ordered tag if necessary to avoid timeouts 
  1515. ** and to preserve interactivity.
  1516. */
  1517. if (lp && ktime_exp(lp->tags_stime)) {
  1518. lp->tags_si = !(lp->tags_si);
  1519. if (lp->tags_sum[lp->tags_si]) {
  1520. order = M_ORDERED_TAG;
  1521. if ((DEBUG_FLAGS & DEBUG_TAGS)||bootverbose>0){ 
  1522. PRINT_ADDR(cmd);
  1523. printk("ordered tag forced.n");
  1524. }
  1525. }
  1526. lp->tags_stime = ktime_get(3*HZ);
  1527. }
  1528. if (order == 0) {
  1529. /*
  1530. ** Ordered write ops, unordered read ops.
  1531. */
  1532. switch (cmd->cmnd[0]) {
  1533. case 0x08:  /* READ_SMALL (6) */
  1534. case 0x28:  /* READ_BIG  (10) */
  1535. case 0xa8:  /* READ_HUGE (12) */
  1536. order = M_SIMPLE_TAG;
  1537. break;
  1538. default:
  1539. order = M_ORDERED_TAG;
  1540. }
  1541. }
  1542. msgptr[msglen++] = order;
  1543. /*
  1544. ** For less than 128 tags, actual tags are numbered 
  1545. ** 1,3,5,..2*MAXTAGS+1,since we may have to deal 
  1546. ** with devices that have problems with #TAG 0 or too 
  1547. ** great #TAG numbers. For more tags (up to 256), 
  1548. ** we use directly our tag number.
  1549. */
  1550. #if MAX_TASKS > (512/4)
  1551. msgptr[msglen++] = cp->tag;
  1552. #else
  1553. msgptr[msglen++] = (cp->tag << 1) + 1;
  1554. #endif
  1555. }
  1556. cp->host_flags = 0;
  1557. /*----------------------------------------------------
  1558. **
  1559. ** Build the data descriptors
  1560. **
  1561. **----------------------------------------------------
  1562. */
  1563. direction = scsi_data_direction(cmd);
  1564. if (direction != SCSI_DATA_NONE) {
  1565. cp->segments = np->scatter (np, cp, cp->cmd);
  1566. if (cp->segments < 0) {
  1567. ncr_free_ccb(np, cp);
  1568. return(DID_ERROR);
  1569. }
  1570. }
  1571. else {
  1572. cp->data_len = 0;
  1573. cp->segments = 0;
  1574. }
  1575. /*---------------------------------------------------
  1576. **
  1577. ** negotiation required?
  1578. **
  1579. ** (nego_status is filled by ncr_prepare_nego())
  1580. **
  1581. **---------------------------------------------------
  1582. */
  1583. cp->nego_status = 0;
  1584. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  1585. if ((np->check_integrity && tp->ic_done) || !np->check_integrity) {
  1586.  if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
  1587. msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
  1588.  }
  1589. }
  1590. else if (np->check_integrity && (cmd->ic_in_progress)) { 
  1591. msglen += ncr_ic_nego (np, cp, cmd, msgptr + msglen);
  1592.         }
  1593. else if (np->check_integrity && cmd->ic_complete) {
  1594. u_long current_period;
  1595. u_char current_offset, current_width, current_factor;
  1596. ncr_get_xfer_info (np, tp, &current_factor,
  1597. &current_offset, &current_width);
  1598. tp->ic_max_width = current_width;
  1599. tp->ic_min_sync  = current_factor;
  1600. if      (current_factor == 9)  current_period = 125;
  1601. else if (current_factor == 10)  current_period = 250;
  1602. else if (current_factor == 11)  current_period = 303;
  1603. else if (current_factor == 12)  current_period = 500;
  1604. else   current_period = current_factor * 40;
  1605. /*
  1606.                  * Negotiation for this target is complete. Update flags.
  1607.                  */
  1608. tp->period = current_period;
  1609. tp->widedone = 1;
  1610. tp->ic_done = 1;
  1611. printk("%s: Integrity Check Complete: n", ncr_name(np)); 
  1612. printk("%s: %s %s SCSI", ncr_name(np), 
  1613. current_offset?"SYNC":"ASYNC",
  1614. tp->ic_max_width?"WIDE":"NARROW");
  1615. if (current_offset) {
  1616. u_long mbs = 10000 * (tp->ic_max_width + 1); 
  1617. printk(" %d.%d  MB/s", 
  1618. (int) (mbs / current_period), (int) (mbs % current_period));
  1619. printk(" (%d ns, %d offset)n", 
  1620.   (int) current_period/10, current_offset);
  1621. }
  1622. else 
  1623. printk(" %d MB/s. n ", (tp->ic_max_width+1)*5);
  1624.         }
  1625. #else
  1626. if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
  1627. msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
  1628. }
  1629. #endif /* SCSI_NCR_INTEGRITY_CHECKING */
  1630. /*----------------------------------------------------
  1631. **
  1632. ** Determine xfer direction.
  1633. **
  1634. **----------------------------------------------------
  1635. */
  1636. if (!cp->data_len)
  1637. direction = SCSI_DATA_NONE;
  1638. /*
  1639. ** If data direction is UNKNOWN, speculate DATA_READ 
  1640. ** but prepare alternate pointers for WRITE in case 
  1641. ** of our speculation will be just wrong.
  1642. ** SCRIPTS will swap values if needed.
  1643. */
  1644. switch(direction) {
  1645. case SCSI_DATA_UNKNOWN:
  1646. case SCSI_DATA_WRITE:
  1647. goalp = NCB_SCRIPT_PHYS (np, data_out2) + 8;
  1648. lastp = goalp - 8 - (cp->segments * (SCR_SG_SIZE*4));
  1649. if (direction != SCSI_DATA_UNKNOWN)
  1650. break;
  1651. cp->phys.header.wgoalp = cpu_to_scr(goalp);
  1652. cp->phys.header.wlastp = cpu_to_scr(lastp);
  1653. /* fall through */
  1654. case SCSI_DATA_READ:
  1655. cp->host_flags |= HF_DATA_IN;
  1656. goalp = NCB_SCRIPT_PHYS (np, data_in2) + 8;
  1657. lastp = goalp - 8 - (cp->segments * (SCR_SG_SIZE*4));
  1658. break;
  1659. default:
  1660. case SCSI_DATA_NONE:
  1661. lastp = goalp = NCB_SCRIPTH_PHYS (np, no_data);
  1662. break;
  1663. }
  1664. /*
  1665. ** Set all pointers values needed by SCRIPTS.
  1666. ** If direction is unknown, start at data_io.
  1667. */
  1668. cp->phys.header.lastp = cpu_to_scr(lastp);
  1669. cp->phys.header.goalp = cpu_to_scr(goalp);
  1670. if (direction == SCSI_DATA_UNKNOWN)
  1671. cp->phys.header.savep = 
  1672. cpu_to_scr(NCB_SCRIPTH_PHYS (np, data_io));
  1673. else
  1674. cp->phys.header.savep= cpu_to_scr(lastp);
  1675. /*
  1676. ** Save the initial data pointer in order to be able 
  1677. ** to redo the command.
  1678. ** We also have to save the initial lastp, since it 
  1679. ** will be changed to DATA_IO if we don't know the data 
  1680. ** direction and the device completes the command with 
  1681. ** QUEUE FULL status (without entering the data phase).
  1682. */
  1683. cp->startp = cp->phys.header.savep;
  1684. cp->lastp0 = cp->phys.header.lastp;
  1685. /*----------------------------------------------------
  1686. **
  1687. ** fill in ccb
  1688. **
  1689. **----------------------------------------------------
  1690. **
  1691. **
  1692. ** physical -> virtual backlink
  1693. ** Generic SCSI command
  1694. */
  1695. /*
  1696. ** Startqueue
  1697. */
  1698. cp->phys.header.go.start   = cpu_to_scr(NCB_SCRIPT_PHYS (np,select));
  1699. cp->phys.header.go.restart = cpu_to_scr(NCB_SCRIPT_PHYS (np,resel_dsa));
  1700. /*
  1701. ** select
  1702. */
  1703. cp->phys.select.sel_id = cp->target;
  1704. cp->phys.select.sel_scntl3 = tp->wval;
  1705. cp->phys.select.sel_sxfer = tp->sval;
  1706. cp->phys.select.sel_scntl4 = tp->uval;
  1707. /*
  1708. ** message
  1709. */
  1710. cp->phys.smsg.addr = cpu_to_scr(CCB_PHYS (cp, scsi_smsg));
  1711. cp->phys.smsg.size = cpu_to_scr(msglen);
  1712. /*
  1713. ** command
  1714. */
  1715. memcpy(cp->cdb_buf, cmd->cmnd, MIN(cmd->cmd_len, sizeof(cp->cdb_buf)));
  1716. cp->phys.cmd.addr = cpu_to_scr(CCB_PHYS (cp, cdb_buf[0]));
  1717. cp->phys.cmd.size = cpu_to_scr(cmd->cmd_len);
  1718. /*
  1719. ** status
  1720. */
  1721. cp->actualquirks = tp->quirks;
  1722. cp->host_status = cp->nego_status ? HS_NEGOTIATE : HS_BUSY;
  1723. cp->scsi_status = S_ILLEGAL;
  1724. cp->xerr_status = 0;
  1725. cp->extra_bytes = 0;
  1726. /*
  1727. ** extreme data pointer.
  1728. ** shall be positive, so -1 is lower than lowest.:)
  1729. */
  1730. cp->ext_sg  = -1;
  1731. cp->ext_ofs = 0;
  1732. /*----------------------------------------------------
  1733. **
  1734. ** Critical region: start this job.
  1735. **
  1736. **----------------------------------------------------
  1737. */
  1738. /*
  1739. ** activate this job.
  1740. */
  1741. /*
  1742. ** insert next CCBs into start queue.
  1743. ** 2 max at a time is enough to flush the CCB wait queue.
  1744. */
  1745. if (lp)
  1746. ncr_start_next_ccb(np, lp, 2);
  1747. else
  1748. ncr_put_start_queue(np, cp);
  1749. /*
  1750. ** Command is successfully queued.
  1751. */
  1752. return(DID_OK);
  1753. }
  1754. /*==========================================================
  1755. **
  1756. **
  1757. ** Insert a CCB into the start queue and wake up the 
  1758. ** SCRIPTS processor.
  1759. **
  1760. **
  1761. **==========================================================
  1762. */
  1763. static void ncr_start_next_ccb(ncb_p np, lcb_p lp, int maxn)
  1764. {
  1765. XPT_QUEHEAD *qp;
  1766. ccb_p cp;
  1767. while (maxn-- && lp->queuedccbs < lp->queuedepth) {
  1768. qp = xpt_remque_head(&lp->wait_ccbq);
  1769. if (!qp)
  1770. break;
  1771. ++lp->queuedccbs;
  1772. cp = xpt_que_entry(qp, struct ccb, link_ccbq);
  1773. xpt_insque_tail(qp, &lp->busy_ccbq);
  1774. lp->tasktbl[cp->tag == NO_TAG ? 0 : cp->tag] =
  1775. cpu_to_scr(cp->p_ccb);
  1776. ncr_put_start_queue(np, cp);
  1777. }
  1778. }
  1779. static void ncr_put_start_queue(ncb_p np, ccb_p cp)
  1780. {
  1781. u_short qidx;
  1782. #ifdef SCSI_NCR_IARB_SUPPORT
  1783. /*
  1784. ** If the previously queued CCB is not yet done, 
  1785. ** set the IARB hint. The SCRIPTS will go with IARB 
  1786. ** for this job when starting the previous one.
  1787. ** We leave devices a chance to win arbitration by 
  1788. ** not using more than 'iarb_max' consecutive 
  1789. ** immediate arbitrations.
  1790. */
  1791. if (np->last_cp && np->iarb_count < np->iarb_max) {
  1792. np->last_cp->host_flags |= HF_HINT_IARB;
  1793. ++np->iarb_count;
  1794. }
  1795. else
  1796. np->iarb_count = 0;
  1797. np->last_cp = cp;
  1798. #endif
  1799. /*
  1800. ** insert into start queue.
  1801. */
  1802. qidx = np->squeueput + 2;
  1803. if (qidx >= MAX_START*2) qidx = 0;
  1804. np->squeue [qidx]    = cpu_to_scr(np->p_idletask);
  1805. MEMORY_BARRIER();
  1806. np->squeue [np->squeueput] = cpu_to_scr(cp->p_ccb);
  1807. np->squeueput = qidx;
  1808. cp->queued = 1;
  1809. if (DEBUG_FLAGS & DEBUG_QUEUE)
  1810. printk ("%s: queuepos=%d.n", ncr_name (np), np->squeueput);
  1811. /*
  1812. ** Script processor may be waiting for reselect.
  1813. ** Wake it up.
  1814. */
  1815. MEMORY_BARRIER();
  1816. OUTB (nc_istat, SIGP|np->istat_sem);
  1817. }
  1818. /*==========================================================
  1819. **
  1820. ** Soft reset the chip.
  1821. **
  1822. ** Some 896 and 876 chip revisions may hang-up if we set 
  1823. ** the SRST (soft reset) bit at the wrong time when SCRIPTS 
  1824. ** are running.
  1825. ** So, we need to abort the current operation prior to 
  1826. ** soft resetting the chip.
  1827. **
  1828. **==========================================================
  1829. */
  1830. static void ncr_chip_reset (ncb_p np)
  1831. {
  1832. OUTB (nc_istat, SRST);
  1833. UDELAY (10);
  1834. OUTB (nc_istat, 0);
  1835. }
  1836. static void ncr_soft_reset(ncb_p np)
  1837. {
  1838. u_char istat;
  1839. int i;
  1840. if (!(np->features & FE_ISTAT1) || !(INB (nc_istat1) & SRUN))
  1841. goto do_chip_reset;
  1842. OUTB (nc_istat, CABRT);
  1843. for (i = 100000 ; i ; --i) {
  1844. istat = INB (nc_istat);
  1845. if (istat & SIP) {
  1846. INW (nc_sist);
  1847. }
  1848. else if (istat & DIP) {
  1849. if (INB (nc_dstat) & ABRT);
  1850. break;
  1851. }
  1852. UDELAY(5);
  1853. }
  1854. OUTB (nc_istat, 0);
  1855. if (!i)
  1856. printk("%s: unable to abort current chip operation, "
  1857.        "ISTAT=0x%02x.n", ncr_name(np), istat);
  1858. do_chip_reset:
  1859. ncr_chip_reset(np);
  1860. }
  1861. /*==========================================================
  1862. **
  1863. **
  1864. ** Start reset process.
  1865. ** The interrupt handler will reinitialize the chip.
  1866. ** The timeout handler will wait for settle_time before 
  1867. ** clearing it and so resuming command processing.
  1868. **
  1869. **
  1870. **==========================================================
  1871. */
  1872. static void ncr_start_reset(ncb_p np)
  1873. {
  1874. (void) ncr_reset_scsi_bus(np, 1, driver_setup.settle_delay);
  1875. }
  1876.  
  1877. static int ncr_reset_scsi_bus(ncb_p np, int enab_int, int settle_delay)
  1878. {
  1879. u_int32 term;
  1880. int retv = 0;
  1881. np->settle_time = ktime_get(settle_delay * HZ);
  1882. if (bootverbose > 1)
  1883. printk("%s: resetting, "
  1884. "command processing suspended for %d secondsn",
  1885. ncr_name(np), settle_delay);
  1886. ncr_soft_reset(np); /* Soft reset the chip */
  1887. UDELAY (2000); /* The 895/6 need time for the bus mode to settle */
  1888. if (enab_int)
  1889. OUTW (nc_sien, RST);
  1890. /*
  1891. ** Enable Tolerant, reset IRQD if present and 
  1892. ** properly set IRQ mode, prior to resetting the bus.
  1893. */
  1894. OUTB (nc_stest3, TE);
  1895. OUTB (nc_dcntl, (np->rv_dcntl & IRQM));
  1896. OUTB (nc_scntl1, CRST);
  1897. UDELAY (200);
  1898. if (!driver_setup.bus_check)
  1899. goto out;
  1900. /*
  1901. ** Check for no terminators or SCSI bus shorts to ground.
  1902. ** Read SCSI data bus, data parity bits and control signals.
  1903. ** We are expecting RESET to be TRUE and other signals to be 
  1904. ** FALSE.
  1905. */
  1906. term = INB(nc_sstat0);
  1907. term = ((term & 2) << 7) + ((term & 1) << 17); /* rst sdp0 */
  1908. term |= ((INB(nc_sstat2) & 0x01) << 26) | /* sdp1     */
  1909. ((INW(nc_sbdl) & 0xff)   << 9)  | /* d7-0     */
  1910. ((INW(nc_sbdl) & 0xff00) << 10) | /* d15-8    */
  1911. INB(nc_sbcl); /* req ack bsy sel atn msg cd io    */
  1912. if (!(np->features & FE_WIDE))
  1913. term &= 0x3ffff;
  1914. if (term != (2<<7)) {
  1915. printk("%s: suspicious SCSI data while resetting the BUS.n",
  1916. ncr_name(np));
  1917. printk("%s: %sdp0,d7-0,rst,req,ack,bsy,sel,atn,msg,c/d,i/o = "
  1918. "0x%lx, expecting 0x%lxn",
  1919. ncr_name(np),
  1920. (np->features & FE_WIDE) ? "dp1,d15-8," : "",
  1921. (u_long)term, (u_long)(2<<7));
  1922. if (driver_setup.bus_check == 1)
  1923. retv = 1;
  1924. }
  1925. out:
  1926. OUTB (nc_scntl1, 0);
  1927. return retv;
  1928. }
  1929. /*==========================================================
  1930. **
  1931. **
  1932. ** Reset the SCSI BUS.
  1933. ** This is called from the generic SCSI driver.
  1934. **
  1935. **
  1936. **==========================================================
  1937. */
  1938. static int ncr_reset_bus (ncb_p np, Scsi_Cmnd *cmd, int sync_reset)
  1939. {
  1940. /* Scsi_Device        *device    = cmd->device; */
  1941. ccb_p cp;
  1942. int found;
  1943. /*
  1944.  * Return immediately if reset is in progress.
  1945.  */
  1946. if (np->settle_time) {
  1947. return SCSI_RESET_PUNT;
  1948. }
  1949. /*
  1950.  * Start the reset process.
  1951.  * The script processor is then assumed to be stopped.
  1952.  * Commands will now be queued in the waiting list until a settle 
  1953.  * delay of 2 seconds will be completed.
  1954.  */
  1955. ncr_start_reset(np);
  1956. /*
  1957.  * First, look in the wakeup list
  1958.  */
  1959. for (found=0, cp=np->ccbc; cp; cp=cp->link_ccb) {
  1960. /*
  1961. ** look for the ccb of this command.
  1962. */
  1963. if (cp->host_status == HS_IDLE) continue;
  1964. if (cp->cmd == cmd) {
  1965. found = 1;
  1966. break;
  1967. }
  1968. }
  1969. /*
  1970.  * Then, look in the waiting list
  1971.  */
  1972. if (!found && retrieve_from_waiting_list(0, np, cmd))
  1973. found = 1;
  1974. /*
  1975.  * Wake-up all awaiting commands with DID_RESET.
  1976.  */
  1977. reset_waiting_list(np);
  1978. /*
  1979.  * Wake-up all pending commands with HS_RESET -> DID_RESET.
  1980.  */
  1981. ncr_wakeup(np, HS_RESET);
  1982. /*
  1983.  * If the involved command was not in a driver queue, and the 
  1984.  * scsi driver told us reset is synchronous, and the command is not 
  1985.  * currently in the waiting list, complete it with DID_RESET status,
  1986.  * in order to keep it alive.
  1987.  */
  1988. if (!found && sync_reset && !retrieve_from_waiting_list(0, np, cmd)) {
  1989. SetScsiResult(cmd, DID_RESET, 0);
  1990. ncr_queue_done_cmd(np, cmd);
  1991. }
  1992. return SCSI_RESET_SUCCESS;
  1993. }
  1994. /*==========================================================
  1995. **
  1996. **
  1997. ** Abort an SCSI command.
  1998. ** This is called from the generic SCSI driver.
  1999. **
  2000. **
  2001. **==========================================================
  2002. */
  2003. static int ncr_abort_command (ncb_p np, Scsi_Cmnd *cmd)
  2004. {
  2005. /* Scsi_Device        *device    = cmd->device; */
  2006. ccb_p cp;
  2007. /*
  2008.  * First, look for the scsi command in the waiting list
  2009.  */
  2010. if (remove_from_waiting_list(np, cmd)) {
  2011. SetScsiAbortResult(cmd);
  2012. ncr_queue_done_cmd(np, cmd);
  2013. return SCSI_ABORT_SUCCESS;
  2014. }
  2015. /*
  2016.  * Then, look in the wakeup list
  2017.  */
  2018. for (cp=np->ccbc; cp; cp=cp->link_ccb) {
  2019. /*
  2020. ** look for the ccb of this command.
  2021. */
  2022. if (cp->host_status == HS_IDLE) continue;
  2023. if (cp->cmd == cmd)
  2024. break;
  2025. }
  2026. if (!cp) {
  2027. return SCSI_ABORT_NOT_RUNNING;
  2028. }
  2029. /*
  2030. ** Keep track we have to abort this job.
  2031. */
  2032. cp->to_abort = 1;
  2033. /*
  2034. ** Tell the SCRIPTS processor to stop 
  2035. ** and synchronize with us.
  2036. */
  2037. np->istat_sem = SEM;
  2038. /*
  2039. **      If there are no requests, the script
  2040. **      processor will sleep on SEL_WAIT_RESEL.
  2041. **      Let's wake it up, since it may have to work.
  2042. */
  2043. OUTB (nc_istat, SIGP|SEM);
  2044. /*
  2045. ** Tell user we are working for him.
  2046. */
  2047. return SCSI_ABORT_PENDING;
  2048. }
  2049. /*==========================================================
  2050. **
  2051. ** Linux release module stuff.
  2052. **
  2053. ** Called before unloading the module
  2054. ** Detach the host.
  2055. ** We have to free resources and halt the NCR chip
  2056. **
  2057. **==========================================================
  2058. */
  2059. #ifdef MODULE
  2060. static int ncr_detach(ncb_p np)
  2061. {
  2062. int i;
  2063. printk("%s: detaching ...n", ncr_name(np));
  2064. /*
  2065. ** Stop the ncr_timeout process
  2066. ** Set release_stage to 1 and wait that ncr_timeout() set it to 2.
  2067. */
  2068. np->release_stage = 1;
  2069. for (i = 50 ; i && np->release_stage != 2 ; i--) MDELAY (100);
  2070. if (np->release_stage != 2)
  2071. printk("%s: the timer seems to be already stoppedn",
  2072. ncr_name(np));
  2073. else np->release_stage = 2;
  2074. /*
  2075. ** Reset NCR chip.
  2076. ** We should use ncr_soft_reset(), but we donnot want to do 
  2077. ** so, since we may not be safe if interrupts occur.
  2078. */
  2079. printk("%s: resetting chipn", ncr_name(np));
  2080. ncr_chip_reset(np);
  2081. /*
  2082. ** Restore bios setting for automatic clock detection.
  2083. */
  2084. OUTB(nc_dmode, np->sv_dmode);
  2085. OUTB(nc_dcntl, np->sv_dcntl);
  2086. OUTB(nc_ctest3, np->sv_ctest3);
  2087. OUTB(nc_ctest4, np->sv_ctest4);
  2088. OUTB(nc_ctest5, np->sv_ctest5);
  2089. OUTB(nc_gpcntl, np->sv_gpcntl);
  2090. OUTB(nc_stest2, np->sv_stest2);
  2091. ncr_selectclock(np, np->sv_scntl3);
  2092. /*
  2093. ** Free host resources
  2094. */
  2095. ncr_free_resources(np);
  2096. return 1;
  2097. }
  2098. #endif
  2099. /*==========================================================
  2100. **
  2101. **
  2102. ** Complete execution of a SCSI command.
  2103. ** Signal completion to the generic SCSI driver.
  2104. **
  2105. **
  2106. **==========================================================
  2107. */
  2108. void ncr_complete (ncb_p np, ccb_p cp)
  2109. {
  2110. Scsi_Cmnd *cmd;
  2111. tcb_p tp;
  2112. lcb_p lp;
  2113. /*
  2114. ** Sanity check
  2115. */
  2116. if (!cp || !cp->cmd)
  2117. return;
  2118. /*
  2119. ** Print some debugging info.
  2120. */
  2121. if (DEBUG_FLAGS & DEBUG_TINY)
  2122. printk ("CCB=%lx STAT=%x/%xn", (unsigned long)cp,
  2123. cp->host_status,cp->scsi_status);
  2124. /*
  2125. ** Get command, target and lun pointers.
  2126. */
  2127. cmd = cp->cmd;
  2128. cp->cmd = NULL;
  2129. tp = &np->target[cp->target];
  2130. lp = ncr_lp(np, tp, cp->lun);
  2131. /*
  2132. ** We donnot queue more than 1 ccb per target 
  2133. ** with negotiation at any time. If this ccb was 
  2134. ** used for negotiation, clear this info in the tcb.
  2135. */
  2136. if (cp == tp->nego_cp)
  2137. tp->nego_cp = 0;
  2138. #ifdef SCSI_NCR_IARB_SUPPORT
  2139. /*
  2140. ** We just complete the last queued CCB.
  2141. ** Clear this info that is no more relevant.
  2142. */
  2143. if (cp == np->last_cp)
  2144. np->last_cp = 0;
  2145. #endif
  2146. /*
  2147. ** If auto-sense performed, change scsi status, 
  2148. ** Otherwise, compute the residual.
  2149. */
  2150. if (cp->host_flags & HF_AUTO_SENSE) {
  2151. cp->scsi_status = cp->sv_scsi_status;
  2152. cp->xerr_status = cp->sv_xerr_status;
  2153. }
  2154. else {
  2155. cp->resid = 0;
  2156. if (cp->xerr_status ||
  2157.     cp->phys.header.lastp != cp->phys.header.goalp)
  2158. cp->resid = ncr_compute_residual(np, cp);
  2159. }
  2160. /*
  2161. ** Check for extended errors.
  2162. */
  2163. if (cp->xerr_status) {
  2164. if (cp->xerr_status & XE_PARITY_ERR) {
  2165. PRINT_ADDR(cmd);
  2166. printk ("unrecovered SCSI parity error.n");
  2167. }
  2168. if (cp->xerr_status & XE_EXTRA_DATA) {
  2169. PRINT_ADDR(cmd);
  2170. printk ("extraneous data discarded.n");
  2171. }
  2172. if (cp->xerr_status & XE_BAD_PHASE) {
  2173. PRINT_ADDR(cmd);
  2174. printk ("illegal scsi phase (4/5).n");
  2175. }
  2176. if (cp->xerr_status & XE_SODL_UNRUN) {
  2177. PRINT_ADDR(cmd);
  2178. printk ("ODD transfer in DATA OUT phase.n");
  2179. }
  2180. if (cp->xerr_status & XE_SWIDE_OVRUN){
  2181. PRINT_ADDR(cmd);
  2182. printk ("ODD transfer in DATA IN phase.n");
  2183. }
  2184. if (cp->host_status==HS_COMPLETE)
  2185. cp->host_status = HS_FAIL;
  2186. }
  2187. /*
  2188. ** Print out any error for debugging purpose.
  2189. */
  2190. if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
  2191. if (cp->host_status!=HS_COMPLETE || cp->scsi_status!=S_GOOD ||
  2192.     cp->resid) {
  2193. PRINT_ADDR(cmd);
  2194. printk ("ERROR: cmd=%x host_status=%x scsi_status=%x "
  2195. "data_len=%d residual=%dn",
  2196. cmd->cmnd[0], cp->host_status, cp->scsi_status,
  2197. cp->data_len, cp->resid);
  2198. }
  2199. }
  2200. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,99)
  2201. /*
  2202. ** Move residual byte count to user structure.
  2203. */
  2204. cmd->resid = cp->resid;
  2205. #endif
  2206. /*
  2207. ** Check the status.
  2208. */
  2209. if (   (cp->host_status == HS_COMPLETE)
  2210. && (cp->scsi_status == S_GOOD ||
  2211.     cp->scsi_status == S_COND_MET)) {
  2212.                 /*
  2213. ** All went well (GOOD status).
  2214. ** CONDITION MET status is returned on 
  2215.                 ** `Pre-Fetch' or `Search data' success.
  2216.                 */
  2217. SetScsiResult(cmd, DID_OK, cp->scsi_status);
  2218. /*
  2219. ** Allocate the lcb if not yet.
  2220. */
  2221. if (!lp)
  2222. ncr_alloc_lcb (np, cp->target, cp->lun);
  2223. /*
  2224. ** On standard INQUIRY response (EVPD and CmDt 
  2225. ** not set), setup logical unit according to 
  2226. ** announced capabilities (we need the 1rst 8 bytes).
  2227. */
  2228. if (cmd->cmnd[0] == 0x12 && !(cmd->cmnd[1] & 0x3) &&
  2229.     cmd->request_bufflen - cp->resid > 7 && !cmd->use_sg) {
  2230. sync_scsi_data(np, cmd); /* SYNC the data */
  2231. ncr_setup_lcb (np, cp->target, cp->lun,
  2232.        (char *) cmd->request_buffer);
  2233. }
  2234. /*
  2235. ** If tags was reduced due to queue full,
  2236. ** increase tags if 1000 good status received.
  2237. */
  2238. if (lp && lp->usetags && lp->numtags < lp->maxtags) {
  2239. ++lp->num_good;
  2240. if (lp->num_good >= 1000) {
  2241. lp->num_good = 0;
  2242. ++lp->numtags;
  2243. ncr_setup_tags (np, cp->target, cp->lun);
  2244. }
  2245. }
  2246. } else if ((cp->host_status == HS_COMPLETE)
  2247. && (cp->scsi_status == S_CHECK_COND)) {
  2248. /*
  2249. **   Check condition code
  2250. */
  2251. SetScsiResult(cmd, DID_OK, S_CHECK_COND);
  2252. if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
  2253. PRINT_ADDR(cmd);
  2254. ncr_printl_hex("sense data:", cmd->sense_buffer, 14);
  2255. }
  2256. } else if ((cp->host_status == HS_COMPLETE)
  2257. && (cp->scsi_status == S_CONFLICT)) {
  2258. /*
  2259. **   Reservation Conflict condition code
  2260. */
  2261. SetScsiResult(cmd, DID_OK, S_CONFLICT);
  2262. } else if ((cp->host_status == HS_COMPLETE)
  2263. && (cp->scsi_status == S_BUSY ||
  2264.     cp->scsi_status == S_QUEUE_FULL)) {
  2265. /*
  2266. **   Target is busy.
  2267. */
  2268. SetScsiResult(cmd, DID_OK, cp->scsi_status);
  2269. } else if ((cp->host_status == HS_SEL_TIMEOUT)
  2270. || (cp->host_status == HS_TIMEOUT)) {
  2271. /*
  2272. **   No response
  2273. */
  2274. SetScsiResult(cmd, DID_TIME_OUT, cp->scsi_status);
  2275. } else if (cp->host_status == HS_RESET) {
  2276. /*
  2277. **   SCSI bus reset
  2278. */
  2279. SetScsiResult(cmd, DID_RESET, cp->scsi_status);
  2280. } else if (cp->host_status == HS_ABORTED) {
  2281. /*
  2282. **   Transfer aborted
  2283. */
  2284. SetScsiAbortResult(cmd);
  2285. } else {
  2286. int did_status;
  2287. /*
  2288. **  Other protocol messes
  2289. */
  2290. PRINT_ADDR(cmd);
  2291. printk ("COMMAND FAILED (%x %x) @%p.n",
  2292. cp->host_status, cp->scsi_status, cp);
  2293. did_status = DID_ERROR;
  2294. if (cp->xerr_status & XE_PARITY_ERR)
  2295. did_status = DID_PARITY;
  2296. SetScsiResult(cmd, did_status, cp->scsi_status);
  2297. }
  2298. /*
  2299. ** trace output
  2300. */
  2301. if (tp->usrflag & UF_TRACE) {
  2302. PRINT_ADDR(cmd);
  2303. printk (" CMD:");
  2304. ncr_print_hex(cmd->cmnd, cmd->cmd_len);
  2305. if (cp->host_status==HS_COMPLETE) {
  2306. switch (cp->scsi_status) {
  2307. case S_GOOD:
  2308. printk ("  GOOD");
  2309. break;
  2310. case S_CHECK_COND:
  2311. printk ("  SENSE:");
  2312. ncr_print_hex(cmd->sense_buffer, 14);
  2313. break;
  2314. default:
  2315. printk ("  STAT: %xn", cp->scsi_status);
  2316. break;
  2317. }
  2318. } else printk ("  HOSTERROR: %x", cp->host_status);
  2319. printk ("n");
  2320. }
  2321. /*
  2322. ** Free this ccb
  2323. */
  2324. ncr_free_ccb (np, cp);
  2325. /*
  2326. ** requeue awaiting scsi commands for this lun.
  2327. */
  2328. if (lp && lp->queuedccbs < lp->queuedepth &&
  2329.     !xpt_que_empty(&lp->wait_ccbq))
  2330. ncr_start_next_ccb(np, lp, 2);
  2331. /*
  2332. ** requeue awaiting scsi commands for this controller.
  2333. */
  2334. if (np->waiting_list)
  2335. requeue_waiting_list(np);
  2336. /*
  2337. ** signal completion to generic driver.
  2338. */
  2339. ncr_queue_done_cmd(np, cmd);
  2340. }
  2341. /*==========================================================
  2342. **
  2343. **
  2344. ** Signal all (or one) control block done.
  2345. **
  2346. **
  2347. **==========================================================
  2348. */
  2349. /*
  2350. ** The NCR has completed CCBs.
  2351. ** Look at the DONE QUEUE.
  2352. **
  2353. ** On architectures that may reorder LOAD/STORE operations, 
  2354. ** a memory barrier may be needed after the reading of the 
  2355. ** so-called `flag' and prior to dealing with the data.
  2356. */
  2357. int ncr_wakeup_done (ncb_p np)
  2358. {
  2359. ccb_p cp;
  2360. int i, n;
  2361. u_long dsa;
  2362. n = 0;
  2363. i = np->dqueueget;
  2364. while (1) {
  2365. dsa = scr_to_cpu(np->dqueue[i]);
  2366. if (!dsa)
  2367. break;
  2368. np->dqueue[i] = 0;
  2369. if ((i = i+2) >= MAX_START*2)
  2370. i = 0;
  2371. cp = ncr_ccb_from_dsa(np, dsa);
  2372. if (cp) {
  2373. MEMORY_BARRIER();
  2374. ncr_complete (np, cp);
  2375. ++n;
  2376. }
  2377. else
  2378. printk (KERN_ERR "%s: bad DSA (%lx) in done queue.n",
  2379. ncr_name(np), dsa);
  2380. }
  2381. np->dqueueget = i;
  2382. return n;
  2383. }
  2384. /*
  2385. ** Complete all active CCBs.
  2386. */
  2387. void ncr_wakeup (ncb_p np, u_long code)
  2388. {
  2389. ccb_p cp = np->ccbc;
  2390. while (cp) {
  2391. if (cp->host_status != HS_IDLE) {
  2392. cp->host_status = code;
  2393. ncr_complete (np, cp);
  2394. }
  2395. cp = cp->link_ccb;
  2396. }
  2397. }
  2398. /*==========================================================
  2399. **
  2400. **
  2401. ** Start NCR chip.
  2402. **
  2403. **
  2404. **==========================================================
  2405. */
  2406. void ncr_init (ncb_p np, int reset, char * msg, u_long code)
  2407. {
  2408.   int i;
  2409. u_long phys;
  2410.   /*
  2411. ** Reset chip if asked, otherwise just clear fifos.
  2412.   */
  2413. if (reset)
  2414. ncr_soft_reset(np);
  2415. else {
  2416. OUTB (nc_stest3, TE|CSF);
  2417. OUTONB (nc_ctest3, CLF);
  2418. }
  2419.  
  2420. /*
  2421. ** Message.
  2422. */
  2423. if (msg) printk (KERN_INFO "%s: restart (%s).n", ncr_name (np), msg);
  2424. /*
  2425. ** Clear Start Queue
  2426. */
  2427. phys = np->p_squeue;
  2428. np->queuedepth = MAX_START - 1; /* 1 entry needed as end marker */
  2429. for (i = 0; i < MAX_START*2; i += 2) {
  2430. np->squeue[i]   = cpu_to_scr(np->p_idletask);
  2431. np->squeue[i+1] = cpu_to_scr(phys + (i+2)*4);
  2432. }
  2433. np->squeue[MAX_START*2-1] = cpu_to_scr(phys);
  2434. /*
  2435. ** Start at first entry.
  2436. */
  2437. np->squeueput = 0;
  2438. np->scripth0->startpos[0] = cpu_to_scr(phys);
  2439. /*
  2440. ** Clear Done Queue
  2441. */
  2442. phys = vtobus(np->dqueue);
  2443. for (i = 0; i < MAX_START*2; i += 2) {
  2444. np->dqueue[i]   = 0;
  2445. np->dqueue[i+1] = cpu_to_scr(phys + (i+2)*4);
  2446. }
  2447. np->dqueue[MAX_START*2-1] = cpu_to_scr(phys);
  2448. /*
  2449. ** Start at first entry.
  2450. */
  2451. np->scripth0->done_pos[0] = cpu_to_scr(phys);
  2452. np->dqueueget = 0;
  2453. /*
  2454. ** Wakeup all pending jobs.
  2455. */
  2456. ncr_wakeup (np, code);
  2457. /*
  2458. ** Init chip.
  2459. */
  2460. OUTB (nc_istat,  0x00   ); /*  Remove Reset, abort */
  2461. UDELAY (2000); /* The 895 needs time for the bus mode to settle */
  2462. OUTB (nc_scntl0, np->rv_scntl0 | 0xc0);
  2463. /*  full arb., ena parity, par->ATN  */
  2464. OUTB (nc_scntl1, 0x00); /*  odd parity, and remove CRST!! */
  2465. ncr_selectclock(np, np->rv_scntl3); /* Select SCSI clock */
  2466. OUTB (nc_scid  , RRE|np->myaddr); /* Adapter SCSI address */
  2467. OUTW (nc_respid, 1ul<<np->myaddr); /* Id to respond to */
  2468. OUTB (nc_istat , SIGP ); /*  Signal Process */
  2469. OUTB (nc_dmode , np->rv_dmode); /* Burst length, dma mode */
  2470. OUTB (nc_ctest5, np->rv_ctest5); /* Large fifo + large burst */
  2471. OUTB (nc_dcntl , NOCOM|np->rv_dcntl); /* Protect SFBR */
  2472. OUTB (nc_ctest3, np->rv_ctest3); /* Write and invalidate */
  2473. OUTB (nc_ctest4, np->rv_ctest4); /* Master parity checking */
  2474. if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  2475. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66)){
  2476. OUTB (nc_stest2, EXT|np->rv_stest2); 
  2477. /* Extended Sreq/Sack filtering, not supported in C1010/C1010_66 */
  2478. }
  2479. OUTB (nc_stest3, TE); /* TolerANT enable */
  2480. OUTB (nc_stime0, 0x0c); /* HTH disabled  STO 0.25 sec */
  2481. /*
  2482. ** DEL 441 - 53C876 Rev 5 - Part Number 609-0392787/2788 - ITEM 2.
  2483. ** Disable overlapped arbitration for all dual-function 
  2484. ** devices, regardless revision id.
  2485. ** We may consider it is a post-chip-design feature. ;-)
  2486.   **
  2487.   ** Errata applies to all 896 and 1010 parts.
  2488. */
  2489. if (np->device_id == PCI_DEVICE_ID_NCR_53C875)
  2490. OUTB (nc_ctest0, (1<<5));
  2491.   else if (np->device_id == PCI_DEVICE_ID_NCR_53C896  ||
  2492.    np->device_id == PCI_DEVICE_ID_LSI_53C1010 ||
  2493.    np->device_id == PCI_DEVICE_ID_LSI_53C1010_66 )
  2494. np->rv_ccntl0 |= DPR;
  2495. /*
  2496. ** C1010_66MHz rev 0 part requies AIPCNTL1 bit 3 to be set.
  2497. */
  2498. if (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)
  2499. OUTB(nc_aipcntl1, (1<<3));
  2500. /*
  2501. **  Write CCNTL0/CCNTL1 for chips capable of 64 bit addressing 
  2502. **  and/or hardware phase mismatch, since only such chips 
  2503. **  seem to support those IO registers.
  2504. */
  2505. if (np->features & (FE_DAC | FE_NOPM)) {
  2506. OUTB (nc_ccntl0, np->rv_ccntl0);
  2507. OUTB (nc_ccntl1, np->rv_ccntl1);
  2508. }
  2509. /*
  2510.   ** If phase mismatch handled by scripts (53C895A or 53C896 
  2511.   ** or 53C1010 or 53C1010_66), set PM jump addresses. 
  2512. */
  2513. if (np->features & FE_NOPM) {
  2514. printk(KERN_INFO "%s: handling phase mismatch from SCRIPTS.n", 
  2515.        ncr_name(np));
  2516. OUTL (nc_pmjad1, NCB_SCRIPTH_PHYS (np, pm_handle));
  2517. OUTL (nc_pmjad2, NCB_SCRIPTH_PHYS (np, pm_handle));
  2518. }
  2519. /*
  2520. **    Enable GPIO0 pin for writing if LED support from SCRIPTS.
  2521. **    Also set GPIO5 and clear GPIO6 if hardware LED control.
  2522. */
  2523. if (np->features & FE_LED0)
  2524. OUTB(nc_gpcntl, INB(nc_gpcntl) & ~0x01);
  2525. else if (np->features & FE_LEDC)
  2526. OUTB(nc_gpcntl, (INB(nc_gpcntl) & ~0x41) | 0x20);
  2527. /*
  2528. **      enable ints
  2529. */
  2530. OUTW (nc_sien , STO|HTH|MA|SGE|UDC|RST|PAR);
  2531. OUTB (nc_dien , MDPE|BF|SSI|SIR|IID);
  2532. /*
  2533. ** For 895/895A/896/c1010
  2534. ** Enable SBMC interrupt and save current SCSI bus mode.
  2535. */
  2536. if ( (np->features & FE_ULTRA2) || (np->features & FE_ULTRA3) ) {
  2537. OUTONW (nc_sien, SBMC);
  2538. np->scsi_mode = INB (nc_stest4) & SMODE;
  2539. }
  2540. /*
  2541. ** Fill in target structure.
  2542. ** Reinitialize usrsync.
  2543. ** Reinitialize usrwide.
  2544. ** Prepare sync negotiation according to actual SCSI bus mode.
  2545. */
  2546. for (i=0;i<MAX_TARGET;i++) {
  2547. tcb_p tp = &np->target[i];
  2548. tp->to_reset = 0;
  2549. tp->sval    = 0;
  2550. tp->wval    = np->rv_scntl3;
  2551. tp->uval    = np->rv_scntl4;
  2552. if (tp->usrsync != 255) {
  2553. if (tp->usrsync <= np->maxsync) {
  2554. if (tp->usrsync < np->minsync) {
  2555. tp->usrsync = np->minsync;
  2556. }
  2557. }
  2558. else
  2559. tp->usrsync = 255;
  2560. };
  2561. if (tp->usrwide > np->maxwide)
  2562. tp->usrwide = np->maxwide;
  2563. ncr_negotiate (np, tp);
  2564. }
  2565. /*
  2566. **    Download SCSI SCRIPTS to on-chip RAM if present,
  2567. **    and start script processor.
  2568. **    We do the download preferently from the CPU.
  2569. **    For platforms that may not support PCI memory mapping,
  2570. **    we use a simple SCRIPTS that performs MEMORY MOVEs.
  2571. */
  2572. if (np->base2_ba) {
  2573. if (bootverbose)
  2574. printk ("%s: Downloading SCSI SCRIPTS.n",
  2575. ncr_name(np));
  2576. #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
  2577. if (np->base2_ws == 8192)
  2578. phys = NCB_SCRIPTH0_PHYS (np, start_ram64);
  2579. else
  2580. phys = NCB_SCRIPTH_PHYS (np, start_ram);
  2581. #else
  2582. if (np->base2_ws == 8192) {
  2583. memcpy_to_pci(np->base2_va + 4096,
  2584. np->scripth0, sizeof(struct scripth));
  2585. OUTL (nc_mmws, np->scr_ram_seg);
  2586. OUTL (nc_mmrs, np->scr_ram_seg);
  2587. OUTL (nc_sfs,  np->scr_ram_seg);
  2588. phys = NCB_SCRIPTH_PHYS (np, start64);
  2589. }
  2590. else
  2591. phys = NCB_SCRIPT_PHYS (np, init);
  2592. memcpy_to_pci(np->base2_va, np->script0, sizeof(struct script));
  2593. #endif /* SCSI_NCR_PCI_MEM_NOT_SUPPORTED */
  2594. }
  2595. else
  2596. phys = NCB_SCRIPT_PHYS (np, init);
  2597. np->istat_sem = 0;
  2598. OUTL (nc_dsa, np->p_ncb);
  2599. OUTL_DSP (phys);
  2600. }
  2601. /*==========================================================
  2602. **
  2603. ** Prepare the negotiation values for wide and
  2604. ** synchronous transfers.
  2605. **
  2606. **==========================================================
  2607. */
  2608. static void ncr_negotiate (struct ncb* np, struct tcb* tp)
  2609. {
  2610. /*
  2611. ** minsync unit is 4ns !
  2612. */
  2613. u_long minsync = tp->usrsync;
  2614. /*
  2615. ** SCSI bus mode limit
  2616. */
  2617. if (np->scsi_mode && np->scsi_mode == SMODE_SE) {
  2618. if (minsync < 12) minsync = 12;
  2619. }
  2620. /*
  2621. ** our limit ..
  2622. */
  2623. if (minsync < np->minsync)
  2624. minsync = np->minsync;
  2625. /*
  2626. ** divider limit
  2627. */
  2628. if (minsync > np->maxsync)
  2629. minsync = 255;
  2630. tp->minsync = minsync;
  2631. tp->maxoffs = (minsync<255 ? np->maxoffs : 0);
  2632. /*
  2633. ** period=0: has to negotiate sync transfer
  2634. */
  2635. tp->period=0;
  2636. /*
  2637. ** widedone=0: has to negotiate wide transfer
  2638. */
  2639. tp->widedone=0;
  2640. }
  2641. /*==========================================================
  2642. **
  2643. ** Get clock factor and sync divisor for a given 
  2644. ** synchronous factor period.
  2645. ** Returns the clock factor (in sxfer) and scntl3 
  2646. ** synchronous divisor field.
  2647. **
  2648. **==========================================================
  2649. */
  2650. static void ncr_getsync(ncb_p np, u_char sfac, u_char *fakp, u_char *scntl3p)
  2651. {
  2652. u_long clk = np->clock_khz; /* SCSI clock frequency in kHz */
  2653. int div = np->clock_divn; /* Number of divisors supported */
  2654. u_long fak; /* Sync factor in sxfer */
  2655. u_long per; /* Period in tenths of ns */
  2656. u_long kpc; /* (per * clk) */
  2657. /*
  2658. ** Compute the synchronous period in tenths of nano-seconds
  2659. ** from sfac.
  2660. **
  2661. ** Note, if sfac == 9, DT is being used. Double the period of 125
  2662. ** to 250. 
  2663. */
  2664. if (sfac <= 10) per = 250;
  2665. else if (sfac == 11) per = 303;
  2666. else if (sfac == 12) per = 500;
  2667. else per = 40 * sfac;
  2668. /*
  2669. ** Look for the greatest clock divisor that allows an 
  2670. ** input speed faster than the period.
  2671. */
  2672. kpc = per * clk;
  2673. while (--div >= 0)
  2674. if (kpc >= (div_10M[div] << 2)) break;
  2675. /*
  2676. ** Calculate the lowest clock factor that allows an output 
  2677. ** speed not faster than the period.
  2678. */
  2679. fak = (kpc - 1) / div_10M[div] + 1;
  2680. #if 0 /* This optimization does not seem very useful */
  2681. per = (fak * div_10M[div]) / clk;
  2682. /*
  2683. ** Why not to try the immediate lower divisor and to choose 
  2684. ** the one that allows the fastest output speed ?
  2685. ** We dont want input speed too much greater than output speed.
  2686. */
  2687. if (div >= 1 && fak < 8) {
  2688. u_long fak2, per2;
  2689. fak2 = (kpc - 1) / div_10M[div-1] + 1;
  2690. per2 = (fak2 * div_10M[div-1]) / clk;
  2691. if (per2 < per && fak2 <= 8) {
  2692. fak = fak2;
  2693. per = per2;
  2694. --div;
  2695. }
  2696. }
  2697. #endif
  2698. if (fak < 4) fak = 4; /* Should never happen, too bad ... */
  2699. /*
  2700. ** Compute and return sync parameters for the ncr
  2701. */
  2702. *fakp = fak - 4;
  2703. /*
  2704. ** If sfac < 25, and 8xx parts, desire that the chip operate at 
  2705. ** least at Ultra speeds.  Must set bit 7 of scntl3.
  2706. ** For C1010, do not set this bit. If operating at Ultra3 speeds,
  2707. ** set the U3EN bit instead.
  2708. */ 
  2709. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010)  ||
  2710. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
  2711. *scntl3p = (div+1) << 4;
  2712. *fakp = 0;
  2713. }
  2714. else {
  2715. *scntl3p = ((div+1) << 4) + (sfac < 25 ? 0x80 : 0);
  2716. *fakp = fak - 4;
  2717. }
  2718. }
  2719. /*==========================================================
  2720. **
  2721. ** Utility routine to return the current bus width
  2722. ** synchronous period and offset.
  2723. ** Utilizes target sval, wval and uval  
  2724. **
  2725. **==========================================================
  2726. */
  2727. static void ncr_get_xfer_info(ncb_p np, tcb_p tp, u_char *factor, 
  2728. u_char *offset, u_char *width)
  2729. {
  2730. u_char idiv;
  2731. u_long period;
  2732. *width = (tp->wval & EWS) ? 1 : 0;
  2733. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  2734. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
  2735. *offset  = (tp->sval & 0x3f);
  2736. else
  2737. *offset  = (tp->sval & 0x1f);
  2738.         /*
  2739.  * Midlayer signal to the driver that all of the scsi commands
  2740.  * for the integrity check have completed. Save the negotiated
  2741.    * parameters (extracted from sval, wval and uval). 
  2742.  * See ncr_setsync for alg. details.
  2743.  */
  2744. idiv = (tp->wval>>4) & 0x07;
  2745. if ( *offset && idiv ) {
  2746.    if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) || 
  2747.    (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)){
  2748.     if (tp->uval & 0x80)
  2749. period = (2*div_10M[idiv-1])/np->clock_khz;
  2750.          else 
  2751.      period = (4*div_10M[idiv-1])/np->clock_khz;
  2752.    }
  2753.    else
  2754.         period = (((tp->sval>>5)+4)*div_10M[idiv-1])/np->clock_khz;
  2755. }
  2756. else
  2757. period = 0xffff;
  2758. if (period <= 125) *factor =   9;
  2759. else if (period <= 250) *factor =  10;
  2760. else if (period <= 303) *factor  = 11;
  2761. else if (period <= 500) *factor  = 12;
  2762. else *factor  = (period + 40 - 1) / 40;
  2763. }
  2764. /*==========================================================
  2765. **
  2766. ** Set actual values, sync status and patch all ccbs of 
  2767. ** a target according to new sync/wide agreement.
  2768. **
  2769. **==========================================================
  2770. */
  2771. static void ncr_set_sync_wide_status (ncb_p np, u_char target)
  2772. {
  2773. ccb_p cp = np->ccbc;
  2774. tcb_p tp = &np->target[target];
  2775. /*
  2776. ** set actual value and sync_status
  2777. **
  2778. ** TEMP register contains current scripts address
  2779. ** which is data type/direction/dependent.
  2780. */
  2781. OUTB (nc_sxfer, tp->sval);
  2782. OUTB (nc_scntl3, tp->wval);
  2783. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010)  ||
  2784. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) 
  2785. OUTB (nc_scntl4, tp->uval); 
  2786. /*
  2787. ** patch ALL ccbs of this target.
  2788. */
  2789. for (cp = np->ccbc; cp; cp = cp->link_ccb) {
  2790. if (cp->host_status == HS_IDLE)
  2791. continue;
  2792. if (cp->target != target)
  2793. continue;
  2794. cp->phys.select.sel_scntl3 = tp->wval;
  2795. cp->phys.select.sel_sxfer  = tp->sval;
  2796. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  2797. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
  2798. cp->phys.select.sel_scntl4 = tp->uval;
  2799. };
  2800. }
  2801. /*==========================================================
  2802. **
  2803. ** Switch sync mode for current job and it's target
  2804. **
  2805. **==========================================================
  2806. */
  2807. static void ncr_setsync (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer, 
  2808. u_char scntl4)
  2809. {
  2810. tcb_p tp;
  2811. u_char target = INB (nc_sdid) & 0x0f;
  2812. u_char idiv;
  2813. u_char offset;
  2814. assert (cp);
  2815. if (!cp) return;
  2816. assert (target == (cp->target & 0xf));
  2817. tp = &np->target[target];
  2818. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  2819. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
  2820. offset = sxfer & 0x3f; /* bits 5-0 */
  2821. scntl3 = (scntl3 & 0xf0) | (tp->wval & EWS);
  2822. scntl4 = (scntl4 & 0x80);
  2823. }
  2824. else {
  2825. offset = sxfer & 0x1f; /* bits 4-0 */
  2826. if (!scntl3 || !offset)
  2827. scntl3 = np->rv_scntl3;
  2828. scntl3 = (scntl3 & 0xf0) | (tp->wval & EWS) | 
  2829. (np->rv_scntl3 & 0x07);
  2830. }
  2831. /*
  2832. ** Deduce the value of controller sync period from scntl3.
  2833. ** period is in tenths of nano-seconds.
  2834. */
  2835. idiv = ((scntl3 >> 4) & 0x7);
  2836. if ( offset && idiv) {
  2837. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  2838. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
  2839. /* Note: If extra data hold clocks are used,
  2840.  * the formulas below must be modified.
  2841.  * When scntl4 == 0, ST mode.
  2842.  */
  2843. if (scntl4 & 0x80)
  2844. tp->period = (2*div_10M[idiv-1])/np->clock_khz;
  2845. else
  2846. tp->period = (4*div_10M[idiv-1])/np->clock_khz;
  2847. }
  2848. else 
  2849. tp->period = (((sxfer>>5)+4)*div_10M[idiv-1])/np->clock_khz;
  2850. }
  2851. else
  2852. tp->period = 0xffff;
  2853. /*
  2854. **  Stop there if sync parameters are unchanged
  2855. */
  2856. if (tp->sval == sxfer && tp->wval == scntl3 && tp->uval == scntl4) return;
  2857. tp->sval = sxfer;
  2858. tp->wval = scntl3;
  2859. tp->uval = scntl4;
  2860. /*
  2861. ** Bells and whistles   ;-)
  2862. ** Donnot announce negotiations due to auto-sense, 
  2863. ** unless user really want us to be verbose. :)
  2864. */
  2865. if ( bootverbose < 2 && (cp->host_flags & HF_AUTO_SENSE))
  2866. goto next;
  2867. PRINT_TARGET(np, target);
  2868. if (offset) {
  2869. unsigned f10 = 100000 << (tp->widedone ? tp->widedone -1 : 0);
  2870. unsigned mb10 = (f10 + tp->period/2) / tp->period;
  2871. char *scsi;
  2872. /*
  2873. **  Disable extended Sreq/Sack filtering
  2874. */
  2875. if ((tp->period <= 2000) && 
  2876. (np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  2877. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
  2878. OUTOFFB (nc_stest2, EXT);
  2879. /*
  2880. ** Bells and whistles   ;-)
  2881. */
  2882. if (tp->period < 250) scsi = "FAST-80";
  2883. else if (tp->period < 500) scsi = "FAST-40";
  2884. else if (tp->period < 1000) scsi = "FAST-20";
  2885. else if (tp->period < 2000) scsi = "FAST-10";
  2886. else scsi = "FAST-5";
  2887. printk ("%s %sSCSI %d.%d MB/s (%d.%d ns, offset %d)n", scsi,
  2888. tp->widedone > 1 ? "WIDE " : "",
  2889. mb10 / 10, mb10 % 10, tp->period / 10, tp->period % 10,
  2890. offset);
  2891. } else
  2892. printk ("%sasynchronous.n", tp->widedone > 1 ? "wide " : "");
  2893. next:
  2894. /*
  2895. ** set actual value and sync_status
  2896. ** patch ALL ccbs of this target.
  2897. */
  2898. ncr_set_sync_wide_status(np, target);
  2899. }
  2900. /*==========================================================
  2901. **
  2902. ** Switch wide mode for current job and it's target
  2903. ** SCSI specs say: a SCSI device that accepts a WDTR 
  2904. ** message shall reset the synchronous agreement to 
  2905. ** asynchronous mode.
  2906. **
  2907. **==========================================================
  2908. */
  2909. static void ncr_setwide (ncb_p np, ccb_p cp, u_char wide, u_char ack)
  2910. {
  2911. u_short target = INB (nc_sdid) & 0x0f;
  2912. tcb_p tp;
  2913. u_char scntl3;
  2914. u_char sxfer;
  2915. assert (cp);
  2916. if (!cp) return;
  2917. assert (target == (cp->target & 0xf));
  2918. tp = &np->target[target];
  2919. tp->widedone  =  wide+1;
  2920. scntl3 = (tp->wval & (~EWS)) | (wide ? EWS : 0);
  2921. sxfer = ack ? 0 : tp->sval;
  2922. /*
  2923. **  Stop there if sync/wide parameters are unchanged
  2924. */
  2925. if (tp->sval == sxfer && tp->wval == scntl3) return;
  2926. tp->sval = sxfer;
  2927. tp->wval = scntl3;
  2928. /*
  2929. ** Bells and whistles   ;-)
  2930. */
  2931. if (bootverbose >= 2) {
  2932. PRINT_TARGET(np, target);
  2933. if (scntl3 & EWS)
  2934. printk ("WIDE SCSI (16 bit) enabled.n");
  2935. else
  2936. printk ("WIDE SCSI disabled.n");
  2937. }
  2938. /*
  2939. ** set actual value and sync_status
  2940. ** patch ALL ccbs of this target.
  2941. */
  2942. ncr_set_sync_wide_status(np, target);
  2943. }
  2944. /*==========================================================
  2945. **
  2946. ** Switch sync/wide mode for current job and it's target
  2947. ** PPR negotiations only
  2948. **
  2949. **==========================================================
  2950. */
  2951. static void ncr_setsyncwide (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer, 
  2952. u_char scntl4, u_char wide)
  2953. {
  2954. tcb_p tp;
  2955. u_char target = INB (nc_sdid) & 0x0f;
  2956. u_char idiv;
  2957. u_char offset;
  2958. assert (cp);
  2959. if (!cp) return;
  2960. assert (target == (cp->target & 0xf));
  2961. tp = &np->target[target];
  2962. tp->widedone  =  wide+1;
  2963. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  2964. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
  2965. offset = sxfer & 0x3f; /* bits 5-0 */
  2966. scntl3 = (scntl3 & 0xf0) | (wide ? EWS : 0);
  2967. scntl4 = (scntl4 & 0x80);
  2968. }
  2969. else {
  2970. offset = sxfer & 0x1f; /* bits 4-0 */
  2971. if (!scntl3 || !offset)
  2972. scntl3 = np->rv_scntl3;
  2973. scntl3 = (scntl3 & 0xf0) | (wide ? EWS : 0) | 
  2974. (np->rv_scntl3 & 0x07);
  2975. }
  2976. /*
  2977. ** Deduce the value of controller sync period from scntl3.
  2978. ** period is in tenths of nano-seconds.
  2979. */
  2980. idiv = ((scntl3 >> 4) & 0x7);
  2981. if ( offset && idiv) {
  2982. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  2983. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
  2984. /* Note: If extra data hold clocks are used,
  2985.  * the formulas below must be modified.
  2986.  * When scntl4 == 0, ST mode.
  2987.  */
  2988. if (scntl4 & 0x80)
  2989. tp->period = (2*div_10M[idiv-1])/np->clock_khz;
  2990. else
  2991. tp->period = (4*div_10M[idiv-1])/np->clock_khz;
  2992. }
  2993. else 
  2994. tp->period = (((sxfer>>5)+4)*div_10M[idiv-1])/np->clock_khz;
  2995. }
  2996. else
  2997. tp->period = 0xffff;
  2998. /*
  2999. **  Stop there if sync parameters are unchanged
  3000. */
  3001. if (tp->sval == sxfer && tp->wval == scntl3 && tp->uval == scntl4) return;
  3002. tp->sval = sxfer;
  3003. tp->wval = scntl3;
  3004. tp->uval = scntl4;
  3005. /*
  3006. ** Bells and whistles   ;-)
  3007. ** Donnot announce negotiations due to auto-sense, 
  3008. ** unless user really want us to be verbose. :)
  3009. */
  3010. if ( bootverbose < 2 && (cp->host_flags & HF_AUTO_SENSE))
  3011. goto next;
  3012. PRINT_TARGET(np, target);
  3013. if (offset) {
  3014. unsigned f10 = 100000 << (tp->widedone ? tp->widedone -1 : 0);
  3015. unsigned mb10 = (f10 + tp->period/2) / tp->period;
  3016. char *scsi;
  3017. /*
  3018. **  Disable extended Sreq/Sack filtering
  3019. */
  3020. if ((tp->period <= 2000) && 
  3021. (np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  3022. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
  3023. OUTOFFB (nc_stest2, EXT);
  3024. /*
  3025. ** Bells and whistles   ;-)
  3026. */
  3027. if (tp->period < 250) scsi = "FAST-80";
  3028. else if (tp->period < 500) scsi = "FAST-40";
  3029. else if (tp->period < 1000) scsi = "FAST-20";
  3030. else if (tp->period < 2000) scsi = "FAST-10";
  3031. else scsi = "FAST-5";
  3032. printk ("%s %sSCSI %d.%d MB/s (%d.%d ns, offset %d)n", scsi,
  3033. tp->widedone > 1 ? "WIDE " : "",
  3034. mb10 / 10, mb10 % 10, tp->period / 10, tp->period % 10,
  3035. offset);
  3036. } else
  3037. printk ("%sasynchronous.n", tp->widedone > 1 ? "wide " : "");
  3038. next:
  3039. /*
  3040. ** set actual value and sync_status
  3041. ** patch ALL ccbs of this target.
  3042. */
  3043. ncr_set_sync_wide_status(np, target);
  3044. }
  3045. /*==========================================================
  3046. **
  3047. ** Switch tagged mode for a target.
  3048. **
  3049. **==========================================================
  3050. */
  3051. static void ncr_setup_tags (ncb_p np, u_char tn, u_char ln)
  3052. {
  3053. tcb_p tp = &np->target[tn];
  3054. lcb_p lp = ncr_lp(np, tp, ln);
  3055. u_short reqtags, maxdepth;
  3056. /*
  3057. ** Just in case ...
  3058. */
  3059. if ((!tp) || (!lp))
  3060. return;
  3061. /*
  3062. ** If SCSI device queue depth is not yet set, leave here.
  3063. */
  3064. if (!lp->scdev_depth)
  3065. return;
  3066. /*
  3067. ** Donnot allow more tags than the SCSI driver can queue 
  3068. ** for this device.
  3069. ** Donnot allow more tags than we can handle.
  3070. */
  3071. maxdepth = lp->scdev_depth;
  3072. if (maxdepth > lp->maxnxs) maxdepth    = lp->maxnxs;
  3073. if (lp->maxtags > maxdepth) lp->maxtags = maxdepth;
  3074. if (lp->numtags > maxdepth) lp->numtags = maxdepth;
  3075. /*
  3076. ** only devices conformant to ANSI Version >= 2
  3077. ** only devices capable of tagged commands
  3078. ** only if enabled by user ..
  3079. */
  3080. if ((lp->inq_byte7 & INQ7_QUEUE) && lp->numtags > 1) {
  3081. reqtags = lp->numtags;
  3082. } else {
  3083. reqtags = 1;
  3084. };
  3085. /*
  3086. ** Update max number of tags
  3087. */
  3088. lp->numtags = reqtags;
  3089. if (lp->numtags > lp->maxtags)
  3090. lp->maxtags = lp->numtags;
  3091. /*
  3092. ** If we want to switch tag mode, we must wait 
  3093. ** for no CCB to be active.
  3094. */
  3095. if (reqtags > 1 && lp->usetags) {  /* Stay in tagged mode    */
  3096. if (lp->queuedepth == reqtags)  /* Already announced    */
  3097. return;
  3098. lp->queuedepth = reqtags;
  3099. }
  3100. else if (reqtags <= 1 && !lp->usetags) { /* Stay in untagged mode  */
  3101. lp->queuedepth = reqtags;
  3102. return;
  3103. }
  3104. else {  /* Want to switch tag mode */
  3105. if (lp->busyccbs)  /* If not yet safe, return */
  3106. return;
  3107. lp->queuedepth = reqtags;
  3108. lp->usetags = reqtags > 1 ? 1 : 0;
  3109. }
  3110. /*
  3111. ** Patch the lun mini-script, according to tag mode.
  3112. */
  3113. lp->resel_task = lp->usetags?
  3114. cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_tag)) :
  3115. cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_notag));
  3116. /*
  3117. ** Announce change to user.
  3118. */
  3119. if (bootverbose) {
  3120. PRINT_LUN(np, tn, ln);
  3121. if (lp->usetags)
  3122. printk("tagged command queue depth set to %dn", reqtags);
  3123. else
  3124. printk("tagged command queueing disabledn");
  3125. }
  3126. }
  3127. /*----------------------------------------------------
  3128. **
  3129. ** handle user commands
  3130. **
  3131. **----------------------------------------------------
  3132. */
  3133. #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
  3134. static void ncr_usercmd (ncb_p np)
  3135. {
  3136. u_char t;
  3137. tcb_p tp;
  3138. int ln;
  3139. u_long size;
  3140. switch (np->user.cmd) {
  3141. case 0: return;
  3142. case UC_SETDEBUG:
  3143. #ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
  3144. ncr_debug = np->user.data;
  3145. #endif
  3146. break;
  3147. case UC_SETORDER:
  3148. np->order = np->user.data;
  3149. break;
  3150. case UC_SETVERBOSE:
  3151. np->verbose = np->user.data;
  3152. break;
  3153. default:
  3154. /*
  3155. ** We assume that other commands apply to targets.
  3156. ** This should always be the case and avoid the below 
  3157. ** 4 lines to be repeated 5 times.
  3158. */
  3159. for (t = 0; t < MAX_TARGET; t++) {
  3160. if (!((np->user.target >> t) & 1))
  3161. continue;
  3162. tp = &np->target[t];
  3163. switch (np->user.cmd) {
  3164. case UC_SETSYNC:
  3165. tp->usrsync = np->user.data;
  3166. ncr_negotiate (np, tp);
  3167. break;
  3168. case UC_SETWIDE:
  3169. size = np->user.data;
  3170. if (size > np->maxwide)
  3171. size=np->maxwide;
  3172. tp->usrwide = size;
  3173. ncr_negotiate (np, tp);
  3174. break;
  3175. case UC_SETTAGS:
  3176. tp->usrtags = np->user.data;
  3177. for (ln = 0; ln < MAX_LUN; ln++) {
  3178. lcb_p lp;
  3179. lp = ncr_lp(np, tp, ln);
  3180. if (!lp)
  3181. continue;
  3182. lp->numtags = np->user.data;
  3183. lp->maxtags = lp->numtags;
  3184. ncr_setup_tags (np, t, ln);
  3185. }
  3186. break;
  3187. case UC_RESETDEV:
  3188. tp->to_reset = 1;
  3189. np->istat_sem = SEM;
  3190. OUTB (nc_istat, SIGP|SEM);
  3191. break;
  3192. case UC_CLEARDEV:
  3193. for (ln = 0; ln < MAX_LUN; ln++) {
  3194. lcb_p lp;
  3195. lp = ncr_lp(np, tp, ln);
  3196. if (lp)
  3197. lp->to_clear = 1;
  3198. }
  3199. np->istat_sem = SEM;
  3200. OUTB (nc_istat, SIGP|SEM);
  3201. break;
  3202. case UC_SETFLAG:
  3203. tp->usrflag = np->user.data;
  3204. break;
  3205. }
  3206. }
  3207. break;
  3208. }
  3209. np->user.cmd=0;
  3210. }
  3211. #endif
  3212. /*==========================================================
  3213. **
  3214. **
  3215. ** ncr timeout handler.
  3216. **
  3217. **
  3218. **==========================================================
  3219. **
  3220. ** Misused to keep the driver running when
  3221. ** interrupts are not configured correctly.
  3222. **
  3223. **----------------------------------------------------------
  3224. */
  3225. static void ncr_timeout (ncb_p np)
  3226. {
  3227. u_long thistime = ktime_get(0);
  3228. /*
  3229. ** If release process in progress, let's go
  3230. ** Set the release stage from 1 to 2 to synchronize
  3231. ** with the release process.
  3232. */
  3233. if (np->release_stage) {
  3234. if (np->release_stage == 1) np->release_stage = 2;
  3235. return;
  3236. }
  3237. #ifdef SCSI_NCR_PCIQ_BROKEN_INTR
  3238. np->timer.expires = ktime_get((HZ+9)/10);
  3239. #else
  3240. np->timer.expires = ktime_get(SCSI_NCR_TIMER_INTERVAL);
  3241. #endif
  3242. add_timer(&np->timer);
  3243. /*
  3244. ** If we are resetting the ncr, wait for settle_time before 
  3245. ** clearing it. Then command processing will be resumed.
  3246. */
  3247. if (np->settle_time) {
  3248. if (np->settle_time <= thistime) {
  3249. if (bootverbose > 1)
  3250. printk("%s: command processing resumedn", ncr_name(np));
  3251. np->settle_time = 0;
  3252. requeue_waiting_list(np);
  3253. }
  3254. return;
  3255. }
  3256. /*
  3257. ** Nothing to do for now, but that may come.
  3258. */
  3259. if (np->lasttime + 4*HZ < thistime) {
  3260. np->lasttime = thistime;
  3261. }
  3262. #ifdef SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
  3263. /*
  3264. ** Some way-broken PCI bridges may lead to 
  3265. ** completions being lost when the clearing 
  3266. ** of the INTFLY flag by the CPU occurs 
  3267. ** concurrently with the chip raising this flag.
  3268. ** If this ever happen, lost completions will 
  3269. ** be reaped here.
  3270. */
  3271. ncr_wakeup_done(np);
  3272. #endif
  3273. #ifdef SCSI_NCR_PCIQ_BROKEN_INTR
  3274. if (INB(nc_istat) & (INTF|SIP|DIP)) {
  3275. /*
  3276. ** Process pending interrupts.
  3277. */
  3278. if (DEBUG_FLAGS & DEBUG_TINY) printk ("{");
  3279. ncr_exception (np);
  3280. if (DEBUG_FLAGS & DEBUG_TINY) printk ("}");
  3281. }
  3282. #endif /* SCSI_NCR_PCIQ_BROKEN_INTR */
  3283. }
  3284. /*==========================================================
  3285. **
  3286. ** log message for real hard errors
  3287. **
  3288. ** "ncr0 targ 0?: ERROR (ds:si) (so-si-sd) (sxfer/scntl3) @ name (dsp:dbc)."
  3289. ** "       reg: r0 r1 r2 r3 r4 r5 r6 ..... rf."
  3290. **
  3291. ** exception register:
  3292. ** ds: dstat
  3293. ** si: sist
  3294. **
  3295. ** SCSI bus lines:
  3296. ** so: control lines as driver by NCR.
  3297. ** si: control lines as seen by NCR.
  3298. ** sd: scsi data lines as seen by NCR.
  3299. **
  3300. ** wide/fastmode:
  3301. ** sxfer: (see the manual)
  3302. ** scntl3: (see the manual)
  3303. **
  3304. ** current script command:
  3305. ** dsp: script address (relative to start of script).
  3306. ** dbc: first word of script command.
  3307. **
  3308. ** First 24 register of the chip:
  3309. ** r0..rf
  3310. **
  3311. **==========================================================
  3312. */
  3313. static void ncr_log_hard_error(ncb_p np, u_short sist, u_char dstat)
  3314. {
  3315. u_int32 dsp;
  3316. int script_ofs;
  3317. int script_size;
  3318. char *script_name;
  3319. u_char *script_base;
  3320. int i;
  3321. dsp = INL (nc_dsp);
  3322. if (dsp > np->p_script && dsp <= np->p_script + sizeof(struct script)) {
  3323. script_ofs = dsp - np->p_script;
  3324. script_size = sizeof(struct script);
  3325. script_base = (u_char *) np->script0;
  3326. script_name = "script";
  3327. }
  3328. else if (np->p_scripth < dsp && 
  3329.  dsp <= np->p_scripth + sizeof(struct scripth)) {
  3330. script_ofs = dsp - np->p_scripth;
  3331. script_size = sizeof(struct scripth);
  3332. script_base = (u_char *) np->scripth0;
  3333. script_name = "scripth";
  3334. } else {
  3335. script_ofs = dsp;
  3336. script_size = 0;
  3337. script_base = 0;
  3338. script_name = "mem";
  3339. }
  3340. printk ("%s:%d: ERROR (%x:%x) (%x-%x-%x) (%x/%x) @ (%s %x:%08x).n",
  3341. ncr_name (np), (unsigned)INB (nc_sdid)&0x0f, dstat, sist,
  3342. (unsigned)INB (nc_socl), (unsigned)INB (nc_sbcl), (unsigned)INB (nc_sbdl),
  3343. (unsigned)INB (nc_sxfer),(unsigned)INB (nc_scntl3), script_name, script_ofs,
  3344. (unsigned)INL (nc_dbc));
  3345. if (((script_ofs & 3) == 0) &&
  3346.     (unsigned)script_ofs < script_size) {
  3347. printk ("%s: script cmd = %08xn", ncr_name(np),
  3348. scr_to_cpu((int) *(ncrcmd *)(script_base + script_ofs)));
  3349. }
  3350.         printk ("%s: regdump:", ncr_name(np));
  3351.         for (i=0; i<24;i++)
  3352.             printk (" %02x", (unsigned)INB_OFF(i));
  3353.         printk (".n");
  3354. }
  3355. /*============================================================
  3356. **
  3357. ** ncr chip exception handler.
  3358. **
  3359. **============================================================
  3360. **
  3361. ** In normal situations, interrupt conditions occur one at 
  3362. ** a time. But when something bad happens on the SCSI BUS, 
  3363. ** the chip may raise several interrupt flags before 
  3364. ** stopping and interrupting the CPU. The additionnal 
  3365. ** interrupt flags are stacked in some extra registers 
  3366. ** after the SIP and/or DIP flag has been raised in the 
  3367. ** ISTAT. After the CPU has read the interrupt condition 
  3368. ** flag from SIST or DSTAT, the chip unstacks the other 
  3369. ** interrupt flags and sets the corresponding bits in 
  3370. ** SIST or DSTAT. Since the chip starts stacking once the 
  3371. ** SIP or DIP flag is set, there is a small window of time 
  3372. ** where the stacking does not occur.
  3373. **
  3374. ** Typically, multiple interrupt conditions may happen in 
  3375. ** the following situations:
  3376. **
  3377. ** - SCSI parity error + Phase mismatch  (PAR|MA)
  3378. **   When an parity error is detected in input phase 
  3379. **   and the device switches to msg-in phase inside a 
  3380. **   block MOV.
  3381. ** - SCSI parity error + Unexpected disconnect (PAR|UDC)
  3382. **   When a stupid device does not want to handle the 
  3383. **   recovery of an SCSI parity error.
  3384. ** - Some combinations of STO, PAR, UDC, ...
  3385. **   When using non compliant SCSI stuff, when user is 
  3386. **   doing non compliant hot tampering on the BUS, when 
  3387. **   something really bad happens to a device, etc ...
  3388. **
  3389. ** The heuristic suggested by SYMBIOS to handle 
  3390. ** multiple interrupts is to try unstacking all 
  3391. ** interrupts conditions and to handle them on some 
  3392. ** priority based on error severity.
  3393. ** This will work when the unstacking has been 
  3394. ** successful, but we cannot be 100 % sure of that, 
  3395. ** since the CPU may have been faster to unstack than 
  3396. ** the chip is able to stack. Hmmm ... But it seems that 
  3397. ** such a situation is very unlikely to happen.
  3398. **
  3399. ** If this happen, for example STO catched by the CPU 
  3400. ** then UDC happenning before the CPU have restarted 
  3401. ** the SCRIPTS, the driver may wrongly complete the 
  3402. ** same command on UDC, since the SCRIPTS didn't restart 
  3403. ** and the DSA still points to the same command.
  3404. ** We avoid this situation by setting the DSA to an 
  3405. ** invalid value when the CCB is completed and before 
  3406. ** restarting the SCRIPTS.
  3407. **
  3408. ** Another issue is that we need some section of our 
  3409. ** recovery procedures to be somehow uninterruptible and 
  3410. ** that the SCRIPTS processor does not provides such a 
  3411. ** feature. For this reason, we handle recovery preferently 
  3412. ** from the C code and check against some SCRIPTS 
  3413. ** critical sections from the C code.
  3414. **
  3415. ** Hopefully, the interrupt handling of the driver is now 
  3416. ** able to resist to weird BUS error conditions, but donnot 
  3417. ** ask me for any guarantee that it will never fail. :-)
  3418. ** Use at your own decision and risk.
  3419. **
  3420. **============================================================
  3421. */
  3422. void ncr_exception (ncb_p np)
  3423. {
  3424. u_char istat, istatc;
  3425. u_char dstat;
  3426. u_short sist;
  3427. int i;
  3428. /*
  3429. ** interrupt on the fly ?
  3430. **
  3431. ** A `dummy read' is needed to ensure that the 
  3432. ** clear of the INTF flag reaches the device 
  3433. ** before the scanning of the DONE queue.
  3434. */
  3435. istat = INB (nc_istat);
  3436. if (istat & INTF) {
  3437. OUTB (nc_istat, (istat & SIGP) | INTF | np->istat_sem);
  3438. istat = INB (nc_istat); /* DUMMY READ */
  3439. if (DEBUG_FLAGS & DEBUG_TINY) printk ("F ");
  3440. (void)ncr_wakeup_done (np);
  3441. };
  3442. if (!(istat & (SIP|DIP)))
  3443. return;
  3444. #if 0 /* We should never get this one */
  3445. if (istat & CABRT)
  3446. OUTB (nc_istat, CABRT);
  3447. #endif
  3448. /*
  3449. ** Steinbach's Guideline for Systems Programming:
  3450. ** Never test for an error condition you don't know how to handle.
  3451. */
  3452. /*========================================================
  3453. ** PAR and MA interrupts may occur at the same time,
  3454. ** and we need to know of both in order to handle 
  3455. ** this situation properly. We try to unstack SCSI 
  3456. ** interrupts for that reason. BTW, I dislike a LOT 
  3457. ** such a loop inside the interrupt routine.
  3458. ** Even if DMA interrupt stacking is very unlikely to 
  3459. ** happen, we also try unstacking these ones, since 
  3460. ** this has no performance impact.
  3461. **=========================================================
  3462. */
  3463. sist = 0;
  3464. dstat = 0;
  3465. istatc = istat;
  3466. do {
  3467. if (istatc & SIP)
  3468. sist  |= INW (nc_sist);
  3469. if (istatc & DIP)
  3470. dstat |= INB (nc_dstat);
  3471. istatc = INB (nc_istat);
  3472. istat |= istatc;
  3473. } while (istatc & (SIP|DIP));
  3474. if (DEBUG_FLAGS & DEBUG_TINY)
  3475. printk ("<%d|%x:%x|%x:%x>",
  3476. (int)INB(nc_scr0),
  3477. dstat,sist,
  3478. (unsigned)INL(nc_dsp),
  3479. (unsigned)INL(nc_dbc));
  3480. /*
  3481. ** On paper, a memory barrier may be needed here.
  3482. ** And since we are paranoid ... :)
  3483. */
  3484. MEMORY_BARRIER();
  3485. /*========================================================
  3486. ** First, interrupts we want to service cleanly.
  3487. **
  3488. ** Phase mismatch (MA) is the most frequent interrupt 
  3489. ** for chip earlier than the 896 and so we have to service 
  3490. ** it as quickly as possible.
  3491. ** A SCSI parity error (PAR) may be combined with a phase 
  3492. ** mismatch condition (MA).
  3493. ** Programmed interrupts (SIR) are used to call the C code 
  3494. ** from SCRIPTS.
  3495. ** The single step interrupt (SSI) is not used in this 
  3496. ** driver.
  3497. **=========================================================
  3498. */
  3499. if (!(sist  & (STO|GEN|HTH|SGE|UDC|SBMC|RST)) &&
  3500.     !(dstat & (MDPE|BF|ABRT|IID))) {
  3501. if (sist & PAR) ncr_int_par (np, sist);
  3502. else if (sist & MA) ncr_int_ma (np);
  3503. else if (dstat & SIR) ncr_int_sir (np);
  3504. else if (dstat & SSI) OUTONB_STD ();
  3505. else goto unknown_int;
  3506. return;
  3507. };
  3508. /*========================================================
  3509. ** Now, interrupts that donnot happen in normal 
  3510. ** situations and that we may need to recover from.
  3511. **
  3512. ** On SCSI RESET (RST), we reset everything.
  3513. ** On SCSI BUS MODE CHANGE (SBMC), we complete all 
  3514. ** active CCBs with RESET status, prepare all devices 
  3515. ** for negotiating again and restart the SCRIPTS.
  3516. ** On STO and UDC, we complete the CCB with the corres- 
  3517. ** ponding status and restart the SCRIPTS.
  3518. **=========================================================
  3519. */
  3520. if (sist & RST) {
  3521. ncr_init (np, 1, bootverbose ? "scsi reset" : NULL, HS_RESET);
  3522. return;
  3523. };
  3524. OUTB (nc_ctest3, np->rv_ctest3 | CLF); /* clear dma fifo  */
  3525. OUTB (nc_stest3, TE|CSF); /* clear scsi fifo */
  3526. if (!(sist  & (GEN|HTH|SGE)) &&
  3527.     !(dstat & (MDPE|BF|ABRT|IID))) {
  3528. if (sist & SBMC) ncr_int_sbmc (np);
  3529. else if (sist & STO) ncr_int_sto (np);
  3530. else if (sist & UDC) ncr_int_udc (np);
  3531. else goto unknown_int;
  3532. return;
  3533. };
  3534. /*=========================================================
  3535. ** Now, interrupts we are not able to recover cleanly.
  3536. **
  3537. ** Do the register dump.
  3538. ** Log message for hard errors.
  3539. ** Reset everything.
  3540. **=========================================================
  3541. */
  3542. if (ktime_exp(np->regtime)) {
  3543. np->regtime = ktime_get(10*HZ);
  3544. for (i = 0; i<sizeof(np->regdump); i++)
  3545. ((char*)&np->regdump)[i] = INB_OFF(i);
  3546. np->regdump.nc_dstat = dstat;
  3547. np->regdump.nc_sist  = sist;
  3548. };
  3549. ncr_log_hard_error(np, sist, dstat);
  3550. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  3551. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
  3552. u_char ctest4_o, ctest4_m;
  3553. u_char shadow;
  3554. /* 
  3555.  * Get shadow register data 
  3556.  * Write 1 to ctest4
  3557.  */
  3558. ctest4_o = INB(nc_ctest4);
  3559. OUTB(nc_ctest4, ctest4_o | 0x10);
  3560. ctest4_m = INB(nc_ctest4);
  3561. shadow = INW_OFF(0x42);
  3562. OUTB(nc_ctest4, ctest4_o);
  3563. printk("%s: ctest4/sist original 0x%x/0x%X  mod: 0x%X/0x%xn", 
  3564. ncr_name(np), ctest4_o, sist, ctest4_m, shadow);
  3565. }
  3566. if ((sist & (GEN|HTH|SGE)) ||
  3567. (dstat & (MDPE|BF|ABRT|IID))) {
  3568. ncr_start_reset(np);
  3569. return;
  3570. };
  3571. unknown_int:
  3572. /*=========================================================
  3573. ** We just miss the cause of the interrupt. :(
  3574. ** Print a message. The timeout will do the real work.
  3575. **=========================================================
  3576. */
  3577. printk( "%s: unknown interrupt(s) ignored, "
  3578. "ISTAT=0x%x DSTAT=0x%x SIST=0x%xn",
  3579. ncr_name(np), istat, dstat, sist);
  3580. }
  3581. /*==========================================================
  3582. **
  3583. ** generic recovery from scsi interrupt
  3584. **
  3585. **==========================================================
  3586. **
  3587. ** The doc says that when the chip gets an SCSI interrupt,
  3588. ** it tries to stop in an orderly fashion, by completing 
  3589. ** an instruction fetch that had started or by flushing 
  3590. ** the DMA fifo for a write to memory that was executing.
  3591. ** Such a fashion is not enough to know if the instruction 
  3592. ** that was just before the current DSP value has been 
  3593. ** executed or not.
  3594. **
  3595. ** There are 3 small SCRIPTS sections that deal with the 
  3596. ** start queue and the done queue that may break any 
  3597. ** assomption from the C code if we are interrupted 
  3598. ** inside, so we reset if it happens. Btw, since these 
  3599. ** SCRIPTS sections are executed while the SCRIPTS hasn't 
  3600. ** started SCSI operations, it is very unlikely to happen.
  3601. **
  3602. ** All the driver data structures are supposed to be 
  3603. ** allocated from the same 4 GB memory window, so there 
  3604. ** is a 1 to 1 relationship between DSA and driver data 
  3605. ** structures. Since we are careful :) to invalidate the 
  3606. ** DSA when we complete a command or when the SCRIPTS 
  3607. ** pushes a DSA into a queue, we can trust it when it 
  3608. ** points to a CCB.
  3609. **
  3610. **----------------------------------------------------------
  3611. */
  3612. static void ncr_recover_scsi_int (ncb_p np, u_char hsts)
  3613. {
  3614. u_int32 dsp = INL (nc_dsp);
  3615. u_int32 dsa = INL (nc_dsa);
  3616. ccb_p cp = ncr_ccb_from_dsa(np, dsa);
  3617. /*
  3618. ** If we haven't been interrupted inside the SCRIPTS 
  3619. ** critical pathes, we can safely restart the SCRIPTS 
  3620. ** and trust the DSA value if it matches a CCB.
  3621. */
  3622. if ((!(dsp > NCB_SCRIPT_PHYS (np, getjob_begin) &&
  3623.        dsp < NCB_SCRIPT_PHYS (np, getjob_end) + 1)) &&
  3624.     (!(dsp > NCB_SCRIPT_PHYS (np, ungetjob) &&
  3625.        dsp < NCB_SCRIPT_PHYS (np, reselect) + 1)) &&
  3626.     (!(dsp > NCB_SCRIPTH_PHYS (np, sel_for_abort) &&
  3627.        dsp < NCB_SCRIPTH_PHYS (np, sel_for_abort_1) + 1)) &&
  3628.     (!(dsp > NCB_SCRIPT_PHYS (np, done) &&
  3629.        dsp < NCB_SCRIPT_PHYS (np, done_end) + 1))) {
  3630. if (cp) {
  3631. cp->host_status = hsts;
  3632. ncr_complete (np, cp);
  3633. }
  3634. OUTL (nc_dsa, DSA_INVALID);
  3635. OUTB (nc_ctest3, np->rv_ctest3 | CLF); /* clear dma fifo  */
  3636. OUTB (nc_stest3, TE|CSF); /* clear scsi fifo */
  3637. OUTL_DSP (NCB_SCRIPT_PHYS (np, start));
  3638. }
  3639. else
  3640. goto reset_all;
  3641. return;
  3642. reset_all:
  3643. ncr_start_reset(np);
  3644. }
  3645. /*==========================================================
  3646. **
  3647. ** ncr chip exception handler for selection timeout
  3648. **
  3649. **==========================================================
  3650. **
  3651. ** There seems to be a bug in the 53c810.
  3652. ** Although a STO-Interrupt is pending,
  3653. ** it continues executing script commands.
  3654. ** But it will fail and interrupt (IID) on
  3655. ** the next instruction where it's looking
  3656. ** for a valid phase.
  3657. **
  3658. **----------------------------------------------------------
  3659. */
  3660. void ncr_int_sto (ncb_p np)
  3661. {
  3662. u_int32 dsp = INL (nc_dsp);
  3663. if (DEBUG_FLAGS & DEBUG_TINY) printk ("T");
  3664. if (dsp == NCB_SCRIPT_PHYS (np, wf_sel_done) + 8 ||
  3665.     !(driver_setup.recovery & 1))
  3666. ncr_recover_scsi_int(np, HS_SEL_TIMEOUT);
  3667. else
  3668. ncr_start_reset(np);
  3669. }
  3670. /*==========================================================
  3671. **
  3672. ** ncr chip exception handler for unexpected disconnect
  3673. **
  3674. **==========================================================
  3675. **
  3676. **----------------------------------------------------------
  3677. */
  3678. void ncr_int_udc (ncb_p np)
  3679. {
  3680. u_int32 dsa = INL (nc_dsa);
  3681. ccb_p   cp  = ncr_ccb_from_dsa(np, dsa);
  3682. /*
  3683.  * Fix Up. Some disks respond to a PPR negotation with
  3684.  * a bus free instead of a message reject. 
  3685.  * Disable ppr negotiation if this is first time
  3686.  * tried ppr negotiation.
  3687.  */
  3688. if (cp) {
  3689. tcb_p tp = &np->target[cp->target];
  3690. if (tp->ppr_negotiation == 1)
  3691. tp->ppr_negotiation = 0;
  3692. }
  3693. printk ("%s: unexpected disconnectn", ncr_name(np));
  3694. ncr_recover_scsi_int(np, HS_UNEXPECTED);
  3695. }
  3696. /*==========================================================
  3697. **
  3698. ** ncr chip exception handler for SCSI bus mode change
  3699. **
  3700. **==========================================================
  3701. **
  3702. ** spi2-r12 11.2.3 says a transceiver mode change must 
  3703. ** generate a reset event and a device that detects a reset 
  3704. ** event shall initiate a hard reset. It says also that a
  3705. ** device that detects a mode change shall set data transfer 
  3706. ** mode to eight bit asynchronous, etc...
  3707. ** So, just resetting should be enough.
  3708. **  
  3709. **
  3710. **----------------------------------------------------------
  3711. */
  3712. static void ncr_int_sbmc (ncb_p np)
  3713. {
  3714. u_char scsi_mode = INB (nc_stest4) & SMODE;
  3715. printk("%s: SCSI bus mode change from %x to %x.n",
  3716. ncr_name(np), np->scsi_mode, scsi_mode);
  3717. np->scsi_mode = scsi_mode;
  3718. /*
  3719. ** Suspend command processing for 1 second and 
  3720. ** reinitialize all except the chip.
  3721. */
  3722. np->settle_time = ktime_get(1*HZ);
  3723. ncr_init (np, 0, bootverbose ? "scsi mode change" : NULL, HS_RESET);
  3724. }
  3725. /*==========================================================
  3726. **
  3727. ** ncr chip exception handler for SCSI parity error.
  3728. **
  3729. **==========================================================
  3730. **
  3731. ** When the chip detects a SCSI parity error and is 
  3732. ** currently executing a (CH)MOV instruction, it does 
  3733. ** not interrupt immediately, but tries to finish the 
  3734. ** transfer of the current scatter entry before 
  3735. ** interrupting. The following situations may occur:
  3736. **
  3737. ** - The complete scatter entry has been transferred 
  3738. **   without the device having changed phase.
  3739. **   The chip will then interrupt with the DSP pointing 
  3740. **   to the instruction that follows the MOV.
  3741. **
  3742. ** - A phase mismatch occurs before the MOV finished 
  3743. **   and phase errors are to be handled by the C code.
  3744. **   The chip will then interrupt with both PAR and MA 
  3745. **   conditions set.
  3746. **
  3747. ** - A phase mismatch occurs before the MOV finished and 
  3748. **   phase errors are to be handled by SCRIPTS (895A or 896).
  3749. **   The chip will load the DSP with the phase mismatch 
  3750. **   JUMP address and interrupt the host processor.
  3751. **
  3752. **----------------------------------------------------------
  3753. */
  3754. static void ncr_int_par (ncb_p np, u_short sist)
  3755. {
  3756. u_char hsts = INB (HS_PRT);
  3757. u_int32 dsp = INL (nc_dsp);
  3758. u_int32 dbc = INL (nc_dbc);
  3759. u_int32 dsa = INL (nc_dsa);
  3760. u_char sbcl = INB (nc_sbcl);
  3761. u_char cmd = dbc >> 24;
  3762. int phase = cmd & 7;
  3763. ccb_p cp = ncr_ccb_from_dsa(np, dsa);
  3764. printk("%s: SCSI parity error detected: SCR1=%d DBC=%x SBCL=%xn",
  3765. ncr_name(np), hsts, dbc, sbcl);
  3766. /*
  3767. ** Check that the chip is connected to the SCSI BUS.
  3768. */
  3769. if (!(INB (nc_scntl1) & ISCON)) {
  3770.      if (!(driver_setup.recovery & 1)) {
  3771. ncr_recover_scsi_int(np, HS_FAIL);
  3772. return;
  3773. }
  3774. goto reset_all;
  3775. }
  3776. /*
  3777. ** If the nexus is not clearly identified, reset the bus.
  3778. ** We will try to do better later.
  3779. */
  3780. if (!cp)
  3781. goto reset_all;
  3782. /*
  3783. ** Check instruction was a MOV, direction was INPUT and 
  3784. ** ATN is asserted.
  3785. */
  3786. if ((cmd & 0xc0) || !(phase & 1) || !(sbcl & 0x8))
  3787. goto reset_all;
  3788. /*
  3789. ** Keep track of the parity error.
  3790. */
  3791. OUTONB (HF_PRT, HF_EXT_ERR);
  3792. cp->xerr_status |= XE_PARITY_ERR;
  3793. /*
  3794. ** Prepare the message to send to the device.
  3795. */
  3796. np->msgout[0] = (phase == 7) ? M_PARITY : M_ID_ERROR;
  3797. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  3798. /*
  3799. ** Save error message. For integrity check use only.
  3800. */
  3801. if (np->check_integrity) 
  3802. np->check_integ_par = np->msgout[0];
  3803. #endif
  3804. /*
  3805. ** If the old phase was DATA IN or DT DATA IN phase, 
  3806. **  we have to deal with the 3 situations described above.
  3807. ** For other input phases (MSG IN and STATUS), the device 
  3808. ** must resend the whole thing that failed parity checking 
  3809. ** or signal error. So, jumping to dispatcher should be OK.
  3810. */
  3811. if ((phase == 1) || (phase == 5)) {
  3812. /* Phase mismatch handled by SCRIPTS */
  3813. if (dsp == NCB_SCRIPTH_PHYS (np, pm_handle))
  3814. OUTL_DSP (dsp);
  3815. /* Phase mismatch handled by the C code */
  3816. else if (sist & MA)
  3817. ncr_int_ma (np);
  3818. /* No phase mismatch occurred */
  3819. else {
  3820. OUTL (nc_temp, dsp);
  3821. OUTL_DSP (NCB_SCRIPT_PHYS (np, dispatch));
  3822. }
  3823. }
  3824. else 
  3825. OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
  3826. return;
  3827. reset_all:
  3828. ncr_start_reset(np);
  3829. return;
  3830. }
  3831. /*==========================================================
  3832. **
  3833. **
  3834. ** ncr chip exception handler for phase errors.
  3835. **
  3836. **
  3837. **==========================================================
  3838. **
  3839. ** We have to construct a new transfer descriptor,
  3840. ** to transfer the rest of the current block.
  3841. **
  3842. **----------------------------------------------------------
  3843. */
  3844. static void ncr_int_ma (ncb_p np)
  3845. {
  3846. u_int32 dbc;
  3847. u_int32 rest;
  3848. u_int32 dsp;
  3849. u_int32 dsa;
  3850. u_int32 nxtdsp;
  3851. u_int32 *vdsp;
  3852. u_int32 oadr, olen;
  3853. u_int32 *tblp;
  3854.         u_int32 newcmd;
  3855. u_int delta;
  3856. u_char cmd;
  3857. u_char hflags, hflags0;
  3858. struct pm_ctx *pm;
  3859. ccb_p cp;
  3860. dsp = INL (nc_dsp);
  3861. dbc = INL (nc_dbc);
  3862. dsa = INL (nc_dsa);
  3863. cmd = dbc >> 24;
  3864. rest = dbc & 0xffffff;
  3865. delta = 0;
  3866. /*
  3867. ** locate matching cp.
  3868. */
  3869. cp = ncr_ccb_from_dsa(np, dsa);
  3870. if (DEBUG_FLAGS & DEBUG_PHASE)
  3871. printk("CCB = %2x %2x %2x %2x %2x %2xn", 
  3872. cp->cmd->cmnd[0], cp->cmd->cmnd[1], cp->cmd->cmnd[2],
  3873. cp->cmd->cmnd[3], cp->cmd->cmnd[4], cp->cmd->cmnd[5]);
  3874. /*
  3875. ** Donnot take into account dma fifo and various buffers in 
  3876. ** INPUT phase since the chip flushes everything before 
  3877. ** raising the MA interrupt for interrupted INPUT phases.
  3878. ** For DATA IN phase, we will check for the SWIDE later.
  3879. */
  3880. if ((cmd & 7) != 1 && (cmd & 7) != 5) {
  3881. u_int32 dfifo;
  3882. u_char ss0, ss2;
  3883. /*
  3884. **  If C1010, DFBC contains number of bytes in DMA fifo.
  3885. **  else read DFIFO, CTEST[4-6] using 1 PCI bus ownership.
  3886. */
  3887. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  3888. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) 
  3889. delta = INL(nc_dfbc) & 0xffff;
  3890. else {
  3891. dfifo = INL(nc_dfifo);
  3892. /*
  3893. ** Calculate remaining bytes in DMA fifo.
  3894. ** C1010 - always large fifo, value in dfbc
  3895. ** Otherwise, (CTEST5 = dfifo >> 16)
  3896. */
  3897. if (dfifo & (DFS << 16))
  3898. delta = ((((dfifo >> 8) & 0x300) |
  3899.           (dfifo & 0xff)) - rest) & 0x3ff;
  3900. else
  3901. delta = ((dfifo & 0xff) - rest) & 0x7f;
  3902. /*
  3903. ** The data in the dma fifo has not been 
  3904. ** transferred to the target -> add the amount 
  3905. ** to the rest and clear the data.
  3906. ** Check the sstat2 register in case of wide
  3907. ** transfer.
  3908. */
  3909. }
  3910. rest += delta;
  3911. ss0  = INB (nc_sstat0);
  3912. if (ss0 & OLF) rest++;
  3913. if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) && 
  3914. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) && (ss0 & ORF)) 
  3915. rest++;
  3916. if (cp && (cp->phys.select.sel_scntl3 & EWS)) {
  3917. ss2 = INB (nc_sstat2);
  3918. if (ss2 & OLF1) rest++;
  3919. if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  3920. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) && (ss2 & ORF)) 
  3921. rest++;
  3922. };
  3923. /*
  3924. ** Clear fifos.
  3925. */
  3926. OUTB (nc_ctest3, np->rv_ctest3 | CLF); /* dma fifo  */
  3927. OUTB (nc_stest3, TE|CSF); /* scsi fifo */
  3928. }
  3929. /*
  3930. ** log the information
  3931. */
  3932. if (DEBUG_FLAGS & (DEBUG_TINY|DEBUG_PHASE))
  3933. printk ("P%x%x RL=%d D=%d ", cmd&7, INB(nc_sbcl)&7,
  3934. (unsigned) rest, (unsigned) delta);
  3935. /*
  3936. ** try to find the interrupted script command,
  3937. ** and the address at which to continue.
  3938. */
  3939. vdsp = 0;
  3940. nxtdsp = 0;
  3941. if (dsp >  np->p_script &&
  3942.  dsp <= np->p_script + sizeof(struct script)) {
  3943. vdsp = (u_int32 *)((char*)np->script0 + (dsp-np->p_script-8));
  3944. nxtdsp = dsp;
  3945. }
  3946. else if (dsp >  np->p_scripth &&
  3947.  dsp <= np->p_scripth + sizeof(struct scripth)) {
  3948. vdsp = (u_int32 *)((char*)np->scripth0 + (dsp-np->p_scripth-8));
  3949. nxtdsp = dsp;
  3950. }
  3951. /*
  3952. ** log the information
  3953. */
  3954. if (DEBUG_FLAGS & DEBUG_PHASE) {
  3955. printk ("nCP=%p DSP=%x NXT=%x VDSP=%p CMD=%x ",
  3956. cp, (unsigned)dsp, (unsigned)nxtdsp, vdsp, cmd);
  3957. };
  3958. if (!vdsp) {
  3959. printk ("%s: interrupted SCRIPT address not found.n", 
  3960. ncr_name (np));
  3961. goto reset_all;
  3962. }
  3963. if (!cp) {
  3964. printk ("%s: SCSI phase error fixup: CCB already dequeued.n", 
  3965. ncr_name (np));
  3966. goto reset_all;
  3967. }
  3968. /*
  3969. ** get old startaddress and old length.
  3970. */
  3971. oadr = scr_to_cpu(vdsp[1]);
  3972. if (cmd & 0x10) { /* Table indirect */
  3973. tblp = (u_int32 *) ((char*) &cp->phys + oadr);
  3974. olen = scr_to_cpu(tblp[0]);
  3975. oadr = scr_to_cpu(tblp[1]);
  3976. } else {
  3977. tblp = (u_int32 *) 0;
  3978. olen = scr_to_cpu(vdsp[0]) & 0xffffff;
  3979. };
  3980. if (DEBUG_FLAGS & DEBUG_PHASE) {
  3981. printk ("OCMD=%xnTBLP=%p OLEN=%x OADR=%xn",
  3982. (unsigned) (scr_to_cpu(vdsp[0]) >> 24),
  3983. tblp,
  3984. (unsigned) olen,
  3985. (unsigned) oadr);
  3986. };
  3987. /*
  3988. ** check cmd against assumed interrupted script command.
  3989. ** If dt data phase, the MOVE instruction hasn't bit 4 of 
  3990. ** the phase.
  3991. */
  3992. if (((cmd & 2) ? cmd : (cmd & ~4)) != (scr_to_cpu(vdsp[0]) >> 24)) {
  3993. PRINT_ADDR(cp->cmd);
  3994. printk ("internal error: cmd=%02x != %02x=(vdsp[0] >> 24)n",
  3995. (unsigned)cmd, (unsigned)scr_to_cpu(vdsp[0]) >> 24);
  3996. goto reset_all;
  3997. };
  3998. /*
  3999. ** if old phase not dataphase, leave here.
  4000. ** C/D line is low if data.
  4001. */
  4002. if (cmd & 0x02) {
  4003. PRINT_ADDR(cp->cmd);
  4004. printk ("phase change %x-%x %d@%08x resid=%d.n",
  4005. cmd&7, INB(nc_sbcl)&7, (unsigned)olen,
  4006. (unsigned)oadr, (unsigned)rest);
  4007. goto unexpected_phase;
  4008. };
  4009. /*
  4010. ** Choose the correct PM save area.
  4011. **
  4012. ** Look at the PM_SAVE SCRIPT if you want to understand 
  4013. ** this stuff. The equivalent code is implemented in 
  4014. ** SCRIPTS for the 895A and 896 that are able to handle 
  4015. ** PM from the SCRIPTS processor.
  4016. */
  4017. hflags0 = INB (HF_PRT);
  4018. hflags = hflags0;
  4019. if (hflags & (HF_IN_PM0 | HF_IN_PM1 | HF_DP_SAVED)) {
  4020. if (hflags & HF_IN_PM0)
  4021. nxtdsp = scr_to_cpu(cp->phys.pm0.ret);
  4022. else if (hflags & HF_IN_PM1)
  4023. nxtdsp = scr_to_cpu(cp->phys.pm1.ret);
  4024. if (hflags & HF_DP_SAVED)
  4025. hflags ^= HF_ACT_PM;
  4026. }
  4027. if (!(hflags & HF_ACT_PM)) {
  4028. pm = &cp->phys.pm0;
  4029. newcmd = NCB_SCRIPT_PHYS(np, pm0_data);
  4030. }
  4031. else {
  4032. pm = &cp->phys.pm1;
  4033. newcmd = NCB_SCRIPT_PHYS(np, pm1_data);
  4034. }
  4035. hflags &= ~(HF_IN_PM0 | HF_IN_PM1 | HF_DP_SAVED);
  4036. if (hflags != hflags0)
  4037. OUTB (HF_PRT, hflags);
  4038. /*
  4039. ** fillin the phase mismatch context
  4040. */
  4041. pm->sg.addr = cpu_to_scr(oadr + olen - rest);
  4042. pm->sg.size = cpu_to_scr(rest);
  4043. pm->ret     = cpu_to_scr(nxtdsp);
  4044. /*
  4045. ** If we have a SWIDE,
  4046. ** - prepare the address to write the SWIDE from SCRIPTS,
  4047. ** - compute the SCRIPTS address to restart from,
  4048. ** - move current data pointer context by one byte.
  4049. */
  4050. nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
  4051. if ( ((cmd & 7) == 1  || (cmd & 7) == 5)  
  4052. && cp && (cp->phys.select.sel_scntl3 & EWS) &&
  4053.     (INB (nc_scntl2) & WSR)) {
  4054. u32 tmp;
  4055. #ifdef  SYM_DEBUG_PM_WITH_WSR
  4056. PRINT_ADDR(cp);
  4057. printk ("MA interrupt with WSR set - "
  4058. "pm->sg.addr=%x - pm->sg.size=%dn",
  4059. pm->sg.addr, pm->sg.size);
  4060. #endif
  4061. /*
  4062.  *  Set up the table indirect for the MOVE
  4063.  *  of the residual byte and adjust the data
  4064.  *  pointer context.
  4065.  */
  4066. tmp = scr_to_cpu(pm->sg.addr);
  4067. cp->phys.wresid.addr = cpu_to_scr(tmp);
  4068. pm->sg.addr = cpu_to_scr(tmp + 1);
  4069.   tmp = scr_to_cpu(pm->sg.size);
  4070. cp->phys.wresid.size = cpu_to_scr((tmp&0xff000000) | 1);
  4071. pm->sg.size = cpu_to_scr(tmp - 1);
  4072. /*
  4073.  *  If only the residual byte is to be moved,
  4074.  *  no PM context is needed.
  4075.  */
  4076. if ((tmp&0xffffff) == 1)
  4077.                         newcmd = pm->ret;
  4078. /*
  4079.  *  Prepare the address of SCRIPTS that will
  4080.  *  move the residual byte to memory.
  4081.  */
  4082. nxtdsp = NCB_SCRIPTH_PHYS (np, wsr_ma_helper);
  4083.         }
  4084. if (DEBUG_FLAGS & DEBUG_PHASE) {
  4085. PRINT_ADDR(cp->cmd);
  4086. printk ("PM %x %x %x / %x %x %x.n",
  4087. hflags0, hflags, newcmd,
  4088. (unsigned)scr_to_cpu(pm->sg.addr),
  4089. (unsigned)scr_to_cpu(pm->sg.size),
  4090. (unsigned)scr_to_cpu(pm->ret));
  4091. }
  4092. /*
  4093. ** Restart the SCRIPTS processor.
  4094. */
  4095. OUTL (nc_temp, newcmd);
  4096. OUTL_DSP (nxtdsp);
  4097. return;
  4098. /*
  4099. ** Unexpected phase changes that occurs when the current phase 
  4100. ** is not a DATA IN or DATA OUT phase are due to error conditions.
  4101. ** Such event may only happen when the SCRIPTS is using a 
  4102. ** multibyte SCSI MOVE.
  4103. **
  4104. ** Phase change Some possible cause
  4105. **
  4106. ** COMMAND  --> MSG IN SCSI parity error detected by target.
  4107. ** COMMAND  --> STATUS Bad command or refused by target.
  4108. ** MSG OUT  --> MSG IN     Message rejected by target.
  4109. ** MSG OUT  --> COMMAND    Bogus target that discards extended
  4110. ** negotiation messages.
  4111. **
  4112. ** The code below does not care of the new phase and so 
  4113. ** trusts the target. Why to annoy it ?
  4114. ** If the interrupted phase is COMMAND phase, we restart at
  4115. ** dispatcher.
  4116. ** If a target does not get all the messages after selection, 
  4117. ** the code assumes blindly that the target discards extended 
  4118. ** messages and clears the negotiation status.
  4119. ** If the target does not want all our response to negotiation,
  4120. ** we force a SIR_NEGO_PROTO interrupt (it is a hack that avoids 
  4121. ** bloat for such a should_not_happen situation).
  4122. ** In all other situation, we reset the BUS.
  4123. ** Are these assumptions reasonnable ? (Wait and see ...)
  4124. */
  4125. unexpected_phase:
  4126. dsp -= 8;
  4127. nxtdsp = 0;
  4128. switch (cmd & 7) {
  4129. case 2: /* COMMAND phase */
  4130. nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
  4131. break;
  4132. #if 0
  4133. case 3: /* STATUS  phase */
  4134. nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
  4135. break;
  4136. #endif
  4137. case 6: /* MSG OUT phase */
  4138. /*
  4139. ** If the device may want to use untagged when we want 
  4140. ** tagged, we prepare an IDENTIFY without disc. granted, 
  4141. ** since we will not be able to handle reselect.
  4142. ** Otherwise, we just don't care.
  4143. */
  4144. if (dsp == NCB_SCRIPT_PHYS (np, send_ident)) {
  4145. if (cp->tag != NO_TAG && olen - rest <= 3) {
  4146. cp->host_status = HS_BUSY;
  4147. np->msgout[0] = M_IDENTIFY | cp->lun;
  4148. nxtdsp = NCB_SCRIPTH_PHYS (np, ident_break_atn);
  4149. }
  4150. else
  4151. nxtdsp = NCB_SCRIPTH_PHYS (np, ident_break);
  4152. }
  4153. else if (dsp == NCB_SCRIPTH_PHYS (np, send_wdtr) ||
  4154.  dsp == NCB_SCRIPTH_PHYS (np, send_sdtr) ||
  4155.  dsp == NCB_SCRIPTH_PHYS (np, send_ppr)) {
  4156. nxtdsp = NCB_SCRIPTH_PHYS (np, nego_bad_phase);
  4157. }
  4158. break;
  4159. #if 0
  4160. case 7: /* MSG IN  phase */
  4161. nxtdsp = NCB_SCRIPT_PHYS (np, clrack);
  4162. break;
  4163. #endif
  4164. }
  4165. if (nxtdsp) {
  4166. OUTL_DSP (nxtdsp);
  4167. return;
  4168. }
  4169. reset_all:
  4170. ncr_start_reset(np);
  4171. }
  4172. /*==========================================================
  4173. **
  4174. ** ncr chip handler for QUEUE FULL and CHECK CONDITION
  4175. **
  4176. **==========================================================
  4177. **
  4178. ** On QUEUE FULL status, we set the actual tagged command 
  4179. ** queue depth to the number of disconnected CCBs that is 
  4180. ** hopefully a good value to avoid further QUEUE FULL.
  4181. **
  4182. ** On CHECK CONDITION or COMMAND TERMINATED, we use the  
  4183. ** CCB of the failed command for performing a REQUEST 
  4184. ** SENSE SCSI command.
  4185. **
  4186. ** We do not want to change the order commands will be 
  4187. ** actually queued to the device after we received a 
  4188. ** QUEUE FULL status. We also want to properly deal with 
  4189. ** contingent allegiance condition. For these reasons, 
  4190. ** we remove from the start queue all commands for this 
  4191. ** LUN that haven't been yet queued to the device and 
  4192. ** put them back in the correponding LUN queue, then  
  4193. ** requeue the CCB that failed in front of the LUN queue.
  4194. ** I just hope this not to be performed too often. :)
  4195. **
  4196. ** If we are using IMMEDIATE ARBITRATION, we clear the 
  4197. ** IARB hint for every commands we encounter in order not 
  4198. ** to be stuck with a won arbitration and no job to queue 
  4199. ** to a device.
  4200. **----------------------------------------------------------
  4201. */
  4202. static void ncr_sir_to_redo(ncb_p np, int num, ccb_p cp)
  4203. {
  4204. Scsi_Cmnd *cmd = cp->cmd;
  4205. tcb_p tp = &np->target[cp->target];
  4206. lcb_p lp = ncr_lp(np, tp, cp->lun);
  4207. ccb_p cp2;
  4208. int busyccbs = 1;
  4209. u_int32 startp;
  4210. u_char s_status = INB (SS_PRT);
  4211. int msglen;
  4212. int i, j;
  4213. /*
  4214. ** If the LCB is not yet available, then only 
  4215. ** 1 IO is accepted, so we should have it.
  4216. */
  4217. if (!lp)
  4218. goto next;
  4219. /*
  4220. ** Remove all CCBs queued to the chip for that LUN and put 
  4221. ** them back in the LUN CCB wait queue.
  4222. */
  4223. busyccbs = lp->queuedccbs;
  4224. i = (INL (nc_scratcha) - np->p_squeue) / 4;
  4225. j = i;
  4226. while (i != np->squeueput) {
  4227. cp2 = ncr_ccb_from_dsa(np, scr_to_cpu(np->squeue[i]));
  4228. assert(cp2);
  4229. #ifdef SCSI_NCR_IARB_SUPPORT
  4230. /* IARB hints may not be relevant any more. Forget them. */
  4231. cp2->host_flags &= ~HF_HINT_IARB;
  4232. #endif
  4233. if (cp2 && cp2->target == cp->target && cp2->lun == cp->lun) {
  4234. xpt_remque(&cp2->link_ccbq);
  4235. xpt_insque_head(&cp2->link_ccbq, &lp->wait_ccbq);
  4236. --lp->queuedccbs;
  4237. cp2->queued = 0;
  4238. }
  4239. else {
  4240. if (i != j)
  4241. np->squeue[j] = np->squeue[i];
  4242. if ((j += 2) >= MAX_START*2) j = 0;
  4243. }
  4244. if ((i += 2) >= MAX_START*2) i = 0;
  4245. }
  4246. if (i != j) /* Copy back the idle task if needed */
  4247. np->squeue[j] = np->squeue[i];
  4248. np->squeueput = j; /* Update our current start queue pointer */
  4249. /*
  4250. ** Requeue the interrupted CCB in front of the 
  4251. ** LUN CCB wait queue to preserve ordering.
  4252. */
  4253. xpt_remque(&cp->link_ccbq);
  4254. xpt_insque_head(&cp->link_ccbq, &lp->wait_ccbq);
  4255. --lp->queuedccbs;
  4256. cp->queued = 0;
  4257. next:
  4258. #ifdef SCSI_NCR_IARB_SUPPORT
  4259. /* IARB hint may not be relevant any more. Forget it. */
  4260. cp->host_flags &= ~HF_HINT_IARB;
  4261. if (np->last_cp)
  4262. np->last_cp = 0;
  4263. #endif
  4264. /*
  4265. ** Now we can restart the SCRIPTS processor safely.
  4266. */
  4267. OUTL_DSP (NCB_SCRIPT_PHYS (np, start));
  4268. switch(s_status) {
  4269. default:
  4270. case S_BUSY:
  4271. ncr_complete(np, cp);
  4272. break;
  4273. case S_QUEUE_FULL:
  4274. if (!lp || !lp->queuedccbs) {
  4275. ncr_complete(np, cp);
  4276. break;
  4277. }
  4278. if (bootverbose >= 1) {
  4279. PRINT_ADDR(cmd);
  4280. printk ("QUEUE FULL! %d busy, %d disconnected CCBsn",
  4281. busyccbs, lp->queuedccbs);
  4282. }
  4283. /*
  4284. ** Decrease number of tags to the number of 
  4285. ** disconnected commands.
  4286. */
  4287. if (lp->queuedccbs < lp->numtags) {
  4288. lp->numtags = lp->queuedccbs;
  4289. lp->num_good = 0;
  4290. ncr_setup_tags (np, cp->target, cp->lun);
  4291. }
  4292. /*
  4293. ** Repair the offending CCB.
  4294. */
  4295. cp->phys.header.savep = cp->startp;
  4296. cp->phys.header.lastp = cp->lastp0;
  4297. cp->host_status  = HS_BUSY;
  4298. cp->scsi_status  = S_ILLEGAL;
  4299. cp->xerr_status = 0;
  4300. cp->extra_bytes = 0;
  4301. cp->host_flags &= (HF_PM_TO_C|HF_DATA_IN);
  4302. break;
  4303. case S_TERMINATED:
  4304. case S_CHECK_COND:
  4305. /*
  4306. ** If we were requesting sense, give up.
  4307. */