|
@@ -46,8 +46,11 @@ static void remove_symbol (struct snd_cs46xx * chip, struct dsp_symbol_entry * s
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
int symbol_index = (int)(symbol - ins->symbol_table.symbols);
|
|
int symbol_index = (int)(symbol - ins->symbol_table.symbols);
|
|
|
|
|
|
- snd_assert(ins->symbol_table.nsymbols > 0,return);
|
|
|
|
- snd_assert(symbol_index >= 0 && symbol_index < ins->symbol_table.nsymbols, return);
|
|
|
|
|
|
+ if (snd_BUG_ON(ins->symbol_table.nsymbols <= 0))
|
|
|
|
+ return;
|
|
|
|
+ if (snd_BUG_ON(symbol_index < 0 ||
|
|
|
|
+ symbol_index >= ins->symbol_table.nsymbols))
|
|
|
|
+ return;
|
|
|
|
|
|
ins->symbol_table.symbols[symbol_index].deleted = 1;
|
|
ins->symbol_table.symbols[symbol_index].deleted = 1;
|
|
|
|
|
|
@@ -116,8 +119,9 @@ static void _dsp_unlink_scb (struct snd_cs46xx *chip, struct dsp_scb_descriptor
|
|
|
|
|
|
if ( scb->parent_scb_ptr ) {
|
|
if ( scb->parent_scb_ptr ) {
|
|
/* unlink parent SCB */
|
|
/* unlink parent SCB */
|
|
- snd_assert ((scb->parent_scb_ptr->sub_list_ptr == scb ||
|
|
|
|
- scb->parent_scb_ptr->next_scb_ptr == scb),return);
|
|
|
|
|
|
+ if (snd_BUG_ON(scb->parent_scb_ptr->sub_list_ptr != scb &&
|
|
|
|
+ scb->parent_scb_ptr->next_scb_ptr != scb))
|
|
|
|
+ return;
|
|
|
|
|
|
if (scb->parent_scb_ptr->sub_list_ptr == scb) {
|
|
if (scb->parent_scb_ptr->sub_list_ptr == scb) {
|
|
|
|
|
|
@@ -140,7 +144,6 @@ static void _dsp_unlink_scb (struct snd_cs46xx *chip, struct dsp_scb_descriptor
|
|
scb->next_scb_ptr = ins->the_null_scb;
|
|
scb->next_scb_ptr = ins->the_null_scb;
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- /* snd_assert ( (scb->sub_list_ptr == ins->the_null_scb), return); */
|
|
|
|
scb->parent_scb_ptr->next_scb_ptr = scb->next_scb_ptr;
|
|
scb->parent_scb_ptr->next_scb_ptr = scb->next_scb_ptr;
|
|
|
|
|
|
if (scb->next_scb_ptr != ins->the_null_scb) {
|
|
if (scb->next_scb_ptr != ins->the_null_scb) {
|
|
@@ -181,16 +184,17 @@ void cs46xx_dsp_remove_scb (struct snd_cs46xx *chip, struct dsp_scb_descriptor *
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
/* check integrety */
|
|
/* check integrety */
|
|
- snd_assert ( (scb->index >= 0 &&
|
|
|
|
- scb->index < ins->nscb &&
|
|
|
|
- (ins->scbs + scb->index) == scb), return );
|
|
|
|
|
|
+ if (snd_BUG_ON(scb->index < 0 ||
|
|
|
|
+ scb->index >= ins->nscb ||
|
|
|
|
+ (ins->scbs + scb->index) != scb))
|
|
|
|
+ return;
|
|
|
|
|
|
#if 0
|
|
#if 0
|
|
/* can't remove a SCB with childs before
|
|
/* can't remove a SCB with childs before
|
|
removing childs first */
|
|
removing childs first */
|
|
- snd_assert ( (scb->sub_list_ptr == ins->the_null_scb &&
|
|
|
|
- scb->next_scb_ptr == ins->the_null_scb),
|
|
|
|
- goto _end);
|
|
|
|
|
|
+ if (snd_BUG_ON(scb->sub_list_ptr != ins->the_null_scb ||
|
|
|
|
+ scb->next_scb_ptr != ins->the_null_scb))
|
|
|
|
+ goto _end;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
spin_lock_irqsave(&scb->lock, flags);
|
|
spin_lock_irqsave(&scb->lock, flags);
|
|
@@ -198,7 +202,8 @@ void cs46xx_dsp_remove_scb (struct snd_cs46xx *chip, struct dsp_scb_descriptor *
|
|
spin_unlock_irqrestore(&scb->lock, flags);
|
|
spin_unlock_irqrestore(&scb->lock, flags);
|
|
|
|
|
|
cs46xx_dsp_proc_free_scb_desc(scb);
|
|
cs46xx_dsp_proc_free_scb_desc(scb);
|
|
- snd_assert (scb->scb_symbol != NULL, return );
|
|
|
|
|
|
+ if (snd_BUG_ON(!scb->scb_symbol))
|
|
|
|
+ return;
|
|
remove_symbol (chip,scb->scb_symbol);
|
|
remove_symbol (chip,scb->scb_symbol);
|
|
|
|
|
|
ins->scbs[scb->index].deleted = 1;
|
|
ins->scbs[scb->index].deleted = 1;
|
|
@@ -234,7 +239,6 @@ void cs46xx_dsp_proc_free_scb_desc (struct dsp_scb_descriptor * scb)
|
|
snd_info_free_entry(scb->proc_info);
|
|
snd_info_free_entry(scb->proc_info);
|
|
scb->proc_info = NULL;
|
|
scb->proc_info = NULL;
|
|
|
|
|
|
- snd_assert (scb_info != NULL, return);
|
|
|
|
kfree (scb_info);
|
|
kfree (scb_info);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -291,7 +295,8 @@ _dsp_create_generic_scb (struct snd_cs46xx *chip, char * name, u32 * scb_data, u
|
|
|
|
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
- snd_assert (ins->the_null_scb != NULL,return NULL);
|
|
|
|
|
|
+ if (snd_BUG_ON(!ins->the_null_scb))
|
|
|
|
+ return NULL;
|
|
|
|
|
|
/* fill the data that will be wroten to DSP */
|
|
/* fill the data that will be wroten to DSP */
|
|
scb_data[SCBsubListPtr] =
|
|
scb_data[SCBsubListPtr] =
|
|
@@ -321,18 +326,20 @@ _dsp_create_generic_scb (struct snd_cs46xx *chip, char * name, u32 * scb_data, u
|
|
#endif
|
|
#endif
|
|
/* link to parent SCB */
|
|
/* link to parent SCB */
|
|
if (scb_child_type == SCB_ON_PARENT_NEXT_SCB) {
|
|
if (scb_child_type == SCB_ON_PARENT_NEXT_SCB) {
|
|
- snd_assert ( (scb->parent_scb_ptr->next_scb_ptr == ins->the_null_scb),
|
|
|
|
- return NULL);
|
|
|
|
|
|
+ if (snd_BUG_ON(scb->parent_scb_ptr->next_scb_ptr !=
|
|
|
|
+ ins->the_null_scb))
|
|
|
|
+ return NULL;
|
|
|
|
|
|
scb->parent_scb_ptr->next_scb_ptr = scb;
|
|
scb->parent_scb_ptr->next_scb_ptr = scb;
|
|
|
|
|
|
} else if (scb_child_type == SCB_ON_PARENT_SUBLIST_SCB) {
|
|
} else if (scb_child_type == SCB_ON_PARENT_SUBLIST_SCB) {
|
|
- snd_assert ( (scb->parent_scb_ptr->sub_list_ptr == ins->the_null_scb),
|
|
|
|
- return NULL);
|
|
|
|
|
|
+ if (snd_BUG_ON(scb->parent_scb_ptr->sub_list_ptr !=
|
|
|
|
+ ins->the_null_scb))
|
|
|
|
+ return NULL;
|
|
|
|
|
|
scb->parent_scb_ptr->sub_list_ptr = scb;
|
|
scb->parent_scb_ptr->sub_list_ptr = scb;
|
|
} else {
|
|
} else {
|
|
- snd_assert (0,return NULL);
|
|
|
|
|
|
+ snd_BUG();
|
|
}
|
|
}
|
|
|
|
|
|
spin_lock_irqsave(&chip->reg_lock, flags);
|
|
spin_lock_irqsave(&chip->reg_lock, flags);
|
|
@@ -675,7 +682,7 @@ cs46xx_dsp_create_src_task_scb(struct snd_cs46xx * chip, char * scb_name,
|
|
if (pass_through) {
|
|
if (pass_through) {
|
|
/* wont work with any other rate than
|
|
/* wont work with any other rate than
|
|
the native DSP rate */
|
|
the native DSP rate */
|
|
- snd_assert (rate == 48000);
|
|
|
|
|
|
+ snd_BUG_ON(rate != 48000);
|
|
|
|
|
|
scb = cs46xx_dsp_create_generic_scb(chip,scb_name,(u32 *)&src_task_scb,
|
|
scb = cs46xx_dsp_create_generic_scb(chip,scb_name,(u32 *)&src_task_scb,
|
|
dest,"DMAREADER",parent_scb,
|
|
dest,"DMAREADER",parent_scb,
|
|
@@ -1142,7 +1149,8 @@ find_next_free_scb (struct snd_cs46xx * chip, struct dsp_scb_descriptor * from)
|
|
struct dsp_scb_descriptor * scb = from;
|
|
struct dsp_scb_descriptor * scb = from;
|
|
|
|
|
|
while (scb->next_scb_ptr != ins->the_null_scb) {
|
|
while (scb->next_scb_ptr != ins->the_null_scb) {
|
|
- snd_assert (scb->next_scb_ptr != NULL, return NULL);
|
|
|
|
|
|
+ if (snd_BUG_ON(!scb->next_scb_ptr))
|
|
|
|
+ return NULL;
|
|
|
|
|
|
scb = scb->next_scb_ptr;
|
|
scb = scb->next_scb_ptr;
|
|
}
|
|
}
|
|
@@ -1246,10 +1254,11 @@ cs46xx_dsp_create_pcm_channel (struct snd_cs46xx * chip,
|
|
break;
|
|
break;
|
|
case DSP_PCM_S71_CHANNEL:
|
|
case DSP_PCM_S71_CHANNEL:
|
|
/* TODO */
|
|
/* TODO */
|
|
- snd_assert(0);
|
|
|
|
|
|
+ snd_BUG();
|
|
break;
|
|
break;
|
|
case DSP_IEC958_CHANNEL:
|
|
case DSP_IEC958_CHANNEL:
|
|
- snd_assert (ins->asynch_tx_scb != NULL, return NULL);
|
|
|
|
|
|
+ if (snd_BUG_ON(!ins->asynch_tx_scb))
|
|
|
|
+ return NULL;
|
|
mixer_scb = ins->asynch_tx_scb;
|
|
mixer_scb = ins->asynch_tx_scb;
|
|
|
|
|
|
/* if sample rate is set to 48khz we pass
|
|
/* if sample rate is set to 48khz we pass
|
|
@@ -1262,7 +1271,7 @@ cs46xx_dsp_create_pcm_channel (struct snd_cs46xx * chip,
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
- snd_assert (0);
|
|
|
|
|
|
+ snd_BUG();
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
/* default sample rate is 44100 */
|
|
/* default sample rate is 44100 */
|
|
@@ -1308,7 +1317,8 @@ cs46xx_dsp_create_pcm_channel (struct snd_cs46xx * chip,
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- snd_assert (src_index != -1,return NULL);
|
|
|
|
|
|
+ if (snd_BUG_ON(src_index == -1))
|
|
|
|
+ return NULL;
|
|
|
|
|
|
/* we need to create a new SRC SCB */
|
|
/* we need to create a new SRC SCB */
|
|
if (mixer_scb->sub_list_ptr == ins->the_null_scb) {
|
|
if (mixer_scb->sub_list_ptr == ins->the_null_scb) {
|
|
@@ -1462,9 +1472,10 @@ void cs46xx_dsp_destroy_pcm_channel (struct snd_cs46xx * chip,
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
- snd_assert(pcm_channel->active, return );
|
|
|
|
- snd_assert(ins->npcm_channels > 0, return );
|
|
|
|
- snd_assert(pcm_channel->src_scb->ref_count > 0, return );
|
|
|
|
|
|
+ if (snd_BUG_ON(!pcm_channel->active ||
|
|
|
|
+ ins->npcm_channels <= 0 ||
|
|
|
|
+ pcm_channel->src_scb->ref_count <= 0))
|
|
|
|
+ return;
|
|
|
|
|
|
spin_lock_irqsave(&chip->reg_lock, flags);
|
|
spin_lock_irqsave(&chip->reg_lock, flags);
|
|
pcm_channel->unlinked = 1;
|
|
pcm_channel->unlinked = 1;
|
|
@@ -1479,8 +1490,9 @@ void cs46xx_dsp_destroy_pcm_channel (struct snd_cs46xx * chip,
|
|
if (!pcm_channel->src_scb->ref_count) {
|
|
if (!pcm_channel->src_scb->ref_count) {
|
|
cs46xx_dsp_remove_scb(chip,pcm_channel->src_scb);
|
|
cs46xx_dsp_remove_scb(chip,pcm_channel->src_scb);
|
|
|
|
|
|
- snd_assert (pcm_channel->src_slot >= 0 && pcm_channel->src_slot < DSP_MAX_SRC_NR,
|
|
|
|
- return );
|
|
|
|
|
|
+ if (snd_BUG_ON(pcm_channel->src_slot < 0 ||
|
|
|
|
+ pcm_channel->src_slot >= DSP_MAX_SRC_NR))
|
|
|
|
+ return;
|
|
|
|
|
|
ins->src_scb_slots[pcm_channel->src_slot] = 0;
|
|
ins->src_scb_slots[pcm_channel->src_slot] = 0;
|
|
ins->nsrc_scb --;
|
|
ins->nsrc_scb --;
|
|
@@ -1490,11 +1502,11 @@ void cs46xx_dsp_destroy_pcm_channel (struct snd_cs46xx * chip,
|
|
int cs46xx_dsp_pcm_unlink (struct snd_cs46xx * chip,
|
|
int cs46xx_dsp_pcm_unlink (struct snd_cs46xx * chip,
|
|
struct dsp_pcm_channel_descriptor * pcm_channel)
|
|
struct dsp_pcm_channel_descriptor * pcm_channel)
|
|
{
|
|
{
|
|
- struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
- snd_assert(pcm_channel->active,return -EIO);
|
|
|
|
- snd_assert(ins->npcm_channels > 0,return -EIO);
|
|
|
|
|
|
+ if (snd_BUG_ON(!pcm_channel->active ||
|
|
|
|
+ chip->dsp_spos_instance->npcm_channels <= 0))
|
|
|
|
+ return -EIO;
|
|
|
|
|
|
spin_lock(&pcm_channel->src_scb->lock);
|
|
spin_lock(&pcm_channel->src_scb->lock);
|
|
|
|
|
|
@@ -1537,7 +1549,7 @@ int cs46xx_dsp_pcm_link (struct snd_cs46xx * chip,
|
|
|
|
|
|
src_scb->sub_list_ptr = pcm_channel->pcm_reader_scb;
|
|
src_scb->sub_list_ptr = pcm_channel->pcm_reader_scb;
|
|
|
|
|
|
- snd_assert (pcm_channel->pcm_reader_scb->parent_scb_ptr == NULL, ; );
|
|
|
|
|
|
+ snd_BUG_ON(pcm_channel->pcm_reader_scb->parent_scb_ptr);
|
|
pcm_channel->pcm_reader_scb->parent_scb_ptr = parent_scb;
|
|
pcm_channel->pcm_reader_scb->parent_scb_ptr = parent_scb;
|
|
|
|
|
|
spin_lock_irqsave(&chip->reg_lock, flags);
|
|
spin_lock_irqsave(&chip->reg_lock, flags);
|
|
@@ -1564,7 +1576,8 @@ cs46xx_add_record_source (struct snd_cs46xx *chip, struct dsp_scb_descriptor * s
|
|
struct dsp_scb_descriptor * pcm_input;
|
|
struct dsp_scb_descriptor * pcm_input;
|
|
int insert_point;
|
|
int insert_point;
|
|
|
|
|
|
- snd_assert (ins->record_mixer_scb != NULL,return NULL);
|
|
|
|
|
|
+ if (snd_BUG_ON(!ins->record_mixer_scb))
|
|
|
|
+ return NULL;
|
|
|
|
|
|
if (ins->record_mixer_scb->sub_list_ptr != ins->the_null_scb) {
|
|
if (ins->record_mixer_scb->sub_list_ptr != ins->the_null_scb) {
|
|
parent = find_next_free_scb (chip,ins->record_mixer_scb->sub_list_ptr);
|
|
parent = find_next_free_scb (chip,ins->record_mixer_scb->sub_list_ptr);
|
|
@@ -1583,7 +1596,8 @@ cs46xx_add_record_source (struct snd_cs46xx *chip, struct dsp_scb_descriptor * s
|
|
|
|
|
|
int cs46xx_src_unlink(struct snd_cs46xx *chip, struct dsp_scb_descriptor * src)
|
|
int cs46xx_src_unlink(struct snd_cs46xx *chip, struct dsp_scb_descriptor * src)
|
|
{
|
|
{
|
|
- snd_assert (src->parent_scb_ptr != NULL, return -EINVAL );
|
|
|
|
|
|
+ if (snd_BUG_ON(!src->parent_scb_ptr))
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
/* mute SCB */
|
|
/* mute SCB */
|
|
cs46xx_dsp_scb_set_volume (chip,src,0,0);
|
|
cs46xx_dsp_scb_set_volume (chip,src,0,0);
|
|
@@ -1598,8 +1612,10 @@ int cs46xx_src_link(struct snd_cs46xx *chip, struct dsp_scb_descriptor * src)
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
struct dsp_scb_descriptor * parent_scb;
|
|
struct dsp_scb_descriptor * parent_scb;
|
|
|
|
|
|
- snd_assert (src->parent_scb_ptr == NULL, return -EINVAL );
|
|
|
|
- snd_assert(ins->master_mix_scb !=NULL, return -EINVAL );
|
|
|
|
|
|
+ if (snd_BUG_ON(src->parent_scb_ptr))
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ if (snd_BUG_ON(!ins->master_mix_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
if (ins->master_mix_scb->sub_list_ptr != ins->the_null_scb) {
|
|
if (ins->master_mix_scb->sub_list_ptr != ins->the_null_scb) {
|
|
parent_scb = find_next_free_scb (chip,ins->master_mix_scb->sub_list_ptr);
|
|
parent_scb = find_next_free_scb (chip,ins->master_mix_scb->sub_list_ptr);
|
|
@@ -1635,8 +1651,11 @@ int cs46xx_dsp_enable_spdif_out (struct snd_cs46xx *chip)
|
|
return -EBUSY;
|
|
return -EBUSY;
|
|
}
|
|
}
|
|
|
|
|
|
- snd_assert (ins->asynch_tx_scb == NULL, return -EINVAL);
|
|
|
|
- snd_assert (ins->master_mix_scb->next_scb_ptr == ins->the_null_scb, return -EINVAL);
|
|
|
|
|
|
+ if (snd_BUG_ON(ins->asynch_tx_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ if (snd_BUG_ON(ins->master_mix_scb->next_scb_ptr !=
|
|
|
|
+ ins->the_null_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
/* reset output snooper sample buffer pointer */
|
|
/* reset output snooper sample buffer pointer */
|
|
snd_cs46xx_poke (chip, (ins->ref_snoop_scb->address + 2) << 2,
|
|
snd_cs46xx_poke (chip, (ins->ref_snoop_scb->address + 2) << 2,
|
|
@@ -1676,10 +1695,15 @@ int cs46xx_dsp_disable_spdif_out (struct snd_cs46xx *chip)
|
|
}
|
|
}
|
|
|
|
|
|
/* check integrety */
|
|
/* check integrety */
|
|
- snd_assert (ins->asynch_tx_scb != NULL, return -EINVAL);
|
|
|
|
- snd_assert (ins->spdif_pcm_input_scb != NULL,return -EINVAL);
|
|
|
|
- snd_assert (ins->master_mix_scb->next_scb_ptr == ins->asynch_tx_scb, return -EINVAL);
|
|
|
|
- snd_assert (ins->asynch_tx_scb->parent_scb_ptr == ins->master_mix_scb, return -EINVAL);
|
|
|
|
|
|
+ if (snd_BUG_ON(!ins->asynch_tx_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ if (snd_BUG_ON(!ins->spdif_pcm_input_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ if (snd_BUG_ON(ins->master_mix_scb->next_scb_ptr != ins->asynch_tx_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ if (snd_BUG_ON(ins->asynch_tx_scb->parent_scb_ptr !=
|
|
|
|
+ ins->master_mix_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
cs46xx_dsp_remove_scb (chip,ins->spdif_pcm_input_scb);
|
|
cs46xx_dsp_remove_scb (chip,ins->spdif_pcm_input_scb);
|
|
cs46xx_dsp_remove_scb (chip,ins->asynch_tx_scb);
|
|
cs46xx_dsp_remove_scb (chip,ins->asynch_tx_scb);
|
|
@@ -1734,7 +1758,8 @@ int cs46xx_iec958_post_close (struct snd_cs46xx *chip)
|
|
{
|
|
{
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
struct dsp_spos_instance * ins = chip->dsp_spos_instance;
|
|
|
|
|
|
- snd_assert (ins->asynch_tx_scb != NULL, return -EINVAL);
|
|
|
|
|
|
+ if (snd_BUG_ON(!ins->asynch_tx_scb))
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
ins->spdif_status_out &= ~DSP_SPDIF_STATUS_PLAYBACK_OPEN;
|
|
ins->spdif_status_out &= ~DSP_SPDIF_STATUS_PLAYBACK_OPEN;
|
|
|
|
|