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; }
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; }