1 /* 2 * Copyright (c) 1992 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This software was developed by the Computer Systems Engineering group 6 * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 7 * contributed to Berkeley. 8 * 9 * All advertising materials mentioning features or use of this software 10 * must display the following acknowledgement: 11 * This product includes software developed by the University of 12 * California, Lawrence Berkeley Laboratory. 13 * 14 * %sccs.include.redist.c% 15 * 16 * @(#)esp.c 7.6 (Berkeley) 04/27/93 17 * 18 * from: $Header: esp.c,v 1.28 93/04/27 14:40:44 torek Exp $ (LBL) 19 * 20 * Loosely derived from Mary Baker's devSCSIC90.c from the Berkeley 21 * Sprite project, which is: 22 * 23 * Copyright 1988 Regents of the University of California 24 * Permission to use, copy, modify, and distribute this 25 * software and its documentation for any purpose and without 26 * fee is hereby granted, provided that the above copyright 27 * notice appear in all copies. The University of California 28 * makes no representations about the suitability of this 29 * software for any purpose. It is provided "as is" without 30 * express or implied warranty. 31 * 32 * from /sprite/src/kernel/dev/sun4c.md/RCS/devSCSIC90.c,v 1.4 33 * 90/12/19 12:37:58 mgbaker Exp $ SPRITE (Berkeley) 34 */ 35 36 /* 37 * Sbus ESP/DMA driver. A single driver must be used for both devices 38 * as they are physically tied to each other: The DMA chip can only 39 * be used to assist ESP SCSI transactions; the ESP interrupt enable is 40 * in the DMA chip csr. 41 * 42 * Since DMA and SCSI interrupts are handled in the same routine, the 43 * DMA device does not declare itself as an sbus device. This saves 44 * some space. 45 */ 46 47 #include <sys/param.h> 48 #include <sys/buf.h> 49 #include <sys/device.h> 50 #include <sys/malloc.h> 51 52 #include <dev/scsi/scsi.h> 53 #include <dev/scsi/scsivar.h> 54 55 #include <machine/autoconf.h> 56 #include <machine/cpu.h> 57 58 #include <sparc/sbus/dmareg.h> 59 #define ESP_PHASE_NAMES 60 #include <sparc/sbus/espreg.h> 61 #include <sparc/sbus/sbusvar.h> 62 63 #ifdef DEBUG 64 int espdebug = 1; 65 #endif 66 67 /* 68 * This driver is organized as a collection of state machines. The 69 * primary machine is the SCSI sequencer: 70 * 71 * Given some previous SCSI state (as set up or tracked by us earlier) 72 * and the interrupt registers provided on the chips (dmacsr, espstat, 73 * espstep, and espintr), derive an action. In many cases this is 74 * just a matter of reading the target's phase and following its orders, 75 * which sets a new state. 76 * 77 * This sequencing is done in espact(); the state is primed in espselect(). 78 * 79 * There will be (update this comment when there is) another state machine 80 * used to handle transfers that fall afoul of chip limits (16 bit DMA 81 * counter; 24 bit address counter in 32 bit address field). 82 * 83 * Another state bit is used to recover from bus resets: 84 * 85 * A single TEST UNIT READY is attempted on each target before any 86 * real communication begins; this TEST UNIT READY is allowed to 87 * fail in any way. This is required for the Quantum ProDrive 100 88 * MB disks, for instance, which respond to their first selection 89 * with status phase, and for anything that insists on implementing 90 * the broken SCSI-2 synch transfer initial message. 91 * 92 * This is done in espclear() (which calls espselect(); functions that 93 * call espselect() must check for clearing first). 94 * 95 * The state machines actually intermingle, as some SCSI sequences are 96 * only allowed during clearing. 97 */ 98 99 /* per-DMA variables */ 100 struct dma_softc { 101 struct device sc_dev; /* base device */ 102 volatile struct dmareg *sc_dma; /* register virtual address */ 103 int sc_dmarev; /* revision */ 104 char *sc_dmafmt; /* format for error messages */ 105 106 }; 107 void dmaattach(struct device *, struct device *, void *); 108 struct cfdriver dmacd = 109 { NULL, "dma", matchbyname, dmaattach, DV_DULL, sizeof(struct dma_softc) }; 110 111 /* per-ESP variables */ 112 struct esp_softc { 113 /* 114 * External interfaces. 115 */ 116 struct hba_softc sc_hba; /* base device + hba, must be first */ 117 struct sbusdev sc_sd; /* sbus device */ 118 struct intrhand sc_ih; /* interrupt entry */ 119 struct evcnt sc_intrcnt; /* interrupt counter */ 120 struct dma_softc *sc_dsc; /* pointer to corresponding dma sc */ 121 122 /* 123 * Addresses mapped to hardware registers. 124 */ 125 volatile struct espreg *sc_esp; 126 volatile struct dmareg *sc_dma; 127 128 /* 129 * Copies of registers cleared/unlatched by reading. 130 */ 131 u_long sc_dmacsr; 132 u_char sc_espstat; 133 u_char sc_espstep; 134 u_char sc_espintr; 135 136 /* miscellaneous */ 137 int sc_clockfreq; /* clock frequency */ 138 u_char sc_sel_timeout; /* select timeout */ 139 u_char sc_id; /* initiator ID (default = 7) */ 140 u_char sc_needclear; /* uncleared targets (1 bit each) */ 141 u_char sc_esptype; /* 100, 100A, 2xx (see below) */ 142 u_char sc_ccf; /* clock conversion factor */ 143 u_char sc_conf1; /* value for config reg 1 */ 144 u_char sc_conf2; /* value for config reg 2 */ 145 u_char sc_conf3; /* value for config reg 3 */ 146 struct bootpath *sc_bp; /* esp bootpath so far */ 147 148 /* 149 * Information pertaining to the current transfer, 150 * including sequencing. 151 * 152 * The size of sc_msg is the size of the ESP fifo, 153 * since we do message-in simply by allowing the fifo to fill. 154 */ 155 char sc_probing; /* used during autoconf; see below */ 156 char sc_clearing; /* true => cmd is just to clear targ */ 157 char sc_state; /* SCSI protocol state; see below */ 158 char sc_sentcmd; /* set once we get cmd out */ 159 char sc_dmaactive; /* true => doing dma */ 160 #ifdef notyet 161 u_char sc_sync; /* synchronous transfer stuff (?) */ 162 #endif 163 u_char sc_stat[2]; /* status from last `status' phase */ 164 u_char sc_msg[16]; /* message from device */ 165 u_short sc_dmactl; /* control to load into dma csr */ 166 u_long sc_dmaaddr; /* addr to load into dma addr */ 167 int sc_targ; /* the target involved */ 168 int sc_resid; /* count of bytes not xferred */ 169 struct scsi_cdb sc_cdb; /* current command (not in dvma) */ 170 }; 171 172 /* 173 * Values for sc_esptype (used to control configuration reset). 174 * The order is important; see espreset(). 175 */ 176 #define ESP100 0 177 #define ESP100A 1 178 #define ESP2XX 2 179 180 /* 181 * Probe state. 0 means not probing. While looking for each target 182 * we set this to PROBE_TESTING and do a TEST UNIT READY on unit 0. 183 * If selection fails, this is changed to PROBE_NO_TARGET; otherwise 184 * we assume the target exists, regardless of the result of the test. 185 */ 186 #define PROBE_TESTING 1 187 #define PROBE_NO_TARGET 2 188 189 /* 190 * States in sc_state. 191 * 192 * Note that S_CMDSVC is rare: normally we load the SCSI command into the 193 * ESP fifo and get interrupted only when the device has gone to data 194 * or status phase. If the device wants to play games, though, we end 195 * up doing things differently. 196 */ 197 char *espstates[] = { 198 #define S_IDLE 0 /* not doing anything */ 199 "idle", 200 #define S_SEL 1 /* expecting select done interrupt */ 201 "selecting", 202 #define S_CMDSVC 2 /* expecting service req interrupt */ 203 "waiting for service request after command", 204 #define S_IOSVC 3 /* expecting service req interrupt */ 205 "waiting for service request after io", 206 #define S_DI 4 /* expecting data-in done interrupt */ 207 "receiving data", 208 #define S_DO 5 /* expecting data-out done interrupt */ 209 "sending data", 210 #define S_STAT 6 /* expecting status done interrupt */ 211 "receiving status", 212 #define S_MI 7 /* expecting message-in done interrupt */ 213 "receiving message", 214 #define S_FI 8 /* expecting final disconnect interrupt */ 215 "waiting for disconnect" 216 }; 217 218 /* 219 * Return values from espact(). 220 */ 221 #define ACT_CONT 0 /* espact() handled everything */ 222 #define ACT_READ 1 /* target said it is sending us data */ 223 #define ACT_WRITE 2 /* target said it is expecting data */ 224 #define ACT_DONE 3 /* handled everything, and op is now done */ 225 #define ACT_ERROR 4 /* an error occurred, op has been trashed */ 226 #define ACT_RESET 5 /* please reset ESP, then do ACT_ERROR */ 227 #define ACT_QUICKINTR 6 /* another interrupt is expected immediately */ 228 229 /* autoconfiguration driver */ 230 void espattach(struct device *, struct device *, void *); 231 struct cfdriver espcd = 232 { NULL, "esp", matchbyname, espattach, DV_DULL, sizeof(struct esp_softc), 233 "intr" }; 234 235 /* Sbus driver */ 236 void espsbreset(struct device *); 237 238 /* interrupt interface */ 239 int espintr(void *); 240 241 /* SCSI HBA driver */ 242 int espicmd(struct hba_softc *, int, struct scsi_cdb *, caddr_t, int, int); 243 int espdump(struct hba_softc *, int, struct scsi_cdb *, caddr_t, int); 244 void espstart(struct device *, struct sq *, struct buf *, 245 scdgo_fn, struct device *); 246 int espgo(struct device *, int, scintr_fn, struct device *, 247 struct buf *, int); 248 void esprel(struct device *); 249 void esphbareset(struct hba_softc *, int); 250 static struct hbadriver esphbadriver = 251 { espicmd, espdump, espstart, espgo, esprel, esphbareset }; 252 253 /* forward declarations */ 254 static void espdoattach(int unit); 255 static void espreset(struct esp_softc *); 256 257 /* 258 * The transfer size is limited to 16 bits since the scsi ctrl transfer 259 * counter is only 2 bytes. A 0 value means the biggest transfer size 260 * (2 ** 16) == 64k. 261 */ 262 #define MAX_TRANSFER_SIZE (64 * 1024) 263 264 /* Return true if this transfer will cross a dma boundary */ 265 #define CROSS_DMA(addr, len) \ 266 (((int)(addr) & 0xff000000) != (((int)(addr) + (len) - 1) & 0xff000000)) 267 268 /* 269 * Attach a found DMA chip. 270 * The second argument is really a pointer to an sbus_attach_args. 271 */ 272 void 273 dmaattach(parent, dev, args) 274 struct device *parent; 275 struct device *dev; 276 void *args; 277 { 278 register struct dma_softc *dsc = (struct dma_softc *)dev; 279 register struct sbus_attach_args *sa = args; 280 register volatile struct dmareg *dma; 281 register int rev; 282 struct esp_softc *esc; 283 284 if (sa->sa_ra.ra_vaddr) 285 dma = (volatile struct dmareg *)sa->sa_ra.ra_vaddr; 286 else 287 dma = (volatile struct dmareg *) 288 mapiodev(sa->sa_ra.ra_paddr, sizeof(struct dmareg)); 289 dsc->sc_dma = dma; 290 291 switch (rev = DMA_REV(dma->dma_csr)) { 292 case DMAREV_1: 293 printf(": rev 1\n"); 294 dsc->sc_dmafmt = DMA_REV1_BITS; 295 break; 296 case DMAREV_2: 297 printf(": rev 2\n"); 298 dsc->sc_dmafmt = DMA_REV2_BITS; 299 break; 300 case DMAREV_3: 301 printf(": rev 3\n"); 302 printf("WARNING: esp.c not yet updated for rev 3\n"); 303 dsc->sc_dmafmt = DMA_REV3_BITS; 304 break; 305 default: 306 printf(": unknown revision code 0x%x\n", rev); 307 dsc->sc_dmafmt = DMA_REV3_BITS; /* cross fingers */ 308 break; 309 } 310 dsc->sc_dmarev = rev; 311 espdoattach(dsc->sc_dev.dv_unit); 312 } 313 314 /* 315 * Attach a found ESP chip. Search for targets; attach each one found. 316 * The latter must be deferred if the corresponding dma chip has not yet 317 * been configured. 318 */ 319 void 320 espattach(parent, self, args) 321 struct device *parent; 322 struct device *self; 323 void *args; 324 { 325 register struct esp_softc *sc = (struct esp_softc *)self; 326 register struct sbus_attach_args *sa = args; 327 register volatile struct espreg *esp; 328 register struct bootpath *bp; 329 struct dma_softc *dsc; 330 int node, pri, freq, t; 331 332 if (sa->sa_ra.ra_nintr != 1) { 333 printf(": expected 1 interrupt, got %d\n", sa->sa_ra.ra_nintr); 334 return; 335 } 336 pri = sa->sa_ra.ra_intr[0].int_pri; 337 printf(" pri %d", pri); 338 if (sa->sa_ra.ra_vaddr) 339 esp = (volatile struct espreg *)sa->sa_ra.ra_vaddr; 340 else 341 esp = (volatile struct espreg *) 342 mapiodev(sa->sa_ra.ra_paddr, sizeof(struct espreg)); 343 sc->sc_esp = esp; 344 node = sa->sa_ra.ra_node; 345 sc->sc_id = getpropint(node, "initiator-id", 7); 346 freq = getpropint(node, "clock-frequency", -1); 347 if (freq < 0) 348 freq = ((struct sbus_softc *)sc->sc_hba.hba_dev.dv_parent)->sc_clockfreq; 349 350 /* MIGHT NEED TO RESET ESP CHIP HERE ...? */ 351 352 /* 353 * Find out whether we have a -100, -100A, or -2xx, 354 * and what speed it runs at. 355 */ 356 sc->sc_conf1 = sc->sc_id | ESPCONF1_PARENB; 357 /* sc->sc_conf2 = 0; */ 358 /* sc->sc_conf3 = 0; */ 359 esp->esp_conf1 = sc->sc_conf1; 360 esp->esp_conf2 = 0; 361 esp->esp_conf2 = ESPCONF2_SCSI2 | ESPCONF2_RPE; 362 if ((esp->esp_conf2 & ~ESPCONF2_RSVD) != 363 (ESPCONF2_SCSI2 | ESPCONF2_RPE)) { 364 printf(": ESP100"); 365 sc->sc_esptype = ESP100; 366 } else { 367 esp->esp_conf2 = 0; 368 esp->esp_conf3 = 0; 369 esp->esp_conf3 = 5; 370 if (esp->esp_conf3 != 5) { /* XXX def bits */ 371 printf(": ESP100A"); 372 sc->sc_esptype = ESP100A; 373 } else { 374 esp->esp_conf3 = 0; 375 printf(": ESP2XX"); 376 sc->sc_esptype = ESP2XX; 377 } 378 } 379 printf(", clock = %s MHz, ID = %d\n", clockfreq(freq), sc->sc_id); 380 381 /* 382 * Set clock conversion factor and select timeout. 383 * N.B.: clock frequency is not actually used in the rest 384 * of the driver; I calculate it here for completeness only 385 * (so I can see it when debugging). 386 */ 387 sc->sc_clockfreq = freq; 388 freq = howmany(freq, 1000 * 1000); /* convert to MHz */ 389 t = ESPCCF_FROMMHZ(freq); 390 if (t < ESPCCF_MIN) 391 t = ESPCCF_MIN; 392 sc->sc_ccf = t; 393 t = ESPTIMO_REGVAL(250, t, freq); /* timeout = 250 ms. */ 394 if (t >= 256) 395 t = 0; 396 sc->sc_sel_timeout = t; 397 398 /* 399 * Link into sbus; set interrupt handler. 400 */ 401 sc->sc_sd.sd_reset = espsbreset; 402 sbus_establish(&sc->sc_sd, &sc->sc_hba.hba_dev); 403 sc->sc_ih.ih_fun = espintr; 404 sc->sc_ih.ih_arg = sc; 405 intr_establish(pri, &sc->sc_ih); 406 evcnt_attach(&sc->sc_hba.hba_dev, "intr", &sc->sc_intrcnt); 407 408 #define SAME_ESP(bp, sa) \ 409 ((bp->val[0] == sa->sa_slot && bp->val[1] == sa->sa_offset) || \ 410 (bp->val[0] == -1 && bp->val[1] == sc->sc_hba.hba_dev.dv_unit)) 411 412 bp = sa->sa_ra.ra_bp; 413 if (bp != NULL && strcmp(bp->name, "esp") == 0 && SAME_ESP(bp, sa)) 414 sc->sc_bp = bp + 1; 415 espdoattach(sc->sc_hba.hba_dev.dv_unit); 416 } 417 418 /* 419 * `Final' attach of esp occurs once esp and dma chips have been found 420 * and assigned virtual addresses. Set up the ESP SCSI data structures 421 * and probe the SCSI bus. 422 */ 423 static void 424 espdoattach(unit) 425 int unit; 426 { 427 register struct esp_softc *sc; 428 register struct dma_softc *dsc; 429 register struct bootpath *bp; 430 register struct targ *t; 431 register int targ, u; 432 433 /* make sure we have both */ 434 if (espcd.cd_ndevs <= unit || 435 dmacd.cd_ndevs <= unit || 436 (sc = espcd.cd_devs[unit]) == NULL || 437 (dsc = dmacd.cd_devs[unit]) == NULL) 438 return; 439 sc->sc_dsc = dsc; 440 sc->sc_dma = dsc->sc_dma; 441 sc->sc_hba.hba_driver = &esphbadriver; 442 443 espreset(sc); 444 445 /* MAYBE THIS SHOULD BE MOVED TO scsi_subr.c? */ 446 for (targ = 0; targ < 8; targ++) { 447 if (targ == sc->sc_id) 448 continue; 449 sc->sc_probing = PROBE_TESTING; 450 sc->sc_clearing = 1; 451 (void) scsi_test_unit_ready(&sc->sc_hba, targ, 0); 452 if (sc->sc_probing != PROBE_NO_TARGET) { 453 sc->sc_probing = 0; 454 sc->sc_clearing = 0; 455 SCSI_FOUNDTARGET(&sc->sc_hba, targ); 456 } 457 } 458 sc->sc_probing = 0; 459 sc->sc_clearing = 0; 460 461 if ((bp = sc->sc_bp) == NULL || (u_int)(targ = bp->val[0]) >= 8 || 462 (u_int)(u = bp->val[1]) >= 8) 463 return; 464 465 /* 466 * Did we find it? We could compare bp->name against the unit's 467 * name but there's no real need since a target and unit 468 * uniquely specify a scsi device. 469 */ 470 if ((t = sc->sc_hba.hba_targets[targ]) != NULL && t->t_units[u] != NULL) 471 bootdv = t->t_units[u]->u_dev; 472 } 473 474 /* 475 * Internal DMA reset. 476 */ 477 static void 478 dmareset(sc) 479 struct esp_softc *sc; 480 { 481 register volatile struct dmareg *dma = sc->sc_dma; 482 483 /* reset DMA chip */ 484 dma->dma_csr |= DMA_RESET; 485 DELAY(200); 486 dma->dma_csr &= ~DMA_RESET; /* ??? */ 487 sc->sc_state = S_IDLE; 488 sc->sc_dmaactive = 0; 489 if (sc->sc_dsc->sc_dmarev == DMAREV_2 && sc->sc_esptype != ESP100) 490 dma->dma_csr |= DMA_TURBO; 491 dma->dma_csr |= DMA_IE; /* enable interrupts */ 492 DELAY(200); 493 } 494 495 /* 496 * Reset the chip. N.B.: this causes a SCSI bus reset! 497 */ 498 static void 499 espreset(sc) 500 register struct esp_softc *sc; 501 { 502 register volatile struct espreg *esp = sc->sc_esp; 503 504 dmareset(sc); 505 esp->esp_cmd = ESPCMD_RESET_CHIP; 506 DELAY(200); 507 esp->esp_cmd = ESPCMD_NOP; 508 DELAY(200); 509 510 /* 511 * Reload configuration registers (cleared by RESET_CHIP command). 512 * Reloading conf2 on an ESP100 goofs it up, so out of paranoia 513 * we load only the registers that exist. 514 */ 515 esp->esp_conf1 = sc->sc_conf1; 516 if (sc->sc_esptype > ESP100) { /* 100A, 2XX */ 517 esp->esp_conf2 = sc->sc_conf2; 518 if (sc->sc_esptype > ESP100A) /* 2XX only */ 519 esp->esp_conf3 = sc->sc_conf3; 520 } 521 esp->esp_ccf = sc->sc_ccf; 522 esp->esp_timeout = sc->sc_sel_timeout; 523 /* We set synch offset later. */ 524 525 sc->sc_needclear = 0xff; 526 } 527 528 /* 529 * Reset the SCSI bus and, optionally, all attached targets. 530 * The chip should retain most of its parameters (including esp_ccf) 531 * across this kind of reset (see section 3.5 of Emulex documentation). 532 */ 533 void 534 esphbareset(hba, resetunits) 535 struct hba_softc *hba; 536 int resetunits; 537 { 538 register struct esp_softc *sc = (struct esp_softc *)hba; 539 register volatile struct espreg *esp = sc->sc_esp; 540 541 dmareset(sc); 542 543 /* BEGIN ??? */ 544 /* turn off scsi bus reset interrupts and reset scsi bus */ 545 esp->esp_conf1 = sc->sc_conf1 | ESPCONF1_REPORT; 546 DELAY(200); 547 esp->esp_cmd = ESPCMD_RESET_BUS; 548 DELAY(800); 549 esp->esp_cmd = ESPCMD_NOP; 550 DELAY(200); 551 esp->esp_conf1 = sc->sc_conf1; 552 /* END ??? */ 553 554 sc->sc_needclear = 0xff; 555 556 if (resetunits) 557 scsi_reset_units(&sc->sc_hba); 558 } 559 560 /* 561 * Reset the esp, after an Sbus reset. 562 * Also resets corresponding dma chip. 563 * 564 * THIS ROUTINE MIGHT GO AWAY 565 */ 566 void 567 espsbreset(dev) 568 struct device *dev; 569 { 570 struct esp_softc *sc = (struct esp_softc *)dev; 571 572 if (sc->sc_dsc) { 573 printf(" %s %s", sc->sc_dsc->sc_dev.dv_xname, 574 sc->sc_hba.hba_dev.dv_xname); 575 esphbareset(&sc->sc_hba, 1); 576 } 577 } 578 579 static void 580 esperror(sc, err) 581 char *err; 582 register struct esp_softc *sc; 583 { 584 585 printf("%s: %s (target=%d): stat=%b step=%x dmacsr=%b intr=%b\n", 586 sc->sc_hba.hba_dev.dv_xname, err, sc->sc_targ, 587 sc->sc_espstat, ESPSTAT_BITS, sc->sc_espstep, 588 sc->sc_dmacsr, sc->sc_dsc->sc_dmafmt, 589 sc->sc_espintr, ESPINTR_BITS); 590 } 591 592 /* 593 * An interrupt has occurred. Sequence through the SCSI state machine. 594 * Return the action to take. 595 * 596 * Most of the work happens here. 597 * 598 * There are three interrupt sources: 599 * -- ESP interrupt request (typically, some device wants something). 600 * -- DMA memory error. 601 * -- DMA byte count has reached 0 (we do not often want this one but 602 * can only turn it off in rev 2 DMA chips, it seems). 603 * DOES THIS OCCUR AT ALL HERE? THERE IS NOTHING TO HANDLE IT! 604 */ 605 static int 606 espact(sc, esp, dma, cdb) 607 register struct esp_softc *sc; 608 register volatile struct espreg *esp; 609 register volatile struct dmareg *dma; 610 register struct scsi_cdb *cdb; 611 { 612 register char *xname = sc->sc_hba.hba_dev.dv_xname; 613 register int reg, phase, i; 614 615 /* check various error conditions, using as little code as possible */ 616 if (sc->sc_dmacsr & DMA_EP) { 617 esperror(sc, "DMA error"); 618 dma->dma_csr |= DMA_FLUSH; 619 return (ACT_ERROR); 620 } 621 reg = sc->sc_espstat; 622 if (reg & ESPSTAT_GE) { 623 /* 624 * This often occurs when there is no target. 625 * (See DSC code below.) 626 */ 627 if (sc->sc_espintr & ESPINTR_DSC && 628 sc->sc_state == S_SEL && sc->sc_probing) { 629 sc->sc_probing = PROBE_NO_TARGET; 630 return (ACT_RESET); 631 } 632 esperror(sc, "DIAGNOSTIC: gross error (ignored)"); 633 } 634 if (reg & ESPSTAT_PE) { 635 esperror(sc, "parity error"); 636 return (ACT_RESET); 637 } 638 reg = sc->sc_espintr; 639 #define ERR (ESPINTR_SBR|ESPINTR_ILC|ESPINTR_RSL|ESPINTR_SAT|ESPINTR_SEL) 640 if (reg & ERR) { 641 if (reg & ESPINTR_SBR) 642 esperror(sc, "scsi bus reset"); 643 else if (reg & ESPINTR_ILC) 644 esperror(sc, "illegal command (driver bug)"); 645 else { 646 printf("%s: target %d", xname, sc->sc_targ); 647 if (reg & ESPINTR_RSL) 648 printf(" tried to reselect;"); 649 if (reg & ESPINTR_SAT) 650 printf(" selected with ATN;"); 651 if (reg & ESPINTR_SEL) 652 printf(" selected us as target;"); 653 printf("we do not allow this yet\n"); 654 } 655 return (ACT_ERROR); 656 } 657 #undef ERR 658 659 /* 660 * Disconnect currently only allowed in `final interrupt' states. 661 */ 662 if (reg & ESPINTR_DSC) { 663 if (sc->sc_state == S_FI) 664 return (ACT_DONE); 665 /* 666 * If we were doing a select just to test the existence 667 * of the target, note that it did not respond; otherwise 668 * gripe. 669 */ 670 if (sc->sc_state == S_SEL) { 671 if (sc->sc_probing) { 672 sc->sc_probing = PROBE_NO_TARGET; 673 return (ACT_RESET); 674 } 675 } 676 /* flush fifo, in case we were selecting or sending data */ 677 esp->esp_cmd = ESPCMD_FLUSH_FIFO; 678 printf("%s: target %d not responding\n", 679 xname, sc->sc_targ); 680 return (ACT_ERROR); 681 } 682 683 /* 684 * Okay, things are moving along. 685 * What were we doing the last time we did something, 686 * and did it complete normally? 687 */ 688 phase = sc->sc_espstat & ESPSTAT_PHASE; 689 switch (sc->sc_state) { 690 691 case S_SEL: 692 /* 693 * We were selecting. Arbitration and select are 694 * complete (because ESPINTR_DSC was not set), but 695 * there is no guarantee the command went out. 696 */ 697 if ((reg & (ESPINTR_SVC|ESPINTR_CMP)) != 698 (ESPINTR_SVC|ESPINTR_CMP)) { 699 esperror(sc, "selection failed"); 700 return (ACT_RESET); 701 } 702 if (sc->sc_espstep == ESPSTEP_DONE) { 703 sc->sc_sentcmd = 1; 704 break; 705 } 706 if (sc->sc_espstep == 2) { 707 /* 708 * We got something other than command phase. 709 * Just pretend things are normal; the 710 * device will ask for the command later. 711 */ 712 esperror(sc, "DIAGNOSTIC: esp step 2"); 713 } else if (sc->sc_espstep == 3) { 714 /* 715 * Device entered command phase and then exited it 716 * before we finished handing out the command. 717 * Let this happen iff we are trying to clear the 718 * target state. 719 */ 720 esperror(sc, "DIAGNOSTIC: esp step 3"); 721 if (!sc->sc_clearing) 722 return (ACT_RESET); 723 } else { 724 printf("%s: mysterious esp step %d\n", 725 xname, sc->sc_espstep); 726 return (ACT_RESET); 727 } 728 /* 729 * Part of the command may still be lodged in the FIFO. 730 */ 731 esp->esp_cmd = ESPCMD_FLUSH_FIFO; 732 break; 733 734 case S_CMDSVC: 735 /* 736 * We were waiting for phase change after stuffing the command 737 * into the FIFO. Make sure it got out. 738 */ 739 reg = ESP_NFIFO(esp); 740 if (reg) { 741 esperror(sc, "DIAGNOSTIC: CMDSVC, fifo not empty"); 742 printf("\tfifo count = %x\n", reg); 743 esp->esp_cmd = ESPCMD_FLUSH_FIFO; 744 } else 745 sc->sc_sentcmd = 1; 746 break; 747 748 case S_IOSVC: 749 /* 750 * We were waiting for phase change after I/O. 751 */ 752 break; 753 754 case S_DI: 755 /* 756 * We were doing DMA data in, and expecting a 757 * transfer-count-zero interrupt or a phase change. 758 * We got that; drain the pack register and 759 * handle as for data out. 760 */ 761 dma->dma_csr |= DMA_DRAIN; 762 reg = 0; /* FIFO auto flushed? */ 763 goto dma_data_done; 764 765 case S_DO: 766 /* 767 * We were doing DMA data out. If there is data in the 768 * FIFO, it is stuff that got DMAed out but never made 769 * it to the device, so it counts as residual. 770 * 771 * XXX handle DMA IO with large count or address 772 * boundary condition by resuming here, or below? 773 */ 774 if ((reg = ESP_NFIFO(esp)) != 0) 775 esp->esp_cmd = ESPCMD_FLUSH_FIFO; 776 dma_data_done: 777 if (sc->sc_dmaactive == 0) { 778 printf("%s: dma done while %s, dmaactive==0\n", 779 xname, espstates[sc->sc_state]); 780 panic("espact"); 781 } 782 sc->sc_dmaactive = 0; 783 reg += esp->esp_tcl | (esp->esp_tch << 8); 784 if (reg == 0 && (sc->sc_espstat & ESPSTAT_TC) == 0) 785 reg = 65536; 786 if (reg > sc->sc_resid) { 787 printf("%s: xfer resid (%d) > xfer req (%d)\n", 788 xname, reg, sc->sc_resid); 789 reg = sc->sc_resid; 790 } 791 /* 792 * If data came in we must flush cache. 793 */ 794 if (sc->sc_state == S_DI) 795 cache_flush(sc->sc_dmaaddr, sc->sc_resid - reg); 796 sc->sc_resid = reg; 797 if ((sc->sc_espintr & ESPINTR_SVC) == 0) { 798 printf("%s: no bus service req\n", xname); 799 return (ACT_RESET); 800 } 801 break; 802 803 case S_STAT: 804 /* 805 * The last thing we did was tell it `initiator complete' 806 * and so we expect to have gotten both the status byte 807 * and the final message byte. It is possible that we 808 * got something else.... 809 * 810 * Apparently, BUS SERVICE is set if we got just status, 811 * while FUNCTION COMPLETE is set if we got both. 812 */ 813 if ((reg & (ESPINTR_SVC|ESPINTR_CMP)) != ESPINTR_CMP) { 814 esperror(sc, "bad status interrupt state"); 815 return (ACT_RESET); 816 } 817 reg = ESP_NFIFO(esp); 818 if (reg < 2) { 819 printf( 820 "%s: command done but fifo count = %d; must be >= 2\n", xname, 821 reg); 822 return (ACT_RESET); 823 } 824 /* 825 * Read the status and the first msg byte. 826 * It should be CMD_COMPLETE. Eventually we 827 * may handle IDENTIFY, DISCONNECT, etc., as well. 828 */ 829 sc->sc_stat[0] = esp->esp_fifo; 830 sc->sc_msg[0] = reg = esp->esp_fifo; 831 esp->esp_cmd = ESPCMD_MSG_ACCEPT; 832 if (reg == MSG_CMD_COMPLETE) { 833 sc->sc_state = S_FI; 834 return (ACT_CONT); 835 } 836 if (SCSIMSGLEN(reg) != 1) { 837 printf("%s: target %d is naughty\n", 838 xname, sc->sc_targ); 839 return (ACT_RESET); 840 } 841 printf("%s: warning: target %d returned msg 0x%x\n", 842 xname, sc->sc_targ, reg); 843 sc->sc_state = S_FI; 844 return (ACT_CONT); 845 846 case S_MI: 847 if ((reg & ESPINTR_SVC) == 0) { 848 esperror(sc, "missing phase after msg in"); 849 return (ACT_RESET); 850 } 851 reg = ESP_NFIFO(esp); 852 for (i = 0; i < reg; i++) 853 sc->sc_msg[i] = esp->esp_fifo; 854 break; 855 856 case S_FI: 857 esperror(sc, "target did not disconnect"); 858 return (ACT_RESET); 859 } 860 861 /* 862 * Things are still moving along. The phase tells us 863 * what the device wants next. Do it. 864 */ 865 switch (phase) { 866 867 case ESPPHASE_DATA_OUT: 868 if (!sc->sc_sentcmd) esperror(sc, "DIAGNOSTIC: data out without command"); 869 sc->sc_state = S_DO; 870 return (ACT_WRITE); 871 872 case ESPPHASE_DATA_IN: 873 if (!sc->sc_sentcmd) esperror(sc, "DIAGNOSTIC: data in without command"); 874 sc->sc_state = S_DI; 875 return (ACT_READ); 876 877 case ESPPHASE_CMD: 878 /* 879 * Silly thing wants the command again. 880 * Load it into the FIFO and go to CMDSVC state. 881 */ 882 printf("%s: redoing command\n", xname); 883 reg = SCSICMDLEN(cdb->cdb_bytes[0]); 884 for (i = 0; i < reg; i++) 885 esp->esp_fifo = cdb->cdb_bytes[i]; 886 sc->sc_state = S_CMDSVC; 887 esp->esp_cmd = ESPCMD_XFER_INFO; 888 return (ACT_CONT); 889 890 case ESPPHASE_STATUS: 891 sc->sc_state = S_STAT; 892 esp->esp_cmd = ESPCMD_INIT_COMP; 893 return (ACT_CONT); 894 895 case ESPPHASE_MSG_IN: 896 printf("%s: accepting (& ignoring) msg from target %d\n", xname, sc->sc_targ); 897 sc->sc_state = S_MI; 898 esp->esp_cmd = ESPCMD_MSG_ACCEPT; 899 return (ACT_CONT); 900 901 default: 902 printf("%s: target %d asked for strange phase (%s)\n", 903 xname, sc->sc_targ, espphases[phase]); 904 return (ACT_RESET); 905 } 906 /* NOTREACHED */ 907 } 908 909 /* 910 * Issue a select, loading command into the FIFO. 911 * Return nonzero on error, 0 if OK. 912 * Sets state to `selecting'; espact() will sequence state FSM. 913 */ 914 void 915 espselect(sc, esp, targ, cdb) 916 register struct esp_softc *sc; 917 register volatile struct espreg *esp; 918 register int targ; 919 register struct scsi_cdb *cdb; 920 { 921 register int i, cmdlen = SCSICMDLEN(cdb->cdb_bytes[0]); 922 923 sc->sc_targ = targ; 924 sc->sc_state = S_SEL; 925 sc->sc_sentcmd = 0; 926 sc->sc_stat[0] = 0xff; /* ??? */ 927 sc->sc_msg[0] = 0xff; /* ??? */ 928 929 /* 930 * Try to talk to target. 931 * Synch offset 0 => asynchronous transfer. 932 */ 933 esp->esp_id = targ; 934 esp->esp_syncoff = 0; 935 936 /* 937 * Stuff the command bytes into the fifo. 938 * Select without attention since we do not do disconnect yet. 939 */ 940 for (i = 0; i < cmdlen; i++) 941 esp->esp_fifo = cdb->cdb_bytes[i]; 942 esp->esp_cmd = ESPCMD_SEL_NATN; 943 /* the rest is done elsewhere */ 944 } 945 946 /* 947 * THIS SHOULD BE ADJUSTABLE 948 */ 949 /* name howlong purpose */ 950 #define SELECT_WAIT 300000 /* wait for select to complete */ 951 #define CMD_WAIT 1000 /* wait for next phase, generic */ 952 #define IO_WAIT 1000000 /* time to xfer data in/out */ 953 #define POSTDATA_WAIT 10000000 /* wait for next phase, after dataio */ 954 955 /* 956 * Transfer data out via polling. Return success (0) iff all 957 * the bytes were sent and we got an interrupt. 958 * 959 * This returns -1 on timeout, resid count on early interrupt, 960 * but no one really cares.... 961 */ 962 static int 963 espixfer_out(sc, esp, dma, buf, len) 964 register struct esp_softc *sc; 965 register volatile struct espreg *esp; 966 register volatile struct dmareg *dma; 967 register caddr_t buf; 968 register int len; 969 { 970 register int wait, n; 971 972 if (CROSS_DMA(buf, len)) 973 panic("espixfer_out: 16MB boundary"); 974 975 /* set dma address and transfer count */ 976 dma->dma_addr = (int)buf; 977 esp->esp_tch = len >> 8; 978 esp->esp_tcl = len; 979 980 /* load count into counter via DMA NOP */ 981 esp->esp_cmd = ESPCMD_DMA | ESPCMD_NOP; 982 983 /* enable dma (but not interrupts) */ 984 dma->dma_csr = DMA_ENA; 985 986 /* and go */ 987 esp->esp_cmd = ESPCMD_DMA | ESPCMD_XFER_INFO; 988 989 /* wait for completion */ 990 for (wait = IO_WAIT; wait > 0; --wait) { 991 n = dma->dma_csr; 992 if (DMA_INTR(n)) { 993 sc->sc_espstat = esp->esp_stat; 994 sc->sc_espstep = esp->esp_step & ESPSTEP_MASK; 995 sc->sc_espintr = esp->esp_intr; 996 sc->sc_dmacsr = n; 997 n = esp->esp_tcl | (esp->esp_tch << 8); 998 if (n == 0 && (sc->sc_espstat & ESPSTAT_TC) == 0) 999 n = 65536; 1000 1001 return (n); 1002 } 1003 DELAY(1); 1004 } 1005 return (-1); 1006 } 1007 1008 /* 1009 * Transfer data in via polling. 1010 * Return resid count on interrupt, -1 if timed out. 1011 */ 1012 static int 1013 espixfer_in(sc, esp, dma, buf, len) 1014 register struct esp_softc *sc; 1015 register volatile struct espreg *esp; 1016 register volatile struct dmareg *dma; 1017 register caddr_t buf; 1018 register int len; 1019 { 1020 register int wait, n; 1021 1022 if (CROSS_DMA(buf, len)) 1023 panic("espixfer_in: 16MB boundary"); 1024 1025 /* set dma address and transfer count */ 1026 dma->dma_addr = (int)buf; 1027 esp->esp_tch = len >> 8; 1028 esp->esp_tcl = len; 1029 1030 /* load count into counter via DMA NOP */ 1031 esp->esp_cmd = ESPCMD_DMA | ESPCMD_NOP; 1032 1033 /* enable dma (but not interrupts) */ 1034 dma->dma_csr = DMA_ENA | DMA_READ; 1035 1036 /* and go */ 1037 esp->esp_cmd = ESPCMD_DMA | ESPCMD_XFER_INFO; 1038 1039 /* wait for completion */ 1040 for (wait = IO_WAIT; wait > 0; --wait) { 1041 n = dma->dma_csr; 1042 if (DMA_INTR(n)) { 1043 sc->sc_espstat = esp->esp_stat; 1044 sc->sc_espstep = esp->esp_step & ESPSTEP_MASK; 1045 sc->sc_espintr = esp->esp_intr; 1046 dma->dma_csr |= DMA_DRAIN; 1047 sc->sc_dmacsr = n; 1048 n = esp->esp_tcl | (esp->esp_tch << 8); 1049 if (n == 0 && (sc->sc_espstat & ESPSTAT_TC) == 0) 1050 n = 65536; 1051 1052 cache_flush(buf, (u_int)len - n); 1053 return (n); 1054 } 1055 DELAY(1); 1056 } 1057 return (-1); 1058 } 1059 1060 /* 1061 * Clear out target state by doing a special TEST UNIT READY. 1062 * Note that this calls espicmd (possibly recursively). 1063 */ 1064 void 1065 espclear(sc, targ) 1066 register struct esp_softc *sc; 1067 register int targ; 1068 { 1069 1070 /* turn off needclear immediately since this calls espicmd() again */ 1071 sc->sc_needclear &= ~(1 << targ); 1072 sc->sc_clearing = 1; 1073 (void) scsi_test_unit_ready(&sc->sc_hba, targ, 0); 1074 sc->sc_clearing = 0; 1075 } 1076 1077 /* 1078 * Send an `immediate' command, i.e., poll until the whole thing is done. 1079 * Return the status byte from the device, or -1 if we timed out. 1080 */ 1081 int 1082 espicmd(hba, targ, cdb, buf, len, rw) 1083 register struct hba_softc *hba; 1084 int targ; 1085 register struct scsi_cdb *cdb; 1086 caddr_t buf; 1087 register int len; 1088 int rw; 1089 { 1090 register struct esp_softc *sc = (struct esp_softc *)hba; 1091 register volatile struct espreg *esp = sc->sc_esp; 1092 register volatile struct dmareg *dma = sc->sc_dma; 1093 register int r, wait; 1094 char *msg; 1095 1096 if ((unsigned)len > MAX_TRANSFER_SIZE) { 1097 printf("%s: bad length %d\n", sc->sc_hba.hba_dev.dv_xname, len); 1098 panic("espicmd"); 1099 } 1100 1101 /* 1102 * Clear the target if necessary. 1103 */ 1104 if (sc->sc_needclear & (1 << targ) && !sc->sc_probing) 1105 espclear(sc, targ); 1106 1107 /* 1108 * Disable hardware interrupts, start select sequence. 1109 * Wait for interrupt-pending bit, then call espact() to 1110 * sequence the state machine. When it tells us to do 1111 * data transfer, we do programmed I/O. 1112 * In any case, we loop calling espact() until done. 1113 */ 1114 dma->dma_csr = 0; /* disable hardware interrupts */ 1115 espselect(sc, esp, targ, cdb); 1116 wait = SELECT_WAIT; 1117 loop: 1118 for (;;) { 1119 r = dma->dma_csr; 1120 if (!DMA_INTR(r)) { 1121 if (--wait < 0) { 1122 msg = "timeout waiting for phase change"; 1123 goto err; 1124 } 1125 DELAY(1); 1126 continue; 1127 } 1128 break; 1129 } 1130 sc->sc_espstat = esp->esp_stat; 1131 sc->sc_espstep = esp->esp_step & ESPSTEP_MASK; 1132 sc->sc_espintr = esp->esp_intr; 1133 sc->sc_dmacsr = r; 1134 /* 1135 * The action happens `twice around' for read and write. 1136 * All the rest `goto loop' or return or some such. 1137 */ 1138 wait = CMD_WAIT; 1139 for (;;) { 1140 switch (r = espact(sc, esp, dma, cdb)) { 1141 1142 case ACT_CONT: 1143 case ACT_QUICKINTR: 1144 goto loop; 1145 1146 case ACT_READ: 1147 if (len == 0 || (rw & B_READ) == 0) { 1148 msg = "wrong phase"; 1149 goto err; 1150 } 1151 r = espixfer_in(sc, esp, dma, buf, len); 1152 if (r < 0) { 1153 msg = "timeout reading from device"; 1154 goto err; 1155 } 1156 buf += len - r; 1157 len = r; 1158 /* we did the io, expecting `generic service' */ 1159 sc->sc_state = S_IOSVC; 1160 wait = POSTDATA_WAIT; 1161 break; 1162 1163 case ACT_WRITE: 1164 if (len == 0 || rw & B_READ) { 1165 msg = "wrong phase"; 1166 goto err; 1167 } 1168 if (espixfer_out(sc, esp, dma, buf, len)) { 1169 msg = "timeout writing to device"; 1170 goto err; 1171 } 1172 sc->sc_state = S_IOSVC; 1173 wait = POSTDATA_WAIT; 1174 break; 1175 1176 case ACT_RESET: 1177 sc->sc_state = S_IDLE; 1178 goto reset; 1179 1180 case ACT_DONE: 1181 sc->sc_state = S_IDLE; 1182 return (sc->sc_stat[0]); 1183 1184 case ACT_ERROR: 1185 sc->sc_state = S_IDLE; 1186 return (-1); 1187 1188 default: 1189 panic("espicmd action"); 1190 } 1191 } 1192 err: 1193 printf("%s: target %d: %s (phase = %s)\n", 1194 sc->sc_hba.hba_dev.dv_xname, targ, msg, 1195 espphases[sc->sc_espstat & ESPSTAT_PHASE]); 1196 reset: 1197 espreset(sc); /* ??? */ 1198 return (-1); 1199 } 1200 1201 /* 1202 * Dump (write memory, possibly physmem). 1203 * SPARC higher-level dump code always provides virtual addresses, 1204 * so we need not do any I/O mapping here. 1205 */ 1206 int 1207 espdump(hba, targ, cdb, buf, len) 1208 register struct hba_softc *hba; 1209 int targ; 1210 register struct scsi_cdb *cdb; 1211 caddr_t buf; 1212 register int len; 1213 { 1214 1215 return (espicmd(hba, targ, cdb, buf, len, B_WRITE)); 1216 } 1217 1218 /* 1219 * Allocate resources (SCSI bus and DVMA space) for the given transfer. 1220 * Must be called at splbio(). 1221 * 1222 * THIS SHOULD RETURN SUCCESS/FAIL INDICATION 1223 */ 1224 void 1225 espstart(self, sq, bp, dgo, dev) 1226 struct device *self; 1227 register struct sq *sq; 1228 struct buf *bp; 1229 scdgo_fn dgo; 1230 struct device *dev; 1231 { 1232 register struct esp_softc *sc = (struct esp_softc *)self; 1233 1234 if (sc->sc_hba.hba_busy == 0) { 1235 /* 1236 * Bus not busy, nothing to do here, just tell 1237 * this target or unit that it has the SCSI bus. 1238 */ 1239 sc->sc_hba.hba_busy = 1; 1240 (*dgo)(dev, &sc->sc_cdb); 1241 } else { 1242 /* 1243 * Bus is busy; just enqueue. 1244 */ 1245 sq->sq_dgo = dgo; 1246 sq->sq_dev = dev; 1247 sq->sq_forw = NULL; 1248 if (sc->sc_hba.hba_head == NULL) 1249 sc->sc_hba.hba_head = sq; 1250 else 1251 sc->sc_hba.hba_tail->sq_forw = sq; 1252 sc->sc_hba.hba_tail = sq; 1253 } 1254 } 1255 1256 /* 1257 * Send a `dma' command, i.e., send the cdb and use DMA to send the data. 1258 * Return 0 on success, 1 on failure. 1259 */ 1260 int 1261 espgo(self, targ, intr, dev, bp, pad) 1262 struct device *self; 1263 int targ; 1264 scintr_fn intr; 1265 struct device *dev; 1266 register struct buf *bp; 1267 int pad; 1268 { 1269 register struct esp_softc *sc = (struct esp_softc *)self; 1270 register int len = bp->b_bcount; 1271 register u_long addr; 1272 1273 if ((unsigned)len > MAX_TRANSFER_SIZE) { 1274 printf("%s: %s\n", sc->sc_hba.hba_dev.dv_xname, 1275 len < 0 ? "negative length" : "transfer too big"); 1276 return (1); 1277 } 1278 1279 if (sc->sc_needclear & (1 << targ)) 1280 espclear(sc, targ); 1281 1282 /* 1283 * Set dma registers later, on data transfer, 1284 * but compute the contents now. 1285 * COULD JUST REMEMBER bp HERE...? 1286 * 1287 * The DMA chip cannot cross a 16 MB address boundary. 1288 * We should do this as multiple DMA transactions on a 1289 * single SCSI command, but I have not written that yet. 1290 */ 1291 sc->sc_dmactl = bp->b_flags & B_READ ? DMA_ENA | DMA_READ | DMA_IE : 1292 DMA_ENA | DMA_IE; 1293 addr = (u_long)bp->b_un.b_addr; 1294 /* dma chip cannot cross 16MB boundary XXX */ 1295 if (CROSS_DMA(addr, len)) 1296 panic("dma crosses 16MB boundary: fix esp.c"); 1297 sc->sc_dmaaddr = addr; 1298 sc->sc_resid = len; 1299 1300 /* 1301 * Enable interrupts and start selection. 1302 * The rest is done in our interrupt handler. 1303 */ 1304 sc->sc_hba.hba_intr = intr; /* remember dev done function */ 1305 sc->sc_hba.hba_intrdev = dev; /* and its first arg */ 1306 sc->sc_dma->dma_csr = DMA_IE; 1307 espselect(sc, sc->sc_esp, targ, &sc->sc_cdb); 1308 return (0); 1309 } 1310 1311 /* 1312 * Handle interrupt. Return 1 if taken. 1313 */ 1314 int 1315 espintr(sc0) 1316 void *sc0; 1317 { 1318 register struct esp_softc *sc = (struct esp_softc *)sc0; 1319 register volatile struct espreg *esp = sc->sc_esp; 1320 register volatile struct dmareg *dma = sc->sc_dma; 1321 register int r, wait; 1322 register struct sq *sq; 1323 1324 r = dma->dma_csr; 1325 if (!DMA_INTR(r)) 1326 return (0); /* not ours */ 1327 sc->sc_intrcnt.ev_count++; 1328 1329 again: 1330 sc->sc_espstat = esp->esp_stat; 1331 sc->sc_espstep = esp->esp_step & ESPSTEP_MASK; 1332 sc->sc_espintr = esp->esp_intr; 1333 sc->sc_dmacsr = r; 1334 1335 if (sc->sc_state == S_IDLE) { 1336 printf("%s: stray interrupt\n", sc->sc_hba.hba_dev.dv_xname); 1337 dma->dma_csr &= ~DMA_IE; /* ??? */ 1338 return (1); 1339 } 1340 switch (r = espact(sc, esp, dma, &sc->sc_cdb)) { 1341 1342 case ACT_CONT: /* just return */ 1343 break; 1344 1345 case ACT_READ: 1346 case ACT_WRITE: 1347 /* 1348 * We have to do this ourselves since another 1349 * user of espact() wants to do programmed I/O. 1350 * If we already did dma, and are done, stop. 1351 */ 1352 if (sc->sc_resid == 0) { 1353 printf("%s: target %d sent too much data\n", 1354 sc->sc_hba.hba_dev.dv_xname, sc->sc_targ); 1355 goto reset; 1356 } 1357 sc->sc_dmaactive = 1; 1358 dma->dma_addr = sc->sc_dmaaddr; 1359 esp->esp_tch = sc->sc_resid >> 8; 1360 esp->esp_tcl = sc->sc_resid; 1361 /* load count into counter via DMA NOP */ 1362 esp->esp_cmd = ESPCMD_DMA | ESPCMD_NOP; 1363 /* enable dma */ 1364 dma->dma_csr = sc->sc_dmactl; 1365 /* and go */ 1366 esp->esp_cmd = ESPCMD_DMA | ESPCMD_XFER_INFO; 1367 break; 1368 1369 case ACT_RESET: /* please reset esp */ 1370 reset: 1371 espreset(sc); /* ??? */ 1372 /* FALLTHROUGH */ 1373 1374 case ACT_DONE: /* this one is done, successfully */ 1375 case ACT_ERROR: /* this one is done due to `severe' error */ 1376 sc->sc_state = S_IDLE; 1377 if (!sc->sc_hba.hba_busy) 1378 panic("espintr sq"); 1379 /* 1380 * This transaction is done. 1381 * Call the driver's intr routine, 1382 * then start the next guy if any. 1383 */ 1384 (*sc->sc_hba.hba_intr)(sc->sc_hba.hba_intrdev, 1385 r == ACT_DONE ? sc->sc_stat[0] : -1, sc->sc_resid); 1386 if ((sq = sc->sc_hba.hba_head) != NULL) { 1387 sc->sc_hba.hba_head = sq->sq_forw; 1388 (*sq->sq_dgo)(sq->sq_dev, &sc->sc_cdb); 1389 } else 1390 sc->sc_hba.hba_busy = 0; 1391 break; 1392 1393 case ACT_QUICKINTR: /* wait a short while for another interrupt */ 1394 printf("%s: quickintr: ", sc->sc_hba.hba_dev.dv_xname); 1395 wait = 100; 1396 do { 1397 r = dma->dma_csr; 1398 if (DMA_INTR(r)) { 1399 printf("got one, wait=%d\n", wait); 1400 goto again; 1401 } 1402 } while (--wait > 0); 1403 printf("did not get one\n"); 1404 break; 1405 1406 default: 1407 panic("espintr action"); 1408 } 1409 return (1); 1410 } 1411 1412 /* 1413 * Target or unit decided to let go of the bus early. 1414 */ 1415 void 1416 esprel(self) 1417 struct device *self; 1418 { 1419 register struct esp_softc *sc = (struct esp_softc *)self; 1420 register struct sq *sq; 1421 1422 /* if there is someone else waiting, give them a crack at it */ 1423 if ((sq = sc->sc_hba.hba_head) != NULL) 1424 (*sq->sq_dgo)(sq->sq_dev, &sc->sc_cdb); 1425 else 1426 sc->sc_hba.hba_busy = 0; 1427 } 1428