# Copyright (c) 2019-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.

attribute vendor_sigmahal;
attribute vendor_sigmahal_server;
attribute vendor_sigmahal_client;

attribute vendor_qccsyshal;
attribute vendor_qccsyshal_server;
attribute vendor_qccsyshal_client;

attribute vendor_hal_spu;
attribute vendor_hal_spu_client;
attribute vendor_hal_spu_server;

attribute vendor_hal_qspmhal;
attribute vendor_hal_qspmhal_client;
attribute vendor_hal_qspmhal_server;

attribute vendor_hal_btconfigstore;
attribute vendor_hal_btconfigstore_client;
attribute vendor_hal_btconfigstore_server;

attribute vendor_hal_fm;
attribute vendor_hal_fm_client;
attribute vendor_hal_fm_server;

attribute vendor_hal_qteeconnector;
attribute vendor_hal_qteeconnector_client;
attribute vendor_hal_qteeconnector_server;

attribute vendor_hal_eid;
attribute vendor_hal_eid_client;
attribute vendor_hal_eid_server;
