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

嵌入式Linux

开发平台:

Unix_Linux

  1. if (cp->host_flags & HF_AUTO_SENSE) {
  2. ncr_complete(np, cp);
  3. break;
  4. }
  5. /*
  6. ** Save SCSI status and extended error.
  7. ** Compute the data residual now.
  8. */
  9. cp->sv_scsi_status = cp->scsi_status;
  10. cp->sv_xerr_status = cp->xerr_status;
  11. cp->resid = ncr_compute_residual(np, cp);
  12. /*
  13. ** Device returned CHECK CONDITION status.
  14. ** Prepare all needed data strutures for getting 
  15. ** sense data.
  16. */
  17. /*
  18. ** identify message
  19. */
  20. cp->scsi_smsg2[0] = M_IDENTIFY | cp->lun;
  21. msglen = 1;
  22. /*
  23. ** If we are currently using anything different from 
  24. ** async. 8 bit data transfers with that target,
  25. ** start a negotiation, since the device may want 
  26. ** to report us a UNIT ATTENTION condition due to 
  27. ** a cause we currently ignore, and we donnot want 
  28. ** to be stuck with WIDE and/or SYNC data transfer.
  29. **
  30. ** cp->nego_status is filled by ncr_prepare_nego().
  31. **
  32. ** Do NOT negotiate if performing integrity check
  33. ** or if integrity check has completed, all check
  34. ** conditions will have been cleared.
  35. */
  36. #ifdef SCSI_NCR_INTEGRITY_CHECKING
  37. if (DEBUG_FLAGS & DEBUG_IC) {
  38. printk("%s: ncr_sir_to_redo: ic_done %2X, in_progress %2Xn",
  39. ncr_name(np), tp->ic_done, cp->cmd->ic_in_progress);
  40. }
  41. /*
  42. ** If parity error during integrity check,
  43. ** set the target width to narrow. Otherwise,
  44. ** do not negotiate on a request sense.
  45. */
  46. if ( np->check_integ_par && np->check_integrity 
  47. && cp->cmd->ic_in_progress ) { 
  48. cp->nego_status = 0;
  49. msglen +=
  50.     ncr_ic_nego (np, cp, cmd ,&cp->scsi_smsg2[msglen]);
  51. }
  52. if (!np->check_integrity || 
  53.     (np->check_integrity && 
  54. (!cp->cmd->ic_in_progress && !tp->ic_done)) ) { 
  55.     ncr_negotiate(np, tp);
  56.     cp->nego_status = 0;
  57.     {
  58. u_char sync_offset;
  59. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  60. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
  61. sync_offset = tp->sval & 0x3f;
  62. else
  63. sync_offset = tp->sval & 0x1f;
  64.         if ((tp->wval & EWS) || sync_offset)
  65.   msglen +=
  66.     ncr_prepare_nego (np, cp, &cp->scsi_smsg2[msglen]);
  67.     }
  68. }
  69. #else
  70. ncr_negotiate(np, tp);
  71. cp->nego_status = 0;
  72. if ((tp->wval & EWS) || (tp->sval & 0x1f))
  73. msglen +=
  74.     ncr_prepare_nego (np, cp, &cp->scsi_smsg2[msglen]);
  75. #endif /* SCSI_NCR_INTEGRITY_CHECKING */
  76. /*
  77. ** Message table indirect structure.
  78. */
  79. cp->phys.smsg.addr = cpu_to_scr(CCB_PHYS (cp, scsi_smsg2));
  80. cp->phys.smsg.size = cpu_to_scr(msglen);
  81. /*
  82. ** sense command
  83. */
  84. cp->phys.cmd.addr = cpu_to_scr(CCB_PHYS (cp, sensecmd));
  85. cp->phys.cmd.size = cpu_to_scr(6);
  86. /*
  87. ** patch requested size into sense command
  88. */
  89. cp->sensecmd[0] = 0x03;
  90. cp->sensecmd[1] = cp->lun << 5;
  91. cp->sensecmd[4] = sizeof(cp->sense_buf);
  92. /*
  93. ** sense data
  94. */
  95. bzero(cp->sense_buf, sizeof(cp->sense_buf));
  96. cp->phys.sense.addr = cpu_to_scr(CCB_PHYS(cp,sense_buf[0]));
  97. cp->phys.sense.size = cpu_to_scr(sizeof(cp->sense_buf));
  98. /*
  99. ** requeue the command.
  100. */
  101. startp = NCB_SCRIPTH_PHYS (np, sdata_in);
  102. cp->phys.header.savep = cpu_to_scr(startp);
  103. cp->phys.header.goalp = cpu_to_scr(startp + 16);
  104. cp->phys.header.lastp = cpu_to_scr(startp);
  105. cp->phys.header.wgoalp = cpu_to_scr(startp + 16);
  106. cp->phys.header.wlastp = cpu_to_scr(startp);
  107. cp->host_status = cp->nego_status ? HS_NEGOTIATE : HS_BUSY;
  108. cp->scsi_status = S_ILLEGAL;
  109. cp->host_flags = (HF_AUTO_SENSE|HF_DATA_IN);
  110. cp->phys.header.go.start =
  111. cpu_to_scr(NCB_SCRIPT_PHYS (np, select));
  112. /*
  113. ** If lp not yet allocated, requeue the command.
  114. */
  115. if (!lp)
  116. ncr_put_start_queue(np, cp);
  117. break;
  118. }
  119. /*
  120. ** requeue awaiting scsi commands for this lun.
  121. */
  122. if (lp)
  123. ncr_start_next_ccb(np, lp, 1);
  124. return;
  125. }
  126. /*----------------------------------------------------------
  127. **
  128. ** After a device has accepted some management message 
  129. ** as BUS DEVICE RESET, ABORT TASK, etc ..., or when 
  130. ** a device signals a UNIT ATTENTION condition, some 
  131. ** tasks are thrown away by the device. We are required 
  132. ** to reflect that on our tasks list since the device 
  133. ** will never complete these tasks.
  134. **
  135. ** This function completes all disconnected CCBs for a 
  136. ** given target that matches the following criteria:
  137. ** - lun=-1  means any logical UNIT otherwise a given one.
  138. ** - task=-1 means any task, otherwise a given one.
  139. **----------------------------------------------------------
  140. */
  141. static int ncr_clear_tasks(ncb_p np, u_char hsts, 
  142.    int target, int lun, int task)
  143. {
  144. int i = 0;
  145. ccb_p cp;
  146. for (cp = np->ccbc; cp; cp = cp->link_ccb) {
  147. if (cp->host_status != HS_DISCONNECT)
  148. continue;
  149. if (cp->target != target)
  150. continue;
  151. if (lun != -1 && cp->lun != lun)
  152. continue;
  153. if (task != -1 && cp->tag != NO_TAG && cp->scsi_smsg[2] != task)
  154. continue;
  155. cp->host_status = hsts;
  156. cp->scsi_status = S_ILLEGAL;
  157. ncr_complete(np, cp);
  158. ++i;
  159. }
  160. return i;
  161. }
  162. /*==========================================================
  163. **
  164. ** ncr chip handler for TASKS recovery.
  165. **
  166. **==========================================================
  167. **
  168. ** We cannot safely abort a command, while the SCRIPTS 
  169. ** processor is running, since we just would be in race 
  170. ** with it.
  171. **
  172. ** As long as we have tasks to abort, we keep the SEM 
  173. ** bit set in the ISTAT. When this bit is set, the 
  174. ** SCRIPTS processor interrupts (SIR_SCRIPT_STOPPED) 
  175. ** each time it enters the scheduler.
  176. **
  177. ** If we have to reset a target, clear tasks of a unit,
  178. ** or to perform the abort of a disconnected job, we 
  179. ** restart the SCRIPTS for selecting the target. Once 
  180. ** selected, the SCRIPTS interrupts (SIR_TARGET_SELECTED).
  181. ** If it loses arbitration, the SCRIPTS will interrupt again 
  182. ** the next time it will enter its scheduler, and so on ...
  183. **
  184. ** On SIR_TARGET_SELECTED, we scan for the more 
  185. ** appropriate thing to do:
  186. **
  187. ** - If nothing, we just sent a M_ABORT message to the 
  188. **   target to get rid of the useless SCSI bus ownership.
  189. **   According to the specs, no tasks shall be affected.
  190. ** - If the target is to be reset, we send it a M_RESET 
  191. **   message.
  192. ** - If a logical UNIT is to be cleared , we send the 
  193. **   IDENTIFY(lun) + M_ABORT.
  194. ** - If an untagged task is to be aborted, we send the 
  195. **   IDENTIFY(lun) + M_ABORT.
  196. ** - If a tagged task is to be aborted, we send the 
  197. **   IDENTIFY(lun) + task attributes + M_ABORT_TAG.
  198. **
  199. ** Once our 'kiss of death' :) message has been accepted 
  200. ** by the target, the SCRIPTS interrupts again 
  201. ** (SIR_ABORT_SENT). On this interrupt, we complete 
  202. ** all the CCBs that should have been aborted by the 
  203. ** target according to our message.
  204. **
  205. **----------------------------------------------------------
  206. */
  207. static void ncr_sir_task_recovery(ncb_p np, int num)
  208. {
  209. ccb_p cp;
  210. tcb_p tp;
  211. int target=-1, lun=-1, task;
  212. int i, k;
  213. u_char *p;
  214. switch(num) {
  215. /*
  216. ** The SCRIPTS processor stopped before starting
  217. ** the next command in order to allow us to perform 
  218. ** some task recovery.
  219. */
  220. case SIR_SCRIPT_STOPPED:
  221. /*
  222. ** Do we have any target to reset or unit to clear ?
  223. */
  224. for (i = 0 ; i < MAX_TARGET ; i++) {
  225. tp = &np->target[i];
  226. if (tp->to_reset || (tp->l0p && tp->l0p->to_clear)) {
  227. target = i;
  228. break;
  229. }
  230. if (!tp->lmp)
  231. continue;
  232. for (k = 1 ; k < MAX_LUN ; k++) {
  233. if (tp->lmp[k] && tp->lmp[k]->to_clear) {
  234. target = i;
  235. break;
  236. }
  237. }
  238. if (target != -1)
  239. break;
  240. }
  241. /*
  242. ** If not, look at the CCB list for any 
  243. ** disconnected CCB to be aborted.
  244. */
  245. if (target == -1) {
  246. for (cp = np->ccbc; cp; cp = cp->link_ccb) {
  247. if (cp->host_status != HS_DISCONNECT)
  248. continue;
  249. if (cp->to_abort) {
  250. target = cp->target;
  251. break;
  252. }
  253. }
  254. }
  255. /*
  256. ** If some target is to be selected, 
  257. ** prepare and start the selection.
  258. */
  259. if (target != -1) {
  260. tp = &np->target[target];
  261. np->abrt_sel.sel_id = target;
  262. np->abrt_sel.sel_scntl3 = tp->wval;
  263. np->abrt_sel.sel_sxfer  = tp->sval;
  264. np->abrt_sel.sel_scntl4 = tp->uval;
  265. OUTL(nc_dsa, np->p_ncb);
  266. OUTL_DSP (NCB_SCRIPTH_PHYS (np, sel_for_abort));
  267. return;
  268. }
  269. /*
  270. ** Nothing is to be selected, so we donnot need 
  271. ** to synchronize with the SCRIPTS anymore.
  272. ** Remove the SEM flag from the ISTAT.
  273. */
  274. np->istat_sem = 0;
  275. OUTB (nc_istat, SIGP);
  276. /*
  277. ** Now look at CCBs to abort that haven't started yet.
  278. ** Remove all those CCBs from the start queue and 
  279. ** complete them with appropriate status.
  280. ** Btw, the SCRIPTS processor is still stopped, so 
  281. ** we are not in race.
  282. */
  283. for (cp = np->ccbc; cp; cp = cp->link_ccb) {
  284. if (cp->host_status != HS_BUSY &&
  285.     cp->host_status != HS_NEGOTIATE)
  286. continue;
  287. if (!cp->to_abort)
  288. continue;
  289. #ifdef SCSI_NCR_IARB_SUPPORT
  290. /*
  291. **    If we are using IMMEDIATE ARBITRATION, we donnot 
  292. **    want to cancel the last queued CCB, since the 
  293. **    SCRIPTS may have anticipated the selection.
  294. */
  295. if (cp == np->last_cp) {
  296. cp->to_abort = 0;
  297. continue;
  298. }
  299. #endif
  300. /*
  301. ** Compute index of next position in the start 
  302. ** queue the SCRIPTS will schedule.
  303. */
  304. i = (INL (nc_scratcha) - np->p_squeue) / 4;
  305. /*
  306. ** Remove the job from the start queue.
  307. */
  308. k = -1;
  309. while (1) {
  310. if (i == np->squeueput)
  311. break;
  312. if (k == -1) { /* Not found yet */
  313. if (cp == ncr_ccb_from_dsa(np,
  314.      scr_to_cpu(np->squeue[i])))
  315. k = i; /* Found */
  316. }
  317. else {
  318. /*
  319. **    Once found, we have to move 
  320. **    back all jobs by 1 position.
  321. */
  322. np->squeue[k] = np->squeue[i];
  323. k += 2;
  324. if (k >= MAX_START*2)
  325. k = 0;
  326. }
  327. i += 2;
  328. if (i >= MAX_START*2)
  329. i = 0;
  330. }
  331. /*
  332. ** If job removed, repair the start queue.
  333. */
  334. if (k != -1) {
  335. np->squeue[k] = np->squeue[i]; /* Idle task */
  336. np->squeueput = k; /* Start queue pointer */
  337. }
  338. cp->host_status = HS_ABORTED;
  339. cp->scsi_status = S_ILLEGAL;
  340. ncr_complete(np, cp);
  341. }
  342. break;
  343. /*
  344. ** The SCRIPTS processor has selected a target 
  345. ** we may have some manual recovery to perform for.
  346. */
  347. case SIR_TARGET_SELECTED:
  348. target = (INB (nc_sdid) & 0xf);
  349. tp = &np->target[target];
  350. np->abrt_tbl.addr = cpu_to_scr(vtobus(np->abrt_msg));
  351. /*
  352. ** If the target is to be reset, prepare a 
  353. ** M_RESET message and clear the to_reset flag 
  354. ** since we donnot expect this operation to fail.
  355. */
  356. if (tp->to_reset) {
  357. np->abrt_msg[0] = M_RESET;
  358. np->abrt_tbl.size = 1;
  359. tp->to_reset = 0;
  360. break;
  361. }
  362. /*
  363. ** Otherwise, look for some logical unit to be cleared.
  364. */
  365. if (tp->l0p && tp->l0p->to_clear)
  366. lun = 0;
  367. else if (tp->lmp) {
  368. for (k = 1 ; k < MAX_LUN ; k++) {
  369. if (tp->lmp[k] && tp->lmp[k]->to_clear) {
  370. lun = k;
  371. break;
  372. }
  373. }
  374. }
  375. /*
  376. ** If a logical unit is to be cleared, prepare 
  377. ** an IDENTIFY(lun) + ABORT MESSAGE.
  378. */
  379. if (lun != -1) {
  380. lcb_p lp = ncr_lp(np, tp, lun);
  381. lp->to_clear = 0; /* We donnot expect to fail here */
  382. np->abrt_msg[0] = M_IDENTIFY | lun;
  383. np->abrt_msg[1] = M_ABORT;
  384. np->abrt_tbl.size = 2;
  385. break;
  386. }
  387. /*
  388. ** Otherwise, look for some disconnected job to 
  389. ** abort for this target.
  390. */
  391. for (cp = np->ccbc; cp; cp = cp->link_ccb) {
  392. if (cp->host_status != HS_DISCONNECT)
  393. continue;
  394. if (cp->target != target)
  395. continue;
  396. if (cp->to_abort)
  397. break;
  398. }
  399. /*
  400. ** If we have none, probably since the device has 
  401. ** completed the command before we won abitration,
  402. ** send a M_ABORT message without IDENTIFY.
  403. ** According to the specs, the device must just 
  404. ** disconnect the BUS and not abort any task.
  405. */
  406. if (!cp) {
  407. np->abrt_msg[0] = M_ABORT;
  408. np->abrt_tbl.size = 1;
  409. break;
  410. }
  411. /*
  412. ** We have some task to abort.
  413. ** Set the IDENTIFY(lun)
  414. */
  415. np->abrt_msg[0] = M_IDENTIFY | cp->lun;
  416. /*
  417. ** If we want to abort an untagged command, we 
  418. ** will send a IDENTIFY + M_ABORT.
  419. ** Otherwise (tagged command), we will send 
  420. ** a IDENTITFY + task attributes + ABORT TAG.
  421. */
  422. if (cp->tag == NO_TAG) {
  423. np->abrt_msg[1] = M_ABORT;
  424. np->abrt_tbl.size = 2;
  425. }
  426. else {
  427. np->abrt_msg[1] = cp->scsi_smsg[1];
  428. np->abrt_msg[2] = cp->scsi_smsg[2];
  429. np->abrt_msg[3] = M_ABORT_TAG;
  430. np->abrt_tbl.size = 4;
  431. }
  432. cp->to_abort = 0; /* We donnot expect to fail here */
  433. break;
  434. /*
  435. ** The target has accepted our message and switched 
  436. ** to BUS FREE phase as we expected.
  437. */
  438. case SIR_ABORT_SENT:
  439. target = (INB (nc_sdid) & 0xf);
  440. tp = &np->target[target];
  441. /*
  442. ** If we didn't abort anything, leave here.
  443. */
  444. if (np->abrt_msg[0] == M_ABORT)
  445. break;
  446. /*
  447. ** If we sent a M_RESET, then a hardware reset has 
  448. ** been performed by the target.
  449. ** - Reset everything to async 8 bit
  450. ** - Tell ourself to negotiate next time :-)
  451. ** - Prepare to clear all disconnected CCBs for 
  452. **   this target from our task list (lun=task=-1)
  453. */
  454. lun = -1;
  455. task = -1;
  456. if (np->abrt_msg[0] == M_RESET) {
  457. tp->sval = 0;
  458. tp->wval = np->rv_scntl3;
  459. tp->uval = np->rv_scntl4; 
  460. ncr_set_sync_wide_status(np, target);
  461. ncr_negotiate(np, tp);
  462. }
  463. /*
  464. ** Otherwise, check for the LUN and TASK(s) 
  465. ** concerned by the cancelation.
  466. ** If it is not ABORT_TAG then it is CLEAR_QUEUE 
  467. ** or an ABORT message :-)
  468. */
  469. else {
  470. lun = np->abrt_msg[0] & 0x3f;
  471. if (np->abrt_msg[1] == M_ABORT_TAG)
  472. task = np->abrt_msg[2];
  473. }
  474. /*
  475. ** Complete all the CCBs the device should have 
  476. ** aborted due to our 'kiss of death' message.
  477. */
  478. (void) ncr_clear_tasks(np, HS_ABORTED, target, lun, task);
  479. break;
  480. /*
  481. ** We have performed a auto-sense that succeeded.
  482. ** If the device reports a UNIT ATTENTION condition 
  483. ** due to a RESET condition, we must complete all 
  484. ** disconnect CCBs for this unit since the device 
  485. ** shall have thrown them away.
  486. ** Since I haven't time to guess what the specs are 
  487. ** expecting for other UNIT ATTENTION conditions, I 
  488. ** decided to only care about RESET conditions. :)
  489. */
  490. case SIR_AUTO_SENSE_DONE:
  491. cp = ncr_ccb_from_dsa(np, INL (nc_dsa));
  492. if (!cp)
  493. break;
  494. memcpy(cp->cmd->sense_buffer, cp->sense_buf,
  495.        sizeof(cp->cmd->sense_buffer));
  496. p  = &cp->cmd->sense_buffer[0];
  497. if (p[0] != 0x70 || p[2] != 0x6 || p[12] != 0x29)
  498. break;
  499. #if 0
  500. (void) ncr_clear_tasks(np, HS_RESET, cp->target, cp->lun, -1);
  501. #endif
  502. break;
  503. }
  504. /*
  505. ** Print to the log the message we intend to send.
  506. */
  507. if (num == SIR_TARGET_SELECTED) {
  508. PRINT_TARGET(np, target);
  509. ncr_printl_hex("control msgout:", np->abrt_msg,
  510.       np->abrt_tbl.size);
  511. np->abrt_tbl.size = cpu_to_scr(np->abrt_tbl.size);
  512. }
  513. /*
  514. ** Let the SCRIPTS processor continue.
  515. */
  516. OUTONB_STD ();
  517. }
  518. /*==========================================================
  519. **
  520. ** G閞ard's alchemy:) that deals with with the data 
  521. ** pointer for both MDP and the residual calculation.
  522. **
  523. **==========================================================
  524. **
  525. ** I didn't want to bloat the code by more than 200 
  526. ** lignes for the handling of both MDP and the residual.
  527. ** This has been achieved by using a data pointer 
  528. ** representation consisting in an index in the data 
  529. ** array (dp_sg) and a negative offset (dp_ofs) that 
  530. ** have the following meaning:
  531. **
  532. ** - dp_sg = MAX_SCATTER
  533. **   we are at the end of the data script.
  534. ** - dp_sg < MAX_SCATTER
  535. **   dp_sg points to the next entry of the scatter array 
  536. **   we want to transfer.
  537. ** - dp_ofs < 0
  538. **   dp_ofs represents the residual of bytes of the 
  539. **   previous entry scatter entry we will send first.
  540. ** - dp_ofs = 0
  541. **   no residual to send first.
  542. **
  543. ** The function ncr_evaluate_dp() accepts an arbitray 
  544. ** offset (basically from the MDP message) and returns 
  545. ** the corresponding values of dp_sg and dp_ofs.
  546. **
  547. **----------------------------------------------------------
  548. */
  549. static int ncr_evaluate_dp(ncb_p np, ccb_p cp, u_int32 scr, int *ofs)
  550. {
  551. u_int32 dp_scr;
  552. int dp_ofs, dp_sg, dp_sgmin;
  553. int tmp;
  554. struct pm_ctx *pm;
  555. /*
  556. ** Compute the resulted data pointer in term of a script 
  557. ** address within some DATA script and a signed byte offset.
  558. */
  559. dp_scr = scr;
  560. dp_ofs = *ofs;
  561. if (dp_scr == NCB_SCRIPT_PHYS (np, pm0_data))
  562. pm = &cp->phys.pm0;
  563. else if (dp_scr == NCB_SCRIPT_PHYS (np, pm1_data))
  564. pm = &cp->phys.pm1;
  565. else
  566. pm = 0;
  567. if (pm) {
  568. dp_scr  = scr_to_cpu(pm->ret);
  569. dp_ofs -= scr_to_cpu(pm->sg.size);
  570. }
  571. /*
  572. ** Deduce the index of the sg entry.
  573. ** Keep track of the index of the first valid entry.
  574. ** If result is dp_sg = MAX_SCATTER, then we are at the 
  575. ** end of the data and vice-versa.
  576. */
  577. tmp = scr_to_cpu(cp->phys.header.goalp);
  578. dp_sg = MAX_SCATTER;
  579. if (dp_scr != tmp)
  580. dp_sg -= (tmp - 8 - (int)dp_scr) / (SCR_SG_SIZE*4);
  581. dp_sgmin = MAX_SCATTER - cp->segments;
  582. /*
  583. ** Move to the sg entry the data pointer belongs to.
  584. **
  585. ** If we are inside the data area, we expect result to be:
  586. **
  587. ** Either,
  588. **     dp_ofs = 0 and dp_sg is the index of the sg entry
  589. **     the data pointer belongs to (or the end of the data)
  590. ** Or,
  591. **     dp_ofs < 0 and dp_sg is the index of the sg entry 
  592. **     the data pointer belongs to + 1.
  593. */
  594. if (dp_ofs < 0) {
  595. int n;
  596. while (dp_sg > dp_sgmin) {
  597. --dp_sg;
  598. tmp = scr_to_cpu(cp->phys.data[dp_sg].size);
  599. n = dp_ofs + (tmp & 0xffffff);
  600. if (n > 0) {
  601. ++dp_sg;
  602. break;
  603. }
  604. dp_ofs = n;
  605. }
  606. }
  607. else if (dp_ofs > 0) {
  608. while (dp_sg < MAX_SCATTER) {
  609. tmp = scr_to_cpu(cp->phys.data[dp_sg].size);
  610. dp_ofs -= (tmp & 0xffffff);
  611. ++dp_sg;
  612. if (dp_ofs <= 0)
  613. break;
  614. }
  615. }
  616. /*
  617. ** Make sure the data pointer is inside the data area.
  618. ** If not, return some error.
  619. */
  620. if (dp_sg < dp_sgmin || (dp_sg == dp_sgmin && dp_ofs < 0))
  621. goto out_err;
  622. else if (dp_sg > MAX_SCATTER || (dp_sg == MAX_SCATTER && dp_ofs > 0))
  623. goto out_err;
  624. /*
  625. ** Save the extreme pointer if needed.
  626. */
  627. if (dp_sg > cp->ext_sg ||
  628.             (dp_sg == cp->ext_sg && dp_ofs > cp->ext_ofs)) {
  629. cp->ext_sg  = dp_sg;
  630. cp->ext_ofs = dp_ofs;
  631. }
  632. /*
  633. ** Return data.
  634. */
  635. *ofs = dp_ofs;
  636. return dp_sg;
  637. out_err:
  638. return -1;
  639. }
  640. /*==========================================================
  641. **
  642. ** ncr chip handler for MODIFY DATA POINTER MESSAGE
  643. **
  644. **==========================================================
  645. **
  646. ** We also call this function on IGNORE WIDE RESIDUE 
  647. ** messages that do not match a SWIDE full condition.
  648. ** Btw, we assume in that situation that such a message 
  649. ** is equivalent to a MODIFY DATA POINTER (offset=-1).
  650. **
  651. **----------------------------------------------------------
  652. */
  653. static void ncr_modify_dp(ncb_p np, tcb_p tp, ccb_p cp, int ofs)
  654. {
  655. int dp_ofs = ofs;
  656. u_int32 dp_scr = INL (nc_temp);
  657. u_int32 dp_ret;
  658. u_int32 tmp;
  659. u_char hflags;
  660. int dp_sg;
  661. struct pm_ctx *pm;
  662. /*
  663. ** Not supported for auto_sense;
  664. */
  665. if (cp->host_flags & HF_AUTO_SENSE)
  666. goto out_reject;
  667. /*
  668. ** Apply our alchemy:) (see comments in ncr_evaluate_dp()), 
  669. ** to the resulted data pointer.
  670. */
  671. dp_sg = ncr_evaluate_dp(np, cp, dp_scr, &dp_ofs);
  672. if (dp_sg < 0)
  673. goto out_reject;
  674. /*
  675. ** And our alchemy:) allows to easily calculate the data 
  676. ** script address we want to return for the next data phase.
  677. */
  678. dp_ret = cpu_to_scr(cp->phys.header.goalp);
  679. dp_ret = dp_ret - 8 - (MAX_SCATTER - dp_sg) * (SCR_SG_SIZE*4);
  680. /*
  681. ** If offset / scatter entry is zero we donnot need 
  682. ** a context for the new current data pointer.
  683. */
  684. if (dp_ofs == 0) {
  685. dp_scr = dp_ret;
  686. goto out_ok;
  687. }
  688. /*
  689. ** Get a context for the new current data pointer.
  690. */
  691. hflags = INB (HF_PRT);
  692. if (hflags & HF_DP_SAVED)
  693. hflags ^= HF_ACT_PM;
  694. if (!(hflags & HF_ACT_PM)) {
  695. pm  = &cp->phys.pm0;
  696. dp_scr = NCB_SCRIPT_PHYS (np, pm0_data);
  697. }
  698. else {
  699. pm = &cp->phys.pm1;
  700. dp_scr = NCB_SCRIPT_PHYS (np, pm1_data);
  701. }
  702. hflags &= ~(HF_DP_SAVED);
  703. OUTB (HF_PRT, hflags);
  704. /*
  705. ** Set up the new current data pointer.
  706. ** ofs < 0 there, and for the next data phase, we 
  707. ** want to transfer part of the data of the sg entry 
  708. ** corresponding to index dp_sg-1 prior to returning 
  709. ** to the main data script.
  710. */
  711. pm->ret = cpu_to_scr(dp_ret);
  712. tmp  = scr_to_cpu(cp->phys.data[dp_sg-1].addr);
  713. tmp += scr_to_cpu(cp->phys.data[dp_sg-1].size) + dp_ofs;
  714. pm->sg.addr = cpu_to_scr(tmp);
  715. pm->sg.size = cpu_to_scr(-dp_ofs);
  716. out_ok:
  717. OUTL (nc_temp, dp_scr);
  718. OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
  719. return;
  720. out_reject:
  721. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
  722. }
  723. /*==========================================================
  724. **
  725. ** ncr chip calculation of the data residual.
  726. **
  727. **==========================================================
  728. **
  729. ** As I used to say, the requirement of data residual 
  730. ** in SCSI is broken, useless and cannot be achieved 
  731. ** without huge complexity.
  732. ** But most OSes and even the official CAM require it.
  733. ** When stupidity happens to be so widely spread inside 
  734. ** a community, it gets hard to convince.
  735. **
  736. ** Anyway, I don't care, since I am not going to use 
  737. ** any software that considers this data residual as 
  738. ** a relevant information. :)
  739. **
  740. **----------------------------------------------------------
  741. */
  742. static int ncr_compute_residual(ncb_p np, ccb_p cp)
  743. {
  744. int dp_sg, dp_sgmin, tmp;
  745. int resid=0;
  746. int dp_ofs = 0;
  747. /*
  748.  * Check for some data lost or just thrown away.
  749.  * We are not required to be quite accurate in this
  750.  * situation. Btw, if we are odd for output and the
  751.  * device claims some more data, it may well happen
  752.  * than our residual be zero. :-)
  753.  */
  754. if (cp->xerr_status & (XE_EXTRA_DATA|XE_SODL_UNRUN|XE_SWIDE_OVRUN)) {
  755. if (cp->xerr_status & XE_EXTRA_DATA)
  756. resid -= cp->extra_bytes;
  757. if (cp->xerr_status & XE_SODL_UNRUN)
  758. ++resid;
  759. if (cp->xerr_status & XE_SWIDE_OVRUN)
  760. --resid;
  761. }
  762. /*
  763. ** If SCRIPTS reaches its goal point, then 
  764. ** there is no additionnal residual.
  765. */
  766. if (cp->phys.header.lastp == cp->phys.header.goalp)
  767. return resid;
  768. /*
  769. ** If the last data pointer is data_io (direction 
  770. ** unknown), then no data transfer should have 
  771. ** taken place.
  772. */
  773. if (cp->phys.header.lastp == NCB_SCRIPTH_PHYS (np, data_io))
  774. return cp->data_len;
  775. /*
  776. ** If no data transfer occurs, or if the data
  777. ** pointer is weird, return full residual.
  778. */
  779. if (cp->startp == cp->phys.header.lastp ||
  780.     ncr_evaluate_dp(np, cp, scr_to_cpu(cp->phys.header.lastp),
  781.     &dp_ofs) < 0) {
  782. return cp->data_len;
  783. }
  784. /*
  785. ** We are now full comfortable in the computation 
  786. ** of the data residual (2's complement).
  787. */
  788. dp_sgmin = MAX_SCATTER - cp->segments;
  789. resid = -cp->ext_ofs;
  790. for (dp_sg = cp->ext_sg; dp_sg < MAX_SCATTER; ++dp_sg) {
  791. tmp = scr_to_cpu(cp->phys.data[dp_sg].size);
  792. resid += (tmp & 0xffffff);
  793. }
  794. /*
  795. ** Hopefully, the result is not too wrong.
  796. */
  797. return resid;
  798. }
  799. /*==========================================================
  800. **
  801. ** Print out the containt of a SCSI message.
  802. **
  803. **==========================================================
  804. */
  805. static int ncr_show_msg (u_char * msg)
  806. {
  807. u_char i;
  808. printk ("%x",*msg);
  809. if (*msg==M_EXTENDED) {
  810. for (i=1;i<8;i++) {
  811. if (i-1>msg[1]) break;
  812. printk ("-%x",msg[i]);
  813. };
  814. return (i+1);
  815. } else if ((*msg & 0xf0) == 0x20) {
  816. printk ("-%x",msg[1]);
  817. return (2);
  818. };
  819. return (1);
  820. }
  821. static void ncr_print_msg (ccb_p cp, char *label, u_char *msg)
  822. {
  823. if (cp)
  824. PRINT_ADDR(cp->cmd);
  825. if (label)
  826. printk ("%s: ", label);
  827. (void) ncr_show_msg (msg);
  828. printk (".n");
  829. }
  830. /*===================================================================
  831. **
  832. ** Negotiation for WIDE and SYNCHRONOUS DATA TRANSFER.
  833. **
  834. **===================================================================
  835. **
  836. ** Was Sie schon immer ueber transfermode negotiation wissen wollten ...
  837. **
  838. ** We try to negotiate sync and wide transfer only after
  839. ** a successful inquire command. We look at byte 7 of the
  840. ** inquire data to determine the capabilities of the target.
  841. **
  842. ** When we try to negotiate, we append the negotiation message
  843. ** to the identify and (maybe) simple tag message.
  844. ** The host status field is set to HS_NEGOTIATE to mark this
  845. ** situation.
  846. **
  847. ** If the target doesn't answer this message immediately
  848. ** (as required by the standard), the SIR_NEGO_FAILED interrupt
  849. ** will be raised eventually.
  850. ** The handler removes the HS_NEGOTIATE status, and sets the
  851. ** negotiated value to the default (async / nowide).
  852. **
  853. ** If we receive a matching answer immediately, we check it
  854. ** for validity, and set the values.
  855. **
  856. ** If we receive a Reject message immediately, we assume the
  857. ** negotiation has failed, and fall back to standard values.
  858. **
  859. ** If we receive a negotiation message while not in HS_NEGOTIATE
  860. ** state, it's a target initiated negotiation. We prepare a
  861. ** (hopefully) valid answer, set our parameters, and send back 
  862. ** this answer to the target.
  863. **
  864. ** If the target doesn't fetch the answer (no message out phase),
  865. ** we assume the negotiation has failed, and fall back to default
  866. ** settings (SIR_NEGO_PROTO interrupt).
  867. **
  868. ** When we set the values, we adjust them in all ccbs belonging 
  869. ** to this target, in the controller's register, and in the "phys"
  870. ** field of the controller's struct ncb.
  871. **
  872. **---------------------------------------------------------------------
  873. */
  874. /*==========================================================
  875. **
  876. ** ncr chip handler for SYNCHRONOUS DATA TRANSFER 
  877. ** REQUEST (SDTR) message.
  878. **
  879. **==========================================================
  880. **
  881. ** Read comments above.
  882. **
  883. **----------------------------------------------------------
  884. */
  885. static void ncr_sync_nego(ncb_p np, tcb_p tp, ccb_p cp)
  886. {
  887. u_char scntl3, scntl4;
  888. u_char chg, ofs, per, fak;
  889. /*
  890. ** Synchronous request message received.
  891. */
  892. if (DEBUG_FLAGS & DEBUG_NEGO) {
  893. ncr_print_msg(cp, "sync msg in", np->msgin);
  894. };
  895. /*
  896. ** get requested values.
  897. */
  898. chg = 0;
  899. per = np->msgin[3];
  900. ofs = np->msgin[4];
  901. if (ofs==0) per=255;
  902. /*
  903. **      if target sends SDTR message,
  904. **       it CAN transfer synch.
  905. */
  906. if (ofs)
  907. tp->inq_byte7 |= INQ7_SYNC;
  908. /*
  909. ** check values against driver limits.
  910. */
  911. if (per < np->minsync)
  912. {chg = 1; per = np->minsync;}
  913. if (per < tp->minsync)
  914. {chg = 1; per = tp->minsync;}
  915. if (ofs > np->maxoffs_st)
  916. {chg = 1; ofs = np->maxoffs_st;}
  917. if (ofs > tp->maxoffs)
  918. {chg = 1; ofs = tp->maxoffs;}
  919. /*
  920. ** Check against controller limits.
  921. */
  922. fak = 7;
  923. scntl3 = 0;
  924. scntl4  = 0;
  925. if (ofs != 0) {
  926. ncr_getsync(np, per, &fak, &scntl3);
  927. if (fak > 7) {
  928. chg = 1;
  929. ofs = 0;
  930. }
  931. }
  932. if (ofs == 0) {
  933. fak = 7;
  934. per = 0;
  935. scntl3 = 0;
  936. scntl4  = 0;
  937. tp->minsync = 0;
  938. }
  939. if (DEBUG_FLAGS & DEBUG_NEGO) {
  940. PRINT_ADDR(cp->cmd);
  941. printk ("sync: per=%d scntl3=0x%x scntl4=0x%x ofs=%d fak=%d chg=%d.n",
  942. per, scntl3, scntl4, ofs, fak, chg);
  943. }
  944. if (INB (HS_PRT) == HS_NEGOTIATE) {
  945. OUTB (HS_PRT, HS_BUSY);
  946. switch (cp->nego_status) {
  947. case NS_SYNC:
  948. /*
  949. **      This was an answer message
  950. */
  951. if (chg) {
  952. /*
  953. ** Answer wasn't acceptable.
  954. */
  955. ncr_setsync (np, cp, 0, 0xe0, 0);
  956. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
  957. } else {
  958. /*
  959. ** Answer is ok.
  960. */
  961. if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  962. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
  963.   ncr_setsync (np, cp, scntl3, (fak<<5)|ofs,0);
  964. else
  965.   ncr_setsync (np, cp, scntl3, ofs, scntl4);
  966. OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
  967. };
  968. return;
  969. case NS_WIDE:
  970. ncr_setwide (np, cp, 0, 0);
  971. break;
  972. };
  973. };
  974. /*
  975. ** It was a request. Set value and
  976. **      prepare an answer message
  977. */
  978. if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  979. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
  980. ncr_setsync (np, cp, scntl3, (fak<<5)|ofs,0);
  981. else
  982. ncr_setsync (np, cp, scntl3, ofs, scntl4);
  983. np->msgout[0] = M_EXTENDED;
  984. np->msgout[1] = 3;
  985. np->msgout[2] = M_X_SYNC_REQ;
  986. np->msgout[3] = per;
  987. np->msgout[4] = ofs;
  988. cp->nego_status = NS_SYNC;
  989. if (DEBUG_FLAGS & DEBUG_NEGO) {
  990. ncr_print_msg(cp, "sync msgout", np->msgout);
  991. }
  992. np->msgin [0] = M_NOOP;
  993. if (!ofs)
  994. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
  995. else
  996. OUTL_DSP (NCB_SCRIPTH_PHYS (np, sdtr_resp));
  997. }
  998. /*==========================================================
  999. **
  1000. ** ncr chip handler for WIDE DATA TRANSFER REQUEST 
  1001. ** (WDTR) message.
  1002. **
  1003. **==========================================================
  1004. **
  1005. ** Read comments above.
  1006. **
  1007. **----------------------------------------------------------
  1008. */
  1009. static void ncr_wide_nego(ncb_p np, tcb_p tp, ccb_p cp)
  1010. {
  1011. u_char chg, wide;
  1012. /*
  1013. ** Wide request message received.
  1014. */
  1015. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1016. ncr_print_msg(cp, "wide msgin", np->msgin);
  1017. };
  1018. /*
  1019. ** get requested values.
  1020. */
  1021. chg  = 0;
  1022. wide = np->msgin[3];
  1023. /*
  1024. **      if target sends WDTR message,
  1025. **       it CAN transfer wide.
  1026. */
  1027. if (wide)
  1028. tp->inq_byte7 |= INQ7_WIDE16;
  1029. /*
  1030. ** check values against driver limits.
  1031. */
  1032. if (wide > tp->usrwide)
  1033. {chg = 1; wide = tp->usrwide;}
  1034. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1035. PRINT_ADDR(cp->cmd);
  1036. printk ("wide: wide=%d chg=%d.n", wide, chg);
  1037. }
  1038. if (INB (HS_PRT) == HS_NEGOTIATE) {
  1039. OUTB (HS_PRT, HS_BUSY);
  1040. switch (cp->nego_status) {
  1041. case NS_WIDE:
  1042. /*
  1043. **      This was an answer message
  1044. */
  1045. if (chg) {
  1046. /*
  1047. ** Answer wasn't acceptable.
  1048. */
  1049. ncr_setwide (np, cp, 0, 1);
  1050. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
  1051. } else {
  1052. /*
  1053. ** Answer is ok.
  1054. */
  1055. ncr_setwide (np, cp, wide, 1);
  1056. OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
  1057. };
  1058. return;
  1059. case NS_SYNC:
  1060. ncr_setsync (np, cp, 0, 0xe0, 0);
  1061. break;
  1062. };
  1063. };
  1064. /*
  1065. ** It was a request, set value and
  1066. **      prepare an answer message
  1067. */
  1068. ncr_setwide (np, cp, wide, 1);
  1069. np->msgout[0] = M_EXTENDED;
  1070. np->msgout[1] = 2;
  1071. np->msgout[2] = M_X_WIDE_REQ;
  1072. np->msgout[3] = wide;
  1073. np->msgin [0] = M_NOOP;
  1074. cp->nego_status = NS_WIDE;
  1075. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1076. ncr_print_msg(cp, "wide msgout", np->msgout);
  1077. }
  1078. OUTL_DSP (NCB_SCRIPTH_PHYS (np, wdtr_resp));
  1079. }
  1080. /*==========================================================
  1081. **
  1082. ** ncr chip handler for PARALLEL PROTOCOL REQUEST 
  1083. ** (PPR) message.
  1084. **
  1085. **==========================================================
  1086. **
  1087. ** Read comments above.
  1088. **
  1089. **----------------------------------------------------------
  1090. */
  1091. static void ncr_ppr_nego(ncb_p np, tcb_p tp, ccb_p cp)
  1092. {
  1093. u_char scntl3, scntl4;
  1094. u_char chg, ofs, per, fak, wth, dt;
  1095. /*
  1096. ** PPR message received.
  1097. */
  1098. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1099. ncr_print_msg(cp, "ppr msg in", np->msgin);
  1100. };
  1101. /*
  1102. ** get requested values.
  1103. */
  1104. chg = 0;
  1105. per = np->msgin[3];
  1106. ofs = np->msgin[5];
  1107. wth = np->msgin[6];
  1108. dt  = np->msgin[7];
  1109. if (ofs==0) per=255;
  1110. /*
  1111. **      if target sends sync (wide),
  1112. **       it CAN transfer synch (wide).
  1113. */
  1114. if (ofs)
  1115. tp->inq_byte7 |= INQ7_SYNC;
  1116. if (wth)
  1117. tp->inq_byte7 |= INQ7_WIDE16;
  1118. /*
  1119. ** check values against driver limits.
  1120. */
  1121. if (wth > tp->usrwide)
  1122. {chg = 1; wth = tp->usrwide;}
  1123. if (per < np->minsync)
  1124. {chg = 1; per = np->minsync;}
  1125. if (per < tp->minsync)
  1126. {chg = 1; per = tp->minsync;}
  1127. if (ofs > tp->maxoffs)
  1128. {chg = 1; ofs = tp->maxoffs;}
  1129. /*
  1130. ** Check against controller limits.
  1131. */
  1132. fak = 7;
  1133. scntl3 = 0;
  1134. scntl4  = 0;
  1135. if (ofs != 0) {
  1136. scntl4 = dt ? 0x80 : 0;
  1137. ncr_getsync(np, per, &fak, &scntl3);
  1138. if (fak > 7) {
  1139. chg = 1;
  1140. ofs = 0;
  1141. }
  1142. }
  1143. if (ofs == 0) {
  1144. fak = 7;
  1145. per = 0;
  1146. scntl3 = 0;
  1147. scntl4  = 0;
  1148. tp->minsync = 0;
  1149. }
  1150. /*
  1151. ** If target responds with Ultra 3 speed
  1152. ** but narrow or not DT, reject.
  1153. ** If target responds with DT request 
  1154. ** but not Ultra3 speeds, reject message,
  1155. ** reset min sync for target to 0x0A and
  1156. ** set flags to re-negotiate.
  1157. */
  1158. if   ((per == 0x09) && ofs && (!wth || !dt))  
  1159. chg = 1;
  1160. else if (( (per > 0x09) && dt) ) 
  1161. chg = 2;
  1162. /* Not acceptable since beyond controller limit */
  1163. if (!dt && ofs > np->maxoffs_st)
  1164. {chg = 2; ofs = np->maxoffs_st;}
  1165. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1166. PRINT_ADDR(cp->cmd);
  1167. printk ("ppr: wth=%d per=%d scntl3=0x%x scntl4=0x%x ofs=%d fak=%d chg=%d.n",
  1168. wth, per, scntl3, scntl4, ofs, fak, chg);
  1169. }
  1170. if (INB (HS_PRT) == HS_NEGOTIATE) {
  1171. OUTB (HS_PRT, HS_BUSY);
  1172. switch (cp->nego_status) {
  1173. case NS_PPR:
  1174. /*
  1175. **      This was an answer message
  1176. */
  1177. if (chg) {
  1178. /*
  1179. ** Answer wasn't acceptable.
  1180. */
  1181. if (chg == 2) {
  1182. /* Send message reject and reset flags for
  1183. ** host to re-negotiate with min period 0x0A.
  1184. */
  1185. tp->minsync = 0x0A;
  1186. tp->period = 0;
  1187. tp->widedone = 0;
  1188. }
  1189. ncr_setsyncwide (np, cp, 0, 0xe0, 0, 0);
  1190. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
  1191. } else {
  1192. /*
  1193. ** Answer is ok.
  1194. */
  1195. if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  1196. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
  1197.   ncr_setsyncwide (np, cp, scntl3, (fak<<5)|ofs,0, wth);
  1198. else
  1199.   ncr_setsyncwide (np, cp, scntl3, ofs, scntl4, wth);
  1200. OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
  1201. };
  1202. return;
  1203. case NS_SYNC:
  1204. ncr_setsync (np, cp, 0, 0xe0, 0);
  1205. break;
  1206. case NS_WIDE:
  1207. ncr_setwide (np, cp, 0, 0);
  1208. break;
  1209. };
  1210. };
  1211. /*
  1212. ** It was a request. Set value and
  1213. **      prepare an answer message
  1214. **
  1215. ** If narrow or not DT and requesting Ultra3
  1216. ** slow the bus down and force ST. If not
  1217. ** requesting Ultra3, force ST.
  1218. ** Max offset is 31=0x1f if ST mode.
  1219. */
  1220. if  ((per == 0x09) && ofs && (!wth || !dt)) {
  1221. per = 0x0A;
  1222. dt = 0;
  1223. }
  1224. else if ( (per > 0x09) && dt) {
  1225. dt = 0;
  1226. }
  1227. if (!dt && ofs > np->maxoffs_st)
  1228. ofs = np->maxoffs_st;
  1229. if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
  1230. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
  1231. ncr_setsyncwide (np, cp, scntl3, (fak<<5)|ofs,0, wth);
  1232. else
  1233. ncr_setsyncwide (np, cp, scntl3, ofs, scntl4, wth);
  1234. np->msgout[0] = M_EXTENDED;
  1235. np->msgout[1] = 6;
  1236. np->msgout[2] = M_X_PPR_REQ;
  1237. np->msgout[3] = per;
  1238. np->msgout[4] = 0;
  1239. np->msgout[5] = ofs;
  1240. np->msgout[6] = wth;
  1241. np->msgout[7] = dt;
  1242. cp->nego_status = NS_PPR;
  1243. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1244. ncr_print_msg(cp, "ppr msgout", np->msgout);
  1245. }
  1246. np->msgin [0] = M_NOOP;
  1247. if (!ofs)
  1248. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
  1249. else
  1250. OUTL_DSP (NCB_SCRIPTH_PHYS (np, ppr_resp));
  1251. }
  1252. /*
  1253. ** Reset SYNC or WIDE to default settings.
  1254. ** Called when a negotiation does not succeed either 
  1255. ** on rejection or on protocol error.
  1256. */
  1257. static void ncr_nego_default(ncb_p np, tcb_p tp, ccb_p cp)
  1258. {
  1259. /*
  1260. ** any error in negotiation:
  1261. ** fall back to default mode.
  1262. */
  1263. switch (cp->nego_status) {
  1264. case NS_SYNC:
  1265. ncr_setsync (np, cp, 0, 0xe0, 0);
  1266. break;
  1267. case NS_WIDE:
  1268. ncr_setwide (np, cp, 0, 0);
  1269. break;
  1270. case NS_PPR:
  1271. /*
  1272.  * ppr_negotiation is set to 1 on the first ppr nego command.
  1273.  * If ppr is successful, it is reset to 2.
  1274.  * If unsuccessful it is reset to 0.
  1275.  */
  1276. if (DEBUG_FLAGS & DEBUG_NEGO) {
  1277. tcb_p tp=&np->target[cp->target];
  1278. u_char factor, offset, width;
  1279. ncr_get_xfer_info ( np, tp, &factor, &offset, &width);
  1280. printk("Current factor %d offset %d width %dn",
  1281. factor, offset, width);
  1282. }
  1283. if (tp->ppr_negotiation == 2)
  1284. ncr_setsyncwide (np, cp, 0, 0xe0, 0, 0);
  1285. else if (tp->ppr_negotiation == 1) {
  1286. /* First ppr command has received a  M REJECT.
  1287.  * Do not change the existing wide/sync parameter
  1288.  * values (asyn/narrow if this as the first nego;
  1289.  * may be different if target initiates nego.).
  1290.  */
  1291. tp->ppr_negotiation = 0;
  1292. }
  1293. else
  1294. {
  1295. tp->ppr_negotiation = 0;
  1296. ncr_setwide (np, cp, 0, 0);
  1297. }
  1298. break;
  1299. };
  1300. np->msgin [0] = M_NOOP;
  1301. np->msgout[0] = M_NOOP;
  1302. cp->nego_status = 0;
  1303. }
  1304. /*==========================================================
  1305. **
  1306. ** ncr chip handler for MESSAGE REJECT received for 
  1307. ** a WIDE or SYNCHRONOUS negotiation.
  1308. **
  1309. ** clear the PPR negotiation flag, all future nego.
  1310. ** will be SDTR and WDTR
  1311. **
  1312. **==========================================================
  1313. **
  1314. ** Read comments above.
  1315. **
  1316. **----------------------------------------------------------
  1317. */
  1318. static void ncr_nego_rejected(ncb_p np, tcb_p tp, ccb_p cp)
  1319. {
  1320. ncr_nego_default(np, tp, cp);
  1321. OUTB (HS_PRT, HS_BUSY);
  1322. }
  1323. /*==========================================================
  1324. **
  1325. **
  1326. **      ncr chip exception handler for programmed interrupts.
  1327. **
  1328. **
  1329. **==========================================================
  1330. */
  1331. void ncr_int_sir (ncb_p np)
  1332. {
  1333. u_char num = INB (nc_dsps);
  1334. u_long dsa = INL (nc_dsa);
  1335. ccb_p cp = ncr_ccb_from_dsa(np, dsa);
  1336. u_char target = INB (nc_sdid) & 0x0f;
  1337. tcb_p tp = &np->target[target];
  1338. int tmp;
  1339. if (DEBUG_FLAGS & DEBUG_TINY) printk ("I#%d", num);
  1340. switch (num) {
  1341. /*
  1342. ** See comments in the SCRIPTS code.
  1343. */
  1344. #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
  1345. case SIR_DUMMY_INTERRUPT:
  1346. goto out;
  1347. #endif
  1348. /*
  1349. ** The C code is currently trying to recover from something.
  1350. ** Typically, user want to abort some command.
  1351. */
  1352. case SIR_SCRIPT_STOPPED:
  1353. case SIR_TARGET_SELECTED:
  1354. case SIR_ABORT_SENT:
  1355. case SIR_AUTO_SENSE_DONE:
  1356. ncr_sir_task_recovery(np, num);
  1357. return;
  1358. /*
  1359. ** The device didn't go to MSG OUT phase after having 
  1360. ** been selected with ATN. We donnot want to handle 
  1361. ** that.
  1362. */
  1363. case SIR_SEL_ATN_NO_MSG_OUT:
  1364. printk ("%s:%d: No MSG OUT phase after selection with ATN.n",
  1365. ncr_name (np), target);
  1366. goto out_stuck;
  1367. /*
  1368. ** The device didn't switch to MSG IN phase after 
  1369. ** having reseleted the initiator.
  1370. */
  1371. case SIR_RESEL_NO_MSG_IN:
  1372. /*
  1373. ** After reselection, the device sent a message that wasn't 
  1374. ** an IDENTIFY.
  1375. */
  1376. case SIR_RESEL_NO_IDENTIFY:
  1377. /*
  1378. ** If devices reselecting without sending an IDENTIFY 
  1379. ** message still exist, this should help.
  1380. ** We just assume lun=0, 1 CCB, no tag.
  1381. */
  1382. if (tp->l0p) { 
  1383. OUTL (nc_dsa, scr_to_cpu(tp->l0p->tasktbl[0]));
  1384. OUTL_DSP (NCB_SCRIPT_PHYS (np, resel_go));
  1385. return;
  1386. }
  1387. /*
  1388. ** The device reselected a LUN we donnot know of.
  1389. */
  1390. case SIR_RESEL_BAD_LUN:
  1391. np->msgout[0] = M_RESET;
  1392. goto out;
  1393. /*
  1394. ** The device reselected for an untagged nexus and we 
  1395. ** haven't any.
  1396. */
  1397. case SIR_RESEL_BAD_I_T_L:
  1398. np->msgout[0] = M_ABORT;
  1399. goto out;
  1400. /*
  1401. ** The device reselected for a tagged nexus that we donnot 
  1402. ** have.
  1403. */
  1404. case SIR_RESEL_BAD_I_T_L_Q:
  1405. np->msgout[0] = M_ABORT_TAG;
  1406. goto out;
  1407. /*
  1408. ** The SCRIPTS let us know that the device has grabbed 
  1409. ** our message and will abort the job.
  1410. */
  1411. case SIR_RESEL_ABORTED:
  1412. np->lastmsg = np->msgout[0];
  1413. np->msgout[0] = M_NOOP;
  1414. printk ("%s:%d: message %x sent on bad reselection.n",
  1415. ncr_name (np), target, np->lastmsg);
  1416. goto out;
  1417. /*
  1418. ** The SCRIPTS let us know that a message has been 
  1419. ** successfully sent to the device.
  1420. */
  1421. case SIR_MSG_OUT_DONE:
  1422. np->lastmsg = np->msgout[0];
  1423. np->msgout[0] = M_NOOP;
  1424. /* Should we really care of that */
  1425. if (np->lastmsg == M_PARITY || np->lastmsg == M_ID_ERROR) {
  1426. if (cp) {
  1427. cp->xerr_status &= ~XE_PARITY_ERR;
  1428.                                 if (!cp->xerr_status)
  1429. OUTOFFB (HF_PRT, HF_EXT_ERR);
  1430. }
  1431. }
  1432. goto out;
  1433. /*
  1434. ** The device didn't send a GOOD SCSI status.
  1435. ** We may have some work to do prior to allow 
  1436. ** the SCRIPTS processor to continue.
  1437. */
  1438. case SIR_BAD_STATUS:
  1439. if (!cp)
  1440. goto out;
  1441. ncr_sir_to_redo(np, num, cp);
  1442. return;
  1443. /*
  1444. ** We are asked by the SCRIPTS to prepare a 
  1445. ** REJECT message.
  1446. */
  1447. case SIR_REJECT_TO_SEND:
  1448. ncr_print_msg(cp, "M_REJECT to send for ", np->msgin);
  1449. np->msgout[0] = M_REJECT;
  1450. goto out;
  1451. /*
  1452. ** We have been ODD at the end of a DATA IN 
  1453. ** transfer and the device didn't send a 
  1454. ** IGNORE WIDE RESIDUE message.
  1455. ** It is a data overrun condition.
  1456. */
  1457. case SIR_SWIDE_OVERRUN:
  1458.                 if (cp) {
  1459.                         OUTONB (HF_PRT, HF_EXT_ERR);
  1460.                         cp->xerr_status |= XE_SWIDE_OVRUN;
  1461.                 }
  1462. goto out;
  1463. /*
  1464. ** We have been ODD at the end of a DATA OUT 
  1465. ** transfer.
  1466. ** It is a data underrun condition.
  1467. */
  1468. case SIR_SODL_UNDERRUN:
  1469.                 if (cp) {
  1470.                         OUTONB (HF_PRT, HF_EXT_ERR);
  1471.                         cp->xerr_status |= XE_SODL_UNRUN;
  1472.                 }
  1473. goto out;
  1474. /*
  1475. ** The device wants us to tranfer more data than 
  1476. ** expected or in the wrong direction.
  1477. ** The number of extra bytes is in scratcha.
  1478. ** It is a data overrun condition.
  1479. */
  1480. case SIR_DATA_OVERRUN:
  1481. if (cp) {
  1482. OUTONB (HF_PRT, HF_EXT_ERR);
  1483. cp->xerr_status |= XE_EXTRA_DATA;
  1484. cp->extra_bytes += INL (nc_scratcha);
  1485. }
  1486. goto out;
  1487. /*
  1488. ** The device switched to an illegal phase (4/5).
  1489. */
  1490. case SIR_BAD_PHASE:
  1491. if (cp) {
  1492. OUTONB (HF_PRT, HF_EXT_ERR);
  1493. cp->xerr_status |= XE_BAD_PHASE;
  1494. }
  1495. goto out;
  1496. /*
  1497. ** We received a message.
  1498. */
  1499. case SIR_MSG_RECEIVED:
  1500. if (!cp)
  1501. goto out_stuck;
  1502. switch (np->msgin [0]) {
  1503. /*
  1504. ** We received an extended message.
  1505. ** We handle MODIFY DATA POINTER, SDTR, WDTR 
  1506. ** and reject all other extended messages.
  1507. */
  1508. case M_EXTENDED:
  1509. switch (np->msgin [2]) {
  1510. case M_X_MODIFY_DP:
  1511. if (DEBUG_FLAGS & DEBUG_POINTER)
  1512. ncr_print_msg(cp,"modify DP",np->msgin);
  1513. tmp = (np->msgin[3]<<24) + (np->msgin[4]<<16) + 
  1514.       (np->msgin[5]<<8)  + (np->msgin[6]);
  1515. ncr_modify_dp(np, tp, cp, tmp);
  1516. return;
  1517. case M_X_SYNC_REQ:
  1518. ncr_sync_nego(np, tp, cp);
  1519. return;
  1520. case M_X_WIDE_REQ:
  1521. ncr_wide_nego(np, tp, cp);
  1522. return;
  1523. case M_X_PPR_REQ:
  1524. ncr_ppr_nego(np, tp, cp);
  1525. return;
  1526. default:
  1527. goto out_reject;
  1528. }
  1529. break;
  1530. /*
  1531. ** We received a 1/2 byte message not handled from SCRIPTS.
  1532. ** We are only expecting MESSAGE REJECT and IGNORE WIDE 
  1533. ** RESIDUE messages that haven't been anticipated by 
  1534. ** SCRIPTS on SWIDE full condition. Unanticipated IGNORE 
  1535. ** WIDE RESIDUE messages are aliased as MODIFY DP (-1).
  1536. */
  1537. case M_IGN_RESIDUE:
  1538. if (DEBUG_FLAGS & DEBUG_POINTER)
  1539. ncr_print_msg(cp,"ign wide residue", np->msgin);
  1540. ncr_modify_dp(np, tp, cp, -1);
  1541. return;
  1542. case M_REJECT:
  1543. if (INB (HS_PRT) == HS_NEGOTIATE)
  1544. ncr_nego_rejected(np, tp, cp);
  1545. else {
  1546. PRINT_ADDR(cp->cmd);
  1547. printk ("M_REJECT received (%x:%x).n",
  1548. scr_to_cpu(np->lastmsg), np->msgout[0]);
  1549. }
  1550. goto out_clrack;
  1551. break;
  1552. default:
  1553. goto out_reject;
  1554. }
  1555. break;
  1556. /*
  1557. ** We received an unknown message.
  1558. ** Ignore all MSG IN phases and reject it.
  1559. */
  1560. case SIR_MSG_WEIRD:
  1561. ncr_print_msg(cp, "WEIRD message received", np->msgin);
  1562. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_weird));
  1563. return;
  1564. /*
  1565. ** Negotiation failed.
  1566. ** Target does not send us the reply.
  1567. ** Remove the HS_NEGOTIATE status.
  1568. */
  1569. case SIR_NEGO_FAILED:
  1570. OUTB (HS_PRT, HS_BUSY);
  1571. /*
  1572. ** Negotiation failed.
  1573. ** Target does not want answer message.
  1574. */
  1575. case SIR_NEGO_PROTO:
  1576. ncr_nego_default(np, tp, cp);
  1577. goto out;
  1578. };
  1579. out:
  1580. OUTONB_STD ();
  1581. return;
  1582. out_reject:
  1583. OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
  1584. return;
  1585. out_clrack:
  1586. OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
  1587. return;
  1588. out_stuck:
  1589. return;
  1590. }
  1591. /*==========================================================
  1592. **
  1593. **
  1594. ** Acquire a control block
  1595. **
  1596. **
  1597. **==========================================================
  1598. */
  1599. static ccb_p ncr_get_ccb (ncb_p np, u_char tn, u_char ln)
  1600. {
  1601. tcb_p tp = &np->target[tn];
  1602. lcb_p lp = ncr_lp(np, tp, ln);
  1603. u_short tag = NO_TAG;
  1604. XPT_QUEHEAD *qp;
  1605. ccb_p cp = (ccb_p) 0;
  1606. /*
  1607. ** Allocate a new CCB if needed.
  1608. */
  1609. if (xpt_que_empty(&np->free_ccbq))
  1610. (void) ncr_alloc_ccb(np);
  1611. /*
  1612. ** Look for a free CCB
  1613. */
  1614. qp = xpt_remque_head(&np->free_ccbq);
  1615. if (!qp)
  1616. goto out;
  1617. cp = xpt_que_entry(qp, struct ccb, link_ccbq);
  1618. /*
  1619. ** If the LCB is not yet available and we already 
  1620. ** have queued a CCB for a LUN without LCB,
  1621. ** give up. Otherwise all is fine. :-)
  1622. */
  1623. if (!lp) {
  1624. if (xpt_que_empty(&np->b0_ccbq))
  1625. xpt_insque_head(&cp->link_ccbq, &np->b0_ccbq);
  1626. else
  1627. goto out_free;
  1628. } else {
  1629. /*
  1630. ** Tune tag mode if asked by user.
  1631. */
  1632. if (lp->queuedepth != lp->numtags) {
  1633. ncr_setup_tags(np, tn, ln);
  1634. }
  1635. /*
  1636. ** Get a tag for this nexus if required.
  1637. ** Keep from using more tags than we can handle.
  1638. */
  1639. if (lp->usetags) {
  1640. if (lp->busyccbs < lp->maxnxs) {
  1641. tag = lp->cb_tags[lp->ia_tag];
  1642. ++lp->ia_tag;
  1643. if (lp->ia_tag == MAX_TAGS)
  1644. lp->ia_tag = 0;
  1645. cp->tags_si = lp->tags_si;
  1646. ++lp->tags_sum[cp->tags_si];
  1647. }
  1648. else
  1649. goto out_free;
  1650. }
  1651. /*
  1652. ** Put the CCB in the LUN wait queue and 
  1653. ** count it as busy.
  1654. */
  1655. xpt_insque_tail(&cp->link_ccbq, &lp->wait_ccbq);
  1656. ++lp->busyccbs;
  1657. }
  1658. /*
  1659. ** Remember all informations needed to free this CCB.
  1660. */
  1661. cp->to_abort = 0;
  1662. cp->tag    = tag;
  1663. cp->target = tn;
  1664. cp->lun    = ln;
  1665. if (DEBUG_FLAGS & DEBUG_TAGS) {
  1666. PRINT_LUN(np, tn, ln);
  1667. printk ("ccb @%p using tag %d.n", cp, tag);
  1668. }
  1669. out:
  1670. return cp;
  1671. out_free:
  1672. xpt_insque_head(&cp->link_ccbq, &np->free_ccbq);
  1673. return (ccb_p) 0;
  1674. }
  1675. /*==========================================================
  1676. **
  1677. **
  1678. ** Release one control block
  1679. **
  1680. **
  1681. **==========================================================
  1682. */
  1683. static void ncr_free_ccb (ncb_p np, ccb_p cp)
  1684. {
  1685. tcb_p tp = &np->target[cp->target];
  1686. lcb_p lp = ncr_lp(np, tp, cp->lun);
  1687. if (DEBUG_FLAGS & DEBUG_TAGS) {
  1688. PRINT_LUN(np, cp->target, cp->lun);
  1689. printk ("ccb @%p freeing tag %d.n", cp, cp->tag);
  1690. }
  1691. /*
  1692. ** If lun control block available, make available 
  1693. ** the task slot and the tag if any.
  1694. ** Decrement counters.
  1695. */
  1696. if (lp) {
  1697. if (cp->tag != NO_TAG) {
  1698. lp->cb_tags[lp->if_tag++] = cp->tag;
  1699. if (lp->if_tag == MAX_TAGS)
  1700. lp->if_tag = 0;
  1701. --lp->tags_sum[cp->tags_si];
  1702. lp->tasktbl[cp->tag] = cpu_to_scr(np->p_bad_i_t_l_q);
  1703. } else {
  1704. lp->tasktbl[0] = cpu_to_scr(np->p_bad_i_t_l);
  1705. }
  1706. --lp->busyccbs;
  1707. if (cp->queued) {
  1708. --lp->queuedccbs;
  1709. }
  1710. }
  1711. /*
  1712. ** Make this CCB available.
  1713. */
  1714. xpt_remque(&cp->link_ccbq);
  1715. xpt_insque_head(&cp->link_ccbq, &np->free_ccbq);
  1716. cp -> host_status = HS_IDLE;
  1717. cp -> queued = 0;
  1718. }
  1719. /*------------------------------------------------------------------------
  1720. ** Allocate a CCB and initialize its fixed part.
  1721. **------------------------------------------------------------------------
  1722. **------------------------------------------------------------------------
  1723. */
  1724. static ccb_p ncr_alloc_ccb(ncb_p np)
  1725. {
  1726. ccb_p cp = 0;
  1727. int hcode;
  1728. /*
  1729. ** Allocate memory for this CCB.
  1730. */
  1731. cp = m_calloc_dma(sizeof(struct ccb), "CCB");
  1732. if (!cp)
  1733. return 0;
  1734. /*
  1735. ** Count it and initialyze it.
  1736. */
  1737. np->actccbs++;
  1738. /*
  1739. ** Remember virtual and bus address of this ccb.
  1740. */
  1741. cp->p_ccb     = vtobus(cp);
  1742. /*
  1743. ** Insert this ccb into the hashed list.
  1744. */
  1745. hcode = CCB_HASH_CODE(cp->p_ccb);
  1746. cp->link_ccbh = np->ccbh[hcode];
  1747. np->ccbh[hcode] = cp;
  1748. /*
  1749. ** Initialyze the start and restart actions.
  1750. */
  1751. cp->phys.header.go.start   = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
  1752. cp->phys.header.go.restart = cpu_to_scr(NCB_SCRIPTH_PHYS(np,bad_i_t_l));
  1753. /*
  1754. ** Initilialyze some other fields.
  1755. */
  1756. cp->phys.smsg_ext.addr = cpu_to_scr(NCB_PHYS(np, msgin[2]));
  1757. /*
  1758. ** Chain into wakeup list and free ccb queue.
  1759. */
  1760. cp->link_ccb = np->ccbc;
  1761. np->ccbc = cp;
  1762. xpt_insque_head(&cp->link_ccbq, &np->free_ccbq);
  1763. return cp;
  1764. }
  1765. /*------------------------------------------------------------------------
  1766. ** Look up a CCB from a DSA value.
  1767. **------------------------------------------------------------------------
  1768. **------------------------------------------------------------------------
  1769. */
  1770. static ccb_p ncr_ccb_from_dsa(ncb_p np, u_long dsa)
  1771. {
  1772. int hcode;
  1773. ccb_p cp;
  1774. hcode = CCB_HASH_CODE(dsa);
  1775. cp = np->ccbh[hcode];
  1776. while (cp) {
  1777. if (cp->p_ccb == dsa)
  1778. break;
  1779. cp = cp->link_ccbh;
  1780. }
  1781. return cp;
  1782. }
  1783. /*==========================================================
  1784. **
  1785. **
  1786. **      Allocation of resources for Targets/Luns/Tags.
  1787. **
  1788. **
  1789. **==========================================================
  1790. */
  1791. /*------------------------------------------------------------------------
  1792. ** Target control block initialisation.
  1793. **------------------------------------------------------------------------
  1794. ** This data structure is fully initialized after a SCSI command 
  1795. ** has been successfully completed for this target.
  1796. **------------------------------------------------------------------------
  1797. */
  1798. static void ncr_init_tcb (ncb_p np, u_char tn)
  1799. {
  1800. /*
  1801. ** Check some alignments required by the chip.
  1802. */
  1803. assert (( (offsetof(struct ncr_reg, nc_sxfer) ^
  1804. offsetof(struct tcb    , sval    )) &3) == 0);
  1805. assert (( (offsetof(struct ncr_reg, nc_scntl3) ^
  1806. offsetof(struct tcb    , wval    )) &3) == 0);
  1807. if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
  1808. (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)){
  1809. assert (( (offsetof(struct ncr_reg, nc_scntl4) ^
  1810. offsetof(struct tcb    , uval    )) &3) == 0);
  1811. }
  1812. }
  1813. /*------------------------------------------------------------------------
  1814. ** Lun control block allocation and initialization.
  1815. **------------------------------------------------------------------------
  1816. ** This data structure is allocated and initialized after a SCSI 
  1817. ** command has been successfully completed for this target/lun.
  1818. **------------------------------------------------------------------------
  1819. */
  1820. static lcb_p ncr_alloc_lcb (ncb_p np, u_char tn, u_char ln)
  1821. {
  1822. tcb_p tp = &np->target[tn];
  1823. lcb_p lp = ncr_lp(np, tp, ln);
  1824. /*
  1825. ** Already done, return.
  1826. */
  1827. if (lp)
  1828. return lp;
  1829. /*
  1830. ** Initialize the target control block if not yet.
  1831. */
  1832. ncr_init_tcb(np, tn);
  1833. /*
  1834. ** Allocate the lcb bus address array.
  1835. ** Compute the bus address of this table.
  1836. */
  1837. if (ln && !tp->luntbl) {
  1838. int i;
  1839. tp->luntbl = m_calloc_dma(256, "LUNTBL");
  1840. if (!tp->luntbl)
  1841. goto fail;
  1842. for (i = 0 ; i < 64 ; i++)
  1843. tp->luntbl[i] = cpu_to_scr(NCB_PHYS(np, resel_badlun));
  1844. tp->b_luntbl = cpu_to_scr(vtobus(tp->luntbl));
  1845. }
  1846. /*
  1847. ** Allocate the table of pointers for LUN(s) > 0, if needed.
  1848. */
  1849. if (ln && !tp->lmp) {
  1850. tp->lmp = m_calloc(MAX_LUN * sizeof(lcb_p), "LMP");
  1851. if (!tp->lmp)
  1852. goto fail;
  1853. }
  1854. /*
  1855. ** Allocate the lcb.
  1856. ** Make it available to the chip.
  1857. */
  1858. lp = m_calloc_dma(sizeof(struct lcb), "LCB");
  1859. if (!lp)
  1860. goto fail;
  1861. if (ln) {
  1862. tp->lmp[ln] = lp;
  1863. tp->luntbl[ln] = cpu_to_scr(vtobus(lp));
  1864. }
  1865. else {
  1866. tp->l0p = lp;
  1867. tp->b_lun0 = cpu_to_scr(vtobus(lp));
  1868. }
  1869. /*
  1870. ** Initialize the CCB queue headers.
  1871. */
  1872. xpt_que_init(&lp->busy_ccbq);
  1873. xpt_que_init(&lp->wait_ccbq);
  1874. /*
  1875. ** Set max CCBs to 1 and use the default task array 
  1876. ** by default.
  1877. */
  1878. lp->maxnxs = 1;
  1879. lp->tasktbl = &lp->tasktbl_0;
  1880. lp->b_tasktbl = cpu_to_scr(vtobus(lp->tasktbl));
  1881. lp->tasktbl[0] = cpu_to_scr(np->p_notask);
  1882. lp->resel_task = cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_notag));
  1883. /*
  1884. ** Initialize command queuing control.
  1885. */
  1886. lp->busyccbs = 1;
  1887. lp->queuedccbs = 1;
  1888. lp->queuedepth = 1;
  1889. fail:
  1890. return lp;
  1891. }
  1892. /*------------------------------------------------------------------------
  1893. ** Lun control block setup on INQUIRY data received.
  1894. **------------------------------------------------------------------------
  1895. ** We only support WIDE, SYNC for targets and CMDQ for logical units.
  1896. ** This setup is done on each INQUIRY since we are expecting user 
  1897. ** will play with CHANGE DEFINITION commands. :-)
  1898. **------------------------------------------------------------------------
  1899. */
  1900. static lcb_p ncr_setup_lcb (ncb_p np, u_char tn, u_char ln, u_char *inq_data)
  1901. {
  1902. tcb_p tp = &np->target[tn];
  1903. lcb_p lp = ncr_lp(np, tp, ln);
  1904. u_char inq_byte7;
  1905. int i;
  1906. /*
  1907. ** If no lcb, try to allocate it.
  1908. */
  1909. if (!lp && !(lp = ncr_alloc_lcb(np, tn, ln)))
  1910. goto fail;
  1911. #if 0 /* No more used. Left here as provision */
  1912. /*
  1913. ** Get device quirks.
  1914. */
  1915. tp->quirks = 0;
  1916. if (tp->quirks && bootverbose) {
  1917. PRINT_LUN(np, tn, ln);
  1918. printk ("quirks=%x.n", tp->quirks);
  1919. }
  1920. #endif
  1921. /*
  1922. ** Evaluate trustable target/unit capabilities.
  1923. ** We only believe device version >= SCSI-2 that 
  1924. ** use appropriate response data format (2).
  1925. ** But it seems that some CCS devices also 
  1926. ** support SYNC and I donnot want to frustrate 
  1927. ** anybody. ;-)
  1928. */
  1929. inq_byte7 = 0;
  1930. if ((inq_data[2] & 0x7) >= 2 && (inq_data[3] & 0xf) == 2)
  1931. inq_byte7 = inq_data[7];
  1932. else if ((inq_data[2] & 0x7) == 1 && (inq_data[3] & 0xf) == 1)
  1933. inq_byte7 = INQ7_SYNC;
  1934. /*
  1935. ** Throw away announced LUN capabilities if we are told 
  1936. ** that there is no real device supported by the logical unit.
  1937. */
  1938. if ((inq_data[0] & 0xe0) > 0x20 || (inq_data[0] & 0x1f) == 0x1f)
  1939. inq_byte7 &= (INQ7_SYNC | INQ7_WIDE16);
  1940. /*
  1941. ** If user is wanting SYNC, force this feature.
  1942. */
  1943. if (driver_setup.force_sync_nego)
  1944. inq_byte7 |= INQ7_SYNC;
  1945. /*
  1946. ** Prepare negotiation if SIP capabilities have changed.
  1947. */
  1948. tp->inq_done = 1;
  1949. if ((inq_byte7 ^ tp->inq_byte7) & (INQ7_SYNC | INQ7_WIDE16)) {
  1950. tp->inq_byte7 = inq_byte7;
  1951. ncr_negotiate(np, tp);
  1952. }
  1953. /*
  1954. ** If unit supports tagged commands, allocate and 
  1955. ** initialyze the task table if not yet.
  1956. */
  1957. if ((inq_byte7 & INQ7_QUEUE) && lp->tasktbl == &lp->tasktbl_0) {
  1958. lp->tasktbl = m_calloc_dma(MAX_TASKS*4, "TASKTBL");
  1959. if (!lp->tasktbl) {
  1960. lp->tasktbl = &lp->tasktbl_0;
  1961. goto fail;
  1962. }
  1963. lp->b_tasktbl = cpu_to_scr(vtobus(lp->tasktbl));
  1964. for (i = 0 ; i < MAX_TASKS ; i++)
  1965. lp->tasktbl[i] = cpu_to_scr(np->p_notask);
  1966. lp->cb_tags = m_calloc(MAX_TAGS, "CB_TAGS");
  1967. if (!lp->cb_tags)
  1968. goto fail;
  1969. for (i = 0 ; i < MAX_TAGS ; i++)
  1970. lp->cb_tags[i] = i;
  1971. lp->maxnxs = MAX_TAGS;
  1972. lp->tags_stime = ktime_get(3*HZ);
  1973. }
  1974. /*
  1975. ** Adjust tagged queueing status if needed.
  1976. */
  1977. if ((inq_byte7 ^ lp->inq_byte7) & INQ7_QUEUE) {
  1978. lp->inq_byte7 = inq_byte7;
  1979. lp->numtags   = lp->maxtags;
  1980. ncr_setup_tags (np, tn, ln);
  1981. }
  1982. fail:
  1983. return lp;
  1984. }
  1985. /*==========================================================
  1986. **
  1987. **
  1988. ** Build Scatter Gather Block
  1989. **
  1990. **
  1991. **==========================================================
  1992. **
  1993. ** The transfer area may be scattered among
  1994. ** several non adjacent physical pages.
  1995. **
  1996. ** We may use MAX_SCATTER blocks.
  1997. **
  1998. **----------------------------------------------------------
  1999. */
  2000. /*
  2001. ** We try to reduce the number of interrupts caused
  2002. ** by unexpected phase changes due to disconnects.
  2003. ** A typical harddisk may disconnect before ANY block.
  2004. ** If we wanted to avoid unexpected phase changes at all
  2005. ** we had to use a break point every 512 bytes.
  2006. ** Of course the number of scatter/gather blocks is
  2007. ** limited.
  2008. ** Under Linux, the scatter/gatter blocks are provided by 
  2009. ** the generic driver. We just have to copy addresses and 
  2010. ** sizes to the data segment array.
  2011. */
  2012. /*
  2013. ** For 64 bit systems, we use the 8 upper bits of the size field 
  2014. ** to provide bus address bits 32-39 to the SCRIPTS processor.
  2015. ** This allows the 895A and 896 to address up to 1 TB of memory.
  2016. ** For 32 bit chips on 64 bit systems, we must be provided with 
  2017. ** memory addresses that fit into the first 32 bit bus address 
  2018. ** range and so, this does not matter and we expect an error from 
  2019. ** the chip if this ever happen.
  2020. **
  2021. ** We use a separate function for the case Linux does not provide 
  2022. ** a scatter list in order to allow better code optimization 
  2023. ** for the case we have a scatter list (BTW, for now this just wastes  
  2024. ** about 40 bytes of code for x86, but my guess is that the scatter 
  2025. ** code will get more complex later).
  2026. */
  2027. #define SCATTER_ONE(data, badd, len)
  2028. (data)->addr = cpu_to_scr(badd);
  2029. (data)->size = cpu_to_scr((((badd) >> 8) & 0xff000000) + len);
  2030. #define CROSS_16MB(p, n) (((((u_long) p) + n - 1) ^ ((u_long) p)) & ~0xffffff)
  2031. static int ncr_scatter_no_sglist(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd)
  2032. {
  2033. struct scr_tblmove *data = &cp->phys.data[MAX_SCATTER-1];
  2034. int segment;
  2035. cp->data_len = cmd->request_bufflen;
  2036. if (cmd->request_bufflen) {
  2037. dma_addr_t baddr = map_scsi_single_data(np, cmd);
  2038. SCATTER_ONE(data, baddr, cmd->request_bufflen);
  2039. if (CROSS_16MB(baddr, cmd->request_bufflen)) {
  2040. cp->host_flags |= HF_PM_TO_C;
  2041. #ifdef DEBUG_896R1
  2042. printk("He! we are crossing a 16 MB boundary (0x%lx, 0x%x)n",
  2043. baddr, cmd->request_bufflen);
  2044. #endif
  2045. }
  2046. segment = 1;
  2047. }
  2048. else
  2049. segment = 0;
  2050. return segment;
  2051. }
  2052. /*
  2053. ** DEL 472 - 53C896 Rev 1 - Part Number 609-0393055 - ITEM 5.
  2054. **
  2055. ** We disable data phase mismatch handling from SCRIPTS for data 
  2056. ** transfers that contains scatter/gather entries that cross  
  2057. ** a 16 MB boundary.
  2058. ** We use a different scatter function for 896 rev. 1 that needs 
  2059. ** such a work-around. Doing so, we do not affect performance for 
  2060. ** other chips.
  2061. ** This problem should not be triggered for disk IOs under Linux, 
  2062. ** since such IOs are performed using pages and buffers that are 
  2063. ** nicely power-of-two sized and aligned. But, since this may change 
  2064. ** at any time, a work-around was required.
  2065. */
  2066. static int ncr_scatter_896R1(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd)
  2067. {
  2068. int segn;
  2069. int use_sg = (int) cmd->use_sg;
  2070. cp->data_len = 0;
  2071. if (!use_sg)
  2072. segn = ncr_scatter_no_sglist(np, cp, cmd);
  2073. else if (use_sg > MAX_SCATTER)
  2074. segn = -1;
  2075. else {
  2076. struct scatterlist *scatter = (struct scatterlist *)cmd->buffer;
  2077. struct scr_tblmove *data;
  2078. use_sg = map_scsi_sg_data(np, cmd);
  2079. data = &cp->phys.data[MAX_SCATTER - use_sg];
  2080. for (segn = 0; segn < use_sg; segn++) {
  2081. dma_addr_t baddr = scsi_sg_dma_address(&scatter[segn]);
  2082. unsigned int len = scsi_sg_dma_len(&scatter[segn]);
  2083. SCATTER_ONE(&data[segn],
  2084.     baddr,
  2085.     len);
  2086. if (CROSS_16MB(baddr, scatter[segn].length)) {
  2087. cp->host_flags |= HF_PM_TO_C;
  2088. #ifdef DEBUG_896R1
  2089. printk("He! we are crossing a 16 MB boundary (0x%lx, 0x%x)n",
  2090. baddr, scatter[segn].length);
  2091. #endif
  2092. }
  2093. cp->data_len += len;
  2094. }
  2095. }
  2096. return segn;
  2097. }
  2098. static int ncr_scatter(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd)
  2099. {
  2100. int segment;
  2101. int use_sg = (int) cmd->use_sg;
  2102. cp->data_len = 0;
  2103. if (!use_sg)
  2104. segment = ncr_scatter_no_sglist(np, cp, cmd);
  2105. else if (use_sg > MAX_SCATTER)
  2106. segment = -1;
  2107. else {
  2108. struct scatterlist *scatter = (struct scatterlist *)cmd->buffer;
  2109. struct scr_tblmove *data;
  2110. use_sg = map_scsi_sg_data(np, cmd);
  2111. data = &cp->phys.data[MAX_SCATTER - use_sg];
  2112. for (segment = 0; segment < use_sg; segment++) {
  2113. dma_addr_t baddr = scsi_sg_dma_address(&scatter[segment]);
  2114. unsigned int len = scsi_sg_dma_len(&scatter[segment]);
  2115. SCATTER_ONE(&data[segment],
  2116.     baddr,
  2117.     len);
  2118. cp->data_len += len;
  2119. }
  2120. }
  2121. return segment;
  2122. }
  2123. /*==========================================================
  2124. **
  2125. **
  2126. ** Test the pci bus snoop logic :-(
  2127. **
  2128. ** Has to be called with interrupts disabled.
  2129. **
  2130. **
  2131. **==========================================================
  2132. */
  2133. #ifndef SCSI_NCR_IOMAPPED
  2134. static int __init ncr_regtest (struct ncb* np)
  2135. {
  2136. register volatile u_int32 data;
  2137. /*
  2138. ** ncr registers may NOT be cached.
  2139. ** write 0xffffffff to a read only register area,
  2140. ** and try to read it back.
  2141. */
  2142. data = 0xffffffff;
  2143. OUTL_OFF(offsetof(struct ncr_reg, nc_dstat), data);
  2144. data = INL_OFF(offsetof(struct ncr_reg, nc_dstat));
  2145. #if 1
  2146. if (data == 0xffffffff) {
  2147. #else
  2148. if ((data & 0xe2f0fffd) != 0x02000080) {
  2149. #endif
  2150. printk ("CACHE TEST FAILED: reg dstat-sstat2 readback %x.n",
  2151. (unsigned) data);
  2152. return (0x10);
  2153. };
  2154. return (0);
  2155. }
  2156. #endif
  2157. static int __init ncr_snooptest (struct ncb* np)
  2158. {
  2159. u_int32 ncr_rd, ncr_wr, ncr_bk, host_rd, host_wr, pc;
  2160. u_char  dstat;
  2161. int i, err=0;
  2162. #ifndef SCSI_NCR_IOMAPPED
  2163. if (np->reg) {
  2164.             err |= ncr_regtest (np);
  2165.             if (err) return (err);
  2166. }
  2167. #endif
  2168. restart_test:
  2169. /*
  2170. ** Enable Master Parity Checking as we intend 
  2171. ** to enable it for normal operations.
  2172. */
  2173. OUTB (nc_ctest4, (np->rv_ctest4 & MPEE));
  2174. /*
  2175. ** init
  2176. */
  2177. pc  = NCB_SCRIPTH0_PHYS (np, snooptest);
  2178. host_wr = 1;
  2179. ncr_wr  = 2;
  2180. /*
  2181. ** Set memory and register.
  2182. */
  2183. np->ncr_cache = cpu_to_scr(host_wr);
  2184. OUTL (nc_temp, ncr_wr);
  2185. /*
  2186. ** Start script (exchange values)
  2187. */
  2188. OUTL (nc_dsa, np->p_ncb);
  2189. OUTL_DSP (pc);
  2190. /*
  2191. ** Wait 'til done (with timeout)
  2192. */
  2193. for (i=0; i<NCR_SNOOP_TIMEOUT; i++)
  2194. if (INB(nc_istat) & (INTF|SIP|DIP))
  2195. break;
  2196. if (i>=NCR_SNOOP_TIMEOUT) {
  2197. printk ("CACHE TEST FAILED: timeout.n");
  2198. return (0x20);
  2199. };
  2200. /*
  2201. ** Check for fatal DMA errors.
  2202. */
  2203. dstat = INB (nc_dstat);
  2204. #if 1 /* Band aiding for broken hardwares that fail PCI parity */
  2205. if ((dstat & MDPE) && (np->rv_ctest4 & MPEE)) {
  2206. printk ("%s: PCI DATA PARITY ERROR DETECTED - "
  2207. "DISABLING MASTER DATA PARITY CHECKING.n",
  2208. ncr_name(np));
  2209. np->rv_ctest4 &= ~MPEE;
  2210. goto restart_test;
  2211. }
  2212. #endif
  2213. if (dstat & (MDPE|BF|IID)) {
  2214. printk ("CACHE TEST FAILED: DMA error (dstat=0x%02x).", dstat);
  2215. return (0x80);
  2216. }
  2217. /*
  2218. ** Save termination position.
  2219. */
  2220. pc = INL (nc_dsp);
  2221. /*
  2222. ** Read memory and register.
  2223. */
  2224. host_rd = scr_to_cpu(np->ncr_cache);
  2225. ncr_rd  = INL (nc_scratcha);
  2226. ncr_bk  = INL (nc_temp);
  2227. /*
  2228. ** Check termination position.
  2229. */
  2230. if (pc != NCB_SCRIPTH0_PHYS (np, snoopend)+8) {
  2231. printk ("CACHE TEST FAILED: script execution failed.n");
  2232. printk ("start=%08lx, pc=%08lx, end=%08lxn", 
  2233. (u_long) NCB_SCRIPTH0_PHYS (np, snooptest), (u_long) pc,
  2234. (u_long) NCB_SCRIPTH0_PHYS (np, snoopend) +8);
  2235. return (0x40);
  2236. };
  2237. /*
  2238. ** Show results.
  2239. */
  2240. if (host_wr != ncr_rd) {
  2241. printk ("CACHE TEST FAILED: host wrote %d, ncr read %d.n",
  2242. (int) host_wr, (int) ncr_rd);
  2243. err |= 1;
  2244. };
  2245. if (host_rd != ncr_wr) {
  2246. printk ("CACHE TEST FAILED: ncr wrote %d, host read %d.n",
  2247. (int) ncr_wr, (int) host_rd);
  2248. err |= 2;
  2249. };
  2250. if (ncr_bk != ncr_wr) {
  2251. printk ("CACHE TEST FAILED: ncr wrote %d, read back %d.n",
  2252. (int) ncr_wr, (int) ncr_bk);
  2253. err |= 4;
  2254. };
  2255. return (err);
  2256. }
  2257. /*==========================================================
  2258. **
  2259. ** Determine the ncr's clock frequency.
  2260. ** This is essential for the negotiation
  2261. ** of the synchronous transfer rate.
  2262. **
  2263. **==========================================================
  2264. **
  2265. ** Note: we have to return the correct value.
  2266. ** THERE IS NO SAFE DEFAULT VALUE.
  2267. **
  2268. ** Most NCR/SYMBIOS boards are delivered with a 40 Mhz clock.
  2269. ** 53C860 and 53C875 rev. 1 support fast20 transfers but 
  2270. ** do not have a clock doubler and so are provided with a 
  2271. ** 80 MHz clock. All other fast20 boards incorporate a doubler 
  2272. ** and so should be delivered with a 40 MHz clock.
  2273. ** The recent fast40 chips  (895/896/895A) and the
  2274. ** fast80 chip (C1010) use a 40 Mhz base clock 
  2275. ** and provide a clock quadrupler (160 Mhz). The code below 
  2276. ** tries to deal as cleverly as possible with all this stuff.
  2277. **
  2278. **----------------------------------------------------------
  2279. */
  2280. /*
  2281.  * Select NCR SCSI clock frequency
  2282.  */
  2283. static void ncr_selectclock(ncb_p np, u_char scntl3)
  2284. {
  2285. if (np->multiplier < 2) {
  2286. OUTB(nc_scntl3, scntl3);
  2287. return;
  2288. }
  2289. if (bootverbose >= 2)
  2290. printk ("%s: enabling clock multipliern", ncr_name(np));
  2291. OUTB(nc_stest1, DBLEN);    /* Enable clock multiplier   */
  2292. if ( (np->device_id != PCI_DEVICE_ID_LSI_53C1010) && 
  2293. (np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) && 
  2294. (np->multiplier > 2)) {  
  2295. int i = 20;  /* Poll bit 5 of stest4 for quadrupler */
  2296. while (!(INB(nc_stest4) & LCKFRQ) && --i > 0)
  2297. UDELAY (20);
  2298. if (!i)
  2299.     printk("%s: the chip cannot lock the frequencyn",
  2300.  ncr_name(np));
  2301. } else /* Wait 120 micro-seconds for multiplier*/
  2302. UDELAY (120);
  2303. OUTB(nc_stest3, HSC); /* Halt the scsi clock */
  2304. OUTB(nc_scntl3, scntl3);
  2305. OUTB(nc_stest1, (DBLEN|DBLSEL));/* Select clock multiplier */
  2306. OUTB(nc_stest3, 0x00); /* Restart scsi clock  */
  2307. }
  2308. /*
  2309.  * calculate NCR SCSI clock frequency (in KHz)
  2310.  */
  2311. static unsigned __init ncrgetfreq (ncb_p np, int gen)
  2312. {
  2313. unsigned int ms = 0;
  2314. unsigned int f;
  2315. int count;
  2316. /*
  2317.  * Measure GEN timer delay in order 
  2318.  * to calculate SCSI clock frequency
  2319.  *
  2320.  * This code will never execute too
  2321.  * many loop iterations (if DELAY is 
  2322.  * reasonably correct). It could get
  2323.  * too low a delay (too high a freq.)
  2324.  * if the CPU is slow executing the 
  2325.  * loop for some reason (an NMI, for
  2326.  * example). For this reason we will
  2327.  * if multiple measurements are to be 
  2328.  * performed trust the higher delay 
  2329.  * (lower frequency returned).
  2330.  */
  2331. OUTW (nc_sien , 0x0);/* mask all scsi interrupts */
  2332. /* enable general purpose timer */
  2333. (void) INW (nc_sist); /* clear pending scsi interrupt */
  2334. OUTB (nc_dien , 0); /* mask all dma interrupts */
  2335. (void) INW (nc_sist); /* another one, just to be sure :) */
  2336. OUTB (nc_scntl3, 4); /* set pre-scaler to divide by 3 */
  2337. OUTB (nc_stime1, 0); /* disable general purpose timer */
  2338. OUTB (nc_stime1, gen); /* set to nominal delay of 1<<gen * 125us */
  2339. /* Temporary fix for udelay issue with Alpha
  2340. platform */
  2341. while (!(INW(nc_sist) & GEN) && ms++ < 100000) {
  2342. /* count 1ms */
  2343. for (count = 0; count < 10; count++)
  2344. UDELAY (100);
  2345. }
  2346. OUTB (nc_stime1, 0); /* disable general purpose timer */
  2347.   /*
  2348.    * set prescaler to divide by whatever 0 means
  2349.    * 0 ought to choose divide by 2, but appears
  2350.    * to set divide by 3.5 mode in my 53c810 ...
  2351.    */
  2352.   OUTB (nc_scntl3, 0);
  2353.    /*
  2354.    * adjust for prescaler, and convert into KHz 
  2355.  * scale values derived empirically.
  2356.     */
  2357. f = ms ? ((1 << gen) * 4340) / ms : 0;
  2358. if (bootverbose >= 2)
  2359. printk ("%s: Delay (GEN=%d): %u msec, %u KHzn",
  2360. ncr_name(np), gen, ms, f);
  2361. return f;
  2362. }
  2363. static unsigned __init ncr_getfreq (ncb_p np)
  2364. {
  2365. u_int f1, f2;
  2366. int gen = 11;
  2367. (void) ncrgetfreq (np, gen); /* throw away first result */
  2368. f1 = ncrgetfreq (np, gen);
  2369. f2 = ncrgetfreq (np, gen);
  2370. if (f1 > f2) f1 = f2; /* trust lower result */
  2371. return f1;
  2372. }
  2373. /*
  2374.  * Get/probe NCR SCSI clock frequency
  2375.  */
  2376. static void __init ncr_getclock (ncb_p np, int mult)
  2377. {
  2378. unsigned char scntl3 = np->sv_scntl3;
  2379. unsigned char stest1 = np->sv_stest1;
  2380. unsigned f1;
  2381. np->multiplier = 1;
  2382. f1 = 40000;
  2383. /*
  2384. ** True with 875/895/896/895A with clock multiplier selected
  2385. */
  2386. if (mult > 1 && (stest1 & (DBLEN+DBLSEL)) == DBLEN+DBLSEL) {
  2387. if (bootverbose >= 2)
  2388. printk ("%s: clock multiplier foundn", ncr_name(np));
  2389. np->multiplier = mult;
  2390. }
  2391. /*
  2392. ** If multiplier not found or scntl3 not 7,5,3,
  2393. ** reset chip and get frequency from general purpose timer.
  2394. ** Otherwise trust scntl3 BIOS setting.
  2395. */
  2396. if (np->multiplier != mult || (scntl3 & 7) < 3 || !(scntl3 & 1)) {
  2397. OUTB (nc_stest1, 0); /* make sure doubler is OFF */
  2398. f1 = ncr_getfreq (np);
  2399. if (bootverbose)
  2400. printk ("%s: NCR clock is %uKHzn", ncr_name(np), f1);
  2401. if (f1 < 55000) f1 =  40000;
  2402. else f1 =  80000;
  2403. /*
  2404. ** Suggest to also check the PCI clock frequency 
  2405. ** to make sure our frequency calculation algorithm 
  2406. ** is not too biased.
  2407. */
  2408. if (np->features & FE_66MHZ) {
  2409. np->pciclock_min = (66000*55+80-1)/80;
  2410. np->pciclock_max = (66000*55)/40;
  2411. }
  2412. else {
  2413. np->pciclock_min = (33000*55+80-1)/80;
  2414. np->pciclock_max = (33000*55)/40;
  2415. }
  2416. if (f1 == 40000 && mult > 1) {
  2417. if (bootverbose >= 2)
  2418. printk ("%s: clock multiplier assumedn", ncr_name(np));
  2419. np->multiplier = mult;
  2420. }
  2421. } else {
  2422. if ((scntl3 & 7) == 3) f1 =  40000;
  2423. else if ((scntl3 & 7) == 5) f1 =  80000;
  2424. else  f1 = 160000;
  2425. f1 /= np->multiplier;
  2426. }
  2427. /*
  2428. ** Compute controller synchronous parameters.
  2429. */
  2430. f1 *= np->multiplier;
  2431. np->clock_khz = f1;
  2432. }
  2433. /*
  2434.  * Get/probe PCI clock frequency
  2435.  */
  2436. static u_int __init ncr_getpciclock (ncb_p np)
  2437. {
  2438. static u_int f;
  2439. OUTB (nc_stest1, SCLK); /* Use the PCI clock as SCSI clock */
  2440. f = ncr_getfreq (np);
  2441. OUTB (nc_stest1, 0);
  2442. return f;
  2443. }
  2444. /*===================== LINUX ENTRY POINTS SECTION ==========================*/
  2445. #ifndef uchar
  2446. #define uchar unsigned char
  2447. #endif
  2448. #ifndef ushort
  2449. #define ushort unsigned short
  2450. #endif
  2451. #ifndef ulong
  2452. #define ulong unsigned long
  2453. #endif
  2454. /* ---------------------------------------------------------------------
  2455. **
  2456. ** Driver setup from the boot command line
  2457. **
  2458. ** ---------------------------------------------------------------------
  2459. */
  2460. #ifdef MODULE
  2461. #define ARG_SEP ' '
  2462. #else
  2463. #define ARG_SEP ','
  2464. #endif
  2465. #define OPT_TAGS 1
  2466. #define OPT_MASTER_PARITY 2
  2467. #define OPT_SCSI_PARITY 3
  2468. #define OPT_DISCONNECTION 4
  2469. #define OPT_SPECIAL_FEATURES 5
  2470. #define OPT_RESERVED_1 6
  2471. #define OPT_FORCE_SYNC_NEGO 7
  2472. #define OPT_REVERSE_PROBE 8
  2473. #define OPT_DEFAULT_SYNC 9
  2474. #define OPT_VERBOSE 10
  2475. #define OPT_DEBUG 11
  2476. #define OPT_BURST_MAX 12
  2477. #define OPT_LED_PIN 13
  2478. #define OPT_MAX_WIDE 14
  2479. #define OPT_SETTLE_DELAY 15
  2480. #define OPT_DIFF_SUPPORT 16
  2481. #define OPT_IRQM 17
  2482. #define OPT_PCI_FIX_UP 18
  2483. #define OPT_BUS_CHECK 19
  2484. #define OPT_OPTIMIZE 20
  2485. #define OPT_RECOVERY 21
  2486. #define OPT_SAFE_SETUP 22
  2487. #define OPT_USE_NVRAM 23
  2488. #define OPT_EXCLUDE 24
  2489. #define OPT_HOST_ID 25
  2490. #ifdef SCSI_NCR_IARB_SUPPORT
  2491. #define OPT_IARB 26
  2492. #endif
  2493. static char setup_token[] __initdata = 
  2494. "tags:"   "mpar:"
  2495. "spar:"   "disc:"
  2496. "specf:"  "_rsvd1:"
  2497. "fsn:"    "revprob:"
  2498. "sync:"   "verb:"
  2499. "debug:"  "burst:"
  2500. "led:"    "wide:"
  2501. "settle:" "diff:"
  2502. "irqm:"   "pcifix:"
  2503. "buschk:" "optim:"
  2504. "recovery:"
  2505. "safe:"   "nvram:"
  2506. "excl:"   "hostid:"
  2507. #ifdef SCSI_NCR_IARB_SUPPORT
  2508. "iarb:"
  2509. #endif
  2510. ; /* DONNOT REMOVE THIS ';' */
  2511. #ifdef MODULE
  2512. #define ARG_SEP ' '
  2513. #else
  2514. #define ARG_SEP ','
  2515. #endif
  2516. static int __init get_setup_token(char *p)
  2517. {
  2518. char *cur = setup_token;
  2519. char *pc;
  2520. int i = 0;
  2521. while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
  2522. ++pc;
  2523. ++i;
  2524. if (!strncmp(p, cur, pc - cur))
  2525. return i;
  2526. cur = pc;
  2527. }
  2528. return 0;
  2529. }
  2530. int __init sym53c8xx_setup(char *str)
  2531. {
  2532. #ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
  2533. char *cur = str;
  2534. char *pc, *pv;
  2535. unsigned long val;
  2536. int i,  c;
  2537. int xi = 0;
  2538. while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
  2539. char *pe;
  2540. val = 0;
  2541. pv = pc;
  2542. c = *++pv;
  2543. if (c == 'n')
  2544. val = 0;
  2545. else if (c == 'y')
  2546. val = 1;
  2547. else
  2548. val = (int) simple_strtoul(pv, &pe, 0);
  2549. switch (get_setup_token(cur)) {
  2550. case OPT_TAGS:
  2551. driver_setup.default_tags = val;
  2552. if (pe && *pe == '/') {
  2553. i = 0;
  2554. while (*pe && *pe != ARG_SEP && 
  2555. i < sizeof(driver_setup.tag_ctrl)-1) {
  2556. driver_setup.tag_ctrl[i++] = *pe++;
  2557. }
  2558. driver_setup.tag_ctrl[i] = '';
  2559. }
  2560. break;
  2561. case OPT_MASTER_PARITY:
  2562. driver_setup.master_parity = val;
  2563. break;
  2564. case OPT_SCSI_PARITY:
  2565. driver_setup.scsi_parity = val;
  2566. break;
  2567. case OPT_DISCONNECTION:
  2568. driver_setup.disconnection = val;
  2569. break;
  2570. case OPT_SPECIAL_FEATURES:
  2571. driver_setup.special_features = val;
  2572. break;
  2573. case OPT_FORCE_SYNC_NEGO:
  2574. driver_setup.force_sync_nego = val;
  2575. break;
  2576. case OPT_REVERSE_PROBE:
  2577. driver_setup.reverse_probe = val;
  2578. break;
  2579. case OPT_DEFAULT_SYNC:
  2580. driver_setup.default_sync = val;
  2581. break;
  2582. case OPT_VERBOSE:
  2583. driver_setup.verbose = val;
  2584. break;
  2585. case OPT_DEBUG:
  2586. driver_setup.debug = val;
  2587. break;
  2588. case OPT_BURST_MAX:
  2589. driver_setup.burst_max = val;
  2590. break;
  2591. case OPT_LED_PIN:
  2592. driver_setup.led_pin = val;
  2593. break;
  2594. case OPT_MAX_WIDE:
  2595. driver_setup.max_wide = val? 1:0;
  2596. break;
  2597. case OPT_SETTLE_DELAY:
  2598. driver_setup.settle_delay = val;
  2599. break;
  2600. case OPT_DIFF_SUPPORT:
  2601. driver_setup.diff_support = val;
  2602. break;
  2603. case OPT_IRQM:
  2604. driver_setup.irqm = val;
  2605. break;
  2606. case OPT_PCI_FIX_UP:
  2607. driver_setup.pci_fix_up = val;
  2608. break;
  2609. case OPT_BUS_CHECK:
  2610. driver_setup.bus_check = val;
  2611. break;
  2612. case OPT_OPTIMIZE:
  2613. driver_setup.optimize = val;
  2614. break;
  2615. case OPT_RECOVERY:
  2616. driver_setup.recovery = val;
  2617. break;
  2618. case OPT_USE_NVRAM:
  2619. driver_setup.use_nvram = val;
  2620. break;
  2621. case OPT_SAFE_SETUP:
  2622. memcpy(&driver_setup, &driver_safe_setup,
  2623. sizeof(driver_setup));
  2624. break;
  2625. case OPT_EXCLUDE:
  2626. if (xi < SCSI_NCR_MAX_EXCLUDES)
  2627. driver_setup.excludes[xi++] = val;
  2628. break;
  2629. case OPT_HOST_ID:
  2630. driver_setup.host_id = val;
  2631. break;
  2632. #ifdef SCSI_NCR_IARB_SUPPORT
  2633. case OPT_IARB:
  2634. driver_setup.iarb = val;
  2635. break;
  2636. #endif
  2637. default:
  2638. printk("sym53c8xx_setup: unexpected boot option '%.*s' ignoredn", (int)(pc-cur+1), cur);
  2639. break;
  2640. }
  2641. if ((cur = strchr(cur, ARG_SEP)) != NULL)
  2642. ++cur;
  2643. }
  2644. #endif /* SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT */
  2645. return 1;
  2646. }
  2647. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,13)
  2648. #ifndef MODULE
  2649. __setup("sym53c8xx=", sym53c8xx_setup);
  2650. #endif
  2651. #endif
  2652. static int 
  2653. sym53c8xx_pci_init(Scsi_Host_Template *tpnt, pcidev_t pdev, ncr_device *device);
  2654. /*
  2655. **   Linux entry point for SYM53C8XX devices detection routine.
  2656. **
  2657. **   Called by the middle-level scsi drivers at initialization time,
  2658. **   or at module installation.
  2659. **
  2660. **   Read the PCI configuration and try to attach each
  2661. **   detected NCR board.
  2662. **
  2663. **   If NVRAM is present, try to attach boards according to 
  2664. **   the used defined boot order.
  2665. **
  2666. **   Returns the number of boards successfully attached.
  2667. */
  2668. static void __init ncr_print_driver_setup(void)
  2669. {
  2670. #define YesNo(y) y ? 'y' : 'n'
  2671. printk (NAME53C8XX ": setup=disc:%c,specf:%d,tags:%d,sync:%d,"
  2672. "burst:%d,wide:%c,diff:%d,revprob:%c,buschk:0x%xn",
  2673. YesNo(driver_setup.disconnection),
  2674. driver_setup.special_features,
  2675. driver_setup.default_tags,
  2676. driver_setup.default_sync,
  2677. driver_setup.burst_max,
  2678. YesNo(driver_setup.max_wide),
  2679. driver_setup.diff_support,
  2680. YesNo(driver_setup.reverse_probe),
  2681. driver_setup.bus_check);
  2682. printk (NAME53C8XX ": setup=mpar:%c,spar:%c,fsn=%c,verb:%d,debug:0x%x,"
  2683. "led:%c,settle:%d,irqm:0x%x,nvram:0x%x,pcifix:0x%xn",
  2684. YesNo(driver_setup.master_parity),
  2685. YesNo(driver_setup.scsi_parity),
  2686. YesNo(driver_setup.force_sync_nego),
  2687. driver_setup.verbose,
  2688. driver_setup.debug,
  2689. YesNo(driver_setup.led_pin),
  2690. driver_setup.settle_delay,
  2691. driver_setup.irqm,
  2692. driver_setup.use_nvram,
  2693. driver_setup.pci_fix_up);
  2694. #undef YesNo
  2695. }
  2696. /*===================================================================
  2697. **   SYM53C8XX devices description table and chip ids list.
  2698. **===================================================================
  2699. */
  2700. static ncr_chip ncr_chip_table[] __initdata = SCSI_NCR_CHIP_TABLE;
  2701. static ushort ncr_chip_ids[]   __initdata = SCSI_NCR_CHIP_IDS;
  2702. #ifdef SCSI_NCR_PQS_PDS_SUPPORT
  2703. /*===================================================================
  2704. **    Detect all NCR PQS/PDS boards and keep track of their bus nr.
  2705. **
  2706. **    The NCR PQS or PDS card is constructed as a DEC bridge
  2707. **    behind which sit a proprietary NCR memory controller and
  2708. **    four or two 53c875s as separate devices.  In its usual mode
  2709. **    of operation, the 875s are slaved to the memory controller
  2710. **    for all transfers.  We can tell if an 875 is part of a
  2711. **    PQS/PDS or not since if it is, it will be on the same bus
  2712. **    as the memory controller.  To operate with the Linux
  2713. **    driver, the memory controller is disabled and the 875s
  2714. **    freed to function independently.  The only wrinkle is that
  2715. **    the preset SCSI ID (which may be zero) must be read in from
  2716. **    a special configuration space register of the 875
  2717. **===================================================================
  2718. */
  2719. #define SCSI_NCR_MAX_PQS_BUS 16
  2720. static int pqs_bus[SCSI_NCR_MAX_PQS_BUS] __initdata = { 0 };
  2721. static void __init ncr_detect_pqs_pds(void)
  2722. {
  2723. short index;
  2724. pcidev_t dev = PCIDEV_NULL;
  2725. for(index=0; index < SCSI_NCR_MAX_PQS_BUS; index++) {
  2726. u_char tmp;
  2727. dev = pci_find_device(0x101a, 0x0009, dev);
  2728. if (dev == PCIDEV_NULL) {
  2729. pqs_bus[index] = -1;
  2730. break;
  2731. }
  2732. printk(KERN_INFO NAME53C8XX ": NCR PQS/PDS memory controller detected on bus %dn", PciBusNumber(dev));
  2733. pci_read_config_byte(dev, 0x44, &tmp);
  2734. /* bit 1: allow individual 875 configuration */
  2735. tmp |= 0x2;
  2736. pci_write_config_byte(dev, 0x44, tmp);
  2737. pci_read_config_byte(dev, 0x45, &tmp);
  2738. /* bit 2: drive individual 875 interrupts to the bus */
  2739. tmp |= 0x4;
  2740. pci_write_config_byte(dev, 0x45, tmp);
  2741. pqs_bus[index] = PciBusNumber(dev);
  2742. }
  2743. }
  2744. #endif /* SCSI_NCR_PQS_PDS_SUPPORT */
  2745. /*===================================================================
  2746. **    Detect all 53c8xx hosts and then attach them.
  2747. **
  2748. **    If we are using NVRAM, once all hosts are detected, we need to 
  2749. **    check any NVRAM for boot order in case detect and boot order 
  2750. **    differ and attach them using the order in the NVRAM.
  2751. **
  2752. **    If no NVRAM is found or data appears invalid attach boards in 
  2753. **    the the order they are detected.
  2754. **===================================================================
  2755. */
  2756. int __init sym53c8xx_detect(Scsi_Host_Template *tpnt)
  2757. {
  2758. pcidev_t pcidev;
  2759. int i, j, chips, hosts, count;
  2760. int attach_count = 0;
  2761. ncr_device *devtbl, *devp;
  2762. #ifdef SCSI_NCR_NVRAM_SUPPORT
  2763. ncr_nvram  nvram0, nvram, *nvp;
  2764. #endif
  2765. /*
  2766. **    PCI is required.
  2767. */
  2768. if (!pci_present())
  2769. return 0;
  2770. /*
  2771. **    Initialize driver general stuff.
  2772. */
  2773. #ifdef SCSI_NCR_PROC_INFO_SUPPORT
  2774. #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27)
  2775.      tpnt->proc_dir  = &proc_scsi_sym53c8xx;
  2776. #else
  2777.      tpnt->proc_name = NAME53C8XX;
  2778. #endif
  2779.      tpnt->proc_info = sym53c8xx_proc_info;
  2780. #endif
  2781. #if defined(SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT) && defined(MODULE)
  2782. if (sym53c8xx)
  2783. sym53c8xx_setup(sym53c8xx);
  2784. #endif
  2785. #ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
  2786. ncr_debug = driver_setup.debug;
  2787. #endif
  2788. if (initverbose >= 2)
  2789. ncr_print_driver_setup();
  2790. /*
  2791. ** Allocate the device table since we donnot want to 
  2792. ** overflow the kernel stack.
  2793. ** 1 x 4K PAGE is enough for more than 40 devices for i386.
  2794. */
  2795. devtbl = m_calloc(PAGE_SIZE, "devtbl");
  2796. if (!devtbl)
  2797. return 0;
  2798. /*
  2799. **    Detect all NCR PQS/PDS memory controllers.
  2800. */
  2801. #ifdef SCSI_NCR_PQS_PDS_SUPPORT
  2802. ncr_detect_pqs_pds();
  2803. #endif
  2804. /* 
  2805. **    Detect all 53c8xx hosts.
  2806. **    Save the first Symbios NVRAM content if any 
  2807. **    for the boot order.
  2808. */
  2809. chips = sizeof(ncr_chip_ids) / sizeof(ncr_chip_ids[0]);
  2810. hosts = PAGE_SIZE / sizeof(*devtbl);
  2811. #ifdef SCSI_NCR_NVRAM_SUPPORT
  2812. nvp = (driver_setup.use_nvram & 0x1) ? &nvram0 : 0;
  2813. #endif
  2814. j = 0;
  2815. count = 0;
  2816. pcidev = PCIDEV_NULL;
  2817. while (1) {
  2818. char *msg = "";
  2819. if (count >= hosts)
  2820. break;
  2821. if (j >= chips)
  2822. break;
  2823. i = driver_setup.reverse_probe ? chips - 1 - j : j;
  2824. pcidev = pci_find_device(PCI_VENDOR_ID_NCR, ncr_chip_ids[i],
  2825.  pcidev);
  2826. if (pcidev == PCIDEV_NULL) {
  2827. ++j;
  2828. continue;
  2829. }
  2830. if (pci_enable_device(pcidev)) /* @!*!$&*!%-*#;! */
  2831. continue;
  2832. /* Some HW as the HP LH4 may report twice PCI devices */
  2833. for (i = 0; i < count ; i++) {
  2834. if (devtbl[i].slot.bus      == PciBusNumber(pcidev) && 
  2835.     devtbl[i].slot.device_fn == PciDeviceFn(pcidev))
  2836. break;
  2837. }
  2838. if (i != count) /* Ignore this device if we already have it */
  2839. continue;
  2840. devp = &devtbl[count];
  2841. devp->host_id = driver_setup.host_id;
  2842. devp->attach_done = 0;
  2843. if (sym53c8xx_pci_init(tpnt, pcidev, devp)) {
  2844. continue;
  2845. }
  2846. ++count;
  2847. #ifdef SCSI_NCR_NVRAM_SUPPORT
  2848. if (nvp) {
  2849. ncr_get_nvram(devp, nvp);
  2850. switch(nvp->type) {
  2851. case SCSI_NCR_SYMBIOS_NVRAM:
  2852. /*
  2853.  *   Switch to the other nvram buffer, so that 
  2854.  *   nvram0 will contain the first Symbios 
  2855.  *   format NVRAM content with boot order.
  2856.  */
  2857. nvp = &nvram;
  2858. msg = "with Symbios NVRAM";
  2859. break;
  2860. case SCSI_NCR_TEKRAM_NVRAM:
  2861. msg = "with Tekram NVRAM";
  2862. break;
  2863. }
  2864. }
  2865. #endif
  2866. #ifdef SCSI_NCR_PQS_PDS_SUPPORT
  2867. if (devp->pqs_pds)
  2868. msg = "(NCR PQS/PDS)";
  2869. #endif
  2870. printk(KERN_INFO NAME53C8XX ": 53c%s detected %sn",
  2871.        devp->chip.name, msg);
  2872. }
  2873. /*
  2874. **    If we have found a SYMBIOS NVRAM, use first the NVRAM boot 
  2875. **    sequence as device boot order.
  2876. **    check devices in the boot record against devices detected. 
  2877. **    attach devices if we find a match. boot table records that 
  2878. **    do not match any detected devices will be ignored. 
  2879. **    devices that do not match any boot table will not be attached
  2880. **    here but will attempt to be attached during the device table 
  2881. **    rescan.
  2882. */
  2883. #ifdef SCSI_NCR_NVRAM_SUPPORT
  2884. if (!nvp || nvram0.type != SCSI_NCR_SYMBIOS_NVRAM)
  2885. goto next;
  2886. for (i = 0; i < 4; i++) {
  2887. Symbios_host *h = &nvram0.data.Symbios.host[i];
  2888. for (j = 0 ; j < count ; j++) {
  2889. devp = &devtbl[j];
  2890. if (h->device_fn != devp->slot.device_fn ||
  2891.     h->bus_nr  != devp->slot.bus  ||
  2892.     h->device_id != devp->chip.device_id)
  2893. continue;
  2894. if (devp->attach_done)
  2895. continue;
  2896. if (h->flags & SYMBIOS_INIT_SCAN_AT_BOOT) {
  2897. ncr_get_nvram(devp, nvp);
  2898. if (!ncr_attach (tpnt, attach_count, devp))
  2899. attach_count++;
  2900. }
  2901. else if (!(driver_setup.use_nvram & 0x80))
  2902. printk(KERN_INFO NAME53C8XX
  2903.        ": 53c%s state OFF thus not attachedn",
  2904.        devp->chip.name);
  2905. else
  2906. continue;
  2907. devp->attach_done = 1;
  2908. break;
  2909. }
  2910. }
  2911. next:
  2912. #endif
  2913. /* 
  2914. **    Rescan device list to make sure all boards attached.
  2915. **    Devices without boot records will not be attached yet
  2916. **    so try to attach them here.
  2917. */
  2918. for (i= 0; i < count; i++) {
  2919. devp = &devtbl[i];
  2920. if (!devp->attach_done) {
  2921. #ifdef SCSI_NCR_NVRAM_SUPPORT
  2922. ncr_get_nvram(devp, nvp);
  2923. #endif
  2924. if (!ncr_attach (tpnt, attach_count, devp))
  2925. attach_count++;
  2926. }
  2927. }
  2928. m_free(devtbl, PAGE_SIZE, "devtbl");
  2929. return attach_count;
  2930. }
  2931. /*===================================================================
  2932. **   Read and check the PCI configuration for any detected NCR 
  2933. **   boards and save data for attaching after all boards have 
  2934. **   been detected.
  2935. **===================================================================
  2936. */
  2937. static int __init
  2938. sym53c8xx_pci_init(Scsi_Host_Template *tpnt, pcidev_t pdev, ncr_device *device)
  2939. {
  2940. u_short vendor_id, device_id, command, status_reg;
  2941. u_char cache_line_size, latency_timer;
  2942. u_char suggested_cache_line_size = 0;
  2943. u_char pci_fix_up = driver_setup.pci_fix_up;
  2944. u_char revision;
  2945. u_int irq;
  2946. u_long base, base_c, base_2, base_2_c, io_port; 
  2947. int i;
  2948. ncr_chip *chip;
  2949. printk(KERN_INFO NAME53C8XX ": at PCI bus %d, device %d, function %dn",
  2950. PciBusNumber(pdev),
  2951. (int) (PciDeviceFn(pdev) & 0xf8) >> 3,
  2952. (int) (PciDeviceFn(pdev) & 7));
  2953. /*
  2954. **    Read info from the PCI config space.
  2955. **    pci_read_config_xxx() functions are assumed to be used for 
  2956. **    successfully detected PCI devices.
  2957. */
  2958. vendor_id = PciVendorId(pdev);
  2959. device_id = PciDeviceId(pdev);
  2960. irq   = PciIrqLine(pdev);
  2961. i = pci_get_base_address(pdev, 0, &io_port);
  2962. io_port = pci_get_base_cookie(pdev, 0);
  2963. base_c = pci_get_base_cookie(pdev, i);
  2964. i = pci_get_base_address(pdev, i, &base);
  2965. base_2_c = pci_get_base_cookie(pdev, i);
  2966. (void) pci_get_base_address(pdev, i, &base_2);
  2967. pci_read_config_word(pdev, PCI_COMMAND, &command);
  2968. pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
  2969. pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache_line_size);
  2970. pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &latency_timer);
  2971. pci_read_config_word(pdev, PCI_STATUS, &status_reg);
  2972. #ifdef SCSI_NCR_PQS_PDS_SUPPORT
  2973. /*
  2974. **    Match the BUS number for PQS/PDS devices.
  2975. **    Read the SCSI ID from a special register mapped
  2976. **    into the configuration space of the individual
  2977. **    875s.  This register is set up by the PQS bios
  2978. */
  2979. for(i = 0; i < SCSI_NCR_MAX_PQS_BUS && pqs_bus[i] != -1; i++) {
  2980. u_char tmp;
  2981. if (pqs_bus[i] == PciBusNumber(pdev)) {
  2982. pci_read_config_byte(pdev, 0x84, &tmp);
  2983. device->pqs_pds = 1;
  2984. device->host_id = tmp;
  2985. break;
  2986. }
  2987. }
  2988. #endif /* SCSI_NCR_PQS_PDS_SUPPORT */
  2989. /*
  2990. ** If user excludes this chip, donnot initialize it.
  2991. */
  2992. for (i = 0 ; i < SCSI_NCR_MAX_EXCLUDES ; i++) {
  2993. if (driver_setup.excludes[i] ==
  2994. (io_port & PCI_BASE_ADDRESS_IO_MASK))
  2995. return -1;
  2996. }
  2997. /*
  2998. **    Check if the chip is supported
  2999. */
  3000. chip = 0;
  3001. for (i = 0; i < sizeof(ncr_chip_table)/sizeof(ncr_chip_table[0]); i++) {
  3002. if (device_id != ncr_chip_table[i].device_id)
  3003. continue;
  3004. if (revision > ncr_chip_table[i].revision_id)
  3005. continue;
  3006. if (!(ncr_chip_table[i].features & FE_LDSTR))
  3007. break;
  3008. chip = &device->chip;
  3009. memcpy(chip, &ncr_chip_table[i], sizeof(*chip));
  3010. chip->revision_id = revision;
  3011. break;
  3012. }
  3013. #ifdef SCSI_NCR_DYNAMIC_DMA_MAPPING
  3014. /* Configure DMA attributes.  For DAC capable boards, we can encode
  3015. ** 32+8 bits for SCSI DMA data addresses with the extra bits used
  3016. ** in the size field.  We use normal 32-bit PCI addresses for
  3017. ** descriptors.
  3018. */
  3019. if (chip && (chip->features & FE_DAC)) {
  3020. if (pci_set_dma_mask(pdev, (u64) 0xffffffffff))
  3021. chip->features &= ~FE_DAC_IN_USE;
  3022. else
  3023. chip->features |= FE_DAC_IN_USE;
  3024. }
  3025. if (chip && !(chip->features & FE_DAC_IN_USE)) {
  3026. if (pci_set_dma_mask(pdev, (u64) 0xffffffff)) {
  3027. printk(KERN_WARNING NAME53C8XX
  3028.        "32 BIT PCI BUS DMA ADDRESSING NOT SUPPORTEDn");
  3029. return -1;
  3030. }
  3031. }
  3032. #endif
  3033. /*
  3034. ** Ignore Symbios chips controlled by SISL RAID controller.
  3035. ** This controller sets value 0x52414944 at RAM end - 16.
  3036. */
  3037. #if defined(__i386__) && !defined(SCSI_NCR_PCI_MEM_NOT_SUPPORTED)
  3038. if (chip && (base_2_c & PCI_BASE_ADDRESS_MEM_MASK)) {
  3039. unsigned int ram_size, ram_val;
  3040. u_long ram_ptr;
  3041. if (chip->features & FE_RAM8K)
  3042. ram_size = 8192;
  3043. else
  3044. ram_size = 4096;
  3045. ram_ptr = remap_pci_mem(base_2_c & PCI_BASE_ADDRESS_MEM_MASK,
  3046. ram_size);
  3047. if (ram_ptr) {
  3048. ram_val = readl_raw(ram_ptr + ram_size - 16);
  3049. unmap_pci_mem(ram_ptr, ram_size);
  3050. if (ram_val == 0x52414944) {
  3051. printk(NAME53C8XX": not initializing, "
  3052.        "driven by SISL RAID controller.n");
  3053. return -1;
  3054. }
  3055. }
  3056. }
  3057. #endif /* i386 and PCI MEMORY accessible */
  3058. if (!chip) {
  3059. printk(NAME53C8XX ": not initializing, device not supportedn");
  3060. return -1;
  3061. }
  3062. #ifdef __powerpc__
  3063. /*
  3064. ** Fix-up for power/pc.
  3065. ** Should not be performed by the driver.
  3066. */
  3067. if ((command & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY))
  3068.     != (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
  3069. printk(NAME53C8XX ": setting%s%s...n",
  3070. (command & PCI_COMMAND_IO)     ? "" : " PCI_COMMAND_IO",
  3071. (command & PCI_COMMAND_MEMORY) ? "" : " PCI_COMMAND_MEMORY");
  3072. command |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
  3073. pci_write_config_word(pdev, PCI_COMMAND, command);
  3074. }
  3075. #if LINUX_VERSION_CODE < LinuxVersionCode(2,2,0)
  3076. if ( is_prep ) {
  3077. if (io_port >= 0x10000000) {
  3078. printk(NAME53C8XX ": reallocating io_port (Wacky IBM)");
  3079. io_port = (io_port & 0x00FFFFFF) | 0x01000000;
  3080. pci_write_config_dword(pdev,
  3081.        PCI_BASE_ADDRESS_0, io_port);
  3082. }
  3083. if (base >= 0x10000000) {
  3084. printk(NAME53C8XX ": reallocating base (Wacky IBM)");
  3085. base = (base & 0x00FFFFFF) | 0x01000000;
  3086. pci_write_config_dword(pdev,
  3087.        PCI_BASE_ADDRESS_1, base);
  3088. }
  3089. if (base_2 >= 0x10000000) {
  3090. printk(NAME53C8XX ": reallocating base2 (Wacky IBM)");
  3091. base_2 = (base_2 & 0x00FFFFFF) | 0x01000000;
  3092. pci_write_config_dword(pdev,
  3093.        PCI_BASE_ADDRESS_2, base_2);
  3094. }
  3095. }
  3096. #endif
  3097. #endif /* __powerpc__ */
  3098. #if defined(__i386__) && !defined(MODULE)
  3099. if (!cache_line_size) {
  3100. #if LINUX_VERSION_CODE < LinuxVersionCode(2,1,75)
  3101. extern char x86;
  3102. switch(x86) {
  3103. #else
  3104. switch(boot_cpu_data.x86) {
  3105. #endif
  3106. case 4: suggested_cache_line_size = 4; break;
  3107. case 6:
  3108. case 5: suggested_cache_line_size = 8; break;
  3109. }
  3110. }
  3111. #endif /* __i386__ */
  3112. /*
  3113. **    Check availability of IO space, memory space.
  3114. **    Enable master capability if not yet.
  3115. **
  3116. **    We shouldn't have to care about the IO region when 
  3117. **    we are using MMIO. But calling check_region() from 
  3118. **    both the ncr53c8xx and the sym53c8xx drivers prevents 
  3119. **    from attaching devices from the both drivers.
  3120. **    If you have a better idea, let me know.
  3121. */
  3122. /* #ifdef SCSI_NCR_IOMAPPED */
  3123. #if 1
  3124. if (!(command & PCI_COMMAND_IO)) { 
  3125. printk(NAME53C8XX ": I/O base address (0x%lx) disabled.n",
  3126. (long) io_port);
  3127. io_port = 0;
  3128. }
  3129. #endif
  3130. if (!(command & PCI_COMMAND_MEMORY)) {
  3131. printk(NAME53C8XX ": PCI_COMMAND_MEMORY not set.n");
  3132. base = 0;
  3133. base_2 = 0;
  3134. }
  3135. io_port &= PCI_BASE_ADDRESS_IO_MASK;
  3136. base &= PCI_BASE_ADDRESS_MEM_MASK;
  3137. base_2 &= PCI_BASE_ADDRESS_MEM_MASK;
  3138. /* #ifdef SCSI_NCR_IOMAPPED */
  3139. #if 1
  3140. if (io_port && check_region (io_port, 128)) {
  3141. printk(NAME53C8XX ": IO region 0x%lx[0..127] is in usen",
  3142. (long) io_port);
  3143. io_port = 0;
  3144. }
  3145. if (!io_port)
  3146. return -1;
  3147. #endif
  3148. #ifndef SCSI_NCR_IOMAPPED
  3149. if (!base) {
  3150. printk(NAME53C8XX ": MMIO base address disabled.n");
  3151. return -1;
  3152. }
  3153. #endif
  3154. /*
  3155. **    Set MASTER capable and PARITY bit, if not yet.
  3156. */
  3157. if ((command & (PCI_COMMAND_MASTER | PCI_COMMAND_PARITY))
  3158.      != (PCI_COMMAND_MASTER | PCI_COMMAND_PARITY)) {
  3159. printk(NAME53C8XX ": setting%s%s...(fix-up)n",
  3160. (command & PCI_COMMAND_MASTER) ? "" : " PCI_COMMAND_MASTER",
  3161. (command & PCI_COMMAND_PARITY) ? "" : " PCI_COMMAND_PARITY");
  3162. command |= (PCI_COMMAND_MASTER | PCI_COMMAND_PARITY);
  3163. pci_write_config_word(pdev, PCI_COMMAND, command);
  3164. }
  3165. /*
  3166. **    Fix some features according to driver setup.
  3167. */
  3168. if (!(driver_setup.special_features & 1))
  3169. chip->features &= ~FE_SPECIAL_SET;
  3170. else {
  3171. if (driver_setup.special_features & 2)
  3172. chip->features &= ~FE_WRIE;
  3173. if (driver_setup.special_features & 4)
  3174. chip->features &= ~FE_NOPM;
  3175. }
  3176. /*
  3177. ** Work around for errant bit in 895A. The 66Mhz
  3178. ** capable bit is set erroneously. Clear this bit.
  3179. ** (Item 1 DEL 533)
  3180. **
  3181. ** Make sure Config space and Features agree.
  3182. **
  3183. ** Recall: writes are not normal to status register -
  3184. ** write a 1 to clear and a 0 to leave unchanged.
  3185. ** Can only reset bits.
  3186. */
  3187. if (chip->features & FE_66MHZ) {
  3188. if (!(status_reg & PCI_STATUS_66MHZ))
  3189. chip->features &= ~FE_66MHZ;
  3190. }
  3191. else {
  3192. if (status_reg & PCI_STATUS_66MHZ) {
  3193. status_reg = PCI_STATUS_66MHZ;
  3194. pci_write_config_word(pdev, PCI_STATUS, status_reg);
  3195. pci_read_config_word(pdev, PCI_STATUS, &status_reg);
  3196. }
  3197. }
  3198. /*
  3199. ** Some features are required to be enabled in order to 
  3200. ** work around some chip problems. :) ;)
  3201. ** (ITEM 12 of a DEL about the 896 I haven't yet).
  3202. ** We must ensure the chip will use WRITE AND INVALIDATE.
  3203. ** The revision number limit is for now arbitrary.
  3204. */
  3205. if (device_id == PCI_DEVICE_ID_NCR_53C896 && revision <= 0x10) {
  3206. chip->features |= (FE_WRIE | FE_CLSE);
  3207. pci_fix_up |=  3; /* Force appropriate PCI fix-up */
  3208. }
  3209. #ifdef SCSI_NCR_PCI_FIX_UP_SUPPORT
  3210. /*
  3211. **    Try to fix up PCI config according to wished features.
  3212. */
  3213. if ((pci_fix_up & 1) && (chip->features & FE_CLSE) && 
  3214.     !cache_line_size && suggested_cache_line_size) {
  3215. cache_line_size = suggested_cache_line_size;
  3216. pci_write_config_byte(pdev,
  3217.       PCI_CACHE_LINE_SIZE, cache_line_size);
  3218. printk(NAME53C8XX ": PCI_CACHE_LINE_SIZE set to %d (fix-up).n",
  3219. cache_line_size);
  3220. }
  3221. if ((pci_fix_up & 2) && cache_line_size &&
  3222.     (chip->features & FE_WRIE) && !(command & PCI_COMMAND_INVALIDATE)) {
  3223. printk(NAME53C8XX": setting PCI_COMMAND_INVALIDATE (fix-up)n");
  3224. command |= PCI_COMMAND_INVALIDATE;
  3225. pci_write_config_word(pdev, PCI_COMMAND, command);
  3226. }
  3227. /*
  3228. **    Tune PCI LATENCY TIMER according to burst max length transfer.
  3229. **    (latency timer >= burst length + 6, we add 10 to be quite sure)
  3230. */
  3231. if (chip->burst_max && (latency_timer == 0 || (pci_fix_up & 4))) {
  3232. uchar lt = (1 << chip->burst_max) + 6 + 10;
  3233. if (latency_timer < lt) {
  3234. printk(NAME53C8XX 
  3235.        ": changing PCI_LATENCY_TIMER from %d to %d.n",
  3236.        (int) latency_timer, (int) lt);
  3237. latency_timer = lt;
  3238. pci_write_config_byte(pdev,
  3239.       PCI_LATENCY_TIMER, latency_timer);
  3240. }
  3241. }
  3242. #endif /* SCSI_NCR_PCI_FIX_UP_SUPPORT */
  3243.   /*
  3244. **    Initialise ncr_device structure with items required by ncr_attach.
  3245. */
  3246. device->pdev = pdev;
  3247. device->slot.bus = PciBusNumber(pdev);
  3248. device->slot.device_fn = PciDeviceFn(pdev);
  3249. device->slot.base = base;
  3250. device->slot.base_2 = base_2;
  3251. device->slot.base_c = base_c;
  3252. device->slot.base_2_c = base_2_c;
  3253. device->slot.io_port = io_port;
  3254. device->slot.irq = irq;
  3255. device->attach_done = 0;
  3256. return 0;
  3257. }
  3258. /*===================================================================
  3259. **    Detect and try to read SYMBIOS and TEKRAM NVRAM.
  3260. **
  3261. **    Data can be used to order booting of boards.
  3262. **
  3263. **    Data is saved in ncr_device structure if NVRAM found. This
  3264. **    is then used to find drive boot order for ncr_attach().
  3265. **
  3266. **    NVRAM data is passed to Scsi_Host_Template later during 
  3267. **    ncr_attach() for any device set up.
  3268. *===================================================================
  3269. */
  3270. #ifdef SCSI_NCR_NVRAM_SUPPORT
  3271. static void __init ncr_get_nvram(ncr_device *devp, ncr_nvram *nvp)
  3272. {
  3273. devp->nvram = nvp;
  3274. if (!nvp)
  3275. return;
  3276. /*
  3277. **    Get access to chip IO registers
  3278. */
  3279. #ifdef SCSI_NCR_IOMAPPED
  3280. request_region(devp->slot.io_port, 128, NAME53C8XX);
  3281. devp->slot.base_io = devp->slot.io_port;
  3282. #else
  3283. devp->slot.reg = 
  3284. (struct ncr_reg *) remap_pci_mem(devp->slot.base_c, 128);
  3285. if (!devp->slot.reg)
  3286. return;
  3287. #endif
  3288. /*
  3289. **    Try to read SYMBIOS nvram.
  3290. **    Try to read TEKRAM nvram if Symbios nvram not found.
  3291. */
  3292. if (!sym_read_Symbios_nvram(&devp->slot, &nvp->data.Symbios))
  3293. nvp->type = SCSI_NCR_SYMBIOS_NVRAM;
  3294. else if (!sym_read_Tekram_nvram(&devp->slot, devp->chip.device_id,
  3295. &nvp->data.Tekram))
  3296. nvp->type = SCSI_NCR_TEKRAM_NVRAM;
  3297. else {
  3298. nvp->type = 0;
  3299. devp->nvram = 0;
  3300. }
  3301. /*
  3302. ** Release access to chip IO registers
  3303. */
  3304. #ifdef SCSI_NCR_IOMAPPED
  3305. release_region(devp->slot.base_io, 128);
  3306. #else
  3307. unmap_pci_mem((u_long) devp->slot.reg, 128ul);
  3308. #endif
  3309. }
  3310. #endif /* SCSI_NCR_NVRAM_SUPPORT */
  3311. /*
  3312. **   Linux select queue depths function
  3313. */
  3314. #define DEF_DEPTH (driver_setup.default_tags)
  3315. #define ALL_TARGETS -2
  3316. #define NO_TARGET -1
  3317. #define ALL_LUNS -2
  3318. #define NO_LUN -1
  3319. static int device_queue_depth(ncb_p np, int target, int lun)
  3320. {
  3321. int c, h, t, u, v;
  3322. char *p = driver_setup.tag_ctrl;
  3323. char *ep;
  3324. h = -1;
  3325. t = NO_TARGET;
  3326. u = NO_LUN;
  3327. while ((c = *p++) != 0) {
  3328. v = simple_strtoul(p, &ep, 0);
  3329. switch(c) {
  3330. case '/':
  3331. ++h;
  3332. t = ALL_TARGETS;
  3333. u = ALL_LUNS;
  3334. break;
  3335. case 't':
  3336. if (t != target)
  3337. t = (target == v) ? v : NO_TARGET;
  3338. u = ALL_LUNS;
  3339. break;
  3340. case 'u':
  3341. if (u != lun)
  3342. u = (lun == v) ? v : NO_LUN;
  3343. break;
  3344. case 'q':
  3345. if (h == np->unit &&
  3346. (t == ALL_TARGETS || t == target) &&
  3347. (u == ALL_LUNS    || u == lun))
  3348. return v;
  3349. break;
  3350. case '-':
  3351. t = ALL_TARGETS;
  3352. u = ALL_LUNS;
  3353. break;
  3354. default:
  3355. break;
  3356. }
  3357. p = ep;
  3358. }
  3359. return DEF_DEPTH;
  3360. }
  3361. static void sym53c8xx_select_queue_depths(struct Scsi_Host *host, struct scsi_device *devlist)
  3362. {
  3363. struct scsi_device *device;
  3364. for (device = devlist; device; device = device->next) {
  3365. ncb_p np;
  3366. tcb_p tp;
  3367. lcb_p lp;
  3368. int numtags;
  3369. if (device->host != host)
  3370. continue;
  3371. np = ((struct host_data *) host->hostdata)->ncb;
  3372. tp = &np->target[device->id];
  3373. lp = ncr_lp(np, tp, device->lun);
  3374. /*
  3375. ** Select queue depth from driver setup.
  3376. ** Donnot use more than configured by user.
  3377. ** Use at least 2.
  3378. ** Donnot use more than our maximum.
  3379. */
  3380. numtags = device_queue_depth(np, device->id, device->lun);
  3381. if (numtags > tp->usrtags)
  3382. numtags = tp->usrtags;
  3383. if (!device->tagged_supported)
  3384. numtags = 1;
  3385. device->queue_depth = numtags;
  3386. if (device->queue_depth < 2)
  3387. device->queue_depth = 2;
  3388. if (device->queue_depth > MAX_TAGS)
  3389. device->queue_depth = MAX_TAGS;
  3390. /*
  3391. ** Since the queue depth is not tunable under Linux,
  3392. ** we need to know this value in order not to 
  3393. ** announce stupid things to user.
  3394. */
  3395. if (lp) {
  3396. lp->numtags = lp->maxtags = numtags;
  3397. lp->scdev_depth = device->queue_depth;
  3398. }
  3399. ncr_setup_tags (np, device->id, device->lun);
  3400. #ifdef DEBUG_SYM53C8XX
  3401. printk("sym53c8xx_select_queue_depth: host=%d, id=%d, lun=%d, depth=%dn",
  3402. np->unit, device->id, device->lun, device->queue_depth);
  3403. #endif
  3404. }
  3405. }
  3406. /*
  3407. **   Linux entry point for info() function
  3408. */
  3409. const char *sym53c8xx_info (struct Scsi_Host *host)
  3410. {
  3411. return SCSI_NCR_DRIVER_NAME;
  3412. }
  3413. /*
  3414. **   Linux entry point of queuecommand() function
  3415. */
  3416. int sym53c8xx_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *))
  3417. {
  3418.      ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
  3419.      unsigned long flags;
  3420.      int sts;
  3421. #ifdef DEBUG_SYM53C8XX
  3422. printk("sym53c8xx_queue_commandn");
  3423. #endif
  3424.      cmd->scsi_done     = done;
  3425.      cmd->host_scribble = NULL;
  3426.      cmd->SCp.ptr       = NULL;
  3427.      cmd->SCp.buffer    = NULL;
  3428. #ifdef SCSI_NCR_DYNAMIC_DMA_MAPPING
  3429.      __data_mapped(cmd) = 0;
  3430.      __data_mapping(cmd) = 0;
  3431. #endif
  3432.      NCR_LOCK_NCB(np, flags);
  3433.      if ((sts = ncr_queue_command(np, cmd)) != DID_OK) {
  3434.   SetScsiResult(cmd, sts, 0);
  3435. #ifdef DEBUG_SYM53C8XX
  3436. printk("sym53c8xx : command not queued - result=%dn", sts);
  3437. #endif
  3438.      }
  3439. #ifdef DEBUG_SYM53C8XX
  3440.      else
  3441. printk("sym53c8xx : command successfully queuedn");
  3442. #endif
  3443.      NCR_UNLOCK_NCB(np, flags);
  3444.      if (sts != DID_OK) {
  3445.           unmap_scsi_data(np, cmd);
  3446.           done(cmd);
  3447.      }
  3448.      return sts;
  3449. }
  3450. /*
  3451. **   Linux entry point of the interrupt handler.
  3452. **   Since linux versions > 1.3.70, we trust the kernel for 
  3453. **   passing the internal host descriptor as 'dev_id'.
  3454. **   Otherwise, we scan the host list and call the interrupt 
  3455. **   routine for each host that uses this IRQ.
  3456. */
  3457. static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs)
  3458. {
  3459.      unsigned long flags;
  3460.      ncb_p np = (ncb_p) dev_id;
  3461.      Scsi_Cmnd *done_list;
  3462. #ifdef DEBUG_SYM53C8XX
  3463.      printk("sym53c8xx : interrupt receivedn");
  3464. #endif
  3465.      if (DEBUG_FLAGS & DEBUG_TINY) printk ("[");
  3466.      NCR_LOCK_NCB(np, flags);
  3467.      ncr_exception(np);
  3468.      done_list     = np->done_list;
  3469.      np->done_list = 0;
  3470.      NCR_UNLOCK_NCB(np, flags);
  3471.      if (DEBUG_FLAGS & DEBUG_TINY) printk ("]n");
  3472.      if (done_list) {
  3473.           NCR_LOCK_SCSI_DONE(np, flags);
  3474.           ncr_flush_done_cmds(done_list);
  3475.           NCR_UNLOCK_SCSI_DONE(np, flags);
  3476.      }
  3477. }
  3478. /*
  3479. **   Linux entry point of the timer handler
  3480. */
  3481. static void sym53c8xx_timeout(unsigned long npref)
  3482. {
  3483.      ncb_p np = (ncb_p) npref;
  3484.      unsigned long flags;
  3485.      Scsi_Cmnd *done_list;
  3486.      NCR_LOCK_NCB(np, flags);
  3487.      ncr_timeout((ncb_p) np);
  3488.      done_list     = np->done_list;
  3489.      np->done_list = 0;
  3490.      NCR_UNLOCK_NCB(np, flags);
  3491.      if (done_list) {
  3492.           NCR_LOCK_SCSI_DONE(np, flags);
  3493.           ncr_flush_done_cmds(done_list);
  3494.           NCR_UNLOCK_SCSI_DONE(np, flags);
  3495.      }
  3496. }
  3497. /*
  3498. **   Linux entry point of reset() function
  3499. */
  3500. #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
  3501. int sym53c8xx_reset(Scsi_Cmnd *cmd, unsigned int reset_flags)
  3502. #else
  3503. int sym53c8xx_reset(Scsi_Cmnd *cmd)
  3504. #endif
  3505. {
  3506. ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
  3507. int sts;
  3508. unsigned long flags;
  3509. Scsi_Cmnd *done_list;
  3510. #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
  3511. printk("sym53c8xx_reset: pid=%lu reset_flags=%x serial_number=%ld serial_number_at_timeout=%ldn",
  3512. cmd->pid, reset_flags, cmd->serial_number, cmd->serial_number_at_timeout);
  3513. #else
  3514. printk("sym53c8xx_reset: command pid %lun", cmd->pid);
  3515. #endif
  3516. NCR_LOCK_NCB(np, flags);
  3517. /*
  3518.  * We have to just ignore reset requests in some situations.
  3519.  */
  3520. #if defined SCSI_RESET_NOT_RUNNING
  3521. if (cmd->serial_number != cmd->serial_number_at_timeout) {
  3522. sts = SCSI_RESET_NOT_RUNNING;
  3523. goto out;
  3524. }
  3525. #endif
  3526. /*
  3527.  * If the mid-level driver told us reset is synchronous, it seems 
  3528.  * that we must call the done() callback for the involved command, 
  3529.  * even if this command was not queued to the low-level driver, 
  3530.  * before returning SCSI_RESET_SUCCESS.
  3531.  */
  3532. #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
  3533. sts = ncr_reset_bus(np, cmd,
  3534. (reset_flags & (SCSI_RESET_SYNCHRONOUS | SCSI_RESET_ASYNCHRONOUS)) == SCSI_RESET_SYNCHRONOUS);
  3535. #else
  3536. sts = ncr_reset_bus(np, cmd, 0);
  3537. #endif
  3538. /*
  3539.  * Since we always reset the controller, when we return success, 
  3540.  * we add this information to the return code.
  3541.  */
  3542. #if defined SCSI_RESET_HOST_RESET
  3543. if (sts == SCSI_RESET_SUCCESS)
  3544. sts |= SCSI_RESET_HOST_RESET;
  3545. #endif
  3546. out:
  3547. done_list     = np->done_list;
  3548. np->done_list = 0;
  3549. NCR_UNLOCK_NCB(np, flags);
  3550. ncr_flush_done_cmds(done_list);
  3551. return sts;
  3552. }
  3553. /*
  3554. **   Linux entry point of abort() function
  3555. */
  3556. int sym53c8xx_abort(Scsi_Cmnd *cmd)
  3557. {
  3558. ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
  3559. int sts;
  3560. unsigned long flags;
  3561. Scsi_Cmnd *done_list;
  3562. #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
  3563. printk("sym53c8xx_abort: pid=%lu serial_number=%ld serial_number_at_timeout=%ldn",
  3564. cmd->pid, cmd->serial_number, cmd->serial_number_at_timeout);
  3565. #else
  3566. printk("sym53c8xx_abort: command pid %lun", cmd->pid);
  3567. #endif
  3568. NCR_LOCK_NCB(np, flags);
  3569. #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
  3570. /*
  3571.  * We have to just ignore abort requests in some situations.
  3572.  */
  3573. if (cmd->serial_number != cmd->serial_number_at_timeout) {
  3574. sts = SCSI_ABORT_NOT_RUNNING;
  3575. goto out;
  3576. }
  3577. #endif
  3578. sts = ncr_abort_command(np, cmd);
  3579. out:
  3580. done_list     = np->done_list;
  3581. np->done_list = 0;
  3582. NCR_UNLOCK_NCB(np, flags);
  3583. ncr_flush_done_cmds(done_list);
  3584. return sts;
  3585. }
  3586. #ifdef MODULE
  3587. int sym53c8xx_release(struct Scsi_Host *host)
  3588. {
  3589. #ifdef DEBUG_SYM53C8XX
  3590. printk("sym53c8xx : releasen");
  3591. #endif
  3592.      ncr_detach(((struct host_data *) host->hostdata)->ncb);
  3593.      return 1;
  3594. }
  3595. #endif
  3596. /*
  3597. ** Scsi command waiting list management.
  3598. **
  3599. ** It may happen that we cannot insert a scsi command into the start queue,
  3600. ** in the following circumstances.
  3601. **  Too few preallocated ccb(s), 
  3602. ** maxtags < cmd_per_lun of the Linux host control block,
  3603. ** etc...
  3604. ** Such scsi commands are inserted into a waiting list.
  3605. ** When a scsi command complete, we try to requeue the commands of the
  3606. ** waiting list.
  3607. */
  3608. #define next_wcmd host_scribble
  3609. static void insert_into_waiting_list(ncb_p np, Scsi_Cmnd *cmd)
  3610. {
  3611. Scsi_Cmnd *wcmd;
  3612. #ifdef DEBUG_WAITING_LIST
  3613. printk("%s: cmd %lx inserted into waiting listn", ncr_name(np), (u_long) cmd);
  3614. #endif
  3615. cmd->next_wcmd = 0;
  3616. if (!(wcmd = np->waiting_list)) np->waiting_list = cmd;
  3617. else {
  3618. while ((wcmd->next_wcmd) != 0)
  3619. wcmd = (Scsi_Cmnd *) wcmd->next_wcmd;
  3620. wcmd->next_wcmd = (char *) cmd;
  3621. }
  3622. }
  3623. static Scsi_Cmnd *retrieve_from_waiting_list(int to_remove, ncb_p np, Scsi_Cmnd *cmd)
  3624. {
  3625. Scsi_Cmnd **pcmd = &np->waiting_list;
  3626. while (*pcmd) {
  3627. if (cmd == *pcmd) {
  3628. if (to_remove) {
  3629. *pcmd = (Scsi_Cmnd *) cmd->next_wcmd;
  3630. cmd->next_wcmd = 0;
  3631. }
  3632. #ifdef DEBUG_WAITING_LIST
  3633. printk("%s: cmd %lx retrieved from waiting listn", ncr_name(np), (u_long) cmd);
  3634. #endif
  3635. return cmd;
  3636. }
  3637. pcmd = (Scsi_Cmnd **) &(*pcmd)->next_wcmd;
  3638. }
  3639. return 0;
  3640. }
  3641. static void process_waiting_list(ncb_p np, int sts)
  3642. {
  3643. Scsi_Cmnd *waiting_list, *wcmd;
  3644. waiting_list = np->waiting_list;
  3645. np->waiting_list = 0;
  3646. #ifdef DEBUG_WAITING_LIST
  3647. if (waiting_list) printk("%s: waiting_list=%lx processing sts=%dn", ncr_name(np), (u_long) waiting_list, sts);
  3648. #endif
  3649. while ((wcmd = waiting_list) != 0) {
  3650. waiting_list = (Scsi_Cmnd *) wcmd->next_wcmd;
  3651. wcmd->next_wcmd = 0;
  3652. if (sts == DID_OK) {
  3653. #ifdef DEBUG_WAITING_LIST
  3654. printk("%s: cmd %lx trying to requeuen", ncr_name(np), (u_long) wcmd);
  3655. #endif
  3656. sts = ncr_queue_command(np, wcmd);
  3657. }
  3658. if (sts != DID_OK) {
  3659. #ifdef DEBUG_WAITING_LIST
  3660. printk("%s: cmd %lx done forced sts=%dn", ncr_name(np), (u_long) wcmd, sts);
  3661. #endif
  3662. SetScsiResult(wcmd, sts, 0);
  3663. ncr_queue_done_cmd(np, wcmd);
  3664. }
  3665. }
  3666. }
  3667. #undef next_wcmd
  3668. #ifdef SCSI_NCR_PROC_INFO_SUPPORT
  3669. /*=========================================================================
  3670. ** Proc file system stuff
  3671. **
  3672. ** A read operation returns adapter information.
  3673. ** A write operation is a control command.
  3674. ** The string is parsed in the driver code and the command is passed 
  3675. ** to the ncr_usercmd() function.
  3676. **=========================================================================
  3677. */
  3678. #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
  3679. #define is_digit(c) ((c) >= '0' && (c) <= '9')
  3680. #define digit_to_bin(c) ((c) - '0')
  3681. #define is_space(c) ((c) == ' ' || (c) == 't')
  3682. static int skip_spaces(char *ptr, int len)
  3683. {
  3684. int cnt, c;
  3685. for (cnt = len; cnt > 0 && (c = *ptr++) && is_space(c); cnt--);
  3686. return (len - cnt);
  3687. }
  3688. static int get_int_arg(char *ptr, int len, u_long *pv)
  3689. {
  3690. int cnt, c;
  3691. u_long v;
  3692. for (v = 0, cnt = len; cnt > 0 && (c = *ptr++) && is_digit(c); cnt--) {
  3693. v = (v * 10) + digit_to_bin(c);
  3694. }
  3695. if (pv)
  3696. *pv = v;
  3697. return (len - cnt);
  3698. }
  3699. static int is_keyword(char *ptr, int len, char *verb)
  3700. {
  3701. int verb_len = strlen(verb);
  3702. if (len >= strlen(verb) && !memcmp(verb, ptr, verb_len))
  3703. return verb_len;
  3704. else
  3705. return 0;
  3706. }
  3707. #define SKIP_SPACES(min_spaces)
  3708. if ((arg_len = skip_spaces(ptr, len)) < (min_spaces))
  3709. return -EINVAL;
  3710. ptr += arg_len; len -= arg_len;
  3711. #define GET_INT_ARG(v)
  3712. if (!(arg_len = get_int_arg(ptr, len, &(v))))
  3713. return -EINVAL;
  3714. ptr += arg_len; len -= arg_len;
  3715. /*
  3716. ** Parse a control command
  3717. */
  3718. static int ncr_user_command(ncb_p np, char *buffer, int length)
  3719. {
  3720. char *ptr = buffer;
  3721. int len = length;
  3722. struct usrcmd  *uc = &np->user;
  3723. int arg_len;
  3724. u_long  target;
  3725. bzero(uc, sizeof(*uc));
  3726. if (len > 0 && ptr[len-1] == 'n')
  3727. --len;
  3728. if ((arg_len = is_keyword(ptr, len, "setsync")) != 0)
  3729. uc->cmd = UC_SETSYNC;
  3730. else if ((arg_len = is_keyword(ptr, len, "settags")) != 0)
  3731. uc->cmd = UC_SETTAGS;
  3732. else if ((arg_len = is_keyword(ptr, len, "setorder")) != 0)
  3733. uc->cmd = UC_SETORDER;
  3734. else if ((arg_len = is_keyword(ptr, len, "setverbose")) != 0)
  3735. uc->cmd = UC_SETVERBOSE;
  3736. else if ((arg_len = is_keyword(ptr, len, "setwide")) != 0)
  3737. uc->cmd = UC_SETWIDE;
  3738. else if ((arg_len = is_keyword(ptr, len, "setdebug")) != 0)
  3739. uc->cmd = UC_SETDEBUG;
  3740. else if ((arg_len = is_keyword(ptr, len, "setflag")) != 0)
  3741. uc->cmd = UC_SETFLAG;
  3742. else if ((arg_len = is_keyword(ptr, len, "resetdev")) != 0)
  3743. uc->cmd = UC_RESETDEV;
  3744. else if ((arg_len = is_keyword(ptr, len, "cleardev")) != 0)
  3745. uc->cmd = UC_CLEARDEV;
  3746. else
  3747. arg_len = 0;
  3748. #ifdef DEBUG_PROC_INFO
  3749. printk("ncr_user_command: arg_len=%d, cmd=%ldn", arg_len, uc->cmd);
  3750. #endif
  3751. if (!arg_len)
  3752. return -EINVAL;
  3753. ptr += arg_len; len -= arg_len;
  3754. switch(uc->cmd) {
  3755. case UC_SETSYNC:
  3756. case UC_SETTAGS:
  3757. case UC_SETWIDE:
  3758. case UC_SETFLAG:
  3759. case UC_RESETDEV:
  3760. case UC_CLEARDEV:
  3761. SKIP_SPACES(1);
  3762. if ((arg_len = is_keyword(ptr, len, "all")) != 0) {
  3763. ptr += arg_len; len -= arg_len;
  3764. uc->target = ~0;
  3765. } else {
  3766. GET_INT_ARG(target);
  3767. uc->target = (1<<target);
  3768. #ifdef DEBUG_PROC_INFO
  3769. printk("ncr_user_command: target=%ldn", target);
  3770. #endif
  3771. }
  3772. break;
  3773. }
  3774. switch(uc->cmd) {
  3775. case UC_SETVERBOSE:
  3776. case UC_SETSYNC:
  3777. case UC_SETTAGS:
  3778. case UC_SETWIDE:
  3779. SKIP_SPACES(1);
  3780. GET_INT_ARG(uc->data);
  3781. #ifdef DEBUG_PROC_INFO
  3782. printk("ncr_user_command: data=%ldn", uc->data);
  3783. #endif
  3784. break;
  3785. case UC_SETORDER:
  3786. SKIP_SPACES(1);
  3787. if ((arg_len = is_keyword(ptr, len, "simple")))
  3788. uc->data = M_SIMPLE_TAG;
  3789. else if ((arg_len = is_keyword(ptr, len, "ordered")))
  3790. uc->data = M_ORDERED_TAG;
  3791. else if ((arg_len = is_keyword(ptr, len, "default")))
  3792. uc->data = 0;
  3793. else
  3794. return -EINVAL;
  3795. break;
  3796. case UC_SETDEBUG:
  3797. while (len > 0) {
  3798. SKIP_SPACES(1);
  3799. if ((arg_len = is_keyword(ptr, len, "alloc")))
  3800. uc->data |= DEBUG_ALLOC;
  3801. else if ((arg_len = is_keyword(ptr, len, "phase")))
  3802. uc->data |= DEBUG_PHASE;
  3803. else if ((arg_len = is_keyword(ptr, len, "queue")))
  3804. uc->data |= DEBUG_QUEUE;
  3805. else if ((arg_len = is_keyword(ptr, len, "result")))
  3806. uc->data |= DEBUG_RESULT;
  3807. else if ((arg_len = is_keyword(ptr, len, "pointer")))
  3808. uc->data |= DEBUG_POINTER;
  3809. else if ((arg_len = is_keyword(ptr, len, "script")))
  3810. uc->data |= DEBUG_SCRIPT;
  3811. else if ((arg_len = is_keyword(ptr, len, "tiny")))
  3812. uc->data |= DEBUG_TINY;
  3813. else if ((arg_len = is_keyword(ptr, len, "timing")))
  3814. uc->data |= DEBUG_TIMING;
  3815. else if ((arg_len = is_keyword(ptr, len, "nego")))
  3816. uc->data |= DEBUG_NEGO;
  3817. else if ((arg_len = is_keyword(ptr, len, "tags")))
  3818. uc->data |= DEBUG_TAGS;
  3819. else
  3820. return -EINVAL;
  3821. ptr += arg_len; len -= arg_len;
  3822. }
  3823. #ifdef DEBUG_PROC_INFO
  3824. printk("ncr_user_command: data=%ldn", uc->data);
  3825. #endif
  3826. break;
  3827. case UC_SETFLAG:
  3828. while (len > 0) {
  3829. SKIP_SPACES(1);
  3830. if ((arg_len = is_keyword(ptr, len, "trace")))
  3831. uc->data |= UF_TRACE;
  3832. else if ((arg_len = is_keyword(ptr, len, "no_disc")))
  3833. uc->data |= UF_NODISC;
  3834. else
  3835. return -EINVAL;
  3836. ptr += arg_len; len -= arg_len;
  3837. }
  3838. break;
  3839. default:
  3840. break;
  3841. }
  3842. if (len)
  3843. return -EINVAL;
  3844. else {
  3845. long flags;
  3846. NCR_LOCK_NCB(np, flags);
  3847. ncr_usercmd (np);
  3848. NCR_UNLOCK_NCB(np, flags);
  3849. }
  3850. return length;
  3851. }
  3852. #endif /* SCSI_NCR_USER_COMMAND_SUPPORT */
  3853. #ifdef SCSI_NCR_USER_INFO_SUPPORT
  3854. struct info_str
  3855. {
  3856. char *buffer;
  3857. int length;
  3858. int offset;
  3859. int pos;
  3860. };
  3861. static void copy_mem_info(struct info_str *info, char *data, int len)
  3862. {
  3863. if (info->pos + len > info->length)
  3864. len = info->length - info->pos;
  3865. if (info->pos + len < info->offset) {
  3866. info->pos += len;
  3867. return;
  3868. }
  3869. if (info->pos < info->offset) {
  3870. data += (info->offset - info->pos);
  3871. len  -= (info->offset - info->pos);
  3872. }
  3873. if (len > 0) {
  3874. memcpy(info->buffer + info->pos, data, len);
  3875. info->pos += len;
  3876. }
  3877. }
  3878. static int copy_info(struct info_str *info, char *fmt, ...)
  3879. {
  3880. va_list args;
  3881. char buf[81];
  3882. int len;
  3883. va_start(args, fmt);
  3884. len = vsprintf(buf, fmt, args);
  3885. va_end(args);
  3886. copy_mem_info(info, buf, len);
  3887. return len;
  3888. }
  3889. /*
  3890. ** Copy formatted information into the input buffer.
  3891. */
  3892. static int ncr_host_info(ncb_p np, char *ptr, off_t offset, int len)
  3893. {
  3894. struct info_str info;
  3895. info.buffer = ptr;
  3896. info.length = len;
  3897. info.offset = offset;
  3898. info.pos = 0;
  3899. copy_info(&info, "General information:n");
  3900. copy_info(&info, "  Chip " NAME53C "%s, device id 0x%x, "
  3901.  "revision id 0x%xn",
  3902.  np->chip_name, np->device_id, np->revision_id);
  3903. copy_info(&info, "  On PCI bus %d, device %d, function %d, "
  3904. #ifdef __sparc__
  3905. "IRQ %sn",
  3906. #else
  3907. "IRQ %dn",
  3908. #endif
  3909. np->bus, (np->device_fn & 0xf8) >> 3, np->device_fn & 7,
  3910. #ifdef __sparc__
  3911. __irq_itoa(np->irq));
  3912. #else
  3913. (int) np->irq);
  3914. #endif
  3915. copy_info(&info, "  Synchronous period factor %d, "
  3916.  "max commands per lun %dn",
  3917.  (int) np->minsync, MAX_TAGS);
  3918. if (driver_setup.debug || driver_setup.verbose > 1) {
  3919. copy_info(&info, "  Debug flags 0x%x, verbosity level %dn",
  3920.   driver_setup.debug, driver_setup.verbose);
  3921. }
  3922. return info.pos > info.offset? info.pos - info.offset : 0;
  3923. }
  3924. #endif /* SCSI_NCR_USER_INFO_SUPPORT */
  3925. /*
  3926. ** Entry point of the scsi proc fs of the driver.
  3927. ** - func = 0 means read  (returns adapter infos)
  3928. ** - func = 1 means write (parse user control command)
  3929. */
  3930. static int sym53c8xx_proc_info(char *buffer, char **start, off_t offset,
  3931. int length, int hostno, int func)
  3932. {
  3933. struct Scsi_Host *host;
  3934. struct host_data *host_data;
  3935. ncb_p ncb = 0;
  3936. int retv;
  3937. #ifdef DEBUG_PROC_INFO
  3938. printk("sym53c8xx_proc_info: hostno=%d, func=%dn", hostno, func);
  3939. #endif
  3940. for (host = first_host; host; host = host->next) {
  3941. if (host->hostt != first_host->hostt)
  3942. continue;
  3943. if (host->host_no == hostno) {
  3944. host_data = (struct host_data *) host->hostdata;
  3945. ncb = host_data->ncb;
  3946. break;
  3947. }
  3948. }
  3949. if (!ncb)
  3950. return -EINVAL;
  3951. if (func) {
  3952. #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
  3953. retv = ncr_user_command(ncb, buffer, length);
  3954. #else
  3955. retv = -EINVAL;
  3956. #endif
  3957. }
  3958. else {
  3959. if (start)
  3960. *start = buffer;
  3961. #ifdef SCSI_NCR_USER_INFO_SUPPORT
  3962. retv = ncr_host_info(ncb, buffer, offset, length);
  3963. #else
  3964. retv = -EINVAL;
  3965. #endif
  3966. }
  3967. return retv;
  3968. }
  3969. /*=========================================================================
  3970. ** End of proc file system stuff
  3971. **=========================================================================
  3972. */
  3973. #endif
  3974. #ifdef SCSI_NCR_NVRAM_SUPPORT
  3975. /*
  3976.  *  24C16 EEPROM reading.
  3977.  *
  3978.  *  GPOI0 - data in/data out
  3979.  *  GPIO1 - clock
  3980.  *  Symbios NVRAM wiring now also used by Tekram.
  3981.  */
  3982. #define SET_BIT 0
  3983. #define CLR_BIT 1
  3984. #define SET_CLK 2
  3985. #define CLR_CLK 3
  3986. /*
  3987.  *  Set/clear data/clock bit in GPIO0
  3988.  */
  3989. static void __init
  3990. S24C16_set_bit(ncr_slot *np, u_char write_bit, u_char *gpreg, int bit_mode)
  3991. {
  3992. UDELAY (5);
  3993. switch (bit_mode){
  3994. case SET_BIT:
  3995. *gpreg |= write_bit;
  3996. break;
  3997. case CLR_BIT:
  3998. *gpreg &= 0xfe;
  3999. break;
  4000. case SET_CLK:
  4001. *gpreg |= 0x02;
  4002. break;
  4003. case CLR_CLK:
  4004. *gpreg &= 0xfd;
  4005. break;
  4006. }
  4007. OUTB (nc_gpreg, *gpreg);
  4008. UDELAY (5);
  4009. }
  4010. /*
  4011.  *  Send START condition to NVRAM to wake it up.
  4012.  */
  4013. static void __init S24C16_start(ncr_slot *np, u_char *gpreg)
  4014. {
  4015. S24C16_set_bit(np, 1, gpreg, SET_BIT);
  4016. S24C16_set_bit(np, 0, gpreg, SET_CLK);
  4017. S24C16_set_bit(np, 0, gpreg, CLR_BIT);
  4018. S24C16_set_bit(np, 0, gpreg, CLR_CLK);
  4019. }
  4020. /*
  4021.  *  Send STOP condition to NVRAM - puts NVRAM to sleep... ZZzzzz!!
  4022.  */
  4023. static void __init S24C16_stop(ncr_slot *np, u_char *gpreg)
  4024. {
  4025. S24C16_set_bit(np, 0, gpreg, SET_CLK);
  4026. S24C16_set_bit(np, 1, gpreg, SET_BIT);
  4027. }
  4028. /*
  4029.  *  Read or write a bit to the NVRAM,
  4030.  *  read if GPIO0 input else write if GPIO0 output
  4031.  */
  4032. static void __init 
  4033. S24C16_do_bit(ncr_slot *np, u_char *read_bit, u_char write_bit, u_char *gpreg)
  4034. {
  4035. S24C16_set_bit(np, write_bit, gpreg, SET_BIT);
  4036. S24C16_set_bit(np, 0, gpreg, SET_CLK);
  4037. if (read_bit)
  4038. *read_bit = INB (nc_gpreg);
  4039. S24C16_set_bit(np, 0, gpreg, CLR_CLK);
  4040. S24C16_set_bit(np, 0, gpreg, CLR_BIT);
  4041. }
  4042. /*
  4043.  *  Output an ACK to the NVRAM after reading,
  4044.  *  change GPIO0 to output and when done back to an input
  4045.  */
  4046. static void __init
  4047. S24C16_write_ack(ncr_slot *np, u_char write_bit, u_char *gpreg, u_char *gpcntl)
  4048. {
  4049. OUTB (nc_gpcntl, *gpcntl & 0xfe);
  4050. S24C16_do_bit(np, 0, write_bit, gpreg);
  4051. OUTB (nc_gpcntl, *gpcntl);
  4052. }
  4053. /*
  4054.  *  Input an ACK from NVRAM after writing,
  4055.  *  change GPIO0 to input and when done back to an output
  4056.  */
  4057. static void __init 
  4058. S24C16_read_ack(ncr_slot *np, u_char *read_bit, u_char *gpreg, u_char *gpcntl)
  4059. {
  4060. OUTB (nc_gpcntl, *gpcntl | 0x01);
  4061. S24C16_do_bit(np, read_bit, 1, gpreg);
  4062. OUTB (nc_gpcntl, *gpcntl);
  4063. }
  4064. /*
  4065.  *  WRITE a byte to the NVRAM and then get an ACK to see it was accepted OK,
  4066.  *  GPIO0 must already be set as an output
  4067.  */
  4068. static void __init 
  4069. S24C16_write_byte(ncr_slot *np, u_char *ack_data, u_char write_data, 
  4070.   u_char *gpreg, u_char *gpcntl)
  4071. {
  4072. int x;
  4073. for (x = 0; x < 8; x++)
  4074. S24C16_do_bit(np, 0, (write_data >> (7 - x)) & 0x01, gpreg);
  4075. S24C16_read_ack(np, ack_data, gpreg, gpcntl);
  4076. }
  4077. /*
  4078.  *  READ a byte from the NVRAM and then send an ACK to say we have got it,
  4079.  *  GPIO0 must already be set as an input
  4080.  */
  4081. static void __init 
  4082. S24C16_read_byte(ncr_slot *np, u_char *read_data, u_char ack_data, 
  4083.          u_char *gpreg, u_char *gpcntl)
  4084. {
  4085. int x;
  4086. u_char read_bit;
  4087. *read_data = 0;
  4088. for (x = 0; x < 8; x++) {
  4089. S24C16_do_bit(np, &read_bit, 1, gpreg);
  4090. *read_data |= ((read_bit & 0x01) << (7 - x));
  4091. }
  4092. S24C16_write_ack(np, ack_data, gpreg, gpcntl);
  4093. }
  4094. /*
  4095.  *  Read 'len' bytes starting at 'offset'.
  4096.  */
  4097. static int __init 
  4098. sym_read_S24C16_nvram (ncr_slot *np, int offset, u_char *data, int len)
  4099. {
  4100. u_char gpcntl, gpreg;
  4101. u_char old_gpcntl, old_gpreg;
  4102. u_char ack_data;
  4103. int retv = 1;
  4104. int x;
  4105. /* save current state of GPCNTL and GPREG */
  4106. old_gpreg = INB (nc_gpreg);
  4107. old_gpcntl = INB (nc_gpcntl);
  4108. gpcntl = old_gpcntl & 0x1c;
  4109. /* set up GPREG & GPCNTL to set GPIO0 and GPIO1 in to known state */
  4110. OUTB (nc_gpreg,  old_gpreg);
  4111. OUTB (nc_gpcntl, gpcntl);
  4112. /* this is to set NVRAM into a known state with GPIO0/1 both low */
  4113. gpreg = old_gpreg;
  4114. S24C16_set_bit(np, 0, &gpreg, CLR_CLK);
  4115. S24C16_set_bit(np, 0, &gpreg, CLR_BIT);
  4116. /* now set NVRAM inactive with GPIO0/1 both high */
  4117. S24C16_stop(np, &gpreg);
  4118. /* activate NVRAM */
  4119. S24C16_start(np, &gpreg);
  4120. /* write device code and random address MSB */
  4121. S24C16_write_byte(np, &ack_data,
  4122. 0xa0 | ((offset >> 7) & 0x0e), &gpreg, &gpcntl);
  4123. if (ack_data & 0x01)
  4124. goto out;
  4125. /* write random address LSB */
  4126. S24C16_write_byte(np, &ack_data,
  4127. offset & 0xff, &gpreg, &gpcntl);
  4128. if (ack_data & 0x01)
  4129. goto out;
  4130. /* regenerate START state to set up for reading */
  4131. S24C16_start(np, &gpreg);
  4132. /* rewrite device code and address MSB with read bit set (lsb = 0x01) */
  4133. S24C16_write_byte(np, &ack_data,
  4134. 0xa1 | ((offset >> 7) & 0x0e), &gpreg, &gpcntl);
  4135. if (ack_data & 0x01)
  4136. goto out;
  4137. /* now set up GPIO0 for inputting data */
  4138. gpcntl |= 0x01;
  4139. OUTB (nc_gpcntl, gpcntl);
  4140. /* input all requested data - only part of total NVRAM */
  4141. for (x = 0; x < len; x++) 
  4142. S24C16_read_byte(np, &data[x], (x == (len-1)), &gpreg, &gpcntl);
  4143. /* finally put NVRAM back in inactive mode */
  4144. gpcntl &= 0xfe;
  4145. OUTB (nc_gpcntl, gpcntl);
  4146. S24C16_stop(np, &gpreg);
  4147. retv = 0;
  4148. out:
  4149. /* return GPIO0/1 to original states after having accessed NVRAM */
  4150. OUTB (nc_gpcntl, old_gpcntl);
  4151. OUTB (nc_gpreg,  old_gpreg);
  4152. return retv;
  4153. }
  4154. #undef SET_BIT
  4155. #undef CLR_BIT
  4156. #undef SET_CLK
  4157. #undef CLR_CLK
  4158. /*
  4159.  *  Try reading Symbios NVRAM.
  4160.  *  Return 0 if OK.
  4161.  */
  4162. static int __init sym_read_Symbios_nvram (ncr_slot *np, Symbios_nvram *nvram)
  4163. {
  4164. static u_char Symbios_trailer[6] = {0xfe, 0xfe, 0, 0, 0, 0};
  4165. u_char *data = (u_char *) nvram;
  4166. int len  = sizeof(*nvram);
  4167. u_short csum;
  4168. int x;
  4169. /* probe the 24c16 and read the SYMBIOS 24c16 area */
  4170. if (sym_read_S24C16_nvram (np, SYMBIOS_NVRAM_ADDRESS, data, len))
  4171. return 1;
  4172. /* check valid NVRAM signature, verify byte count and checksum */
  4173. if (nvram->type != 0 ||
  4174.     memcmp(nvram->trailer, Symbios_trailer, 6) ||
  4175.     nvram->byte_count != len - 12)
  4176. return 1;
  4177. /* verify checksum */
  4178. for (x = 6, csum = 0; x < len - 6; x++)
  4179. csum += data[x];
  4180. if (csum != nvram->checksum)
  4181. return 1;
  4182. return 0;
  4183. }
  4184. /*
  4185.  *  93C46 EEPROM reading.
  4186.  *
  4187.  *  GPOI0 - data in
  4188.  *  GPIO1 - data out
  4189.  *  GPIO2 - clock
  4190.  *  GPIO4 - chip select
  4191.  *
  4192.  *  Used by Tekram.
  4193.  */
  4194. /*
  4195.  *  Pulse clock bit in GPIO0
  4196.  */
  4197. static void __init T93C46_Clk(ncr_slot *np, u_char *gpreg)
  4198. {
  4199. OUTB (nc_gpreg, *gpreg | 0x04);
  4200. UDELAY (2);
  4201. OUTB (nc_gpreg, *gpreg);
  4202. }
  4203. /* 
  4204.  *  Read bit from NVRAM
  4205.  */
  4206. static void __init T93C46_Read_Bit(ncr_slot *np, u_char *read_bit, u_char *gpreg)
  4207. {
  4208. UDELAY (2);
  4209. T93C46_Clk(np, gpreg);
  4210. *read_bit = INB (nc_gpreg);
  4211. }
  4212. /*
  4213.  *  Write bit to GPIO0
  4214.  */
  4215. static void __init T93C46_Write_Bit(ncr_slot *np, u_char write_bit, u_char *gpreg)
  4216. {
  4217. if (write_bit & 0x01)
  4218. *gpreg |= 0x02;
  4219. else
  4220. *gpreg &= 0xfd;
  4221. *gpreg |= 0x10;
  4222. OUTB (nc_gpreg, *gpreg);
  4223. UDELAY (2);
  4224. T93C46_Clk(np, gpreg);
  4225. }
  4226. /*
  4227.  *  Send STOP condition to NVRAM - puts NVRAM to sleep... ZZZzzz!!
  4228.  */
  4229. static void __init T93C46_Stop(ncr_slot *np, u_char *gpreg)
  4230. {
  4231. *gpreg &= 0xef;
  4232. OUTB (nc_gpreg, *gpreg);
  4233. UDELAY (2);
  4234. T93C46_Clk(np, gpreg);
  4235. }
  4236. /*
  4237.  *  Send read command and address to NVRAM
  4238.  */
  4239. static void __init 
  4240. T93C46_Send_Command(ncr_slot *np, u_short write_data, 
  4241.     u_char *read_bit, u_char *gpreg)
  4242. {
  4243. int x;
  4244. /* send 9 bits, start bit (1), command (2), address (6)  */
  4245. for (x = 0; x < 9; x++)
  4246. T93C46_Write_Bit(np, (u_char) (write_data >> (8 - x)), gpreg);
  4247. *read_bit = INB (nc_gpreg);
  4248. }
  4249. /*
  4250.  *  READ 2 bytes from the NVRAM
  4251.  */
  4252. static void __init 
  4253. T93C46_Read_Word(ncr_slot *np, u_short *nvram_data, u_char *gpreg)
  4254. {
  4255. int x;
  4256. u_char read_bit;
  4257. *nvram_data = 0;
  4258. for (x = 0; x < 16; x++) {
  4259. T93C46_Read_Bit(np, &read_bit, gpreg);
  4260. if (read_bit & 0x01)
  4261. *nvram_data |=  (0x01 << (15 - x));
  4262. else
  4263. *nvram_data &= ~(0x01 << (15 - x));
  4264. }
  4265. }
  4266. /*
  4267.  *  Read Tekram NvRAM data.
  4268.  */
  4269. static int __init 
  4270. T93C46_Read_Data(ncr_slot *np, u_short *data,int len,u_char *gpreg)
  4271. {
  4272. u_char read_bit;
  4273. int x;
  4274. for (x = 0; x < len; x++)  {
  4275. /* output read command and address */
  4276. T93C46_Send_Command(np, 0x180 | x, &read_bit, gpreg);
  4277. if (read_bit & 0x01)
  4278. return 1; /* Bad */
  4279. T93C46_Read_Word(np, &data[x], gpreg);
  4280. T93C46_Stop(np, gpreg);
  4281. }
  4282. return 0;
  4283. }
  4284. /*
  4285.  *  Try reading 93C46 Tekram NVRAM.
  4286.  */
  4287. static int __init 
  4288. sym_read_T93C46_nvram (ncr_slot *np, Tekram_nvram *nvram)
  4289. {
  4290. u_char gpcntl, gpreg;
  4291. u_char old_gpcntl, old_gpreg;
  4292. int retv = 1;
  4293. /* save current state of GPCNTL and GPREG */
  4294. old_gpreg = INB (nc_gpreg);
  4295. old_gpcntl = INB (nc_gpcntl);
  4296. /* set up GPREG & GPCNTL to set GPIO0/1/2/4 in to known state, 0 in,
  4297.    1/2/4 out */
  4298. gpreg = old_gpreg & 0xe9;
  4299. OUTB (nc_gpreg, gpreg);
  4300. gpcntl = (old_gpcntl & 0xe9) | 0x09;
  4301. OUTB (nc_gpcntl, gpcntl);
  4302. /* input all of NVRAM, 64 words */
  4303. retv = T93C46_Read_Data(np, (u_short *) nvram,
  4304. sizeof(*nvram) / sizeof(short), &gpreg);
  4305. /* return GPIO0/1/2/4 to original states after having accessed NVRAM */
  4306. OUTB (nc_gpcntl, old_gpcntl);
  4307. OUTB (nc_gpreg,  old_gpreg);
  4308. return retv;
  4309. }
  4310. /*
  4311.  *  Try reading Tekram NVRAM.
  4312.  *  Return 0 if OK.
  4313.  */
  4314. static int __init 
  4315. sym_read_Tekram_nvram (ncr_slot *np, u_short device_id, Tekram_nvram *nvram)
  4316. {
  4317. u_char *data = (u_char *) nvram;
  4318. int len = sizeof(*nvram);
  4319. u_short csum;
  4320. int x;
  4321. switch (device_id) {
  4322. case PCI_DEVICE_ID_NCR_53C885:
  4323. case PCI_DEVICE_ID_NCR_53C895:
  4324. case PCI_DEVICE_ID_NCR_53C896:
  4325. x = sym_read_S24C16_nvram(np, TEKRAM_24C16_NVRAM_ADDRESS,
  4326.   data, len);
  4327. break;
  4328. case PCI_DEVICE_ID_NCR_53C875:
  4329. x = sym_read_S24C16_nvram(np, TEKRAM_24C16_NVRAM_ADDRESS,
  4330.   data, len);
  4331. if (!x)
  4332. break;
  4333. default:
  4334. x = sym_read_T93C46_nvram(np, nvram);
  4335. break;
  4336. }
  4337. if (x)
  4338. return 1;
  4339. /* verify checksum */
  4340. for (x = 0, csum = 0; x < len - 1; x += 2)
  4341. csum += data[x] + (data[x+1] << 8);
  4342. if (csum != 0x1234)
  4343. return 1;
  4344. return 0;
  4345. }
  4346. #endif /* SCSI_NCR_NVRAM_SUPPORT */
  4347. /*
  4348. ** Module stuff
  4349. */
  4350. MODULE_LICENSE("GPL");
  4351. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0)
  4352. static
  4353. #endif
  4354. #if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0) || defined(MODULE)
  4355. Scsi_Host_Template driver_template = SYM53C8XX;
  4356. #include "scsi_module.c"
  4357. #endif