Changeset 7785e951 in mainline for uspace/drv/audio/sb16/dma_controller.c
- Timestamp:
- 2011-10-24T15:59:20Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0b4f060
- Parents:
- b7f7183
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/audio/sb16/dma_controller.c
rb7f7183 r7785e951 217 217 } 218 218 /*----------------------------------------------------------------------------*/ 219 int dma_setup_channel(unsigned channel, uintptr_t pa, uint16_t size) 219 int dma_setup_channel( 220 unsigned channel, uintptr_t pa, uint16_t size, uint8_t mode) 220 221 { 221 222 if (channel == 0 || channel == 4) … … 242 243 const dma_channel_t dma_channel = controller_8237.channels[channel]; 243 244 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 246 248 /* Mask DMA request */ 247 249 uint8_t value = DMA_SINGLE_MASK_CHAN_TO_REG(channel) … … 249 251 pio_write_8(dma_channel.single_mask_address, value); 250 252 253 /* Set mode */ 254 value = DMA_MODE_CHAN_TO_REG(channel) | mode; 255 pio_write_8(dma_channel.mode_address, value); 256 251 257 /* Set address -- reset flip-flop*/ 252 258 pio_write_8(dma_channel.flip_flop_address, 0); … … 279 285 ddf_log_verbose("Writing size high byte: %hhx.\n", value); 280 286 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);315 287 316 288 /* Unmask DMA request */
Note:
See TracChangeset
for help on using the changeset viewer.