Changeset ddd0499d in mainline for uspace/drv/audio/sb16
- Timestamp:
- 2013-09-12T22:05:13Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4285851b
- Parents:
- 695b6ff (diff), 7de1988c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/drv/audio/sb16
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/audio/sb16/main.c
r695b6ff rddd0499d 49 49 50 50 static int sb_add_device(ddf_dev_t *device); 51 static int sb_get_res(ddf_dev_t *device, uintptr_t *sb_regs, 52 size_t *sb_regs_size, uintptr_t *mpu_regs, size_t *mpu_regs_size, 53 int *irq, int *dma8, int *dma16); 51 static int sb_get_res(ddf_dev_t *device, addr_range_t **pp_sb_regs, 52 addr_range_t **pp_mpu_regs, int *irq, int *dma8, int *dma16); 54 53 static int sb_enable_interrupts(ddf_dev_t *device); 55 54 … … 103 102 } 104 103 105 uintptr_t sb_regs = 0, mpu_regs = 0; 106 size_t sb_regs_size = 0, mpu_regs_size = 0; 104 addr_range_t sb_regs; 105 addr_range_t *p_sb_regs = &sb_regs; 106 addr_range_t mpu_regs; 107 addr_range_t *p_mpu_regs = &mpu_regs; 107 108 int irq = 0, dma8 = 0, dma16 = 0; 108 109 109 rc = sb_get_res(device, &sb_regs, &sb_regs_size, &mpu_regs, 110 &mpu_regs_size, &irq, &dma8, &dma16); 110 rc = sb_get_res(device, &p_sb_regs, &p_mpu_regs, &irq, &dma8, &dma16); 111 111 if (rc != EOK) { 112 112 ddf_log_error("Failed to get resources: %s.", str_error(rc)); … … 114 114 } 115 115 116 sb16_irq_code( (void*)sb_regs, dma8, dma16, irq_cmds, irq_ranges);116 sb16_irq_code(p_sb_regs, dma8, dma16, irq_cmds, irq_ranges); 117 117 118 118 irq_code_t irq_code = { … … 139 139 } 140 140 141 rc = sb16_init_sb16(soft_state, (void*)sb_regs, sb_regs_size, device, 142 dma8, dma16); 141 rc = sb16_init_sb16(soft_state, p_sb_regs, device, dma8, dma16); 143 142 if (rc != EOK) { 144 143 ddf_log_error("Failed to init sb16 driver: %s.", … … 147 146 } 148 147 149 rc = sb16_init_mpu(soft_state, (void*)mpu_regs, mpu_regs_size);148 rc = sb16_init_mpu(soft_state, p_mpu_regs); 150 149 if (rc == EOK) { 151 150 ddf_fun_t *mpu_fun = … … 173 172 } 174 173 175 static int sb_get_res(ddf_dev_t *device, uintptr_t *sb_regs, 176 size_t *sb_regs_size, uintptr_t *mpu_regs, size_t *mpu_regs_size, 177 int *irq, int *dma8, int *dma16) 174 static int sb_get_res(ddf_dev_t *device, addr_range_t **pp_sb_regs, 175 addr_range_t **pp_mpu_regs, int *irq, int *dma8, int *dma16) 178 176 { 179 177 assert(device); … … 225 223 } 226 224 227 228 225 if (hw_res.io_ranges.count == 1) { 229 if ( sb_regs)230 * sb_regs = hw_res.io_ranges.ranges[0].address;231 if ( sb_regs_size)232 * sb_regs_size = hw_res.io_ranges.ranges[0].size;226 if (pp_sb_regs && *pp_sb_regs) 227 **pp_sb_regs = hw_res.io_ranges.ranges[0]; 228 if (pp_mpu_regs) 229 *pp_mpu_regs = NULL; 233 230 } else { 234 231 const int sb = 235 232 (hw_res.io_ranges.ranges[0].size >= sizeof(sb16_regs_t)) 236 ? 1 : 0;233 ? 0 : 1; 237 234 const int mpu = 1 - sb; 238 if (sb_regs) 239 *sb_regs = hw_res.io_ranges.ranges[sb].address; 240 if (sb_regs_size) 241 *sb_regs_size = hw_res.io_ranges.ranges[sb].size; 242 if (mpu_regs) 243 *sb_regs = hw_res.io_ranges.ranges[mpu].address; 244 if (mpu_regs_size) 245 *sb_regs_size = hw_res.io_ranges.ranges[mpu].size; 235 if (pp_sb_regs && *pp_sb_regs) 236 **pp_sb_regs = hw_res.io_ranges.ranges[sb]; 237 if (pp_mpu_regs && *pp_mpu_regs) 238 **pp_mpu_regs = hw_res.io_ranges.ranges[mpu]; 246 239 } 247 240 … … 261 254 return enabled ? EOK : EIO; 262 255 } 256 263 257 /** 264 258 * @} -
uspace/drv/audio/sb16/sb16.c
r695b6ff rddd0499d 77 77 } 78 78 79 void sb16_irq_code(void *regs, int dma8, int dma16, irq_cmd_t cmds[], irq_pio_range_t ranges[]) 79 void sb16_irq_code(addr_range_t *regs, int dma8, int dma16, irq_cmd_t cmds[], 80 irq_pio_range_t ranges[]) 80 81 { 81 82 assert(regs); 82 83 assert(dma8 > 0 && dma8 < 4); 83 sb16_regs_t *registers = regs; 84 85 sb16_regs_t *registers = RNGABSPTR(*regs); 84 86 memcpy(cmds, irq_cmds, sizeof(irq_cmds)); 85 cmds[0].addr = (void *)®isters->dsp_read_status;86 ranges[0].base = (uintptr_t) registers;87 cmds[0].addr = (void *) ®isters->dsp_read_status; 88 ranges[0].base = (uintptr_t) registers; 87 89 ranges[0].size = sizeof(*registers); 88 90 if (dma16 > 4 && dma16 < 8) { 89 91 /* Valid dma16 */ 90 cmds[1].addr = (void *)®isters->dma16_ack;92 cmds[1].addr = (void *) ®isters->dma16_ack; 91 93 } else { 92 94 cmds[1].cmd = CMD_ACCEPT; … … 94 96 } 95 97 96 int sb16_init_sb16(sb16_t *sb, void *regs, size_t size,97 ddf_dev_t *dev, int dma8,int dma16)98 int sb16_init_sb16(sb16_t *sb, addr_range_t *regs, ddf_dev_t *dev, int dma8, 99 int dma16) 98 100 { 99 101 assert(sb); 102 100 103 /* Setup registers */ 101 int ret = pio_enable (regs, size, (void**)&sb->regs);104 int ret = pio_enable_range(regs, (void **) &sb->regs); 102 105 if (ret != EOK) 103 106 return ret; 104 ddf_log_ debug("PIO registers at %p accessible.", sb->regs);107 ddf_log_note("PIO registers at %p accessible.", sb->regs); 105 108 106 109 /* Initialize DSP */ … … 187 190 } 188 191 189 int sb16_init_mpu(sb16_t *sb, void *regs, size_t size)192 int sb16_init_mpu(sb16_t *sb, addr_range_t *regs) 190 193 { 191 194 sb->mpu_regs = NULL; -
uspace/drv/audio/sb16/sb16.h
r695b6ff rddd0499d 38 38 #include <ddf/driver.h> 39 39 #include <ddi.h> 40 #include <device/hw_res_parsed.h> 40 41 41 42 #include "dsp.h" … … 51 52 52 53 size_t sb16_irq_code_size(void); 53 void sb16_irq_code(void *regs, int dma8, int dma16, irq_cmd_t cmds[], irq_pio_range_t ranges[]); 54 int sb16_init_sb16(sb16_t *sb, void *regs, size_t size, 55 ddf_dev_t *dev, int dma8, int dma16); 56 int sb16_init_mpu(sb16_t *sb, void *regs, size_t size); 54 void sb16_irq_code(addr_range_t *regs, int dma8, int dma16, irq_cmd_t cmds[], irq_pio_range_t ranges[]); 55 int sb16_init_sb16(sb16_t *sb, addr_range_t *regs, ddf_dev_t *dev, int dma8, int dma16); 56 int sb16_init_mpu(sb16_t *sb, addr_range_t *regs); 57 57 void sb16_interrupt(sb16_t *sb); 58 58
Note:
See TracChangeset
for help on using the changeset viewer.
