aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeftones <punisher_caner@windowslive.com>2016-09-10 15:12:36 +0000
committerDeftones <punisher_caner@windowslive.com>2016-09-10 15:12:36 +0000
commit57a6d43d1b9ceb89fee4ec78c64e0d7ca5e80fa9 (patch)
treef7161a96c48254804f34ecf0a7d8c91aaa2f3e2c
Import source
-rw-r--r--Android.mk22
-rw-r--r--AndroidBoard.mk6
-rw-r--r--BoardConfigCommon.mk17
-rw-r--r--README1
-rw-r--r--board/00-qcom-platform-msm8952.mk22
-rw-r--r--board/ant.mk1
-rw-r--r--board/bootloader.mk3
-rw-r--r--board/filesystem.mk1
-rw-r--r--board/hardware.mk2
-rw-r--r--board/kernel.mk13
-rw-r--r--board/qcom-audio.mk4
-rw-r--r--board/qcom-bluetooth.mk3
-rw-r--r--board/qcom-crypto.mk2
-rw-r--r--board/qcom-display.mk12
-rw-r--r--board/qcom-fm.mk2
-rw-r--r--board/qcom-media.mk1
-rw-r--r--board/qcom-sepolicy.mk1
-rw-r--r--board/qcom-wlan.mk18
-rw-r--r--board/recovery.mk2
-rw-r--r--board/sepolicy.mk1
-rw-r--r--cm.dependencies6
-rw-r--r--configs/hostapd.accept3
-rw-r--r--configs/hostapd.conf1043
-rw-r--r--configs/hostapd.deny2
-rw-r--r--configs/media_codecs_msm8952.xml342
-rw-r--r--configs/p2p_supplicant_overlay.conf1
-rw-r--r--configs/sec_config311
-rw-r--r--configs/wpa_supplicant_overlay.conf2
-rw-r--r--msm8952.mk18
-rw-r--r--product/ant.mk8
-rw-r--r--product/audio.mk9
-rw-r--r--product/charger.mk3
-rw-r--r--product/init.mk11
-rw-r--r--product/media.mk10
-rw-r--r--product/perf.mk9
-rw-r--r--product/qcom-audio.mk17
-rw-r--r--product/qcom-bluetooth.mk12
-rw-r--r--product/qcom-display.mk19
-rw-r--r--product/qcom-fm.mk3
-rw-r--r--product/qcom-keystore.mk5
-rw-r--r--product/qcom-media.mk24
-rw-r--r--product/qcom-perf.mk3
-rw-r--r--product/qcom-radio.mk22
-rw-r--r--product/qcom-sensor.mk3
-rw-r--r--product/qcom-wifi.mk29
-rw-r--r--product/recovery.mk3
-rw-r--r--product/touchscreen.mk3
-rw-r--r--product/usb.mk7
-rw-r--r--recovery/Android.mk8
-rw-r--r--recovery/recovery_updater.c183
-rw-r--r--rootdir/Android.mk70
-rw-r--r--rootdir/etc/init.qcom.bt.sh334
-rw-r--r--rootdir/etc/init.qcom.power_msm8952.rc58
-rw-r--r--rootdir/etc/init.qcom.rc586
-rw-r--r--rootdir/etc/init.qcom.sh87
-rw-r--r--rootdir/etc/init.qcom.ssr.rc22
-rw-r--r--rootdir/etc/init.qcom.usb.rc1026
-rw-r--r--rootdir/etc/ueventd.qcom.rc283
-rw-r--r--sepolicy/bluetooth_loader.te31
-rw-r--r--sepolicy/file_contexts7
-rw-r--r--sepolicy/healthd.te1
-rw-r--r--sepolicy/mm-qcamerad.te3
-rw-r--r--sepolicy/property_contexts1
-rw-r--r--sepolicy/qseecomd.te1
-rw-r--r--sepolicy/surfaceflinger.te2
-rw-r--r--sepolicy/wcnss_service.te1
66 files changed, 4766 insertions, 0 deletions
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..02bf914
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,22 @@
+#
+# Copyright (C) 2014 The CyanogenMod Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+ifneq ($(filter msm8916 msm8939 msm8952,$(TARGET_BOARD_PLATFORM_VARIANT)),)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
+
+endif
diff --git a/AndroidBoard.mk b/AndroidBoard.mk
new file mode 100644
index 0000000..42d6637
--- /dev/null
+++ b/AndroidBoard.mk
@@ -0,0 +1,6 @@
+LOCAL_PATH := $(call my-dir)
+
+#----------------------------------------------------------------------
+# extra images
+#----------------------------------------------------------------------
+include build/core/generate_extra_images.mk
diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk
new file mode 100644
index 0000000..fa4c59f
--- /dev/null
+++ b/BoardConfigCommon.mk
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2016 The CyanogenMod Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Include board config fragments
+include device/google/msm8952-common/board/*.mk
diff --git a/README b/README
new file mode 100644
index 0000000..b6deea8
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+Shared device tree for Cyanogen msm8952 devices
diff --git a/board/00-qcom-platform-msm8952.mk b/board/00-qcom-platform-msm8952.mk
new file mode 100644
index 0000000..0028b4b
--- /dev/null
+++ b/board/00-qcom-platform-msm8952.mk
@@ -0,0 +1,22 @@
+# Platform
+TARGET_BOARD_PLATFORM := msm8952
+
+# Architecture
+TARGET_BOARD_SUFFIX := _32
+TARGET_ARCH := arm
+TARGET_ARCH_VARIANT := armv7-a-neon
+TARGET_CPU_ABI := armeabi-v7a
+TARGET_CPU_ABI2 := armeabi
+TARGET_CPU_VARIANT := cortex-a53
+
+# Init
+TARGET_PLATFORM_DEVICE_BASE := /devices/soc.0/
+BOARD_NEEDS_VENDORIMAGE_SYMLINK := true
+TARGET_COPY_OUT_VENDOR := system
+TARGET_UNIFIED_DEVICE := true
+
+# Qualcomm support
+BOARD_USES_QCOM_HARDWARE := true
+BOARD_USES_QC_TIME_SERVICES := true
+TARGET_POWERHAL_VARIANT := qcom
+TARGET_RIL_VARIANT := caf
diff --git a/board/ant.mk b/board/ant.mk
new file mode 100644
index 0000000..8de7ba5
--- /dev/null
+++ b/board/ant.mk
@@ -0,0 +1 @@
+BOARD_ANT_WIRELESS_DEVICE := "vfs-prerelease"
diff --git a/board/bootloader.mk b/board/bootloader.mk
new file mode 100644
index 0000000..ca626bd
--- /dev/null
+++ b/board/bootloader.mk
@@ -0,0 +1,3 @@
+TARGET_BOOTLOADER_BOARD_NAME := MSM8952
+
+TARGET_NO_BOOTLOADER := true
diff --git a/board/filesystem.mk b/board/filesystem.mk
new file mode 100644
index 0000000..384e59b
--- /dev/null
+++ b/board/filesystem.mk
@@ -0,0 +1 @@
+TARGET_USERIMAGES_USE_EXT4 := true
diff --git a/board/hardware.mk b/board/hardware.mk
new file mode 100644
index 0000000..6c26031
--- /dev/null
+++ b/board/hardware.mk
@@ -0,0 +1,2 @@
+BOARD_HARDWARE_CLASS += hardware/cyanogen/cmhw
+BOARD_USES_CYANOGEN_HARDWARE := true
diff --git a/board/kernel.mk b/board/kernel.mk
new file mode 100644
index 0000000..96b3fc5
--- /dev/null
+++ b/board/kernel.mk
@@ -0,0 +1,13 @@
+BOARD_DTBTOOL_ARGS := -2
+
+BOARD_KERNEL_BASE := 0x80000000
+BOARD_KERNEL_CMDLINE := console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 earlyprintk androidboot.selinux=permissive
+BOARD_KERNEL_PAGESIZE := 2048
+BOARD_KERNEL_TAGS_OFFSET := 0x00000100
+BOARD_RAMDISK_OFFSET := 0x01000000
+BOARD_KERNEL_IMAGE_NAME := zImage-dtb
+
+ENABLE_CPUSETS := true
+
+TARGET_KERNEL_SOURCE := kernel/google/shamrock
+TARGET_KERNEL_ARCH := arm
diff --git a/board/qcom-audio.mk b/board/qcom-audio.mk
new file mode 100644
index 0000000..9612d37
--- /dev/null
+++ b/board/qcom-audio.mk
@@ -0,0 +1,4 @@
+AUDIO_FEATURE_ENABLED_KPI_OPTIMIZE := true
+AUDIO_FEATURE_ENABLED_NEW_SAMPLE_RATE := true
+BOARD_USES_ALSA_AUDIO := true
+USE_CUSTOM_AUDIO_POLICY := 1
diff --git a/board/qcom-bluetooth.mk b/board/qcom-bluetooth.mk
new file mode 100644
index 0000000..dd516c7
--- /dev/null
+++ b/board/qcom-bluetooth.mk
@@ -0,0 +1,3 @@
+BOARD_HAVE_BLUETOOTH := true
+BOARD_HAVE_BLUETOOTH_QCOM := true
+BLUETOOTH_HCI_USE_MCT := true
diff --git a/board/qcom-crypto.mk b/board/qcom-crypto.mk
new file mode 100644
index 0000000..4039ab7
--- /dev/null
+++ b/board/qcom-crypto.mk
@@ -0,0 +1,2 @@
+TARGET_HW_DISK_ENCRYPTION := true
+TARGET_KEYMASTER_WAIT_FOR_QSEE := true
diff --git a/board/qcom-display.mk b/board/qcom-display.mk
new file mode 100644
index 0000000..af75722
--- /dev/null
+++ b/board/qcom-display.mk
@@ -0,0 +1,12 @@
+MAX_EGL_CACHE_KEY_SIZE := 12*1024
+MAX_EGL_CACHE_SIZE := 2048*1024
+
+NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
+
+OVERRIDE_RS_DRIVER := libRSDriver_adreno.so
+
+TARGET_CONTINUOUS_SPLASH_ENABLED := true
+TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS := true
+TARGET_USES_C2D_COMPOSITION := true
+TARGET_USES_ION := true
+USE_OPENGL_RENDERER := true
diff --git a/board/qcom-fm.mk b/board/qcom-fm.mk
new file mode 100644
index 0000000..90ce087
--- /dev/null
+++ b/board/qcom-fm.mk
@@ -0,0 +1,2 @@
+AUDIO_FEATURE_ENABLED_FM_POWER_OPT := true
+TARGET_QCOM_NO_FM_FIRMWARE := true
diff --git a/board/qcom-media.mk b/board/qcom-media.mk
new file mode 100644
index 0000000..4f06152
--- /dev/null
+++ b/board/qcom-media.mk
@@ -0,0 +1 @@
+TARGET_HAVE_SIGNED_VENUS_FW := true
diff --git a/board/qcom-sepolicy.mk b/board/qcom-sepolicy.mk
new file mode 100644
index 0000000..7130c36
--- /dev/null
+++ b/board/qcom-sepolicy.mk
@@ -0,0 +1 @@
+include device/qcom/sepolicy/sepolicy.mk
diff --git a/board/qcom-wlan.mk b/board/qcom-wlan.mk
new file mode 100644
index 0000000..3594ff8
--- /dev/null
+++ b/board/qcom-wlan.mk
@@ -0,0 +1,18 @@
+BOARD_HAS_QCOM_WLAN := true
+BOARD_HAS_QCOM_WLAN_SDK := true
+
+BOARD_HOSTAPD_DRIVER := NL80211
+BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_qcwcn
+
+BOARD_WLAN_DEVICE := qcwcn
+
+BOARD_WPA_SUPPLICANT_DRIVER := NL80211
+BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_qcwcn
+
+TARGET_USES_QCOM_WCNSS_QMI := true
+TARGET_USES_WCNSS_CTRL := true
+
+WIFI_DRIVER_FW_PATH_AP := "ap"
+WIFI_DRIVER_FW_PATH_STA := "sta"
+
+WPA_SUPPLICANT_VERSION := VER_0_8_X
diff --git a/board/recovery.mk b/board/recovery.mk
new file mode 100644
index 0000000..c32be25
--- /dev/null
+++ b/board/recovery.mk
@@ -0,0 +1,2 @@
+# Recovery
+TARGET_RECOVERY_UPDATER_LIBS := librecovery_updater_cm
diff --git a/board/sepolicy.mk b/board/sepolicy.mk
new file mode 100644
index 0000000..0d81bdf
--- /dev/null
+++ b/board/sepolicy.mk
@@ -0,0 +1 @@
+BOARD_SEPOLICY_DIRS += device/google/msm8952-common/sepolicy
diff --git a/cm.dependencies b/cm.dependencies
new file mode 100644
index 0000000..a33381f
--- /dev/null
+++ b/cm.dependencies
@@ -0,0 +1,6 @@
+[
+ {
+ "repository": "android_device_qcom_common",
+ "target_path": "device/qcom/common"
+ }
+]
diff --git a/configs/hostapd.accept b/configs/hostapd.accept
new file mode 100644
index 0000000..923eab6
--- /dev/null
+++ b/configs/hostapd.accept
@@ -0,0 +1,3 @@
+# List of MAC addresses that are allowed to authenticate (IEEE 802.11)
+# with the AP. Optional VLAN ID can be assigned for clients based on the
+# MAC address if dynamic VLANs (hostapd.conf dynamic_vlan option) are used.
diff --git a/configs/hostapd.conf b/configs/hostapd.conf
new file mode 100644
index 0000000..915ceff
--- /dev/null
+++ b/configs/hostapd.conf
@@ -0,0 +1,1043 @@
+##### hostapd configuration file ##############################################
+# Empty lines and lines starting with # are ignored
+
+# AP netdevice name (without 'ap' postfix, i.e., wlan0 uses wlan0ap for
+# management frames); ath0 for madwifi
+interface=wlan0
+
+# In case of madwifi and nl80211 driver interfaces, an additional configuration
+# parameter, bridge, must be used to notify hostapd if the interface is
+# included in a bridge. This parameter is not used with Host AP driver.
+#bridge=br0
+
+# Driver interface type (hostap/wired/madwifi/prism54/test/none/nl80211/bsd);
+# default: hostap). nl80211 is used with all Linux mac80211 drivers.
+# Use driver=none if building hostapd as a standalone RADIUS server that does
+# not control any wireless/wired driver.
+driver=nl80211
+
+# hostapd event logger configuration
+#
+# Two output method: syslog and stdout (only usable if not forking to
+# background).
+#
+# Module bitfield (ORed bitfield of modules that will be logged; -1 = all
+# modules):
+# bit 0 (1) = IEEE 802.11
+# bit 1 (2) = IEEE 802.1X
+# bit 2 (4) = RADIUS
+# bit 3 (8) = WPA
+# bit 4 (16) = driver interface
+# bit 5 (32) = IAPP
+# bit 6 (64) = MLME
+#
+# Levels (minimum value for logged events):
+# 0 = verbose debugging
+# 1 = debugging
+# 2 = informational messages
+# 3 = notification
+# 4 = warning
+#
+logger_syslog=-1
+logger_syslog_level=2
+logger_stdout=-1
+logger_stdout_level=2
+
+# Dump file for state information (on SIGUSR1)
+dump_file=/tmp/hostapd.dump
+
+# Interface for separate control program. If this is specified, hostapd
+# will create this directory and a UNIX domain socket for listening to requests
+# from external programs (CLI/GUI, etc.) for status information and
+# configuration. The socket file will be named based on the interface name, so
+# multiple hostapd processes/interfaces can be run at the same time if more
+# than one interface is used.
+# /var/run/hostapd is the recommended directory for sockets and by default,
+# hostapd_cli will use it when trying to connect with hostapd.
+ctrl_interface=/data/misc/wifi/hostapd
+
+
+# Access control for the control interface can be configured by setting the
+# directory to allow only members of a group to use sockets. This way, it is
+# possible to run hostapd as root (since it needs to change network
+# configuration and open raw sockets) and still allow GUI/CLI components to be
+# run as non-root users. However, since the control interface can be used to
+# change the network configuration, this access needs to be protected in many
+# cases. By default, hostapd is configured to use gid 0 (root). If you
+# want to allow non-root users to use the contron interface, add a new group
+# and change this value to match with that group. Add users that should have
+# control interface access to this group.
+#
+# This variable can be a group name or gid.
+#ctrl_interface_group=wheel
+#ctrl_interface_group=0
+
+
+##### IEEE 802.11 related configuration #######################################
+
+# SSID to be used in IEEE 802.11 management frames
+ssid=QualcommSoftAP
+
+# Country code (ISO/IEC 3166-1). Used to set regulatory domain.
+# Set as needed to indicate country in which device is operating.
+# This can limit available channels and transmit power.
+#country_code=US
+
+# Enable IEEE 802.11d. This advertises the country_code and the set of allowed
+# channels and transmit power levels based on the regulatory limits. The
+# country_code setting must be configured with the correct country for
+# IEEE 802.11d functions.
+# (default: 0 = disabled)
+#ieee80211d=1
+
+# Operation mode (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g,
+# n = IEEE 802.11n, g_only = IEEE 802.11g_only, n_only = IEEE 802.11n_only,
+# Default: IEEE 802.11n
+hw_mode=g
+
+# Channel number (IEEE 802.11)
+# (default: 0, i.e., not set)
+# Please note that some drivers (e.g., madwifi) do not use this value from
+# hostapd and the channel will need to be configuration separately with
+# iwconfig.
+channel=6
+
+# Beacon interval in kus (1.024 ms) (default: 100; range 15..65535)
+beacon_int=100
+
+# DTIM (delivery trafic information message) period (range 1..255):
+# number of beacons between DTIMs (1 = every beacon includes DTIM element)
+# (default: 2)
+dtim_period=2
+
+# Maximum number of stations allowed in station table. New stations will be
+# rejected after the station table is full. IEEE 802.11 has a limit of 2007
+# different association IDs, so this number should not be larger than that.
+# (default: 2007)
+max_num_sta=255
+
+# RTS/CTS threshold; 2347 = disabled (default); range 0..2347
+# If this field is not included in hostapd.conf, hostapd will not control
+# RTS threshold and 'iwconfig wlan# rts <val>' can be used to set it.
+#rts_threshold=2347
+
+# Fragmentation threshold; 2346 = disabled (default); range 256..2346
+# If this field is not included in hostapd.conf, hostapd will not control
+# fragmentation threshold and 'iwconfig wlan# frag <val>' can be used to set
+# it.
+#fragm_threshold=2346
+
+# Rate configuration
+# Default is to enable all rates supported by the hardware. This configuration
+# item allows this list be filtered so that only the listed rates will be left
+# in the list. If the list is empty, all rates are used. This list can have
+# entries that are not in the list of rates the hardware supports (such entries
+# are ignored). The entries in this list are in 100 kbps, i.e., 11 Mbps = 110.
+# If this item is present, at least one rate have to be matching with the rates
+# hardware supports.
+# default: use the most common supported rate setting for the selected
+# hw_mode (i.e., this line can be removed from configuration file in most
+# cases)
+#supported_rates=10 20 55 110 60 90 120 180 240 360 480 540
+
+# Basic rate set configuration
+# List of rates (in 100 kbps) that are included in the basic rate set.
+# If this item is not included, usually reasonable default set is used.
+# This basic rates set is currently used for g-only profile
+#basic_rates=60
+
+# Short Preamble
+# This parameter can be used to enable optional use of short preamble for
+# frames sent at 2 Mbps, 5.5 Mbps, and 11 Mbps to improve network performance.
+# This applies only to IEEE 802.11b-compatible networks and this should only be
+# enabled if the local hardware supports use of short preamble. If any of the
+# associated STAs do not support short preamble, use of short preamble will be
+# disabled (and enabled when such STAs disassociate) dynamically.
+# 0 = do not allow use of short preamble (default)
+# 1 = allow use of short preamble
+#preamble=1
+
+# Station MAC address -based authentication
+# Please note that this kind of access control requires a driver that uses
+# hostapd to take care of management frame processing and as such, this can be
+# used with driver=hostap or driver=nl80211, but not with driver=madwifi.
+# 0 = accept unless in deny list
+# 1 = deny unless in accept list
+# 2 = use external RADIUS server (accept/deny lists are searched first)
+macaddr_acl=0
+
+# Accept/deny lists are read from separate files (containing list of
+# MAC addresses, one per line). Use absolute path name to make sure that the
+# files can be read on SIGHUP configuration reloads.
+accept_mac_file=/data/misc/wifi/hostapd.accept
+deny_mac_file=/data/misc/wifi/hostapd.deny
+
+# IEEE 802.11 specifies two authentication algorithms. hostapd can be
+# configured to allow both of these or only one. Open system authentication
+# should be used with IEEE 802.1X.
+# Bit fields of allowed authentication algorithms:
+# bit 0 = Open System Authentication
+# bit 1 = Shared Key Authentication (requires WEP)
+auth_algs=3
+
+# Send empty SSID in beacons and ignore probe request frames that do not
+# specify full SSID, i.e., require stations to know SSID.
+# default: disabled (0)
+# 1 = send empty (length=0) SSID in beacon and ignore probe request for
+# broadcast SSID
+# 2 = clear SSID (ASCII 0), but keep the original length (this may be required
+# with some clients that do not support empty SSID) and ignore probe
+# requests for broadcast SSID
+ignore_broadcast_ssid=0
+
+# TX queue parameters (EDCF / bursting)
+# default for all these fields: not set, use hardware defaults
+# tx_queue_<queue name>_<param>
+# queues: data0, data1, data2, data3, after_beacon, beacon
+# (data0 is the highest priority queue)
+# parameters:
+# aifs: AIFS (default 2)
+# cwmin: cwMin (1, 3, 7, 15, 31, 63, 127, 255, 511, 1023)
+# cwmax: cwMax (1, 3, 7, 15, 31, 63, 127, 255, 511, 1023); cwMax >= cwMin
+# burst: maximum length (in milliseconds with precision of up to 0.1 ms) for
+# bursting
+#
+# Default WMM parameters (IEEE 802.11 draft; 11-03-0504-03-000e):
+# These parameters are used by the access point when transmitting frames
+# to the clients.
+#
+# Low priority / AC_BK = background
+#tx_queue_data3_aifs=7
+#tx_queue_data3_cwmin=15
+#tx_queue_data3_cwmax=1023
+#tx_queue_data3_burst=0
+# Note: for IEEE 802.11b mode: cWmin=31 cWmax=1023 burst=0
+#
+# Normal priority / AC_BE = best effort
+#tx_queue_data2_aifs=3
+#tx_queue_data2_cwmin=15
+#tx_queue_data2_cwmax=63
+#tx_queue_data2_burst=0
+# Note: for IEEE 802.11b mode: cWmin=31 cWmax=127 burst=0
+#
+# High priority / AC_VI = video
+#tx_queue_data1_aifs=1
+#tx_queue_data1_cwmin=7
+#tx_queue_data1_cwmax=15
+#tx_queue_data1_burst=3.0
+# Note: for IEEE 802.11b mode: cWmin=15 cWmax=31 burst=6.0
+#
+# Highest priority / AC_VO = voice
+#tx_queue_data0_aifs=1
+#tx_queue_data0_cwmin=3
+#tx_queue_data0_cwmax=7
+#tx_queue_data0_burst=1.5
+# Note: for IEEE 802.11b mode: cWmin=7 cWmax=15 burst=3.3
+#
+# Special queues; normally not user configurable
+#
+#tx_queue_after_beacon_aifs=2
+#tx_queue_after_beacon_cwmin=15
+#tx_queue_after_beacon_cwmax=1023
+#tx_queue_after_beacon_burst=0
+#
+#tx_queue_beacon_aifs=2
+#tx_queue_beacon_cwmin=3
+#tx_queue_beacon_cwmax=7
+#tx_queue_beacon_burst=1.5
+
+# 802.1D Tag (= UP) to AC mappings
+# WMM specifies following mapping of data frames to different ACs. This mapping
+# can be configured using Linux QoS/tc and sch_pktpri.o module.
+# 802.1D Tag 802.1D Designation Access Category WMM Designation
+# 1 BK AC_BK Background
+# 2 - AC_BK Background
+# 0 BE AC_BE Best Effort
+# 3 EE AC_BE Best Effort
+# 4 CL AC_VI Video
+# 5 VI AC_VI Video
+# 6 VO AC_VO Voice
+# 7 NC AC_VO Voice
+# Data frames with no priority information: AC_BE
+# Management frames: AC_VO
+# PS-Poll frames: AC_BE
+
+# Default WMM parameters (IEEE 802.11 draft; 11-03-0504-03-000e):
+# for 802.11a or 802.11g networks
+# These parameters are sent to WMM clients when they associate.
+# The parameters will be used by WMM clients for frames transmitted to the
+# access point.
+#
+# note - txop_limit is in units of 32microseconds
+# note - acm is admission control mandatory flag. 0 = admission control not
+# required, 1 = mandatory
+# note - here cwMin and cmMax are in exponent form. the actual cw value used
+# will be (2^n)-1 where n is the value given here
+#
+wmm_enabled=1
+#
+# Low priority / AC_BK = background
+wmm_ac_bk_cwmin=4
+wmm_ac_bk_cwmax=10
+wmm_ac_bk_aifs=7
+wmm_ac_bk_txop_limit=0
+wmm_ac_bk_acm=0
+# Note: for IEEE 802.11b mode: cWmin=5 cWmax=10
+#
+# Normal priority / AC_BE = best effort
+wmm_ac_be_aifs=3
+wmm_ac_be_cwmin=4
+wmm_ac_be_cwmax=10
+wmm_ac_be_txop_limit=0
+wmm_ac_be_acm=0
+# Note: for IEEE 802.11b mode: cWmin=5 cWmax=7
+#
+# High priority / AC_VI = video
+wmm_ac_vi_aifs=2
+wmm_ac_vi_cwmin=3
+wmm_ac_vi_cwmax=4
+wmm_ac_vi_txop_limit=94
+wmm_ac_vi_acm=0
+# Note: for IEEE 802.11b mode: cWmin=4 cWmax=5 txop_limit=188
+#
+# Highest priority / AC_VO = voice
+wmm_ac_vo_aifs=2
+wmm_ac_vo_cwmin=2
+wmm_ac_vo_cwmax=3
+wmm_ac_vo_txop_limit=47
+wmm_ac_vo_acm=0
+# Note: for IEEE 802.11b mode: cWmin=3 cWmax=4 burst=102
+
+# Static WEP key configuration
+#
+# The key number to use when transmitting.
+# It must be between 0 and 3, and the corresponding key must be set.
+# default: not set
+#wep_default_key=0
+# The WEP keys to use.
+# A key may be a quoted string or unquoted hexadecimal digits.
+# The key length should be 5, 13, or 16 characters, or 10, 26, or 32
+# digits, depending on whether 40-bit (64-bit), 104-bit (128-bit), or
+# 128-bit (152-bit) WEP is used.
+# Only the default key must be supplied; the others are optional.
+# default: not set
+#wep_key0=1234567890
+#wep_key1=1234567890
+#wep_key2=1234567890
+#wep_key3=1234567890
+
+# Station inactivity limit
+#
+# If a station does not send anything in ap_max_inactivity seconds, an
+# empty data frame is sent to it in order to verify whether it is
+# still in range. If this frame is not ACKed, the station will be
+# disassociated and then deauthenticated. This feature is used to
+# clear station table of old entries when the STAs move out of the
+# range.
+#
+# The station can associate again with the AP if it is still in range;
+# this inactivity poll is just used as a nicer way of verifying
+# inactivity; i.e., client will not report broken connection because
+# disassociation frame is not sent immediately without first polling
+# the STA with a data frame.
+# default: 300 (i.e., 5 minutes)
+#ap_max_inactivity=300
+
+# Enable/disable internal bridge for packets between associated stations.
+#
+# When IEEE 802.11 is used in managed mode, packets are usually send through
+# the AP even if they are from a wireless station to another wireless station.
+# This functionality requires that the AP has a bridge functionality that sends
+# frames back to the same interface if their destination is another associated
+# station. In addition, broadcast/multicast frames from wireless stations will
+# be sent both to the host system net stack (e.g., to eventually wired network)
+# and back to the wireless interface.
+#
+# The internal bridge is implemented within the wireless kernel module and it
+# bypasses kernel filtering (netfilter/iptables/ebtables). If direct
+# communication between the stations needs to be prevented, the internal
+# bridge can be disabled by setting bridge_packets=0.
+#
+# Note: If this variable is not included in hostapd.conf, hostapd does not
+# change the configuration and iwpriv can be used to set the value with
+# 'iwpriv wlan# param 10 0' command. If the variable is in hostapd.conf,
+# hostapd will override possible iwpriv configuration whenever configuration
+# file is reloaded.
+#
+# default: do not control from hostapd (80211.o defaults to 1=enabled)
+#bridge_packets=1
+
+# Maximum allowed Listen Interval (how many Beacon periods STAs are allowed to
+# remain asleep). Default: 65535 (no limit apart from field size)
+#max_listen_interval=100
+
+# Client isolation can be used to prevent low-level bridging of frames between
+# associated stations in the BSS. By default, this bridging is allowed.
+#ap_isolate=1
+
+##### IEEE 802.11n related configuration ######################################
+
+# ieee80211n: Whether IEEE 802.11n (HT) is enabled
+# 0 = disabled (default)
+# 1 = enabled
+# Note: You will also need to enable WMM for full HT functionality.
+ieee80211n=1
+
+#require_ht=1
+
+# ht_capab: HT capabilities (list of flags)
+# LDPC coding capability: [LDPC] = supported
+# Supported channel width set: [HT40-] = both 20 MHz and 40 MHz with secondary
+# channel below the primary channel; [HT40+] = both 20 MHz and 40 MHz
+# with secondary channel below the primary channel
+# (20 MHz only if neither is set)
+# Note: There are limits on which channels can be used with HT40- and
+# HT40+. Following table shows the channels that may be available for
+# HT40- and HT40+ use per IEEE 802.11n Annex J:
+# freq HT40- HT40+
+# 2.4 GHz 5-13 1-7 (1-9 in Europe/Japan)
+# 5 GHz 40,48,56,64 36,44,52,60
+# (depending on the location, not all of these channels may be available
+# for use)
+# Spatial Multiplexing (SM) Power Save: [SMPS-STATIC] or [SMPS-DYNAMIC]
+# (SMPS disabled if neither is set)
+# HT-greenfield: [GF] (disabled if not set)
+# Short GI for 20 MHz: [SHORT-GI-20] (disabled if not set)
+# Short GI for 40 MHz: [SHORT-GI-40] (disabled if not set)
+# Tx STBC: [TX-STBC] (disabled if not set)
+# Rx STBC: [RX-STBC1] (one spatial stream), [RX-STBC12] (one or two spatial
+# streams), or [RX-STBC123] (one, two, or three spatial streams); Rx STBC
+# disabled if none of these set
+# HT-delayed Block Ack: [DELAYED-BA] (disabled if not set)
+# Maximum A-MSDU length: [MAX-AMSDU-7935] for 7935 octets (3839 octets if not
+# set)
+# DSSS/CCK Mode in 40 MHz: [DSSS_CCK-40] = allowed (not allowed if not set)
+# PSMP support: [PSMP] (disabled if not set)
+# L-SIG TXOP protection support: [LSIG-TXOP-PROT] (disabled if not set)
+# QcHostapd:
+# LOWER byte for associated stations
+# UPPER byte for overlapping stations
+# each byte will have the following info
+# bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8
+# OBSS RIFS LSIG_TXOP NON_GF HT20 FROM_11G FROM_11B FROM_11A
+# bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
+# OBSS RIFS LSIG_TXOP NON_GF HT_20 FROM_11G FROM_11B FROM_11A
+#ht_capab=[HT40-] [SHORT-GI-20] [SHORT-GI-40]
+ht_capab=[SHORT-GI-20] [GF] [DSSS_CCK-40] [LSIG-TXOP-PROT]
+#ht_capab=[LDPC] [HT40-] [HT40+] [SMPS-STATIC] [SMPS-DYNAMIC] [GF] [SHORT-GI-20] [SHORT-GI-40] [TX-STBC] [RX-STBC1] [RX-STBC12] [RX-STBC123] [DELAYED-BA] [MAX-AMSDU-7935] [DSSS_CCK-40] [PSMP] [LSIG-TXOP-PROT]
+
+##### IEEE 802.1X-2004 related configuration ##################################
+
+# Require IEEE 802.1X authorization
+#ieee8021x=1
+
+# IEEE 802.1X/EAPOL version
+# hostapd is implemented based on IEEE Std 802.1X-2004 which defines EAPOL
+# version 2. However, there are many client implementations that do not handle
+# the new version number correctly (they seem to drop the frames completely).
+# In order to make hostapd interoperate with these clients, the version number
+# can be set to the older version (1) with this configuration value.
+#eapol_version=2
+
+# Optional displayable message sent with EAP Request-Identity. The first \0
+# in this string will be converted to ASCII-0 (nul). This can be used to
+# separate network info (comma separated list of attribute=value pairs); see,
+# e.g., RFC 4284.
+#eap_message=hello
+#eap_message=hello\0networkid=netw,nasid=foo,portid=0,NAIRealms=example.com
+
+# WEP rekeying (disabled if key lengths are not set or are set to 0)
+# Key lengths for default/broadcast and individual/unicast keys:
+# 5 = 40-bit WEP (also known as 64-bit WEP with 40 secret bits)
+# 13 = 104-bit WEP (also known as 128-bit WEP with 104 secret bits)
+#wep_key_len_broadcast=5
+#wep_key_len_unicast=5
+# Rekeying period in seconds. 0 = do not rekey (i.e., set keys only once)
+#wep_rekey_period=300
+
+# EAPOL-Key index workaround (set bit7) for WinXP Supplicant (needed only if
+# only broadcast keys are used)
+eapol_key_index_workaround=0
+
+# EAP reauthentication period in seconds (default: 3600 seconds; 0 = disable
+# reauthentication).
+#eap_reauth_period=3600
+
+# Use PAE group address (01:80:c2:00:00:03) instead of individual target
+# address when sending EAPOL frames with driver=wired. This is the most common
+# mechanism used in wired authentication, but it also requires that the port
+# is only used by one station.
+#use_pae_group_addr=1
+
+##### Integrated EAP server ###################################################
+
+# Optionally, hostapd can be configured to use an integrated EAP server
+# to process EAP authentication locally without need for an external RADIUS
+# server. This functionality can be used both as a local authentication server
+# for IEEE 802.1X/EAPOL and as a RADIUS server for other devices.
+
+# Use integrated EAP server instead of external RADIUS authentication
+# server. This is also needed if hostapd is configured to act as a RADIUS
+# authentication server.
+eap_server=1
+
+# Path for EAP server user database
+#eap_user_file=/etc/hostapd.eap_user
+
+# CA certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
+#ca_cert=/etc/hostapd.ca.pem
+
+# Server certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
+#server_cert=/etc/hostapd.server.pem
+
+# Private key matching with the server certificate for EAP-TLS/PEAP/TTLS
+# This may point to the same file as server_cert if both certificate and key
+# are included in a single file. PKCS#12 (PFX) file (.p12/.pfx) can also be
+# used by commenting out server_cert and specifying the PFX file as the
+# private_key.
+#private_key=/etc/hostapd.server.prv
+
+# Passphrase for private key
+#private_key_passwd=secret passphrase
+
+# Enable CRL verification.
+# Note: hostapd does not yet support CRL downloading based on CDP. Thus, a
+# valid CRL signed by the CA is required to be included in the ca_cert file.
+# This can be done by using PEM format for CA certificate and CRL and
+# concatenating these into one file. Whenever CRL changes, hostapd needs to be
+# restarted to take the new CRL into use.
+# 0 = do not verify CRLs (default)
+# 1 = check the CRL of the user certificate
+# 2 = check all CRLs in the certificate path
+#check_crl=1
+
+# dh_file: File path to DH/DSA parameters file (in PEM format)
+# This is an optional configuration file for setting parameters for an
+# ephemeral DH key exchange. In most cases, the default RSA authentication does
+# not use this configuration. However, it is possible setup RSA to use
+# ephemeral DH key exchange. In addition, ciphers with DSA keys always use
+# ephemeral DH keys. This can be used to achieve forward secrecy. If the file
+# is in DSA parameters format, it will be automatically converted into DH
+# params. This parameter is required if anonymous EAP-FAST is used.
+# You can generate DH parameters file with OpenSSL, e.g.,
+# "openssl dhparam -out /etc/hostapd.dh.pem 1024"
+#dh_file=/etc/hostapd.dh.pem
+
+# Configuration data for EAP-SIM database/authentication gateway interface.
+# This is a text string in implementation specific format. The example
+# implementation in eap_sim_db.c uses this as the UNIX domain socket name for
+# the HLR/AuC gateway (e.g., hlr_auc_gw). In this case, the path uses "unix:"
+# prefix.
+#eap_sim_db=unix:/tmp/hlr_auc_gw.sock
+
+# Encryption key for EAP-FAST PAC-Opaque values. This key must be a secret,
+# random value. It is configured as a 16-octet value in hex format. It can be
+# generated, e.g., with the following command:
+# od -tx1 -v -N16 /dev/random | colrm 1 8 | tr -d ' '
+#pac_opaque_encr_key=000102030405060708090a0b0c0d0e0f
+
+# EAP-FAST authority identity (A-ID)
+# A-ID indicates the identity of the authority that issues PACs. The A-ID
+# should be unique across all issuing servers. In theory, this is a variable
+# length field, but due to some existing implementations required A-ID to be
+# 16 octets in length, it is strongly recommended to use that length for the
+# field to provided interoperability with deployed peer implementation. This
+# field is configured in hex format.
+#eap_fast_a_id=101112131415161718191a1b1c1d1e1f
+
+# EAP-FAST authority identifier information (A-ID-Info)
+# This is a user-friendly name for the A-ID. For example, the enterprise name
+# and server name in a human-readable format. This field is encoded as UTF-8.
+#eap_fast_a_id_info=test server
+
+# Enable/disable different EAP-FAST provisioning modes:
+#0 = provisioning disabled
+#1 = only anonymous provisioning allowed
+#2 = only authenticated provisioning allowed
+#3 = both provisioning modes allowed (default)
+#eap_fast_prov=3
+
+# EAP-FAST PAC-Key lifetime in seconds (hard limit)
+#pac_key_lifetime=604800
+
+# EAP-FAST PAC-Key refresh time in seconds (soft limit on remaining hard
+# limit). The server will generate a new PAC-Key when this number of seconds
+# (or fewer) of the lifetime remains.
+#pac_key_refresh_time=86400
+
+# EAP-SIM and EAP-AKA protected success/failure indication using AT_RESULT_IND
+# (default: 0 = disabled).
+#eap_sim_aka_result_ind=1
+
+# Trusted Network Connect (TNC)
+# If enabled, TNC validation will be required before the peer is allowed to
+# connect. Note: This is only used with EAP-TTLS and EAP-FAST. If any other
+# EAP method is enabled, the peer will be allowed to connect without TNC.
+#tnc=1
+
+
+##### IEEE 802.11f - Inter-Access Point Protocol (IAPP) #######################
+
+# Interface to be used for IAPP broadcast packets
+#iapp_interface=eth0
+
+
+##### RADIUS client configuration #############################################
+# for IEEE 802.1X with external Authentication Server, IEEE 802.11
+# authentication with external ACL for MAC addresses, and accounting
+
+# The own IP address of the access point (used as NAS-IP-Address)
+own_ip_addr=127.0.0.1
+
+# Optional NAS-Identifier string for RADIUS messages. When used, this should be
+# a unique to the NAS within the scope of the RADIUS server. For example, a
+# fully qualified domain name can be used here.
+# When using IEEE 802.11r, nas_identifier must be set and must be between 1 and
+# 48 octets long.
+#nas_identifier=ap.example.com
+
+# RADIUS authentication server
+#auth_server_addr=127.0.0.1
+#auth_server_port=1812
+#auth_server_shared_secret=secret
+
+# RADIUS accounting server
+#acct_server_addr=127.0.0.1
+#acct_server_port=1813
+#acct_server_shared_secret=secret
+
+# Secondary RADIUS servers; to be used if primary one does not reply to
+# RADIUS packets. These are optional and there can be more than one secondary
+# server listed.
+#auth_server_addr=127.0.0.2
+#auth_server_port=1812
+#auth_server_shared_secret=secret2
+#
+#acct_server_addr=127.0.0.2
+#acct_server_port=1813
+#acct_server_shared_secret=secret2
+
+# Retry interval for trying to return to the primary RADIUS server (in
+# seconds). RADIUS client code will automatically try to use the next server
+# when the current server is not replying to requests. If this interval is set,
+# primary server will be retried after configured amount of time even if the
+# currently used secondary server is still working.
+#radius_retry_primary_interval=600
+
+
+# Interim accounting update interval
+# If this is set (larger than 0) and acct_server is configured, hostapd will
+# send interim accounting updates every N seconds. Note: if set, this overrides
+# possible Acct-Interim-Interval attribute in Access-Accept message. Thus, this
+# value should not be configured in hostapd.conf, if RADIUS server is used to
+# control the interim interval.
+# This value should not be less 600 (10 minutes) and must not be less than
+# 60 (1 minute).
+#radius_acct_interim_interval=600
+
+# Dynamic VLAN mode; allow RADIUS authentication server to decide which VLAN
+# is used for the stations. This information is parsed from following RADIUS
+# attributes based on RFC 3580 and RFC 2868: Tunnel-Type (value 13 = VLAN),
+# Tunnel-Medium-Type (value 6 = IEEE 802), Tunnel-Private-Group-ID (value
+# VLANID as a string). vlan_file option below must be configured if dynamic
+# VLANs are used. Optionally, the local MAC ACL list (accept_mac_file) can be
+# used to set static client MAC address to VLAN ID mapping.
+# 0 = disabled (default)
+# 1 = option; use default interface if RADIUS server does not include VLAN ID
+# 2 = required; reject authentication if RADIUS server does not include VLAN ID
+#dynamic_vlan=0
+
+# VLAN interface list for dynamic VLAN mode is read from a separate text file.
+# This list is used to map VLAN ID from the RADIUS server to a network
+# interface. Each station is bound to one interface in the same way as with
+# multiple BSSIDs or SSIDs. Each line in this text file is defining a new
+# interface and the line must include VLAN ID and interface name separated by
+# white space (space or tab).
+#vlan_file=/etc/hostapd.vlan
+
+# Interface where 802.1q tagged packets should appear when a RADIUS server is
+# used to determine which VLAN a station is on. hostapd creates a bridge for
+# each VLAN. Then hostapd adds a VLAN interface (associated with the interface
+# indicated by 'vlan_tagged_interface') and the appropriate wireless interface
+# to the bridge.
+#vlan_tagged_interface=eth0
+
+
+##### RADIUS authentication server configuration ##############################
+
+# hostapd can be used as a RADIUS authentication server for other hosts. This
+# requires that the integrated EAP server is also enabled and both
+# authentication services are sharing the same configuration.
+
+# File name of the RADIUS clients configuration for the RADIUS server. If this
+# commented out, RADIUS server is disabled.
+#radius_server_clients=/etc/hostapd.radius_clients
+
+# The UDP port number for the RADIUS authentication server
+#radius_server_auth_port=1812
+
+# Use IPv6 with RADIUS server (IPv4 will also be supported using IPv6 API)
+#radius_server_ipv6=1
+
+
+##### WPA/IEEE 802.11i configuration ##########################################
+
+# Enable WPA. Setting this variable configures the AP to require WPA (either
+# WPA-PSK or WPA-RADIUS/EAP based on other configuration). For WPA-PSK, either
+# wpa_psk or wpa_passphrase must be set and wpa_key_mgmt must include WPA-PSK.
+# For WPA-RADIUS/EAP, ieee8021x must be set (but without dynamic WEP keys),
+# RADIUS authentication server must be configured, and WPA-EAP must be included
+# in wpa_key_mgmt.
+# This field is a bit field that can be used to enable WPA (IEEE 802.11i/D3.0)
+# and/or WPA2 (full IEEE 802.11i/RSN):
+# bit0 = WPA
+# bit1 = IEEE 802.11i/RSN (WPA2) (dot11RSNAEnabled)
+#wpa=1
+
+# WPA pre-shared keys for WPA-PSK. This can be either entered as a 256-bit
+# secret in hex format (64 hex digits), wpa_psk, or as an ASCII passphrase
+# (8..63 characters) that will be converted to PSK. This conversion uses SSID
+# so the PSK changes when ASCII passphrase is used and the SSID is changed.
+# wpa_psk (dot11RSNAConfigPSKValue)
+# wpa_passphrase (dot11RSNAConfigPSKPassPhrase)
+#wpa_psk=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+#wpa_passphrase=qualcomm
+
+# Optionally, WPA PSKs can be read from a separate text file (containing list
+# of (PSK,MAC address) pairs. This allows more than one PSK to be configured.
+# Use absolute path name to make sure that the files can be read on SIGHUP
+# configuration reloads.
+#wpa_psk_file=/etc/hostapd.wpa_psk
+
+# Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both). The
+# entries are separated with a space. WPA-PSK-SHA256 and WPA-EAP-SHA256 can be
+# added to enable SHA256-based stronger algorithms.
+# (dot11RSNAConfigAuthenticationSuitesTable)
+#wpa_key_mgmt=WPA-PSK
+#wpa_key_mgmt=WPA-EAP
+
+# Set of accepted cipher suites (encryption algorithms) for pairwise keys
+# (unicast packets). This is a space separated list of algorithms:
+# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
+# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
+# Group cipher suite (encryption algorithm for broadcast and multicast frames)
+# is automatically selected based on this configuration. If only CCMP is
+# allowed as the pairwise cipher, group cipher will also be CCMP. Otherwise,
+# TKIP will be used as the group cipher.
+# (dot11RSNAConfigPairwiseCiphersTable)
+# Pairwise cipher for WPA (v1) (default: TKIP)
+#wpa_pairwise=TKIP CCMP
+# Pairwise cipher for RSN/WPA2 (default: use wpa_pairwise value)
+#rsn_pairwise=CCMP
+
+# Time interval for rekeying GTK (broadcast/multicast encryption keys) in
+# seconds. (dot11RSNAConfigGroupRekeyTime)
+wpa_group_rekey=86400
+
+# Rekey GTK when any STA that possesses the current GTK is leaving the BSS.
+# (dot11RSNAConfigGroupRekeyStrict)
+#wpa_strict_rekey=1
+
+# Time interval for rekeying GMK (master key used internally to generate GTKs
+# (in seconds).
+#wpa_gmk_rekey=86400
+
+# Maximum lifetime for PTK in seconds. This can be used to enforce rekeying of
+# PTK to mitigate some attacks against TKIP deficiencies.
+#wpa_ptk_rekey=600
+
+# Enable IEEE 802.11i/RSN/WPA2 pre-authentication. This is used to speed up
+# roaming be pre-authenticating IEEE 802.1X/EAP part of the full RSN
+# authentication and key handshake before actually associating with a new AP.
+# (dot11RSNAPreauthenticationEnabled)
+#rsn_preauth=1
+#
+# Space separated list of interfaces from which pre-authentication frames are
+# accepted (e.g., 'eth0' or 'eth0 wlan0wds0'. This list should include all
+# interface that are used for connections to other APs. This could include
+# wired interfaces and WDS links. The normal wireless data interface towards
+# associated stations (e.g., wlan0) should not be added, since
+# pre-authentication is only used with APs other than the currently associated
+# one.
+#rsn_preauth_interfaces=eth0
+
+# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e) is
+# allowed. This is only used with RSN/WPA2.
+# 0 = disabled (default)
+# 1 = enabled
+#peerkey=1
+
+# ieee80211w: Whether management frame protection (MFP) is enabled
+# 0 = disabled (default)
+# 1 = optional
+# 2 = required
+#ieee80211w=0
+
+# Association SA Query maximum timeout (in TU = 1.024 ms; for MFP)
+# (maximum time to wait for a SA Query response)
+# dot11AssociationSAQueryMaximumTimeout, 1...4294967295
+#assoc_sa_query_max_timeout=1000
+
+# Association SA Query retry timeout (in TU = 1.024 ms; for MFP)
+# (time between two subsequent SA Query requests)
+# dot11AssociationSAQueryRetryTimeout, 1...4294967295
+#assoc_sa_query_retry_timeout=201
+
+
+# okc: Opportunistic Key Caching (aka Proactive Key Caching)
+# Allow PMK cache to be shared opportunistically among configured interfaces
+# and BSSes (i.e., all configurations within a single hostapd process).
+# 0 = disabled (default)
+# 1 = enabled
+#okc=1
+
+
+##### IEEE 802.11r configuration ##############################################
+
+# Mobility Domain identifier (dot11FTMobilityDomainID, MDID)
+# MDID is used to indicate a group of APs (within an ESS, i.e., sharing the
+# same SSID) between which a STA can use Fast BSS Transition.
+# 2-octet identifier as a hex string.
+#mobility_domain=a1b2
+
+# PMK-R0 Key Holder identifier (dot11FTR0KeyHolderID)
+# 1 to 48 octet identifier.
+# This is configured with nas_identifier (see RADIUS client section above).
+
+# Default lifetime of the PMK-RO in minutes; range 1..65535
+# (dot11FTR0KeyLifetime)
+#r0_key_lifetime=10000
+
+# PMK-R1 Key Holder identifier (dot11FTR1KeyHolderID)
+# 6-octet identifier as a hex string.
+#r1_key_holder=000102030405
+
+# Reassociation deadline in time units (TUs / 1.024 ms; range 1000..65535)
+# (dot11FTReassociationDeadline)
+#reassociation_deadline=1000
+
+# List of R0KHs in the same Mobility Domain
+# format: <MAC address> <NAS Identifier> <128-bit key as hex string>
+# This list is used to map R0KH-ID (NAS Identifier) to a destination MAC
+# address when requesting PMK-R1 key from the R0KH that the STA used during the
+# Initial Mobility Domain Association.
+#r0kh=02:01:02:03:04:05 r0kh-1.example.com 000102030405060708090a0b0c0d0e0f
+#r0kh=02:01:02:03:04:06 r0kh-2.example.com 00112233445566778899aabbccddeeff
+# And so on.. One line per R0KH.
+
+# List of R1KHs in the same Mobility Domain
+# format: <MAC address> <R0KH-ID> <128-bit key as hex string>
+# This list is used to map R1KH-ID to a destination MAC address when sending
+# PMK-R1 key from the R0KH. This is also the list of authorized R1KHs in the MD
+# that can request PMK-R1 keys.
+#r1kh=02:01:02:03:04:05 02:11:22:33:44:55 000102030405060708090a0b0c0d0e0f
+#r1kh=02:01:02:03:04:06 02:11:22:33:44:66 00112233445566778899aabbccddeeff
+# And so on.. One line per R1KH.
+
+# Whether PMK-R1 push is enabled at R0KH
+# 0 = do not push PMK-R1 to all configured R1KHs (default)
+# 1 = push PMK-R1 to all configured R1KHs whenever a new PMK-R0 is derived
+#pmk_r1_push=1
+
+##### Passive scanning ########################################################
+# Scan different channels every N seconds. 0 = disable passive scanning.
+#passive_scan_interval=60
+
+# Listen N usecs on each channel when doing passive scanning.
+# This value plus the time needed for changing channels should be less than
+# 32 milliseconds (i.e. 32000 usec) to avoid interruptions to normal
+# operations. Time needed for channel changing varies based on the used wlan
+# hardware.
+# default: disabled (0)
+#passive_scan_listen=10000
+
+# Passive scanning mode:
+# 0 = scan all supported modes (802.11a/b/g/Turbo) (default)
+# 1 = scan only the mode that is currently used for normal operations
+#passive_scan_mode=1
+
+# Maximum number of entries kept in AP table (either for passive scanning or
+# for detecting Overlapping Legacy BSS Condition). The oldest entry will be
+# removed when adding a new entry that would make the list grow over this
+# limit. Note! Wi-Fi certification for IEEE 802.11g requires that OLBC is
+# enabled, so this field should not be set to 0 when using IEEE 802.11g.
+# default: 255
+#ap_table_max_size=255
+
+# Number of seconds of no frames received after which entries may be deleted
+# from the AP table. Since passive scanning is not usually performed frequently
+# this should not be set to very small value. In addition, there is no
+# guarantee that every scan cycle will receive beacon frames from the
+# neighboring APs.
+# default: 60
+#ap_table_expiration_time=3600
+
+
+##### Wi-Fi Protected Setup (WPS) #############################################
+
+# WPS state
+# 0 = WPS disabled (default)
+# 1 = WPS enabled, not configured
+# 2 = WPS enabled, configured
+#wps_state=2
+
+# AP can be configured into a locked state where new WPS Registrar are not
+# accepted, but previously authorized Registrars (including the internal one)
+# can continue to add new Enrollees.
+ap_setup_locked=1
+
+# Universally Unique IDentifier (UUID; see RFC 4122) of the device
+# This value is used as the UUID for the internal WPS Registrar. If the AP
+# is also using UPnP, this value should be set to the device's UPnP UUID.
+# If not configured, UUID will be generated based on the local MAC address.
+#uuid=12345678-9abc-def0-1234-56789abcdef0
+
+# Note: If wpa_psk_file is set, WPS is used to generate random, per-device PSKs
+# that will be appended to the wpa_psk_file. If wpa_psk_file is not set, the
+# default PSK (wpa_psk/wpa_passphrase) will be delivered to Enrollees. Use of
+# per-device PSKs is recommended as the more secure option (i.e., make sure to
+# set wpa_psk_file when using WPS with WPA-PSK).
+
+# When an Enrollee requests access to the network with PIN method, the Enrollee
+# PIN will need to be entered for the Registrar. PIN request notifications are
+# sent to hostapd ctrl_iface monitor. In addition, they can be written to a
+# text file that could be used, e.g., to populate the AP administration UI with
+# pending PIN requests. If the following variable is set, the PIN requests will
+# be written to the configured file.
+#wps_pin_requests=/var/run/hostapd_wps_pin_requests
+
+# Device Name
+# User-friendly description of device; up to 32 octets encoded in UTF-8
+#device_name=Wireless AP
+
+# Manufacturer
+# The manufacturer of the device (up to 64 ASCII characters)
+#manufacturer=Qualcomm
+
+# Model Name
+# Model of the device (up to 32 ASCII characters)
+#model_name=QualcommSoftAP
+
+# Model Number
+# Additional device description (up to 32 ASCII characters)
+#model_number=123
+
+# Serial Number
+# Serial number of the device (up to 32 characters)
+#serial_number=12345
+
+# Primary Device Type
+# Used format: <categ>-<OUI>-<subcateg>
+# categ = Category as an integer value
+# OUI = OUI and type octet as a 4-octet hex-encoded value; 0050F204 for
+# default WPS OUI
+# subcateg = OUI-specific Sub Category as an integer value
+# Examples:
+# 1-0050F204-1 (Computer / PC)
+# 1-0050F204-2 (Computer / Server)
+# 5-0050F204-1 (Storage / NAS)
+# 6-0050F204-1 (Network Infrastructure / AP)
+#device_type=6-0050F204-1
+
+# OS Version
+# 4-octet operating system version number (hex string)
+#os_version=01020300
+
+# Config Methods
+# List of the supported configuration methods
+config_methods=label display push_button keypad
+
+# Access point PIN for initial configuration and adding Registrars
+# If not set, hostapd will not allow external WPS Registrars to control the
+# access point.
+#ap_pin=12345670
+
+# Skip building of automatic WPS credential
+# This can be used to allow the automatically generated Credential attribute to
+# be replaced with pre-configured Credential(s).
+#skip_cred_build=1
+
+# Additional Credential attribute(s)
+# This option can be used to add pre-configured Credential attributes into M8
+# message when acting as a Registrar. If skip_cred_build=1, this data will also
+# be able to override the Credential attribute that would have otherwise been
+# automatically generated based on network configuration. This configuration
+# option points to an external file that much contain the WPS Credential
+# attribute(s) as binary data.
+#extra_cred=hostapd.cred
+
+# Credential processing
+# 0 = process received credentials internally (default)
+# 1 = do not process received credentials; just pass them over ctrl_iface to
+# external program(s)
+# 2 = process received credentials internally and pass them over ctrl_iface
+# to external program(s)
+# Note: With wps_cred_processing=1, skip_cred_build should be set to 1 and
+# extra_cred be used to provide the Credential data for Enrollees.
+#
+# wps_cred_processing=1 will disabled automatic updates of hostapd.conf file
+# both for Credential processing and for marking AP Setup Locked based on
+# validation failures of AP PIN. An external program is responsible on updating
+# the configuration appropriately in this case.
+#wps_cred_processing=0
+
+# AP Settings Attributes for M7
+# By default, hostapd generates the AP Settings Attributes for M7 based on the
+# current configuration. It is possible to override this by providing a file
+# with pre-configured attributes. This is similar to extra_cred file format,
+# but the AP Settings attributes are not encapsulated in a Credential
+# attribute.
+#ap_settings=hostapd.ap_settings
+
+# WPS UPnP interface
+# If set, support for external Registrars is enabled.
+#upnp_iface=br0
+
+# Friendly Name (required for UPnP)
+# Short description for end use. Should be less than 64 characters.
+#friendly_name=Qualcomm Access Point
+
+# Manufacturer URL (optional for UPnP)
+#manufacturer_url=http://www.qualcomm.com/
+
+# Model Description (recommended for UPnP)
+# Long description for end user. Should be less than 128 characters.
+#model_description=Wireless Access Point
+
+# Model URL (optional for UPnP)
+#model_url=http://www.qualcomm.com/
+
+# Universal Product Code (optional for UPnP)
+# 12-digit, all-numeric code that identifies the consumer package.
+#upc=123456789012
+
+##### Multiple BSSID support ##################################################
+#
+# Above configuration is using the default interface (wlan#, or multi-SSID VLAN
+# interfaces). Other BSSIDs can be added by using separator 'bss' with
+# default interface name to be allocated for the data packets of the new BSS.
+#
+# hostapd will generate BSSID mask based on the BSSIDs that are
+# configured. hostapd will verify that dev_addr & MASK == dev_addr. If this is
+# not the case, the MAC address of the radio must be changed before starting
+# hostapd (ifconfig wlan0 hw ether <MAC addr>).
+#
+# BSSIDs are assigned in order to each BSS, unless an explicit BSSID is
+# specified using the 'bssid' parameter.
+# If an explicit BSSID is specified, it must be chosen such that it:
+# - results in a valid MASK that covers it and the dev_addr
+# - is not the same as the MAC address of the radio
+# - is not the same as any other explicitly specified BSSID
+#
+# Please note that hostapd uses some of the values configured for the first BSS
+# as the defaults for the following BSSes. However, it is recommended that all
+# BSSes include explicit configuration of all relevant configuration items.
+#
+#bss=wlan0_0
+#ssid=test2
+# most of the above items can be used here (apart from radio interface specific
+# items, like channel)
+
+#bss=wlan0_1
+#bssid=00:13:10:95:fe:0b
+# ...
diff --git a/configs/hostapd.deny b/configs/hostapd.deny
new file mode 100644
index 0000000..e4b6c09
--- /dev/null
+++ b/configs/hostapd.deny
@@ -0,0 +1,2 @@
+# List of MAC addresses that are not allowed to authenticate (IEEE 802.11)
+# with the AP.
diff --git a/configs/media_codecs_msm8952.xml b/configs/media_codecs_msm8952.xml
new file mode 100644
index 0000000..a32f574
--- /dev/null
+++ b/configs/media_codecs_msm8952.xml
@@ -0,0 +1,342 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+ Copyright (C) 2015 The Linux Foundation. All rights reserved.
+ Not a contribution.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+<!DOCTYPE MediaCodecs [
+<!ELEMENT Include EMPTY>
+<!ATTLIST Include href CDATA #REQUIRED>
+<!ELEMENT MediaCodecs (Decoders|Encoders|Include)*>
+<!ELEMENT Decoders (MediaCodec|Include)*>
+<!ELEMENT Encoders (MediaCodec|Include)*>
+<!ELEMENT MediaCodec (Type|Quirk|Include)*>
+<!ATTLIST MediaCodec name CDATA #REQUIRED>
+<!ATTLIST MediaCodec type CDATA>
+<!ELEMENT Type EMPTY>
+<!ATTLIST Type name CDATA #REQUIRED>
+<!ELEMENT Quirk EMPTY>
+<!ATTLIST Quirk name CDATA #REQUIRED>
+]>
+
+There's a simple and a complex syntax to declare the availability of a
+media codec:
+
+A codec that properly follows the OpenMax spec and therefore doesn't have any
+quirks and that only supports a single content type can be declared like so:
+
+ <MediaCodec name="OMX.foo.bar" type="something/interesting" />
+
+If a codec has quirks OR supports multiple content types, the following syntax
+can be used:
+
+ <MediaCodec name="OMX.foo.bar" >
+ <Type name="something/interesting" />
+ <Type name="something/else" />
+ ...
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="output-buffers-are-unreadable" />
+ </MediaCodec>
+
+Only the three quirks included above are recognized at this point:
+
+"requires-allocate-on-input-ports"
+ must be advertised if the component does not properly support specification
+ of input buffers using the OMX_UseBuffer(...) API but instead requires
+ OMX_AllocateBuffer to be used.
+
+"requires-allocate-on-output-ports"
+ must be advertised if the component does not properly support specification
+ of output buffers using the OMX_UseBuffer(...) API but instead requires
+ OMX_AllocateBuffer to be used.
+
+"output-buffers-are-unreadable"
+ must be advertised if the emitted output buffers of a decoder component
+ are not readable, i.e. use a custom format even though abusing one of
+ the official OMX colorspace constants.
+ Clients of such decoders will not be able to access the decoded data,
+ naturally making the component much less useful. The only use for
+ a component with this quirk is to render the output to the screen.
+ Audio decoders MUST NOT advertise this quirk.
+ Video decoders that advertise this quirk must be accompanied by a
+ corresponding color space converter for thumbnail extraction,
+ matching surfaceflinger support that can render the custom format to
+ a texture and possibly other code, so just DON'T USE THIS QUIRK.
+
+
+-->
+
+<!--
+ Decoder capabilities for 8952
+_________________________________________________________________
+ | Codec | W H fps Mbps MB/s | Encode Secure-dec |
+ |__________|_________________________________________|___________________|
+ | h264 | 1920 1088 60 50 489600 | Y Y |
+ | hevc | 1920 1088 60 50 489600 | N Y |
+ | mpeg4 | 1920 1088 60 40 489600 | Y N |
+ | vc1 | 1920 1088 30 45 244800 | N Y |
+ | vp8 | 1920 1088 30 50 244800 | Y N |
+ | divx3 | 1920 1088 30 20 244800 | N N |
+ | div4/5/6 | 1920 1088 30 50 244800 | N N |
+ | h263 | 864 480 30 2 48600 | Y N |
+ | mpeg2 | 1920 1088 30 80 244800 | N Y |
+ |__________|_________________________________________|___________________|
+
+-->
+
+<!--
+ Encoder capabilities for 8952
+ ____________________________________________________
+ | Codec | W H fps Mbps MB/s |
+ |__________|_________________________________________|
+ | h264 | 1920 1088 30 20 244800 |
+ | mpeg4 | 1920 1088 30 40 244800 |
+ | h263 | 864 480 30 2 48600 |
+ | vp8 | 1920 1088 30 20 244800 |
+ |____________________________________________________|
+-->
+
+<MediaCodecs>
+ <Include href="media_codecs_google_audio.xml" />
+ <Include href="media_codecs_google_telephony.xml" />
+ <Settings>
+ <Setting name="max-video-encoder-input-buffers" value="9" />
+ </Settings>
+ <Encoders>
+ <!-- Video Hardware -->
+ <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation" />
+ <Limit name="size" min="96x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.encoder.mpeg4" type="video/mp4v-es" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation"/>
+ <Limit name="size" min="96x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-40000000" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.encoder.h263" type="video/3gpp" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation" />
+ <Limit name="size" min="96x64" max="864x480" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="48600" />
+ <Limit name="bitrate" range="1-2000000" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation" />
+ <Limit name="size" min="96x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ </Encoders>
+ <Decoders>
+ <!-- Audio Hardware -->
+ <!-- Audio Software -->
+ <MediaCodec name="OMX.qti.audio.decoder.flac" type="audio/flac" />
+ <!-- Video Hardware -->
+ <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="489600" />
+ <Limit name="bitrate" range="1-50000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.avc.secure" type="video/avc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="489600" />
+ <Limit name="bitrate" range="1-50000000" />
+ <Feature name="adaptive-playback" />
+ <Feature name="secure-playback" required="true" />
+ <Limit name="concurrent-instances" max="4" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.mpeg2" type="video/mpeg2" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-80000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.mpeg2.secure" type="video/mpeg2" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-80000000" />
+ <Feature name="adaptive-playback" />
+ <Feature name="secure-playback" required="true" />
+ <Limit name="concurrent-instances" max="7" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.mpeg4" type="video/mp4v-es" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="489600" />
+ <Limit name="bitrate" range="1-40000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.h263" type="video/3gpp" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="864x480" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="48600" />
+ <Limit name="bitrate" range="1-2000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.wmv" type="video/x-ms-wmv" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-45000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.wmv.secure" type="video/x-ms-wmv" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-45000000" />
+ <Feature name="adaptive-playback" />
+ <Feature name="secure-playback" required="true" />
+ <Limit name="concurrent-instances" max="7" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.vc1" type="video/wvc1" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-45000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.vc1.secure" type="video/wvc1" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-45000000" />
+ <Feature name="adaptive-playback" />
+ <Feature name="secure-playback" required="true" />
+ <Limit name="concurrent-instances" max="7" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.divx" type="video/divx" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />s
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.divx311" type="video/divx311" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-2000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.divx4" type="video/divx4" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-50000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.hevc" type="video/hevc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="489600" />
+ <Limit name="bitrate" range="1-50000000" />
+ <Feature name="adaptive-playback" />
+ <Limit name="concurrent-instances" max="8" />
+ </MediaCodec>
+ </Decoders>
+ <Include href="media_codecs_google_video.xml" />
+</MediaCodecs>
diff --git a/configs/p2p_supplicant_overlay.conf b/configs/p2p_supplicant_overlay.conf
new file mode 100644
index 0000000..acbace2
--- /dev/null
+++ b/configs/p2p_supplicant_overlay.conf
@@ -0,0 +1 @@
+disable_scan_offload=1
diff --git a/configs/sec_config b/configs/sec_config
new file mode 100644
index 0000000..68c6e15
--- /dev/null
+++ b/configs/sec_config
@@ -0,0 +1,311 @@
+/* IPC Security Config */
+/* <GPS QMI Service ID - 16>:<GPS QMI Instance ID - all instances>:<Client Group ID> */
+16:4294967295:1000:3004
+/* <LOWI QMI Service ID - 38>:<LOWI QMI Instance ID - all instances>:<Client Group ID> */
+56:4294967295:1021:3004
+/* Allow SS CTL service to be used by system and net_raw processes */
+43:4294967295:1000:3004
+/* <UIMRMT QMI Service ID - 16>:<UIMRMT QMI Instance ID - all instances>:<Client Group ID> */
+50:4294967295:1001
+/* QMI-SLIM service permitted to gps and net_raw */
+55:4294967295:1021:3004
+/* Allow Sensor services to be used by sensor process */
+256:4294967295:3011
+257:4294967295:3011
+258:4294967295:3011
+259:4294967295:3011
+260:4294967295:3011
+261:4294967295:3011
+262:4294967295:3011
+263:4294967295:3011
+264:4294967295:3011
+265:4294967295:3011
+266:4294967295:3011
+267:4294967295:3011
+268:4294967295:3011
+269:4294967295:3011
+270:4294967295:3011
+271:4294967295:3011
+272:4294967295:3011
+273:4294967295:3011
+274:4294967295:3011
+275:4294967295:3011
+276:4294967295:3011
+277:4294967295:3011
+278:4294967295:3011
+279:4294967295:3011
+280:4294967295:3011
+281:4294967295:3011
+282:4294967295:3011
+283:4294967295:3011
+284:4294967295:3011
+285:4294967295:3011
+286:4294967295:3011
+287:4294967295:3011
+288:4294967295:3011
+289:4294967295:3011
+290:4294967295:3011
+291:4294967295:3011
+292:4294967295:3011
+293:4294967295:3011
+294:4294967295:3011
+295:4294967295:3011
+296:4294967295:3011
+297:4294967295:3011
+298:4294967295:3011
+299:4294967295:3011
+300:4294967295:3011
+301:4294967295:3011
+302:4294967295:3011
+303:4294967295:3011
+304:4294967295:3011
+305:4294967295:3011
+306:4294967295:3011
+307:4294967295:3011
+308:4294967295:3011
+309:4294967295:3011
+310:4294967295:3011
+311:4294967295:3011
+312:4294967295:3011
+313:4294967295:3011
+314:4294967295:3011
+315:4294967295:3011
+316:4294967295:3011
+317:4294967295:3011
+318:4294967295:3011
+319:4294967295:3011
+320:4294967295:3011
+321:4294967295:3011
+322:4294967295:3011
+323:4294967295:3011
+324:4294967295:3011
+325:4294967295:3011
+326:4294967295:3011
+327:4294967295:3011
+328:4294967295:3011
+329:4294967295:3011
+330:4294967295:3011
+331:4294967295:3011
+332:4294967295:3011
+333:4294967295:3011
+334:4294967295:3011
+335:4294967295:3011
+336:4294967295:3011
+337:4294967295:3011
+338:4294967295:3011
+339:4294967295:3011
+340:4294967295:3011
+341:4294967295:3011
+342:4294967295:3011
+343:4294967295:3011
+344:4294967295:3011
+345:4294967295:3011
+346:4294967295:3011
+347:4294967295:3011
+348:4294967295:3011
+349:4294967295:3011
+350:4294967295:3011
+351:4294967295:3011
+352:4294967295:3011
+353:4294967295:3011
+354:4294967295:3011
+355:4294967295:3011
+356:4294967295:3011
+357:4294967295:3011
+358:4294967295:3011
+359:4294967295:3011
+360:4294967295:3011
+361:4294967295:3011
+362:4294967295:3011
+363:4294967295:3011
+364:4294967295:3011
+365:4294967295:3011
+366:4294967295:3011
+367:4294967295:3011
+368:4294967295:3011
+369:4294967295:3011
+370:4294967295:3011
+371:4294967295:3011
+372:4294967295:3011
+373:4294967295:3011
+374:4294967295:3011
+375:4294967295:3011
+376:4294967295:3011
+377:4294967295:3011
+378:4294967295:3011
+379:4294967295:3011
+380:4294967295:3011
+381:4294967295:3011
+382:4294967295:3011
+383:4294967295:3011
+384:4294967295:3011
+385:4294967295:3011
+386:4294967295:3011
+387:4294967295:3011
+388:4294967295:3011
+389:4294967295:3011
+390:4294967295:3011
+391:4294967295:3011
+392:4294967295:3011
+393:4294967295:3011
+394:4294967295:3011
+395:4294967295:3011
+396:4294967295:3011
+397:4294967295:3011
+398:4294967295:3011
+399:4294967295:3011
+400:4294967295:3011
+401:4294967295:3011
+402:4294967295:3011
+403:4294967295:3011
+404:4294967295:3011
+405:4294967295:3011
+406:4294967295:3011
+407:4294967295:3011
+408:4294967295:3011
+409:4294967295:3011
+410:4294967295:3011
+411:4294967295:3011
+412:4294967295:3011
+413:4294967295:3011
+414:4294967295:3011
+415:4294967295:3011
+416:4294967295:3011
+417:4294967295:3011
+418:4294967295:3011
+419:4294967295:3011
+420:4294967295:3011
+421:4294967295:3011
+422:4294967295:3011
+423:4294967295:3011
+424:4294967295:3011
+425:4294967295:3011
+426:4294967295:3011
+427:4294967295:3011
+428:4294967295:3011
+429:4294967295:3011
+430:4294967295:3011
+431:4294967295:3011
+432:4294967295:3011
+433:4294967295:3011
+434:4294967295:3011
+435:4294967295:3011
+436:4294967295:3011
+437:4294967295:3011
+438:4294967295:3011
+439:4294967295:3011
+440:4294967295:3011
+441:4294967295:3011
+442:4294967295:3011
+443:4294967295:3011
+444:4294967295:3011
+445:4294967295:3011
+446:4294967295:3011
+447:4294967295:3011
+448:4294967295:3011
+449:4294967295:3011
+450:4294967295:3011
+451:4294967295:3011
+452:4294967295:3011
+453:4294967295:3011
+454:4294967295:3011
+455:4294967295:3011
+456:4294967295:3011
+457:4294967295:3011
+458:4294967295:3011
+459:4294967295:3011
+460:4294967295:3011
+461:4294967295:3011
+462:4294967295:3011
+463:4294967295:3011
+464:4294967295:3011
+465:4294967295:3011
+466:4294967295:3011
+467:4294967295:3011
+468:4294967295:3011
+469:4294967295:3011
+470:4294967295:3011
+471:4294967295:3011
+472:4294967295:3011
+473:4294967295:3011
+474:4294967295:3011
+475:4294967295:3011
+476:4294967295:3011
+477:4294967295:3011
+478:4294967295:3011
+479:4294967295:3011
+480:4294967295:3011
+481:4294967295:3011
+482:4294967295:3011
+483:4294967295:3011
+484:4294967295:3011
+485:4294967295:3011
+486:4294967295:3011
+487:4294967295:3011
+488:4294967295:3011
+489:4294967295:3011
+490:4294967295:3011
+491:4294967295:3011
+492:4294967295:3011
+493:4294967295:3011
+494:4294967295:3011
+495:4294967295:3011
+496:4294967295:3011
+497:4294967295:3011
+498:4294967295:3011
+499:4294967295:3011
+500:4294967295:3011
+501:4294967295:3011
+502:4294967295:3011
+503:4294967295:3011
+504:4294967295:3011
+505:4294967295:3011
+506:4294967295:3011
+507:4294967295:3011
+508:4294967295:3011
+509:4294967295:3011
+510:4294967295:3011
+511:4294967295:3011
+/* Allow RCS service to aquire net_raw permission */
+18:4294967295:1001:3004
+/* Allow QMID service to aquire net_raw permission */
+3:4294967295:1001:3004
+2:4294967295:1001:3004
+42:4294967295:1001:3004
+18:4294967295:1001:3004
+9:4294967295:1001:3004
+1:4294967295:1001:3004:1000
+4:4294967295:1001:3004
+7:4294967295:1001:3004
+8:4294967295:1001:3004
+/* Allow dpmd to access QMI DFS */
+2797:4294967295:1001:3004
+2808:4294967295:1001:3004:1000
+/* DPM */
+47:4294967295:1001:3004
+/* Allow communication to some QMI services with radio privilages */
+/* Format is <Service id>:<all instances>:<radio> */
+/* PBM */
+12:4294967295:1001
+/* WMS */
+5:4294967295:1001
+/* IMS VT */
+32:4294967295:1001
+/* IMSP */
+31:4294967295:1001
+/* PDC */
+36:4294967295:1001
+/* SAR */
+17:4294967295:1001
+/* RFRPE */
+41:4294967295:1001
+/*UIM*/
+11:4294967295:1001
+/*CAT*/
+10:4294967295:1001
+/*IMSA*/
+33:4294967295:1001
+/* Allow dpmd to access QMI DFS */
+48:4294967295:1000:3004
+/* DIAG */
+4097:4294967295:3009
diff --git a/configs/wpa_supplicant_overlay.conf b/configs/wpa_supplicant_overlay.conf
new file mode 100644
index 0000000..58c2639
--- /dev/null
+++ b/configs/wpa_supplicant_overlay.conf
@@ -0,0 +1,2 @@
+disable_scan_offload=1
+p2p_disabled=1
diff --git a/msm8952.mk b/msm8952.mk
new file mode 100644
index 0000000..e238cd1
--- /dev/null
+++ b/msm8952.mk
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2016 The CyanogenMod Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Include package config fragments
+include $(LOCAL_PATH)/product/*.mk
diff --git a/product/ant.mk b/product/ant.mk
new file mode 100644
index 0000000..5f65e99
--- /dev/null
+++ b/product/ant.mk
@@ -0,0 +1,8 @@
+PRODUCT_PACKAGES += \
+ AntHalService \
+ com.dsi.ant.antradio_library \
+ libantradio
+
+# Permissions
+PRODUCT_COPY_FILES += \
+ external/ant-wireless/antradio-library/com.dsi.ant.antradio_library.xml:system/etc/permissions/com.dsi.ant.antradio_library.xml
diff --git a/product/audio.mk b/product/audio.mk
new file mode 100644
index 0000000..f992067
--- /dev/null
+++ b/product/audio.mk
@@ -0,0 +1,9 @@
+# Audio
+PRODUCT_PACKAGES += \
+ audio.a2dp.default \
+ audio.r_submix.default \
+ audio.usb.default \
+ tinymix
+
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml
diff --git a/product/charger.mk b/product/charger.mk
new file mode 100644
index 0000000..ec8724f
--- /dev/null
+++ b/product/charger.mk
@@ -0,0 +1,3 @@
+# Charger
+PRODUCT_PACKAGES += \
+ charger_res_images
diff --git a/product/init.mk b/product/init.mk
new file mode 100644
index 0000000..8579969
--- /dev/null
+++ b/product/init.mk
@@ -0,0 +1,11 @@
+# Init scripts
+PRODUCT_PACKAGES += \
+ init.qcom.rc \
+ init.qcom.power.rc \
+ init.recovery.qcom.rc \
+ ueventd.qcom.rc
+
+ifeq ($(TARGET_BUILD_VARIANT),user)
+PRODUCT_PACKAGES += \
+ init.qcom.ssr.rc
+endif
diff --git a/product/media.mk b/product/media.mk
new file mode 100644
index 0000000..eda41a8
--- /dev/null
+++ b/product/media.mk
@@ -0,0 +1,10 @@
+# Media
+PRODUCT_COPY_FILES += \
+ frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \
+ frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:system/etc/media_codecs_google_telephony.xml \
+ frameworks/av/media/libstagefright/data/media_codecs_google_video_le.xml:system/etc/media_codecs_google_video_le.xml \
+ frameworks/av/media/libstagefright/data/media_codecs_google_video.xml:system/etc/media_codecs_google_video.xml
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ media.aac_51_output_enabled=true
diff --git a/product/perf.mk b/product/perf.mk
new file mode 100644
index 0000000..f8fac25
--- /dev/null
+++ b/product/perf.mk
@@ -0,0 +1,9 @@
+# Properties
+ifeq ($(TARGET_BOARD_PLATFORM_VARIANT),msm8939)
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.sys.fw.dex2oat_thread_count=4
+endif
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.config.max_starting_bg=8 \
+ ro.sys.fw.use_trim_settings=true
diff --git a/product/qcom-audio.mk b/product/qcom-audio.mk
new file mode 100644
index 0000000..a18227b
--- /dev/null
+++ b/product/qcom-audio.mk
@@ -0,0 +1,17 @@
+# Audio
+PRODUCT_PACKAGES += \
+ audiod \
+ audio.primary.msm8952 \
+ libqcompostprocbundle \
+ libqcomvisualizer \
+ libqcomvoiceprocessing
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ av.streaming.offload.enable=true \
+ audio.offload.buffer.size.kb=64 \
+ audio.offload.gapless.enabled=true \
+ audio.offload.min.duration.secs=30 \
+ audio.offload.pcm.16bit.enable=false \
+ audio.offload.pcm.24bit.enable=true \
+ use.voice.path.for.pcm.voip=true
diff --git a/product/qcom-bluetooth.mk b/product/qcom-bluetooth.mk
new file mode 100644
index 0000000..0d423b7
--- /dev/null
+++ b/product/qcom-bluetooth.mk
@@ -0,0 +1,12 @@
+# Init
+PRODUCT_PACKAGES += \
+ init.qcom.bt.sh
+
+# Permissions
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml \
+ frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.qualcomm.bt.hci_transport=smd
diff --git a/product/qcom-display.mk b/product/qcom-display.mk
new file mode 100644
index 0000000..1d8f218
--- /dev/null
+++ b/product/qcom-display.mk
@@ -0,0 +1,19 @@
+# Display
+PRODUCT_PACKAGES += \
+ copybit.msm8952 \
+ gralloc.msm8952 \
+ hwcomposer.msm8952 \
+ libtinyxml \
+ memtrack.msm8952
+
+# Permissions
+ifeq ($(TARGET_BOARD_PLATFORM_VARIANT),msm8939)
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.opengles.aep.xml:system/etc/permissions/android.hardware.opengles.aep.xml
+endif
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ debug.composition.type=c2d \
+ debug.mdpcomp.idletime=600 \
+ persist.hwc.ptor.enable=true
diff --git a/product/qcom-fm.mk b/product/qcom-fm.mk
new file mode 100644
index 0000000..2e24a7f
--- /dev/null
+++ b/product/qcom-fm.mk
@@ -0,0 +1,3 @@
+PRODUCT_PACKAGES += \
+ FMRadio \
+ libfmjni
diff --git a/product/qcom-keystore.mk b/product/qcom-keystore.mk
new file mode 100644
index 0000000..519c739
--- /dev/null
+++ b/product/qcom-keystore.mk
@@ -0,0 +1,5 @@
+# Keystore
+ifneq ($(TARGET_PROVIDES_KEYMASTER),true)
+PRODUCT_PACKAGES += \
+ keystore.msm8952
+endif
diff --git a/product/qcom-media.mk b/product/qcom-media.mk
new file mode 100644
index 0000000..68651fd
--- /dev/null
+++ b/product/qcom-media.mk
@@ -0,0 +1,24 @@
+# Media
+PRODUCT_PACKAGES += \
+ libextmedia_jni \
+ libOmxAacEnc \
+ libOmxAmrEnc \
+ libOmxCore \
+ libOmxEvrcEnc \
+ libOmxQcelp13Enc \
+ libOmxVdec \
+ libOmxVenc \
+ libstagefrighthw
+
+ifneq ($(QCPATH),)
+PRODUCT_PACKAGES += \
+ libOmxVdecHevc
+endif
+
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/configs/media_codecs_$(TARGET_BOARD_PLATFORM_VARIANT).xml:system/etc/media_codecs.xml
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ drm.service.enabled=1 \
+ vidc.enc.narrow.searchrange=1
diff --git a/product/qcom-perf.mk b/product/qcom-perf.mk
new file mode 100644
index 0000000..625219b
--- /dev/null
+++ b/product/qcom-perf.mk
@@ -0,0 +1,3 @@
+# Power HAL
+PRODUCT_PACKAGES += \
+ power.msm8952
diff --git a/product/qcom-radio.mk b/product/qcom-radio.mk
new file mode 100644
index 0000000..ec3af2c
--- /dev/null
+++ b/product/qcom-radio.mk
@@ -0,0 +1,22 @@
+# IRSC
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/configs/sec_config:system/etc/sec_config
+
+# Permissions
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.telephony.gsm.xml:system/etc/permissions/android.hardware.telephony.gsm.xml \
+ frameworks/native/data/etc/android.hardware.telephony.cdma.xml:system/etc/permissions/android.hardware.telephony.cdma.xml \
+ frameworks/native/data/etc/android.software.sip.voip.xml:system/etc/permissions/android.software.sip.voip.xml
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ persist.data.qmi.adb_logmask=0 \
+ persist.radio.apm_sim_not_pwdn=1 \
+ ro.telephony.call_ring.multiple=false \
+ ro.use_data_netmgrd=true
+
+# RIL
+PRODUCT_PACKAGES += \
+ libcnefeatureconfig \
+ librmnetctl \
+ libxml2
diff --git a/product/qcom-sensor.mk b/product/qcom-sensor.mk
new file mode 100644
index 0000000..9957177
--- /dev/null
+++ b/product/qcom-sensor.mk
@@ -0,0 +1,3 @@
+# Init
+PRODUCT_PACKAGES += \
+ init.qcom.sh \ No newline at end of file
diff --git a/product/qcom-wifi.mk b/product/qcom-wifi.mk
new file mode 100644
index 0000000..185e96a
--- /dev/null
+++ b/product/qcom-wifi.mk
@@ -0,0 +1,29 @@
+# Permissions
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml \
+ frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.disableWifiApFirmwareReload=true \
+ wifi.interface=wlan0
+
+# Wifi
+PRODUCT_PACKAGES += \
+ libqsap_sdk \
+ libQWiFiSoftApCfg \
+ libwcnss_qmi \
+ wcnss_service
+
+PRODUCT_PACKAGES += \
+ hostapd \
+ dhcpcd.conf \
+ wpa_supplicant \
+ wpa_supplicant.conf
+
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/configs/hostapd.accept:system/etc/hostapd/hostapd.accept \
+ $(LOCAL_PATH)/configs/hostapd.conf:system/etc/hostapd/hostapd_default.conf \
+ $(LOCAL_PATH)/configs/hostapd.deny:system/etc/hostapd/hostapd.deny \
+ $(LOCAL_PATH)/configs/p2p_supplicant_overlay.conf:system/etc/wifi/p2p_supplicant_overlay.conf \
+ $(LOCAL_PATH)/configs/wpa_supplicant_overlay.conf:system/etc/wifi/wpa_supplicant_overlay.conf
diff --git a/product/recovery.mk b/product/recovery.mk
new file mode 100644
index 0000000..98605a7
--- /dev/null
+++ b/product/recovery.mk
@@ -0,0 +1,3 @@
+# Recovery
+PRODUCT_PACKAGES += \
+ librecovery_updater_cm
diff --git a/product/touchscreen.mk b/product/touchscreen.mk
new file mode 100644
index 0000000..9a5b3e6
--- /dev/null
+++ b/product/touchscreen.mk
@@ -0,0 +1,3 @@
+# Permissions
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml
diff --git a/product/usb.mk b/product/usb.mk
new file mode 100644
index 0000000..1da34fc
--- /dev/null
+++ b/product/usb.mk
@@ -0,0 +1,7 @@
+# Init scripts
+PRODUCT_PACKAGES += \
+ init.qcom.usb.rc
+
+# Permissions
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml
diff --git a/recovery/Android.mk b/recovery/Android.mk
new file mode 100644
index 0000000..86fb070
--- /dev/null
+++ b/recovery/Android.mk
@@ -0,0 +1,8 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_C_INCLUDES := bootable/recovery
+LOCAL_SRC_FILES := recovery_updater.c
+LOCAL_MODULE := librecovery_updater_cm
+LOCAL_MODULE_TAGS := eng
+include $(BUILD_STATIC_LIBRARY)
diff --git a/recovery/recovery_updater.c b/recovery/recovery_updater.c
new file mode 100644
index 0000000..c0036f9
--- /dev/null
+++ b/recovery/recovery_updater.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2015, The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "edify/expr.h"
+
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+
+#define ALPHABET_LEN 256
+#define KB 1024
+
+#define TZ_PART_PATH "/dev/block/platform/7824900.sdhci/by-name/tz"
+#define TZ_VER_STR "QC_IMAGE_VERSION_STRING="
+#define TZ_VER_STR_LEN 24
+#define TZ_VER_BUF_LEN 255
+#define TZ_SZ 500 * KB /* MMAP 500K of TZ, TZ partition is 500K */
+
+/* Boyer-Moore string search implementation from Wikipedia */
+
+/* Return longest suffix length of suffix ending at str[p] */
+static int max_suffix_len(const char *str, size_t str_len, size_t p) {
+ uint32_t i;
+
+ for (i = 0; (str[p - i] == str[str_len - 1 - i]) && (i < p); ) {
+ i++;
+ }
+
+ return i;
+}
+
+/* Generate table of distance between last character of pat and rightmost
+ * occurrence of character c in pat
+ */
+static void bm_make_delta1(int *delta1, const char *pat, size_t pat_len) {
+ uint32_t i;
+ for (i = 0; i < ALPHABET_LEN; i++) {
+ delta1[i] = pat_len;
+ }
+ for (i = 0; i < pat_len - 1; i++) {
+ uint8_t idx = (uint8_t) pat[i];
+ delta1[idx] = pat_len - 1 - i;
+ }
+}
+
+/* Generate table of next possible full match from mismatch at pat[p] */
+static void bm_make_delta2(int *delta2, const char *pat, size_t pat_len) {
+ int p;
+ uint32_t last_prefix = pat_len - 1;
+
+ for (p = pat_len - 1; p >= 0; p--) {
+ /* Compare whether pat[p-pat_len] is suffix of pat */
+ if (strncmp(pat + p, pat, pat_len - p) == 0) {
+ last_prefix = p + 1;
+ }
+ delta2[p] = last_prefix + (pat_len - 1 - p);
+ }
+
+ for (p = 0; p < (int) pat_len - 1; p++) {
+ /* Get longest suffix of pattern ending on character pat[p] */
+ int suf_len = max_suffix_len(pat, pat_len, p);
+ if (pat[p - suf_len] != pat[pat_len - 1 - suf_len]) {
+ delta2[pat_len - 1 - suf_len] = pat_len - 1 - p + suf_len;
+ }
+ }
+}
+
+static char * bm_search(const char *str, size_t str_len, const char *pat,
+ size_t pat_len) {
+ int delta1[ALPHABET_LEN];
+ int delta2[pat_len];
+ int i;
+
+ bm_make_delta1(delta1, pat, pat_len);
+ bm_make_delta2(delta2, pat, pat_len);
+
+ if (pat_len == 0) {
+ return (char *) str;
+ }
+
+ i = pat_len - 1;
+ while (i < (int) str_len) {
+ int j = pat_len - 1;
+ while (j >= 0 && (str[i] == pat[j])) {
+ i--;
+ j--;
+ }
+ if (j < 0) {
+ return (char *) (str + i + 1);
+ }
+ i += MAX(delta1[(uint8_t) str[i]], delta2[j]);
+ }
+
+ return NULL;
+}
+
+static int get_tz_version(char *ver_str, size_t len) {
+ int ret = 0;
+ int fd;
+ char *tz_data = NULL;
+ char *offset = NULL;
+
+ fd = open(TZ_PART_PATH, O_RDONLY);
+ if (fd < 0) {
+ ret = errno;
+ goto err_ret;
+ }
+
+ tz_data = (char *) mmap(NULL, TZ_SZ, PROT_READ, MAP_PRIVATE, fd, 0);
+ if (tz_data == (char *)-1) {
+ ret = errno;
+ goto err_fd_close;
+ }
+
+ /* Do Boyer-Moore search across TZ data */
+ offset = bm_search(tz_data, TZ_SZ, TZ_VER_STR, TZ_VER_STR_LEN);
+ if (offset != NULL) {
+ strncpy(ver_str, offset + TZ_VER_STR_LEN, len);
+ } else {
+ ret = -ENOENT;
+ }
+
+ munmap(tz_data, TZ_SZ);
+err_fd_close:
+ close(fd);
+err_ret:
+ return ret;
+}
+
+/* verify_trustzone("TZ_VERSION", "TZ_VERSION", ...) */
+Value * VerifyTrustZoneFn(const char *name, State *state, int argc, Expr *argv[]) {
+ char current_tz_version[TZ_VER_BUF_LEN];
+ char *tz_version;
+ int i, ret;
+
+ ret = get_tz_version(current_tz_version, TZ_VER_BUF_LEN);
+ if (ret) {
+ return ErrorAbort(state, "%s() failed to read current TZ version: %d",
+ name, ret);
+ }
+
+ for (i = 1; i <= argc; i++) {
+ ret = ReadArgs(state, argv, i, &tz_version);
+ if (ret < 0) {
+ return ErrorAbort(state, "%s() error parsing arguments: %d",
+ name, ret);
+ }
+
+ uiPrintf(state, "Comparing TZ version %s to %s",
+ tz_version, current_tz_version);
+ if (strncmp(tz_version, current_tz_version, strlen(tz_version)) == 0) {
+ return StringValue(strdup("1"));
+ }
+ }
+
+ return StringValue(strdup("0"));
+}
+
+void Register_librecovery_updater_cm() {
+ RegisterFunction("cm.verify_trustzone", VerifyTrustZoneFn);
+}
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
new file mode 100644
index 0000000..53f2051
--- /dev/null
+++ b/rootdir/Android.mk
@@ -0,0 +1,70 @@
+LOCAL_PATH:= $(call my-dir)
+
+# Configuration scripts
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.bt.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.qcom.bt.sh
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.qcom.sh
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+# Init scripts
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.qcom.rc
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.power.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.qcom.power_$(TARGET_BOARD_PLATFORM_VARIANT).rc
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.ssr.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.qcom.ssr.rc
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.usb.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.qcom.usb.rc
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+# Copy the power config for recovery too
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.recovery.qcom.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.qcom.power_$(TARGET_BOARD_PLATFORM_VARIANT).rc
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := ueventd.qcom.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/ueventd.qcom.rc
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
diff --git a/rootdir/etc/init.qcom.bt.sh b/rootdir/etc/init.qcom.bt.sh
new file mode 100644
index 0000000..4ec086e
--- /dev/null
+++ b/rootdir/etc/init.qcom.bt.sh
@@ -0,0 +1,334 @@
+#!/system/bin/sh
+# Copyright (c) 2009-2013, 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+#Read the arguments passed to the script
+config="$1"
+
+BLUETOOTH_SLEEP_PATH=/proc/bluetooth/sleep/proto
+LOG_TAG="qcom-bluetooth"
+LOG_NAME="${0}:"
+
+hciattach_pid=""
+
+loge ()
+{
+ /system/bin/log -t $LOG_TAG -p e "$LOG_NAME $@"
+}
+
+logi ()
+{
+ /system/bin/log -t $LOG_TAG -p i "$LOG_NAME $@"
+}
+
+failed ()
+{
+ loge "$1: exit code $2"
+ exit $2
+}
+
+#
+# enable bluetooth profiles dynamically
+#
+config_bt ()
+{
+ baseband=`getprop ro.baseband`
+ target=`getprop ro.board.platform`
+ if [ -f /sys/devices/soc0/soc_id ]; then
+ soc_hwid=`cat /sys/devices/soc0/soc_id`
+ else
+ soc_hwid=`cat /sys/devices/system/soc/soc0/id`
+ fi
+ btsoc=`getprop qcom.bluetooth.soc`
+
+ case $baseband in
+ "apq")
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.nap false
+ setprop ro.bluetooth.sap false
+ setprop ro.bluetooth.dun false
+ # For MPQ as baseband is same for both
+ case $soc_hwid in
+ "130")
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.pbap false
+ setprop ro.qualcomm.bluetooth.map false
+ ;;
+ *)
+ setprop ro.qualcomm.bluetooth.hsp false
+ setprop ro.qualcomm.bluetooth.hfp false
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.map true
+ ;;
+ esac
+ ;;
+ "mdm" | "svlte2a" | "svlte1" | "csfb")
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.map true
+ setprop ro.qualcomm.bluetooth.nap true
+ setprop ro.bluetooth.sap true
+ case $target in
+ "apq8084")
+ setprop ro.bluetooth.dun true
+ logi "Enabling BT-DUN for APQ8084"
+ ;;
+ *)
+ setprop ro.bluetooth.dun false
+ ;;
+ esac
+ ;;
+ "msm")
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.nap true
+ setprop ro.bluetooth.sap true
+ setprop ro.bluetooth.dun true
+ case $btsoc in
+ "ath3k")
+ setprop ro.qualcomm.bluetooth.map false
+ ;;
+ *)
+ setprop ro.qualcomm.bluetooth.map true
+ ;;
+ esac
+ ;;
+ *)
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.map true
+ setprop ro.qualcomm.bluetooth.nap true
+ setprop ro.bluetooth.sap true
+ setprop ro.bluetooth.dun true
+ ;;
+ esac
+
+ #Enable Bluetooth Profiles specific to target Dynamically
+ case $target in
+ "msm8960")
+ if [ "$btsoc" != "ath3k" ] && [ "$soc_hwid" != "130" ]
+ then
+ setprop ro.bluetooth.hfp.ver 1.6
+ setprop ro.qualcomm.bt.hci_transport smd
+ fi
+ ;;
+ "msm8974" | "msm8226" | "msm8610" | "msm8916" | "msm8952" )
+ if [ "$btsoc" != "ath3k" ]
+ then
+ setprop ro.bluetooth.hfp.ver 1.7
+ setprop ro.qualcomm.bt.hci_transport smd
+ fi
+ ;;
+ "apq8084" | "mpq8092" )
+ if [ "$btsoc" != "rome" ]
+ then
+ setprop ro.qualcomm.bt.hci_transport smd
+ elif [ "$btsoc" = "rome" ]
+ then
+ setprop ro.bluetooth.hfp.ver 1.6
+ fi
+ ;;
+ *)
+ ;;
+ esac
+
+if [ -f /system/etc/bluetooth/stack.conf ]; then
+stack=`cat /system/etc/bluetooth/stack.conf`
+fi
+
+case "$stack" in
+ "bluez")
+ logi "Bluetooth stack is $stack"
+ setprop ro.qc.bluetooth.stack $stack
+ reason=`getprop vold.decrypt`
+ case "$reason" in
+ "trigger_restart_framework")
+ start dbus
+ ;;
+ esac
+ ;;
+ *)
+ logi "Bluetooth stack is Bluedroid"
+ ;;
+esac
+
+}
+
+start_hciattach ()
+{
+ /system/bin/hciattach -n $BTS_DEVICE $BTS_TYPE $BTS_BAUD &
+ hciattach_pid=$!
+ logi "start_hciattach: pid = $hciattach_pid"
+ echo 1 > $BLUETOOTH_SLEEP_PATH
+}
+
+kill_hciattach ()
+{
+ echo 0 > $BLUETOOTH_SLEEP_PATH
+ logi "kill_hciattach: pid = $hciattach_pid"
+ ## careful not to kill zero or null!
+ kill -TERM $hciattach_pid
+ # this shell doesn't exit now -- wait returns for normal exit
+}
+
+logi "init.qcom.bt.sh config = $config"
+case "$config" in
+ "onboot")
+ config_bt
+ exit 0
+ ;;
+ *)
+ ;;
+esac
+
+# mimic hciattach options parsing -- maybe a waste of effort
+USAGE="hciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]"
+
+while getopts "blnpt:s:" f
+do
+ case $f in
+ b | l | n | p) opt_flags="$opt_flags -$f" ;;
+ t) timeout=$OPTARG;;
+ s) initial_speed=$OPTARG;;
+ \?) echo $USAGE; exit 1;;
+ esac
+done
+shift $(($OPTIND-1))
+
+# Note that "hci_qcomm_init -e" prints expressions to set the shell variables
+# BTS_DEVICE, BTS_TYPE, BTS_BAUD, and BTS_ADDRESS.
+
+#Selectively Disable sleep
+BOARD=`getprop ro.board.platform`
+STACK=`getprop ro.qc.bluetooth.stack`
+
+# BR/EDR & LE power class configurations
+POWER_CLASS=`getprop qcom.bt.dev_power_class`
+LE_POWER_CLASS=`getprop qcom.bt.le_dev_pwr_class`
+
+#find the transport type
+TRANSPORT=`getprop ro.qualcomm.bt.hci_transport`
+logi "Transport : $TRANSPORT"
+case $STACK in
+ "bluez")
+ logi "** Bluez stack **"
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status off
+ ;;
+esac
+
+
+case $POWER_CLASS in
+ 1) PWR_CLASS="-p 0" ;
+ logi "Power Class: 1";;
+ 2) PWR_CLASS="-p 1" ;
+ logi "Power Class: 2";;
+ 3) PWR_CLASS="-p 2" ;
+ logi "Power Class: CUSTOM";;
+ *) PWR_CLASS="";
+ logi "Power Class: Ignored. Default(1) used (1-CLASS1/2-CLASS2/3-CUSTOM)";
+ logi "Power Class: To override, Before turning BT ON; setprop qcom.bt.dev_power_class <1 or 2 or 3>";;
+esac
+
+case $LE_POWER_CLASS in
+ 1) LE_PWR_CLASS="-P 0" ;
+ logi "LE Power Class: 1";;
+ 2) LE_PWR_CLASS="-P 1" ;
+ logi "LE Power Class: 2";;
+ 3) LE_PWR_CLASS="-P 2" ;
+ logi "LE Power Class: CUSTOM";;
+ *) LE_PWR_CLASS="-P 1";
+ logi "LE Power Class: Ignored. Default(2) used (1-CLASS1/2-CLASS2/3-CUSTOM)";
+ logi "LE Power Class: To override, Before turning BT ON; setprop qcom.bt.le_dev_pwr_class <1 or 2 or 3>";;
+esac
+
+eval $(/system/bin/hci_qcomm_init -e $PWR_CLASS $LE_PWR_CLASS && echo "exit_code_hci_qcomm_init=0" || echo "exit_code_hci_qcomm_init=1")
+
+case $exit_code_hci_qcomm_init in
+ 0) logi "Bluetooth QSoC firmware download succeeded, $BTS_DEVICE $BTS_TYPE $BTS_BAUD $BTS_ADDRESS";;
+ *) failed "Bluetooth QSoC firmware download failed" $exit_code_hci_qcomm_init;
+ case $STACK in
+ "bluez")
+ logi "** Bluez stack **"
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status off
+ ;;
+ esac
+
+ exit $exit_code_hci_qcomm_init;;
+esac
+
+# init does SIGTERM on ctl.stop for service
+trap "kill_hciattach" TERM INT
+
+case $TRANSPORT in
+ "smd")
+ case $STACK in
+ "bluez")
+ logi "** Bluez stack **"
+ echo 1 > /sys/module/hci_smd/parameters/hcismd_set
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status on
+ ;;
+ esac
+ ;;
+ *)
+ logi "start hciattach"
+ start_hciattach
+ case $STACK in
+ "bluez")
+ logi "Bluetooth is turning On with Bluez stack "
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status on
+ ;;
+ esac
+
+ wait $hciattach_pid
+ logi "Bluetooth stopped"
+ ;;
+esac
+
+exit 0
diff --git a/rootdir/etc/init.qcom.power_msm8952.rc b/rootdir/etc/init.qcom.power_msm8952.rc
new file mode 100644
index 0000000..b7d712e
--- /dev/null
+++ b/rootdir/etc/init.qcom.power_msm8952.rc
@@ -0,0 +1,58 @@
+on enable-low-power
+ # HMP scheduler load tracking settings
+ write /proc/sys/kernel/sched_window_stats_policy 3
+ write /proc/sys/kernel/sched_ravg_hist_size 3
+
+ # HMP Task packing settings for 8952
+ write /proc/sys/kernel/sched_small_task 20
+ write /proc/sys/kernel/sched_mostly_idle_load 30
+ write /proc/sys/kernel/sched_mostly_idle_nr_run 3
+
+ # disable thermal core_control to update interactive governor settings
+ write /sys/module/msm_thermal/core_control/enabled 0
+
+ # enable governor
+ write /sys/devices/system/cpu/cpu0/online 1
+ write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor "interactive"
+ write /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 800000
+ # enable thermal core_control now
+ write /sys/module/msm_thermal/core_control/enabled 1
+
+ write /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay "25000 1094400:50000"
+ write /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load 90
+ write /sys/devices/system/cpu/cpufreq/interactive/timer_rate 30000
+ write /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq 998400
+ write /sys/devices/system/cpu/cpufreq/interactive/io_is_busy 0
+ write /sys/devices/system/cpu/cpufreq/interactive/target_loads "1 800000:85 998400:90 1094400:80"
+ write /sys/devices/system/cpu/cpufreq/interactive/min_sample_time 50000
+ write /sys/devices/system/cpu/cpufreq/interactive/max_freq_hysteresis 50000
+
+ # bring all CPUs online
+ write /sys/devices/system/cpu/cpu1/online 1
+ write /sys/devices/system/cpu/cpu2/online 1
+ write /sys/devices/system/cpu/cpu3/online 1
+
+ # Enable low power modes
+ write /sys/module/lpm_levels/parameters/sleep_disabled 0
+
+ # Update foreground and background cpusets
+ write /dev/cpuset/foreground/cpus 0-3
+ write /dev/cpuset/foreground/boost/cpus 0-3
+ write /dev/cpuset/background/cpus 0
+ write /dev/cpuset/system-background/cpus 0-1
+
+ rm /data/system/perfd/default_values
+ start perfd
+
+on charger
+ write /sys/module/lpm_levels/parameters/sleep_disabled 0
+ write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor "powersave"
+
+on class_start:late_start
+ trigger enable-low-power
+
+on property:init.svc.recovery=running
+ trigger enable-low-power
+
+on property:dev.bootcomplete=1
+ setprop sys.io.scheduler bfq
diff --git a/rootdir/etc/init.qcom.rc b/rootdir/etc/init.qcom.rc
new file mode 100644
index 0000000..a6dc09a
--- /dev/null
+++ b/rootdir/etc/init.qcom.rc
@@ -0,0 +1,586 @@
+# Copyright (c) 2009-2012, 2014, 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+import init.qcom.power.rc
+import init.qcom.ssr.rc
+import init.qcom.usb.rc
+import init.target.rc
+
+on early-init
+ mkdir /firmware 0771 system system
+ mkdir /system 0777 root root
+ symlink /data/tombstones /tombstones
+
+ # Turn off backlight on blank
+ write /sys/class/leds/lcd-backlight/trigger "backlight"
+
+on init
+ # Set permissions for persist partition
+ mkdir /persist 0771 system system
+
+ symlink /sdcard /mnt/sdcard
+ symlink /sdcard /storage/sdcard0
+
+on fs
+ mount_all fstab.qcom
+ wait /dev/block/bootdevice/by-name/persist
+ mkdir /persist/data 0700 system system
+ restorecon_recursive /persist
+ wait /dev/block/bootdevice/by-name/dsp
+ restorecon_recursive /dsp
+
+# msm specific files that need to be created on /data
+on post-fs-data
+
+ mkdir /data/fdAlbum 0770 camera camera
+ mkdir /data/misc/camera 0770 camera camera
+
+ #Create PERFD deamon related dirs
+ mkdir /data/misc/perfd 0770 root system
+ chmod 2770 /data/misc/perfd
+ mkdir /data/misc/perfd 0755 root system
+ chmod 2755 /data/misc/perfd
+ mkdir /data/system/perfd 0770 root system
+ chmod 2770 /data/system/perfd
+
+ # NFC local data and nfcee xml storage
+ mkdir /data/nfc 0770 nfc nfc
+ mkdir /data/nfc/param 0770 nfc nfc
+
+ mkdir /data/tombstones 0771 system system
+ mkdir /tombstones/modem 0771 system system
+ mkdir /tombstones/lpass 0771 system system
+ mkdir /tombstones/wcnss 0771 system system
+ mkdir /tombstones/dsps 0771 system system
+
+ mkdir /persist/data/sfs 0700 system system
+ mkdir /persist/data/tz 0700 system system
+
+ mkdir /data/misc/bluetooth 0770 bluetooth bluetooth
+
+ # Create the directories used by the Wireless subsystem
+ mkdir /data/misc/wifi 0770 wifi wifi
+ mkdir /data/misc/wifi/sockets 0770 wifi wifi
+ mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi
+ mkdir /data/misc/dhcp 0770 dhcp dhcp
+ chown dhcp dhcp /data/misc/dhcp
+
+ # Create the directories used by CnE subsystem
+ mkdir /data/connectivity 0771 system system
+ mkdir /data/connectivity/nsrm 0771 system system
+
+ # Create the directories used by DPM subsystem
+ mkdir /data/dpm 0771 system system
+ mkdir /data/dpm/fdMgr 0771 system system
+ mkdir /data/dpm/nsrm 0771 system system
+
+ # Create directory used by audio subsystem
+ mkdir /data/misc/audio 0770 audio audio
+ restorecon_recursive /data/misc/audio
+
+ # Create directory used by the DASH client
+ mkdir /data/misc/dash 0770 media audio
+
+ # Mounting of persist is moved to 'on emmc-fs' and 'on fs' sections
+ # We chown/chmod /persist again so because mount is run as root + defaults
+ chown system system /persist
+ chmod 0771 /persist
+ chmod 0664 /sys/devices/platform/msm_sdcc.1/polling
+ chmod 0664 /sys/devices/platform/msm_sdcc.2/polling
+ chmod 0664 /sys/devices/platform/msm_sdcc.3/polling
+ chmod 0664 /sys/devices/platform/msm_sdcc.4/polling
+
+ # Chown polling nodes as needed from UI running on system server
+ chown system system /sys/devices/platform/msm_sdcc.1/polling
+ chown system system /sys/devices/platform/msm_sdcc.2/polling
+ chown system system /sys/devices/platform/msm_sdcc.3/polling
+ chown system system /sys/devices/platform/msm_sdcc.4/polling
+
+ #Create the symlink to qcn wpa_supplicant folder for ar6000 wpa_supplicant
+ mkdir /data/system 0775 system system
+ #symlink /data/misc/wifi/wpa_supplicant /data/system/wpa_supplicant
+
+ #Create directories for Location services
+ mkdir /data/misc/location 0770 gps gps
+ mkdir /data/misc/location/mq 0770 gps gps
+ mkdir /data/misc/location/xtwifi 0770 gps gps
+ mkdir /data/misc/location/gpsone_d 0770 system gps
+ mkdir /data/misc/location/quipc 0770 gps system
+ mkdir /data/misc/location/gsiff 0770 gps gps
+
+ #Create directory from IMS services
+ mkdir /data/shared 0755
+ chown system system /data/shared
+
+ #Create directory for FOTA
+ mkdir /data/fota 0771
+ chown system system /data/fota
+
+ #Create directory for hostapd
+ mkdir /data/hostapd 0770 system wifi
+
+ # Create /data/time folder for time-services
+ mkdir /data/time/ 0700 system system
+ restorecon_recursive /data/time
+
+ mkdir /data/audio/ 0770 media audio
+
+ setprop vold.post_fs_data_done 1
+
+ #Create a folder for SRS to be able to create a usercfg file
+ mkdir /data/data/media 0770 media media
+
+ mkdir /data/diag_logs 0777 system system
+
+on early-boot
+ # set RLIMIT_MEMLOCK to 64MB
+ setrlimit 8 67108864 67108864
+ # Allow subsystem (modem etc) debugging
+ write /sys/module/subsystem_restart/parameters/enable_debug ${persist.sys.ssr.enable_debug}
+ write /sys/module/pil_msa/parameters/pbl_mba_boot_timeout_ms ${persist.sys.mba_boot_timeout}
+ write /sys/module/pil_msa/parameters/modem_auth_timeout_ms ${persist.sys.modem_auth_timeout}
+ write /sys/module/peripheral_loader/parameters/proxy_timeout_ms ${persist.sys.pil_proxy_timeout}
+ write /sys/kernel/boot_adsp/boot 1
+
+on boot
+ chown bluetooth bluetooth /sys/module/bluetooth_power/parameters/power
+ chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type
+ chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state
+ chown bluetooth bluetooth /proc/bluetooth/sleep/proto
+ chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_lpm
+ chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_btwrite
+ chown system system /sys/module/sco/parameters/disable_esco
+ chown bluetooth bluetooth /sys/module/hci_smd/parameters/hcismd_set
+ chmod 0660 /sys/module/bluetooth_power/parameters/power
+ chmod 0660 /sys/module/hci_smd/parameters/hcismd_set
+ chmod 0660 /sys/class/rfkill/rfkill0/state
+ chmod 0660 /proc/bluetooth/sleep/proto
+ chown bluetooth bluetooth /dev/ttyHS0
+ chmod 0660 /sys/module/hci_uart/parameters/ath_lpm
+ chmod 0660 /sys/module/hci_uart/parameters/ath_btwrite
+ chmod 0660 /dev/ttyHS0
+ chown bluetooth bluetooth /sys/devices/platform/msm_serial_hs.0/clock
+ chmod 0660 /sys/devices/platform/msm_serial_hs.0/clock
+
+ chmod 0660 /dev/ttyHS2
+ chown bluetooth bluetooth /dev/ttyHS2
+
+ #Create QMUX deamon socket area
+ mkdir /dev/socket/qmux_radio 0770 radio radio
+ chmod 2770 /dev/socket/qmux_radio
+ mkdir /dev/socket/qmux_audio 0770 media audio
+ chmod 2770 /dev/socket/qmux_audio
+ mkdir /dev/socket/qmux_bluetooth 0770 bluetooth bluetooth
+ chmod 2770 /dev/socket/qmux_bluetooth
+ mkdir /dev/socket/qmux_gps 0770 gps gps
+ chmod 2770 /dev/socket/qmux_gps
+
+ #Create NETMGR daemon socket area
+ mkdir /dev/socket/netmgr 0750 radio radio
+
+ chmod 0444 /sys/devices/platform/msm_hsusb/gadget/usb_state
+
+ #For bridgemgr daemon to inform the USB driver of the correct transport
+ chown radio radio /sys/class/android_usb/f_rmnet_smd_sdio/transport
+
+# Assign TCP buffer thresholds to be ceiling value of technology maximums
+# Increased technology maximums should be reflected here.
+ write /proc/sys/net/core/rmem_max 8388608
+ write /proc/sys/net/core/wmem_max 8388608
+
+ #To allow interfaces to get v6 address when tethering is enabled
+ write /proc/sys/net/ipv6/conf/rmnet0/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet1/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet2/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet3/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet4/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet5/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet6/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet7/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio0/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio1/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio2/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio3/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio4/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio5/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio6/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio7/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb0/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb1/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb2/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb3/accept_ra 2
+
+ # To prevent out of order acknowledgements from making
+ # connection tracking to treat them as not belonging to
+ # the connection they belong to.
+ # Otherwise, a weird issue happens in which some long
+ # connections on high-throughput links get dropped when
+ # an ack packet comes out of order
+ write /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 1
+
+ # Set the console loglevel to < KERN_INFO
+ # Set the default message loglevel to KERN_INFO
+ write /proc/sys/kernel/printk "6 6 1 7"
+
+ # Allow access for CCID command/response timeout configuration
+ chown system system /sys/module/ccid_bridge/parameters/bulk_msg_timeout
+
+ # camera sockets
+ mkdir /data/misc/camera 0770 camera camera
+
+ # Create directory used by display clients
+ mkdir /data/misc/display 0770 system graphics
+ mkdir /persist/display 0770 system graphics
+
+ # Graphics node permissions
+ chmod 0664 /sys/class/graphics/fb0/dyn_pu
+ chmod 0664 /sys/class/graphics/fb0/dynamic_fps
+ chmod 0664 /sys/class/graphics/fb0/idle_time
+ chmod 0664 /sys/class/graphics/fb0/mode
+ chmod 0664 /sys/class/graphics/fb0/modes
+
+ chown system graphics /sys/class/graphics/fb0/dyn_pu
+ chown system graphics /sys/class/graphics/fb0/dynamic_fps
+ chown system graphics /sys/class/graphics/fb0/idle_time
+ chown system graphics /sys/class/graphics/fb0/mode
+ chown system graphics /sys/class/graphics/fb0/modes
+
+on property:init.svc.wpa_supplicant=stopped
+ stop dhcpcd
+
+on property:bluetooth.isEnabled=true
+ write /sys/class/bluetooth/hci0/idle_timeout 7000
+
+on property:vold.decrypt=trigger_restart_framework
+ start config_bt_addr
+ start config_bluetooth
+
+on property:persist.env.fastdorm.enabled=true
+ setprop persist.radio.data_no_toggle 1
+
+service irsc_util /system/bin/irsc_util "/etc/sec_config"
+ class main
+ user root
+ oneshot
+
+service rmt_storage /system/bin/rmt_storage
+ class core
+ user root
+
+service rfs_access /system/bin/rfs_access
+ class core
+ user system
+ group system net_raw
+
+service config_bt_addr /system/bin/btnvtool -O
+ class core
+ user bluetooth
+ group bluetooth radio
+ oneshot
+
+service config_bluetooth /system/bin/sh /system/etc/init.qcom.bt.sh "onboot"
+ class core
+ user root
+ seclabel u:r:bluetooth_loader:s0
+ oneshot
+
+service cnd /system/bin/cnd
+ class late_start
+ socket cnd stream 660 root inet
+
+service dpmd /system/bin/dpmd
+ class main
+ socket dpmd stream 660 root system
+
+service hciattach /system/bin/sh /system/etc/init.qcom.bt.sh
+ class late_start
+ user bluetooth
+ group bluetooth net_bt_admin
+ disabled
+ seclabel u:r:bluetooth_loader:s0
+ oneshot
+
+on property:bluetooth.hciattach=true
+ start hciattach
+
+# FM
+on property:hw.fm.init=0
+ write /sys/module/radio_iris_transport/parameters/fmsmd_set 0
+
+on property:hw.fm.init=1
+ write /sys/module/radio_iris_transport/parameters/fmsmd_set 1
+
+# QMUX must be in multiple groups to support external process connections
+service qmuxd /system/bin/qmuxd
+ class main
+ user root
+ group radio audio bluetooth gps qcom_diag
+
+service netmgrd /system/bin/netmgrd
+ class main
+
+service qti /vendor/bin/qti
+ class main
+ user radio
+ group radio net_raw qcom_diag usb net_admin
+
+service sensors /system/bin/sensors.qcom
+ class late_start
+ user root
+ group root
+ disabled
+
+on property:ro.use_data_netmgrd=false
+ # netmgr not supported on specific target
+ stop netmgrd
+
+# Adjust socket buffer to enlarge TCP receive window for high bandwidth
+# but only if ro.data.large_tcp_window_size property is set.
+on property:ro.data.large_tcp_window_size=true
+ write /proc/sys/net/ipv4/tcp_adv_win_scale 2
+
+service p2p_supplicant /system/bin/wpa_supplicant \
+ -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \
+ -I/system/etc/wifi/p2p_supplicant_overlay.conf -N \
+ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
+ -I/system/etc/wifi/wpa_supplicant_overlay.conf \
+ -O/data/misc/wifi/sockets -puse_p2p_group_interface=1 \
+ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
+# we will start as root and wpa_supplicant will switch to user wifi
+# after setting up the capabilities required for WEXT
+# user wifi
+# group wifi inet keystore
+ class main
+ socket wpa_wlan0 dgram 660 wifi wifi
+ disabled
+ oneshot
+
+service wpa_supplicant /system/bin/wpa_supplicant \
+ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
+ -I/system/etc/wifi/wpa_supplicant_overlay.conf \
+ -O/data/misc/wifi/sockets \
+ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
+ # we will start as root and wpa_supplicant will switch to user wifi
+ # after setting up the capabilities required for WEXT
+ # user wifi
+ # group wifi inet keystore
+ class main
+ socket wpa_wlan0 dgram 660 wifi wifi
+ disabled
+ oneshot
+
+service dhcpcd_wlan0 /system/bin/dhcpcd -ABKLG
+ class late_start
+ disabled
+ oneshot
+
+service dhcpcd_p2p /system/bin/dhcpcd -ABKLG
+ class late_start
+ disabled
+ oneshot
+
+service iprenew_wlan0 /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+
+service iprenew_p2p /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+
+service dhcpcd_bt-pan /system/bin/dhcpcd -BKLG
+ class late_start
+ disabled
+ oneshot
+
+service iprenew_bt-pan /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+
+service dhcpcd_bnep0 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep1 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep2 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep3 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep4 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_eth0 /system/bin/dhcpcd -aABDKL
+ class late_start
+ disabled
+ oneshot
+
+service iprenew_eth0 /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+
+service loc_launcher /system/bin/loc_launcher
+ #loc_launcher will start as root and set its uid to gps
+ class late_start
+ group gps inet net_raw qcom_diag net_admin wifi
+
+service qcom-sh /system/bin/sh /init.qcom.sh
+ class late_start
+ user root
+ oneshot
+
+service hostapd /system/bin/hostapd -dd /data/hostapd/hostapd.conf
+ class late_start
+ user root
+ group root
+ oneshot
+ disabled
+
+on property:ro.data.large_tcp_window_size=true
+ # Adjust socket buffer to enlarge TCP receive window for high bandwidth (e.g. DO-RevB)
+ write /proc/sys/net/ipv4/tcp_adv_win_scale 2
+
+service ril-daemon2 /system/bin/rild -c 2
+ class main
+ socket rild2 stream 660 root radio
+ socket rild-debug2 stream 660 radio system
+ user root
+ group radio cache inet misc audio sdcard_r sdcard_rw diag qcom_diag log
+
+service charger /charger
+ class charger
+ group log
+ seclabel u:r:healthd:s0
+
+service ssr_diag /system/bin/ssr_diag
+ class late_start
+ user system
+ group system
+
+service hvdcp /system/bin/hvdcp
+ class core
+ user root
+ disabled
+
+on property:persist.usb.hvdcp.detect=true
+ start hvdcp
+
+on property:persist.usb.hvdcp.detect=false
+ stop hvdcp
+
+#start camera server as daemon
+service qcamerasvr /system/bin/mm-qcamera-daemon
+ class late_start
+ user camera
+ group camera system inet input graphics
+ writepid /dev/cpuset/system-background/tasks
+
+# Allow usb charging to be disabled peristently
+on property:persist.usb.chgdisabled=1
+ write /sys/class/power_supply/battery/charging_enabled 0
+
+on property:persist.usb.chgdisabled=0
+ write /sys/class/power_supply/battery/charging_enabled 1
+
+service qseecomd /system/bin/qseecomd
+ class core
+ user root
+ group root
+
+service perfd /vendor/bin/perfd
+ class main
+ user root
+ group root
+ disabled
+ writepid /dev/cpuset/system-background/tasks
+
+service thermal-engine /vendor/bin/thermal-engine
+ class main
+ user root
+ group root
+
+service time_daemon /system/bin/time_daemon
+ class late_start
+ user root
+ group root
+
+service audiod /system/bin/audiod
+ class late_start
+ user system
+ group system
+
+service ppd /system/bin/mm-pp-daemon
+ class late_start
+ disabled
+ user system
+ socket pps stream 0660 system system
+ group system graphics
+
+on property:init.svc.surfaceflinger=stopped
+ stop ppd
+
+on property:init.svc.surfaceflinger=running
+ start ppd
+
+service wcnss-service /system/bin/wcnss_service
+ class main
+ user system
+ group system wifi radio
+ oneshot
+
+service adsprpcd /system/bin/adsprpcd
+ class main
+ user media
+ group media
+
+service per_mgr /system/bin/pm-service
+ class core
+ user system
+ group system net_raw
+
+service msm_irqbalance /system/bin/msm_irqbalance -f /vendor/etc/msm_irqbalance.conf
+ class core
+ user root
+ group root
+ disabled
+
+service msm_irqbal_lb /system/bin/msm_irqbalance -f /vendor/etc/msm_irqbalance_little_big.conf
+ class core
+ user root
+ group root
+ disabled
+ writepid /dev/cpuset/system-background/tasks
diff --git a/rootdir/etc/init.qcom.sh b/rootdir/etc/init.qcom.sh
new file mode 100644
index 0000000..6664b25
--- /dev/null
+++ b/rootdir/etc/init.qcom.sh
@@ -0,0 +1,87 @@
+
+export PATH=/system/bin
+
+# Set platform variables
+target=`getprop ro.board.platform`
+if [ -f /sys/devices/soc0/soc_id ]; then
+ platformid=`cat /sys/devices/soc0/soc_id`
+else
+ platformid=`cat /sys/devices/system/soc/soc0/id`
+fi
+
+#
+# Function to start sensors for DSPS enabled platforms
+#
+start_sensors()
+{
+ if [ -c /dev/msm_dsps -o -c /dev/sensors ]; then
+ chmod -h 775 /persist/sensors
+ chmod -h 664 /persist/sensors/sensors_settings
+ chown -h system.root /persist/sensors/sensors_settings
+
+ mkdir -p /data/misc/sensors
+ chmod -h 775 /data/misc/sensors
+
+ start sensors
+ fi
+}
+
+start_msm_irqbalance_8952()
+{
+ if [ -f /system/bin/msm_irqbalance ]; then
+ case "$platformid" in
+ "239" | "241" | "263" | "264" | "268" | "269" | "270" | "271")
+ start msm_irqbalance;;
+ esac
+ case "$platformid" in
+ "266" | "274" | "277" | "278")
+ start msm_irqbal_lb;;
+ esac
+ fi
+}
+
+start_copying_prebuilt_qcril_db()
+{
+ if [ -f /vendor/qcril.db -a ! -f /data/misc/radio/qcril.db ]; then
+ cp /vendor/qcril.db /data/misc/radio/qcril.db
+ chown -h radio.radio /data/misc/radio/qcril.db
+ fi
+}
+
+baseband=`getprop ro.baseband`
+echo 1 > /proc/sys/net/ipv6/conf/default/accept_ra_defrtr
+
+start_sensors
+start_copying_prebuilt_qcril_db
+start_msm_irqbalance_8952
+
+if [ -f /sys/class/graphics/fb0/modes ]; then
+ panel_res=`cat /sys/class/graphics/fb0/modes`
+ if [ "${panel_res:5:1}" == "x" ]; then
+ panel_xres=${panel_res:2:3}
+ else
+ panel_xres=${panel_res:2:4}
+ fi
+fi
+
+bootmode=`getprop ro.bootmode`
+emmc_boot=`getprop ro.boot.emmc`
+case "$emmc_boot"
+ in "true")
+ if [ "$bootmode" != "charger" ]; then # start rmt_storage and rfs_access
+ start rmt_storage
+ start rfs_access
+ fi
+ ;;
+esac
+
+#
+# Make modem config folder and copy firmware config to that folder
+#
+rm -rf /data/misc/radio/modem_config
+mkdir /data/misc/radio/modem_config
+chmod 770 /data/misc/radio/modem_config
+cp -r /firmware/image/modem_pr/mcfg/configs/* /data/misc/radio/modem_config
+chown -hR radio.radio /data/misc/radio/modem_config
+echo 1 > /data/misc/radio/copy_complete
+chown radio:radio /data/misc/radio/copy_complete
diff --git a/rootdir/etc/init.qcom.ssr.rc b/rootdir/etc/init.qcom.ssr.rc
new file mode 100644
index 0000000..b4f7838
--- /dev/null
+++ b/rootdir/etc/init.qcom.ssr.rc
@@ -0,0 +1,22 @@
+# Copyright (C) 2016 The CyanogenMod Project <http://www.cyanogenmod.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+on boot
+ # Subsystem Restart
+ # Venus
+ write /sys/bus/msm_subsys/devices/subsys0/restart_level "related"
+ # WCNSS
+ write /sys/bus/msm_subsys/devices/subsys1/restart_level "related"
+ # Modem
+ write /sys/bus/msm_subsys/devices/subsys2/restart_level "related"
diff --git a/rootdir/etc/init.qcom.usb.rc b/rootdir/etc/init.qcom.usb.rc
new file mode 100644
index 0000000..25b58c9
--- /dev/null
+++ b/rootdir/etc/init.qcom.usb.rc
@@ -0,0 +1,1026 @@
+# Copyright (c) 2011-2012, 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+on init
+ write /sys/class/android_usb/android0/f_rndis/wceis 1
+
+on boot
+ write /sys/class/android_usb/android0/iSerial ${ro.serialno}
+ write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
+ write /sys/class/android_usb/android0/iProduct ${ro.product.model}
+ write /sys/class/android_usb/android0/f_rndis/manufacturer ${ro.product.manufacturer}
+ write /sys/class/android_usb/android0/f_rndis/vendorID ${ro.usb.vid}
+ setprop persist.sys.usb.config.extra none
+
+on charger
+ setprop sys.usb.config mass_storage
+
+on fs
+ write /sys/class/android_usb/android0/iSerial ${ro.serialno}
+ write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
+ write /sys/class/android_usb/android0/iProduct ${ro.product.model}
+ write /sys/class/android_usb/android0/f_rndis/manufacturer ${ro.product.manufacturer}
+ mkdir /dev/usb-ffs 0770 shell shell
+ mkdir /dev/usb-ffs/adb 0770 shell shell
+ mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000
+ write /sys/class/android_usb/android0/f_ffs/aliases adb
+
+# Following are the parameters required for usb functionality. They provide configurable options like
+# product_id/vendor id and allows specifying required functions:
+#
+# Required parameters:
+#
+# /sys/class/android_usb/android0/enable: Enables/disables usb composition
+# Value: 0 (disable), 1 (enable)
+#
+# /sys/class/android_usb/android0/idVendor: Stores Vendor ID
+# Value: 05c6 (Vendor id for Qualcomm Inc)
+#
+# /sys/class/android_usb/android0/idProduct: Stores Product id corresponding to usb composition
+# Value: 0x9xxx for composite interface, 0xFxxx for single interface
+#
+# /sys/class/android_usb/android0/f_diag/clients: Stores name of clients representing a diag interface.
+# Value: Passed one per interface. e.g. diag[,diag_mdm, diag_qsc, diag_mdm2]
+#
+# /sys/class/android_usb/android0/functions: Stores name of the function drivers used in usb composition.
+# Value: Passed one per function driver. e.g. diag[,adb]
+#
+#Optional parameters:
+#
+# /sys/class/android_usb/android0/f_serial/transports: Stores type of underlying transports used to
+# communicate to serial interface.
+# Value: Passed one per interface. One value represents control and data transport together.
+# e.g. smd[,sdio,tty,hsic]
+# Only required if serial interface is present.
+#
+# /sys/class/android_usb/android0/f_serial/transport_names: Stores name of the underlying transports
+# used to communicate to serial interface. This is used to distinguish between more than one interface
+# using same transport type.
+# Value: Passed one per interface. One value represents control and data transport together.
+# e.g. serial_hsic[,serial_hsusb]
+# Only required for transport type hsic, optional for other transport types.
+#
+# /sys/class/android_usb/android0/f_rmnet/transports: Stores type of underlying transports used to
+# communicate to rmnet interface.
+# Value: Passed two per interface as control, data transport type pair.
+# e.g. smd,bam[,hsuart,hsuart]
+# Only required if rmnet interface is present.
+#
+# /sys/class/android_usb/android0/f_rmnet/transport_names: Stores name of the underlying transports
+# used to communicate to rmnet interface. This is used to distinguish between more than one interface
+# using same transport type.
+# Value: Passed one per interface. One value represents control and data transport together.
+# e.g. rmnet_hsic[,rmnet_hsusb]
+# Only required for transport type hsic, optional for other transport types.
+
+# USB compositions
+on property:sys.usb.config=diag,serial_tty,serial_smd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9002
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports tty,smd
+ write /sys/class/android_usb/android0/functions diag,serial
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_tty,serial_smd,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9020
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 901D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 900E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_bam,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9091
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_bam
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9092
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_bam,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9026
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_bam,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_smd,rmnet_smd_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9037
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_smd,rmnet_smd_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903B
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_smd,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9038
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_smd,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903C
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,acm,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_tty,rmnet_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9031
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_tty,rmnet_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903B
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_tty,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9032
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_tty,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903C
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,acm,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_tty,serial_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_tty,acm_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_tty,serial_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9026
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_tty,acm_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9026
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 composition
+on property:sys.usb.config=diag,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports hsic,tty
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 composition with diag_mdm and adb
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9031
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic,tty
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 composition with diag_mdm
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9032
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic,tty
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA composition with adb
+on property:sys.usb.config=diag,diag_mdm,diag_qsc,serial_hsic,serial_hsuart,rmnet_hsic,rmnet_hsuart,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9065
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsuart
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsuart,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsuart
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA composition without adb
+on property:sys.usb.config=diag,diag_mdm,diag_qsc,serial_hsic,serial_hsuart,rmnet_hsic,rmnet_hsuart,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9066
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsuart
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsuart,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsuart
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA2 composition with adb
+on property:sys.usb.config=diag,diag_mdm,diag_mdm2,serial_hsic,serial_hsusb,rmnet_hsic,rmnet_hsusb,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9065
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_mdm2
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsusb
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsusb
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA2 composition without adb
+on property:sys.usb.config=diag,diag_mdm,diag_mdm2,serial_hsic,serial_hsusb,rmnet_hsic,rmnet_hsusb,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9066
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_mdm2
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsusb
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsusb
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion PCIe composition with diag_mdm and adb
+# Serial & RmNet bridged in userspace with tty and qti/ether
+on property:sys.usb.config=diag,diag_mdm,serial_tty,rmnet_qti_ether,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9035
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports tty
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion PCIe composition with diag_mdm
+# Serial & RmNet bridged in userspace with tty and qti/ether
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,rmnet_hsic,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9036
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports tty
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion HSIC/PCIe Hybrid composition with diag_mdm and adb
+# RmNet is bridged over PCIe using qti,ether ctrl/data transports
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,rmnet_qti_ether,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9035
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion HSIC/PCIe Hybrid composition with diag_mdm
+# RmNet is bridged over PCIe using qti,ether ctrl/data transports
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,rmnet_hsic,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9036
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 2.2 composition with diag_qsc and adb
+on property:sys.usb.config=diag,diag_qsc,serial_smd,serial_tty,serial_hsuart,rmnet_hsuart,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9053
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam,hsuart,hsuart
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 2.2 composition with diag_qsc
+on property:sys.usb.config=diag,diag_qsc,serial_smd,serial_tty,serial_hsuart,rmnet_hsuart,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9054
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam,hsuart,hsuart
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis
+ setprop sys.usb.config rndis,${persist.sys.usb.config.extra}
+
+on property:sys.usb.config=rndis,none
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct F00E
+ write /sys/class/android_usb/android0/functions rndis
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,adb
+ stop adbd
+ setprop sys.usb.config rndis,${persist.sys.usb.config.extra},adb
+
+on property:sys.usb.config=rndis,none,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9024
+ write /sys/class/android_usb/android0/functions rndis,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 902C
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions rndis,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,diag,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 902D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions rndis,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,diag,diag_mdm
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9041
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions rndis,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,diag,diag_mdm,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9042
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions rndis,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9086
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions rndis,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,diag,diag_mdm,diag_qsc,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9087
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions rndis,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=ptp
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.ptp}
+ write /sys/class/android_usb/android0/functions ptp
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ptp,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.ptp_adb}
+ write /sys/class/android_usb/android0/functions ptp,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.mtp}
+ write /sys/class/android_usb/android0/functions mtp
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.mtp_adb}
+ write /sys/class/android_usb/android0/functions mtp,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 901B
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions mtp,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903A
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions mtp,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9040
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions mtp,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903F
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions mtp,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9088
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions mtp,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm,diag_qsc,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9089
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions mtp,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,ccid
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9045
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions diag,ccid
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,ccid,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9044
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions diag,adb,ccid
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.ums_adb}
+ write /sys/class/android_usb/android0/functions adb,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+#Mass-storage only composition
+on property:sys.usb.config=mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.ums}
+ write /sys/class/android_usb/android0/functions mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 904A
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9060
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9099
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9098
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_bam
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9083
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_bam,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9084
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss,rmnet_hsic
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 909B
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss,rmnet_hsic,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 909A
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss_apq,qdss_mdm,rmnet_hsic
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90A3
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 0
+ write /sys/class/android_usb/android0/f_qdss/transports bam,hsic
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam,qdss_hsic
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss_apq,qdss_mdm,rmnet_hsic,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90A2
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 0
+ write /sys/class/android_usb/android0/f_qdss/transports bam,hsic
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam,qdss_hsic
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,diag,qdss
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9081
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions rndis,diag,qdss
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,diag,qdss,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9082
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions rndis,diag,qdss,adb
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ncm
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 0525
+ write /sys/class/android_usb/android0/idProduct A4A1
+ write /sys/class/android_usb/android0/functions ncm
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ncm,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 908C
+ write /sys/class/android_usb/android0/functions ncm,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=midi
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.midi}
+ write /sys/class/android_usb/android0/functions midi
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=midi,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor ${ro.usb.vid}
+ write /sys/class/android_usb/android0/idProduct ${ro.usb.id.midi_adb}
+ write /sys/class/android_usb/android0/functions midi,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
diff --git a/rootdir/etc/ueventd.qcom.rc b/rootdir/etc/ueventd.qcom.rc
new file mode 100644
index 0000000..0fa365f
--- /dev/null
+++ b/rootdir/etc/ueventd.qcom.rc
@@ -0,0 +1,283 @@
+# Copyright (c) 2012-2014, 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+# the DIAG device node is not world writable/readable.
+/dev/diag 0660 system qcom_diag
+
+/dev/genlock 0666 system system
+/dev/kgsl 0666 system system
+/dev/kgsl-3d0 0666 system system
+/dev/kgsl-2d0 0666 root root
+/dev/kgsl-2d1 0666 root root
+/dev/ion 0664 system system
+/dev/rtc0 0660 system system
+/dev/smd0 0660 system system
+/dev/smd4 0660 system system
+/dev/smd_cxm_qmi 0640 radio radio
+/dev/smd5 0660 system system
+/dev/smd6 0660 system system
+/dev/smd7 0660 bluetooth bluetooth
+/dev/ccid_bridge 0660 system system
+/dev/ipa 0660 system net_admin
+/dev/wwan_ioctl 0660 system net_admin
+/dev/ipaNatTable 0660 net_admin net_admin
+/dev/rmnet_ctrl 0660 usb usb
+/dev/dpl_ctrl 0660 usb usb
+
+#permissions for CSVT
+/dev/smd11 0660 radio radio
+
+/dev/radio0 0640 system system
+/dev/rfcomm0 0660 bluetooth bluetooth
+/dev/ttyUSB0 0660 bluetooth bluetooth
+/dev/smdcntl0 0640 radio radio
+/dev/smdcntl1 0640 radio radio
+/dev/smdcntl2 0640 radio radio
+/dev/smdcntl3 0640 radio radio
+/dev/smdcntl4 0640 radio radio
+/dev/smdcntl5 0640 radio radio
+/dev/smdcntl6 0640 radio radio
+/dev/smdcntl7 0640 radio radio
+/dev/smdcntl8 0640 radio radio
+/dev/smdcnt_rev0 0640 radio radio
+/dev/smdcnt_rev1 0640 radio radio
+/dev/smdcnt_rev2 0640 radio radio
+/dev/smdcnt_rev3 0640 radio radio
+/dev/smdcnt_rev4 0640 radio radio
+/dev/smdcnt_rev5 0640 radio radio
+/dev/smdcnt_rev6 0640 radio radio
+/dev/smdcnt_rev7 0640 radio radio
+/dev/smdcnt_rev8 0640 radio radio
+/dev/smuxctl32 0640 radio radio
+/dev/sdioctl0 0640 radio radio
+/dev/sdioctl1 0640 radio radio
+/dev/sdioctl2 0640 radio radio
+/dev/sdioctl3 0640 radio radio
+/dev/sdioctl4 0640 radio radio
+/dev/sdioctl5 0640 radio radio
+/dev/sdioctl6 0640 radio radio
+/dev/sdioctl7 0640 radio radio
+/dev/sdioctl8 0640 radio radio
+/dev/rmnet_mux_ctrl 0640 radio radio
+/dev/hsicctl0 0640 radio radio
+/dev/hsicctl1 0640 radio radio
+/dev/hsicctl2 0640 radio radio
+/dev/hsicctl3 0640 radio radio
+/dev/hsicctl4 0640 radio radio
+/dev/hsicctl5 0640 radio radio
+/dev/hsicctl6 0640 radio radio
+/dev/hsicctl7 0640 radio radio
+/dev/hsicctl8 0640 radio radio
+/dev/hsicctl9 0640 radio radio
+/dev/hsicctl10 0640 radio radio
+/dev/hsicctl11 0640 radio radio
+/dev/hsicctl12 0640 radio radio
+/dev/hsicctl13 0640 radio radio
+/dev/hsicctl14 0640 radio radio
+/dev/hsicctl15 0640 radio radio
+/dev/hsicctl16 0640 radio radio
+/dev/mhi_pipe_14 0640 radio radio
+/dev/mhi_pipe_16 0640 radio radio
+/dev/mhi_pipe_32 0640 radio radio
+/dev/video* 0660 system camera
+/dev/media* 0660 system camera
+/dev/v4l-subdev* 0660 system camera
+/dev/qseecom 0660 system drmrpc
+/dev/seemplog 0660 system system
+/dev/pft 0660 system drmrpc
+/dev/gemini0 0660 system camera
+/dev/jpeg0 0660 system camera
+/dev/jpeg1 0660 system camera
+/dev/jpeg2 0660 system camera
+/dev/jpeg3 0660 system camera
+/dev/adsprpc-smd 0664 system system
+/dev/system_health_monitor 0640 radio system
+/dev/mmc3416x 0660 system system
+/dev/msm_camera/* 0660 system camera
+/dev/gemini/ 0660 system camera
+/dev/mercury0 0660 system camera
+/dev/msm_vidc_reg 0660 system audio
+/dev/msm_vidc_dec 0660 system audio
+/dev/msm_vidc_dec_sec 0660 system audio
+/dev/msm_vidc_enc 0660 system audio
+/dev/msm_rotator 0660 system system
+/dev/hw_random 0600 root root
+
+#permissions for audio
+/dev/audio_slimslave 0660 system audio
+/dev/msm_qcelp 0660 system audio
+/dev/msm_evrc 0660 system audio
+/dev/msm_wma 0660 system audio
+/dev/msm_wmapro 0660 system audio
+/dev/msm_alac 0660 system audio
+/dev/msm_ape 0660 system audio
+/dev/msm_amrnb 0660 system audio
+/dev/msm_amrwb 0660 system audio
+/dev/msm_amrwbplus 0660 system audio
+/dev/msm_aac 0660 system audio
+/dev/msm_multi_aac 0660 system audio
+/dev/msm_aac_in 0660 system audio
+/dev/msm_qcelp_in 0660 system audio
+/dev/msm_evrc_in 0660 system audio
+/dev/msm_amrnb_in 0640 system audio
+/dev/msm_a2dp_in 0660 system audio
+/dev/msm_ac3 0660 system audio
+/dev/msm_audio_cal 0660 system audio
+/dev/msm_acdb 0660 system audio
+/dev/msm_hweffects 0660 system audio
+/dev/msm_cad 0660 system audio
+/dev/msm_fm 0660 system audio
+/dev/msm_mvs 0660 system audio
+/dev/msm_pcm_lp_dec 0660 system audio
+/dev/msm_preproc_ctl 0660 system audio
+/dev/msm_rtac 0660 system audio
+/dev/msm_voicememo 0660 system audio
+/dev/smd3 0660 bluetooth net_bt_stack
+/dev/smd2 0660 bluetooth net_bt_stack
+/dev/ttyHSL1 0660 system system
+/dev/ttyHS1 0660 system system
+/dev/mdm 0660 system radio
+/sys/devices/virtual/smdpkt/smdcntl* open_timeout 0664 radio radio
+/dev/sdio_tty_ciq_00 0660 system system
+/dev/tty_sdio_00 0660 system system
+/dev/ttyGS0 0660 system system
+/dev/i2c-5 0660 media media
+/dev/voice_svc 0660 system audio
+/dev/avtimer 0660 system audio
+
+# DVB devices
+/dev/dvb/adapter0/demux* 0440 media media
+/dev/dvb/adapter0/dvr* 0660 media media
+/dev/dvb/adapter0/video* 0660 media media
+
+# Broadcast devices
+/dev/tsc_mux0 0660 media media
+/dev/tsc_ci0 0660 media media
+
+# sensors
+/sys/devices/i2c-12/12-* pollrate_ms 0664 system system
+/sys/devices/f9925000.i2c/i2c-0/0-* enable 0660 input system
+/sys/devices/f9925000.i2c/i2c-0/0-* poll_delay 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* enable 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* poll_delay 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* enable_wakeup 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* max_latency 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* flush 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* calibrate 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* enable 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* poll_delay 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* enable_wakeup 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* max_latency 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* flush 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* calibrate 0660 input system
+/sys/devices/virtual/optical_sensors/proximity ps_adc 0660 input system
+/sys/devices/virtual/optical_sensors/proximity ps_poll_delay 0660 input system
+/sys/devices/virtual/optical_sensors/lightsensor ls_auto 0660 input system
+/sys/devices/virtual/optical_sensors/lightsensor ls_poll_delay 0660 input system
+/sys/devices/virtual/input/input* poll 0660 input system
+/sys/devices/virtual/input/input* pollrate_ms 0660 input system
+
+# vm_bms
+/dev/vm_bms 0660 system system
+/dev/battery_data 0660 system system
+
+# wlan
+/dev/wcnss_wlan 0660 system system
+/dev/wcnss_ctrl 0660 system system
+/sys/devices/soc.0/a000000.qcom,wcnss-wlan/net/wlan0/queues/rx-* rps_cpus 0660 system system
+/sys/devices/soc.0/a000000.qcom,wcnss-wlan/net/p2p0/queues/rx-* rps_cpus 0660 system system
+
+#nfc permissions
+/dev/nfc-nci 0660 nfc nfc
+/dev/assd 0660 nfc nfc
+
+# UIO devices
+/dev/uio0 0660 system system
+/dev/uio1 0660 system system
+/dev/uio2 0660 system system
+
+# SSR devices
+/dev/subsys_* 0640 system system
+
+#BST
+/sys/devices/virtual/input/input* range 0660 input system
+/sys/devices/virtual/input/input* bandwidth 0660 input system
+/sys/devices/virtual/input/input* op_mode 0660 input system
+/sys/devices/virtual/input/input* delay 0660 input system
+/sys/devices/virtual/input/input* SleepDur 0660 input system
+/sys/devices/virtual/input/input* fast_calibration_x 0660 input system
+/sys/devices/virtual/input/input* fast_calibration_y 0660 input system
+/sys/devices/virtual/input/input* fast_calibration_z 0660 input system
+/sys/devices/virtual/input/input* fifo_overrun 0660 input system
+/sys/devices/virtual/input/input* fifo_data_frame 0660 input system
+/sys/devices/virtual/input/input* fifo_mode 0660 input system
+/sys/devices/virtual/input/input* fifo_trig 0660 input system
+/sys/devices/virtual/input/input* fifo_framecount 0660 input system
+/sys/devices/virtual/input/input* fifo_data_sel 0660 input system
+/sys/devices/virtual/input/input* reg 0660 input system
+/sys/devices/virtual/input/input* offset_x 0660 input system
+/sys/devices/virtual/input/input* offset_y 0660 input system
+/sys/devices/virtual/input/input* offset_z 0660 input system
+/sys/devices/virtual/input/input* enable_int 0660 input system
+/sys/devices/virtual/input/input* int_mode 0660 input system
+/sys/devices/virtual/input/input* slope_duration 0660 input system
+/sys/devices/virtual/input/input* slope_threshold 0660 input system
+/sys/devices/virtual/input/input* slope_no_mot_duration 0660 input system
+/sys/devices/virtual/input/input* slope_no_mot_threshold 0660 input system
+/sys/devices/virtual/input/input* high_g_duration 0660 input system
+/sys/devices/virtual/input/input* high_g_threshold 0660 input system
+/sys/devices/virtual/input/input* low_g_duration 0660 input system
+/sys/devices/virtual/input/input* low_g_threshold 0660 input system
+/sys/devices/virtual/input/input* tap_duration 0660 input system
+/sys/devices/virtual/input/input* tap_threshold 0660 input system
+/sys/devices/virtual/input/input* tap_quiet 0660 input system
+/sys/devices/virtual/input/input* tap_shock 0660 input system
+/sys/devices/virtual/input/input* tap_samp 0660 input system
+/sys/devices/virtual/input/input* orient_mode 0660 input system
+/sys/devices/virtual/input/input* orient_blocking 0660 input system
+/sys/devices/virtual/input/input* orient_hyst 0660 input system
+/sys/devices/virtual/input/input* orient_theta 0660 input system
+/sys/devices/virtual/input/input* flat_theta 0660 input system
+/sys/devices/virtual/input/input* flat_hold_time 0660 input system
+/sys/devices/virtual/input/input* selftest 0660 input system
+/sys/devices/virtual/input/input* softreset 0660 input system
+/sys/devices/virtual/input/input* en_sig_motion 0660 input system
+/sys/devices/virtual/input/input* tap_time_period 0660 input system
+/sys/devices/virtual/input/input* en_double_tap 0660 input system
+
+/sys/devices/virtual/input/input* fastoffset_en 0660 input system
+/sys/devices/virtual/input/input* slowoffset_en 0660 input system
+/sys/devices/virtual/input/input* sleepdur 0660 input system
+/sys/devices/virtual/input/input* autosleepdur 0660 input system
+/sys/devices/virtual/input/input* fifo_tag 0660 input system
+/sys/devices/virtual/input/input* odr 0660 input system
+/sys/devices/virtual/input/input* rept_xy 0660 input system
+/sys/devices/virtual/input/input* rept_z 0660 input system
+/sys/devices/virtual/input/input* test 0660 input system
+
+/dev/block/platform/soc.0/7824900.sdhci/by-name/frp 0660 system system
+/dev/block/platform/soc.0/7824900.sdhci/by-name/config 0660 system system
diff --git a/sepolicy/bluetooth_loader.te b/sepolicy/bluetooth_loader.te
new file mode 100644
index 0000000..242f4a2
--- /dev/null
+++ b/sepolicy/bluetooth_loader.te
@@ -0,0 +1,31 @@
+# Bluetooth executables and scripts
+type bluetooth_loader, domain;
+type bluetooth_loader_exec, exec_type, file_type;
+
+# Start bdAddrLoader from init
+init_daemon_domain(bluetooth_loader)
+
+# Run init.qcom.bt.sh
+allow bluetooth_loader shell_exec:file { entrypoint read };
+allow bluetooth_loader bluetooth_loader_exec:file { getattr open execute_no_trans };
+
+# init.qcom.bt.sh needs /system/bin/log access
+allow bluetooth_loader devpts:chr_file rw_file_perms;
+
+# Run hci_qcomm_init from init.qcom.bt.sh
+domain_auto_trans(bluetooth_loader, hci_attach_exec, hci_attach)
+allow hci_attach bluetooth_loader:fd use;
+
+# Set persist.service.bdroid.* and bluetooth.* property values
+set_prop(bluetooth_loader, bluetooth_prop)
+
+# Allow getprop/setprop for init.qcom.bt.sh
+allow bluetooth_loader system_file:file execute_no_trans;
+
+# Access the smd device
+allow bluetooth_loader hci_attach_dev:chr_file rw_file_perms;
+
+# And qmuxd
+allow bluetooth_loader qmuxd_socket:dir { write add_name remove_name search };
+allow bluetooth_loader qmuxd_socket:sock_file { create setattr getattr write unlink };
+allow bluetooth_loader qmuxd:unix_stream_socket { connectto };
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
new file mode 100644
index 0000000..6ac26d6
--- /dev/null
+++ b/sepolicy/file_contexts
@@ -0,0 +1,7 @@
+/persist/.genmac u:object_r:wifi_data_file:s0
+/persist/.bt_nv.bin u:object_r:bluetooth_data_file:s0
+
+/system/etc/init\.qcom\.bt\.sh u:object_r:bluetooth_loader_exec:s0
+
+/dev/smd3 u:object_r:hci_attach_dev:s0
+/dev/mmc3416x u:object_r:sensors_device:s0
diff --git a/sepolicy/healthd.te b/sepolicy/healthd.te
new file mode 100644
index 0000000..f00e795
--- /dev/null
+++ b/sepolicy/healthd.te
@@ -0,0 +1 @@
+allow healthd rtc_device:chr_file rw_file_perms;
diff --git a/sepolicy/mm-qcamerad.te b/sepolicy/mm-qcamerad.te
new file mode 100644
index 0000000..936830c
--- /dev/null
+++ b/sepolicy/mm-qcamerad.te
@@ -0,0 +1,3 @@
+allow mm-qcamerad camera_data_file:dir r_dir_perms;
+allow mm-qcamerad mpctl_socket:dir search;
+unix_socket_connect(mm-qcamerad, mpctl, perfd)
diff --git a/sepolicy/property_contexts b/sepolicy/property_contexts
new file mode 100644
index 0000000..a0b78e9
--- /dev/null
+++ b/sepolicy/property_contexts
@@ -0,0 +1 @@
+qualcomm.bt. u:object_r:bluetooth_prop:s0
diff --git a/sepolicy/qseecomd.te b/sepolicy/qseecomd.te
new file mode 100644
index 0000000..891b48c
--- /dev/null
+++ b/sepolicy/qseecomd.te
@@ -0,0 +1 @@
+allow tee system_prop:property_service set;
diff --git a/sepolicy/surfaceflinger.te b/sepolicy/surfaceflinger.te
new file mode 100644
index 0000000..abd05d1
--- /dev/null
+++ b/sepolicy/surfaceflinger.te
@@ -0,0 +1,2 @@
+# secure display
+allow surfaceflinger persist_file:dir r_dir_perms;
diff --git a/sepolicy/wcnss_service.te b/sepolicy/wcnss_service.te
new file mode 100644
index 0000000..a4fe3c0
--- /dev/null
+++ b/sepolicy/wcnss_service.te
@@ -0,0 +1 @@
+allow wcnss_service persist_file:dir search;