Ignore:
Timestamp:
2011-10-24T15:59:20Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0b4f060
Parents:
b7f7183
Message:

sb16: Merge dma_setup_channel and dma prepare_channel.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/audio/sb16/dma_controller.c

    rb7f7183 r7785e951  
    217217}
    218218/*----------------------------------------------------------------------------*/
    219 int dma_setup_channel(unsigned channel, uintptr_t pa, uint16_t size)
     219int dma_setup_channel(
     220    unsigned channel, uintptr_t pa, uint16_t size, uint8_t mode)
    220221{
    221222        if (channel == 0 || channel == 4)
     
    242243        const dma_channel_t dma_channel = controller_8237.channels[channel];
    243244
    244         ddf_log_debug("Setting channel %u, to address %p(%zu).\n",
    245             channel, pa, size);
     245        ddf_log_debug("Setting channel %u, to address %p(%zu), mode %hhx.\n",
     246            channel, pa, size, mode);
     247
    246248        /* Mask DMA request */
    247249        uint8_t value = DMA_SINGLE_MASK_CHAN_TO_REG(channel)
     
    249251        pio_write_8(dma_channel.single_mask_address, value);
    250252
     253        /* Set mode */
     254        value = DMA_MODE_CHAN_TO_REG(channel) | mode;
     255        pio_write_8(dma_channel.mode_address, value);
     256
    251257        /* Set address -- reset flip-flop*/
    252258        pio_write_8(dma_channel.flip_flop_address, 0);
     
    279285        ddf_log_verbose("Writing size high byte: %hhx.\n", value);
    280286        pio_write_8(dma_channel.offset_reg_address, value);
    281 
    282         /* Unmask DMA request */
    283         value = DMA_SINGLE_MASK_CHAN_TO_REG(channel);
    284         pio_write_8(dma_channel.single_mask_address, value);
    285 
    286         return EOK;
    287 }
    288 /*----------------------------------------------------------------------------*/
    289 int dma_prepare_channel(
    290     unsigned channel, bool write, bool auto_mode, transfer_mode_t mode)
    291 {
    292         if (channel == 0 || channel == 4)
    293                 return ENOTSUP;
    294         if (channel > 7)
    295                 return ENOENT;
    296 
    297         if (!controller_8237.initialized)
    298                 return EIO;
    299 
    300         const dma_channel_t dma_channel = controller_8237.channels[channel];
    301 
    302         /* Mask DMA request */
    303         uint8_t value = DMA_SINGLE_MASK_CHAN_TO_REG(channel)
    304             | DMA_SINGLE_MASK_MASKED_FLAG;
    305         pio_write_8(dma_channel.single_mask_address, value);
    306 
    307         /* Set DMA mode */
    308         value = DMA_MODE_CHAN_TO_REG(channel)
    309             | ((write ? DMA_MODE_CHAN_TRA_WRITE : DMA_MODE_CHAN_TRA_READ)
    310                 << DMA_MODE_CHAN_TRA_SHIFT)
    311             | (auto_mode ? DMA_MODE_CHAN_AUTO_FLAG : 0)
    312             | (mode << DMA_MODE_CHAN_MODE_SHIFT);
    313         ddf_log_verbose("Setting DMA mode: %hhx.\n", value);
    314         pio_write_8(dma_channel.mode_address, value);
    315287
    316288        /* Unmask DMA request */
Note: See TracChangeset for help on using the changeset viewer.