--- 6e45bda98945269943baecc214963b406b40a80e +++ 50621c994a905ded26624a1bf43c4f3af39bfd55 @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include @@ -138,9 +138,6 @@ struct audio_in { int running; int stopped; /* set when stopped, cleared on flush */ char *build_id; - struct ion_client *client; - struct ion_handle *input_buff_handle; - struct ion_handle *output_buff_handle; }; struct audio_frame { @@ -1322,16 +1319,15 @@ static int audevrc_in_release(struct ino audio->audrec = NULL; audio->opened = 0; if (audio->data) { - ion_unmap_kernel(audio->client, audio->input_buff_handle); - ion_free(audio->client, audio->input_buff_handle); + msm_subsystem_unmap_buffer(audio->map_v_read); + free_contiguous_memory_by_paddr(audio->phys); audio->data = NULL; } if (audio->out_data) { - ion_unmap_kernel(audio->client, audio->output_buff_handle); - ion_free(audio->client, audio->output_buff_handle); + msm_subsystem_unmap_buffer(audio->map_v_write); + free_contiguous_memory_by_paddr(audio->out_phys); audio->out_data = NULL; } - ion_client_destroy(audio->client); mutex_unlock(&audio->lock); return 0; } @@ -1342,65 +1338,30 @@ static int audevrc_in_open(struct inode struct audio_in *audio = &the_audio_evrc_in; int rc; int encid; - int len = 0; - unsigned long ionflag = 0; - ion_phys_addr_t addr = 0; - struct ion_handle *handle = NULL; - struct ion_client *client = NULL; mutex_lock(&audio->lock); if (audio->opened) { rc = -EBUSY; goto done; } - - client = msm_ion_client_create(UINT_MAX, "Audio_EVRC_in_client"); - if (IS_ERR_OR_NULL(client)) { - MM_ERR("Unable to create ION client\n"); - rc = -ENOMEM; - goto client_create_error; - } - audio->client = client; - - MM_DBG("allocating mem sz = %d\n", DMASZ); - handle = ion_alloc(client, DMASZ, SZ_4K, - ION_HEAP(ION_AUDIO_HEAP_ID)); - if (IS_ERR_OR_NULL(handle)) { - MM_ERR("Unable to create allocate O/P buffers\n"); - rc = -ENOMEM; - goto output_buff_alloc_error; - } - - audio->output_buff_handle = handle; - - rc = ion_phys(client , handle, &addr, &len); - if (rc) { - MM_ERR("O/P buffers:Invalid phy: %x sz: %x\n", - (unsigned int) addr, (unsigned int) len); - rc = -ENOMEM; - goto output_buff_get_phys_error; + audio->phys = allocate_contiguous_ebi_nomap(DMASZ, SZ_4K); + if (audio->phys) { + audio->map_v_read = msm_subsystem_map_buffer( + audio->phys, DMASZ, + MSM_SUBSYSTEM_MAP_KADDR, + NULL, 0); + if (IS_ERR(audio->map_v_read)) { + MM_ERR("failed to map read physical address\n"); + rc = -ENOMEM; + free_contiguous_memory_by_paddr(audio->phys); + goto done; + } + audio->data = audio->map_v_read->vaddr; } else { - MM_INFO("O/P buffers:valid phy: %x sz: %x\n", - (unsigned int) addr, (unsigned int) len); - } - audio->phys = (int32_t)addr; - - rc = ion_handle_get_flags(client, handle, &ionflag); - if (rc) { - MM_ERR("could not get flags for the handle\n"); - rc = -ENOMEM; - goto output_buff_get_flags_error; - } - - audio->map_v_read = ion_map_kernel(client, handle, ionflag); - if (IS_ERR(audio->map_v_read)) { - MM_ERR("could not map read buffers,freeing instance 0x%08x\n", - (int)audio); + MM_ERR("could not allocate DMA buffers\n"); rc = -ENOMEM; - goto output_buff_map_error; + goto done; } - audio->data = (char *)audio->map_v_read; - MM_DBG("Memory addr = 0x%8x phy addr = 0x%8x\n",\ (int) audio->data, (int) audio->phys); if ((file->f_mode & FMODE_WRITE) && @@ -1457,49 +1418,27 @@ static int audevrc_in_open(struct inode audevrc_in_flush(audio); audevrc_out_flush(audio); - MM_DBG("allocating BUFFER_SIZE %d\n", BUFFER_SIZE); - handle = ion_alloc(client, BUFFER_SIZE, - SZ_4K, ION_HEAP(ION_AUDIO_HEAP_ID)); - if (IS_ERR_OR_NULL(handle)) { - MM_ERR("Unable to create allocate I/P buffers\n"); - rc = -ENOMEM; - goto input_buff_alloc_error; - } - - audio->input_buff_handle = handle; - - rc = ion_phys(client , handle, &addr, &len); - if (rc) { - MM_ERR("I/P buffers:Invalid phy: %x sz: %x\n", - (unsigned int) addr, (unsigned int) len); + audio->out_phys = allocate_contiguous_ebi_nomap(BUFFER_SIZE, + SZ_4K); + if (!audio->out_phys) { + MM_ERR("could not allocate write buffers\n"); rc = -ENOMEM; - goto input_buff_alloc_error; + goto evt_error; } else { - MM_INFO("Got valid phy: %x sz: %x\n", - (unsigned int) addr, - (unsigned int) len); - } - audio->out_phys = (int32_t)addr; - - rc = ion_handle_get_flags(client, - handle, &ionflag); - if (rc) { - MM_ERR("could not get flags for the handle\n"); - rc = -ENOMEM; - goto input_buff_alloc_error; - } - - audio->map_v_write = ion_map_kernel(client, - handle, ionflag); - if (IS_ERR(audio->map_v_write)) { - MM_ERR("could not map write buffers\n"); - rc = -ENOMEM; - goto input_buff_map_error; + audio->map_v_write = msm_subsystem_map_buffer( + audio->out_phys, BUFFER_SIZE, + MSM_SUBSYSTEM_MAP_KADDR, + NULL, 0); + if (IS_ERR(audio->map_v_write)) { + MM_ERR("could map write buffers\n"); + rc = -ENOMEM; + free_contiguous_memory_by_paddr(audio->out_phys); + goto evt_error; + } + audio->out_data = audio->map_v_write->vaddr; + MM_DBG("write buf: phy addr 0x%08x kernel addr 0x%08x\n", + audio->out_phys, (int)audio->out_data); } - audio->out_data = (char *)audio->map_v_write; - MM_DBG("write buf: phy addr 0x%08x kernel addr 0x%08x\n", - (unsigned int)addr, - (unsigned int)audio->out_data); /* Initialize buffer */ audio->out[0].data = audio->out_data + 0; @@ -1540,17 +1479,6 @@ evt_error: msm_adsp_put(audio->audrec); audpreproc_aenc_free(audio->enc_id); mutex_unlock(&audio->lock); -input_buff_map_error: - ion_free(client, audio->input_buff_handle); -input_buff_alloc_error: - ion_unmap_kernel(client, audio->output_buff_handle); -output_buff_map_error: -output_buff_get_phys_error: -output_buff_get_flags_error: - ion_free(client, audio->output_buff_handle); -output_buff_alloc_error: - ion_client_destroy(client); -client_create_error: return rc; }