# Copyright (c) 2017, 2019 The Linux Foundation. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following
#       disclaimer in the documentation and/or other materials provided
#       with the distribution.
#     * Neither the name of The Linux Foundation nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

persist.vendor.dpm.                        u:object_r:vendor_persist_dpm_prop:s0
persist.vendor.btstack                     u:object_r:bluetooth_prop:s0
persist.vendor.bluetooth.emailaccountcount u:object_r:bluetooth_prop:s0
persist.vendor.bt.a2dp                     u:object_r:bluetooth_prop:s0
persist.vendor.bt_logger.                  u:object_r:bluetooth_prop:s0
persist.vendor.service.bt.                 u:object_r:bluetooth_prop:s0
ro.vendor.btstack.                         u:object_r:bluetooth_prop:s0
vendor.pts.                                u:object_r:bluetooth_prop:s0
vendor.bt.pts.                             u:object_r:bluetooth_prop:s0
vendor.bluetooth.                          u:object_r:bluetooth_prop:s0
persist.vendor.camera.privapp.list         u:object_r:vendor_persist_camera_prop:s0

#mm-parser
vendor.mm.enable.qcom_parser       u:object_r:vendor_mm_parser_prop:s0
vendor.qcom_parser.                u:object_r:vendor_mm_parser_prop:s0
#mm-osal
vendor.debug.mmosal.config         u:object_r:vendor_mm_osal_prop:s0

#perf
vendor.perf.workloadclassifier.enable      u:object_r:vendor_wlc_prop:s0
persist.vendor.build.date.utc              u:object_r:vendor_wlc_prop:s0

#mm-video
persist.vendor.debug.av.logs.lvl          u:object_r:debug_prop:s0
persist.vendor.debug.en.drpcrpt           u:object_r:vendor_mm_video_prop:s0
persist.vendor.media.hls.                 u:object_r:vendor_mm_video_prop:s0
persist.vendor.sys.media.rtp-ports        u:object_r:vendor_mm_video_prop:s0
vendor.encoder.video.profile              u:object_r:vendor_mm_video_prop:s0
vendor.sys.media.target.version           u:object_r:vendor_sys_video_prop:s0
vendor.sys.video.disable.ubwc             u:object_r:vendor_sys_video_prop:s0

#WiFi Display
vendor.wfdservice              u:object_r:wfd_service_prop:s0
persist.vendor.debug.mux.      u:object_r:wfd_debug_prop:s0
persist.vendor.debug.rtp.      u:object_r:wfd_debug_prop:s0
persist.vendor.debug.wfd.      u:object_r:wfd_debug_prop:s0
vendor.debug.wfd.              u:object_r:wfd_debug_prop:s0

persist.vendor.debug.wfdcdbg   u:object_r:wfd_debug_prop:s0
persist.vendor.debug.wfdcdbgv  u:object_r:wfd_debug_prop:s0

# WIGIG
persist.vendor.wigig.                      u:object_r:vendor_wigig_core_prop:s0
persist.vendor.fst.                        u:object_r:vendor_fst_prop:s0
persist.dpm.feature                        u:object_r:vendor_persist_dpm_prop:s0
ctl.stop$dpmd                              u:object_r:ctl_dpmd_prop:s0

# Beluga
ro.vendor.beluga.p                         u:object_r:vendor_exported_system_prop:s0
ro.vendor.beluga.c                         u:object_r:vendor_exported_system_prop:s0
ro.vendor.beluga.s                         u:object_r:vendor_exported_system_prop:s0
ro.vendor.beluga.t                         u:object_r:vendor_exported_system_prop:s0
