# Copyright (c) 2018-2020, 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.

####### device files ##############
/dev/smcinvoke                                  u:object_r:vendor_smcinvoke_device:s0
/dev/smd7                                       u:object_r:vendor_smd7_device:s0

####### dev/socket files ##########
/dev/socket/seempdw                             u:object_r:vendor_seempdw_socket:s0
/dev/socket/dpmd                                u:object_r:vendor_dpmd_socket:s0
/dev/socket/tcm                                 u:object_r:vendor_dpmtcm_socket:s0
/dev/socket/qvrservice                          u:object_r:vendor_qvrd_socket:s0
/dev/socket/qvrservice_controller               u:object_r:vendor_qvrd_controller_socket:s0
/dev/socket/qvrservice_camera                   u:object_r:vendor_qvrd_socket:s0
/dev/socket/qvrservice_hvx_camera               u:object_r:vendor_qvrd_hvx_socket:s0
/dev/socket/sxrservice                          u:object_r:vendor_sys_sxrd_socket:s0
/dev/socket/qdma_app(/.*)?                      u:object_r:vendor_qcc_app_socket:s0

####### system file ###############
/system/bin/seempd                              u:object_r:vendor_seempd_exec:s0
/system/bin/wfdservice                          u:object_r:wfdservice_exec:s0
/(system_ext|system/system_ext)/bin/dpmd        u:object_r:vendor_dpmd_exec:s0
/(system_ext|system/system_ext)/bin/qvrservice  u:object_r:vendor_qvrd_exec:s0
/(system_ext|system/system_ext)/bin/sxrservice  u:object_r:vendor_sys_sxrd_exec:s0
/system/bin/vpsservice                          u:object_r:vendor_vpsservice_exec:s0

####### system_ext file ###############
/(system_ext|system/system_ext)/bin/dun-server  u:object_r:vendor_dun-server_exec:s0
/(system_ext|system/system_ext)/bin/bt_logger   u:object_r:vendor_bt_logger_exec:s0
/(system_ext|system/system_ext)/bin/perfservice u:object_r:vendor_perfservice_exec:s0
/(system_ext|system/system_ext)/bin/qdtservice  u:object_r:vendor_qdtservice_exec:s0
/(system|system_ext|system/system_ext)/bin/sigma_miracasthalservice            u:object_r:vendor_sigmahal_qti_exec:s0
/(system_ext|system/system_ext)/bin/qccsyshalservice  u:object_r:vendor_qccsyshal_qti_exec:s0
/(system_ext|system/system_ext)/bin/mmi         u:object_r:vendor_mmi_sys_exec:s0
/(system_ext|system/system_ext)/bin/mmi_diag    u:object_r:vendor_mmi_sys_exec:s0
/(system_ext|system/system_ext)/bin/qspmsvc           u:object_r:vendor_qspmsvc_exec:s0

####### data files ################
/data/dpm(/.*)?                                 u:object_r:vendor_dpmd_data_file:s0
/data/misc/qvr(/.*)?                            u:object_r:vendor_qvrd_data_file:s0
/data/misc/sxr(/.*)?                            u:object_r:vendor_sys_sxrd_data_file:s0
/data/nfc(/.*)?                                 u:object_r:nfc_data_file:s0
/data/misc/qdma(/.*)?                           u:object_r:vendor_qcc_data_file:s0
