1 1.39 msaitoh /* $NetBSD: esp_pcmcia.c,v 1.39 2016/07/07 06:55:42 msaitoh Exp $ */ 2 1.1 mycroft 3 1.1 mycroft /*- 4 1.18 mycroft * Copyright (c) 2000, 2004 The NetBSD Foundation, Inc. 5 1.1 mycroft * All rights reserved. 6 1.1 mycroft * 7 1.1 mycroft * This code is derived from software contributed to The NetBSD Foundation 8 1.1 mycroft * by Charles M. Hannum. 9 1.1 mycroft * 10 1.1 mycroft * Redistribution and use in source and binary forms, with or without 11 1.1 mycroft * modification, are permitted provided that the following conditions 12 1.1 mycroft * are met: 13 1.1 mycroft * 1. Redistributions of source code must retain the above copyright 14 1.1 mycroft * notice, this list of conditions and the following disclaimer. 15 1.1 mycroft * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 mycroft * notice, this list of conditions and the following disclaimer in the 17 1.1 mycroft * documentation and/or other materials provided with the distribution. 18 1.1 mycroft * 19 1.1 mycroft * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 mycroft * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 mycroft * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 mycroft * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 mycroft * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 mycroft * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 mycroft * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 mycroft * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 mycroft * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 mycroft * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 mycroft * POSSIBILITY OF SUCH DAMAGE. 30 1.1 mycroft */ 31 1.10 lukem 32 1.10 lukem #include <sys/cdefs.h> 33 1.39 msaitoh __KERNEL_RCSID(0, "$NetBSD: esp_pcmcia.c,v 1.39 2016/07/07 06:55:42 msaitoh Exp $"); 34 1.1 mycroft 35 1.1 mycroft #include <sys/param.h> 36 1.1 mycroft #include <sys/systm.h> 37 1.1 mycroft #include <sys/device.h> 38 1.1 mycroft #include <sys/buf.h> 39 1.1 mycroft 40 1.33 ad #include <sys/bus.h> 41 1.33 ad #include <sys/intr.h> 42 1.1 mycroft 43 1.1 mycroft #include <dev/scsipi/scsi_all.h> 44 1.1 mycroft #include <dev/scsipi/scsipi_all.h> 45 1.1 mycroft #include <dev/scsipi/scsiconf.h> 46 1.1 mycroft 47 1.1 mycroft #include <dev/pcmcia/pcmciareg.h> 48 1.1 mycroft #include <dev/pcmcia/pcmciavar.h> 49 1.1 mycroft #include <dev/pcmcia/pcmciadevs.h> 50 1.1 mycroft 51 1.1 mycroft #include <dev/ic/ncr53c9xreg.h> 52 1.1 mycroft #include <dev/ic/ncr53c9xvar.h> 53 1.1 mycroft 54 1.1 mycroft struct esp_pcmcia_softc { 55 1.1 mycroft struct ncr53c9x_softc sc_ncr53c9x; /* glue to MI code */ 56 1.1 mycroft 57 1.1 mycroft int sc_active; /* Pseudo-DMA state vars */ 58 1.1 mycroft int sc_tc; 59 1.1 mycroft int sc_datain; 60 1.1 mycroft size_t sc_dmasize; 61 1.1 mycroft size_t sc_dmatrans; 62 1.35 tsutsui uint8_t **sc_dmaaddr; 63 1.1 mycroft size_t *sc_pdmalen; 64 1.1 mycroft 65 1.1 mycroft /* PCMCIA-specific goo. */ 66 1.1 mycroft struct pcmcia_function *sc_pf; /* our PCMCIA function */ 67 1.1 mycroft void *sc_ih; /* interrupt handler */ 68 1.5 thorpej #ifdef ESP_PCMCIA_POLL 69 1.5 thorpej struct callout sc_poll_ch; 70 1.5 thorpej #endif 71 1.18 mycroft bus_space_tag_t sc_iot; 72 1.18 mycroft bus_space_handle_t sc_ioh; 73 1.18 mycroft 74 1.18 mycroft int sc_state; 75 1.18 mycroft #define ESP_PCMCIA_ATTACHED 3 76 1.1 mycroft }; 77 1.1 mycroft 78 1.35 tsutsui int esp_pcmcia_match(device_t, cfdata_t, void *); 79 1.25 perry int esp_pcmcia_validate_config(struct pcmcia_config_entry *); 80 1.35 tsutsui void esp_pcmcia_attach(device_t, device_t, void *); 81 1.25 perry void esp_pcmcia_init(struct esp_pcmcia_softc *); 82 1.35 tsutsui int esp_pcmcia_detach(device_t, int); 83 1.35 tsutsui int esp_pcmcia_enable(device_t, int); 84 1.1 mycroft 85 1.35 tsutsui CFATTACH_DECL_NEW(esp_pcmcia, sizeof(struct esp_pcmcia_softc), 86 1.14 thorpej esp_pcmcia_match, esp_pcmcia_attach, esp_pcmcia_detach, NULL); 87 1.1 mycroft 88 1.1 mycroft /* 89 1.1 mycroft * Functions and the switch for the MI code. 90 1.1 mycroft */ 91 1.1 mycroft #ifdef ESP_PCMCIA_POLL 92 1.25 perry void esp_pcmcia_poll(void *); 93 1.1 mycroft #endif 94 1.35 tsutsui uint8_t esp_pcmcia_read_reg(struct ncr53c9x_softc *, int); 95 1.35 tsutsui void esp_pcmcia_write_reg(struct ncr53c9x_softc *, int, uint8_t); 96 1.25 perry int esp_pcmcia_dma_isintr(struct ncr53c9x_softc *); 97 1.25 perry void esp_pcmcia_dma_reset(struct ncr53c9x_softc *); 98 1.25 perry int esp_pcmcia_dma_intr(struct ncr53c9x_softc *); 99 1.35 tsutsui int esp_pcmcia_dma_setup(struct ncr53c9x_softc *, uint8_t **, 100 1.25 perry size_t *, int, size_t *); 101 1.25 perry void esp_pcmcia_dma_go(struct ncr53c9x_softc *); 102 1.25 perry void esp_pcmcia_dma_stop(struct ncr53c9x_softc *); 103 1.25 perry int esp_pcmcia_dma_isactive(struct ncr53c9x_softc *); 104 1.1 mycroft 105 1.23 mycroft const struct ncr53c9x_glue esp_pcmcia_glue = { 106 1.1 mycroft esp_pcmcia_read_reg, 107 1.1 mycroft esp_pcmcia_write_reg, 108 1.1 mycroft esp_pcmcia_dma_isintr, 109 1.1 mycroft esp_pcmcia_dma_reset, 110 1.1 mycroft esp_pcmcia_dma_intr, 111 1.1 mycroft esp_pcmcia_dma_setup, 112 1.1 mycroft esp_pcmcia_dma_go, 113 1.1 mycroft esp_pcmcia_dma_stop, 114 1.1 mycroft esp_pcmcia_dma_isactive, 115 1.1 mycroft NULL, /* gl_clear_latched_intr */ 116 1.1 mycroft }; 117 1.1 mycroft 118 1.21 mycroft const struct pcmcia_product esp_pcmcia_products[] = { 119 1.21 mycroft { PCMCIA_VENDOR_PANASONIC, PCMCIA_PRODUCT_PANASONIC_KXLC002, 120 1.21 mycroft PCMCIA_CIS_PANASONIC_KXLC002 }, 121 1.1 mycroft 122 1.21 mycroft { PCMCIA_VENDOR_RATOC, PCMCIA_PRODUCT_RATOC_REX_9530, 123 1.21 mycroft PCMCIA_CIS_RATOC_REX_9530 }, 124 1.1 mycroft }; 125 1.35 tsutsui const size_t esp_pcmcia_nproducts = __arraycount(esp_pcmcia_products); 126 1.16 itohy 127 1.1 mycroft int 128 1.35 tsutsui esp_pcmcia_match(device_t parent, cfdata_t cf, void *aux) 129 1.1 mycroft { 130 1.1 mycroft struct pcmcia_attach_args *pa = aux; 131 1.1 mycroft 132 1.21 mycroft if (pcmcia_product_lookup(pa, esp_pcmcia_products, esp_pcmcia_nproducts, 133 1.21 mycroft sizeof(esp_pcmcia_products[0]), NULL)) 134 1.35 tsutsui return 1; 135 1.35 tsutsui return 0; 136 1.1 mycroft } 137 1.1 mycroft 138 1.18 mycroft int 139 1.35 tsutsui esp_pcmcia_validate_config(struct pcmcia_config_entry *cfe) 140 1.18 mycroft { 141 1.35 tsutsui 142 1.18 mycroft if (cfe->iftype != PCMCIA_IFTYPE_IO || 143 1.18 mycroft cfe->num_memspace != 0 || 144 1.18 mycroft cfe->num_iospace != 1) 145 1.35 tsutsui return EINVAL; 146 1.35 tsutsui return 0; 147 1.18 mycroft } 148 1.18 mycroft 149 1.1 mycroft void 150 1.35 tsutsui esp_pcmcia_attach(device_t parent, device_t self, void *aux) 151 1.1 mycroft { 152 1.35 tsutsui struct esp_pcmcia_softc *esc = device_private(self); 153 1.1 mycroft struct ncr53c9x_softc *sc = &esc->sc_ncr53c9x; 154 1.1 mycroft struct pcmcia_attach_args *pa = aux; 155 1.1 mycroft struct pcmcia_config_entry *cfe; 156 1.1 mycroft struct pcmcia_function *pf = pa->pf; 157 1.18 mycroft int error; 158 1.1 mycroft 159 1.35 tsutsui sc->sc_dev = self; 160 1.35 tsutsui 161 1.1 mycroft esc->sc_pf = pf; 162 1.1 mycroft 163 1.18 mycroft error = pcmcia_function_configure(pf, esp_pcmcia_validate_config); 164 1.18 mycroft if (error) { 165 1.39 msaitoh aprint_error_dev(self, "configure failed, error=%d\n", error); 166 1.18 mycroft return; 167 1.1 mycroft } 168 1.1 mycroft 169 1.18 mycroft cfe = pf->cfe; 170 1.18 mycroft esc->sc_iot = cfe->iospace[0].handle.iot; 171 1.18 mycroft esc->sc_ioh = cfe->iospace[0].handle.ioh; 172 1.18 mycroft esp_pcmcia_init(esc); 173 1.1 mycroft 174 1.35 tsutsui aprint_normal("%s", device_xname(self)); 175 1.1 mycroft 176 1.9 bouyer sc->sc_adapter.adapt_minphys = minphys; 177 1.9 bouyer sc->sc_adapter.adapt_request = ncr53c9x_scsipi_request; 178 1.15 jdolecek sc->sc_adapter.adapt_enable = esp_pcmcia_enable; 179 1.18 mycroft 180 1.9 bouyer ncr53c9x_attach(sc); 181 1.18 mycroft esc->sc_state = ESP_PCMCIA_ATTACHED; 182 1.1 mycroft } 183 1.1 mycroft 184 1.1 mycroft void 185 1.35 tsutsui esp_pcmcia_init(struct esp_pcmcia_softc *esc) 186 1.1 mycroft { 187 1.1 mycroft struct ncr53c9x_softc *sc = &esc->sc_ncr53c9x; 188 1.1 mycroft 189 1.1 mycroft /* id 7, clock 40M, parity ON, sync OFF, fast ON, slow ON */ 190 1.1 mycroft 191 1.1 mycroft sc->sc_glue = &esp_pcmcia_glue; 192 1.1 mycroft 193 1.5 thorpej #ifdef ESP_PCMCIA_POLL 194 1.32 ad callout_init(&esc->sc_poll_ch, 0); 195 1.5 thorpej #endif 196 1.5 thorpej 197 1.1 mycroft sc->sc_rev = NCR_VARIANT_ESP406; 198 1.1 mycroft sc->sc_id = 7; 199 1.1 mycroft sc->sc_freq = 40; 200 1.2 mycroft /* try -PARENB -SLOW */ 201 1.1 mycroft sc->sc_cfg1 = sc->sc_id | NCRCFG1_PARENB | NCRCFG1_SLOW; 202 1.2 mycroft /* try +FE */ 203 1.1 mycroft sc->sc_cfg2 = NCRCFG2_SCSI2; 204 1.2 mycroft /* try -IDM -FSCSI -FCLK */ 205 1.2 mycroft sc->sc_cfg3 = NCRESPCFG3_CDB | NCRESPCFG3_FCLK | NCRESPCFG3_IDM | 206 1.2 mycroft NCRESPCFG3_FSCSI; 207 1.1 mycroft sc->sc_cfg4 = NCRCFG4_ACTNEG; 208 1.2 mycroft /* try +INTP */ 209 1.1 mycroft sc->sc_cfg5 = NCRCFG5_CRS1 | NCRCFG5_AADDR | NCRCFG5_PTRINC; 210 1.1 mycroft sc->sc_minsync = 0; 211 1.1 mycroft sc->sc_maxxfer = 64 * 1024; 212 1.1 mycroft } 213 1.1 mycroft 214 1.1 mycroft int 215 1.38 cegger esp_pcmcia_detach(device_t self, int flags) 216 1.1 mycroft { 217 1.35 tsutsui struct esp_pcmcia_softc *sc = device_private(self); 218 1.1 mycroft int error; 219 1.1 mycroft 220 1.18 mycroft if (sc->sc_state != ESP_PCMCIA_ATTACHED) 221 1.35 tsutsui return 0; 222 1.1 mycroft 223 1.18 mycroft error = ncr53c9x_detach(&sc->sc_ncr53c9x, flags); 224 1.1 mycroft if (error) 225 1.35 tsutsui return error; 226 1.1 mycroft 227 1.18 mycroft pcmcia_function_unconfigure(sc->sc_pf); 228 1.1 mycroft 229 1.35 tsutsui return 0; 230 1.1 mycroft } 231 1.1 mycroft 232 1.1 mycroft int 233 1.38 cegger esp_pcmcia_enable(device_t self, int onoff) 234 1.1 mycroft { 235 1.35 tsutsui struct esp_pcmcia_softc *sc = device_private(self); 236 1.19 mycroft int error; 237 1.1 mycroft 238 1.1 mycroft if (onoff) { 239 1.1 mycroft #ifdef ESP_PCMCIA_POLL 240 1.24 mycroft callout_reset(&sc->sc_poll_ch, 1, esp_pcmcia_poll, sc); 241 1.1 mycroft #else 242 1.24 mycroft /* Establish the interrupt handler. */ 243 1.24 mycroft sc->sc_ih = pcmcia_intr_establish(sc->sc_pf, IPL_BIO, 244 1.24 mycroft ncr53c9x_intr, &sc->sc_ncr53c9x); 245 1.24 mycroft if (!sc->sc_ih) 246 1.35 tsutsui return EIO; 247 1.1 mycroft #endif 248 1.1 mycroft 249 1.24 mycroft error = pcmcia_function_enable(sc->sc_pf); 250 1.24 mycroft if (error) { 251 1.24 mycroft pcmcia_intr_disestablish(sc->sc_pf, sc->sc_ih); 252 1.24 mycroft sc->sc_ih = 0; 253 1.35 tsutsui return error; 254 1.24 mycroft } 255 1.1 mycroft 256 1.24 mycroft /* Initialize only chip. */ 257 1.24 mycroft ncr53c9x_init(&sc->sc_ncr53c9x, 0); 258 1.1 mycroft } else { 259 1.18 mycroft pcmcia_function_disable(sc->sc_pf); 260 1.1 mycroft #ifdef ESP_PCMCIA_POLL 261 1.18 mycroft callout_stop(&sc->sc_poll_ch); 262 1.1 mycroft #else 263 1.18 mycroft pcmcia_intr_disestablish(sc->sc_pf, sc->sc_ih); 264 1.18 mycroft sc->sc_ih = 0; 265 1.1 mycroft #endif 266 1.1 mycroft } 267 1.1 mycroft 268 1.35 tsutsui return 0; 269 1.1 mycroft } 270 1.1 mycroft 271 1.1 mycroft #ifdef ESP_PCMCIA_POLL 272 1.1 mycroft void 273 1.35 tsutsui esp_pcmcia_poll(void *arg) 274 1.1 mycroft { 275 1.1 mycroft struct esp_pcmcia_softc *esc = arg; 276 1.1 mycroft 277 1.35 tsutsui (void)ncr53c9x_intr(&esc->sc_ncr53c9x); 278 1.5 thorpej callout_reset(&esc->sc_poll_ch, 1, esp_pcmcia_poll, esc); 279 1.1 mycroft } 280 1.1 mycroft #endif 281 1.1 mycroft 282 1.1 mycroft /* 283 1.1 mycroft * Glue functions. 284 1.1 mycroft */ 285 1.35 tsutsui uint8_t 286 1.35 tsutsui esp_pcmcia_read_reg(struct ncr53c9x_softc *sc, int reg) 287 1.1 mycroft { 288 1.1 mycroft struct esp_pcmcia_softc *esc = (struct esp_pcmcia_softc *)sc; 289 1.1 mycroft 290 1.35 tsutsui return bus_space_read_1(esc->sc_iot, esc->sc_ioh, reg); 291 1.1 mycroft } 292 1.1 mycroft 293 1.1 mycroft void 294 1.35 tsutsui esp_pcmcia_write_reg(struct ncr53c9x_softc *sc, int reg, uint8_t val) 295 1.1 mycroft { 296 1.1 mycroft struct esp_pcmcia_softc *esc = (struct esp_pcmcia_softc *)sc; 297 1.35 tsutsui uint8_t v = val; 298 1.1 mycroft 299 1.1 mycroft if (reg == NCR_CMD && v == (NCRCMD_TRANS|NCRCMD_DMA)) 300 1.1 mycroft v = NCRCMD_TRANS; 301 1.18 mycroft bus_space_write_1(esc->sc_iot, esc->sc_ioh, reg, v); 302 1.1 mycroft } 303 1.1 mycroft 304 1.1 mycroft int 305 1.35 tsutsui esp_pcmcia_dma_isintr(struct ncr53c9x_softc *sc) 306 1.1 mycroft { 307 1.1 mycroft 308 1.1 mycroft return NCR_READ_REG(sc, NCR_STAT) & NCRSTAT_INT; 309 1.1 mycroft } 310 1.1 mycroft 311 1.1 mycroft void 312 1.35 tsutsui esp_pcmcia_dma_reset(struct ncr53c9x_softc *sc) 313 1.1 mycroft { 314 1.1 mycroft struct esp_pcmcia_softc *esc = (struct esp_pcmcia_softc *)sc; 315 1.1 mycroft 316 1.1 mycroft esc->sc_active = 0; 317 1.1 mycroft esc->sc_tc = 0; 318 1.1 mycroft } 319 1.1 mycroft 320 1.1 mycroft int 321 1.35 tsutsui esp_pcmcia_dma_intr(struct ncr53c9x_softc *sc) 322 1.1 mycroft { 323 1.1 mycroft struct esp_pcmcia_softc *esc = (struct esp_pcmcia_softc *)sc; 324 1.35 tsutsui uint8_t *p; 325 1.1 mycroft u_int espphase, espstat, espintr; 326 1.1 mycroft int cnt; 327 1.1 mycroft 328 1.1 mycroft if (esc->sc_active == 0) { 329 1.35 tsutsui printf("%s: dma_intr--inactive DMA\n", 330 1.35 tsutsui device_xname(sc->sc_dev)); 331 1.1 mycroft return -1; 332 1.1 mycroft } 333 1.1 mycroft 334 1.1 mycroft if ((sc->sc_espintr & NCRINTR_BS) == 0) { 335 1.1 mycroft esc->sc_active = 0; 336 1.1 mycroft return 0; 337 1.1 mycroft } 338 1.1 mycroft 339 1.1 mycroft cnt = *esc->sc_pdmalen; 340 1.1 mycroft if (*esc->sc_pdmalen == 0) { 341 1.1 mycroft printf("%s: data interrupt, but no count left\n", 342 1.35 tsutsui device_xname(sc->sc_dev)); 343 1.1 mycroft } 344 1.1 mycroft 345 1.1 mycroft p = *esc->sc_dmaaddr; 346 1.1 mycroft espphase = sc->sc_phase; 347 1.35 tsutsui espstat = (u_int)sc->sc_espstat; 348 1.35 tsutsui espintr = (u_int)sc->sc_espintr; 349 1.1 mycroft do { 350 1.1 mycroft if (esc->sc_datain) { 351 1.4 mycroft *p++ = NCR_READ_REG(sc, NCR_FIFO); 352 1.4 mycroft cnt--; 353 1.4 mycroft if (espphase == DATA_IN_PHASE) 354 1.1 mycroft NCR_WRITE_REG(sc, NCR_CMD, NCRCMD_TRANS); 355 1.4 mycroft else 356 1.1 mycroft esc->sc_active = 0; 357 1.16 itohy } else { 358 1.1 mycroft if (espphase == DATA_OUT_PHASE || 359 1.1 mycroft espphase == MESSAGE_OUT_PHASE) { 360 1.1 mycroft NCR_WRITE_REG(sc, NCR_FIFO, *p++); 361 1.1 mycroft cnt--; 362 1.1 mycroft NCR_WRITE_REG(sc, NCR_CMD, NCRCMD_TRANS); 363 1.1 mycroft } else 364 1.1 mycroft esc->sc_active = 0; 365 1.1 mycroft } 366 1.1 mycroft 367 1.1 mycroft if (esc->sc_active) { 368 1.35 tsutsui while ((NCR_READ_REG(sc, NCR_STAT) & NCRSTAT_INT) == 0) 369 1.35 tsutsui ; 370 1.1 mycroft espstat = NCR_READ_REG(sc, NCR_STAT); 371 1.1 mycroft espintr = NCR_READ_REG(sc, NCR_INTR); 372 1.1 mycroft espphase = (espintr & NCRINTR_DIS) 373 1.1 mycroft ? /* Disconnected */ BUSFREE_PHASE 374 1.1 mycroft : espstat & PHASE_MASK; 375 1.1 mycroft } 376 1.1 mycroft } while (esc->sc_active && espintr); 377 1.1 mycroft sc->sc_phase = espphase; 378 1.35 tsutsui sc->sc_espstat = (uint8_t)espstat; 379 1.35 tsutsui sc->sc_espintr = (uint8_t)espintr; 380 1.1 mycroft *esc->sc_dmaaddr = p; 381 1.1 mycroft *esc->sc_pdmalen = cnt; 382 1.1 mycroft 383 1.1 mycroft if (*esc->sc_pdmalen == 0) 384 1.1 mycroft esc->sc_tc = NCRSTAT_TC; 385 1.1 mycroft sc->sc_espstat |= esc->sc_tc; 386 1.1 mycroft return 0; 387 1.1 mycroft } 388 1.1 mycroft 389 1.1 mycroft int 390 1.35 tsutsui esp_pcmcia_dma_setup(struct ncr53c9x_softc *sc, uint8_t **addr, size_t *len, 391 1.35 tsutsui int datain, size_t *dmasize) 392 1.1 mycroft { 393 1.1 mycroft struct esp_pcmcia_softc *esc = (struct esp_pcmcia_softc *)sc; 394 1.1 mycroft 395 1.35 tsutsui esc->sc_dmaaddr = addr; 396 1.1 mycroft esc->sc_pdmalen = len; 397 1.1 mycroft esc->sc_datain = datain; 398 1.1 mycroft esc->sc_dmasize = *dmasize; 399 1.1 mycroft esc->sc_tc = 0; 400 1.1 mycroft 401 1.1 mycroft return 0; 402 1.1 mycroft } 403 1.1 mycroft 404 1.1 mycroft void 405 1.35 tsutsui esp_pcmcia_dma_go(struct ncr53c9x_softc *sc) 406 1.1 mycroft { 407 1.1 mycroft struct esp_pcmcia_softc *esc = (struct esp_pcmcia_softc *)sc; 408 1.1 mycroft 409 1.1 mycroft esc->sc_active = 1; 410 1.1 mycroft } 411 1.1 mycroft 412 1.1 mycroft void 413 1.29 christos esp_pcmcia_dma_stop(struct ncr53c9x_softc *sc) 414 1.1 mycroft { 415 1.1 mycroft } 416 1.1 mycroft 417 1.1 mycroft int 418 1.37 dsl esp_pcmcia_dma_isactive(struct ncr53c9x_softc *sc) 419 1.1 mycroft { 420 1.1 mycroft struct esp_pcmcia_softc *esc = (struct esp_pcmcia_softc *)sc; 421 1.1 mycroft 422 1.35 tsutsui return esc->sc_active; 423 1.1 mycroft } 424