Esempio n. 1
0
int dsp_mailbox_send(int overwrite,int num,int cmd,const char *data,int len)
{
	unsigned long flags;
	int res=-1;
#if 0
	local_irq_save(flags);
	if(overwrite || mailbox_reg1[num].status==0)
		{
			struct mail_msg *m;
			m=&mailbox_reg1[num];
			m->cmd=cmd;
			m->data=(char *)data;
			m->len=len;
			m->status=1;
			after_change_mailbox(m);
			if(data!=NULL && len >0)
				flush_dcache_range((unsigned long)data,(unsigned long)data+len);
			MAIBOX1_IRQ_ENABLE(num);
			SYS_TRIGGER_IRQ(num);
			res=0;
		}
	local_irq_restore(flags);
#endif
	return res;
}
int get_mailbox_data(struct audiodsp_priv *priv,int num,struct mail_msg *msg)
{
	unsigned long flags;
  dma_addr_t buf_map;	
	struct mail_msg *m;
	if(num>31 || num <0)
			return -1;
	local_irq_save_nort(flags);
	m=&priv->mailbox_reg[num];
	pre_read_mailbox(m);
    //dsp_addr_map = dma_map_single(priv->dev,(void*)m,sizeof(*m),DMA_FROM_DEVICE);
    //dma_unmap_single(priv->dev,dsp_addr_map,sizeof(*m),DMA_FROM_DEVICE);
	msg->cmd=m->cmd; 
	msg->data=m->data;
  msg->data = (char *)((unsigned)msg->data+AUDIO_DSP_START_ADDR);
	msg->status=m->status;
	msg->len=m->len;
	if(msg->len && msg->data != NULL){
	    buf_map = dma_map_single(priv->dev,(void*)msg->data ,msg->len,DMA_FROM_DEVICE);
	    dma_unmap_single(priv->dev,buf_map,msg->len,DMA_FROM_DEVICE);
	}
	m->status=0;
	after_change_mailbox(m);
	local_irq_restore_nort(flags);
	return 0;
}
int dsp_mailbox_send(struct audiodsp_priv *priv,int overwrite,int num,int cmd,const char *data,int len)
{
	unsigned long flags;
	int res=-1;
	struct mail_msg *m;
    	dma_addr_t buf_map;

	m=&priv->mailbox_reg2[num];

	local_irq_save_nort(flags);
	if(overwrite || m->status==0)
	{
		
		m->cmd=cmd;
		m->data=(char *)ARM_2_ARC_ADDR_SWAP((unsigned)data);
		m->len=len;
		m->status=1;
		after_change_mailbox(m);
		if(data!=NULL && len >0)
		{
			buf_map = dma_map_single(NULL, (void *)data, len, DMA_TO_DEVICE);
			dma_unmap_single(NULL, buf_map, len, DMA_TO_DEVICE);
    		}
		MAIBOX2_IRQ_ENABLE(num);
		DSP_TRIGGER_IRQ(num);
		res=0;
	}
	local_irq_restore_nort(flags);
	return res;
}
Esempio n. 4
0
int dsp_get_mailbox_data(int num,struct mail_msg *msg)
{
#if 0
	struct mail_msg *m;
	unsigned long flags;
	if(num>31 || num <0)
			return -1;
	local_irq_save(flags);
	m=&mailbox_reg2[num];
	pre_read_mailbox(m);
	msg->cmd=m->cmd;
	msg->data=m->data;
	msg->status=m->status;
	msg->len=m->len;
	m->status=0;
	after_change_mailbox(m);
	if(msg->data && msg->len)
		dsp_cache_inv((unsigned)msg->data,msg->len);	
	local_irq_restore(flags);
#endif
	return 0;
}