Lines Matching defs:ids
90 _isa_dmaunmask(struct isa_dma_state *ids, int chan)
94 ISA_DMA_MASK_CLR(ids, chan);
100 if (ids->ids_frozen)
105 bus_space_write_1(ids->ids_bst, ids->ids_dma1h,
108 bus_space_write_1(ids->ids_bst, ids->ids_dma2h,
113 _isa_dmamask(struct isa_dma_state *ids, int chan)
117 ISA_DMA_MASK_SET(ids, chan);
127 bus_space_write_1(ids->ids_bst, ids->ids_dma1h,
129 bus_space_write_1(ids->ids_bst, ids->ids_dma1h,
132 bus_space_write_1(ids->ids_bst, ids->ids_dma2h,
134 bus_space_write_1(ids->ids_bst, ids->ids_dma2h,
143 _isa_dmainit(struct isa_dma_state *ids, bus_space_tag_t bst, bus_dma_tag_t dmat, device_t dev)
147 ids->ids_dev = dev;
149 if (ids->ids_initialized) {
160 if (!bus_space_is_equal(ids->ids_bst, bst) ||
161 ids->ids_dmat != dmat)
164 ids->ids_bst = bst;
165 ids->ids_dmat = dmat;
170 if (bus_space_map(ids->ids_bst, IO_DMA1, DMA1_IOSIZE, 0,
171 &ids->ids_dma1h))
173 if (bus_space_map(ids->ids_bst, IO_DMA2, DMA2_IOSIZE, 0,
174 &ids->ids_dma2h))
176 if (bus_space_map(ids->ids_bst, IO_DMAPG, DMAPG_IOSIZE, 0,
177 &ids->ids_dmapgh))
183 ids->ids_masked = 0xff;
191 if (ids->ids_maxsize[chan] == 0)
192 ids->ids_maxsize[chan] =
196 ids->ids_initialized = 1;
203 _isa_dmacascade(ids, 4);
208 _isa_dmadestroy(struct isa_dma_state *ids)
210 if (!ids->ids_initialized)
213 _isa_dmacascade_stop(ids, 4);
218 bus_space_unmap(ids->ids_bst, ids->ids_dmapgh, DMAPG_IOSIZE);
219 bus_space_unmap(ids->ids_bst, ids->ids_dma2h, DMA2_IOSIZE);
220 bus_space_unmap(ids->ids_bst, ids->ids_dma1h, DMA1_IOSIZE);
222 ids->ids_initialized = 0;
230 _isa_dmacascade(struct isa_dma_state *ids, int chan)
235 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
239 if (!ISA_DMA_DRQ_ISFREE(ids, chan)) {
240 printf("%s: DRQ %d is not free\n", device_xname(ids->ids_dev),
245 ISA_DMA_DRQ_ALLOC(ids, chan);
249 bus_space_write_1(ids->ids_bst, ids->ids_dma1h,
252 bus_space_write_1(ids->ids_bst, ids->ids_dma2h,
255 _isa_dmaunmask(ids, chan);
264 _isa_dmacascade_stop(struct isa_dma_state *ids, int chan)
267 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
271 if (ISA_DMA_DRQ_ISFREE(ids, chan))
274 _isa_dmamask(ids, chan);
276 ISA_DMA_DRQ_FREE(ids, chan);
282 _isa_drq_alloc(struct isa_dma_state *ids, int chan)
284 if (!ISA_DMA_DRQ_ISFREE(ids, chan))
286 ISA_DMA_DRQ_ALLOC(ids, chan);
291 _isa_drq_free(struct isa_dma_state *ids, int chan)
293 if (ISA_DMA_DRQ_ISFREE(ids, chan))
295 ISA_DMA_DRQ_FREE(ids, chan);
300 _isa_dmamaxsize(struct isa_dma_state *ids, int chan)
304 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
308 return (ids->ids_maxsize[chan]);
312 _isa_dmamap_create(struct isa_dma_state *ids, int chan, bus_size_t size, int flags)
317 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
321 if (size > ids->ids_maxsize[chan])
324 error = bus_dmamap_create(ids->ids_dmat, size, 1, size,
325 ids->ids_maxsize[chan], flags, &ids->ids_dmamaps[chan]);
331 _isa_dmamap_destroy(struct isa_dma_state *ids, int chan)
335 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
339 bus_dmamap_destroy(ids->ids_dmat, ids->ids_dmamaps[chan]);
351 _isa_dmastart(struct isa_dma_state *ids, int chan, void *addr, bus_size_t nbytes, struct proc *p, int flags, int busdmaflags)
360 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
370 if (ISA_DMA_DRQ_ISFREE(ids, chan)) {
372 device_xname(ids->ids_dev), chan);
379 device_xname(ids->ids_dev), chan,
386 device_xname(ids->ids_dev), chan,
392 dmam = ids->ids_dmamaps[chan];
396 error = bus_dmamap_load(ids->ids_dmat, dmam, addr, nbytes,
407 bus_dmamap_sync(ids->ids_dmat, dmam, 0, dmam->dm_mapsize,
409 ids->ids_dmareads |= (1 << chan);
411 bus_dmamap_sync(ids->ids_dmat, dmam, 0, dmam->dm_mapsize,
413 ids->ids_dmareads &= ~(1 << chan);
424 ids->ids_dmalength[chan] = nbytes;
426 _isa_dmamask(ids, chan);
427 ids->ids_dmafinished &= ~(1 << chan);
431 bus_space_write_1(ids->ids_bst, ids->ids_dma1h, DMA1_MODE,
436 bus_space_write_1(ids->ids_bst, ids->ids_dmapgh,
438 bus_space_write_1(ids->ids_bst, ids->ids_dma1h, waport,
440 bus_space_write_1(ids->ids_bst, ids->ids_dma1h, waport,
444 bus_space_write_1(ids->ids_bst, ids->ids_dma1h, waport + 1,
446 bus_space_write_1(ids->ids_bst, ids->ids_dma1h, waport + 1,
450 bus_space_write_1(ids->ids_bst, ids->ids_dma2h, DMA2_MODE,
455 bus_space_write_1(ids->ids_bst, ids->ids_dmapgh,
458 bus_space_write_1(ids->ids_bst, ids->ids_dma2h, waport,
460 bus_space_write_1(ids->ids_bst, ids->ids_dma2h, waport,
465 bus_space_write_1(ids->ids_bst, ids->ids_dma2h, waport + 2,
467 bus_space_write_1(ids->ids_bst, ids->ids_dma2h, waport + 2,
471 _isa_dmaunmask(ids, chan);
479 _isa_dmaabort(struct isa_dma_state *ids, int chan)
483 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
487 _isa_dmamask(ids, chan);
488 bus_dmamap_unload(ids->ids_dmat, ids->ids_dmamaps[chan]);
489 ids->ids_dmareads &= ~(1 << chan);
493 _isa_dmacount(struct isa_dma_state *ids, int chan)
500 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
504 _isa_dmamask(ids, chan);
516 nbytes = bus_space_read_1(ids->ids_bst, ids->ids_dma1h,
518 nbytes += bus_space_read_1(ids->ids_bst, ids->ids_dma1h,
523 nbytes = bus_space_read_1(ids->ids_bst, ids->ids_dma2h,
525 nbytes += bus_space_read_1(ids->ids_bst, ids->ids_dma2h,
531 if (nbytes == ids->ids_dmalength[chan])
534 _isa_dmaunmask(ids, chan);
539 _isa_dmafinished(struct isa_dma_state *ids, int chan)
543 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
549 ids->ids_dmafinished |= bus_space_read_1(ids->ids_bst,
550 ids->ids_dma1h, DMA1_SR) & 0x0f;
552 ids->ids_dmafinished |= (bus_space_read_1(ids->ids_bst,
553 ids->ids_dma2h, DMA2_SR) & 0x0f) << 4;
555 return ((ids->ids_dmafinished & (1 << chan)) != 0);
559 _isa_dmadone(struct isa_dma_state *ids, int chan)
564 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
568 dmam = ids->ids_dmamaps[chan];
570 _isa_dmamask(ids, chan);
572 if (_isa_dmafinished(ids, chan) == 0)
574 device_xname(ids->ids_dev), chan);
576 bus_dmamap_sync(ids->ids_dmat, dmam, 0, dmam->dm_mapsize,
577 (ids->ids_dmareads & (1 << chan)) ? BUS_DMASYNC_POSTREAD :
580 bus_dmamap_unload(ids->ids_dmat, dmam);
581 ids->ids_dmareads &= ~(1 << chan);
585 _isa_dmafreeze(struct isa_dma_state *ids)
591 if (ids->ids_frozen == 0) {
592 bus_space_write_1(ids->ids_bst, ids->ids_dma1h,
594 bus_space_write_1(ids->ids_bst, ids->ids_dma2h,
598 ids->ids_frozen++;
599 if (ids->ids_frozen < 1)
606 _isa_dmathaw(struct isa_dma_state *ids)
612 ids->ids_frozen--;
613 if (ids->ids_frozen < 0)
616 if (ids->ids_frozen == 0) {
617 bus_space_write_1(ids->ids_bst, ids->ids_dma1h,
618 DMA1_MASK, ids->ids_masked & 0x0f);
619 bus_space_write_1(ids->ids_bst, ids->ids_dma2h,
620 DMA2_MASK, (ids->ids_masked >> 4) & 0x0f);
627 _isa_dmamem_alloc(struct isa_dma_state *ids, int chan, bus_size_t size, bus_addr_t *addrp, int flags)
633 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
641 error = bus_dmamem_alloc(ids->ids_dmat, size, PAGE_SIZE, boundary,
651 _isa_dmamem_free(struct isa_dma_state *ids, int chan, bus_addr_t addr, bus_size_t size)
656 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
663 bus_dmamem_free(ids->ids_dmat, &seg, 1);
667 _isa_dmamem_map(struct isa_dma_state *ids, int chan, bus_addr_t addr, bus_size_t size, void **kvap, int flags)
672 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
679 return (bus_dmamem_map(ids->ids_dmat, &seg, 1, size, kvap, flags));
683 _isa_dmamem_unmap(struct isa_dma_state *ids, int chan, void *kva, size_t size)
687 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
691 bus_dmamem_unmap(ids->ids_dmat, kva, size);
695 _isa_dmamem_mmap(struct isa_dma_state *ids, int chan, bus_addr_t addr, bus_size_t size, off_t off, int prot, int flags)
700 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
710 return (bus_dmamem_mmap(ids->ids_dmat, &seg, 1, off, prot, flags));
714 _isa_drq_isfree(struct isa_dma_state *ids, int chan)
718 printf("%s: bogus drq %d\n", device_xname(ids->ids_dev), chan);
722 return ISA_DMA_DRQ_ISFREE(ids, chan);
726 _isa_malloc(struct isa_dma_state *ids, int chan, size_t size, struct malloc_type *pool, int flags)
735 if (_isa_dmamem_alloc(ids, chan, size, &addr, bflags))
737 if (_isa_dmamem_map(ids, chan, addr, size, &kva, bflags)) {
738 _isa_dmamem_free(ids, chan, addr, size);
743 _isa_dmamem_unmap(ids, chan, kva, size);
744 _isa_dmamem_free(ids, chan, addr, size);
747 m->ids = ids;
772 _isa_dmamem_unmap(m->ids, m->chan, kva, m->size);
773 _isa_dmamem_free(m->ids, m->chan, m->addr, m->size);
788 return _isa_dmamem_mmap(m->ids, m->chan, m->addr,