# Copyright (c) 2013-2015, 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.

# filename              partition

NON-HLOS.bin            /dev/block/bootdevice/by-name/modem
BTFM.bin                /dev/block/bootdevice/by-name/bluetooth
sbl1.mbn                /dev/block/bootdevice/by-name/sbl1
tz.mbn                  /dev/block/bootdevice/by-name/tz
rpm.mbn                 /dev/block/bootdevice/by-name/rpm
emmc_appsboot.mbn       /dev/block/bootdevice/by-name/aboot
hyp.mbn                 /dev/block/bootdevice/by-name/hyp
pmic.mbn                /dev/block/bootdevice/by-name/pmic
cmnlib.mbn              /dev/block/bootdevice/by-name/cmnlib
cmnlib64.mbn            /dev/block/bootdevice/by-name/cmnlib64
keymaster.mbn           /dev/block/bootdevice/by-name/keymaster
xbl.elf                 /dev/block/bootdevice/by-name/xbl
lksecapp.mbn            /dev/block/bootdevice/by-name/lksecapp
devcfg.mbn              /dev/block/bootdevice/by-name/devcfg
adspso.mbn              /dev/block/bootdevice/by-name/dsp

# filename + .bak       backup partition

sbl1.mbn.bak            /dev/block/bootdevice/by-name/sbl1bak
tz.mbn.bak              /dev/block/bootdevice/by-name/tzbak
rpm.mbn.bak             /dev/block/bootdevice/by-name/rpmbak
emmc_appsboot.mbn.bak   /dev/block/bootdevice/by-name/abootbak
hyp.mbn.bak             /dev/block/bootdevice/by-name/hypbak
pmic.mbn.bak            /dev/block/bootdevice/by-name/pmicbak
cmnlib.mbn.bak          /dev/block/bootdevice/by-name/cmnlibbak
cmnlib64.mbn.bak        /dev/block/bootdevice/by-name/cmnlib64bak
keymaster.mbn.bak       /dev/block/bootdevice/by-name/keymasterbak
xbl.elf.bak             /dev/block/bootdevice/by-name/xblbak
lksecapp.mbn.bak        /dev/block/bootdevice/by-name/lksecappbak
devcfg.mbn.bak          /dev/block/bootdevice/by-name/devcfgbak

# For multiple file firmware images that differ from *.mbn and *.bin
# you can specify filename.* to direct all files to the same location.
# For example for modem.mdt, modem.b00, modem.b01,... modem.bxx files
# writting 'modem.*   location' will direct all files to 'location'.
# If still some files need to go to different location give the full
# file name also, for example 'modem.b01   other_location'

# filename              location

modem.*                 /dev/block/bootdevice/by-name/modem
wcnss.*                 /dev/block/bootdevice/by-name/modem
widevine.*              /dev/block/bootdevice/by-name/modem
adsp.*                  /dev/block/bootdevice/by-name/modem
