Lines Matching refs:dma
71 if (ch->dma.alloc == NULL) in ata_dmainit()
72 ch->dma.alloc = ata_dmaalloc; in ata_dmainit()
73 if (ch->dma.free == NULL) in ata_dmainit()
74 ch->dma.free = ata_dmafree; in ata_dmainit()
75 if (ch->dma.setprd == NULL) in ata_dmainit()
76 ch->dma.setprd = ata_dmasetprd; in ata_dmainit()
77 if (ch->dma.load == NULL) in ata_dmainit()
78 ch->dma.load = ata_dmaload; in ata_dmainit()
79 if (ch->dma.unload == NULL) in ata_dmainit()
80 ch->dma.unload = ata_dmaunload; in ata_dmainit()
81 if (ch->dma.alignment == 0) in ata_dmainit()
82 ch->dma.alignment = 2; in ata_dmainit()
83 if (ch->dma.boundary == 0) in ata_dmainit()
84 ch->dma.boundary = 65536; in ata_dmainit()
85 if (ch->dma.segsize == 0) in ata_dmainit()
86 ch->dma.segsize = 65536; in ata_dmainit()
87 if (ch->dma.max_iosize == 0) in ata_dmainit()
88 ch->dma.max_iosize = (ATA_DMA_ENTRIES - 1) * PAGE_SIZE; in ata_dmainit()
89 if (ch->dma.max_address == 0) in ata_dmainit()
90 ch->dma.max_address = BUS_SPACE_MAXADDR_32BIT; in ata_dmainit()
91 if (ch->dma.dma_slots == 0) in ata_dmainit()
92 ch->dma.dma_slots = 1; in ata_dmainit()
94 if (bus_dma_tag_create(bus_get_dma_tag(dev), ch->dma.alignment, 0, in ata_dmainit()
95 ch->dma.max_address, BUS_SPACE_MAXADDR, in ata_dmainit()
96 NULL, NULL, ch->dma.max_iosize, in ata_dmainit()
97 ATA_DMA_ENTRIES, ch->dma.segsize, in ata_dmainit()
98 0, NULL, NULL, &ch->dma.dmatag)) in ata_dmainit()
101 if (bus_dma_tag_create(ch->dma.dmatag, PAGE_SIZE, 64 * 1024, in ata_dmainit()
102 ch->dma.max_address, BUS_SPACE_MAXADDR, in ata_dmainit()
104 0, NULL, NULL, &ch->dma.work_tag)) in ata_dmainit()
107 if (bus_dmamem_alloc(ch->dma.work_tag, (void **)&ch->dma.work, in ata_dmainit()
109 &ch->dma.work_map)) in ata_dmainit()
112 if (bus_dmamap_load(ch->dma.work_tag, ch->dma.work_map, ch->dma.work, in ata_dmainit()
115 bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); in ata_dmainit()
118 ch->dma.work_bus = dcba.maddr; in ata_dmainit()
131 if (ch->dma.work_bus) { in ata_dmafini()
132 bus_dmamap_unload(ch->dma.work_tag, ch->dma.work_map); in ata_dmafini()
133 bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); in ata_dmafini()
134 ch->dma.work_bus = 0; in ata_dmafini()
135 ch->dma.work = NULL; in ata_dmafini()
137 if (ch->dma.work_tag) { in ata_dmafini()
138 bus_dma_tag_destroy(ch->dma.work_tag); in ata_dmafini()
139 ch->dma.work_tag = NULL; in ata_dmafini()
141 if (ch->dma.dmatag) { in ata_dmafini()
142 bus_dma_tag_destroy(ch->dma.dmatag); in ata_dmafini()
143 ch->dma.dmatag = NULL; in ata_dmafini()
164 bzero(ch->dma.slot, sizeof(struct ata_dmaslot) * ATA_DMA_SLOTS); in ata_dmaalloc()
165 for (i = 0; i < ch->dma.dma_slots; i++) { in ata_dmaalloc()
166 struct ata_dmaslot *slot = &ch->dma.slot[i]; in ata_dmaalloc()
168 if (bus_dma_tag_create(ch->dma.dmatag, PAGE_SIZE, PAGE_SIZE, in ata_dmaalloc()
169 ch->dma.max_address, BUS_SPACE_MAXADDR, in ata_dmaalloc()
189 if (bus_dma_tag_create(ch->dma.dmatag, in ata_dmaalloc()
190 ch->dma.alignment, ch->dma.boundary, in ata_dmaalloc()
191 ch->dma.max_address, BUS_SPACE_MAXADDR, in ata_dmaalloc()
192 NULL, NULL, ch->dma.max_iosize, in ata_dmaalloc()
193 ATA_DMA_ENTRIES, ch->dma.segsize, in ata_dmaalloc()
220 struct ata_dmaslot *slot = &ch->dma.slot[i]; in ata_dmafree()
273 if (request->dma) { in ata_dmaload()
283 if (request->bytecount & (ch->dma.alignment - 1)) { in ata_dmaload()
286 request->bytecount, ch->dma.alignment); in ata_dmaload()
289 if (request->bytecount > ch->dma.max_iosize) { in ata_dmaload()
292 request->bytecount, ch->dma.max_iosize); in ata_dmaload()
297 request->dma = &ch->dma.slot[0]; in ata_dmaload()
302 dspa.dmatab = request->dma->sg; in ata_dmaload()
305 error = bus_dmamap_load_ccb(request->dma->data_tag, in ata_dmaload()
306 request->dma->data_map, request->ccb, in ata_dmaload()
307 ch->dma.setprd, &dspa, BUS_DMA_NOWAIT); in ata_dmaload()
309 error = bus_dmamap_load(request->dma->data_tag, request->dma->data_map, in ata_dmaload()
311 ch->dma.setprd, &dspa, BUS_DMA_NOWAIT); in ata_dmaload()
320 bus_dmamap_sync(request->dma->sg_tag, request->dma->sg_map, in ata_dmaload()
322 bus_dmamap_sync(request->dma->data_tag, request->dma->data_map, in ata_dmaload()
337 if (request->dma) { in ata_dmaunload()
338 bus_dmamap_sync(request->dma->sg_tag, request->dma->sg_map, in ata_dmaunload()
340 bus_dmamap_sync(request->dma->data_tag, request->dma->data_map, in ata_dmaunload()
344 bus_dmamap_unload(request->dma->data_tag, request->dma->data_map); in ata_dmaunload()
345 request->dma = NULL; in ata_dmaunload()