summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorAzam Sadiq Pasha Kapatrala Syed <akapatra@codeaurora.org>2017-01-22 20:42:26 -0800
committerAzam Sadiq Pasha Kapatrala Syed <akapatra@codeaurora.org>2017-01-24 15:21:13 -0800
commitd6f2fbcca5e1915f4862b41f84d08f019d70f72a (patch)
treebf27567ef19c2f33cbd107560dfa35494a3910d3 /drivers/media
parentb184cdd6100fbfc21b492ab8a47e21751e61db27 (diff)
msm: camera: Find and return mapped fd's from the list
Change to iterate the mapped buffer list and use the secure buffer info structure instead of dma buffer info to return the secure mapped fd's pertaining to the corresponding session. Change-Id: I6dbfef3741d7ae0b24a4e101eebbf8dc62da630a Signed-off-by: Azam Sadiq Pasha Kapatrala Syed <akapatra@codeaurora.org>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/platform/msm/camera_v2/common/cam_smmu_api.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/media/platform/msm/camera_v2/common/cam_smmu_api.c b/drivers/media/platform/msm/camera_v2/common/cam_smmu_api.c
index 54c0aa39cdd3..1c0a10e2fbef 100644
--- a/drivers/media/platform/msm/camera_v2/common/cam_smmu_api.c
+++ b/drivers/media/platform/msm/camera_v2/common/cam_smmu_api.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -1212,6 +1212,25 @@ static enum cam_smmu_buf_state cam_smmu_check_fd_in_list(int idx,
return CAM_SMMU_BUFF_NOT_EXIST;
}
+static enum cam_smmu_buf_state cam_smmu_check_secure_fd_in_list(int idx,
+ int ion_fd, dma_addr_t *paddr_ptr,
+ size_t *len_ptr)
+{
+ struct cam_sec_buff_info *mapping;
+
+ list_for_each_entry(mapping,
+ &iommu_cb_set.cb_info[idx].smmu_buf_list,
+ list) {
+ if (mapping->ion_fd == ion_fd) {
+ mapping->ref_count++;
+ *paddr_ptr = mapping->paddr;
+ *len_ptr = mapping->len;
+ return CAM_SMMU_BUFF_EXIST;
+ }
+ }
+ return CAM_SMMU_BUFF_NOT_EXIST;
+}
+
int cam_smmu_get_handle(char *identifier, int *handle_ptr)
{
int ret = 0;
@@ -1935,7 +1954,8 @@ int cam_smmu_get_stage2_phy_addr(int handle,
goto get_addr_end;
}
- buf_state = cam_smmu_check_fd_in_list(idx, ion_fd, paddr_ptr, len_ptr);
+ buf_state = cam_smmu_check_secure_fd_in_list(idx, ion_fd, paddr_ptr,
+ len_ptr);
if (buf_state == CAM_SMMU_BUFF_EXIST) {
CDBG("ion_fd:%d already in the list, give same addr back",
ion_fd);