Lines Matching +full:quad +full:- +full:channel
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
51 dbdma_channel_t *channel = (dbdma_channel_t *)(chan); in dbdma_phys_callback() local
53 channel->sc_slots_pa = segs[0].ds_addr; in dbdma_phys_callback()
54 dbdma_write_reg(channel, CHAN_CMDPTR, channel->sc_slots_pa); in dbdma_phys_callback()
62 dbdma_channel_t *channel; in dbdma_allocate_channel() local
64 channel = *chan = malloc(sizeof(struct dbdma_channel), M_DBDMA, in dbdma_allocate_channel()
67 channel->sc_regs = dbdma_regs; in dbdma_allocate_channel()
68 channel->sc_off = offset; in dbdma_allocate_channel()
69 dbdma_stop(channel); in dbdma_allocate_channel()
71 channel->sc_slots_pa = 0; in dbdma_allocate_channel()
75 NULL, &(channel->sc_dmatag)); in dbdma_allocate_channel()
77 error = bus_dmamem_alloc(channel->sc_dmatag, in dbdma_allocate_channel()
78 (void **)&channel->sc_slots, BUS_DMA_WAITOK | BUS_DMA_ZERO, in dbdma_allocate_channel()
79 &channel->sc_dmamap); in dbdma_allocate_channel()
81 error = bus_dmamap_load(channel->sc_dmatag, channel->sc_dmamap, in dbdma_allocate_channel()
82 channel->sc_slots, PAGE_SIZE, dbdma_phys_callback, channel, 0); in dbdma_allocate_channel()
84 dbdma_write_reg(channel, CHAN_CMDPTR_HI, 0); in dbdma_allocate_channel()
86 channel->sc_nslots = slots; in dbdma_allocate_channel()
96 return (-1); in dbdma_resize_channel()
98 chan->sc_nslots = newslots; in dbdma_resize_channel()
108 bus_dmamem_free(chan->sc_dmatag, chan->sc_slots, chan->sc_dmamap); in dbdma_free_channel()
109 bus_dma_tag_destroy(chan->sc_dmatag); in dbdma_free_channel()
120 bus_dmamap_sync(chan->sc_dmatag, chan->sc_dmamap, BUS_DMASYNC_POSTREAD); in dbdma_get_cmd_status()
124 * account for the quad-word little endian fields. in dbdma_get_cmd_status()
126 return (le16toh(chan->sc_slots[slot].resCount)); in dbdma_get_cmd_status()
133 chan->sc_slots[slot].resCount = 0; in dbdma_clear_cmd_status()
140 bus_dmamap_sync(chan->sc_dmatag, chan->sc_dmamap, BUS_DMASYNC_POSTREAD); in dbdma_get_residuals()
142 return (le16toh(chan->sc_slots[slot].xferStatus)); in dbdma_get_residuals()
211 cmd = chan->sc_slots_pa + slot * sizeof(struct dbdma_command); in dbdma_set_current_cmd()
294 cmd.cmdDep = chan->sc_slots_pa + in dbdma_insert_command()
303 * Move quadwords to little-endian. God only knows why in dbdma_insert_command()
311 chan->sc_slots[slot] = cmd; in dbdma_insert_command()
342 bus_dmamap_sync(chan->sc_dmatag, chan->sc_dmamap, op); in dbdma_sync_commands()
349 chan->sc_saved_regs[0] = dbdma_read_reg(chan, CHAN_CMDPTR); in dbdma_save_state()
350 chan->sc_saved_regs[1] = dbdma_read_reg(chan, CHAN_CMDPTR_HI); in dbdma_save_state()
351 chan->sc_saved_regs[2] = dbdma_read_reg(chan, CHAN_INTR_SELECT); in dbdma_save_state()
352 chan->sc_saved_regs[3] = dbdma_read_reg(chan, CHAN_BRANCH_SELECT); in dbdma_save_state()
353 chan->sc_saved_regs[4] = dbdma_read_reg(chan, CHAN_WAIT_SELECT); in dbdma_save_state()
363 dbdma_write_reg(chan, CHAN_CMDPTR, chan->sc_saved_regs[0]); in dbdma_restore_state()
364 dbdma_write_reg(chan, CHAN_CMDPTR_HI, chan->sc_saved_regs[1]); in dbdma_restore_state()
365 dbdma_write_reg(chan, CHAN_INTR_SELECT, chan->sc_saved_regs[2]); in dbdma_restore_state()
366 dbdma_write_reg(chan, CHAN_BRANCH_SELECT, chan->sc_saved_regs[3]); in dbdma_restore_state()
367 dbdma_write_reg(chan, CHAN_WAIT_SELECT, chan->sc_saved_regs[4]); in dbdma_restore_state()
374 return (bus_read_4(chan->sc_regs, chan->sc_off + offset)); in dbdma_read_reg()
381 bus_write_4(chan->sc_regs, chan->sc_off + offset, val); in dbdma_write_reg()