Lines Matching defs:csb

1076 	struct fdcsb *csb;
1083 csb = &fcp->c_csb;
1084 csb->csb_cmd[1] = (uchar_t)unit;
1086 *csb->csb_cmd = FO_RECAL;
1087 csb->csb_ncmds = 2;
1088 csb->csb_timer = 28;
1090 *csb->csb_cmd = FO_SEEK;
1091 csb->csb_cmd[2] = (uchar_t)arg;
1092 csb->csb_ncmds = 3;
1093 csb->csb_timer = 10;
1095 csb->csb_nrslts = 2; /* 2 for SENSE INTERRUPTS */
1096 csb->csb_opflags = CSB_OFINRPT;
1097 csb->csb_maxretry = skretry;
1098 csb->csb_dmahandle = NULL;
1099 csb->csb_handle_bound = 0;
1100 csb->csb_dmacookiecnt = 0;
1101 csb->csb_dmacurrcookie = 0;
1102 csb->csb_dmawincnt = 0;
1103 csb->csb_dmacurrwin = 0;
1109 if (!(*csb->csb_rslt & S0_SEKEND) ||
1110 (*csb->csb_rslt & S0_ICMASK) ||
1111 ((*csb->csb_rslt & S0_ECHK) && arg < 0) ||
1112 csb->csb_cmdstat)
1130 struct fdcsb *csb;
1140 csb = &fcp->c_csb;
1143 csb->csb_opflags = CSB_OFDMARD | CSB_OFINRPT;
1144 *csb->csb_cmd = FO_MT | FO_MFM | FO_SK | FO_RDDAT;
1147 csb->csb_opflags = CSB_OFDMAWT | CSB_OFINRPT;
1148 *csb->csb_cmd = FO_MT | FO_MFM | FO_WRDAT;
1150 csb->csb_cmd[1] = (uchar_t)(unit | ((head & 0x1) << 2));
1151 csb->csb_cmd[2] = (uchar_t)cyl;
1152 csb->csb_cmd[3] = (uchar_t)head;
1153 csb->csb_cmd[4] = (uchar_t)sector;
1155 &csb->csb_cmd[5]);
1156 csb->csb_cmd[6] = (uchar_t)max(fjp->fj_chars->fdc_secptrack, sector);
1157 csb->csb_cmd[7] = fjp->fj_attr->fda_gapl;
1158 csb->csb_cmd[8] = 0xFF;
1160 csb->csb_ncmds = 9;
1161 csb->csb_nrslts = 7;
1162 csb->csb_timer = 36;
1164 csb->csb_maxretry = 1;
1166 csb->csb_maxretry = rwretry;
1168 csb->csb_dmahandle = NULL;
1169 csb->csb_handle_bound = 0;
1170 csb->csb_dmacookiecnt = 0;
1171 csb->csb_dmacurrcookie = 0;
1172 csb->csb_dmawincnt = 0;
1173 csb->csb_dmacurrwin = 0;
1177 0, &csb->csb_dmahandle) != DDI_SUCCESS) {
1187 rval = ddi_dma_mem_alloc(csb->csb_dmahandle, len, &fdc_accattr,
1199 rval = ddi_dma_addr_bind_handle(csb->csb_dmahandle, NULL, aligned_buf,
1200 len, dmar_flags, DDI_DMA_SLEEP, 0, &csb->csb_dmacookie,
1201 &csb->csb_dmacookiecnt);
1204 csb->csb_dmawincnt = 1;
1205 csb->csb_handle_bound = 1;
1207 csb->csb_handle_bound = 1;
1208 if (ddi_dma_numwin(csb->csb_dmahandle, &csb->csb_dmawincnt) !=
1227 if (csb->csb_dmahandle) {
1228 if (csb->csb_handle_bound) {
1229 if (ddi_dma_unbind_handle(csb->csb_dmahandle) !=
1233 csb->csb_handle_bound = 0;
1238 ddi_dma_free_handle(&csb->csb_dmahandle);
1239 csb->csb_dmahandle = NULL;
1249 struct fdcsb *csb;
1262 csb = &fcp->c_csb;
1264 csb->csb_opflags = CSB_OFDMAWT | CSB_OFINRPT;
1266 *csb->csb_cmd = FO_FRMT | FO_MFM;
1267 csb->csb_cmd[1] = (head << 2) | unit;
1269 &csb->csb_cmd[2]);
1270 csb->csb_cmd[3] = numsctr = fjp->fj_chars->fdc_secptrack;
1271 csb->csb_cmd[4] = fjp->fj_attr->fda_gapf;
1272 csb->csb_cmd[5] = (uchar_t)filldata;
1274 csb->csb_npcyl = (uchar_t)(cyl * fjp->fj_chars->fdc_steps);
1276 csb->csb_dmahandle = NULL;
1277 csb->csb_handle_bound = 0;
1278 csb->csb_dmacookiecnt = 0;
1279 csb->csb_dmacurrcookie = 0;
1280 csb->csb_dmawincnt = 0;
1281 csb->csb_dmacurrwin = 0;
1282 csb->csb_ncmds = 6;
1283 csb->csb_nrslts = 7;
1284 csb->csb_timer = 32;
1285 csb->csb_maxretry = rwretry;
1296 0, &csb->csb_dmahandle) != DDI_SUCCESS) {
1306 rval = ddi_dma_mem_alloc(csb->csb_dmahandle, fmdatlen, &fdc_accattr,
1323 *dp++ = csb->csb_cmd[2];
1327 rval = ddi_dma_addr_bind_handle(csb->csb_dmahandle, NULL, aligned_buf,
1329 DDI_DMA_SLEEP, 0, &csb->csb_dmacookie, &csb->csb_dmacookiecnt);
1332 csb->csb_dmawincnt = 1;
1333 csb->csb_handle_bound = 1;
1335 csb->csb_handle_bound = 1;
1336 if (ddi_dma_numwin(csb->csb_dmahandle, &csb->csb_dmawincnt) !=
1352 if (csb->csb_dmahandle) {
1353 if (csb->csb_handle_bound) {
1354 if (ddi_dma_unbind_handle(csb->csb_dmahandle) !=
1358 csb->csb_handle_bound = 0;
1363 ddi_dma_free_handle(&csb->csb_dmahandle);
1364 csb->csb_dmahandle = NULL;
1374 struct fdcsb *csb;
1390 csb = &fcp->c_csb;
1392 /* copy cmd bytes into csb */
1394 csb->csb_cmd[i] = fdrp->fdr_cmd[i];
1395 csb->csb_ncmds = (uchar_t)fdrp->fdr_cnum;
1397 csb->csb_maxretry = 0; /* let the application deal with errors */
1398 csb->csb_opflags = CSB_OFRAWIOCTL;
1399 csb->csb_nrslts = 0;
1400 csb->csb_timer = 50;
1408 csb->csb_opflags |= CSB_OFINRPT;
1412 csb->csb_npcyl = *(uchar_t *)(fdrp->fdr_addr) *
1417 csb->csb_opflags |= CSB_OFDMAWT | CSB_OFRESLT | CSB_OFINRPT;
1418 csb->csb_nrslts = 7;
1427 csb->csb_opflags |= CSB_OFDMARD | CSB_OFRESLT | CSB_OFINRPT;
1428 csb->csb_nrslts = 7;
1433 csb->csb_opflags |= CSB_OFRESLT | CSB_OFINRPT;
1434 csb->csb_nrslts = 7;
1439 csb->csb_nrslts = 1;
1445 csb->csb_nrslts = 2;
1457 csb->csb_dmahandle = NULL;
1458 csb->csb_handle_bound = 0;
1459 csb->csb_dmacookiecnt = 0;
1460 csb->csb_dmacurrcookie = 0;
1461 csb->csb_dmawincnt = 0;
1462 csb->csb_dmacurrwin = 0;
1464 if (csb->csb_opflags & (CSB_OFDMARD | CSB_OFDMAWT)) {
1466 DDI_DMA_SLEEP, 0, &csb->csb_dmahandle) != DDI_SUCCESS) {
1476 rval = ddi_dma_mem_alloc(csb->csb_dmahandle,
1490 rval = ddi_dma_addr_bind_handle(csb->csb_dmahandle, NULL,
1492 DDI_DMA_SLEEP, 0, &csb->csb_dmacookie,
1493 &csb->csb_dmacookiecnt);
1496 csb->csb_dmawincnt = 1;
1497 csb->csb_handle_bound = 1;
1499 csb->csb_handle_bound = 1;
1500 if (ddi_dma_numwin(csb->csb_dmahandle,
1501 &csb->csb_dmawincnt) != DDI_SUCCESS) {
1516 (CE_CONT, "cmd: %x %x %x %x %x %x %x %x %x %x\n", csb->csb_cmd[0],
1517 csb->csb_cmd[1], csb->csb_cmd[2], csb->csb_cmd[3],
1518 csb->csb_cmd[4], csb->csb_cmd[5], csb->csb_cmd[6],
1519 csb->csb_cmd[7], csb->csb_cmd[8], csb->csb_cmd[9]));
1522 csb->csb_ncmds, csb->csb_opflags, (void *)fdrp->fdr_addr,
1543 (CE_CONT, "rslt: %x %x %x %x %x %x %x %x %x %x\n", csb->csb_rslt[0],
1544 csb->csb_rslt[1], csb->csb_rslt[2], csb->csb_rslt[3],
1545 csb->csb_rslt[4], csb->csb_rslt[5], csb->csb_rslt[6],
1546 csb->csb_rslt[7], csb->csb_rslt[8], csb->csb_rslt[9]));
1549 for (i = 0; i <= (int)csb->csb_nrslts; i++)
1550 fdrp->fdr_result[i] = csb->csb_rslt[i];
1554 if (csb->csb_dmahandle) {
1555 if (csb->csb_handle_bound) {
1556 if (ddi_dma_unbind_handle(csb->csb_dmahandle) !=
1560 csb->csb_handle_bound = 0;
1565 ddi_dma_free_handle(&csb->csb_dmahandle);
1566 csb->csb_dmahandle = NULL;
1705 fdcreadid(struct fdcntlr *fcp, struct fdcsb *csb)
1709 readidcmd[1] = csb->csb_cmd[1];
2075 struct fdcsb *csb = &fcp->c_csb;
2090 (csb->csb_xstate == FXS_MTRON || csb->csb_xstate == FXS_HDST ||
2091 csb->csb_xstate == FXS_DKCHGX))
2117 struct fdcsb *csb = &fcp->c_csb;
2121 if (csb->csb_dmahandle && !csb->csb_cmdstat) {
2122 if (++csb->csb_dmacurrcookie < csb->csb_dmacookiecnt) {
2123 ddi_dma_nextcookie(csb->csb_dmahandle,
2124 &csb->csb_dmacookie);
2125 return (&csb->csb_dmacookie);
2126 } else if (++csb->csb_dmacurrwin < csb->csb_dmawincnt) {
2127 if (ddi_dma_getwin(csb->csb_dmahandle,
2128 csb->csb_dmacurrwin, &off, &len,
2129 &csb->csb_dmacookie,
2130 &csb->csb_dmacookiecnt) != DDI_SUCCESS) {
2133 csb->csb_dmacurrcookie = 0;
2134 return (&csb->csb_dmacookie);
2158 struct fdcsb *csb;
2166 csb = &fcp->c_csb;
2167 unit = csb->csb_drive;
2170 if (csb->csb_opflags & CSB_OFINRPT) {
2171 if (*csb->csb_cmd == FO_RECAL)
2172 csb->csb_npcyl = 0;
2173 else if ((*csb->csb_cmd & ~FO_MFM) != FO_FRMT)
2174 csb->csb_npcyl =
2175 csb->csb_cmd[2] * fjp->fj_chars->fdc_steps;
2176 csb->csb_xstate = FXS_START;
2178 csb->csb_xstate = FXS_DOIT;
2179 csb->csb_retrys = 0;
2180 csb->csb_ourtrys = 0;
2182 if (csb->csb_dmahandle) {
2189 if ((*csb->csb_cmd & ~FO_MFM) == FO_FRMT &&
2190 (4 * csb->csb_cmd[3]) != csb->csb_dmacookie.dmac_size) {
2232 (CE_WARN, "diskette %d changed!!!", csb->csb_drive));
2241 if (*csb->csb_cmd == FO_SDRV) {
2261 switch (csb->csb_cmd[0] & 0x1f) {
2279 bzero(csb->csb_rslt, 10);
2280 csb->csb_cmdstat = 0;
2282 if (csb->csb_dmahandle) {
2284 dmaereq.der_command = (csb->csb_opflags & CSB_OFDMAWT) ?
2292 if (ddi_dmae_prog(fcp->c_dip, &dmaereq, &csb->csb_dmacookie,
2303 if (!csb->csb_nrslts) {
2309 * so wait for the results and stuff them into the csb
2332 if (csb->csb_cmdstat && *csb->csb_cmd != FO_SDRV) {
2338 /* ASSUMES that cmd is still intact in csb */
2339 if (csb->csb_xstate == FXS_END)
2340 csb->csb_xstate = FXS_START;
2341 if (fdc_dma_attr.dma_attr_sgllen > 1 && csb->csb_dmahandle) {
2346 if (ddi_dma_getwin(csb->csb_dmahandle,
2347 csb->csb_dmacurrwin, &off, &len,
2348 &csb->csb_dmacookie,
2349 &csb->csb_dmacookiecnt) != DDI_SUCCESS) {
2354 csb->csb_dmacurrcookie = 0;
2372 struct fdcsb *csb = &fcp->c_csb;
2387 save_cmd = *csb->csb_cmd;
2388 save_cd1 = csb->csb_cmd[1];
2389 save_npcyl = csb->csb_npcyl;
2390 save_xstate = csb->csb_xstate;
2392 *csb->csb_cmd = FO_SEEK;
2393 csb->csb_cmd[1] = (uchar_t)unit;
2394 csb->csb_npcyl = (uchar_t)newcyl;
2402 csb->csb_xstate = FXS_DKCHGX;
2407 csb->csb_xstate = FXS_SEEK;
2433 *csb->csb_cmd = save_cmd;
2434 csb->csb_cmd[1] = save_cd1;
2435 csb->csb_npcyl = save_npcyl;
2436 csb->csb_xstate = save_xstate;
2444 struct fdcsb *csb = &fcp->c_csb;
2450 (CE_NOTE, "fdrecover unit %d", csb->csb_drive));
2452 unit = csb->csb_drive;
2456 csb->csb_rslt[1] |= 0x08;
2458 (CE_WARN, "fd unit %d: %s timed out", csb->csb_drive,
2459 fdcmds[*csb->csb_cmd & 0x1f].cmdname));
2462 if (csb->csb_status & S0_SEKEND)
2465 switch (csb->csb_oldxs) {
2470 "fd unit %d: %s error: st0=0x%x pcn=%d", csb->csb_drive,
2471 fdcmds[*csb->csb_cmd & 0x1f].cmdname,
2472 *csb->csb_rslt, csb->csb_rslt[1]));
2473 if (csb->csb_retrys++ < skretry &&
2474 !(csb->csb_opflags & CSB_OFRAWIOCTL))
2479 if (!(csb->csb_status & S0_SEKEND))
2480 csb->csb_xstate = FXS_HDST;
2484 if (csb->csb_opflags & (CSB_OFDMARD | CSB_OFDMAWT)) {
2496 csb->csb_drive,
2497 fdcmds[*csb->csb_cmd & 0x1f].cmdname,
2498 csb->csb_dmacookie.dmac_size, residual));
2500 if (csb->csb_rslt[1] == S1_OVRUN)
2505 if (++csb->csb_ourtrys <= OURUN_TRIES) {
2509 csb->csb_drive,
2510 fdcmds[*csb->csb_cmd & 0x1f].cmdname));
2517 csb->csb_ourtrys = 0;
2520 !(csb->csb_opflags & CSB_OFRAWIOCTL)) {
2525 if (csb->csb_rslt[1] & S1_CRCER)
2527 if (csb->csb_rslt[1] & S1_OVRUN)
2529 if (csb->csb_rslt[1] & (S1_NODATA | S1_MADMK))
2531 if (csb->csb_rslt[1] & 0x08)
2537 if (csb->csb_retrys++ < csb->csb_maxretry &&
2538 (*csb->csb_cmd & ~FO_MFM) != FO_FRMT) {
2539 if (csb->csb_opflags &
2545 csb->csb_drive,
2546 fdcmds[*csb->csb_cmd &
2548 *csb->csb_rslt, csb->csb_rslt[1],
2549 csb->csb_rslt[2]));
2551 if ((csb->csb_retrys & 1) &&
2552 csb->csb_xstate == FXS_END)
2553 csb->csb_xstate = FXS_DOIT;
2554 else if (csb->csb_retrys == 3)
2555 csb->csb_xstate = FXS_RESTART;
2558 if (csb->csb_rslt[1] & S1_CRCER)
2560 else if (csb->csb_rslt[1] & S1_OVRUN)
2562 else if (csb->csb_rslt[1] & (S1_NODATA | S1_MADMK))
2564 else if (csb->csb_rslt[1] & 0x08)
2569 csb->csb_drive,
2570 fdcmds[*csb->csb_cmd & 0x1f].cmdname, failure,
2571 *csb->csb_rslt, csb->csb_rslt[1], csb->csb_rslt[2]);
2575 csb->csb_drive,
2576 fdcmds[*csb->csb_cmd & 0x1f].cmdname,
2577 *csb->csb_rslt, csb->csb_rslt[1],
2578 csb->csb_rslt[2]));
2585 csb->csb_drive, fdcmds[*csb->csb_cmd & 0x1f].cmdname,
2586 *csb->csb_rslt, csb->csb_rslt[1], csb->csb_rslt[2]));
2598 struct fdcsb *csb;
2608 csb = &fcp->c_csb;
2631 csb->csb_drive, csb->csb_xstate, state));
2643 (!(state & 0x0f) || ((1 << csb->csb_drive) & state))) {
2662 if (csb->csb_dmahandle && !csb->csb_cmdstat &&
2667 ((csb->csb_dmacurrcookie <
2668 (csb->csb_dmacookiecnt - 1)) ||
2669 (csb->csb_dmacurrwin) < (csb->csb_dmawincnt - 1))) {
2675 if (++csb->csb_dmacurrcookie <
2676 csb->csb_dmacookiecnt) {
2677 ddi_dma_nextcookie(csb->csb_dmahandle,
2678 &csb->csb_dmacookie);
2679 } else if (++csb->csb_dmacurrwin <
2680 csb->csb_dmawincnt) {
2681 if (ddi_dma_getwin(csb->csb_dmahandle,
2682 csb->csb_dmacurrwin, &off, &blklen,
2683 &csb->csb_dmacookie,
2684 &csb->csb_dmacookiecnt) !=
2690 csb->csb_dmacurrcookie = 0;
2694 &csb->csb_dmacookie, fcp->c_dmachan) !=
2706 csb->csb_cmd[2] = csb->csb_rslt[3];
2707 csb->csb_cmd[3] = csb->csb_rslt[4];
2708 csb->csb_cmd[4] = csb->csb_rslt[5];
2709 csb->csb_cmd[1] = (csb->csb_cmd[1] & ~0x04) |
2710 (csb->csb_cmd[3] << 2);
2712 csb->csb_xstate = FXS_START;
2723 csb->csb_cmdstat = EIO;
2725 * somebody's waiting for completion of fdcntlr/csb,
2749 csb->csb_drive, state));
2770 struct fdcsb *csb;
2787 csb = &fcp->c_csb;
2790 csb->csb_drive, csb->csb_xstate));
2797 csb->csb_xstate = FXS_KILL;
2804 csb->csb_xstate = FXS_END;
2809 csb->csb_cmdstat = EIO;
2826 struct fdcsb *csb = &fcp->c_csb;
2833 unit = csb->csb_drive;
2836 csb->csb_oldxs = csb->csb_xstate;
2837 switch (csb->csb_xstate) {
2841 time = drv_usectohz(100000 * (unsigned int)csb->csb_timer);
2850 csb->csb_xstate = FXS_MTRON;
2861 if (fcp->c_curpcyl[unit] != -1 && *csb->csb_cmd != FO_RECAL)
2867 csb->csb_cmdstat = EIO;
2868 csb->csb_xstate = FXS_RESET;
2872 csb->csb_xstate = FXS_RCAL;
2878 if (csb->csb_opflags & CSB_OFRAWIOCTL &&
2879 *csb->csb_cmd == FO_RECAL) {
2881 csb->csb_status = 0;
2890 (void) fdc_result(fcp, csb->csb_rslt, 2);
2895 if ((csb->csb_status = ((*csb->csb_rslt ^ S0_SEKEND) &
2899 csb->csb_drive, *csb->csb_rslt));
2901 csb->csb_cmdstat = EIO;
2902 csb->csb_xstate = FXS_RESET;
2905 if (unit != (*csb->csb_rslt & 3) || csb->csb_rslt[1]) {
2906 csb->csb_status = S0_SEKEND;
2909 fcp->c_curpcyl[unit] = csb->csb_rslt[1];
2910 if (*csb->csb_cmd == FO_RECAL)
2913 if (*csb->csb_cmd != FO_SEEK &&
2914 csb->csb_npcyl == fcp->c_curpcyl[unit])
2916 fcp->c_sekdir[unit] = csb->csb_npcyl - fcp->c_curpcyl[unit];
2920 (void) fdcseek(fcp, csb->csb_cmd[1], csb->csb_npcyl);
2925 csb->csb_xstate = FXS_SEEK;
2930 time = drv_usectohz(100000 * csb->csb_timer);
2939 if ((csb->csb_npcyl == 0 || fcp->c_sekdir[unit] >= 0) &&
2940 (int)csb->csb_cmd[2] < (fjp->fj_chars->fdc_ncyl - 1))
2941 backoff = csb->csb_npcyl + 1;
2943 backoff = csb->csb_npcyl - 1;
2944 (void) fdcseek(fcp, csb->csb_cmd[1], backoff);
2949 csb->csb_xstate = FXS_RESEEK;
2958 (void) fdc_result(fcp, csb->csb_rslt, 2);
2963 if ((csb->csb_status = ((*csb->csb_rslt ^ S0_SEKEND) &
2966 (void) fdcseek(fcp, csb->csb_cmd[1], csb->csb_npcyl);
2971 csb->csb_xstate = FXS_SEEK;
2978 if (csb->csb_opflags & CSB_OFRAWIOCTL) {
2979 fcp->c_curpcyl[unit] = csb->csb_npcyl;
2980 csb->csb_status = 0;
2989 (void) fdc_result(fcp, csb->csb_rslt, 2);
2994 if ((csb->csb_status = ((*csb->csb_rslt ^ S0_SEKEND) &
2997 if (unit != (*csb->csb_rslt & 3) ||
2998 csb->csb_rslt[1] != csb->csb_npcyl) {
2999 csb->csb_status = S0_SEKEND;
3002 fcp->c_curpcyl[unit] = csb->csb_rslt[1];
3011 csb->csb_xstate = FXS_HDST;
3015 if (*csb->csb_cmd == FO_SEEK)
3017 if ((*csb->csb_cmd & ~FO_MFM) == FO_FRMT)
3019 fdcreadid(fcp, csb);
3020 csb->csb_xstate = FXS_RDID;
3024 (void) fdc_result(fcp, csb->csb_rslt, 7);
3029 if ((csb->csb_status = (*csb->csb_rslt &
3032 if (csb->csb_cmd[2] != csb->csb_rslt[3]) {
3034 csb->csb_status = S0_SEKEND;
3041 time = drv_usectohz(100000 * csb->csb_timer);
3046 if (fdc_docmd(fcp, csb->csb_cmd, csb->csb_ncmds) == -1) {
3049 csb->csb_xstate = FXS_RESET;
3050 csb->csb_cmdstat = EIO;
3053 csb->csb_xstate = FXS_DOWT;
3057 (void) fdc_result(fcp, csb->csb_rslt, csb->csb_nrslts);
3062 if (*csb->csb_cmd == FO_SDRV) {
3063 csb->csb_status =
3064 (*csb->csb_rslt ^ (S3_DRRDY | S3_2SIDE)) &
3067 csb->csb_status = *csb->csb_rslt &
3071 if (csb->csb_status)
3072 csb->csb_cmdstat = EIO;
3073 csb->csb_xstate = FXS_END;
3090 csb->csb_xstate = FXS_RESET;
3106 csb->csb_xstate = FXS_END;
3115 csb->csb_drive, csb->csb_oldxs, csb->csb_xstate));
3116 return (csb->csb_xstate);