# 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/qccsyshal@[1-9]\.[1-9]-service 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
