static int msm_afe_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *vma) { struct snd_pcm_runtime *runtime = substream->runtime; struct pcm_afe_info *prtd = runtime->private_data; struct afe_audio_client *ac = prtd->audio_client; struct afe_audio_port_data *apd = ac->port; struct afe_audio_buffer *ab; int dir = -1; pr_debug("%s\n", __func__); prtd->mmap_flag = 1; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) dir = IN; else dir = OUT; ab = &(apd[dir].buf[0]); return msm_audio_ion_mmap((struct audio_buffer *)ab, vma); }
uint32_t q6usm_get_virtual_address(int dir, struct us_client *usc, struct vm_area_struct *vms) { uint32_t ret = 0xffffffff; if (vms && (usc != NULL) && ((dir == IN) || (dir == OUT))) { struct us_port_data *port = &usc->port[dir]; int size = PAGE_ALIGN(port->buf_size * port->buf_cnt); struct audio_buffer ab; ab.phys = port->phys; ab.data = port->data; ab.used = 1; ab.size = size; ab.actual_size = size; ab.handle = port->handle; ab.client = port->client; ret = msm_audio_ion_mmap(&ab, vms); } return ret; }