Merge branch 'dey-2.2/master' into dey-2.2/maint
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
commit
594e7fbf55
10
README.md
10
README.md
|
|
@ -1,5 +1,5 @@
|
|||
# Digi Embedded Yocto (DEY) 2.2
|
||||
## Release 2.2-r1
|
||||
## Release 2.2-r2
|
||||
|
||||
This document provides information about Digi Embedded Yocto,
|
||||
Digi International's professional embedded Yocto development environment.
|
||||
|
|
@ -62,6 +62,14 @@ Documentation is available online on the Digi documentation site:
|
|||
|
||||
# Release Changelog
|
||||
|
||||
## 2.2-r2
|
||||
|
||||
* Digi Embedded Yocto
|
||||
* Support to connect to AWS IoT with AWS IoT Device SDK for embedded C.
|
||||
* Added support for Digi XBee Cellular 3G Global, with P/N XBC-M5-UT-001
|
||||
* Added support for U-Blox TOBY L-200/L-210
|
||||
* Added support for Quectel EC-25
|
||||
|
||||
## 2.2-r1
|
||||
|
||||
* Release based on [Yocto 2.2 (Morty)](https://www.yoctoproject.org/downloads/core/morty22) including:
|
||||
|
|
|
|||
|
|
@ -11,6 +11,15 @@ UBOOT_CONFIG ??= "ccimx6ulsbc1GB ccimx6ulsbc"
|
|||
UBOOT_CONFIG[ccimx6ulsbc1GB] = "ccimx6ulsbc1GB_defconfig"
|
||||
UBOOT_CONFIG[ccimx6ulsbc] = "ccimx6ulsbc_defconfig"
|
||||
|
||||
# U-Boot environment offset (within partition)
|
||||
UBOOT_ENV_OFFSET ?= "0x0"
|
||||
# U-Boot environment size
|
||||
UBOOT_ENV_SIZE ?= "0x20000"
|
||||
# U-Boot environment range: size (in hex) in the environment partition that
|
||||
# the U-Boot environment can take up (if undefined, it will take up all the
|
||||
# available space in the environment partition)
|
||||
UBOOT_ENV_RANGE ?= ""
|
||||
|
||||
KERNEL_DEVICETREE ?= " \
|
||||
imx6ul-ccimx6ulsbc.dtb \
|
||||
imx6ul-ccimx6ulsbc-wb.dtb \
|
||||
|
|
|
|||
|
|
@ -11,6 +11,15 @@ UBOOT_CONFIG ??= "ccimx6ulstarter1GB ccimx6ulstarter"
|
|||
UBOOT_CONFIG[ccimx6ulstarter1GB] = "ccimx6ulstarter1GB_defconfig"
|
||||
UBOOT_CONFIG[ccimx6ulstarter] = "ccimx6ulstarter_defconfig"
|
||||
|
||||
# U-Boot environment offset (within partition)
|
||||
UBOOT_ENV_OFFSET ?= "0x0"
|
||||
# U-Boot environment size
|
||||
UBOOT_ENV_SIZE ?= "0x20000"
|
||||
# U-Boot environment range: size (in hex) in the environment partition that
|
||||
# the U-Boot environment can take up (if undefined, it will take up all the
|
||||
# available space in the environment partition)
|
||||
UBOOT_ENV_RANGE ?= ""
|
||||
|
||||
KERNEL_DEVICETREE ?= " \
|
||||
imx6ul-ccimx6ulstarter.dtb \
|
||||
imx6ul-ccimx6ulstarter-wb.dtb \
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ MACHINE_EXTRA_RDEPENDS += " \
|
|||
u-boot-fw-utils \
|
||||
"
|
||||
MACHINE_EXTRA_RRECOMMENDS += "${MACHINE_FIRMWARE} ${WIRELESS_MODULE}"
|
||||
MACHINE_EXTRA_RRECOMMENDS += "imx-alsa-plugins cryptodev-module"
|
||||
MACHINE_EXTRA_RRECOMMENDS += "imx-alsa-plugins cryptodev-module cryptoauthlib"
|
||||
|
||||
MACHINE_FEATURES += "wifi bluetooth"
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
|
|||
# Platform Linux U-Boot
|
||||
# -------------------------------------------------
|
||||
# ccardimx28 3.10 2013.01
|
||||
# ccimx6 3.14 2015.04
|
||||
# ccimx6 4.1, 3.14 2015.04
|
||||
# ccimx6ul 4.1 2015.04
|
||||
#
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -14,7 +14,6 @@ FW_QCA6564-BT = " \
|
|||
|
||||
FW_QCA6564-WIFI = " \
|
||||
file://bdwlan30_US.bin \
|
||||
file://bdwlan30_World.bin \
|
||||
file://LICENCE.atheros_firmware \
|
||||
file://otp30.bin \
|
||||
file://qwlan30.bin \
|
||||
|
|
@ -42,7 +41,6 @@ do_install() {
|
|||
install -d ${D}${base_libdir}/firmware
|
||||
install -m 0644 \
|
||||
bdwlan30_US.bin \
|
||||
bdwlan30_World.bin \
|
||||
LICENCE.atheros_firmware \
|
||||
otp30.bin \
|
||||
qwlan30.bin \
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -1,373 +0,0 @@
|
|||
# This file allows user to override the factory
|
||||
|
||||
# defaults for the WLAN Driver
|
||||
|
||||
# Debug tracing bit values
|
||||
# VOS tracing requires a debug build - see BUILD_DEBUG_VERSION
|
||||
|
||||
# None = 0
|
||||
# Error
|
||||
# Warn
|
||||
# Info
|
||||
# Info high
|
||||
# Info med
|
||||
# Info low
|
||||
# Debug = 7
|
||||
|
||||
# Debug masks in decimal
|
||||
# Default debug is Error and Warn 0x06 (6)
|
||||
# All debug is 0xff (255)
|
||||
|
||||
#vosTraceEnableTL=6
|
||||
#vosTraceEnableWDI=6
|
||||
#vosTraceEnableHDD=6
|
||||
#vosTraceEnableSME=6
|
||||
#vosTraceEnablePE=6
|
||||
#vosTraceEnablePMC=6
|
||||
#vosTraceEnableWDA=6
|
||||
#vosTraceEnableSYS=6
|
||||
#vosTraceEnableVOSS=6
|
||||
#vosTraceEnableSAP=6
|
||||
#vosTraceEnableHDDSAP=6
|
||||
|
||||
# Enable/Disable Idle Scan
|
||||
|
||||
gEnableRxThread=1
|
||||
|
||||
|
||||
# Increase sleep duration (seconds) during IMPS
|
||||
# 0 implies no periodic wake up from IMPS. Periodic wakeup is
|
||||
# unnecessary if Idle Scan is disabled.
|
||||
gImpsModSleepTime=0
|
||||
|
||||
|
||||
# Enable suspend or not
|
||||
|
||||
# 1: Enable standby, 2: Enable Deep sleep, 3: Enable Mcast/Bcast Filter
|
||||
|
||||
gEnableSuspend=3
|
||||
|
||||
|
||||
# Phy Mode (auto, b, g, n, etc)
|
||||
# Valid values are 0-9, with 0 = Auto, 4 = 11n, 9 = 11ac
|
||||
# 1 = 11abg, 2 = 11b, 3 = 11g, 5 = 11g only, 6 = 11n only
|
||||
# 7 = 11b only 8 = 11ac only.
|
||||
gDot11Mode=0
|
||||
|
||||
# CSR Roaming Enable(1) Disable(0)
|
||||
|
||||
gRoamingTime=0
|
||||
|
||||
# Assigned MAC Addresses - This will be used until NV items are in place
|
||||
|
||||
# Each byte of MAC address is represented in Hex format as XX
|
||||
|
||||
Intf0MacAddress=000AF58989FF
|
||||
Intf1MacAddress=000AF58989FE
|
||||
Intf2MacAddress=000AF58989FD
|
||||
|
||||
Intf3MacAddress=000AF58989FC
|
||||
|
||||
|
||||
# UAPSD service interval for VO,VI, BE, BK traffic
|
||||
|
||||
InfraUapsdVoSrvIntv=0
|
||||
|
||||
InfraUapsdViSrvIntv=0
|
||||
|
||||
InfraUapsdBeSrvIntv=0
|
||||
|
||||
InfraUapsdBkSrvIntv=0
|
||||
|
||||
# Flag to allow STA send AddTspec even when ACM is Off
|
||||
gAddTSWhenACMIsOff=1
|
||||
|
||||
# Make 1x1 the default antenna configuration
|
||||
|
||||
gNumRxAnt=1
|
||||
|
||||
|
||||
# Beacon filtering frequency (unit in beacon intervals)
|
||||
|
||||
gNthBeaconFilter=50
|
||||
|
||||
|
||||
# Flags to filter Mcast abd Bcast RX packets.
|
||||
|
||||
# Value 0: No filtering, 1: Filter all Multicast.
|
||||
|
||||
# 2: Filter all Broadcast. 3: Filter all Mcast abd Bcast
|
||||
|
||||
McastBcastFilter=3
|
||||
|
||||
|
||||
#Flag to enable HostARPOffload feature or not
|
||||
|
||||
hostArpOffload=1
|
||||
|
||||
#Flag to enable HostNSOffload feature or not
|
||||
|
||||
hostNSOffload=1
|
||||
|
||||
#Enable OBSS protection
|
||||
|
||||
gEnableApOBSSProt=1
|
||||
|
||||
|
||||
# RTS threshold
|
||||
|
||||
RTSThreshold=1048576
|
||||
|
||||
|
||||
# DFS Master Capability
|
||||
gEnableDFSMasterCap=1
|
||||
|
||||
# fast transition
|
||||
ImplicitQosIsEnabled=0
|
||||
|
||||
gNeighborLookupThreshold=76
|
||||
|
||||
#Check if the AP to which we are roaming is better than current AP in terms of RSSI.
|
||||
#Checking is disabled if set to Zero.Otherwise it will use this value as to how better
|
||||
#the RSSI of the new/roamable AP should be for roaming
|
||||
RoamRssiDiff=3
|
||||
|
||||
# SAP auto channel selection configuration
|
||||
|
||||
# 0 = disable auto channel selection
|
||||
|
||||
# 1 = enable auto channel selection, channel provided by supplicant will be ignored
|
||||
|
||||
gApAutoChannelSelection=0
|
||||
|
||||
|
||||
# Listen Energy Detect Mode Configuration
|
||||
|
||||
# Valid values 0-128
|
||||
|
||||
# 128 means disable Energy Detect feature
|
||||
|
||||
# 0-9 are threshold code and 7 is recommended value from system if feature is to be enabled.
|
||||
|
||||
# 10-128 are reserved.
|
||||
|
||||
# The EDET threshold mapping is as follows in 3dB step:
|
||||
|
||||
# 0 = -60 dBm
|
||||
|
||||
# 1 = -63 dBm
|
||||
|
||||
# 2 = -66 dBm
|
||||
|
||||
# ...
|
||||
|
||||
# 7 = -81 dBm
|
||||
|
||||
# 8 = -84 dBm
|
||||
|
||||
# 9 = -87 dBm
|
||||
|
||||
# Note: Any of these settings are valid. Setting 0 would yield the highest power saving (in a noisy environment) at the cost of more range. The range impact is approximately #calculated as:
|
||||
|
||||
#
|
||||
|
||||
# Range Loss (dB) = EDET threshold level (dBm) + 97 dBm.
|
||||
|
||||
#
|
||||
|
||||
gEnablePhyAgcListenMode=128
|
||||
|
||||
|
||||
#SOFTAP Channel Range selection
|
||||
|
||||
gAPChannelSelectStartChannel=1
|
||||
|
||||
gAPChannelSelectEndChannel=11
|
||||
|
||||
|
||||
#SOFTAP Channel Range selection Operating band
|
||||
|
||||
# 0:2.4GHZ 1: LOW-5GHZ 2:MID-5GHZ 3:HIGH-5GHZ 4: 4.9HZ BAND
|
||||
|
||||
gAPChannelSelectOperatingBand=0
|
||||
|
||||
|
||||
#Channel Bonding
|
||||
gChannelBondingMode5GHz=1
|
||||
|
||||
|
||||
#Enable Keep alive with non-zero period value
|
||||
|
||||
gStaKeepAlivePeriod = 30
|
||||
|
||||
#Say gGoKeepAlivePeriod(5 seconds) and gGoLinkMonitorPeriod(10 seconds).
|
||||
#For every 10 seconds DUT send Qos Null frame(i.e., Keep Alive frame if link is idle for last 10 seconds.)
|
||||
#For both active and power save clients.
|
||||
|
||||
#Power save clients: DUT set TIM bit from 10th second onwards and till client honors TIM bit.
|
||||
#If doesn't honor for 5 seconds then DUT remove client.
|
||||
|
||||
#Active clients: DUT send Qos Null frame for 10th seconds onwards if it is not success still we try on
|
||||
#11th second if not tries on 12th and so on till 15th second. Hence before disconnection DUT will send 5 NULL frames.
|
||||
#Hence in any case DUT will detect client got removed in (10+5) seconds. i.e., (gGoKeepAlivePeriod + gGoLinkMonitorPeriod)..
|
||||
|
||||
#gGoLinkMonitorPeriod/ gApLinkMonitorPeriod is period where link is idle and it is period
|
||||
#where we send NULL frame.
|
||||
|
||||
#gApLinkMonitorPeriod = 10
|
||||
|
||||
#gGoLinkMonitorPeriod = 10
|
||||
|
||||
#gGoKeepAlivePeriod/gApKeepAlivePeriod is time to spend to check whether frame are succeed to send or not.
|
||||
#Hence total effective detection time is gGoLinkMonitorPeriod+ gGoKeepAlivePeriod/gApLinkMonitorPeriod+ gApKeepAlivePeriod.
|
||||
|
||||
|
||||
gGoKeepAlivePeriod = 20
|
||||
|
||||
gApKeepAlivePeriod = 20
|
||||
|
||||
|
||||
gEnableLogp=1
|
||||
|
||||
|
||||
# 0 for OLPC 1 for CLPC and SCPC
|
||||
gEnableCloseLoop=1
|
||||
|
||||
#Data Inactivity Timeout when in powersave (in ms)
|
||||
gDataInactivityTimeout=200
|
||||
|
||||
# VHT Tx/Rx MCS values
|
||||
# Valid values are 0,1,2. If commented out, the default value is 0.
|
||||
# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
|
||||
gVhtRxMCS=2
|
||||
gVhtTxMCS=0
|
||||
|
||||
# VHT Tx/Rx MCS values for 2x2
|
||||
# Valid values are 0,1,2. If commented out, the default value is 0.
|
||||
# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
|
||||
gEnable2x2=0
|
||||
gVhtRxMCS2x2=2
|
||||
gVhtTxMCS2x2=2
|
||||
|
||||
# Set txchainmask and rxchainmask
|
||||
# These parameters are used only if gEnable2x2 is 0
|
||||
# Valid values are 1,2
|
||||
# Set gSetTxChainmask1x1=1 or gSetRxChainmask1x1=1 to select chain0.
|
||||
# Set gSetTxChainmask1x1=2 or gSetRxChainmask1x1=2 to select chain1.
|
||||
gSetTxChainmask1x1=1
|
||||
gSetRxChainmask1x1=1
|
||||
|
||||
# 1=enable STBC; 0=disable STBC
|
||||
gEnableRXSTBC=1
|
||||
|
||||
# 1=enable tx STBC; 0=disable
|
||||
gEnableTXSTBC=1
|
||||
|
||||
# 1=enable rx LDPC; 0=disable
|
||||
gEnableRXLDPC=1
|
||||
|
||||
#Enable Scan Results Aging based on timer
|
||||
#Timer value is in seconds
|
||||
#If Set to 0 it will not enable the feature
|
||||
gScanAgingTime=0
|
||||
|
||||
#Enable Scan Results Aging based on number of scans
|
||||
gScanResultAgeCount=1
|
||||
|
||||
#Enable thermal mitigation
|
||||
gThermalMitigationEnable=0
|
||||
|
||||
#Thermal Mitigation Levels
|
||||
gThermalTempMinLevel0=0
|
||||
gThermalTempMaxLevel0=107
|
||||
gThermalTempMinLevel1=105
|
||||
gThermalTempMaxLevel1=117
|
||||
gThermalTempMinLevel2=110
|
||||
gThermalTempMaxLevel2=127
|
||||
gThermalTempMinLevel3=115
|
||||
gThermalTempMaxLevel3=0
|
||||
|
||||
#Maxium Channel time in msec
|
||||
gMaxMediumTime = 6000
|
||||
|
||||
# 802.11K support
|
||||
gRrmEnable=1
|
||||
gRrmOperChanMax=8
|
||||
gRrmNonOperChanMax=8
|
||||
|
||||
#Scan offload
|
||||
gEnableDirectedScanOffload=1
|
||||
|
||||
#Enable Power Save offload
|
||||
gEnablePowerSaveOffload=1
|
||||
|
||||
#Enable firmware log
|
||||
gEnablefwlog=1
|
||||
|
||||
#P2P Listen offload
|
||||
gEnableP2pListenOffload=1
|
||||
|
||||
# Maximum Receive AMPDU size (VHT only. Valid values: 0->8k 1->16k 2->32k 3->64k 4->128k)
|
||||
gVhtAmpduLenExponent=7
|
||||
|
||||
# Maximum MPDU length (VHT only. Valid values: 0->3895 octets, 1->7991 octets, 2->11454 octets)
|
||||
gVhtMpduLen=2
|
||||
|
||||
# Maximum number of wow filters required
|
||||
#gMaxWoWFilters=22
|
||||
|
||||
# WOW Enable/Disable.
|
||||
# 0 - Disable both magic pattern match and pattern byte match.
|
||||
# 1 - Enable magic pattern match on all interfaces.
|
||||
# 2 - Enable pattern byte match on all interfaces.
|
||||
# 3 - Enable both magic patter and pattern byte match on all interfaces.
|
||||
# Default value of gEnableWoW is 3.
|
||||
# gEnableWoW=0
|
||||
|
||||
#Enable or Disable p2p device address administered
|
||||
isP2pDeviceAddrAdministrated=0
|
||||
|
||||
# Set Thermal Power limit
|
||||
TxPower2g=10
|
||||
TxPower5g=10
|
||||
|
||||
#Enable VHT on 2.4Ghz
|
||||
gEnableVhtFor24GHzBand=1
|
||||
|
||||
#Enable or Disable 5G early beacon termination
|
||||
gEnable5gEBT=1
|
||||
|
||||
ssdp = 0
|
||||
|
||||
#Enable Hysteretic mode
|
||||
gEnableHystereticMode=1
|
||||
|
||||
# Bus bandwidth compute timeout value in ms
|
||||
gBusBandwidthComputeInterval=2000
|
||||
|
||||
# Regulatory Setting; 0=STRICT; 1=CUSTOM
|
||||
gRegulatoryChangeCountry=1
|
||||
|
||||
# Enable/Disable RX full reorder offload
|
||||
gReorderOffloadSupported=1
|
||||
|
||||
#Set SAP max peer to 16 which allows 10 WEP connection
|
||||
gSoftApMaxPeers=16
|
||||
|
||||
# Whether userspace country code setting shld have priority
|
||||
gCountryCodePriority=1
|
||||
|
||||
# Enable(1)/Disable(0) SIFS burst
|
||||
gEnableSifsBurst=1
|
||||
|
||||
# Enable or Disable Multi-user MIMO
|
||||
# 1=Enable (default), 0=Disable
|
||||
gEnableMuBformee=1
|
||||
|
||||
# Inactivity time (in ms) to end TX Service Period while in IBSS power save mode
|
||||
gIbssTxSpEndInactivityTime=10
|
||||
|
||||
END
|
||||
|
||||
# Note: Configuration parser would not read anything past the END marker
|
||||
|
||||
|
|
@ -39,6 +39,8 @@ else
|
|||
setenv fdt_file uImage-imx6q-ccimx6sbc-wb.dtb
|
||||
elif test "${module_variant}" = "0x13"; then
|
||||
setenv fdt_file uImage-imx6dl-ccimx6sbc-wb.dtb
|
||||
elif test "${module_variant}" = "0x14"; then
|
||||
setenv fdt_file uImage-imx6q-ccimx6sbc.dtb
|
||||
else
|
||||
echo "------ Using default fdt_file"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ fi
|
|||
if test -n "${module_variant}"; then
|
||||
if test "${module_variant}" = "0x12"; then
|
||||
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc2GB.imx;
|
||||
elif test "${module_variant}" = "0x02" || test "${module_variant}" = "0x04" || test "${module_variant}" = "0x05" || test "${module_variant}" = "0x11"; then
|
||||
elif test "${module_variant}" = "0x02" || test "${module_variant}" = "0x04" || test "${module_variant}" = "0x05" || test "${module_variant}" = "0x11" || test "${module_variant}" = "0x14"; then
|
||||
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc.imx;
|
||||
elif test "${module_variant}" = "0x03" || test "${module_variant}" = "0x0e" || test "${module_variant}" = "0x0f"; then
|
||||
setenv INSTALL_UBOOT_FILENAME u-boot-ccimx6qsbc512MB.imx;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,68 @@
|
|||
From: Hector Palacios <hector.palacios@digi.com>
|
||||
Date: Mon, 29 May 2017 11:41:23 +0200
|
||||
Subject: [PATCH 1/2] tools: env: factorize function to get device type
|
||||
|
||||
This function may be reused to determine the device type in other helper
|
||||
functions.
|
||||
|
||||
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
|
||||
|
||||
https://jira.digi.com/browse/DUB-741
|
||||
---
|
||||
tools/env/fw_env.c | 20 +++++++++++++++-----
|
||||
1 file changed, 15 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
|
||||
index 1c337b4727a9..08ba0fd1111f 100644
|
||||
--- a/tools/env/fw_env.c
|
||||
+++ b/tools/env/fw_env.c
|
||||
@@ -1134,7 +1134,7 @@ static int flash_write (int fd_current, int fd_target, int dev_target)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int flash_read (int fd)
|
||||
+static int get_type(int dev, int fd)
|
||||
{
|
||||
struct mtd_info_user mtdinfo;
|
||||
struct stat st;
|
||||
@@ -1151,7 +1151,7 @@ static int flash_read (int fd)
|
||||
rc = ioctl(fd, MEMGETINFO, &mtdinfo);
|
||||
if (rc < 0) {
|
||||
fprintf(stderr, "Cannot get MTD information for %s\n",
|
||||
- DEVNAME(dev_current));
|
||||
+ DEVNAME(dev));
|
||||
return -1;
|
||||
}
|
||||
if (mtdinfo.type != MTD_NORFLASH &&
|
||||
@@ -1159,7 +1159,7 @@ static int flash_read (int fd)
|
||||
mtdinfo.type != MTD_DATAFLASH &&
|
||||
mtdinfo.type != MTD_UBIVOLUME) {
|
||||
fprintf (stderr, "Unsupported flash type %u on %s\n",
|
||||
- mtdinfo.type, DEVNAME(dev_current));
|
||||
+ mtdinfo.type, DEVNAME(dev));
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
@@ -1167,10 +1167,20 @@ static int flash_read (int fd)
|
||||
mtdinfo.type = MTD_ABSENT;
|
||||
}
|
||||
|
||||
- DEVTYPE(dev_current) = mtdinfo.type;
|
||||
+ DEVTYPE(dev) = mtdinfo.type;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int flash_read (int fd)
|
||||
+{
|
||||
+ int rc;
|
||||
+
|
||||
+ rc = get_type(dev_current, fd);
|
||||
+ if (rc < 0)
|
||||
+ return -1;
|
||||
|
||||
rc = flash_read_buf(dev_current, fd, environment.image, CUR_ENVSIZE,
|
||||
- DEVOFFSET (dev_current), mtdinfo.type);
|
||||
+ DEVOFFSET(dev_current), DEVTYPE(dev_current));
|
||||
if (rc != CUR_ENVSIZE)
|
||||
return -1;
|
||||
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
From: Hector Palacios <hector.palacios@digi.com>
|
||||
Date: Mon, 29 May 2017 12:10:10 +0200
|
||||
Subject: [PATCH 2/2] tools: env: add support to set dynamic location of
|
||||
environment copies
|
||||
|
||||
A mechanism was added in U-Boot to set the location of environment copies
|
||||
dynamically in an shared area. If the config file sets both copies to the
|
||||
same offset, a function will be called to set the offset of each copy to
|
||||
the first two good NAND sectors within the specified area.
|
||||
|
||||
The config file should contain the sector size and the number of sectors
|
||||
of the area, like in this example:
|
||||
|
||||
# Device name Offset Size Erase-size No.Blocks
|
||||
/dev/mtd1 0x0 0x20000 0x20000 8
|
||||
/dev/mtd1 0x0 0x20000 0x20000 8
|
||||
|
||||
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
|
||||
|
||||
https://jira.digi.com/browse/DUB-741
|
||||
---
|
||||
tools/env/fw_env.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 96 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
|
||||
index 08ba0fd1111f..c1a4d89f62c0 100644
|
||||
--- a/tools/env/fw_env.c
|
||||
+++ b/tools/env/fw_env.c
|
||||
@@ -122,6 +122,8 @@ static int env_aes_cbc_crypt(char *data, const int enc);
|
||||
static int caam_encryption_flag;
|
||||
|
||||
static int HaveRedundEnv = 0;
|
||||
+static int have_dynamic_env;
|
||||
+static off_t top_of_range; /* end of the last block we may use */
|
||||
|
||||
static unsigned char active_flag = 1;
|
||||
/* obsolete_flag must be 0 to efficiently set it on NOR flash without erasing */
|
||||
@@ -790,7 +792,6 @@ static int flash_read_buf (int dev, int fd, void *buf, size_t count,
|
||||
0 on NOR */
|
||||
size_t processed = 0; /* progress counter */
|
||||
size_t readlen = count; /* current read length */
|
||||
- off_t top_of_range; /* end of the last block we may use */
|
||||
off_t block_seek; /* offset inside the current block to the start
|
||||
of the data */
|
||||
loff_t blockstart; /* running start of the current block -
|
||||
@@ -809,12 +810,22 @@ static int flash_read_buf (int dev, int fd, void *buf, size_t count,
|
||||
*/
|
||||
blocklen = DEVESIZE (dev);
|
||||
|
||||
- /*
|
||||
- * To calculate the top of the range, we have to use the
|
||||
- * global DEVOFFSET (dev), which can be different from offset
|
||||
- */
|
||||
- top_of_range = ((DEVOFFSET(dev) / blocklen) +
|
||||
- ENVSECTORS (dev)) * blocklen;
|
||||
+ if (!have_dynamic_env) {
|
||||
+ /*
|
||||
+ * To calculate the top of the range, we have to use the
|
||||
+ * global DEVOFFSET (dev), which can be different from
|
||||
+ * offset
|
||||
+ */
|
||||
+ top_of_range = ((DEVOFFSET(dev) / blocklen) +
|
||||
+ ENVSECTORS(dev)) * blocklen;
|
||||
+ }
|
||||
+
|
||||
+ if (offset >= top_of_range) {
|
||||
+ /* End of range is reached */
|
||||
+ fprintf(stderr,
|
||||
+ "Too few good blocks within range\n");
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
/* Limit to one block for the first read */
|
||||
if (readlen > blocklen - block_seek)
|
||||
@@ -1208,6 +1219,72 @@ static int sysfs_mmcboot_set_protection(const char *device, int value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int set_dynamic_location(void)
|
||||
+{
|
||||
+ int fd, i, nsectors, type;
|
||||
+ loff_t offset, blocksize;
|
||||
+ int dev = 0;
|
||||
+ int copies = 1;
|
||||
+ int rc = 0;
|
||||
+
|
||||
+ if (HaveRedundEnv)
|
||||
+ copies++;
|
||||
+
|
||||
+ fd = open(DEVNAME(dev), O_RDONLY);
|
||||
+ if (fd < 0) {
|
||||
+ fprintf(stderr, "Can't open %s: %s\n", DEVNAME(dev),
|
||||
+ strerror(errno));
|
||||
+ rc = -1;
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ rc = get_type(dev, fd);
|
||||
+ if (rc < 0) {
|
||||
+ fprintf(stderr, "could not get type\n", DEVNAME(dev),
|
||||
+ strerror(errno));
|
||||
+ rc = -1;
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ /* Set initial block to start looking for environment */
|
||||
+ offset = DEVOFFSET(dev);
|
||||
+ /* Use variables for common values */
|
||||
+ blocksize = DEVESIZE(dev);
|
||||
+ type = DEVTYPE(dev);
|
||||
+ /* Look for the number of sectors specified for the primary copy */
|
||||
+ nsectors = ENVSECTORS(dev);
|
||||
+
|
||||
+ for (i = 0; i < nsectors && copies; i++) {
|
||||
+ rc = flash_bad_block(fd, type, &offset);
|
||||
+ if (rc < 0) {
|
||||
+ rc = -1;
|
||||
+ goto error;
|
||||
+ } else if (!rc) {
|
||||
+ /*
|
||||
+ * Set first good block as primary (no matter if it is
|
||||
+ * the other copy. After all, the 'current' copy is
|
||||
+ * determined by the active flag.
|
||||
+ */
|
||||
+ DEVOFFSET(dev) = offset;
|
||||
+ copies--;
|
||||
+ dev++;
|
||||
+ }
|
||||
+ offset += blocksize;
|
||||
+ }
|
||||
+
|
||||
+ while (copies) {
|
||||
+ /* No good sectors available. Set offset out of bounds */
|
||||
+ DEVOFFSET(dev) = offset;
|
||||
+ copies--;
|
||||
+ dev++;
|
||||
+ }
|
||||
+ rc = 0;
|
||||
+
|
||||
+error:
|
||||
+ close(fd);
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
static int flash_io (int mode)
|
||||
{
|
||||
int fd_current, fd_target, rc, dev_target;
|
||||
@@ -1341,6 +1418,18 @@ int fw_env_open(void)
|
||||
environment.data = single->data;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * Trigger dynamic location of environment if redundant copy has the
|
||||
+ * same offset than primary copy.
|
||||
+ */
|
||||
+ if (HaveRedundEnv && (DEVOFFSET(0) == DEVOFFSET(1))) {
|
||||
+ have_dynamic_env = 1;
|
||||
+ top_of_range = DEVOFFSET(0) + (ENVSECTORS(0) * DEVESIZE(0));
|
||||
+
|
||||
+ if (set_dynamic_location() < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
dev_current = 0;
|
||||
if (flash_io (O_RDONLY))
|
||||
return -1;
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
# Configuration file for fw_(printenv/setenv) utility.
|
||||
# Up to two entries are valid, in this case the redundant
|
||||
# environment sector is assumed present.
|
||||
# If both copies are set to the same offset, an automatic mechanism will
|
||||
# determine the first good sectors where each copy lives, skipping bad blocks.
|
||||
|
||||
# Device name Offset Size
|
||||
/dev/mtd1 0x0 0x20000
|
||||
/dev/mtd1 0x20000 0x20000
|
||||
# Device name Offset Size Erase-size No.Blocks
|
||||
/dev/##MTDINDEX## ##ENV_OFFSET## ##ENV_SIZE## ##ERASEBLOCK## ##NBLOCKS##
|
||||
/dev/##MTDINDEX## ##ENV_REDUND_OFFSET## ##ENV_SIZE## ##ERASEBLOCK## ##NBLOCKS##
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ UBOOT_FW_UTILS_PATCHES = " \
|
|||
file://0001-tools-env-implement-support-for-environment-encrypti.patch \
|
||||
file://0002-Implement-U-Boot-environment-access-functions.patch \
|
||||
file://0003-fw_env-add-support-to-unlock-emmc-boot-partition.patch \
|
||||
file://0004-tools-env-factorize-function-to-get-device-type.patch \
|
||||
file://0005-tools-env-add-support-to-set-dynamic-location-of-env.patch \
|
||||
"
|
||||
|
||||
# Patches from 'meta-swupdate' touch the same files than ours, so we need to
|
||||
|
|
@ -39,9 +41,50 @@ pkg_postinst_${PN}() {
|
|||
if [ x"$D" != "x" ]; then
|
||||
exit 1
|
||||
fi
|
||||
CONFIG_FILE="/etc/fw_env.config"
|
||||
MMCDEV="$(sed -ne 's,.*root=/dev/mmcblk\([0-9]\)p.*,\1,g;T;p' /proc/cmdline)"
|
||||
if [ -n "${MMCDEV}" ]; then
|
||||
sed -i -e "s,^/dev/mmcblk[^[:blank:]]\+,/dev/mmcblk${MMCDEV},g" /etc/fw_env.config
|
||||
sed -i -e "s,^/dev/mmcblk[^[:blank:]]\+,/dev/mmcblk${MMCDEV},g" ${CONFIG_FILE}
|
||||
fi
|
||||
|
||||
PARTTABLE="/proc/mtd"
|
||||
MTDINDEX="$(sed -ne "s/\(^mtd[0-9]\+\):.*\<environment\>.*/\1/g;T;p" ${PARTTABLE} 2>/dev/null)"
|
||||
if [ -n "${MTDINDEX}" ]; then
|
||||
# Initialize variables for fixed offset values
|
||||
# (backwards compatible with old U-Boot)
|
||||
ENV_OFFSET="${UBOOT_ENV_OFFSET}"
|
||||
ENV_REDUND_OFFSET="${UBOOT_ENV_SIZE}"
|
||||
ENV_SIZE="${UBOOT_ENV_SIZE}"
|
||||
ERASEBLOCK=""
|
||||
NBLOCKS=""
|
||||
|
||||
if [ -f "/proc/device-tree/digi,uboot,dynamic-env" ]; then
|
||||
# Update variables for dynamic environment
|
||||
# - Both copies starting at the same offset
|
||||
ENV_REDUND_OFFSET="${UBOOT_ENV_OFFSET}"
|
||||
# - Calculated erase block size
|
||||
ERASEBLOCK="$(grep "^${MTDINDEX}" ${PARTTABLE} | awk '{printf("0x%d",$3)}')"
|
||||
# - Calculated number of blocks
|
||||
MTDSIZE="$(grep "^${MTDINDEX}" ${PARTTABLE} | awk '{printf("0x%d",$2)}')"
|
||||
NBLOCKS="$(((MTDSIZE - UBOOT_ENV_OFFSET) / ERASEBLOCK))"
|
||||
# If a range was provided, calculate the number of
|
||||
# blocks in the range and use that number, unless they
|
||||
# exceed the total number of blocks available in the
|
||||
# whole partition.
|
||||
if [ -n "${UBOOT_ENV_RANGE}" ]; then
|
||||
RANGE_BLOCKS="$((UBOOT_ENV_RANGE / ERASEBLOCK))"
|
||||
[ "${RANGE_BLOCKS}" -lt "${NBLOCKS}" ] && NBLOCKS="${RANGE_BLOCKS}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Substitute stub with configuration and calculated values
|
||||
sed -i -e "s/##MTDINDEX##/${MTDINDEX}/g" \
|
||||
-e "s/##ENV_OFFSET##/${ENV_OFFSET}/g" \
|
||||
-e "s/##ENV_REDUND_OFFSET##/${ENV_REDUND_OFFSET}/g" \
|
||||
-e "s/##ENV_SIZE##/${ENV_SIZE}/g" \
|
||||
-e "s/##ERASEBLOCK##/${ERASEBLOCK}/g" \
|
||||
-e "s/##NBLOCKS##/${NBLOCKS}/g" \
|
||||
${CONFIG_FILE}
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ LICENSE = "CLOSED"
|
|||
PKGNAME = "mca_tool"
|
||||
SRC_URI = "${DIGI_PKG_SRC}/${PKGNAME}-${PV}.tar.gz"
|
||||
|
||||
SRC_URI[md5sum] = "20992b6b30904ee4d75d196c957077e0"
|
||||
SRC_URI[sha256sum] = "49458475dd5df11f0c4f4593ffc930fbcdaa457120f73ab18587d711eb9036f6"
|
||||
SRC_URI[md5sum] = "f44b2547333b2900477a8b89b58d08a1"
|
||||
SRC_URI[sha256sum] = "9659f591438955eab27fda7092fe4ba1d6874c276a4bc6d70689f91dc4bdccd8"
|
||||
|
||||
S = "${WORKDIR}/${PKGNAME}-${PV}"
|
||||
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Copyright (C) 2013 Digi International.
|
||||
|
||||
SUMMARY = "Example GPIO kernel module."
|
||||
LICENSE = "GPLv2"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
|
||||
|
||||
inherit module
|
||||
|
||||
PV = "2.1"
|
||||
|
||||
SRC_URI = "\
|
||||
file://COPYING \
|
||||
file://gpio.c \
|
||||
file://gpio.h \
|
||||
file://Makefile \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
|
@ -1,340 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
obj-m := gpio.o
|
||||
|
||||
SRC := $(shell pwd)
|
||||
|
||||
all:
|
||||
$(MAKE) -C $(KERNEL_SRC) M=$(SRC)
|
||||
|
||||
modules_install:
|
||||
$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install
|
||||
|
||||
clean:
|
||||
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
|
||||
rm -f Module.markers Module.symvers modules.order
|
||||
rm -rf .tmp_versions Modules.symvers
|
||||
|
|
@ -1,350 +0,0 @@
|
|||
/*
|
||||
* gpio.c
|
||||
*
|
||||
* Copyright (C)2006-2008 by Digi International Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cdev.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <asm/gpio.h>
|
||||
|
||||
#include "gpio.h"
|
||||
|
||||
#define DRIVER_VERSION "2.1"
|
||||
#define DRIVER_NAME "gpio"
|
||||
|
||||
static int gpio_major = 240; /* set to 0 for dynamic allocation */
|
||||
static int gpio_minor = 0;
|
||||
static int gpio_nr_devs;
|
||||
static struct gpio_dev *gpio_device = NULL;
|
||||
|
||||
static int gpio_ioctl(struct inode *inode, struct file *file,
|
||||
unsigned int cmd, unsigned long arg );
|
||||
static unsigned int gpio_poll(struct file *file, poll_table *wait );
|
||||
static ssize_t gpio_write(struct file * file, const char * buf,
|
||||
size_t count, loff_t * ppos );
|
||||
static ssize_t gpio_read(struct file * file, char * buf,
|
||||
size_t count, loff_t * ppos );
|
||||
static int gpio_open(struct inode * inode, struct file * file );
|
||||
static int gpio_release_close(struct inode * inode, struct file * file );
|
||||
|
||||
static struct file_operations gpio_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = gpio_read,
|
||||
.write = gpio_write,
|
||||
.ioctl = gpio_ioctl,
|
||||
.poll = gpio_poll,
|
||||
.open = gpio_open,
|
||||
.release = gpio_release_close,
|
||||
};
|
||||
|
||||
struct gpio_conf {
|
||||
int dev_id; /* minor */
|
||||
int irqnum; /* irq number assigned */
|
||||
|
||||
/* needed for irq-waiting */
|
||||
wait_queue_head_t wait_q;
|
||||
int triggered;
|
||||
};
|
||||
|
||||
struct gpio_dev {
|
||||
struct cdev cdev;
|
||||
struct gpio_conf *gpio;
|
||||
};
|
||||
|
||||
static irqreturn_t gpio_irq_handler(int irq, void *dev_id)
|
||||
{
|
||||
struct gpio_conf *gpio = dev_id;
|
||||
|
||||
/* awake those processes waiting... */
|
||||
gpio->triggered = 1;
|
||||
wake_up_interruptible(&gpio->wait_q);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int gpio_ioctl(struct inode *inode,
|
||||
struct file *file,
|
||||
unsigned int cmd,
|
||||
unsigned long arg )
|
||||
{
|
||||
struct gpio_conf *gpio = (struct gpio_conf *)file->private_data;
|
||||
unsigned long irqflags = 0;
|
||||
int gpionum = MINOR(inode->i_rdev);
|
||||
char __user *argp = (char __user *)arg;
|
||||
int retval = 0, irqnum;
|
||||
|
||||
if(_IOC_TYPE(cmd)!= GPIO_IOCTL_BASE )return -ENOTTY;
|
||||
if(_IOC_NR(cmd)> GPIO_IOCTL_MAXNR )return -ENOTTY;
|
||||
|
||||
if (gpionum != gpio->dev_id)
|
||||
return -EINVAL;
|
||||
|
||||
switch(cmd ){
|
||||
case GPIO_CONFIG_AS_INP: /* config as input */
|
||||
if(gpio->irqnum >= 0 ){
|
||||
free_irq(gpio->irqnum, gpio );
|
||||
gpio->irqnum = -1;
|
||||
}
|
||||
retval = gpio_direction_input((unsigned int)gpionum);
|
||||
break;
|
||||
|
||||
case GPIO_CONFIG_AS_OUT: /* config as output */
|
||||
if(gpio->irqnum >= 0 ){
|
||||
free_irq(gpio->irqnum, gpio );
|
||||
gpio->irqnum = -1;
|
||||
}
|
||||
retval = gpio_direction_output((unsigned int)gpionum,
|
||||
gpio_get_value((unsigned int)gpionum));
|
||||
break;
|
||||
|
||||
case GPIO_READ_PIN_VAL: /* read value of the selected pin */
|
||||
retval = gpio_get_value((unsigned int)gpionum);
|
||||
gpio->triggered = 0;
|
||||
if (copy_to_user(argp, &retval, sizeof(int)))
|
||||
return -EINVAL;
|
||||
break;
|
||||
|
||||
case GPIO_WRITE_PIN_VAL: /* write value to the selected pin */
|
||||
gpio_set_value((unsigned int)gpionum, *argp);
|
||||
break;
|
||||
|
||||
case GPIO_CONFIG_AS_IRQ: /* Configure this pin as external interrupt line */
|
||||
if(gpio->irqnum >= 0 )
|
||||
break;
|
||||
retval = gpio_direction_input((unsigned int)gpionum);
|
||||
irqnum = gpio_to_irq(gpionum);
|
||||
if (irqnum >= 0){
|
||||
gpio->irqnum = irqnum;
|
||||
|
||||
init_waitqueue_head(&gpio->wait_q );
|
||||
gpio->triggered = 0;
|
||||
|
||||
switch( (ext_irq_type_t)*argp ) {
|
||||
case IRQ_HIGH:
|
||||
irqflags = IRQ_TYPE_LEVEL_HIGH;
|
||||
break;
|
||||
case IRQ_LOW:
|
||||
irqflags = IRQ_TYPE_LEVEL_LOW;
|
||||
break;
|
||||
case IRQ_RISING:
|
||||
irqflags = IRQ_TYPE_EDGE_RISING;
|
||||
break;
|
||||
case IRQ_FALLING:
|
||||
irqflags = IRQ_TYPE_EDGE_FALLING;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if((retval = request_irq(gpio->irqnum, gpio_irq_handler,
|
||||
irqflags, DRIVER_NAME, gpio ))!= 0 ){
|
||||
printk(KERN_ERR "Unable to request irq %d, ret %d\n", gpio->irqnum, retval );
|
||||
gpio->irqnum = -1;
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
break;
|
||||
#if defined(CONFIG_MACH_CC9M2443JS) || defined(CONFIG_MACH_CCW9M2443JS)
|
||||
case GPIO_CONFIG_PULLUPDOWN: /* Configure this pin pull up/down */
|
||||
gpio_set_pullupdown((unsigned int)gpionum, (int)arg);
|
||||
break;
|
||||
#endif
|
||||
default: return -ENOTTY;
|
||||
} /* switch(cmd )*/
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static unsigned int gpio_poll(struct file *file, poll_table *wait )
|
||||
{
|
||||
unsigned int ret = 0;
|
||||
struct gpio_conf *gpio = (struct gpio_conf *)file->private_data;
|
||||
|
||||
poll_wait(file, &gpio->wait_q, wait);
|
||||
|
||||
if (file->f_mode & FMODE_WRITE)
|
||||
ret |= POLLOUT | POLLWRNORM;
|
||||
if (gpio->triggered)
|
||||
ret |= POLLOUT | POLLRDNORM;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t gpio_write(struct file * file, const char * buf, size_t count,
|
||||
loff_t * ppos)
|
||||
{
|
||||
struct gpio_conf *gpio = (struct gpio_conf *)file->private_data;
|
||||
int gpionum = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
char outval;
|
||||
|
||||
if ((gpionum != gpio->dev_id)|| (count != sizeof(char)))
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(&outval, buf, sizeof(char)))
|
||||
return -EFAULT;
|
||||
|
||||
gpio_set_value(gpionum, (unsigned int)outval);
|
||||
|
||||
return sizeof(char);
|
||||
}
|
||||
|
||||
static ssize_t gpio_read(struct file * file, char * buf, size_t count,
|
||||
loff_t * ppos)
|
||||
{
|
||||
struct gpio_conf *gpio = (struct gpio_conf *)file->private_data;
|
||||
int gpionum = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int ret;
|
||||
|
||||
if ((gpionum != gpio->dev_id)|| (count != sizeof(char)))
|
||||
return -EINVAL;
|
||||
|
||||
/* Check if configured for interrupt operation... */
|
||||
if (gpio->irqnum >= 0){
|
||||
/* Wait for data */
|
||||
if (!(file->f_flags & O_NONBLOCK)){
|
||||
wait_event_interruptible(gpio->wait_q, gpio->triggered != 0);
|
||||
if (signal_pending(current))
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
gpio->triggered = 0;
|
||||
}
|
||||
|
||||
ret = gpio_get_value((unsigned int)gpionum);
|
||||
|
||||
if (copy_to_user(buf, (char *)&ret, sizeof(char)))
|
||||
return -EFAULT;
|
||||
|
||||
return sizeof(char);
|
||||
}
|
||||
|
||||
static int gpio_open(struct inode * inode, struct file * file)
|
||||
{
|
||||
int gpionum = MINOR(inode->i_rdev);
|
||||
int ret;
|
||||
struct gpio_dev *dev =
|
||||
container_of(inode->i_cdev, struct gpio_dev, cdev);
|
||||
|
||||
if (gpionum != dev->gpio[gpionum].dev_id)
|
||||
return -EINVAL;
|
||||
|
||||
ret = gpio_request(gpionum, DRIVER_NAME);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
file->private_data = &dev->gpio[gpionum];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gpio_release_close(struct inode * inode, struct file * file)
|
||||
{
|
||||
struct gpio_conf *gpio = (struct gpio_conf *)file->private_data;
|
||||
int gpionum = MINOR(inode->i_rdev);
|
||||
|
||||
if (gpionum != gpio->dev_id)
|
||||
return -EINVAL;
|
||||
|
||||
if (gpio->irqnum >= 0){
|
||||
free_irq(gpio->irqnum, gpio);
|
||||
gpio->irqnum = -1;
|
||||
}
|
||||
|
||||
gpio_free(gpionum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void gpio_exit(void)
|
||||
{
|
||||
int i;
|
||||
dev_t devno = MKDEV(gpio_major, gpio_minor);
|
||||
|
||||
if (gpio_device){
|
||||
for (i = 0; i < gpio_nr_devs; i++){
|
||||
if (gpio_device->gpio[i].irqnum != -1)
|
||||
free_irq(gpio_device->gpio[i].irqnum,
|
||||
&gpio_device->gpio[i]);
|
||||
cdev_del(&gpio_device->cdev);
|
||||
}
|
||||
kfree(gpio_device);
|
||||
}
|
||||
unregister_chrdev_region(devno, gpio_nr_devs);
|
||||
}
|
||||
|
||||
static int gpio_init(void)
|
||||
{
|
||||
int ret, i;
|
||||
dev_t dev;
|
||||
|
||||
gpio_nr_devs = 256;
|
||||
|
||||
if (gpio_major){
|
||||
dev = MKDEV(gpio_major, gpio_minor);
|
||||
ret = register_chrdev_region(dev, gpio_nr_devs, DRIVER_NAME);
|
||||
} else {
|
||||
ret = alloc_chrdev_region(&dev, gpio_minor,
|
||||
gpio_nr_devs, DRIVER_NAME);
|
||||
gpio_major = MAJOR(dev);
|
||||
}
|
||||
|
||||
if (ret < 0){
|
||||
pr_err(DRIVER_NAME ": major %d already in use \n", gpio_major);
|
||||
return ret;
|
||||
}
|
||||
|
||||
gpio_device = kzalloc(sizeof(*gpio_device), GFP_KERNEL);
|
||||
if (!gpio_device){
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
gpio_device->gpio =
|
||||
kzalloc(sizeof(*gpio_device->gpio)* gpio_nr_devs, GFP_KERNEL);
|
||||
if (!gpio_device->gpio){
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
cdev_init(&gpio_device->cdev, &gpio_fops);
|
||||
gpio_device->cdev.owner = THIS_MODULE;
|
||||
gpio_device->cdev.ops = &gpio_fops;
|
||||
if (cdev_add(&gpio_device->cdev, dev, gpio_nr_devs)){
|
||||
pr_err(DRIVER_NAME ": Error adding cdev\n");
|
||||
ret = -ENODEV;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (i = 0; i < gpio_nr_devs; i++){
|
||||
gpio_device->gpio[i].dev_id = i;
|
||||
gpio_device->gpio[i].irqnum = -1;
|
||||
}
|
||||
|
||||
pr_info(DRIVER_NAME ": GPIO driver v%s\n", DRIVER_VERSION);
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
gpio_exit();
|
||||
return ret;
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Digi International Inc.");
|
||||
MODULE_DESCRIPTION("GPIO driver for the user space");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
module_init(gpio_init);
|
||||
module_exit(gpio_exit);
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
/*
|
||||
* gpio.h
|
||||
*
|
||||
* Copyright (C) 2006 by Digi International Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __DIGI_GPIO_H_
|
||||
#define __DIGI_GPIO_H_
|
||||
|
||||
typedef enum {
|
||||
IRQ_HIGH,
|
||||
IRQ_LOW,
|
||||
IRQ_RISING,
|
||||
IRQ_FALLING
|
||||
}ext_irq_type_t;
|
||||
|
||||
#define PULLUP 0x00
|
||||
#define PULLDOWN 0x02
|
||||
#define PULLUPDOWN_DISABLED 0x03
|
||||
|
||||
/* ioctl magic numbers */
|
||||
#define GPIO_IOCTL_BASE 'G'
|
||||
|
||||
/* inputs */
|
||||
#define GPIO_CONFIG_AS_INP _IO (GPIO_IOCTL_BASE, 0) /* config this pin as input */
|
||||
#define GPIO_READ_PIN_VAL _IOR (GPIO_IOCTL_BASE, 1, int) /* read pin value */
|
||||
|
||||
/* outputs */
|
||||
#define GPIO_CONFIG_AS_OUT _IO (GPIO_IOCTL_BASE, 2) /* config this pin as output */
|
||||
#define GPIO_WRITE_PIN_VAL _IOW (GPIO_IOCTL_BASE, 3, int) /* sets the pin value */
|
||||
|
||||
/* irqs */
|
||||
#define GPIO_CONFIG_AS_IRQ _IOR (GPIO_IOCTL_BASE, 4, ext_irq_type_t) /* config this pin as interrupt */
|
||||
|
||||
/* pull up/down */
|
||||
#define GPIO_CONFIG_PULLUPDOWN _IOW (GPIO_IOCTL_BASE, 5, int) /* config this pin pull up/down resistor */
|
||||
|
||||
#define GPIO_IOCTL_MAXNR 5
|
||||
|
||||
#endif /* __DIGI_GPIO_H_ */
|
||||
|
|
@ -17,8 +17,9 @@ SRC_URI = " \
|
|||
"
|
||||
|
||||
SRC_URI_append = " \
|
||||
file://qualcomm-pre-up \
|
||||
file://81-sdio-qcom.rules \
|
||||
file://modprobe-qualcomm.conf \
|
||||
file://qualcomm.sh \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
|
@ -38,18 +39,19 @@ do_compile_prepend() {
|
|||
}
|
||||
|
||||
do_install_append() {
|
||||
install -d ${D}${sysconfdir}/network/if-pre-up.d
|
||||
install -m 0755 ${WORKDIR}/qualcomm-pre-up ${D}${sysconfdir}/network/if-pre-up.d/qualcomm
|
||||
install -d ${D}${sysconfdir}/modprobe.d
|
||||
install -m 0644 ${WORKDIR}/modprobe-qualcomm.conf ${D}${sysconfdir}/modprobe.d/qualcomm.conf
|
||||
install -d ${D}${base_libdir}/firmware/wlan/
|
||||
install -m 0644 ${WORKDIR}/git/firmware_bin/WCNSS_cfg.dat ${D}${base_libdir}/firmware/wlan/cfg.dat
|
||||
install -m 0644 ${WORKDIR}/git/firmware_bin/WCNSS_qcom_cfg.ini ${D}${base_libdir}/firmware/wlan/qcom_cfg.ini
|
||||
install -d ${D}${sysconfdir}/udev/rules.d ${D}${sysconfdir}/udev/scripts
|
||||
install -m 0644 ${WORKDIR}/81-sdio-qcom.rules ${D}${sysconfdir}/udev/rules.d/
|
||||
install -m 0755 ${WORKDIR}/qualcomm.sh ${D}${sysconfdir}/udev/scripts/
|
||||
}
|
||||
|
||||
FILES_${PN} += " \
|
||||
${sysconfdir}/network/if-pre-up.d/qualcomm \
|
||||
${sysconfdir}/modprobe.d/qualcomm.conf \
|
||||
${sysconfdir}/udev/ \
|
||||
${base_libdir}/firmware/wlan/cfg.dat \
|
||||
${base_libdir}/firmware/wlan/qcom_cfg.ini \
|
||||
"
|
||||
|
|
|
|||
|
|
@ -1,64 +0,0 @@
|
|||
From: Yi Chen <yichen@qti.qualcomm.com>
|
||||
Date: Fri, 28 Aug 2015 19:24:45 +0800
|
||||
Subject: [PATCH] qcacld: Fix compiling errors when BUILD_DEBUG_VERSION := 0.
|
||||
|
||||
This is a compiling issue when BUILD_DEBUG_VERSION := 0 is set in Kbuild.
|
||||
|
||||
Change-Id: Iaee98eb91d66990dfa4989a7c07cb5592f8a6079
|
||||
CRs-Fixed: 898366
|
||||
(cherry picked from commit d0258ff1dcf19236e4cfa69e45f75b72a1334609)
|
||||
---
|
||||
CORE/UTILS/FWLOG/dbglog_host.c | 4 ++--
|
||||
Kbuild | 8 ++++----
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c
|
||||
index 2dfa45983a87..63fc742259fc 100644
|
||||
--- a/CORE/UTILS/FWLOG/dbglog_host.c
|
||||
+++ b/CORE/UTILS/FWLOG/dbglog_host.c
|
||||
@@ -55,8 +55,6 @@
|
||||
#include <a_debug.h>
|
||||
#define FWLOG_DEBUG ATH_DEBUG_MAKE_MODULE_MASK(0)
|
||||
|
||||
-#if defined(DEBUG)
|
||||
-
|
||||
static bool appstarted = FALSE;
|
||||
static bool senddriverstatus = FALSE;
|
||||
static bool kd_nl_init = FALSE;
|
||||
@@ -64,6 +62,8 @@ static int cnss_diag_pid = INVALID_PID;
|
||||
static int get_version = 0;
|
||||
static int gprint_limiter = 0;
|
||||
|
||||
+#if defined(DEBUG)
|
||||
+
|
||||
static ATH_DEBUG_MASK_DESCRIPTION g_fwlogDebugDescription[] = {
|
||||
{FWLOG_DEBUG,"fwlog"},
|
||||
};
|
||||
diff --git a/Kbuild b/Kbuild
|
||||
index 04461cfb7945..b248eee28bf0 100644
|
||||
--- a/Kbuild
|
||||
+++ b/Kbuild
|
||||
@@ -882,7 +882,6 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \
|
||||
-DWLAN_PERF \
|
||||
-DPTT_SOCK_SVC_ENABLE \
|
||||
-Wall\
|
||||
- -Werror\
|
||||
-D__linux__ \
|
||||
-DHAL_SELF_STA_PER_BSS=1 \
|
||||
-DWLAN_FEATURE_VOWIFI_11R \
|
||||
@@ -966,11 +965,12 @@ CDEFINES += -DWCN_PRONTO
|
||||
CDEFINES += -DWCN_PRONTO_V1
|
||||
endif
|
||||
|
||||
+CDEFINES += -DTRACE_RECORD \
|
||||
+ -DLIM_TRACE_RECORD \
|
||||
+ -DSME_TRACE_RECORD
|
||||
+
|
||||
ifeq ($(BUILD_DEBUG_VERSION),1)
|
||||
CDEFINES += -DWLAN_DEBUG \
|
||||
- -DTRACE_RECORD \
|
||||
- -DLIM_TRACE_RECORD \
|
||||
- -DSME_TRACE_RECORD \
|
||||
-DPE_DEBUG_LOGW \
|
||||
-DPE_DEBUG_LOGE \
|
||||
-DDEBUG
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Mon, 18 Apr 2016 08:48:14 +0200
|
||||
Subject: [PATCH] Update cfg80211_vendor_event_alloc call for newer kernel
|
||||
versions
|
||||
|
||||
Current compilation fails with next error.
|
||||
|
||||
> wlan_hdd_cfg80211.h:995:9: error: too few arguments to function 'cfg80211_vendor_event_alloc'
|
||||
|
||||
This function has been updated starting with kernel 3.15
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/HDD/inc/wlan_hdd_cfg80211.h | 2 +-
|
||||
CORE/HDD/src/wlan_hdd_assoc.c | 8 ++++++++
|
||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
|
||||
index 7602f1d3874b..a40c55144bc5 100644
|
||||
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
|
||||
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
|
||||
@@ -992,7 +992,7 @@ backported_cfg80211_vendor_event_alloc(struct wiphy *wiphy,
|
||||
int approxlen,
|
||||
int event_idx, gfp_t gfp)
|
||||
{
|
||||
- return cfg80211_vendor_event_alloc(wiphy, approxlen, event_idx, gfp);
|
||||
+ return cfg80211_vendor_event_alloc(wiphy, wdev, approxlen, event_idx, gfp);
|
||||
}
|
||||
#define cfg80211_vendor_event_alloc backported_cfg80211_vendor_event_alloc
|
||||
#endif
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
|
||||
index bc3e15009d97..5dc882fa8f83 100644
|
||||
--- a/CORE/HDD/src/wlan_hdd_assoc.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
|
||||
@@ -2027,6 +2027,8 @@ static void hdd_RoamIbssIndicationHandler( hdd_adapter_t *pAdapter,
|
||||
eRoamCmdStatus roamStatus,
|
||||
eCsrRoamResult roamResult )
|
||||
{
|
||||
+ struct ieee80211_channel *chann;
|
||||
+
|
||||
hddLog(VOS_TRACE_LEVEL_INFO, "%s: %s: id %d, status %d, result %d",
|
||||
__func__, pAdapter->dev->name, roamId, roamStatus, roamResult);
|
||||
|
||||
@@ -2082,7 +2084,13 @@ static void hdd_RoamIbssIndicationHandler( hdd_adapter_t *pAdapter,
|
||||
return;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)
|
||||
+ chann = ieee80211_get_channel(pAdapter->wdev.wiphy,
|
||||
+ (int)pRoamInfo->pBssDesc->channelId);
|
||||
+ cfg80211_ibss_joined(pAdapter->dev, bss->bssid, chann, GFP_KERNEL);
|
||||
+#else
|
||||
cfg80211_ibss_joined(pAdapter->dev, bss->bssid, GFP_KERNEL);
|
||||
+#endif
|
||||
cfg80211_put_bss(
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) || defined(WITH_BACKPORTS)
|
||||
pHddCtx->wiphy,
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 10:30:51 +0200
|
||||
Subject: [PATCH] wlan_hdd_main: Update cfg80211_ap_stopped to
|
||||
nl80211_send_ap_stopped
|
||||
|
||||
Use nl80211_send_ap_stopped instead of cfg80211_ap_stopped for newer
|
||||
kernel versions
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/HDD/src/wlan_hdd_main.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
|
||||
index 5e4e95aaaee4..0ff3f31b9863 100755
|
||||
--- a/CORE/HDD/src/wlan_hdd_main.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_main.c
|
||||
@@ -9929,8 +9929,12 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx )
|
||||
#if defined(MSM_PLATFORM) && !defined(WITH_BACKPORTS)
|
||||
hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send stop ap to supplicant",
|
||||
__func__);
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
|
||||
cfg80211_ap_stopped(pAdapter->dev, GFP_KERNEL);
|
||||
#else
|
||||
+ nl80211_send_ap_stopped(pAdapter->dev->ieee80211_ptr);
|
||||
+#endif
|
||||
+#else
|
||||
hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send restart supplicant",
|
||||
__func__);
|
||||
/* event supplicant to restart */
|
||||
|
|
@ -1,215 +0,0 @@
|
|||
From: Karthick S <skarthic@qti.qualcomm.com>
|
||||
Date: Fri, 14 Aug 2015 14:52:23 +0530
|
||||
Subject: [PATCH] qcacld-2.0: remove unused code
|
||||
|
||||
Removed unused code from ReinitSDIO. Also removed mmcbusmode and it's
|
||||
related references in the code.
|
||||
|
||||
Change-Id: Idaa40f31cc830c0e2fa5d6fbda8c78c9f434bdaf
|
||||
CRs-Fixed: 890630
|
||||
(cherry picked from commit acca7f817db52580a985de2804f30973b2ed9cb7)
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
(cherry picked from commit d63533a6cc46671141ac31290e4f020c236298ee)
|
||||
---
|
||||
CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c | 165 +--------------------
|
||||
1 file changed, 2 insertions(+), 163 deletions(-)
|
||||
|
||||
diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
index 31641c94351c..b3afed2a8d7c 100644
|
||||
--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
@@ -57,11 +57,6 @@
|
||||
|
||||
#define MAX_HIF_DEVICES 2
|
||||
|
||||
-unsigned int mmcbusmode = 0;
|
||||
-module_param(mmcbusmode, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
||||
-MODULE_PARM_DESC(mmcbusmode, "Set MMC driver Bus Mode: 1-SDR12, 2-SDR25, 3-SDR50, 4-DDR50, 5-SDR104");
|
||||
-EXPORT_SYMBOL(mmcbusmode);
|
||||
-
|
||||
unsigned int mmcbuswidth = 0;
|
||||
module_param(mmcbuswidth, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
||||
MODULE_PARM_DESC(mmcbuswidth, "Set MMC driver Bus Width: 1-1Bit, 4-4Bit, 8-8Bit");
|
||||
@@ -689,98 +684,6 @@ A_STATUS ReinitSDIO(HIF_DEVICE *device)
|
||||
sdio_claim_host(func);
|
||||
|
||||
do {
|
||||
- /* 2.6.32 kernel does part of the SDIO initalization upon resume */
|
||||
- A_BOOL lt_2_6_32 = (LINUX_VERSION_CODE<KERNEL_VERSION(2,6,32));
|
||||
- if (lt_2_6_32) {
|
||||
- A_UINT32 resp;
|
||||
- A_UINT16 rca;
|
||||
- A_UINT32 i;
|
||||
- int bit = fls(host->ocr_avail) - 1;
|
||||
- /* emulate the mmc_power_up(...) */
|
||||
- host->ios.vdd = bit;
|
||||
- host->ios.chip_select = MMC_CS_DONTCARE;
|
||||
- host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
|
||||
- host->ios.power_mode = MMC_POWER_UP;
|
||||
- host->ios.bus_width = MMC_BUS_WIDTH_1;
|
||||
- host->ios.timing = MMC_TIMING_LEGACY;
|
||||
- host->ops->set_ios(host, &host->ios);
|
||||
- /*
|
||||
- * This delay should be sufficient to allow the power supply
|
||||
- * to reach the minimum voltage.
|
||||
- */
|
||||
- msleep(2);
|
||||
-
|
||||
- host->ios.clock = host->f_min;
|
||||
- host->ios.power_mode = MMC_POWER_ON;
|
||||
- host->ops->set_ios(host, &host->ios);
|
||||
-
|
||||
- /*
|
||||
- * This delay must be at least 74 clock sizes, or 1 ms, or the
|
||||
- * time required to reach a stable voltage.
|
||||
- */
|
||||
- msleep(2);
|
||||
-
|
||||
- /* Issue CMD0. Goto idle state */
|
||||
- host->ios.chip_select = MMC_CS_HIGH;
|
||||
- host->ops->set_ios(host, &host->ios);
|
||||
- msleep(1);
|
||||
- err = IssueSDCommand(device, MMC_GO_IDLE_STATE, 0, (MMC_RSP_NONE | MMC_CMD_BC), NULL);
|
||||
- host->ios.chip_select = MMC_CS_DONTCARE;
|
||||
- host->ops->set_ios(host, &host->ios);
|
||||
- msleep(1);
|
||||
- host->use_spi_crc = 0;
|
||||
-
|
||||
- if (err) {
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD0 failed : %d \n",err));
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- if (!host->ocr) {
|
||||
- /* Issue CMD5, arg = 0 */
|
||||
- err = IssueSDCommand(device, SD_IO_SEND_OP_COND, 0, (MMC_RSP_R4 | MMC_CMD_BCR), &resp);
|
||||
- if (err) {
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD5 failed : %d \n",err));
|
||||
- break;
|
||||
- }
|
||||
- host->ocr = resp;
|
||||
- }
|
||||
-
|
||||
- /* Issue CMD5, arg = ocr. Wait till card is ready */
|
||||
- for (i=0;i<100;i++) {
|
||||
- err = IssueSDCommand(device, SD_IO_SEND_OP_COND, host->ocr, (MMC_RSP_R4 | MMC_CMD_BCR), &resp);
|
||||
- if (err) {
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD5 failed : %d \n",err));
|
||||
- break;
|
||||
- }
|
||||
- if (resp & MMC_CARD_BUSY) {
|
||||
- break;
|
||||
- }
|
||||
- msleep(10);
|
||||
- }
|
||||
-
|
||||
- if ((i == 100) || (err)) {
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: card in not ready : %d %d \n",i,err));
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- /* Issue CMD3, get RCA */
|
||||
- err = IssueSDCommand(device, SD_SEND_RELATIVE_ADDR, 0, MMC_RSP_R6 | MMC_CMD_BCR, &resp);
|
||||
- if (err) {
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD3 failed : %d \n",err));
|
||||
- break;
|
||||
- }
|
||||
- rca = resp >> 16;
|
||||
- host->ios.bus_mode = MMC_BUSMODE_PUSHPULL;
|
||||
- host->ops->set_ios(host, &host->ios);
|
||||
-
|
||||
- /* Issue CMD7, select card */
|
||||
- err = IssueSDCommand(device, MMC_SELECT_CARD, (rca << 16), MMC_RSP_R1 | MMC_CMD_AC, NULL);
|
||||
- if (err) {
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD7 failed : %d \n",err));
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
/* Enable high speed */
|
||||
if (card->host->caps & MMC_CAP_SD_HIGHSPEED) {
|
||||
AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("ReinitSDIO: Set high speed mode\n"));
|
||||
@@ -1212,10 +1115,7 @@ TODO: MMC SDIO3.0 Setting should also be modified in ReInit() function when Powe
|
||||
*/
|
||||
{
|
||||
A_UINT32 clock, clock_set = 12500000;
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)
|
||||
- unsigned int bus_speed = 0, timing = 0;
|
||||
- unsigned char speed = 0;
|
||||
-#endif
|
||||
+
|
||||
sdio_claim_host(func);
|
||||
if (writecccr1) {
|
||||
A_UINT32 err = Func0_CMD52WriteByte(func->card,
|
||||
@@ -1352,69 +1252,8 @@ TODO: MMC SDIO3.0 Setting should also be modified in ReInit() function when Powe
|
||||
if (debugcccr) {
|
||||
HIFDumpCCCR(device);
|
||||
}
|
||||
- // Set MMC Bus Mode: 1-SDR12, 2-SDR25, 3-SDR50, 4-DDR50, 5-SDR104
|
||||
- if (mmcbusmode > 0) {
|
||||
- printk("host caps:0x%08X, card_sd3_bus_mode:0x%08X\n", (unsigned int)func->card->host->caps, (unsigned int)func->card->sw_caps.sd3_bus_mode);
|
||||
- if (mmcbusmode == 5 && (func->card->host->caps & MMC_CAP_UHS_SDR104) &&
|
||||
- ((func->card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104) || forcecard)) {
|
||||
- bus_speed = SDIO_SPEED_SDR104;
|
||||
- timing = MMC_TIMING_UHS_SDR104;
|
||||
- func->card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ANY,("%s: Set MMC bus mode to SDR104. \n", __func__));
|
||||
- } else if (mmcbusmode == 4 && (func->card->host->caps & MMC_CAP_UHS_DDR50) &&
|
||||
- ((func->card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50) || forcecard)) {
|
||||
- bus_speed = SDIO_SPEED_DDR50;
|
||||
- timing = MMC_TIMING_UHS_DDR50;
|
||||
- func->card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ANY,("%s: Set MMC bus mode to DDR50. \n", __func__));
|
||||
- } else if (mmcbusmode == 3 && (func->card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50)) &&
|
||||
- ((func->card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR50) || forcecard)) {
|
||||
- bus_speed = SDIO_SPEED_SDR50;
|
||||
- timing = MMC_TIMING_UHS_SDR50;
|
||||
- func->card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ANY,("%s: Set MMC bus mode to SDR50. \n", __func__));
|
||||
- } else if (mmcbusmode == 2 && (func->card->host->caps &
|
||||
- (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
|
||||
- ((func->card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25) || forcecard)) {
|
||||
- bus_speed = SDIO_SPEED_SDR25;
|
||||
- timing = MMC_TIMING_UHS_SDR25;
|
||||
- func->card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ANY,("%s: Set MMC bus mode to SDR25. \n", __func__));
|
||||
- } else if (mmcbusmode == 1 && (func->card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50 |
|
||||
- MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR12)) &&
|
||||
- ((func->card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR12) || forcecard)) {
|
||||
- bus_speed = SDIO_SPEED_SDR12;
|
||||
- timing = MMC_TIMING_UHS_SDR12;
|
||||
- func->card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ANY,("%s: Set MMC bus mode to SDR12. \n", __func__));
|
||||
- } else {
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("%s: MMC bus mode %d not supported. \n", __func__, mmcbusmode));
|
||||
- return ret = -1;
|
||||
- }
|
||||
-
|
||||
- ret = Func0_CMD52ReadByte(func->card, SDIO_CCCR_SPEED, &speed);
|
||||
- if (ret){
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("%s: CMD52 to get CCCR SPEED failed: %d, cap_uhs: %lu, sd3_bus_mode: %x \n", __func__, ret, (long unsigned int)(func->card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR12)), func->card->sw_caps.sd3_bus_mode));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- speed &= ~SDIO_SPEED_BSS_MASK;
|
||||
- speed |= bus_speed;
|
||||
- ret = Func0_CMD52WriteByte(func->card, SDIO_CCCR_SPEED, speed);
|
||||
- if (ret){
|
||||
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("%s: CMD52 to set CCCR SPPED failed: %d \n", __func__, ret));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- if (bus_speed) {
|
||||
- device->host->ios.timing = timing;
|
||||
- device->host->ops->set_ios(device->host, &device->host->ios);
|
||||
- // mmc_set_clock(func->card->host, func->card->sw_caps.uhs_max_dtr);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
-#endif //#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
|
||||
|
||||
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0) */
|
||||
sdio_release_host(func);
|
||||
}
|
||||
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 13:19:10 +0200
|
||||
Subject: [PATCH] Including header file for "regulatory_hint_user"
|
||||
|
||||
The function "regulatory_hint_user" has been moved from
|
||||
include/net/cfg80211.h to net/wireless/reg.h.
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
(cherry picked from commit db944bc907127c191b1bbdcc58d3aecedcf44a8c)
|
||||
---
|
||||
CORE/VOSS/src/vos_nvitem.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
|
||||
index d79ae2871e4b..47290c9d1744 100644
|
||||
--- a/CORE/VOSS/src/vos_nvitem.c
|
||||
+++ b/CORE/VOSS/src/vos_nvitem.c
|
||||
@@ -53,6 +53,10 @@
|
||||
#include "regdomain.h"
|
||||
#include "regdomain_common.h"
|
||||
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0))
|
||||
+#include <../net/wireless/reg.h>
|
||||
+#endif
|
||||
+
|
||||
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) && !defined(WITH_BACKPORTS)
|
||||
#define IEEE80211_CHAN_NO_80MHZ 1<<7
|
||||
#endif
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 13:52:18 +0200
|
||||
Subject: [PATCH] Updating calls to "alloc_netdev_mq"
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/EPPING/src/epping_txrx.c | 6 ++++++
|
||||
CORE/HDD/src/wlan_hdd_hostapd.c | 4 ++++
|
||||
CORE/HDD/src/wlan_hdd_main.c | 10 +++++++---
|
||||
3 files changed, 17 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/CORE/EPPING/src/epping_txrx.c b/CORE/EPPING/src/epping_txrx.c
|
||||
index 678d58e0cfae..0985e362f94a 100644
|
||||
--- a/CORE/EPPING/src/epping_txrx.c
|
||||
+++ b/CORE/EPPING/src/epping_txrx.c
|
||||
@@ -355,7 +355,13 @@ epping_adapter_t *epping_add_adapter(epping_context_t *pEpping_ctx,
|
||||
struct net_device *dev;
|
||||
epping_adapter_t *pAdapter;
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)
|
||||
+ dev = alloc_netdev(sizeof(epping_adapter_t), "wifi%d", NET_NAME_UNKNOWN, ether_setup);
|
||||
+#else
|
||||
dev = alloc_netdev(sizeof(epping_adapter_t), "wifi%d", ether_setup);
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
if (dev == NULL) {
|
||||
EPPING_LOG(VOS_TRACE_LEVEL_FATAL,
|
||||
"%s: Cannot allocate epping_adapter_t\n", __func__);
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
|
||||
index 6251224c11df..8a80d26f355a 100644
|
||||
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
|
||||
@@ -5447,7 +5447,11 @@ hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAd
|
||||
|
||||
hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: iface_name = %s", __func__, iface_name);
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)
|
||||
+ pWlanHostapdDev = alloc_netdev_mq(sizeof(hdd_adapter_t), iface_name, NET_NAME_UNKNOWN, ether_setup, NUM_TX_QUEUES);
|
||||
+#else
|
||||
pWlanHostapdDev = alloc_netdev_mq(sizeof(hdd_adapter_t), iface_name, ether_setup, NUM_TX_QUEUES);
|
||||
+#endif
|
||||
|
||||
if (pWlanHostapdDev != NULL)
|
||||
{
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
|
||||
index 0ff3f31b9863..a10da2a9b164 100755
|
||||
--- a/CORE/HDD/src/wlan_hdd_main.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_main.c
|
||||
@@ -8226,7 +8226,11 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac
|
||||
/*
|
||||
* cfg80211 initialization and registration....
|
||||
*/
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0)
|
||||
+ pWlanDev = alloc_netdev_mq(sizeof( hdd_adapter_t ), name, NET_NAME_UNKNOWN, ether_setup, NUM_TX_QUEUES);
|
||||
+#else
|
||||
pWlanDev = alloc_netdev_mq(sizeof( hdd_adapter_t ), name, ether_setup, NUM_TX_QUEUES);
|
||||
+#endif
|
||||
|
||||
if(pWlanDev != NULL)
|
||||
{
|
||||
@@ -9929,10 +9933,10 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx )
|
||||
#if defined(MSM_PLATFORM) && !defined(WITH_BACKPORTS)
|
||||
hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send stop ap to supplicant",
|
||||
__func__);
|
||||
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
|
||||
- cfg80211_ap_stopped(pAdapter->dev, GFP_KERNEL);
|
||||
-#else
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0))
|
||||
nl80211_send_ap_stopped(pAdapter->dev->ieee80211_ptr);
|
||||
+#else
|
||||
+ cfg80211_ap_stopped(pAdapter->dev, GFP_KERNEL);
|
||||
#endif
|
||||
#else
|
||||
hddLog(VOS_TRACE_LEVEL_ERROR, "%s [SSR] send restart supplicant",
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 13:56:15 +0200
|
||||
Subject: [PATCH] wlan_hdd_cfg80211: update "cfg80211_inform_bss" params for
|
||||
kernel version
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/HDD/src/wlan_hdd_cfg80211.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
|
||||
index c09ac0304852..c6c79552a9d0 100644
|
||||
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
|
||||
@@ -8460,8 +8460,11 @@ static struct cfg80211_bss* wlan_hdd_cfg80211_inform_bss(
|
||||
WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
|
||||
if (bss == NULL) {
|
||||
rssi = (VOS_MIN ((pBssDesc->rssi + pBssDesc->sinr), 0))*100;
|
||||
-
|
||||
- return (cfg80211_inform_bss(wiphy, chan, pBssDesc->bssId,
|
||||
+ return (cfg80211_inform_bss(wiphy, chan,
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
|
||||
+ CFG80211_BSS_FTYPE_BEACON,
|
||||
+#endif
|
||||
+ pBssDesc->bssId,
|
||||
le64_to_cpu(*(__le64 *)pBssDesc->timeStamp),
|
||||
pBssDesc->capabilityInfo,
|
||||
pBssDesc->beaconInterval, ie, ie_length,
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 13:57:03 +0200
|
||||
Subject: [PATCH] wlan_hdd_p2p: Update call to "cfg80211_rx_mgmt" for different
|
||||
kernel versions
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/HDD/src/wlan_hdd_p2p.c | 17 +++++++++++++++--
|
||||
1 file changed, 15 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c
|
||||
index 0c6645f077f1..476b456e165c 100644
|
||||
--- a/CORE/HDD/src/wlan_hdd_p2p.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_p2p.c
|
||||
@@ -826,7 +826,16 @@ void hdd_remainChanReadyHandler( hdd_adapter_t *pAdapter )
|
||||
// Check for cached action frame
|
||||
if(pRemainChanCtx->action_pkt_buff.frame_length != 0)
|
||||
{
|
||||
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) || defined(WITH_BACKPORTS)
|
||||
+
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0))
|
||||
+ cfg80211_rx_mgmt(pAdapter->dev->ieee80211_ptr,
|
||||
+ pRemainChanCtx->action_pkt_buff.freq, 0,
|
||||
+ pRemainChanCtx->action_pkt_buff.frame_ptr,
|
||||
+ pRemainChanCtx->action_pkt_buff.frame_length,
|
||||
+ NL80211_RXMGMT_FLAG_ANSWERED);
|
||||
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) || defined(WITH_BACKPORTS)
|
||||
+
|
||||
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) || defined(WITH_BACKPORTS)
|
||||
cfg80211_rx_mgmt(pAdapter->dev->ieee80211_ptr,
|
||||
pRemainChanCtx->action_pkt_buff.freq, 0,
|
||||
pRemainChanCtx->action_pkt_buff.frame_ptr,
|
||||
@@ -2340,7 +2349,11 @@ void hdd_indicateMgmtFrame( hdd_adapter_t *pAdapter,
|
||||
|
||||
//Indicate Frame Over Normal Interface
|
||||
hddLog( LOG1, FL("Indicate Frame over NL80211 Interface"));
|
||||
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) || defined(WITH_BACKPORTS)
|
||||
+
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,0))
|
||||
+ cfg80211_rx_mgmt(pAdapter->dev->ieee80211_ptr, freq, 0, pbFrames,
|
||||
+ nFrameLength, NL80211_RXMGMT_FLAG_ANSWERED);
|
||||
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) || defined(WITH_BACKPORTS)
|
||||
cfg80211_rx_mgmt(pAdapter->dev->ieee80211_ptr, freq, 0, pbFrames,
|
||||
nFrameLength, NL80211_RXMGMT_FLAG_ANSWERED, GFP_ATOMIC);
|
||||
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 13:58:29 +0200
|
||||
Subject: [PATCH] =?UTF-8?q?linux=5Fac:=20Fix=20for=20=E2=80=98f=5Fdentry?=
|
||||
=?UTF-8?q?=E2=80=99?=
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://communities.vmware.com/thread/499483?start=0&tstart=0
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/UTILS/PKTLOG/linux_ac.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/CORE/UTILS/PKTLOG/linux_ac.c b/CORE/UTILS/PKTLOG/linux_ac.c
|
||||
index b1969ad5d2ba..8d45d7365b2b 100644
|
||||
--- a/CORE/UTILS/PKTLOG/linux_ac.c
|
||||
+++ b/CORE/UTILS/PKTLOG/linux_ac.c
|
||||
@@ -576,7 +576,10 @@ pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
|
||||
int rem_len;
|
||||
int start_offset, end_offset;
|
||||
int fold_offset, ppos_data, cur_rd_offset;
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
|
||||
+ struct ath_pktlog_info *pl_info = (struct ath_pktlog_info *)
|
||||
+ PDE_DATA(file_inode(file));
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
|
||||
struct ath_pktlog_info *pl_info = (struct ath_pktlog_info *)
|
||||
PDE_DATA(file->f_dentry->d_inode);
|
||||
#else
|
||||
@@ -817,7 +820,10 @@ static struct vm_operations_struct pktlog_vmops = {
|
||||
|
||||
static int pktlog_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
{
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
|
||||
+ struct ath_pktlog_info *pl_info = (struct ath_pktlog_info *)
|
||||
+ PDE_DATA(file_inode(file));
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
|
||||
struct ath_pktlog_info *pl_info = (struct ath_pktlog_info *)
|
||||
PDE_DATA(file->f_dentry->d_inode);
|
||||
#else
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 14:00:59 +0200
|
||||
Subject: [PATCH] native_sdio/src/hif: Do not call to HIGH SPEED functions for
|
||||
newer kernels
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c | 18 +++++++++++++++++-
|
||||
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
index b3afed2a8d7c..1a1e51eff8c7 100644
|
||||
--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
@@ -690,7 +690,9 @@ A_STATUS ReinitSDIO(HIF_DEVICE *device)
|
||||
err = Func0_CMD52ReadByte(card, SDIO_CCCR_SPEED, &cmd52_resp);
|
||||
if (err) {
|
||||
AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD52 read to CCCR speed register failed : %d \n",err));
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||||
card->state &= ~MMC_STATE_HIGHSPEED;
|
||||
+#endif
|
||||
/* no need to break */
|
||||
} else {
|
||||
err = Func0_CMD52WriteByte(card, SDIO_CCCR_SPEED, (cmd52_resp | SDIO_SPEED_EHS));
|
||||
@@ -698,14 +700,20 @@ A_STATUS ReinitSDIO(HIF_DEVICE *device)
|
||||
AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD52 write to CCCR speed register failed : %d \n",err));
|
||||
break;
|
||||
}
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||||
mmc_card_set_highspeed(card);
|
||||
+#endif
|
||||
host->ios.timing = MMC_TIMING_SD_HS;
|
||||
host->ops->set_ios(host, &host->ios);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set clock */
|
||||
- if (mmc_card_highspeed(card)) {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||||
+ if (mmc_card_highspeed(card)) {
|
||||
+#else
|
||||
+ if (mmc_card_hs(card)) {
|
||||
+#endif
|
||||
clock = 50000000;
|
||||
} else {
|
||||
clock = card->cis.max_dtr;
|
||||
@@ -1181,7 +1189,11 @@ TODO: MMC SDIO3.0 Setting should also be modified in ReInit() function when Powe
|
||||
if (mmcclock > 0){
|
||||
clock_set = mmcclock;
|
||||
}
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||||
if (mmc_card_highspeed(func->card)){
|
||||
+#else
|
||||
+ if (mmc_card_hs(func->card)){
|
||||
+#endif
|
||||
clock = 50000000;
|
||||
} else {
|
||||
clock = func->card->cis.max_dtr;
|
||||
@@ -2000,7 +2012,11 @@ addHifDevice(struct sdio_func *func)
|
||||
hifdevice->func = func;
|
||||
hifdevice->powerConfig = HIF_DEVICE_POWER_UP;
|
||||
hifdevice->DeviceState = HIF_DEVICE_STATE_ON;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||||
ret = sdio_set_drvdata(func, hifdevice);
|
||||
+#else
|
||||
+ sdio_set_drvdata(func, hifdevice);
|
||||
+#endif
|
||||
|
||||
EXIT("status %d", ret);
|
||||
return hifdevice;
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 21 Apr 2016 14:32:57 +0200
|
||||
Subject: [PATCH] osdep_adf.h: fix for undefined ath_sysctl_pktlog_size
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/SERVICES/COMMON/osdep_adf.h | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/CORE/SERVICES/COMMON/osdep_adf.h b/CORE/SERVICES/COMMON/osdep_adf.h
|
||||
index 708b6f89fa03..48ca78618840 100644
|
||||
--- a/CORE/SERVICES/COMMON/osdep_adf.h
|
||||
+++ b/CORE/SERVICES/COMMON/osdep_adf.h
|
||||
@@ -168,6 +168,10 @@ typedef unsigned long TQUEUE_ARG;
|
||||
#define ATH_SYSCTL_PROC_DOSTRING(ctl, write, filp, buffer, lenp, ppos) \
|
||||
proc_dostring(ctl, write, filp, buffer, lenp, ppos)
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
|
||||
+typedef struct ctl_table ctl_table;
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* Byte Order stuff
|
||||
*/
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Thu, 19 May 2016 12:28:39 +0200
|
||||
Subject: [PATCH] Kbuild: Add compilation flag based on kernel support
|
||||
|
||||
The option WLAN_NL80211_TESTMODE was inconditionally added to the compilation
|
||||
but it does required the specific kernel support.
|
||||
|
||||
https://jira.digi.com/browse/DEL-2567
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
Kbuild | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Kbuild b/Kbuild
|
||||
index b248eee28bf0..339262874c94 100644
|
||||
--- a/Kbuild
|
||||
+++ b/Kbuild
|
||||
@@ -908,7 +908,6 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \
|
||||
-DWLAN_WAKEUP_EVENTS \
|
||||
-DFEATURE_WLAN_RA_FILTERING\
|
||||
-DWLAN_KD_READY_NOTIFIER \
|
||||
- -DWLAN_NL80211_TESTMODE \
|
||||
-DFEATURE_WLAN_BATCH_SCAN \
|
||||
-DFEATURE_WLAN_LPHB \
|
||||
-DFEATURE_WLAN_PAL_TIMER_DISABLE \
|
||||
@@ -948,6 +947,10 @@ CDEFINES += -DDFS_MASTER_OFFLOAD_IND_SUPPORT
|
||||
endif
|
||||
endif
|
||||
|
||||
+ifeq ($(CONFIG_NL80211_TESTMODE), y)
|
||||
+CDEFINES += -DWLAN_NL80211_TESTMODE
|
||||
+endif
|
||||
+
|
||||
ifeq ($(CONFIG_ARCH_MSM), y)
|
||||
CDEFINES += -DMSM_PLATFORM
|
||||
endif
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Tue, 5 Jul 2016 17:57:07 +0200
|
||||
Subject: [PATCH] Kbuild: do not compile the DEBUG version inconditionally
|
||||
|
||||
Do not compile the DEBUG version inconditionally by adding the posibility to
|
||||
define the DEBUG version as a flag parameter.
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
Kbuild | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Kbuild b/Kbuild
|
||||
index b14417a558cd..a0e203ce5493 100644
|
||||
--- a/Kbuild
|
||||
+++ b/Kbuild
|
||||
@@ -121,7 +121,7 @@ endif
|
||||
# Feature flags which are not (currently) configurable via Kconfig
|
||||
|
||||
#Whether to build debug version
|
||||
-BUILD_DEBUG_VERSION := 1
|
||||
+BUILD_DEBUG_VERSION ?= 1
|
||||
|
||||
#Enable this flag to build driver in diag version
|
||||
BUILD_DIAG_VERSION := 1
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Tue, 5 Jul 2016 17:52:44 +0200
|
||||
Subject: [PATCH] Kbuild: Group most of the relevant DEBUG options
|
||||
|
||||
The value of BUILD_DEBUG_VERSION will be used to compile the driver with most
|
||||
of the relevant DEBUG flags. Use that variable to compile the debug version.
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
Kbuild | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Kbuild b/Kbuild
|
||||
index a0e203ce5493..e5f2e8ebd4ad 100644
|
||||
--- a/Kbuild
|
||||
+++ b/Kbuild
|
||||
@@ -896,9 +896,7 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \
|
||||
-DWLAN_FEATURE_PACKET_FILTERING \
|
||||
-DWLAN_FEATURE_VOWIFI \
|
||||
-DWLAN_FEATURE_11AC \
|
||||
- -DWLAN_FEATURE_P2P_DEBUG \
|
||||
-DWLAN_ENABLE_AGEIE_ON_SCAN_RESULTS \
|
||||
- -DWLANTL_DEBUG\
|
||||
-DWLAN_NS_OFFLOAD \
|
||||
-DWLAN_ACTIVEMODE_OFFLOAD_FEATURE \
|
||||
-DWLAN_FEATURE_HOLD_RX_WAKELOCK \
|
||||
@@ -936,8 +934,7 @@ CDEFINES += -DCONFIG_HL_SUPPORT \
|
||||
-DSDIO_3_0 \
|
||||
-DHIF_SDIO \
|
||||
-DCONFIG_ATH_PROCFS_DIAG_SUPPORT \
|
||||
- -DFEATURE_HL_GROUP_CREDIT_FLOW_CONTROL \
|
||||
- -DDEBUG_HL_LOGGING
|
||||
+ -DFEATURE_HL_GROUP_CREDIT_FLOW_CONTROL
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
|
||||
@@ -974,8 +971,11 @@ CDEFINES += -DTRACE_RECORD \
|
||||
|
||||
ifeq ($(BUILD_DEBUG_VERSION),1)
|
||||
CDEFINES += -DWLAN_DEBUG \
|
||||
+ -DWLAN_FEATURE_P2P_DEBUG \
|
||||
+ -DWLANTL_DEBUG\
|
||||
-DPE_DEBUG_LOGW \
|
||||
-DPE_DEBUG_LOGE \
|
||||
+ -DDEBUG_HL_LOGGING \
|
||||
-DDEBUG
|
||||
endif
|
||||
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Fri, 14 Oct 2016 10:28:29 +0200
|
||||
Subject: [PATCH] wlan_hdd_cfg80211: fix missing ifdef clause
|
||||
|
||||
Fix the compilation for old kernels by defining a missing "ifdef" clause.
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/HDD/inc/wlan_hdd_cfg80211.h | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
|
||||
index a40c55144bc5..95c1ddce7de4 100644
|
||||
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
|
||||
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
|
||||
@@ -992,7 +992,12 @@ backported_cfg80211_vendor_event_alloc(struct wiphy *wiphy,
|
||||
int approxlen,
|
||||
int event_idx, gfp_t gfp)
|
||||
{
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)
|
||||
return cfg80211_vendor_event_alloc(wiphy, wdev, approxlen, event_idx, gfp);
|
||||
+#else
|
||||
+ return cfg80211_vendor_event_alloc(wiphy, approxlen, event_idx, gfp);
|
||||
+#endif
|
||||
+
|
||||
}
|
||||
#define cfg80211_vendor_event_alloc backported_cfg80211_vendor_event_alloc
|
||||
#endif
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Mon, 17 Oct 2016 10:06:18 +0200
|
||||
Subject: [PATCH] Add .gitignore rules
|
||||
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
.gitignore | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
create mode 100644 .gitignore
|
||||
|
||||
diff --git a/.gitignore b/.gitignore
|
||||
new file mode 100644
|
||||
index 000000000000..9886b5284c3f
|
||||
--- /dev/null
|
||||
+++ b/.gitignore
|
||||
@@ -0,0 +1,9 @@
|
||||
+*.o
|
||||
+*.o.cmd
|
||||
+.tmp_versions
|
||||
+.*
|
||||
+Module.symvers
|
||||
+modules.order
|
||||
+*.mod.c
|
||||
+cscope.*
|
||||
+wlan.ko
|
||||
|
|
@ -1,206 +0,0 @@
|
|||
From: Isaac Hermida <isaac.hermida@digi.com>
|
||||
Date: Tue, 5 Jul 2016 14:55:15 +0530
|
||||
Subject: [PATCH] wlan_hdd_main: initialize all adapter completion variables
|
||||
|
||||
In order to change the p2p device mode, delete and add virtual_iface
|
||||
followed by change_iface will be invoked. But in this case device mode
|
||||
is changed by invoking change_iface method without invoking delete and
|
||||
add virtual_iface functions resulting in kernel panic.
|
||||
|
||||
This is because, in latter case hdd_open_adapter will not be invoked
|
||||
for the intended device mode. Hence uninitialized completion variables
|
||||
will be used for further operations.
|
||||
|
||||
To mitigate this issue, Initialize all completion variables of
|
||||
hdd_adapter_t structure during open adapter irrespective of adapter's
|
||||
device mode.
|
||||
|
||||
https://jira.digi.com/browse/DEL-3072
|
||||
https://jira.digi.com/browse/DEL-3037
|
||||
|
||||
(cherry-picked from 20ed76a8e436042590aa25acb33a2ba3d6d34250)
|
||||
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
|
||||
---
|
||||
CORE/HDD/inc/wlan_hdd_main.h | 1 +
|
||||
CORE/HDD/src/wlan_hdd_hostapd.c | 10 -----
|
||||
CORE/HDD/src/wlan_hdd_main.c | 82 ++++++++++++++++++++++++-----------------
|
||||
3 files changed, 50 insertions(+), 43 deletions(-)
|
||||
|
||||
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
|
||||
index f01b7f309dc2..3c5a51a57d6c 100644
|
||||
--- a/CORE/HDD/inc/wlan_hdd_main.h
|
||||
+++ b/CORE/HDD/inc/wlan_hdd_main.h
|
||||
@@ -1740,4 +1740,5 @@ static inline void wlan_hdd_stop_sap(hdd_adapter_t *ap_adapter) {}
|
||||
static inline void wlan_hdd_start_sap(hdd_adapter_t *ap_adapter) {}
|
||||
#endif
|
||||
bool wlan_hdd_get_fw_state(hdd_adapter_t *adapter);
|
||||
+void hdd_initialize_adapter_common(hdd_adapter_t *adapter);
|
||||
#endif // end #if !defined( WLAN_HDD_MAIN_H )
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
|
||||
index 8a80d26f355a..4bd6b844ac5a 100644
|
||||
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
|
||||
@@ -5389,9 +5389,6 @@ VOS_STATUS hdd_init_ap_mode( hdd_adapter_t *pAdapter )
|
||||
return status;
|
||||
}
|
||||
|
||||
- init_completion(&pAdapter->session_close_comp_var);
|
||||
- init_completion(&pAdapter->session_open_comp_var);
|
||||
-
|
||||
sema_init(&(WLAN_HDD_GET_AP_CTX_PTR(pAdapter))->semWpsPBCOverlapInd, 1);
|
||||
|
||||
// Register as a wireless device
|
||||
@@ -5494,13 +5491,6 @@ hdd_adapter_t* hdd_wlan_create_ap_dev( hdd_context_t *pHddCtx, tSirMacAddr macAd
|
||||
pWlanHostapdDev->ieee80211_ptr = &pHostapdAdapter->wdev ;
|
||||
pHostapdAdapter->wdev.wiphy = pHddCtx->wiphy;
|
||||
pHostapdAdapter->wdev.netdev = pWlanHostapdDev;
|
||||
- init_completion(&pHostapdAdapter->tx_action_cnf_event);
|
||||
- init_completion(&pHostapdAdapter->cancel_rem_on_chan_var);
|
||||
- init_completion(&pHostapdAdapter->rem_on_chan_ready_event);
|
||||
- init_completion(&pHostapdAdapter->ula_complete);
|
||||
- init_completion(&pHostapdAdapter->offchannel_tx_event);
|
||||
- init_completion(&pHostapdAdapter->scan_info.scan_req_completion_event);
|
||||
- init_completion(&pHostapdAdapter->scan_info.abortscan_event_var);
|
||||
vos_event_init(&pHostapdAdapter->scan_info.scan_finished_event);
|
||||
pHostapdAdapter->scan_info.scan_pending_option = WEXT_SCAN_PENDING_GIVEUP;
|
||||
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
|
||||
index a10da2a9b164..b447f0931d52 100755
|
||||
--- a/CORE/HDD/src/wlan_hdd_main.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_main.c
|
||||
@@ -8234,7 +8234,6 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac
|
||||
|
||||
if(pWlanDev != NULL)
|
||||
{
|
||||
-
|
||||
//Save the pointer to the net_device in the HDD adapter
|
||||
pAdapter = (hdd_adapter_t*) netdev_priv( pWlanDev );
|
||||
|
||||
@@ -8244,43 +8243,11 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac
|
||||
pAdapter->pHddCtx = pHddCtx;
|
||||
pAdapter->magic = WLAN_HDD_ADAPTER_MAGIC;
|
||||
|
||||
- init_completion(&pAdapter->session_open_comp_var);
|
||||
- init_completion(&pAdapter->session_close_comp_var);
|
||||
- init_completion(&pAdapter->disconnect_comp_var);
|
||||
- init_completion(&pAdapter->linkup_event_var);
|
||||
- init_completion(&pAdapter->cancel_rem_on_chan_var);
|
||||
- init_completion(&pAdapter->rem_on_chan_ready_event);
|
||||
- init_completion(&pAdapter->offchannel_tx_event);
|
||||
- init_completion(&pAdapter->tx_action_cnf_event);
|
||||
-#ifdef FEATURE_WLAN_TDLS
|
||||
- init_completion(&pAdapter->tdls_add_station_comp);
|
||||
- init_completion(&pAdapter->tdls_del_station_comp);
|
||||
- init_completion(&pAdapter->tdls_mgmt_comp);
|
||||
- init_completion(&pAdapter->tdls_link_establish_req_comp);
|
||||
-#endif
|
||||
-
|
||||
- init_completion(&pHddCtx->mc_sus_event_var);
|
||||
- init_completion(&pHddCtx->tx_sus_event_var);
|
||||
- init_completion(&pHddCtx->rx_sus_event_var);
|
||||
- init_completion(&pHddCtx->ready_to_suspend);
|
||||
- init_completion(&pAdapter->ula_complete);
|
||||
- init_completion(&pAdapter->change_country_code);
|
||||
-
|
||||
-#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
||||
- init_completion(&pHddCtx->ready_to_extwow);
|
||||
-#endif
|
||||
-
|
||||
-#ifdef FEATURE_WLAN_BATCH_SCAN
|
||||
- init_completion(&pAdapter->hdd_set_batch_scan_req_var);
|
||||
- init_completion(&pAdapter->hdd_get_batch_scan_req_var);
|
||||
pAdapter->pBatchScanRsp = NULL;
|
||||
pAdapter->numScanList = 0;
|
||||
pAdapter->batchScanState = eHDD_BATCH_SCAN_STATE_STOPPED;
|
||||
pAdapter->prev_batch_id = 0;
|
||||
mutex_init(&pAdapter->hdd_batch_scan_lock);
|
||||
-#endif
|
||||
- init_completion(&pAdapter->scan_info.scan_req_completion_event);
|
||||
- init_completion(&pAdapter->scan_info.abortscan_event_var);
|
||||
|
||||
vos_event_init(&pAdapter->scan_info.scan_finished_event);
|
||||
pAdapter->scan_info.scan_pending_option = WEXT_SCAN_PENDING_GIVEUP;
|
||||
@@ -9018,6 +8985,7 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type,
|
||||
pAdapter->wdev.iftype = NL80211_IFTYPE_P2P_CLIENT;
|
||||
|
||||
pAdapter->device_mode = session_type;
|
||||
+ hdd_initialize_adapter_common(pAdapter);
|
||||
|
||||
status = hdd_init_station_mode( pAdapter );
|
||||
if( VOS_STATUS_SUCCESS != status )
|
||||
@@ -9089,6 +9057,7 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type,
|
||||
NL80211_IFTYPE_P2P_GO;
|
||||
pAdapter->device_mode = session_type;
|
||||
|
||||
+ hdd_initialize_adapter_common(pAdapter);
|
||||
status = hdd_init_ap_mode(pAdapter);
|
||||
if( VOS_STATUS_SUCCESS != status )
|
||||
goto err_free_netdev;
|
||||
@@ -9163,6 +9132,7 @@ hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type,
|
||||
pAdapter->device_mode = session_type;
|
||||
status = hdd_register_interface( pAdapter, rtnl_held );
|
||||
|
||||
+ hdd_initialize_adapter_common(pAdapter);
|
||||
hdd_init_tx_rx( pAdapter );
|
||||
|
||||
//Stop the Interface TX queue.
|
||||
@@ -11735,6 +11705,13 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
|
||||
init_completion(&pHddCtx->full_pwr_comp_var);
|
||||
init_completion(&pHddCtx->standby_comp_var);
|
||||
init_completion(&pHddCtx->req_bmps_comp_var);
|
||||
+ init_completion(&pHddCtx->mc_sus_event_var);
|
||||
+ init_completion(&pHddCtx->tx_sus_event_var);
|
||||
+ init_completion(&pHddCtx->rx_sus_event_var);
|
||||
+ init_completion(&pHddCtx->ready_to_suspend);
|
||||
+#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
||||
+ init_completion(&pHddCtx->ready_to_extwow);
|
||||
+#endif
|
||||
|
||||
spin_lock_init(&pHddCtx->schedScan_lock);
|
||||
|
||||
@@ -14494,6 +14471,45 @@ void wlan_hdd_start_sap(hdd_adapter_t *ap_adapter)
|
||||
}
|
||||
#endif
|
||||
|
||||
+/**
|
||||
+ * hdd_initialize_adapter_common() - initialize completion variables
|
||||
+ * @adapter: pointer to hdd_adapter_t
|
||||
+ *
|
||||
+ * Return: none
|
||||
+ */
|
||||
+void hdd_initialize_adapter_common(hdd_adapter_t *adapter)
|
||||
+{
|
||||
+ if (NULL == adapter) {
|
||||
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s: adapter is NULL ", __func__);
|
||||
+ return;
|
||||
+ }
|
||||
+ init_completion(&adapter->session_open_comp_var);
|
||||
+ init_completion(&adapter->session_close_comp_var);
|
||||
+ init_completion(&adapter->disconnect_comp_var);
|
||||
+ init_completion(&adapter->linkup_event_var);
|
||||
+ init_completion(&adapter->cancel_rem_on_chan_var);
|
||||
+ init_completion(&adapter->rem_on_chan_ready_event);
|
||||
+ init_completion(&adapter->offchannel_tx_event);
|
||||
+ init_completion(&adapter->tx_action_cnf_event);
|
||||
+#ifdef FEATURE_WLAN_TDLS
|
||||
+ init_completion(&adapter->tdls_add_station_comp);
|
||||
+ init_completion(&adapter->tdls_del_station_comp);
|
||||
+ init_completion(&adapter->tdls_mgmt_comp);
|
||||
+ init_completion(&adapter->tdls_link_establish_req_comp);
|
||||
+#endif
|
||||
+ init_completion(&adapter->ula_complete);
|
||||
+ init_completion(&adapter->change_country_code);
|
||||
+ init_completion(&adapter->scan_info.scan_req_completion_event);
|
||||
+ init_completion(&adapter->scan_info.abortscan_event_var);
|
||||
+
|
||||
+#ifdef FEATURE_WLAN_BATCH_SCAN
|
||||
+ init_completion(&adapter->hdd_set_batch_scan_req_var);
|
||||
+ init_completion(&adapter->hdd_get_batch_scan_req_var);
|
||||
+#endif
|
||||
+
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
//Register the module init/exit functions
|
||||
module_init(hdd_module_init);
|
||||
module_exit(hdd_module_exit);
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
From: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
Date: Mon, 12 Dec 2016 16:19:48 +0100
|
||||
Subject: [PATCH] qcacld: Indicate disconnect event to upper layers.
|
||||
|
||||
This is to avoid the following warning:
|
||||
|
||||
------------[ cut here ]------------
|
||||
WARNING: CPU: 0 PID: 1120 at net/wireless/core.c:1140 cfg80211_netdev_notifier_call+0x3a0/0x574()
|
||||
Modules linked in: wlan(O-) evbug [last unloaded: wlan]
|
||||
CPU: 0 PID: 1120 Comm: rmmod Tainted: G O 4.1.15-95656-g4c5caa2cab98-dirty #11
|
||||
Hardware name: Freescale i.MX6 Ultralite (Device Tree)
|
||||
[<80015ae4>] (unwind_backtrace) from [<8001269c>] (show_stack+0x10/0x14)
|
||||
[<8001269c>] (show_stack) from [<80730464>] (dump_stack+0x84/0xc4)
|
||||
[<80730464>] (dump_stack) from [<8002d220>] (warn_slowpath_common+0x80/0xb0)
|
||||
[<8002d220>] (warn_slowpath_common) from [<8002d2ec>] (warn_slowpath_null+0x1c/0x24)
|
||||
[<8002d2ec>] (warn_slowpath_null) from [<806bdad8>] (cfg80211_netdev_notifier_call+0x3a0/0x574)
|
||||
[<806bdad8>] (cfg80211_netdev_notifier_call) from [<800462b8>] (notifier_call_chain+0x44/0x84)
|
||||
[<800462b8>] (notifier_call_chain) from [<8004642c>] (raw_notifier_call_chain+0x18/0x20)
|
||||
[<8004642c>] (raw_notifier_call_chain) from [<8057f8fc>] (rollback_registered_many+0x2a0/0x3a4)
|
||||
[<8057f8fc>] (rollback_registered_many) from [<8057fa24>] (rollback_registered+0x24/0x38)
|
||||
[<8057fa24>] (rollback_registered) from [<80581d24>] (unregister_netdevice_queue+0x54/0xb0)
|
||||
[<80581d24>] (unregister_netdevice_queue) from [<80581d98>] (unregister_netdev+0x18/0x20)
|
||||
[<80581d98>] (unregister_netdev) from [<7f02363c>] (hdd_close_all_adapters+0x7c/0xbc [wlan])
|
||||
[<7f02363c>] (hdd_close_all_adapters [wlan]) from [<7f025be4>] (hdd_wlan_exit+0x2e4/0x72c [wlan])
|
||||
[<7f025be4>] (hdd_wlan_exit [wlan]) from [<7f0260c8>] (__hdd_wlan_exit+0x9c/0xe4 [wlan])
|
||||
[<7f0260c8>] (__hdd_wlan_exit [wlan]) from [<7f1c3238>] (ath_hif_sdio_remove+0x54/0xfc [wlan])
|
||||
[<7f1c3238>] (ath_hif_sdio_remove [wlan]) from [<7f1c5de0>] (hifDeviceRemoved+0x7c/0x16c [wlan])
|
||||
[<7f1c5de0>] (hifDeviceRemoved [wlan]) from [<804e9c8c>] (sdio_bus_remove+0x30/0xf8)
|
||||
[<804e9c8c>] (sdio_bus_remove) from [<8036f598>] (__device_release_driver+0x70/0xe4)
|
||||
[<8036f598>] (__device_release_driver) from [<8036fd34>] (driver_detach+0xac/0xb0)
|
||||
[<8036fd34>] (driver_detach) from [<8036f2f8>] (bus_remove_driver+0x4c/0xa0)
|
||||
[<8036f2f8>] (bus_remove_driver) from [<7f1c53a8>] (HIFShutDownDevice+0xbc/0x17c [wlan])
|
||||
[<7f1c53a8>] (HIFShutDownDevice [wlan]) from [<7f1c36c4>] (hif_unregister_driver+0x28/0x48 [wlan])
|
||||
[<7f1c36c4>] (hif_unregister_driver [wlan]) from [<7f1d2fa8>] (hdd_module_exit+0x140/0x18c [wlan])
|
||||
[<7f1d2fa8>] (hdd_module_exit [wlan]) from [<8008ae18>] (SyS_delete_module+0x174/0x1b8)
|
||||
[<8008ae18>] (SyS_delete_module) from [<8000f400>] (ret_fast_syscall+0x0/0x3c)
|
||||
---[ end trace cb71790dd22e980e ]---
|
||||
|
||||
https://jira.digi.com/browse/DEL-3365
|
||||
|
||||
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
---
|
||||
CORE/HDD/src/wlan_hdd_cfg80211.c | 3 +++
|
||||
CORE/HDD/src/wlan_hdd_main.c | 5 +++++
|
||||
2 files changed, 8 insertions(+)
|
||||
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
|
||||
index 43543a9a473d..ae86c88fcfa5 100644
|
||||
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
|
||||
@@ -11038,6 +11038,9 @@ disconnected:
|
||||
FL("Set HDD connState to eConnectionState_NotConnected"));
|
||||
pHddStaCtx->conn_info.connState = eConnectionState_NotConnected;
|
||||
|
||||
+ /* indicate disconnected event to nl80211 */
|
||||
+ cfg80211_disconnected(pAdapter->dev, WLAN_REASON_UNSPECIFIED, NULL, 0,
|
||||
+ GFP_KERNEL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
|
||||
index df5b1065d463..f057f8c177b1 100755
|
||||
--- a/CORE/HDD/src/wlan_hdd_main.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_main.c
|
||||
@@ -9536,6 +9536,11 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter,
|
||||
"%s: wait on disconnect_comp_var failed",
|
||||
__func__);
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ cfg80211_disconnected(pAdapter->dev, WLAN_REASON_UNSPECIFIED,
|
||||
+ NULL, 0, GFP_KERNEL);
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
From: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
Date: Thu, 15 Dec 2016 13:31:12 +0100
|
||||
Subject: [PATCH] wdd_hdd_main: Print con_mode to clearly see if in FTM mode.
|
||||
|
||||
We use FTM mode for RF testing.
|
||||
|
||||
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
---
|
||||
CORE/HDD/src/wlan_hdd_main.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
|
||||
index f057f8c177b1..d83602740b94 100755
|
||||
--- a/CORE/HDD/src/wlan_hdd_main.c
|
||||
+++ b/CORE/HDD/src/wlan_hdd_main.c
|
||||
@@ -12607,8 +12607,8 @@ static int hdd_driver_init( void)
|
||||
#ifdef HDD_TRACE_RECORD
|
||||
MTRACE(hddTraceInit());
|
||||
#endif
|
||||
- pr_info("%s: loading driver v%s\n", WLAN_MODULE_NAME,
|
||||
- QWLAN_VERSIONSTR TIMER_MANAGER_STR MEMORY_DEBUG_STR);
|
||||
+ pr_info("%s: loading driver v%s in mode %d\n", WLAN_MODULE_NAME,
|
||||
+ QWLAN_VERSIONSTR TIMER_MANAGER_STR MEMORY_DEBUG_STR, con_mode);
|
||||
|
||||
do {
|
||||
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
From: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
Date: Mon, 9 Jan 2017 16:51:17 +0100
|
||||
Subject: [PATCH] Makefile: Pass BUILD_DEBUG_VERSION to kbuild system.
|
||||
|
||||
https://jira.digi.com/browse/DEL-3392
|
||||
|
||||
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
---
|
||||
Makefile | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index c05b00f26c57..25cec85a0c1e 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -16,6 +16,7 @@ KBUILD_OPTIONS += CONFIG_QCA_WIFI_ISOC=0
|
||||
KBUILD_OPTIONS += CONFIG_QCA_WIFI_2_0=1
|
||||
KBUILD_OPTIONS += $(WLAN_SELECT)
|
||||
KBUILD_OPTIONS += WLAN_OPEN_SOURCE=$(WLAN_OPEN_SOURCE)
|
||||
+KBUILD_OPTIONS += BUILD_DEBUG_VERSION=$(BUILD_DEBUG_VERSION)
|
||||
KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any
|
||||
|
||||
all:
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
From: Pedro Perez de Heredia <pedro.perez@digi.com>
|
||||
Date: Mon, 13 Feb 2017 09:43:50 +0100
|
||||
Subject: [PATCH] kernel-module-qualcomm: cosmetic change log level for anoying
|
||||
driver messages
|
||||
|
||||
Signed-off-by: Pedro Perez de Heredia <pedro.perez@digi.com>
|
||||
---
|
||||
CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c | 4 ++--
|
||||
CORE/SVC/src/logging/wlan_logging_sock_svc.c | 4 ++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
index 1a1e51e..ee2af05 100644
|
||||
--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
|
||||
@@ -1202,7 +1202,7 @@ TODO: MMC SDIO3.0 Setting should also be modified in ReInit() function when Powe
|
||||
clock = device->host->f_max;
|
||||
}
|
||||
|
||||
- printk(KERN_ERR "%s: Dumping clocks (%d,%d)\n", __func__, func->card->cis.max_dtr, device->host->f_max);
|
||||
+ pr_info("%s: Dumping clocks (%d,%d)\n", __func__, func->card->cis.max_dtr, device->host->f_max);
|
||||
|
||||
/*
|
||||
// We don't need to set the clock explicitly on 8064/ADP platforms.
|
||||
@@ -1513,7 +1513,7 @@ static A_STATUS hifEnableFunc(HIF_DEVICE *device, struct sdio_func *func)
|
||||
sdio_release_host(func);
|
||||
return A_ERROR;
|
||||
}
|
||||
- printk(KERN_ERR"AR6000: Set async interrupt delay clock as %d.\n", asyncintdelay);
|
||||
+ pr_info("AR6000: Set async interrupt delay clock as %d.\n", asyncintdelay);
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
|
||||
diff --git a/CORE/SVC/src/logging/wlan_logging_sock_svc.c b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
|
||||
index 0253215..379d878 100644
|
||||
--- a/CORE/SVC/src/logging/wlan_logging_sock_svc.c
|
||||
+++ b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
|
||||
@@ -431,13 +431,13 @@ static int wlan_logging_thread(void *Arg)
|
||||
|| gwlan_logging.exit));
|
||||
|
||||
if (ret_wait_status == -ERESTARTSYS) {
|
||||
- pr_err("%s: wait_event_interruptible returned -ERESTARTSYS",
|
||||
+ pr_info("%s: wait_event_interruptible returned -ERESTARTSYS",
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
|
||||
if (gwlan_logging.exit) {
|
||||
- pr_err("%s: Exiting the thread\n", __func__);
|
||||
+ pr_info("%s: Exiting the thread\n", __func__);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
From: Pedro Perez de Heredia <pedro.perez@digi.com>
|
||||
Date: Mon, 13 Feb 2017 10:28:35 +0100
|
||||
Subject: [PATCH] kernel-module-qualcomm: fix issue with _scan_callback at
|
||||
module unload
|
||||
|
||||
Protect the invocation of the _scan_done() callback function with the
|
||||
global lock to avoid that it is called while the module is being unloaded
|
||||
and the data structures have been freed.
|
||||
|
||||
https://jira.digi.com/browse/DEL-3607
|
||||
https://jira.digi.com/browse/DEL-3393
|
||||
|
||||
Signed-off-by: Pedro Perez de Heredia <pedro.perez@digi.com>
|
||||
---
|
||||
CORE/SME/src/csr/csrApiScan.c | 43 +++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 29 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
|
||||
index 83a74cb..2f90cce 100644
|
||||
--- a/CORE/SME/src/csr/csrApiScan.c
|
||||
+++ b/CORE/SME/src/csr/csrApiScan.c
|
||||
@@ -6420,13 +6420,20 @@ eHalStatus csrScanFreeRequest(tpAniSirGlobal pMac, tCsrScanRequest *pReq)
|
||||
|
||||
void csrScanCallCallback(tpAniSirGlobal pMac, tSmeCmd *pCommand, eCsrScanStatus scanStatus)
|
||||
{
|
||||
- if(pCommand->u.scanCmd.callback)
|
||||
+ eHalStatus status;
|
||||
+
|
||||
+ status = sme_AcquireGlobalLock( &pMac->sme );
|
||||
+ if ( HAL_STATUS_SUCCESS( status ) )
|
||||
{
|
||||
- pCommand->u.scanCmd.callback(pMac, pCommand->u.scanCmd.pContext,
|
||||
- pCommand->sessionId,
|
||||
- pCommand->u.scanCmd.scanID, scanStatus);
|
||||
- } else {
|
||||
- smsLog( pMac, LOG2, "%s:%d - Callback NULL!!!", __func__, __LINE__);
|
||||
+ if(pCommand->u.scanCmd.callback)
|
||||
+ {
|
||||
+ pCommand->u.scanCmd.callback(pMac, pCommand->u.scanCmd.pContext,
|
||||
+ pCommand->sessionId,
|
||||
+ pCommand->u.scanCmd.scanID, scanStatus);
|
||||
+ } else {
|
||||
+ smsLog( pMac, LOG2, "%s:%d - Callback NULL!!!", __func__, __LINE__);
|
||||
+ }
|
||||
+ sme_ReleaseGlobalLock( &pMac->sme );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7126,6 +7133,7 @@ tANI_BOOLEAN csrScanRemoveFreshScanCommand(tpAniSirGlobal pMac, tANI_U8 sessionI
|
||||
tSmeCmd *pCommand;
|
||||
tDblLinkList localList;
|
||||
tDblLinkList *pCmdList;
|
||||
+ eHalStatus status;
|
||||
|
||||
vos_mem_zero(&localList, sizeof(tDblLinkList));
|
||||
if(!HAL_STATUS_SUCCESS(csrLLOpen(pMac->hHdd, &localList)))
|
||||
@@ -7178,15 +7186,21 @@ tANI_BOOLEAN csrScanRemoveFreshScanCommand(tpAniSirGlobal pMac, tANI_U8 sessionI
|
||||
while( (pEntry = csrLLRemoveHead(&localList, LL_ACCESS_NOLOCK)) )
|
||||
{
|
||||
pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link);
|
||||
- if (pCommand->u.scanCmd.callback)
|
||||
+
|
||||
+ status = sme_AcquireGlobalLock( &pMac->sme );
|
||||
+ if ( HAL_STATUS_SUCCESS( status ) )
|
||||
{
|
||||
- /* User scan request is pending,
|
||||
+ if (pCommand->u.scanCmd.callback)
|
||||
+ {
|
||||
+ /* User scan request is pending,
|
||||
* send response with status eCSR_SCAN_ABORT*/
|
||||
- pCommand->u.scanCmd.callback(pMac,
|
||||
- pCommand->u.scanCmd.pContext,
|
||||
- sessionId,
|
||||
- pCommand->u.scanCmd.scanID,
|
||||
- eCSR_SCAN_ABORT);
|
||||
+ pCommand->u.scanCmd.callback(pMac,
|
||||
+ pCommand->u.scanCmd.pContext,
|
||||
+ sessionId,
|
||||
+ pCommand->u.scanCmd.scanID,
|
||||
+ eCSR_SCAN_ABORT);
|
||||
+ }
|
||||
+ sme_ReleaseGlobalLock( &pMac->sme );
|
||||
}
|
||||
csrReleaseCommandScan( pMac, pCommand );
|
||||
}
|
||||
@@ -8015,7 +8029,6 @@ eHalStatus csrProcessSetBGScanParam(tpAniSirGlobal pMac, tSmeCmd *pCommand)
|
||||
return (status);
|
||||
}
|
||||
|
||||
-
|
||||
eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, tANI_U8 sessionId,
|
||||
eCsrAbortReason reason)
|
||||
{
|
||||
@@ -8035,6 +8048,8 @@ eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, tANI_U8 sessionId,
|
||||
{
|
||||
|
||||
pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link );
|
||||
+ pCommand->u.scanCmd.callback = NULL;
|
||||
+ pCommand->u.scanCmd.pContext = NULL;
|
||||
csrAbortCommand( pMac, pCommand, eANI_BOOLEAN_FALSE);
|
||||
}
|
||||
csrLLUnlock(&pMac->scan.scanCmdPendingList);
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# Load Qualcomm wireless module
|
||||
SUBSYSTEM=="sdio", ACTION=="add", ENV{MODALIAS}=="sdio:c00v0271d050A", RUN="/etc/udev/scripts/qualcomm.sh"
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
install wlan true
|
||||
# Load the wlan module with values for SDIO3.0.
|
||||
options wlan asyncintdelay=0x2 writecccr1=0xf2 writecccr1value=0xf \
|
||||
writecccr2=0xf1 writecccr2value=0xa8 writecccr3=0xf0 \
|
||||
|
|
|
|||
|
|
@ -1,109 +0,0 @@
|
|||
#!/bin/sh
|
||||
#===============================================================================
|
||||
#
|
||||
# qualcomm-pre-up
|
||||
#
|
||||
# Copyright (C) 2016 by Digi International Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 as published by
|
||||
# the Free Software Foundation.
|
||||
#
|
||||
#
|
||||
# !Description: Load Qualcomm' wireless driver
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
[ "${IFACE}" != "wlan0" ] && [ "${IFACE}" != "p2p0" ] && exit 0
|
||||
|
||||
# If the qualcomm driver is already loaded exit
|
||||
grep -qws 'wlan' /proc/modules && exit 0
|
||||
|
||||
FIRMWARE_DIR="/lib/firmware"
|
||||
MACFILE="${FIRMWARE_DIR}/wlan/wlan_mac.bin"
|
||||
TMP_MACFILE="$(mktemp -t wlan_mac.XXXXXX)"
|
||||
|
||||
# Read the MACs from DeviceTree. We can have up to four wireless interfaces
|
||||
# The only required one is wlan0 that is mapped with device tree mac address
|
||||
# without suffix.
|
||||
for index in $(seq 0 3); do
|
||||
DT_WLANx_MAC="/proc/device-tree/wireless/mac-address"
|
||||
if [ "${index}" = "0" ]; then
|
||||
# Set a default MAC for wlan0
|
||||
MAC_ADDR="00:04:F3:FF:FF:FB"
|
||||
else
|
||||
# Add the interface suffix for the device tree node
|
||||
DT_WLANx_MAC=${DT_WLANx_MAC}${index}
|
||||
MAC_ADDR=""
|
||||
fi
|
||||
|
||||
if [ -f "${DT_WLANx_MAC}" ]; then
|
||||
MAC_ADDR="$(hexdump -ve '1/1 "%02X" ":"' ${DT_WLANx_MAC} | sed 's/:$//g')"
|
||||
fi
|
||||
|
||||
# Dump the MAC address in a file with the expected firmware format.
|
||||
# example: Intf0MacAddress=0004f3fffffb
|
||||
echo "Intf${index}MacAddress=${MAC_ADDR}" | sed s/://g >> ${TMP_MACFILE}
|
||||
done
|
||||
|
||||
# Override the MAC firmware file only if the MAC file has changed.
|
||||
if ! cmp -s ${TMP_MACFILE} ${MACFILE}; then
|
||||
cp ${TMP_MACFILE} ${MACFILE}
|
||||
fi
|
||||
rm -f ${TMP_MACFILE}
|
||||
|
||||
OTP_REGION_CODE="$(cat /proc/device-tree/digi,hwid,cert 2>/dev/null)"
|
||||
DTB_REGION_CODE="$(cat /proc/device-tree/wireless/regulatory-domain 2>/dev/null)"
|
||||
US_CODE="0x0"
|
||||
WW_CODE="0x1"
|
||||
JP_CODE="0x2"
|
||||
# Check if the DTB_REGION_CODE is in the list of valid codes,
|
||||
# if not use the OTP programmed value.
|
||||
case "${DTB_REGION_CODE}" in
|
||||
${US_CODE}|${WW_CODE}|${JP_CODE})
|
||||
REGULATORY_DOMAIN=${DTB_REGION_CODE};;
|
||||
*)
|
||||
if [ -n "${DTB_REGION_CODE}" ]; then
|
||||
logger -t qca6564 "[ERROR] Invalid region code in device tree, using OTP value"
|
||||
fi
|
||||
REGULATORY_DOMAIN=${OTP_REGION_CODE};;
|
||||
esac
|
||||
|
||||
BDATA_LINK="${FIRMWARE_DIR}/bdwlan30.bin"
|
||||
UTFBDATA_LINK="${FIRMWARE_DIR}/utfbd30.bin"
|
||||
# Create a symbolic links to the FW files for the specific country region.
|
||||
BDATA_SOURCE="${FIRMWARE_DIR}/bdwlan30_US.bin"
|
||||
case "${REGULATORY_DOMAIN}" in
|
||||
${US_CODE})
|
||||
logger -t qca6564 "Setting US wireless region";;
|
||||
${WW_CODE}|${JP_CODE})
|
||||
logger -t qca6564 "Setting WW (world wide) wireless region"
|
||||
BDATA_SOURCE="${FIRMWARE_DIR}/bdwlan30_World.bin";;
|
||||
"")
|
||||
logger -t qca6564 "[WARN] region code not found, using US";;
|
||||
*)
|
||||
logger -t qca6564 "[WARN] Invalid region code, using US";;
|
||||
esac
|
||||
|
||||
# We don't want to rewrite NAND every time we boot so only
|
||||
# change the links if they are wrong.
|
||||
if [ ! -e "${BDATA_LINK}" ] || ! cmp -s "${BDATA_LINK}" "${BDATA_SOURCE}"; then
|
||||
ln -sf "${BDATA_SOURCE}" "${BDATA_LINK}"
|
||||
ln -sf "${BDATA_SOURCE}" "${UTFBDATA_LINK}"
|
||||
fi
|
||||
|
||||
# Check the version of modprobe installed to compound the arguments.
|
||||
if readlink -f $(which modprobe) | grep -qs kmod; then
|
||||
MODPROBE_ARGS="-i"
|
||||
fi
|
||||
# Load the wireless module with the params defined in modprobe.d/qualcomm.conf
|
||||
modprobe ${MODPROBE_ARGS} wlan
|
||||
|
||||
# Validate that firmware was loaded by checking if the interface is present.
|
||||
if [ -d "/sys/class/net/${IFACE}" ]; then
|
||||
echo "Loading qca6564 module: [OK]"
|
||||
else
|
||||
echo "Loading qca6564 module: [FAILED]"
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2017, Digi International Inc.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, you can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
# At this point of the boot (udev script), the system log (syslog) is not
|
||||
# available yet, so use the kernel log buffer from userspace.
|
||||
log() {
|
||||
printf "<5>qca6564: $1\n" >/dev/kmsg
|
||||
}
|
||||
|
||||
# Do nothing if the module is already loaded
|
||||
grep -qws 'wlan' /proc/modules && exit 0
|
||||
|
||||
FIRMWARE_DIR="/lib/firmware"
|
||||
MACFILE="${FIRMWARE_DIR}/wlan/wlan_mac.bin"
|
||||
TMP_MACFILE="$(mktemp -t wlan_mac.XXXXXX)"
|
||||
|
||||
# Read the MACs from DeviceTree. We can have up to four wireless interfaces
|
||||
# The only required one is wlan0 that is mapped with device tree mac address
|
||||
# without suffix.
|
||||
for index in $(seq 0 3); do
|
||||
MAC_ADDR="$(hexdump -ve '1/1 "%02X"' /proc/device-tree/wireless/mac-address${index%0} 2>/dev/null)"
|
||||
if [ "${index}" = "0" ] && { [ -z "${MAC_ADDR}" ] || [ "${MAC_ADDR}" = "00:00:00:00:00:00" ]; }; then
|
||||
# Set a default MAC for wlan0
|
||||
MAC_ADDR="0004F3FFFFFB"
|
||||
fi
|
||||
|
||||
# Add the MAC address to the firmware file with the expected format
|
||||
echo "Intf${index}MacAddress=${MAC_ADDR}" >> ${TMP_MACFILE}
|
||||
done
|
||||
|
||||
# Override the MAC firmware file only if the MAC file has changed.
|
||||
if ! cmp -s ${TMP_MACFILE} ${MACFILE}; then
|
||||
cp ${TMP_MACFILE} ${MACFILE}
|
||||
fi
|
||||
rm -f "${TMP_MACFILE}"
|
||||
|
||||
OTP_REGION_CODE="$(cat /proc/device-tree/digi,hwid,cert 2>/dev/null)"
|
||||
DTB_REGION_CODE="$(cat /proc/device-tree/wireless/regulatory-domain 2>/dev/null)"
|
||||
US_CODE="0x0"
|
||||
WW_CODE="0x1"
|
||||
JP_CODE="0x2"
|
||||
# Check if the DTB_REGION_CODE is in the list of valid codes,
|
||||
# if not use the OTP programmed value.
|
||||
case "${DTB_REGION_CODE}" in
|
||||
${US_CODE} | ${WW_CODE} | ${JP_CODE})
|
||||
REGULATORY_DOMAIN="${DTB_REGION_CODE}";;
|
||||
*)
|
||||
if [ -n "${DTB_REGION_CODE}" ]; then
|
||||
log "[WARN] Invalid region code in device tree, using OTP value"
|
||||
fi
|
||||
REGULATORY_DOMAIN="${OTP_REGION_CODE}";;
|
||||
esac
|
||||
|
||||
|
||||
# Create symbolic links to the proper FW files depending on the country region
|
||||
# Use a sub-shell here to change to firmware directory
|
||||
(
|
||||
cd "${FIRMWARE_DIR}"
|
||||
|
||||
BDATA_SOURCE="bdwlan30_US.bin"
|
||||
case "${REGULATORY_DOMAIN}" in
|
||||
${US_CODE})
|
||||
log "Setting US wireless region";;
|
||||
${WW_CODE}|${JP_CODE})
|
||||
if [ -f "bdwlan30_World.bin" ]; then
|
||||
log "Setting WW (world wide) wireless region"
|
||||
BDATA_SOURCE="bdwlan30_World.bin"
|
||||
else
|
||||
log "[WARN] No WW (worldwide) board data file, using US"
|
||||
fi
|
||||
;;
|
||||
"")
|
||||
log "[WARN] region code not found, using US";;
|
||||
*)
|
||||
log "[WARN] Invalid region code, using US";;
|
||||
esac
|
||||
|
||||
# We don't want to rewrite NAND every time we boot so only
|
||||
# change the links if they are wrong.
|
||||
BDATA_LINK="bdwlan30.bin"
|
||||
UTFBDATA_LINK="utfbd30.bin"
|
||||
if [ ! -e "${BDATA_LINK}" ] || ! cmp -s "${BDATA_LINK}" "${BDATA_SOURCE}"; then
|
||||
ln -sf "${BDATA_SOURCE}" "${BDATA_LINK}"
|
||||
ln -sf "${BDATA_SOURCE}" "${UTFBDATA_LINK}"
|
||||
fi
|
||||
)
|
||||
|
||||
# Load the wireless module with the params defined in modprobe.d/qualcomm.conf
|
||||
modprobe wlan
|
||||
|
||||
# Verify the interface is present
|
||||
if [ -d "/sys/class/net/wlan0" ]; then
|
||||
# Create 'wlan1' virtual interface
|
||||
virtwlans.sh
|
||||
else
|
||||
log "[ERROR] Loading qca6564 module"
|
||||
fi
|
||||
|
|
@ -0,0 +1,339 @@
|
|||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_KERNEL_LZO=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_CGROUPS=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_MEMCG_SWAP=y
|
||||
CONFIG_MEMCG_KMEM=y
|
||||
CONFIG_CGROUP_PERF=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_CFS_BANDWIDTH=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_NAMESPACES=y
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_MXC=y
|
||||
CONFIG_SOC_IMX51=y
|
||||
CONFIG_SOC_IMX53=y
|
||||
CONFIG_SOC_IMX6Q=y
|
||||
CONFIG_SOC_IMX6SL=y
|
||||
CONFIG_SOC_IMX6SX=y
|
||||
CONFIG_SOC_IMX6UL=y
|
||||
CONFIG_SOC_IMX7D=y
|
||||
CONFIG_SOC_VF610=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_PCI_IMX6=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_VMSPLIT_2G=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_ARM_IMX6Q_CPUFREQ=y
|
||||
CONFIG_ARM_IMX7D_CPUFREQ=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_PM_DEBUG=y
|
||||
CONFIG_PM_TEST_SUSPEND=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_BRIDGE=y
|
||||
CONFIG_NET_SCHED=y
|
||||
CONFIG_CAN=y
|
||||
CONFIG_CAN_FLEXCAN=y
|
||||
CONFIG_BT=y
|
||||
CONFIG_BT_RFCOMM=y
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_BNEP=y
|
||||
CONFIG_BT_BNEP_MC_FILTER=y
|
||||
CONFIG_BT_BNEP_PROTO_FILTER=y
|
||||
CONFIG_BT_HIDP=y
|
||||
CONFIG_BT_HCIUART=y
|
||||
CONFIG_BT_HCIUART_ATH3K=y
|
||||
CONFIG_BT_HCIUART_3WIRE=y
|
||||
CONFIG_CFG80211=y
|
||||
CONFIG_CFG80211_CERTIFICATION_ONUS=y
|
||||
CONFIG_CFG80211_WEXT=y
|
||||
CONFIG_RFKILL=y
|
||||
CONFIG_RFKILL_INPUT=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
# CONFIG_STANDALONE is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_CMA_SIZE_PERCENTAGE=40
|
||||
CONFIG_CMA_SIZE_SEL_PERCENTAGE=y
|
||||
CONFIG_IMX_WEIM=y
|
||||
CONFIG_CONNECTOR=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_EEPROM_AT24=y
|
||||
CONFIG_EEPROM_AT25=y
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_SCSI_SCAN_ASYNC=y
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
CONFIG_ATA=y
|
||||
CONFIG_SATA_AHCI_PLATFORM=y
|
||||
CONFIG_AHCI_IMX=y
|
||||
CONFIG_PATA_IMX=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
CONFIG_DM_CRYPT=y
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NET_CADENCE is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_SMSC_PHY=y
|
||||
CONFIG_MICREL_PHY=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_BSDCOMP=y
|
||||
CONFIG_PPP_DEFLATE=y
|
||||
CONFIG_PPP_ASYNC=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_USB_NET_CDC_EEM=y
|
||||
CONFIG_USB_NET_CDC_MBIM=y
|
||||
CONFIG_USB_NET_QMI_WWAN=y
|
||||
CONFIG_USB_SIERRA_NET=y
|
||||
CONFIG_ATH_CARDS=y
|
||||
CONFIG_ATH6KL=m
|
||||
CONFIG_ATH6KL_SDIO=m
|
||||
CONFIG_ATH6KL_DEBUG=y
|
||||
CONFIG_ATH6KL_REGDOMAIN=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
CONFIG_KEYBOARD_IMX=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_FUSION_7_10=y
|
||||
CONFIG_TOUCHSCREEN_MC13783=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_MMA8450=y
|
||||
CONFIG_INPUT_DA9063_ONKEY=y
|
||||
CONFIG_INPUT_ISL29023=y
|
||||
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_SERIAL_IMX=y
|
||||
CONFIG_SERIAL_IMX_CONSOLE=y
|
||||
CONFIG_SERIAL_FSL_LPUART=y
|
||||
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
|
||||
CONFIG_FSL_OTP=y
|
||||
# CONFIG_I2C_COMPAT is not set
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
# CONFIG_I2C_HELPER_AUTO is not set
|
||||
CONFIG_I2C_IMX=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_IMX=y
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
CONFIG_SPI_SLAVE=y
|
||||
CONFIG_SPI_SLAVE_TIME=y
|
||||
CONFIG_SPI_SLAVE_SYSTEM_CONTROL=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_DA9063=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_SENSORS_DA9063=y
|
||||
CONFIG_SENSORS_MAG3110=y
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_IMX_THERMAL=y
|
||||
CONFIG_DEVICE_THERMAL=y
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_IMX2_WDT=y
|
||||
CONFIG_MFD_DA9052_I2C=y
|
||||
CONFIG_MFD_DA9063=y
|
||||
CONFIG_MFD_MC13XXX_SPI=y
|
||||
CONFIG_MFD_MC13XXX_I2C=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_REGULATOR_ANATOP=y
|
||||
CONFIG_REGULATOR_DA9052=y
|
||||
CONFIG_REGULATOR_DA9063=y
|
||||
CONFIG_REGULATOR_MC13783=y
|
||||
CONFIG_REGULATOR_MC13892=y
|
||||
CONFIG_REGULATOR_PFUZE100=y
|
||||
CONFIG_MEDIA_SUPPORT=y
|
||||
CONFIG_MEDIA_CAMERA_SUPPORT=y
|
||||
CONFIG_MEDIA_USB_SUPPORT=y
|
||||
CONFIG_USB_VIDEO_CLASS=y
|
||||
# CONFIG_USB_GSPCA is not set
|
||||
CONFIG_V4L_PLATFORM_DRIVERS=y
|
||||
CONFIG_VIDEO_MXC_OUTPUT=y
|
||||
CONFIG_VIDEO_MXC_CAPTURE=y
|
||||
CONFIG_MXC_CAMERA_OV5642=y
|
||||
CONFIG_MXC_CAMERA_OV5640_MIPI=y
|
||||
CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=y
|
||||
CONFIG_VIDEO_MXC_IPU_OUTPUT=y
|
||||
CONFIG_VIDEO_MXC_PXP_V4L2=y
|
||||
CONFIG_SOC_CAMERA=y
|
||||
CONFIG_VIDEO_MX3=y
|
||||
CONFIG_SOC_CAMERA_OV2640=y
|
||||
# CONFIG_VGA_ARB is not set
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_VIVANTE=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MXS=y
|
||||
CONFIG_FB_MXC_SYNC_PANEL=y
|
||||
CONFIG_FB_MXC_MIPI_DSI=y
|
||||
CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
|
||||
CONFIG_FB_MXC_LDB=y
|
||||
CONFIG_FB_MXC_HDMI=y
|
||||
CONFIG_FB_MXC_AD9389=y
|
||||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
CONFIG_LCD_L4F00242T03=y
|
||||
CONFIG_LCD_PLATFORM=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_FB_LOGO_CENTERED=y
|
||||
CONFIG_FB_LOGO_FORCE_SINGLE=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
# CONFIG_SND_PCI is not set
|
||||
# CONFIG_SND_ARM is not set
|
||||
# CONFIG_SND_SPI is not set
|
||||
# CONFIG_SND_USB is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_IMX_SOC=y
|
||||
CONFIG_SND_SOC_IMX_SGTL5000=y
|
||||
CONFIG_SND_SOC_IMX_HDMI=y
|
||||
CONFIG_HID_MULTITOUCH=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_OTG=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_ACM=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_CHIPIDEA=y
|
||||
CONFIG_USB_CHIPIDEA_UDC=y
|
||||
CONFIG_USB_CHIPIDEA_HOST=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_QUALCOMM=y
|
||||
CONFIG_USB_SERIAL_SIERRAWIRELESS=y
|
||||
CONFIG_USB_SERIAL_OPTION=y
|
||||
CONFIG_USB_MXS_PHY=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ETH=m
|
||||
CONFIG_USB_MASS_STORAGE=m
|
||||
CONFIG_USB_G_SERIAL=m
|
||||
CONFIG_USB_CDC_COMPOSITE=m
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMC_SDHCI_ESDHC_IMX=y
|
||||
CONFIG_MXC_IPU=y
|
||||
CONFIG_MXC_MIPI_CSI2=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_DA9063=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
|
||||
CONFIG_RTC_DRV_DA9063=y
|
||||
CONFIG_RTC_DRV_MC13XXX=y
|
||||
CONFIG_RTC_DRV_MXC=y
|
||||
CONFIG_RTC_DRV_SNVS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_MXC_PXP_V2=y
|
||||
CONFIG_IMX_SDMA=y
|
||||
CONFIG_MXS_DMA=y
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_PWM=y
|
||||
CONFIG_PWM_IMX=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_OVERLAY_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3_ACL=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NLS_DEFAULT="cp437"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_15=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_DYNAMIC_DEBUG=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_ARM_UNWIND is not set
|
||||
CONFIG_SECURITYFS=y
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_XTS=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=y
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=y
|
||||
CONFIG_FONTS=y
|
||||
|
|
@ -1,11 +1,26 @@
|
|||
CONFIG_KERNEL_LZO=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_CGROUPS=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_MEMCG_SWAP=y
|
||||
CONFIG_MEMCG_KMEM=y
|
||||
CONFIG_CGROUP_PERF=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_CFS_BANDWIDTH=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_NAMESPACES=y
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_RELAY=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_RD_LZMA is not set
|
||||
|
|
@ -32,6 +47,7 @@ CONFIG_PREEMPT=y
|
|||
CONFIG_AEABI=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
|
|
@ -155,6 +171,7 @@ CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
|
|||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_MCA_CC6UL_PWRKEY=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_SERIAL_IMX=y
|
||||
|
|
@ -169,6 +186,9 @@ CONFIG_SPI=y
|
|||
CONFIG_SPI_GPIO=y
|
||||
CONFIG_SPI_IMX=y
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
CONFIG_SPI_SLAVE=y
|
||||
CONFIG_SPI_SLAVE_TIME=y
|
||||
CONFIG_SPI_SLAVE_SYSTEM_CONTROL=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_MCA_CC6UL=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
|
|
@ -293,6 +313,7 @@ CONFIG_EXT4_FS=y
|
|||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_OVERLAY_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_UBIFS_FS=y
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (C) 2016 Digi International
|
||||
# Copyright (C) 2016, 2017 Digi International
|
||||
|
||||
require recipes-kernel/linux/linux-dey.inc
|
||||
require recipes-kernel/linux/linux-dtb.inc
|
||||
|
|
@ -6,4 +6,4 @@ require recipes-kernel/linux/linux-dtb.inc
|
|||
SRCBRANCH = "v4.1/dey-2.2/maint"
|
||||
SRCREV = "${AUTOREV}"
|
||||
|
||||
COMPATIBLE_MACHINE = "(ccimx6ul)"
|
||||
COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul)"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,110 @@
|
|||
# Adds AWS IoT device SDK for embedded C configuration
|
||||
#
|
||||
|
||||
# Customer specific MQTT HOST
|
||||
AWS_IOT_MQTT_HOST ?= ""
|
||||
|
||||
# Default port for MQTT/S
|
||||
AWS_IOT_MQTT_PORT ?= "8883"
|
||||
|
||||
# Thing Name of the Shadow the device is associated with
|
||||
AWS_IOT_MY_THING_NAME ?= "AWS-IoT-C-SDK"
|
||||
|
||||
# Root CA file name
|
||||
AWS_IOT_ROOT_CA_FILENAME ?= "rootCA.crt"
|
||||
|
||||
# Device signed certificate file name
|
||||
AWS_IOT_CERTIFICATE_FILENAME ?= "cert.pem"
|
||||
|
||||
# Device private key filename
|
||||
AWS_IOT_PRIVATE_KEY_FILENAME ?= "privkey.pem"
|
||||
|
||||
# MQTT PubSub
|
||||
|
||||
# Any time a message is sent out through the MQTT layer. The message is copied
|
||||
# into this buffer anytime a publish is done.
|
||||
# This will also be used in the case of Thing Shadow
|
||||
AWS_IOT_MQTT_TX_BUF_LEN ?= "512"
|
||||
|
||||
# Any message that comes into the device should be less than this buffer size.
|
||||
# If a received message is bigger than this buffer size the message will be
|
||||
# dropped
|
||||
AWS_IOT_MQTT_RX_BUF_LEN ?= "512"
|
||||
|
||||
# Maximum number of topic filters the MQTT client can handle at any given time.
|
||||
# This should be increased appropriately when using Thing Shadow
|
||||
AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS ?= "5"
|
||||
|
||||
# Thing Shadow specific configs
|
||||
|
||||
# At any given time we will wait for this many responses.
|
||||
# This will correlate to the rate at which the shadow actions are requested
|
||||
MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME ?= "10"
|
||||
|
||||
# We could perform shadow action on any thing Name and this is maximum Thing
|
||||
# Names we can act on at any given time
|
||||
MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME ?= "10"
|
||||
|
||||
# These are the max tokens that is expected to be in the Shadow JSON document.
|
||||
# It includes the metadata that gets published
|
||||
MAX_JSON_TOKEN_EXPECTED ?= "120"
|
||||
|
||||
# The Thing Name should not be bigger than this value. Modify this if the Thing
|
||||
# Name needs to be bigger
|
||||
MAX_SIZE_OF_THING_NAME ?= "20"
|
||||
|
||||
# Auto Reconnect specific config
|
||||
|
||||
# Minimum time before the First reconnect attempt is made as part of the
|
||||
# exponential back-off algorithm (milliseconds)
|
||||
AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL ?= "1000"
|
||||
|
||||
# Maximum time interval after which exponential back-off will stop attempting
|
||||
# to reconnect (milliseconds)
|
||||
AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL ?= "128000"
|
||||
|
||||
# Logging level control: error, warn, info, debug, trace.
|
||||
AWS_IOT_LOGGING_LEVEL ?= "debug"
|
||||
|
||||
def get_log_level(d):
|
||||
levels = ['error', 'warn', 'info', 'debug', 'trace']
|
||||
log_flags = ""
|
||||
|
||||
log_level = d.getVar('AWS_IOT_LOGGING_LEVEL', True)
|
||||
if log_level == 'none':
|
||||
return ""
|
||||
if log_level not in levels:
|
||||
log_level = "debug"
|
||||
d.setVar('AWS_IOT_LOGGING_LEVEL', log_level)
|
||||
|
||||
log_index = levels.index(log_level)
|
||||
for i, val in enumerate(levels):
|
||||
log_flags = log_flags + "-DENABLE_IOT_" + val.upper() + " "
|
||||
if i == log_index:
|
||||
break;
|
||||
|
||||
return log_flags
|
||||
|
||||
#######################
|
||||
# AWS Greengrass Core #
|
||||
#######################
|
||||
|
||||
#
|
||||
# Verisign root CA server certificate used to authenticate the AWS IoT server.
|
||||
#
|
||||
# https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem
|
||||
#
|
||||
AWS_GGCORE_ROOT_CA ?= "aws-root-ca.pem"
|
||||
|
||||
# Greengrass core device certificate
|
||||
AWS_GGCORE_CERTIFICATE ?= "gg-core.pem"
|
||||
|
||||
# Greengrass core device private key
|
||||
AWS_GGCORE_PRIVATE_KEY ?= "gg-core.key"
|
||||
|
||||
# Greengrass core Thing ARN
|
||||
AWS_GGCORE_THING_ARN ?= ""
|
||||
|
||||
# AWS IoT endpoint (check your account)
|
||||
# CLI: aws iot describe-endpoint
|
||||
AWS_GGCORE_IOT_HOST ?= ""
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
DISTRO = "dey"
|
||||
DISTRO_NAME = "Digi Embedded Yocto"
|
||||
DISTRO_VERSION = "2.2-r1"
|
||||
DISTRO_VERSION = "2.2-r2"
|
||||
DISTRO_CODENAME = "morty"
|
||||
SDK_VENDOR = "-deysdk"
|
||||
SDK_VERSION := "${@'${DISTRO_VERSION}'}"
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ LAYERDEPENDS_digi-dey += "openembedded-layer networking-layer webserver qt5-laye
|
|||
DIGI_EULA_FILE = "${LAYERDIR}/DIGI_EULA"
|
||||
DIGI_OPEN_EULA_FILE = "${LAYERDIR}/DIGI_OPEN_EULA"
|
||||
|
||||
# Additional license directories
|
||||
LICENSE_PATH += "${LAYERDIR}/custom-licenses"
|
||||
|
||||
# Digi mirror for packages vanished upstream
|
||||
DIGI_MIRROR ?= "ftp://ftp1.digi.com/support/digiembeddedyocto/mirror/"
|
||||
MIRRORS += "\
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
Copyright (c) 2015 Atmel Corporation. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. 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.
|
||||
|
||||
3. The name of Atmel may not be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
4. This software may only be redistributed and used in connection with an
|
||||
Atmel integrated circuit.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY ATMEL "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
|
||||
EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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.
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# ***************************************************************************
|
||||
# Copyright (c) 2017 Digi International Inc.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
|
||||
#
|
||||
# ***************************************************************************
|
||||
|
||||
SUBDIRS := src
|
||||
|
||||
all: $(SUBDIRS)
|
||||
|
||||
.PHONY: $(SUBDIRS)
|
||||
$(SUBDIRS):
|
||||
$(MAKE) -C $@
|
||||
|
||||
.PHONY: clean install
|
||||
clean install:
|
||||
for a in $(SUBDIRS); do $(MAKE) -C $$a $@; done
|
||||
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
# ***************************************************************************
|
||||
# Copyright (c) 2017 Digi International Inc.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
|
||||
#
|
||||
# ***************************************************************************
|
||||
# Use GNU C Compiler.
|
||||
CC ?= gcc
|
||||
|
||||
# Generated Library name.
|
||||
NAME := awsiotsdk
|
||||
|
||||
# Location of Source Code.
|
||||
SRC = .
|
||||
|
||||
#IoT client directory.
|
||||
IOT_CLIENT_DIR = $(SRC)/..
|
||||
|
||||
PLATFORM_DIR = $(IOT_CLIENT_DIR)/platform/linux/mbedtls
|
||||
PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/platform/linux/common
|
||||
INSTALL_HEADERS_DIR = /usr/include/awsiotsdk
|
||||
|
||||
CFLAGS += -I $(IOT_CLIENT_DIR)/include
|
||||
CFLAGS += -I $(IOT_CLIENT_DIR)/external_libs/jsmn
|
||||
CFLAGS += -I $(PLATFORM_COMMON_DIR)
|
||||
CFLAGS += -I $(PLATFORM_DIR)
|
||||
CFLAGS += -Wall -g
|
||||
CFLAGS += $(LOG_FLAGS)
|
||||
CFLAGS += $(shell pkg-config --cflags mbedtls)
|
||||
|
||||
# Libraries to Link.
|
||||
LIBS += $(shell pkg-config --libs --static mbedtls)
|
||||
|
||||
# Linking Flags.
|
||||
LDFLAGS += $(DFLAGS)
|
||||
|
||||
# Target output to generate.
|
||||
SRCS += $(wildcard $(SRC)/*.c)
|
||||
SRCS += $(wildcard $(IOT_CLIENT_DIR)/external_libs/jsmn/*.c)
|
||||
SRCS += $(wildcard $(PLATFORM_DIR)/*.c)
|
||||
SRCS += $(wildcard $(PLATFORM_COMMON_DIR)/*.c)
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
.PHONY: all
|
||||
all: lib$(NAME).a
|
||||
|
||||
lib$(NAME).a: $(OBJS)
|
||||
$(AR) -rcs $@ $^
|
||||
|
||||
.PHONY: install
|
||||
install: lib$(NAME).a
|
||||
# Install library and pkg-config file.
|
||||
install -d $(DESTDIR)/usr/lib/pkgconfig
|
||||
install -m 0644 lib$(NAME).a $(DESTDIR)/usr/lib/
|
||||
install -m 0644 ../awsiotsdk.pc $(DESTDIR)/usr/lib/pkgconfig/
|
||||
# Install header files.
|
||||
install -d $(DESTDIR)$(INSTALL_HEADERS_DIR)
|
||||
install -m 0644 $(IOT_CLIENT_DIR)/include/*.h $(DESTDIR)$(INSTALL_HEADERS_DIR)/
|
||||
install -m 0644 $(IOT_CLIENT_DIR)/external_libs/jsmn/*.h $(DESTDIR)$(INSTALL_HEADERS_DIR)/
|
||||
install -m 0644 $(PLATFORM_COMMON_DIR)/*.h $(DESTDIR)$(INSTALL_HEADERS_DIR)/
|
||||
install -m 0644 $(PLATFORM_DIR)/*.h $(DESTDIR)$(INSTALL_HEADERS_DIR)/
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-rm -f lib$(NAME).a $(OBJS)
|
||||
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
* A copy of the License is located at
|
||||
*
|
||||
* http://aws.amazon.com/apache2.0
|
||||
*
|
||||
* or in the "license" file accompanying this file. This file 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file aws_iot_config.h
|
||||
* @brief AWS IoT specific configuration file
|
||||
*/
|
||||
|
||||
#ifndef SRC_SHADOW_IOT_SHADOW_CONFIG_H_
|
||||
#define SRC_SHADOW_IOT_SHADOW_CONFIG_H_
|
||||
|
||||
/* Get from console */
|
||||
/* ================================================= */
|
||||
/* Customer specific MQTT HOST. The same will be used for Thing Shadow */
|
||||
#define AWS_IOT_MQTT_HOST "##AWS_IOT_MQTT_HOST##"
|
||||
/* Default port for MQTT/S */
|
||||
#define AWS_IOT_MQTT_PORT ##AWS_IOT_MQTT_PORT##
|
||||
/* Thing Name of the Shadow this device is associated with */
|
||||
#define AWS_IOT_MY_THING_NAME "##AWS_IOT_MY_THING_NAME##"
|
||||
/* MQTT client ID should be unique for every device */
|
||||
#define AWS_IOT_MQTT_CLIENT_ID AWS_IOT_MY_THING_NAME
|
||||
/* Root CA file name */
|
||||
#define AWS_IOT_ROOT_CA_FILENAME "##AWS_IOT_ROOT_CA_FILENAME##"
|
||||
/* Device signed certificate file name */
|
||||
#define AWS_IOT_CERTIFICATE_FILENAME "##AWS_IOT_CERTIFICATE_FILENAME##"
|
||||
/* Device private key filename */
|
||||
#define AWS_IOT_PRIVATE_KEY_FILENAME "##AWS_IOT_PRIVATE_KEY_FILENAME##"
|
||||
/* ================================================= */
|
||||
|
||||
/* MQTT PubSub */
|
||||
/* ================================================= */
|
||||
/* Any time a message is sent out through the MQTT layer. The message is copied
|
||||
* into this buffer anytime a publish is done.
|
||||
* This will also be used in the case of Thing Shadow */
|
||||
#define AWS_IOT_MQTT_TX_BUF_LEN ##AWS_IOT_MQTT_TX_BUF_LEN##
|
||||
/* Any message that comes into the device should be less than this buffer size.
|
||||
* If a received message is bigger than this buffer size the message will be
|
||||
* dropped. */
|
||||
#define AWS_IOT_MQTT_RX_BUF_LEN ##AWS_IOT_MQTT_RX_BUF_LEN##
|
||||
/* Maximum number of topic filters the MQTT client can handle at any given time.
|
||||
* This should be increased appropriately when using Thing Shadow */
|
||||
#define AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS ##AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS##
|
||||
|
||||
/* Thing Shadow specific configs */
|
||||
/* Maximum size of the Shadow buffer to store the received Shadow message */
|
||||
#define SHADOW_MAX_SIZE_OF_RX_BUFFER AWS_IOT_MQTT_RX_BUF_LEN + 1
|
||||
/* Maximum size of the Unique Client Id.
|
||||
* For More info on the Client Id refer \ref response "Acknowledgments" */
|
||||
#define MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES 80
|
||||
/* This is size of the extra sequence number that will be appended to the
|
||||
* Unique client Id */
|
||||
#define MAX_SIZE_CLIENT_ID_WITH_SEQUENCE MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES + 10
|
||||
/* This is size of the the total clientToken key and value pair in the JSON */
|
||||
#define MAX_SIZE_CLIENT_TOKEN_CLIENT_SEQUENCE MAX_SIZE_CLIENT_ID_WITH_SEQUENCE + 20
|
||||
/* At any given time we will wait for this many responses.
|
||||
* This will correlate to the rate at which the shadow actions are requested */
|
||||
#define MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME ##MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME##
|
||||
/* We could perform shadow action on any thing Name and this is maximum Thing
|
||||
* Names we can act on at any given time */
|
||||
#define MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME ##MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME##
|
||||
/* These are the max tokens that is expected to be in the Shadow JSON document.
|
||||
* It includes the metadata that gets published */
|
||||
#define MAX_JSON_TOKEN_EXPECTED ##MAX_JSON_TOKEN_EXPECTED##
|
||||
/* All shadow actions have to be published or subscribed to a topic which is of
|
||||
* the format $aws/things/{thingName}/shadow/update/accepted.
|
||||
* This refers to the size of the topic without the Thing Name */
|
||||
#define MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME 60
|
||||
/* The Thing Name should not be bigger than this value. Modify this if the
|
||||
* Thing Name needs to be bigger */
|
||||
#define MAX_SIZE_OF_THING_NAME ##MAX_SIZE_OF_THING_NAME##
|
||||
/* This size includes the length of topic with Thing Name */
|
||||
#define MAX_SHADOW_TOPIC_LENGTH_BYTES MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME + MAX_SIZE_OF_THING_NAME
|
||||
/* ================================================= */
|
||||
|
||||
/* Auto Reconnect specific config */
|
||||
/* ================================================= */
|
||||
/* Minimum time before the First reconnect attempt is made as part of the
|
||||
* exponential back-off algorithm */
|
||||
#define AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL ##AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL##
|
||||
/* Maximum time interval after which exponential back-off will stop attempting
|
||||
* to reconnect */
|
||||
#define AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL ##AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL##
|
||||
/* ================================================= */
|
||||
|
||||
#endif /* SRC_SHADOW_IOT_SHADOW_CONFIG_H_ */
|
||||
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: awsiotsdk
|
||||
Description: SDK for connecting to AWS IoT from a device using embedded C
|
||||
Version: 2.1.1
|
||||
|
||||
Requires.private: mbedtls
|
||||
Libs: -L${libdir} -lawsiotsdk
|
||||
Cflags: -I${includedir}/awsiotsdk -I${includedir}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
# Copyright (C) 2017 Digi International.
|
||||
|
||||
SUMMARY = "SDK for connecting to AWS IoT from a device using embedded C"
|
||||
HOMEPAGE = "https://github.com/aws/aws-iot-device-sdk-embedded-C"
|
||||
SECTION = "base"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=acc7a1bf87c055789657b148939e4b40"
|
||||
|
||||
DEPENDS = "mbedtls"
|
||||
|
||||
SRC_URI = " \
|
||||
https://github.com/aws/aws-iot-device-sdk-embedded-C/archive/v${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
|
||||
file://aws_iot_config.h.template \
|
||||
file://awsiotsdk.pc \
|
||||
file://Makefile \
|
||||
file://Makefile.lib \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "2c415af16bbd68440b62d71a7e9775c5"
|
||||
SRC_URI[sha256sum] = "74d434b3258654cea048b20eb52d4fc627f5c87e8727ce180a1d529e3285a97e"
|
||||
|
||||
S = "${WORKDIR}/aws-iot-device-sdk-embedded-C-${PV}"
|
||||
|
||||
inherit aws-iot pkgconfig
|
||||
|
||||
EXTRA_OEMAKE += "'LOG_FLAGS=${@get_log_level(d)}'"
|
||||
|
||||
do_configure() {
|
||||
cp -f ${WORKDIR}/awsiotsdk.pc ${S}
|
||||
|
||||
# Copy and update the configuration header file.
|
||||
cp -f ${WORKDIR}/aws_iot_config.h.template ${S}/include/aws_iot_config.h
|
||||
sed -i -e "s,##AWS_IOT_MQTT_HOST##,${AWS_IOT_MQTT_HOST},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_MQTT_PORT##,${AWS_IOT_MQTT_PORT},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_MY_THING_NAME##,${AWS_IOT_MY_THING_NAME},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_ROOT_CA_FILENAME##,${AWS_IOT_ROOT_CA_FILENAME},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_CERTIFICATE_FILENAME##,${AWS_IOT_CERTIFICATE_FILENAME},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_PRIVATE_KEY_FILENAME##,${AWS_IOT_PRIVATE_KEY_FILENAME},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_MQTT_TX_BUF_LEN##,${AWS_IOT_MQTT_TX_BUF_LEN},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_MQTT_RX_BUF_LEN##,${AWS_IOT_MQTT_RX_BUF_LEN},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS##,${AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME##,${MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME##,${MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##MAX_JSON_TOKEN_EXPECTED##,${MAX_JSON_TOKEN_EXPECTED},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##MAX_SIZE_OF_THING_NAME##,${MAX_SIZE_OF_THING_NAME},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL##,${AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL},g" "${S}/include/aws_iot_config.h"
|
||||
sed -i -e "s,##AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL##,${AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL},g" "${S}/include/aws_iot_config.h"
|
||||
|
||||
# Copy the Makefiles.
|
||||
cp -f ${WORKDIR}/Makefile ${S}
|
||||
cp -f ${WORKDIR}/Makefile.lib ${S}/src/Makefile
|
||||
}
|
||||
|
||||
do_install() {
|
||||
oe_runmake DESTDIR=${D} install
|
||||
|
||||
# Install certificates only if they exist.
|
||||
if [ -f "${AWS_IOT_CERTS_DIR}/${AWS_IOT_ROOT_CA_FILENAME}" ] && \
|
||||
[ -f "${AWS_IOT_CERTS_DIR}/${AWS_IOT_CERTIFICATE_FILENAME}" ] && \
|
||||
[ -f "${AWS_IOT_CERTS_DIR}/${AWS_IOT_PRIVATE_KEY_FILENAME}" ]; then
|
||||
install -d ${D}${sysconfdir}/ssl/certs
|
||||
install -m 0644 "${AWS_IOT_CERTS_DIR}/${AWS_IOT_ROOT_CA_FILENAME}" ${D}${sysconfdir}/ssl/certs/
|
||||
install -m 0644 "${AWS_IOT_CERTS_DIR}/${AWS_IOT_CERTIFICATE_FILENAME}" ${D}${sysconfdir}/ssl/certs/
|
||||
install -m 0644 "${AWS_IOT_CERTS_DIR}/${AWS_IOT_PRIVATE_KEY_FILENAME}" ${D}${sysconfdir}/ssl/certs/
|
||||
fi
|
||||
}
|
||||
|
||||
PACKAGES =+ "${PN}-cert"
|
||||
|
||||
FILES_${PN}-cert = "${sysconfdir}/ssl/certs/"
|
||||
|
||||
ALLOW_EMPTY_${PN} = "1"
|
||||
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
From: Javier Viguera <javier.viguera@digi.com>
|
||||
Date: Wed, 7 Jun 2017 20:44:56 +0200
|
||||
Subject: [PATCH] greengrassd: remove bashisms in launcher shell script
|
||||
|
||||
So it runs properly in other Posix shells (like the one in Busybox)
|
||||
|
||||
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
|
||||
---
|
||||
greengrassd | 28 ++++++++++++++--------------
|
||||
1 file changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/greengrassd b/greengrassd
|
||||
index cadaa6b0101e..e24422af2f3d 100755
|
||||
--- a/greengrassd
|
||||
+++ b/greengrassd
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/usr/bin/env bash
|
||||
+#!/bin/sh
|
||||
|
||||
##########Environment Requirement for Greengrass Daemon##########
|
||||
# by default, the daemon assumes it's going to be launched from a directory
|
||||
@@ -38,19 +38,19 @@ setup() {
|
||||
mkdir -p $GGC_ROOT_FS
|
||||
|
||||
# Mask greengrass directory for containers
|
||||
- mknod $GGC_ROOT_FS/greengrass c 1 3 &>/dev/null || true
|
||||
+ mknod $GGC_ROOT_FS/greengrass c 1 3 >/dev/null 2>&1 || true
|
||||
|
||||
}
|
||||
|
||||
validatePlatformSecurity() {
|
||||
|
||||
- if [[ -f $FS_SETTINGS/protected_hardlinks &&
|
||||
- -f $FS_SETTINGS/protected_symlinks ]]; then
|
||||
+ if [ -f $FS_SETTINGS/protected_hardlinks ] &&
|
||||
+ [ -f $FS_SETTINGS/protected_symlinks ]; then
|
||||
|
||||
PROT_HARDLINK_VAL=$(cat $FS_SETTINGS/protected_hardlinks)
|
||||
PROT_SOFTLINK_VAL=$(cat $FS_SETTINGS/protected_symlinks)
|
||||
|
||||
- if [[ "$PROT_HARDLINK_VAL" -ne 1 || "$PROT_SOFTLINK_VAL" -ne 1 ]]; then
|
||||
+ if [ "$PROT_HARDLINK_VAL" -ne 1 ] || [ "$PROT_SOFTLINK_VAL" -ne 1 ]; then
|
||||
echo "AWS Greengrass detected insecure OS configuration: No hardlink/softlink protection enabled." | tee -a $CRASH_LOG
|
||||
exit 1
|
||||
fi
|
||||
@@ -127,7 +127,7 @@ validateEnvironment() {
|
||||
|
||||
start() {
|
||||
setup
|
||||
- if [[ $INSECURE -ne 1 ]]; then
|
||||
+ if [ "${INSECURE}" != "1" ]; then
|
||||
validatePlatformSecurity
|
||||
fi
|
||||
|
||||
@@ -139,7 +139,7 @@ start() {
|
||||
then
|
||||
pid=$!
|
||||
# sleep 5 seconds to wait for daemon to start or exit
|
||||
- for i in {1..5}; do
|
||||
+ for i in $(seq 1 5); do
|
||||
echo -n "."
|
||||
sleep 1
|
||||
done
|
||||
@@ -147,10 +147,10 @@ start() {
|
||||
if [ -e "/proc/$pid" ]
|
||||
then
|
||||
echo "$pid" > $PID_FILE
|
||||
- echo -e "\e[0;32mGreengrass daemon started with PID: $pid\e[0m"
|
||||
+ printf "\e[0;32mGreengrass daemon started with PID: $pid\e[0m\n"
|
||||
else
|
||||
echo "Greengrass daemon $pid failed to start"
|
||||
- echo -e "\e[0;31m$(cat $CRASH_LOG)\e[0m"
|
||||
+ printf "\e[0;31m$(cat $CRASH_LOG)\e[0m\n"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
@@ -179,7 +179,7 @@ stop() {
|
||||
# If the pid no longer exists, we're done, remove the pid file and exit. Otherwise, just increment the loop counter
|
||||
if [ ! -e "/proc/$PID" ]; then
|
||||
rm $PID_FILE
|
||||
- echo -e "\nStopped greengrass daemon, exiting with success"
|
||||
+ printf "\nStopped greengrass daemon, exiting with success\n"
|
||||
break
|
||||
else
|
||||
total_sleep_seconds=$(($total_sleep_seconds+1))
|
||||
@@ -194,7 +194,7 @@ stop() {
|
||||
|
||||
if [ $total_sleep_seconds -ge $MAX_DAEMON_KILL_WAIT_SECONDS ]; then
|
||||
# If we are here, we never exited in the previous loop and the pid still exists. Exit with failure.
|
||||
- echo -e "\nProcess with pid $PID still alive after timeout of $MAX_DAEMON_KILL_WAIT_SECONDS seconds. Unable to kill process, exiting with failure."
|
||||
+ printf "\nProcess with pid $PID still alive after timeout of $MAX_DAEMON_KILL_WAIT_SECONDS seconds. Unable to kill process, exiting with failure.\n"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
@@ -204,16 +204,16 @@ usage() {
|
||||
echo ""
|
||||
echo "Usage: $0 [FLAGS] {start|stop|restart}"
|
||||
echo ""
|
||||
- echo -e "[FLAGS]: -i, --insecure \t Run GGC in insecure mode without hardlink/softlink protection, (highly discouraged for production use)"
|
||||
+ printf "[FLAGS]: -i, --insecure \t Run GGC in insecure mode without hardlink/softlink protection, (highly discouraged for production use)\n"
|
||||
echo ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
-if [[ $# -eq 0 ]]; then
|
||||
+if [ $# -eq 0 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
-while [[ $# -gt 0 ]]
|
||||
+while [ $# -gt 0 ]
|
||||
do
|
||||
key="$1"
|
||||
case $key in
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2017, Digi International Inc.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, you can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# Description: Wrapper bootscript for AWS Greengrass core
|
||||
#
|
||||
|
||||
GG_INSTALL_DIR="##GG_INSTALL_DIR##"
|
||||
GG_LAUNCHER="${GG_INSTALL_DIR}/greengrassd"
|
||||
|
||||
case "${1}" in
|
||||
start | stop | restart)
|
||||
${GG_LAUNCHER} ${1}
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
# Copyright (C) 2017, Digi International Inc.
|
||||
|
||||
SUMMARY = "AWS IoT Greengrass core"
|
||||
HOMEPAGE = "https://aws.amazon.com/greengrass/"
|
||||
#
|
||||
# The package includes different licenses:
|
||||
#
|
||||
# [Apache-2.0]
|
||||
# LICENSE/attributions/github_aws_aws_sdk_go_License.txt
|
||||
# LICENSE/attributions/github_coreos_go_systemd_License.txt
|
||||
# LICENSE/attributions/github_docker_docker_License.txt
|
||||
# LICENSE/attributions/github_docker_go_units_License.txt
|
||||
# LICENSE/attributions/github_go_ini_ini_License.txt
|
||||
# LICENSE/attributions/github_jmespath_go_jmespath_License.txt
|
||||
# LICENSE/attributions/github_opencontainers_runc_License.txt
|
||||
# LICENSE/attributions/github_opencontainers_runtime_spec_License.txt
|
||||
# LICENSE/attributions/github_pquerna_ffjson_License.txt
|
||||
# LICENSE/attributions/github_vishvananda_netlink_License.txt
|
||||
# [BSD-2-Clause]
|
||||
# LICENSE/attributions/github_godbus_dbus_License.txt
|
||||
# LICENSE/attributions/github_huin_gobinarytest_License.txt
|
||||
# LICENSE/attributions/github_seccomp_libseccomp_golang_License.txt
|
||||
# LICENSE/attributions/github_syndtr_gocapability_License.txt
|
||||
# [BSD-3-Clause]
|
||||
# LICENSE/attributions/github_golang_protobuf_License.txt
|
||||
# LICENSE/attributions/github_jeffallen_mqtt_License.txt
|
||||
# LICENSE/attributions/Golang_License.txt
|
||||
# [MIT]
|
||||
# LICENSE/attributions/github_huin_mqtt_License.txt
|
||||
# LICENSE/attributions/github_mattn_go_sqlite3_License.txt
|
||||
# LICENSE/attributions/github_nu7hatch_gouuid_License.txt
|
||||
# LICENSE/attributions/github_Sirupsen_logrus_License.txt
|
||||
# LICENSE/attributions/github_urfave_cli_License.txt
|
||||
# LICENSE/attributions/github_yosssi_gmq_License.txt
|
||||
# [PD]
|
||||
# LICENSE/attributions/sqlite_org_License.txt
|
||||
# [Proprietary]
|
||||
# LICENSE/Greengrass AWS SW License (IoT additiona) vr6.txt
|
||||
#
|
||||
LICENSE = "Apache-2.0 | BSD-2-Clause | BSD-3-Clause | MIT | PD | Proprietary"
|
||||
LIC_FILES_CHKSUM = " \
|
||||
file://LICENSE/attributions/github_aws_aws_sdk_go_License.txt;md5=d273d63619c9aeaf15cdaf76422c4f87 \
|
||||
file://LICENSE/attributions/github_coreos_go_systemd_License.txt;md5=715f3348ed8b9bf4fac3b08133384a4d \
|
||||
file://LICENSE/attributions/github_docker_docker_License.txt;md5=bba4ee48af378e39b452d742d29c710b \
|
||||
file://LICENSE/attributions/github_docker_go_units_License.txt;md5=bb99db20f1c48c2c4952c27c72855e36 \
|
||||
file://LICENSE/attributions/github_godbus_dbus_License.txt;md5=b03a62440372a9acf9692ad365932c87 \
|
||||
file://LICENSE/attributions/github_go_ini_ini_License.txt;md5=715f3348ed8b9bf4fac3b08133384a4d \
|
||||
file://LICENSE/attributions/github_golang_protobuf_License.txt;md5=16fe162f7848190010b6ec7bfaac030a \
|
||||
file://LICENSE/attributions/github_huin_gobinarytest_License.txt;md5=f2b3138d9d314bccf5297dea7e3e6d14 \
|
||||
file://LICENSE/attributions/github_huin_mqtt_License.txt;md5=12fd125064676697934b7d8c09bed0e8 \
|
||||
file://LICENSE/attributions/github_jeffallen_mqtt_License.txt;md5=b7269d52765d477e10f319c19d8a9d33 \
|
||||
file://LICENSE/attributions/github_jmespath_go_jmespath_License.txt;md5=640d33f0070c9dc3a194d2ed7db02974 \
|
||||
file://LICENSE/attributions/github_mattn_go_sqlite3_License.txt;md5=948f36a2300ac729e60416063190f664 \
|
||||
file://LICENSE/attributions/github_nu7hatch_gouuid_License.txt;md5=6b18748dcc29fda05fa5aaef44d517fd \
|
||||
file://LICENSE/attributions/github_opencontainers_runc_License.txt;md5=587c01b2dcc5dc3b4bed51b918c64731 \
|
||||
file://LICENSE/attributions/github_opencontainers_runtime_spec_License.txt;md5=ef95ed297310c3d09ba16c06d5e161a5 \
|
||||
file://LICENSE/attributions/github_pquerna_ffjson_License.txt;md5=d273d63619c9aeaf15cdaf76422c4f87 \
|
||||
file://LICENSE/attributions/github_seccomp_libseccomp_golang_License.txt;md5=9205c4c469bfb9d3a63f346539ee445b \
|
||||
file://LICENSE/attributions/github_Sirupsen_logrus_License.txt;md5=29baae91637760ae68feb57ca93e5a0a \
|
||||
file://LICENSE/attributions/github_syndtr_gocapability_License.txt;md5=321f58fa53a0b1bb9a887f14660d436b \
|
||||
file://LICENSE/attributions/github_urfave_cli_License.txt;md5=f1f14a2449300559aed90bedc36a71ed \
|
||||
file://LICENSE/attributions/github_vishvananda_netlink_License.txt;md5=c95fd0efd62139c155e956a448df8fd6 \
|
||||
file://LICENSE/attributions/github_yosssi_gmq_License.txt;md5=2509f45544da1ecce869ce2de1aa44dd \
|
||||
file://LICENSE/attributions/Golang_License.txt;md5=3d7ed06383c65a3161b36c6a0b0b98f5 \
|
||||
file://LICENSE/attributions/sqlite_org_License.txt;md5=380e2694a297aa32879ca2ae9c6c029b \
|
||||
"
|
||||
|
||||
# Bitbake does not support spaces in filenames, but GG License does have spaces,
|
||||
# so workaround the problem by renaming the file before using it.
|
||||
GG_LIC_FILENAME = "Greengrass AWS SW License (IoT additiona) vr6.txt"
|
||||
GG_LIC_FILENAME_NOSPACES = "${@d.getVar('GG_LIC_FILENAME', True).replace(' ','_')}"
|
||||
LIC_FILES_CHKSUM += "file://LICENSE/${GG_LIC_FILENAME_NOSPACES};md5=7df5bf535d02b2f83c260250fe330b6c"
|
||||
|
||||
SRC_URI = " \
|
||||
http:///not/exist/greengrass-linux-armv7l-${PV}.tar.gz \
|
||||
file://greengrass-init \
|
||||
file://0001-greengrassd-remove-bashisms-in-launcher-shell-script.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "893cf23f3e645d6cfe6975ea55b8b458"
|
||||
SRC_URI[sha256sum] = "aa71facd21e515f6e98d4aaec873bb9bf9490552df3466ed57c0aef5cc8bef4a"
|
||||
|
||||
GG_TARBALL_LOCAL_PATH ?= ""
|
||||
|
||||
# The tarball is only available for downloading after registration, so provide
|
||||
# a PREMIRROR to a local directory that can be configured in the project's
|
||||
# local.conf file using GG_TARBALL_LOCAL_PATH variable.
|
||||
python() {
|
||||
gg_tarball_local_path = d.getVar('GG_TARBALL_LOCAL_PATH', True)
|
||||
if gg_tarball_local_path:
|
||||
premirrors = d.getVar('PREMIRRORS', True)
|
||||
d.setVar('PREMIRRORS', "http:///not/exist/greengrass.* file://%s \\n %s" % (gg_tarball_local_path, premirrors))
|
||||
}
|
||||
|
||||
S = "${WORKDIR}/${BPN}"
|
||||
|
||||
inherit aws-iot update-rc.d useradd
|
||||
|
||||
GG_USESYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'yes', 'no', d)}"
|
||||
|
||||
# Rename GG license file
|
||||
do_unpack[postfuncs] += "rename_license"
|
||||
rename_license() {
|
||||
cd ${S}/LICENSE
|
||||
mv "${GG_LIC_FILENAME}" "${GG_LIC_FILENAME_NOSPACES}"
|
||||
}
|
||||
|
||||
# Disable tasks not needed for the binary package
|
||||
do_configure[noexec] = "1"
|
||||
do_compile[noexec] = "1"
|
||||
|
||||
do_install() {
|
||||
install -d ${D}/${BPN}
|
||||
tar --no-same-owner --exclude='./patches' --exclude='./.pc' -cpf - -C ${S} . \
|
||||
| tar --no-same-owner -xpf - -C ${D}/${BPN}
|
||||
|
||||
# Install wrapper bootscript to launch Greengrass core on boot
|
||||
install -d ${D}${sysconfdir}/init.d
|
||||
install -m 0755 ${WORKDIR}/greengrass-init ${D}${sysconfdir}/init.d/greengrass
|
||||
sed -i -e "s,##GG_INSTALL_DIR##,/${BPN},g" ${D}${sysconfdir}/init.d/greengrass
|
||||
|
||||
# If certificates do exist, install them and update the config file
|
||||
if [ -f "${AWS_IOT_CERTS_DIR}/${AWS_GGCORE_ROOT_CA}" ] && \
|
||||
[ -f "${AWS_IOT_CERTS_DIR}/${AWS_GGCORE_CERTIFICATE}" ] && \
|
||||
[ -f "${AWS_IOT_CERTS_DIR}/${AWS_GGCORE_PRIVATE_KEY}" ]; then
|
||||
install -m 0644 "${AWS_IOT_CERTS_DIR}/${AWS_GGCORE_ROOT_CA}" \
|
||||
"${AWS_IOT_CERTS_DIR}/${AWS_GGCORE_CERTIFICATE}" \
|
||||
"${AWS_IOT_CERTS_DIR}/${AWS_GGCORE_PRIVATE_KEY}" \
|
||||
${D}/${BPN}/configuration/certs/
|
||||
sed -i -e "s,\[ROOT_CA_PEM_HERE],${AWS_GGCORE_ROOT_CA},g" \
|
||||
-e "s,\[CLOUD_PEM_CRT_HERE],${AWS_GGCORE_CERTIFICATE},g" \
|
||||
-e "s,\[CLOUD_PEM_KEY_HERE],${AWS_GGCORE_PRIVATE_KEY},g" \
|
||||
${D}/${BPN}/configuration/config.json
|
||||
fi
|
||||
|
||||
# Configure the rest of GG Core parameters
|
||||
[ -n "${AWS_GGCORE_THING_ARN}" ] && sed -i -e "s,\[THING_ARN_HERE],${AWS_GGCORE_THING_ARN},g" ${D}/${BPN}/configuration/config.json
|
||||
if [ -n "${AWS_GGCORE_IOT_HOST}" ]; then
|
||||
AWS_GGCORE_HOST_PREFIX="$(echo ${AWS_GGCORE_IOT_HOST} | sed -e 's,\([^.]\+\)\.iot.*,\1,g')"
|
||||
AWS_GGCORE_REGION="$(echo ${AWS_GGCORE_IOT_HOST} | sed -e 's,.*.iot\.\([^.]\+\)\..*,\1,g')"
|
||||
[ -n "${AWS_GGCORE_HOST_PREFIX}" ] && sed -i -e "s,\[HOST_PREFIX_HERE],${AWS_GGCORE_HOST_PREFIX},g" ${D}/${BPN}/configuration/config.json
|
||||
[ -n "${AWS_GGCORE_REGION}" ] && sed -i -e "s,\[AWS_REGION_HERE],${AWS_GGCORE_REGION},g" ${D}/${BPN}/configuration/config.json
|
||||
fi
|
||||
|
||||
# Configure whether to use systemd or not
|
||||
sed -i -e "/useSystemd/{s,\[yes|no],${GG_USESYSTEMD},g}" ${D}/${BPN}/configuration/config.json
|
||||
}
|
||||
|
||||
pkg_postinst_${PN}() {
|
||||
# Enable protection for hardlinks and symlinks
|
||||
if ! grep -qs 'protected_.*links' $D${sysconfdir}/sysctl.conf; then
|
||||
cat >> $D${sysconfdir}/sysctl.conf <<-_EOF_
|
||||
# Greengrass: protect hardlinks/symlinks
|
||||
fs.protected_hardlinks = 1
|
||||
fs.protected_symlinks = 1
|
||||
_EOF_
|
||||
fi
|
||||
|
||||
# Customize '/etc/fstab'
|
||||
if [ -f "$D${sysconfdir}/fstab" ]; then
|
||||
# Disable TMPFS /var/volatile
|
||||
sed -i -e '\#^tmpfs[[:blank:]]\+/var/volatile#s,^,#,g' $D${sysconfdir}/fstab
|
||||
|
||||
# Mount a cgroup hierarchy with all available subsystems
|
||||
if ! grep -qs '^cgroup' $D${sysconfdir}/fstab; then
|
||||
cat >> $D${sysconfdir}/fstab <<-_EOF_
|
||||
# Greengrass: mount cgroups
|
||||
cgroup /sys/fs/cgroup cgroup defaults 0 0
|
||||
_EOF_
|
||||
fi
|
||||
fi
|
||||
|
||||
# Disable '/etc/resolv.conf' symlink
|
||||
if [ -f "$D${sysconfdir}/default/volatiles/00_core" ]; then
|
||||
sed -i -e '/resolv.conf/d' $D${sysconfdir}/default/volatiles/00_core
|
||||
cat >> $D${sysconfdir}/default/volatiles/00_core <<-_EOF_
|
||||
# Greengrass: create a real (no symlink) resolv.conf
|
||||
f root root 0644 /etc/resolv.conf none
|
||||
_EOF_
|
||||
fi
|
||||
}
|
||||
|
||||
FILES_${PN} = "/${BPN} ${sysconfdir}"
|
||||
|
||||
CONFFILES_${PN} += "/${BPN}/configuration/config.json"
|
||||
|
||||
INITSCRIPT_NAME = "greengrass"
|
||||
INITSCRIPT_PARAMS = "defaults 80 20"
|
||||
|
||||
USERADD_PACKAGES = "${PN}"
|
||||
GROUPADD_PARAM_${PN} = "-r ggc_group"
|
||||
USERADD_PARAM_${PN} = "-r -M -N -g ggc_group -s /bin/false ggc_user"
|
||||
|
||||
#
|
||||
# Disable failing QA checks:
|
||||
#
|
||||
# Binary was already stripped
|
||||
# No GNU_HASH in the elf binary
|
||||
#
|
||||
INSANE_SKIP_${PN} += "already-stripped ldflags"
|
||||
|
||||
RDEPENDS_${PN} += "ca-certificates python-argparse python-json python-numbers sqlite3"
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
[General]
|
||||
|
||||
# Default adapter name
|
||||
# Defaults to 'BlueZ X.YZ'
|
||||
Name = cc6
|
||||
|
||||
#[Policy]
|
||||
|
||||
# AutoEnable defines option to enable all controllers when they are found.
|
||||
# This includes adapters present on start as well as adapters that are plugged
|
||||
# in later on. Defaults to 'false'.
|
||||
#AutoEnable=true
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
From: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
Date: Thu, 6 Apr 2017 09:27:09 +0200
|
||||
Subject: [PATCH] hciattach_rome: Respect the user indication for noflow
|
||||
|
||||
When hciattach is called with noflow, it should not assume the hardware
|
||||
supports hardware flow control.
|
||||
|
||||
Basically, use 'flow' or 'noflow' on the hciattach command line arguments
|
||||
to indicate whether to use or not hardware flow control.
|
||||
|
||||
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
---
|
||||
tools/hciattach.c | 2 +-
|
||||
tools/hciattach.h | 2 +-
|
||||
tools/hciattach_rome.c | 50 +++++++++++++++++++++++++++++++++++---------------
|
||||
tools/hciattach_rome.h | 1 +
|
||||
4 files changed, 38 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/tools/hciattach.c b/tools/hciattach.c
|
||||
index dda639cabca3..81d78ab3f69a 100644
|
||||
--- a/tools/hciattach.c
|
||||
+++ b/tools/hciattach.c
|
||||
@@ -286,7 +286,7 @@ static int ath3k_pm(int fd, struct uart_t *u, struct termios *ti)
|
||||
static int qca(int fd, struct uart_t *u, struct termios *ti)
|
||||
{
|
||||
fprintf(stderr,"qca\n");
|
||||
- return qca_soc_init(fd, u->speed, u->bdaddr);
|
||||
+ return qca_soc_init(fd, u->speed, u->bdaddr, ti);
|
||||
}
|
||||
|
||||
static int qualcomm(int fd, struct uart_t *u, struct termios *ti)
|
||||
diff --git a/tools/hciattach.h b/tools/hciattach.h
|
||||
index 49e59321fcac..3524e716c847 100644
|
||||
--- a/tools/hciattach.h
|
||||
+++ b/tools/hciattach.h
|
||||
@@ -64,7 +64,7 @@ int ath3k_init(int fd, int speed, int init_speed, char *bdaddr,
|
||||
struct termios *ti);
|
||||
int ath3k_post(int fd, int pm);
|
||||
int qualcomm_init(int fd, int speed, struct termios *ti, const char *bdaddr);
|
||||
-int qca_soc_init(int fd, int speed, char *bdaddr);
|
||||
+int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti);
|
||||
int intel_init(int fd, int init_speed, int *speed, struct termios *ti);
|
||||
int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti,
|
||||
const char *bdaddr);
|
||||
diff --git a/tools/hciattach_rome.c b/tools/hciattach_rome.c
|
||||
index 59bdc16e4e8f..ee67bb068c09 100644
|
||||
--- a/tools/hciattach_rome.c
|
||||
+++ b/tools/hciattach_rome.c
|
||||
@@ -1565,7 +1565,8 @@ static void flow_control(int fd, int opt)
|
||||
}
|
||||
|
||||
|
||||
-int rome_set_baudrate_req(int fd, int local_baud_rate, int controller_baud_rate)
|
||||
+int rome_set_baudrate_req(int fd, int local_baud_rate,
|
||||
+ int controller_baud_rate, int hwfc)
|
||||
{
|
||||
int size, err = 0;
|
||||
unsigned char cmd[HCI_MAX_CMD_SIZE];
|
||||
@@ -1575,6 +1576,12 @@ int rome_set_baudrate_req(int fd, int local_baud_rate, int controller_baud_rate)
|
||||
|
||||
memset(cmd, 0x0, HCI_MAX_CMD_SIZE);
|
||||
|
||||
+ /* If not using hardware flow control limit baud rate to 115200 */
|
||||
+ if (!hwfc) {
|
||||
+ local_baud_rate = USERIAL_BAUD_115200;
|
||||
+ controller_baud_rate = BAUDRATE_115200;
|
||||
+ }
|
||||
+
|
||||
cmd_hdr = (void *) (cmd + 1);
|
||||
cmd[0] = HCI_COMMAND_PKT;
|
||||
cmd_hdr->opcode = cmd_opcode_pack(HCI_VENDOR_CMD_OGF, EDL_SET_BAUDRATE_CMD_OCF);
|
||||
@@ -1621,7 +1628,7 @@ error:
|
||||
}
|
||||
|
||||
|
||||
-int rome_hci_reset_req(int fd, char baud)
|
||||
+int rome_hci_reset_req(int fd, char baud, int hwfc)
|
||||
{
|
||||
int size, err = 0;
|
||||
unsigned char cmd[HCI_MAX_CMD_SIZE];
|
||||
@@ -1641,8 +1648,9 @@ int rome_hci_reset_req(int fd, char baud)
|
||||
/* Total length of the packet to be sent to the Controller */
|
||||
size = (HCI_CMD_IND + HCI_COMMAND_HDR_SIZE);
|
||||
|
||||
- /* Flow off during baudrate change */
|
||||
- flow_control(fd, MSM_DISABLE_FLOW_CTRL);
|
||||
+ /* If using hardware flow control, turn off during baudrate change */
|
||||
+ if (hwfc)
|
||||
+ flow_control(fd, MSM_DISABLE_FLOW_CTRL);
|
||||
|
||||
/* Send the HCI command packet to UART for transmission */
|
||||
fprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3]);
|
||||
@@ -1655,8 +1663,9 @@ int rome_hci_reset_req(int fd, char baud)
|
||||
/* Change Local UART baudrate to high speed UART */
|
||||
userial_vendor_set_baud(baud);
|
||||
|
||||
- /* Flow on after changing local uart baudrate */
|
||||
- flow_control(fd, MSM_ENABLE_FLOW_CTRL);
|
||||
+ /* If using hardware flow control, turn on after changing local uart baudrate */
|
||||
+ if (hwfc)
|
||||
+ flow_control(fd, MSM_ENABLE_FLOW_CTRL);
|
||||
|
||||
/* Wait for command complete event */
|
||||
err = read_hci_event(fd, rsp, HCI_MAX_EVENT_SIZE);
|
||||
@@ -1778,7 +1787,7 @@ int isSpeedValid(int speed, int *local_baud_rate, int *controller_baud_rate)
|
||||
return -1;
|
||||
}
|
||||
|
||||
-int qca_soc_init(int fd, int speed, char *bdaddr)
|
||||
+int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti)
|
||||
{
|
||||
int err = -1;
|
||||
int size, local_baud_rate = 0, controller_baud_rate = 0;
|
||||
@@ -1793,6 +1802,12 @@ int qca_soc_init(int fd, int speed, char *bdaddr)
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
+
|
||||
+ /* Assume we don't use hardware flow control unless user requested 'flow' */
|
||||
+ vnd_userial.hwfc = 0;
|
||||
+ if (ti->c_cflag & ~CRTSCTS)
|
||||
+ vnd_userial.hwfc = 1;
|
||||
+
|
||||
/* Get Rome version information */
|
||||
if((err = rome_patch_ver_req(fd)) <0){
|
||||
fprintf(stderr, "%s: Fail to get Rome Version (0x%x)\n", __FUNCTION__, err);
|
||||
@@ -1838,11 +1853,14 @@ int qca_soc_init(int fd, int speed, char *bdaddr)
|
||||
goto error;
|
||||
}
|
||||
|
||||
- /* Change baud rate 115.2 kbps to 3Mbps*/
|
||||
- err = rome_hci_reset_req(fd, local_baud_rate);
|
||||
- if ( err <0 ) {
|
||||
- fprintf(stderr, "HCI Reset Failed !!\n");
|
||||
- goto error;
|
||||
+ /* If using hw flow control, change baud rate 115.2 kbps to 3Mbps*/
|
||||
+ if (vnd_userial.hwfc) {
|
||||
+ err = rome_hci_reset_req(fd, local_baud_rate,
|
||||
+ vnd_userial.hwfc);
|
||||
+ if ( err <0 ) {
|
||||
+ fprintf(stderr, "HCI Reset Failed !!\n");
|
||||
+ goto error;
|
||||
+ }
|
||||
}
|
||||
|
||||
fprintf(stderr, "HCI Reset is done\n");
|
||||
@@ -1888,7 +1906,8 @@ download:
|
||||
if (local_baud_rate < 0 || controller_baud_rate < 0)
|
||||
goto error;
|
||||
|
||||
- err = rome_set_baudrate_req(fd, local_baud_rate, controller_baud_rate);
|
||||
+ err = rome_set_baudrate_req(fd, local_baud_rate,
|
||||
+ controller_baud_rate, vnd_userial.hwfc);
|
||||
if (err < 0) {
|
||||
fprintf(stderr, "%s: Baud rate change failed!\n", __FUNCTION__);
|
||||
goto error;
|
||||
@@ -1907,14 +1926,15 @@ download:
|
||||
* Overriding the baud rate value in NVM file with the user
|
||||
* requested baud rate, since default baud rate in NVM file is 3M.
|
||||
*/
|
||||
- err = rome_set_baudrate_req(fd, local_baud_rate, controller_baud_rate);
|
||||
+ err = rome_set_baudrate_req(fd, local_baud_rate,
|
||||
+ controller_baud_rate, vnd_userial.hwfc);
|
||||
if (err < 0) {
|
||||
fprintf(stderr, "%s: Baud rate change failed!\n", __FUNCTION__);
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Perform HCI reset here*/
|
||||
- err = rome_hci_reset_req(fd, local_baud_rate);
|
||||
+ err = rome_hci_reset_req(fd, local_baud_rate, vnd_userial.hwfc);
|
||||
if ( err <0 ) {
|
||||
fprintf(stderr, "HCI Reset Failed !!!\n");
|
||||
goto error;
|
||||
diff --git a/tools/hciattach_rome.h b/tools/hciattach_rome.h
|
||||
index 89f7db3bef86..760685ad7915 100644
|
||||
--- a/tools/hciattach_rome.h
|
||||
+++ b/tools/hciattach_rome.h
|
||||
@@ -62,6 +62,7 @@ typedef struct
|
||||
int fd; /* fd to Bluetooth device */
|
||||
struct termios termios; /* serial terminal of BT port */
|
||||
char port_name[256];
|
||||
+ int hwfc;
|
||||
} vnd_userial_cb_t;
|
||||
|
||||
/**** baud rates ****/
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
From: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
Date: Thu, 6 Apr 2017 14:37:57 +0200
|
||||
Subject: [PATCH] hciattach: If the user supplies a bdaddr, use it
|
||||
|
||||
The QCA6564 has no non-volatile configuration file for the bluetooth
|
||||
MAC, so use the one supplied on the command line.
|
||||
|
||||
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
---
|
||||
tools/hciattach.c | 4 +--
|
||||
tools/hciattach_rome.c | 76 ++++++++++----------------------------------------
|
||||
2 files changed, 17 insertions(+), 63 deletions(-)
|
||||
|
||||
diff --git a/tools/hciattach.c b/tools/hciattach.c
|
||||
index 81d78ab3f69a..022bbe5fa6d5 100644
|
||||
--- a/tools/hciattach.c
|
||||
+++ b/tools/hciattach.c
|
||||
@@ -285,7 +285,7 @@ static int ath3k_pm(int fd, struct uart_t *u, struct termios *ti)
|
||||
|
||||
static int qca(int fd, struct uart_t *u, struct termios *ti)
|
||||
{
|
||||
- fprintf(stderr,"qca\n");
|
||||
+ fprintf(stderr,"qca, bdaddr %s\n", u->bdaddr ? u->bdaddr : "Default");
|
||||
return qca_soc_init(fd, u->speed, u->bdaddr, ti);
|
||||
}
|
||||
|
||||
@@ -1363,7 +1363,7 @@ int main(int argc, char *argv[])
|
||||
fprintf(stderr, "Unknown device type or id\n");
|
||||
exit(1);
|
||||
}
|
||||
-
|
||||
+ u->bdaddr = NULL;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
diff --git a/tools/hciattach_rome.c b/tools/hciattach_rome.c
|
||||
index ee67bb068c09..854cfff707aa 100644
|
||||
--- a/tools/hciattach_rome.c
|
||||
+++ b/tools/hciattach_rome.c
|
||||
@@ -45,6 +45,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
+#include <endian.h>
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include "hciattach_rome.h"
|
||||
#include "hciattach.h"
|
||||
@@ -911,7 +912,7 @@ int get_value_from_config(char *file_path,char *param)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int rome_get_tlv_file(char *file_path)
|
||||
+int rome_get_tlv_file(char *file_path, unsigned char * bdaddr)
|
||||
{
|
||||
FILE * pFile;
|
||||
long fileSize;
|
||||
@@ -921,7 +922,6 @@ int rome_get_tlv_file(char *file_path)
|
||||
tlv_nvm_hdr *nvm_ptr;
|
||||
unsigned char data_buf[PRINT_BUF_SIZE]={0,};
|
||||
unsigned char *nvm_byte_ptr;
|
||||
- unsigned char bdaddr[6];
|
||||
unsigned short pcm_value, ibs_value;
|
||||
|
||||
fprintf(stderr, "File Open (%s)\n", file_path);
|
||||
@@ -1008,12 +1008,15 @@ int rome_get_tlv_file(char *file_path)
|
||||
nvm_byte_ptr+=sizeof(tlv_nvm_hdr);
|
||||
|
||||
/* Write BD Address */
|
||||
- if(nvm_ptr->tag_id == TAG_NUM_2 && read_bd_address(&bdaddr) == 0) {
|
||||
- memcpy(nvm_byte_ptr, bdaddr, 6);
|
||||
- fprintf(stderr, "Overriding default BD ADDR with user"
|
||||
- " programmed BD Address: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||
- *nvm_byte_ptr, *(nvm_byte_ptr+1), *(nvm_byte_ptr+2),
|
||||
- *(nvm_byte_ptr+3), *(nvm_byte_ptr+4), *(nvm_byte_ptr+5));
|
||||
+ if(nvm_ptr->tag_id == TAG_NUM_2 && bdaddr) {
|
||||
+ bdaddr_t ba;
|
||||
+ if (!str2ba(bdaddr, &ba)) {
|
||||
+ memcpy(nvm_byte_ptr, &ba, 6);
|
||||
+ fprintf(stderr, "Overriding default BD ADDR with user"
|
||||
+ " programmed BD Address: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||
+ *(nvm_byte_ptr+5), *(nvm_byte_ptr+4), *(nvm_byte_ptr+3),
|
||||
+ *(nvm_byte_ptr+2), *(nvm_byte_ptr+1), *nvm_byte_ptr);
|
||||
+ }
|
||||
}
|
||||
|
||||
if (nvm_ptr->tag_id == TAG_NUM_17) {
|
||||
@@ -1209,14 +1212,14 @@ error:
|
||||
return err;
|
||||
}
|
||||
|
||||
-int rome_download_tlv_file(int fd)
|
||||
+int rome_download_tlv_file(int fd, char * bdaddr)
|
||||
{
|
||||
int tlv_size, err = -1;
|
||||
|
||||
/* Rampatch TLV file Downloading */
|
||||
pdata_buffer = NULL;
|
||||
|
||||
- if((tlv_size = rome_get_tlv_file(rampatch_file_path)) < 0)
|
||||
+ if((tlv_size = rome_get_tlv_file(rampatch_file_path, bdaddr)) < 0)
|
||||
goto error;
|
||||
|
||||
if((err =rome_tlv_dnld_req(fd, tlv_size)) <0 )
|
||||
@@ -1228,7 +1231,7 @@ int rome_download_tlv_file(int fd)
|
||||
}
|
||||
|
||||
/* NVM TLV file Downloading */
|
||||
- if((tlv_size = rome_get_tlv_file(nvm_file_path)) < 0)
|
||||
+ if((tlv_size = rome_get_tlv_file(nvm_file_path, bdaddr)) < 0)
|
||||
goto error;
|
||||
|
||||
if((err =rome_tlv_dnld_req(fd, tlv_size)) <0 )
|
||||
@@ -1679,55 +1682,6 @@ error:
|
||||
|
||||
}
|
||||
|
||||
-int read_bd_address(unsigned char *bdaddr)
|
||||
-{
|
||||
- int fd = -1;
|
||||
- int readPtr = 0;
|
||||
- unsigned char data[BD_ADDR_LEN];
|
||||
-
|
||||
- /* Open the persist file for reading device address*/
|
||||
- fd = open("/etc/bluetooth/.bt_nv.bin", O_RDONLY);
|
||||
- if(fd < 0)
|
||||
- {
|
||||
- fprintf(stderr, "%s: Open failed: Programming default BD ADDR\n", __func__);
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- /* Read the NVM Header : fp will be advanced by readPtr number of bytes */
|
||||
- readPtr = read(fd, data, PERSIST_HEADER_LEN);
|
||||
- if (readPtr > 0)
|
||||
- fprintf(stderr, "%s: Persist header data: %02x \t %02x \t %02x\n", __func__,
|
||||
- data[NVITEM], data[RDWR_PROT], data[NVITEM_SIZE]);
|
||||
- else {
|
||||
- fprintf(stderr, "%s: Read from persist memory failed : Programming default"
|
||||
- " BD ADDR\n");
|
||||
- close(fd);
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- /* Check for BD ADDR length before programming */
|
||||
- if(data[NVITEM_SIZE] != BD_ADDR_LEN) {
|
||||
- fprintf(stderr, "Invalid BD ADDR: Programming default BD ADDR!\n");
|
||||
- close(fd);
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- /* Read the BD ADDR info */
|
||||
- readPtr = read(fd, data, BD_ADDR_LEN);
|
||||
- if (readPtr > 0)
|
||||
- fprintf(stderr, "BD-ADDR: ==> %02x:%02x:%02x:%02x:%02x:%02x\n", data[0],
|
||||
- data[1], data[2], data[3], data[4], data[5]);
|
||||
- else {
|
||||
- fprintf(stderr, "%s: Read from persist memory failed : Programming default"
|
||||
- " BD ADDR\n");
|
||||
- close(fd);
|
||||
- return -1;
|
||||
- }
|
||||
- memcpy(bdaddr, data, BD_ADDR_LEN);
|
||||
- close(fd);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
int isSpeedValid(int speed, int *local_baud_rate, int *controller_baud_rate)
|
||||
{
|
||||
switch(speed) {
|
||||
@@ -1915,7 +1869,7 @@ download:
|
||||
}
|
||||
|
||||
/* Donwload TLV files (rampatch, NVM) */
|
||||
- err = rome_download_tlv_file(fd);
|
||||
+ err = rome_download_tlv_file(fd, bdaddr);
|
||||
if (err < 0) {
|
||||
fprintf(stderr, "%s: Download TLV file failed!\n", __FUNCTION__);
|
||||
goto error;
|
||||
|
|
@ -0,0 +1,723 @@
|
|||
From: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
Date: Mon, 10 Apr 2017 12:44:00 +0200
|
||||
Subject: [PATCH] hciattach: Add verbosity option
|
||||
|
||||
And reduce the verbosity of the hciattach_rome plugin.
|
||||
|
||||
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
|
||||
---
|
||||
lib/bluetooth.h | 3 +
|
||||
tools/hciattach.c | 13 ++-
|
||||
tools/hciattach_rome.c | 244 ++++++++++++++++++++++++-------------------------
|
||||
3 files changed, 132 insertions(+), 128 deletions(-)
|
||||
|
||||
diff --git a/lib/bluetooth.h b/lib/bluetooth.h
|
||||
index eb279260e009..38e3e6900744 100644
|
||||
--- a/lib/bluetooth.h
|
||||
+++ b/lib/bluetooth.h
|
||||
@@ -136,6 +136,9 @@ enum {
|
||||
BT_CLOSED
|
||||
};
|
||||
|
||||
+extern int verbose_on;
|
||||
+#define hciprintf(fd, arg...) if (verbose_on) { fprintf(fd, ##arg);} else { do {} while (0);}
|
||||
+
|
||||
/* Byte order conversions */
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define htobs(d) (d)
|
||||
diff --git a/tools/hciattach.c b/tools/hciattach.c
|
||||
index 022bbe5fa6d5..4aacdafeda7d 100644
|
||||
--- a/tools/hciattach.c
|
||||
+++ b/tools/hciattach.c
|
||||
@@ -50,6 +50,8 @@
|
||||
|
||||
#include "hciattach.h"
|
||||
|
||||
+int verbose_on = 0;
|
||||
+
|
||||
struct uart_t {
|
||||
char *type;
|
||||
int m_id;
|
||||
@@ -125,8 +127,6 @@ int read_hci_event(int fd, unsigned char* buf, int size)
|
||||
fprintf(stderr, "%s: Timing out on select for 3 secs.\n", __FUNCTION__);
|
||||
return -1;
|
||||
}
|
||||
- else
|
||||
- fprintf(stderr, "%s: Data(HCI-CMD-COMP-EVENT) available in TTY Serial buffer\n", __FUNCTION__);
|
||||
|
||||
/* The first byte identifies the packet type. For HCI event packets, it
|
||||
* should be 0x04, so we read until we get to the 0x04. */
|
||||
@@ -285,7 +285,7 @@ static int ath3k_pm(int fd, struct uart_t *u, struct termios *ti)
|
||||
|
||||
static int qca(int fd, struct uart_t *u, struct termios *ti)
|
||||
{
|
||||
- fprintf(stderr,"qca, bdaddr %s\n", u->bdaddr ? u->bdaddr : "Default");
|
||||
+ fprintf(stderr,"qca, bdaddr %s, verbose %d\n", u->bdaddr ? u->bdaddr : "Default", verbose_on);
|
||||
return qca_soc_init(fd, u->speed, u->bdaddr, ti);
|
||||
}
|
||||
|
||||
@@ -1258,7 +1258,7 @@ static void usage(void)
|
||||
{
|
||||
printf("hciattach - HCI UART driver initialization utility\n");
|
||||
printf("Usage:\n");
|
||||
- printf("\thciattach [-n] [-p] [-b] [-r] [-t timeout] [-s initial_speed]"
|
||||
+ printf("\thciattach [-n] [-p] [-b] [-r] [-v] [-t timeout] [-s initial_speed]"
|
||||
" <tty> <type | id> [speed] [flow|noflow]"
|
||||
" [sleep|nosleep] [bdaddr]\n");
|
||||
printf("\thciattach -l\n");
|
||||
@@ -1281,7 +1281,7 @@ int main(int argc, char *argv[])
|
||||
printpid = 0;
|
||||
raw = 0;
|
||||
|
||||
- while ((opt=getopt(argc, argv, "bnpt:s:lrf:")) != EOF) {
|
||||
+ while ((opt=getopt(argc, argv, "bnpt:s:lrf:v")) != EOF) {
|
||||
switch(opt) {
|
||||
case 'b':
|
||||
send_break = 1;
|
||||
@@ -1319,6 +1319,9 @@ int main(int argc, char *argv[])
|
||||
fprintf(stderr, "Line_disp val : %d\n", line_disp);
|
||||
break;
|
||||
|
||||
+ case 'v':
|
||||
+ verbose_on = 1;
|
||||
+ break;
|
||||
default:
|
||||
usage();
|
||||
exit(1);
|
||||
diff --git a/tools/hciattach_rome.c b/tools/hciattach_rome.c
|
||||
index 854cfff707aa..40983fc087c0 100644
|
||||
--- a/tools/hciattach_rome.c
|
||||
+++ b/tools/hciattach_rome.c
|
||||
@@ -139,7 +139,7 @@ unsigned char userial_to_tcio_baud(unsigned char cfg_baud, unsigned int *baud)
|
||||
void userial_vendor_set_baud(unsigned char userial_baud)
|
||||
{
|
||||
unsigned int tcio_baud;
|
||||
- fprintf(stderr, "## userial_vendor_set_baud: %d\n", userial_baud);
|
||||
+ hciprintf(stderr, "## userial_vendor_set_baud: %d\n", userial_baud);
|
||||
|
||||
if (tcgetattr(vnd_userial.fd, &vnd_userial.termios) < 0) {
|
||||
perror("Can't get port settings");
|
||||
@@ -201,7 +201,7 @@ int userial_vendor_ioctl(int fd, userial_vendor_ioctl_op_t op, int *p_data)
|
||||
break;
|
||||
#endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE)
|
||||
case USERIAL_OP_FLOW_ON:
|
||||
- fprintf(stderr, "## userial_vendor_ioctl: UART Flow On\n ");
|
||||
+ hciprintf(stderr, "## userial_vendor_ioctl: UART Flow On\n ");
|
||||
ti.c_cflag |= CRTSCTS;
|
||||
|
||||
if (err = tcsetattr(fd, TCSANOW, &ti) < 0) {
|
||||
@@ -212,7 +212,7 @@ int userial_vendor_ioctl(int fd, userial_vendor_ioctl_op_t op, int *p_data)
|
||||
break;
|
||||
|
||||
case USERIAL_OP_FLOW_OFF:
|
||||
- fprintf(stderr, "## userial_vendor_ioctl: UART Flow Off\n ");
|
||||
+ hciprintf(stderr, "## userial_vendor_ioctl: UART Flow Off\n ");
|
||||
ti.c_cflag &= ~CRTSCTS;
|
||||
if (err = tcsetattr(fd, TCSANOW, &ti) < 0) {
|
||||
fprintf(stderr, "Can't set port settings");
|
||||
@@ -233,51 +233,51 @@ int get_vs_hci_event(unsigned char *rsp)
|
||||
int err = 0, soc_id =0;
|
||||
unsigned char paramlen = 0;
|
||||
|
||||
- if( (rsp[EVENTCODE_OFFSET] == VSEVENT_CODE) || (rsp[EVENTCODE_OFFSET] == EVT_CMD_COMPLETE))
|
||||
- fprintf(stderr, "%s: Received HCI-Vendor Specific event\n", __FUNCTION__);
|
||||
- else {
|
||||
+ if( (rsp[EVENTCODE_OFFSET] == VSEVENT_CODE) || (rsp[EVENTCODE_OFFSET] == EVT_CMD_COMPLETE)) {
|
||||
+ hciprintf(stderr, "%s: Received HCI-Vendor Specific event\n", __FUNCTION__);
|
||||
+ } else {
|
||||
fprintf(stderr, "%s: Failed to receive HCI-Vendor Specific event\n", __FUNCTION__);
|
||||
err = -EIO;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: Parameter Length: 0x%x\n", __FUNCTION__, paramlen = rsp[EVT_PLEN]);
|
||||
- fprintf(stderr, "%s: Command response: 0x%x\n", __FUNCTION__, rsp[CMD_RSP_OFFSET]);
|
||||
- fprintf(stderr, "%s: Response type : 0x%x\n", __FUNCTION__, rsp[RSP_TYPE_OFFSET]);
|
||||
+ paramlen = rsp[EVT_PLEN];
|
||||
+ hciprintf(stderr, "%s: Parameter Length: 0x%x\n", __FUNCTION__, paramlen);
|
||||
+ hciprintf(stderr, "%s: Command response: 0x%x\n", __FUNCTION__, rsp[CMD_RSP_OFFSET]);
|
||||
+ hciprintf(stderr, "%s: Response type : 0x%x\n", __FUNCTION__, rsp[RSP_TYPE_OFFSET]);
|
||||
|
||||
/* Check the status of the operation */
|
||||
switch ( rsp[CMD_RSP_OFFSET] )
|
||||
{
|
||||
case EDL_CMD_REQ_RES_EVT:
|
||||
- fprintf(stderr, "%s: Command Request Response\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Command Request Response\n", __FUNCTION__);
|
||||
switch(rsp[RSP_TYPE_OFFSET])
|
||||
{
|
||||
case EDL_PATCH_VER_RES_EVT:
|
||||
case EDL_APP_VER_RES_EVT:
|
||||
- fprintf(stderr, "\t Current Product ID\t\t: 0x%08x\n",
|
||||
- (unsigned int)(rsp[PATCH_PROD_ID_OFFSET +3] << 24 |
|
||||
+ hciprintf(stderr, "\t Current Product ID\t\t: 0x%08x\n",
|
||||
+ (unsigned int)(rsp[PATCH_PROD_ID_OFFSET +3] << 24 |
|
||||
rsp[PATCH_PROD_ID_OFFSET+2] << 16 |
|
||||
rsp[PATCH_PROD_ID_OFFSET+1] << 8 |
|
||||
rsp[PATCH_PROD_ID_OFFSET] ));
|
||||
|
||||
/* Patch Version indicates FW patch version */
|
||||
- fprintf(stderr, "\t Current Patch Version\t\t: 0x%04x\n",
|
||||
- (unsigned short)(rsp[PATCH_PATCH_VER_OFFSET + 1] << 8 |
|
||||
+ hciprintf(stderr, "\t Current Patch Version\t\t: 0x%04x\n",
|
||||
+ (unsigned short)(rsp[PATCH_PATCH_VER_OFFSET + 1] << 8 |
|
||||
rsp[PATCH_PATCH_VER_OFFSET] ));
|
||||
|
||||
/* ROM Build Version indicates ROM build version like 1.0/1.1/2.0 */
|
||||
- fprintf(stderr, "\t Current ROM Build Version\t: 0x%04x\n", rome_ver =
|
||||
- (int)(rsp[PATCH_ROM_BUILD_VER_OFFSET + 1] << 8 |
|
||||
- rsp[PATCH_ROM_BUILD_VER_OFFSET] ));
|
||||
+ rome_ver = (int)(rsp[PATCH_ROM_BUILD_VER_OFFSET + 1] << 8 |
|
||||
+ rsp[PATCH_ROM_BUILD_VER_OFFSET] );
|
||||
+ hciprintf(stderr, "\t Current ROM Build Version\t: 0x%04x\n", rome_ver);
|
||||
|
||||
/* In case rome 1.0/1.1, there is no SOC ID version available */
|
||||
- if (paramlen - 10)
|
||||
- {
|
||||
- fprintf(stderr, "\t Current SOC Version\t\t: 0x%08x\n", soc_id =
|
||||
- (unsigned int)(rsp[PATCH_SOC_VER_OFFSET +3] << 24 |
|
||||
- rsp[PATCH_SOC_VER_OFFSET+2] << 16 |
|
||||
- rsp[PATCH_SOC_VER_OFFSET+1] << 8 |
|
||||
- rsp[PATCH_SOC_VER_OFFSET] ));
|
||||
+ if (paramlen - 10) {
|
||||
+ soc_id = (unsigned int)(rsp[PATCH_SOC_VER_OFFSET +3] << 24 |
|
||||
+ rsp[PATCH_SOC_VER_OFFSET+2] << 16 |
|
||||
+ rsp[PATCH_SOC_VER_OFFSET+1] << 8 |
|
||||
+ rsp[PATCH_SOC_VER_OFFSET]);
|
||||
+ hciprintf(stderr, "\t Current SOC Version\t\t: 0x%08x\n", soc_id);
|
||||
}
|
||||
|
||||
/* Rome Chipset Version can be decided by Patch version and SOC version,
|
||||
@@ -290,7 +290,7 @@ int get_vs_hci_event(unsigned char *rsp)
|
||||
switch (err = rsp[CMD_STATUS_OFFSET])
|
||||
{
|
||||
case HCI_CMD_SUCCESS:
|
||||
- fprintf(stderr, "%s: Download Packet successfully!\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Download Packet successfully!\n", __FUNCTION__);
|
||||
break;
|
||||
case PATCH_LEN_ERROR:
|
||||
fprintf(stderr, "%s: Invalid patch length argument passed for EDL PATCH "
|
||||
@@ -318,7 +318,7 @@ int get_vs_hci_event(unsigned char *rsp)
|
||||
break;
|
||||
|
||||
case NVM_ACCESS_CODE:
|
||||
- fprintf(stderr, "%s: NVM Access Code!!!\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: NVM Access Code!!!\n", __FUNCTION__);
|
||||
err = HCI_CMD_SUCCESS;
|
||||
break;
|
||||
case EDL_SET_BAUDRATE_RSP_EVT:
|
||||
@@ -362,7 +362,7 @@ int wait_for_data(int fd, int maxTimeOut)
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
- fprintf(stderr, "%s: HCI-VS-EVENT available in TTY Serial buffer\n",
|
||||
+ hciprintf(stderr, "%s: HCI-VS-EVENT available in TTY Serial buffer\n",
|
||||
__FUNCTION__);
|
||||
|
||||
return 1;
|
||||
@@ -381,7 +381,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC\n",
|
||||
+ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC\n",
|
||||
__FUNCTION__);
|
||||
|
||||
/* Check whether data is available in TTY buffer before calling read() */
|
||||
@@ -425,7 +425,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size)
|
||||
}
|
||||
count++;
|
||||
|
||||
- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[0] - 0x%x\n", __FUNCTION__, buf[0]);
|
||||
+ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[0] - 0x%x\n", __FUNCTION__, buf[0]);
|
||||
/* The next two bytes are the event code and parameter total length. */
|
||||
while (count < 3) {
|
||||
r = read(fd, buf + count, 3 - count);
|
||||
@@ -436,7 +436,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size)
|
||||
count += r;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[1] - 0x%x\n", __FUNCTION__, buf[1]);
|
||||
+ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[1] - 0x%x\n", __FUNCTION__, buf[1]);
|
||||
/* Now we read the parameters. */
|
||||
if (buf[2] < (size - 3))
|
||||
remain = buf[2];
|
||||
@@ -454,7 +454,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size)
|
||||
if(get_vs_hci_event(buf) != HCI_CMD_SUCCESS)
|
||||
return -1;
|
||||
|
||||
- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, count - 0x%x\n", __FUNCTION__, count);
|
||||
+ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, count - 0x%x\n", __FUNCTION__, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -477,7 +477,7 @@ int hci_send_vs_cmd(int fd, unsigned char *cmd, unsigned char *rsp, int size)
|
||||
fprintf(stderr, "%s: Failed to get HCI-VS Event from SOC\n", __FUNCTION__);
|
||||
goto failed;
|
||||
}
|
||||
- fprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
failed:
|
||||
@@ -507,8 +507,8 @@ void frame_hci_cmd_pkt(
|
||||
case EDL_PATCH_SET_REQ_CMD:
|
||||
/* Copy the patch header info as CMD params */
|
||||
memcpy(&cmd[5], phdr_buffer, PATCH_HDR_LEN);
|
||||
- fprintf(stderr, "%s: Sending EDL_PATCH_SET_REQ_CMD\n", __FUNCTION__);
|
||||
- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
+ hciprintf(stderr, "%s: Sending EDL_PATCH_SET_REQ_CMD\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
|
||||
break;
|
||||
case EDL_PATCH_DLD_REQ_CMD:
|
||||
@@ -522,36 +522,36 @@ void frame_hci_cmd_pkt(
|
||||
cmd[9] = EXTRACT_BYTE(p_base_addr, 3);
|
||||
memcpy(&cmd[10], (pdata_buffer + offset), size);
|
||||
|
||||
- fprintf(stderr, "%s: Sending EDL_PATCH_DLD_REQ_CMD: size: %d bytes\n",
|
||||
+ hciprintf(stderr, "%s: Sending EDL_PATCH_DLD_REQ_CMD: size: %d bytes\n",
|
||||
__FUNCTION__, size);
|
||||
- fprintf(stderr, "HCI-CMD %d:\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t"
|
||||
+ hciprintf(stderr, "HCI-CMD %d:\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t"
|
||||
"0x%x\t0x%x\t0x%x\t\n", segtNo, cmd[0], cmd[1], cmd[2],
|
||||
cmd[3], cmd[4], cmd[5], cmd[6], cmd[7], cmd[8], cmd[9]);
|
||||
break;
|
||||
case EDL_PATCH_ATCH_REQ_CMD:
|
||||
- fprintf(stderr, "%s: Sending EDL_PATCH_ATTACH_REQ_CMD\n", __FUNCTION__);
|
||||
- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
|
||||
+ hciprintf(stderr, "%s: Sending EDL_PATCH_ATTACH_REQ_CMD\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
+ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
|
||||
break;
|
||||
case EDL_PATCH_RST_REQ_CMD:
|
||||
- fprintf(stderr, "%s: Sending EDL_PATCH_RESET_REQ_CMD\n", __FUNCTION__);
|
||||
- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
|
||||
+ hciprintf(stderr, "%s: Sending EDL_PATCH_RESET_REQ_CMD\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
+ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
|
||||
break;
|
||||
case EDL_PATCH_VER_REQ_CMD:
|
||||
- fprintf(stderr, "%s: Sending EDL_PATCH_VER_REQ_CMD\n", __FUNCTION__);
|
||||
- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
|
||||
- break;
|
||||
+ hciprintf(stderr, "%s: Sending EDL_PATCH_VER_REQ_CMD\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
+ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
|
||||
+ break;
|
||||
case EDL_PATCH_TLV_REQ_CMD:
|
||||
- fprintf(stderr, "%s: Sending EDL_PATCH_TLV_REQ_CMD\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Sending EDL_PATCH_TLV_REQ_CMD\n", __FUNCTION__);
|
||||
/* Parameter Total Length */
|
||||
cmd[3] = size +2;
|
||||
|
||||
/* TLV Segment Length */
|
||||
cmd[5] = size;
|
||||
- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], cmd[5]);
|
||||
+ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n",
|
||||
+ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], cmd[5]);
|
||||
offset = (segtNo * MAX_SIZE_PER_TLV_SEGMENT);
|
||||
memcpy(&cmd[6], (pdata_buffer + offset), size);
|
||||
break;
|
||||
@@ -601,14 +601,13 @@ void rome_extract_patch_header_info(unsigned char *buf)
|
||||
rampatch_patch_info.patch_ctrl |=
|
||||
(LSH(buf[index + P_CONTROL_OFFSET], (index * 8)));
|
||||
|
||||
- fprintf(stderr, "PATCH_ID\t : 0x%x\n", rampatch_patch_info.patch_id);
|
||||
- fprintf(stderr, "ROM_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.rom_version);
|
||||
- fprintf(stderr, "BUILD_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.build_version);
|
||||
- fprintf(stderr, "PATCH_LENGTH\t : 0x%x\n", rampatch_patch_info.patch_length);
|
||||
- fprintf(stderr, "PATCH_CRC\t : 0x%x\n", rampatch_patch_info.patch_crc);
|
||||
- fprintf(stderr, "PATCH_CONTROL\t : 0x%x\n", rampatch_patch_info.patch_ctrl);
|
||||
- fprintf(stderr, "PATCH_BASE_ADDR\t : 0x%x\n", rampatch_patch_info.patch_base_addr);
|
||||
-
|
||||
+ hciprintf(stderr, "PATCH_ID\t : 0x%x\n", rampatch_patch_info.patch_id);
|
||||
+ hciprintf(stderr, "ROM_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.rom_version);
|
||||
+ hciprintf(stderr, "BUILD_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.build_version);
|
||||
+ hciprintf(stderr, "PATCH_LENGTH\t : 0x%x\n", rampatch_patch_info.patch_length);
|
||||
+ hciprintf(stderr, "PATCH_CRC\t : 0x%x\n", rampatch_patch_info.patch_crc);
|
||||
+ hciprintf(stderr, "PATCH_CONTROL\t : 0x%x\n", rampatch_patch_info.patch_ctrl);
|
||||
+ hciprintf(stderr, "PATCH_BASE_ADDR\t : 0x%x\n", rampatch_patch_info.patch_base_addr);
|
||||
}
|
||||
|
||||
int rome_edl_set_patch_request(int fd)
|
||||
@@ -636,7 +635,7 @@ int rome_edl_set_patch_request(int fd)
|
||||
fprintf(stderr, "%s: Failed to set patch info on Controller\n", __FUNCTION__);
|
||||
goto error;
|
||||
}
|
||||
- fprintf(stderr, "%s: Successfully set patch info on the Controller\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Successfully set patch info on the Controller\n", __FUNCTION__);
|
||||
error:
|
||||
return err;
|
||||
}
|
||||
@@ -651,7 +650,7 @@ int rome_edl_patch_download_request(int fd)
|
||||
|
||||
no_of_patch_segment = (rampatch_patch_info.patch_length /
|
||||
MAX_DATA_PER_SEGMENT);
|
||||
- fprintf(stderr, "%s: %d patch segments to be d'loaded from patch base addr: 0x%x\n",
|
||||
+ hciprintf(stderr, "%s: %d patch segments to be d'loaded from patch base addr: 0x%x\n",
|
||||
__FUNCTION__, no_of_patch_segment,
|
||||
rampatch_patch_info.patch_base_addr);
|
||||
|
||||
@@ -663,8 +662,7 @@ int rome_edl_patch_download_request(int fd)
|
||||
* segments with a max. size of 239 bytes
|
||||
*/
|
||||
for (index = 1; index <= no_of_patch_segment; index++) {
|
||||
-
|
||||
- fprintf(stderr, "%s: Downloading patch segment: %d\n", __FUNCTION__, index);
|
||||
+ hciprintf(stderr, "%s: Downloading patch segment: %d\n", __FUNCTION__, index);
|
||||
|
||||
/* Frame the HCI CMD PKT to be sent to Controller*/
|
||||
frame_hci_cmd_pkt(cmd, EDL_PATCH_DLD_REQ_CMD, p_base_addr,
|
||||
@@ -690,8 +688,9 @@ int rome_edl_patch_download_request(int fd)
|
||||
__FUNCTION__, index);
|
||||
goto error;
|
||||
}
|
||||
- fprintf(stderr, "%s: Successfully downloaded patch segment: %d\n",
|
||||
- __FUNCTION__, index);
|
||||
+
|
||||
+ hciprintf(stderr, "%s: Successfully downloaded patch segment: %d\n",
|
||||
+ __FUNCTION__, index);
|
||||
}
|
||||
|
||||
/* Check if any pending patch data to be sent */
|
||||
@@ -725,8 +724,8 @@ int rome_edl_patch_download_request(int fd)
|
||||
goto error;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: Successfully downloaded patch segment: %d\n",
|
||||
- __FUNCTION__, index);
|
||||
+ hciprintf(stderr, "%s: Successfully downloaded patch segment: %d\n",
|
||||
+ __FUNCTION__, index);
|
||||
}
|
||||
|
||||
error:
|
||||
@@ -740,7 +739,7 @@ static int rome_download_rampatch(int fd)
|
||||
fprintf(stderr, "%s:\n", __FUNCTION__);
|
||||
|
||||
/* Get handle to the RAMPATCH binary file */
|
||||
- fprintf(stderr, "%s: Getting handle to the RAMPATCH binary file from %s\n", __FUNCTION__, ROME_FW_PATH);
|
||||
+ hciprintf(stderr, "%s: Getting handle to the RAMPATCH binary file from %s\n", __FUNCTION__, ROME_FW_PATH);
|
||||
file = fopen(ROME_FW_PATH, "r");
|
||||
if (file == NULL) {
|
||||
fprintf(stderr, "%s: Failed to get handle to the RAMPATCH bin file!\n",
|
||||
@@ -749,7 +748,7 @@ static int rome_download_rampatch(int fd)
|
||||
}
|
||||
|
||||
/* Allocate memory for the patch headder info */
|
||||
- fprintf(stderr, "%s: Allocating memory for the patch header\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Allocating memory for the patch header\n", __FUNCTION__);
|
||||
phdr_buffer = (unsigned char *) malloc(PATCH_HDR_LEN + 1);
|
||||
if (phdr_buffer == NULL) {
|
||||
fprintf(stderr, "%s: Failed to allocate memory for patch header\n",
|
||||
@@ -760,7 +759,7 @@ static int rome_download_rampatch(int fd)
|
||||
phdr_buffer[index] = 0x0;
|
||||
|
||||
/* Read 28 bytes of patch header information */
|
||||
- fprintf(stderr, "%s: Reading patch header info\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Reading patch header info\n", __FUNCTION__);
|
||||
index = 0;
|
||||
do {
|
||||
c = fgetc (file);
|
||||
@@ -768,7 +767,7 @@ static int rome_download_rampatch(int fd)
|
||||
} while (index != PATCH_HDR_LEN);
|
||||
|
||||
/* Save the patch header info into local structure */
|
||||
- fprintf(stderr, "%s: Saving patch hdr. info\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Saving patch hdr. info\n", __FUNCTION__);
|
||||
rome_extract_patch_header_info((unsigned char *)phdr_buffer);
|
||||
|
||||
/* Set the patch header info onto the Controller */
|
||||
@@ -779,7 +778,7 @@ static int rome_download_rampatch(int fd)
|
||||
}
|
||||
|
||||
/* Allocate memory for the patch payload */
|
||||
- fprintf(stderr, "%s: Allocating memory for patch payload\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Allocating memory for patch payload\n", __FUNCTION__);
|
||||
size = rampatch_patch_info.patch_length;
|
||||
pdata_buffer = (unsigned char *) malloc(size+1);
|
||||
if (pdata_buffer == NULL) {
|
||||
@@ -791,7 +790,7 @@ static int rome_download_rampatch(int fd)
|
||||
pdata_buffer[index] = 0x0;
|
||||
|
||||
/* Read the patch data from Rampatch binary image */
|
||||
- fprintf(stderr, "%s: Reading patch payload from RAMPATCH file\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Reading patch payload from RAMPATCH file\n", __FUNCTION__);
|
||||
index = 0;
|
||||
do {
|
||||
c = fgetc (file);
|
||||
@@ -924,7 +923,7 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr)
|
||||
unsigned char *nvm_byte_ptr;
|
||||
unsigned short pcm_value, ibs_value;
|
||||
|
||||
- fprintf(stderr, "File Open (%s)\n", file_path);
|
||||
+ hciprintf(stderr, "File Open (%s)\n", file_path);
|
||||
pFile = fopen ( file_path , "r" );
|
||||
if (pFile==NULL) {;
|
||||
fprintf(stderr, "%s File Open Fail\n", file_path);
|
||||
@@ -967,30 +966,30 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr)
|
||||
gtlv_dwndcfg = ptlv_header->tlv.patch.dwnd_cfg;
|
||||
|
||||
if(ptlv_header->tlv_type == TLV_TYPE_PATCH){
|
||||
- fprintf(stderr, "====================================================\n");
|
||||
- fprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type);
|
||||
- fprintf(stderr, "Length\t\t\t : %d bytes\n", (ptlv_header->tlv_length1) |
|
||||
- (ptlv_header->tlv_length2 << 8) |
|
||||
- (ptlv_header->tlv_length3 << 16));
|
||||
- fprintf(stderr, "Total Length\t\t\t : %d bytes\n", ptlv_header->tlv.patch.tlv_data_len);
|
||||
- fprintf(stderr, "Patch Data Length\t\t\t : %d bytes\n",ptlv_header->tlv.patch.tlv_patch_data_len);
|
||||
- fprintf(stderr, "Signing Format Version\t : 0x%x\n", ptlv_header->tlv.patch.sign_ver);
|
||||
- fprintf(stderr, "Signature Algorithm\t\t : 0x%x\n", ptlv_header->tlv.patch.sign_algorithm);
|
||||
- fprintf(stderr, "Event Handling\t\t\t : 0x%x", ptlv_header->tlv.patch.dwnd_cfg);
|
||||
- fprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved1);
|
||||
- fprintf(stderr, "Product ID\t\t\t : 0x%04x\n", ptlv_header->tlv.patch.prod_id);
|
||||
- fprintf(stderr, "Rom Build Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.build_ver);
|
||||
- fprintf(stderr, "Patch Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.patch_ver);
|
||||
- fprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved2);
|
||||
- fprintf(stderr, "Patch Entry Address\t\t : 0x%x\n", (ptlv_header->tlv.patch.patch_entry_addr));
|
||||
- fprintf(stderr, "====================================================\n");
|
||||
-
|
||||
+ hciprintf(stderr, "====================================================\n");
|
||||
+ hciprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type);
|
||||
+ hciprintf(stderr, "Length\t\t\t : %d bytes\n", (ptlv_header->tlv_length1) |
|
||||
+ (ptlv_header->tlv_length2 << 8) |
|
||||
+ (ptlv_header->tlv_length3 << 16));
|
||||
+ hciprintf(stderr, "Total Length\t\t\t : %d bytes\n", ptlv_header->tlv.patch.tlv_data_len);
|
||||
+ hciprintf(stderr, "Patch Data Length\t\t\t : %d bytes\n",ptlv_header->tlv.patch.tlv_patch_data_len);
|
||||
+ hciprintf(stderr, "Signing Format Version\t : 0x%x\n", ptlv_header->tlv.patch.sign_ver);
|
||||
+ hciprintf(stderr, "Signature Algorithm\t\t : 0x%x\n", ptlv_header->tlv.patch.sign_algorithm);
|
||||
+ hciprintf(stderr, "Event Handling\t\t\t : 0x%x", ptlv_header->tlv.patch.dwnd_cfg);
|
||||
+ hciprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved1);
|
||||
+ hciprintf(stderr, "Product ID\t\t\t : 0x%04x\n", ptlv_header->tlv.patch.prod_id);
|
||||
+ hciprintf(stderr, "Rom Build Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.build_ver);
|
||||
+ hciprintf(stderr, "Patch Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.patch_ver);
|
||||
+ hciprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved2);
|
||||
+ hciprintf(stderr, "Patch Entry Address\t\t : 0x%x\n", (ptlv_header->tlv.patch.patch_entry_addr));
|
||||
+ hciprintf(stderr, "====================================================\n");
|
||||
} else if(ptlv_header->tlv_type == TLV_TYPE_NVM) {
|
||||
- fprintf(stderr, "====================================================\n");
|
||||
- fprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type);
|
||||
- fprintf(stderr, "Length\t\t\t : %d bytes\n", nvm_length = (ptlv_header->tlv_length1) |
|
||||
- (ptlv_header->tlv_length2 << 8) |
|
||||
- (ptlv_header->tlv_length3 << 16));
|
||||
+ nvm_length = (ptlv_header->tlv_length1) |
|
||||
+ (ptlv_header->tlv_length2 << 8) |
|
||||
+ (ptlv_header->tlv_length3 << 16);
|
||||
+ hciprintf(stderr, "====================================================\n");
|
||||
+ hciprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type);
|
||||
+ hciprintf(stderr, "Length\t\t\t : %d bytes\n", nvm_length);
|
||||
|
||||
if(nvm_length <= 0)
|
||||
return readSize;
|
||||
@@ -998,11 +997,11 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr)
|
||||
for(nvm_byte_ptr=(unsigned char *)(nvm_ptr = &(ptlv_header->tlv.nvm)), nvm_index=0;
|
||||
nvm_index < nvm_length ; nvm_ptr = (tlv_nvm_hdr *) nvm_byte_ptr)
|
||||
{
|
||||
- fprintf(stderr, "TAG ID\t\t\t : %d\n", nvm_ptr->tag_id);
|
||||
- fprintf(stderr, "TAG Length\t\t\t : %d\n", nvm_tag_len = nvm_ptr->tag_len);
|
||||
- fprintf(stderr, "TAG Pointer\t\t\t : %d\n", nvm_ptr->tag_ptr);
|
||||
- fprintf(stderr, "TAG Extended Flag\t\t : %d\n", nvm_ptr->tag_ex_flag);
|
||||
-
|
||||
+ nvm_tag_len = nvm_ptr->tag_len;
|
||||
+ hciprintf(stderr, "TAG ID\t\t\t : %d\n", nvm_ptr->tag_id);
|
||||
+ hciprintf(stderr, "TAG Length\t\t\t : %d\n", nvm_tag_len);
|
||||
+ hciprintf(stderr, "TAG Pointer\t\t\t : %d\n", nvm_ptr->tag_ptr);
|
||||
+ hciprintf(stderr, "TAG Extended Flag\t\t : %d\n", nvm_ptr->tag_ex_flag);
|
||||
/* Increase nvm_index to NVM data */
|
||||
nvm_index+=sizeof(tlv_nvm_hdr);
|
||||
nvm_byte_ptr+=sizeof(tlv_nvm_hdr);
|
||||
@@ -1058,7 +1057,7 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr)
|
||||
snprintf((char *) data_buf, PRINT_BUF_SIZE, "%s%.02x ",
|
||||
(char *)data_buf, *(nvm_byte_ptr + i));
|
||||
|
||||
- fprintf(stderr, "TAG Data\t\t\t : %s\n", data_buf);
|
||||
+ hciprintf(stderr, "TAG Data\t\t\t : %s\n", data_buf);
|
||||
|
||||
/* Clear buffer */
|
||||
memset(data_buf, 0x0, PRINT_BUF_SIZE);
|
||||
@@ -1068,7 +1067,7 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr)
|
||||
nvm_byte_ptr +=nvm_ptr->tag_len;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "====================================================\n");
|
||||
+ hciprintf(stderr, "====================================================\n");
|
||||
|
||||
} else {
|
||||
fprintf(stderr, "TLV Header type is unknown (%d) \n", ptlv_header->tlv_type);
|
||||
@@ -1083,7 +1082,7 @@ int rome_tlv_dnld_segment(int fd, int index, int seg_size, unsigned char wait_cc
|
||||
unsigned char cmd[HCI_MAX_CMD_SIZE];
|
||||
unsigned char rsp[HCI_MAX_EVENT_SIZE];
|
||||
|
||||
- fprintf(stderr, "%s: Downloading TLV Patch segment no.%d, size:%d wait_cc_evt = 0x%x\n", __FUNCTION__, index, seg_size, wait_cc_evt);
|
||||
+ hciprintf(stderr, "%s: Downloading TLV Patch segment no.%d, size:%d wait_cc_evt = 0x%x\n", __FUNCTION__, index, seg_size, wait_cc_evt);
|
||||
|
||||
/* Frame the HCI CMD PKT to be sent to Controller*/
|
||||
frame_hci_cmd_pkt(cmd, EDL_PATCH_TLV_REQ_CMD, 0, index, seg_size);
|
||||
@@ -1109,7 +1108,7 @@ int rome_tlv_dnld_segment(int fd, int index, int seg_size, unsigned char wait_cc
|
||||
}
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", __FUNCTION__, index);
|
||||
+ hciprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", __FUNCTION__, index);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1123,7 +1122,7 @@ int rome_tlv_dnld_req(int fd, int tlv_size)
|
||||
remain_size = (tlv_size < MAX_SIZE_PER_TLV_SEGMENT)?\
|
||||
tlv_size: (tlv_size%MAX_SIZE_PER_TLV_SEGMENT);
|
||||
|
||||
- fprintf(stderr, "%s: TLV size: %d, Total Seg num: %d, remain size: %d\n",
|
||||
+ hciprintf(stderr, "%s: TLV size: %d, Total Seg num: %d, remain size: %d\n",
|
||||
__FUNCTION__,tlv_size, total_segment, remain_size);
|
||||
|
||||
if (gTlv_type == TLV_TYPE_PATCH) {
|
||||
@@ -1137,12 +1136,12 @@ int rome_tlv_dnld_req(int fd, int tlv_size)
|
||||
case ROME_SKIP_EVT_NONE:
|
||||
wait_vsc_evt = TRUE;
|
||||
wait_cc_evt = TRUE;
|
||||
- fprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_NONE", __func__);
|
||||
+ hciprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_NONE", __func__);
|
||||
break;
|
||||
case ROME_SKIP_EVT_VSE_CC:
|
||||
wait_vsc_evt = FALSE;
|
||||
wait_cc_evt = FALSE;
|
||||
- fprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_VSE_CC", __func__);
|
||||
+ hciprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_VSE_CC", __func__);
|
||||
break;
|
||||
/* Not handled for now */
|
||||
case ROME_SKIP_EVT_VSE:
|
||||
@@ -1479,14 +1478,14 @@ int rome_1_0_nvm_tag_dnld(int fd)
|
||||
};
|
||||
#endif
|
||||
|
||||
- fprintf(stderr, "%s: Start sending NVM Tags (ver: 0x%x)\n", __FUNCTION__, (unsigned int) NVM_VERSION);
|
||||
+ hciprintf(stderr, "%s: Start sending NVM Tags (ver: 0x%x)\n", __FUNCTION__, (unsigned int) NVM_VERSION);
|
||||
|
||||
for (i=0; (i < MAX_TAG_CMD) && (cmds[i][0] != TAG_END); i++)
|
||||
{
|
||||
/* Write BD Address */
|
||||
if(cmds[i][TAG_NUM_OFFSET] == TAG_NUM_2){
|
||||
memcpy(&cmds[i][TAG_BDADDR_OFFSET], vnd_local_bd_addr, 6);
|
||||
- fprintf(stderr, "BD Address: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
|
||||
+ hciprintf(stderr, "BD Address: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
|
||||
cmds[i][TAG_BDADDR_OFFSET ], cmds[i][TAG_BDADDR_OFFSET + 1],
|
||||
cmds[i][TAG_BDADDR_OFFSET + 2], cmds[i][TAG_BDADDR_OFFSET + 3],
|
||||
cmds[i][TAG_BDADDR_OFFSET + 4], cmds[i][TAG_BDADDR_OFFSET + 5]);
|
||||
@@ -1598,7 +1597,7 @@ int rome_set_baudrate_req(int fd, int local_baud_rate,
|
||||
flow_control(fd, MSM_DISABLE_FLOW_CTRL);
|
||||
|
||||
/* Send the HCI command packet to UART for transmission */
|
||||
- fprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3],cmd[4]) ;
|
||||
+ hciprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3],cmd[4]) ;
|
||||
err = write(fd, cmd, size);
|
||||
if (err != size) {
|
||||
fprintf(stderr, "%s: Send failed with ret value: %d\n", __FUNCTION__, err);
|
||||
@@ -1616,7 +1615,7 @@ int rome_set_baudrate_req(int fd, int local_baud_rate,
|
||||
goto error;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__);
|
||||
|
||||
/* Wait for command complete event */
|
||||
err = read_hci_event(fd, rsp, HCI_MAX_EVENT_SIZE);
|
||||
@@ -1624,7 +1623,6 @@ int rome_set_baudrate_req(int fd, int local_baud_rate,
|
||||
fprintf(stderr, "%s: Failed to set patch info on Controller\n", __FUNCTION__);
|
||||
goto error;
|
||||
}
|
||||
- fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
error:
|
||||
return err;
|
||||
|
||||
@@ -1639,7 +1637,7 @@ int rome_hci_reset_req(int fd, char baud, int hwfc)
|
||||
hci_command_hdr *cmd_hdr;
|
||||
int flags;
|
||||
|
||||
- fprintf(stderr, "%s: HCI RESET \n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: HCI RESET \n", __FUNCTION__);
|
||||
|
||||
memset(cmd, 0x0, HCI_MAX_CMD_SIZE);
|
||||
|
||||
@@ -1656,7 +1654,7 @@ int rome_hci_reset_req(int fd, char baud, int hwfc)
|
||||
flow_control(fd, MSM_DISABLE_FLOW_CTRL);
|
||||
|
||||
/* Send the HCI command packet to UART for transmission */
|
||||
- fprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3]);
|
||||
+ hciprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3]);
|
||||
err = write(fd, cmd, size);
|
||||
if (err != size) {
|
||||
fprintf(stderr, "%s: Send failed with ret value: %d\n", __FUNCTION__, err);
|
||||
@@ -1768,28 +1766,28 @@ int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti)
|
||||
goto error;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: Rome Version (0x%08x)\n", __FUNCTION__, rome_ver);
|
||||
+ hciprintf(stderr, "%s: Rome Version (0x%08x)\n", __FUNCTION__, rome_ver);
|
||||
|
||||
switch (rome_ver){
|
||||
case ROME_VER_1_0:
|
||||
{
|
||||
/* Set and Download the RAMPATCH */
|
||||
- fprintf(stderr, "%s: Setting Patch Header & Downloading Patches\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Setting Patch Header & Downloading Patches\n", __FUNCTION__);
|
||||
err = rome_download_rampatch(fd);
|
||||
if (err < 0) {
|
||||
fprintf(stderr, "%s: DOWNLOAD RAMPATCH failed!\n", __FUNCTION__);
|
||||
goto error;
|
||||
}
|
||||
- fprintf(stderr, "%s: DOWNLOAD RAMPTACH complete\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: DOWNLOAD RAMPTACH complete\n", __FUNCTION__);
|
||||
|
||||
/* Attach the RAMPATCH */
|
||||
- fprintf(stderr, "%s: Attaching the patches\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Attaching the patches\n", __FUNCTION__);
|
||||
err = rome_attach_rampatch(fd);
|
||||
if (err < 0) {
|
||||
fprintf(stderr, "%s: ATTACH RAMPATCH failed!\n", __FUNCTION__);
|
||||
goto error;
|
||||
}
|
||||
- fprintf(stderr, "%s: ATTACH RAMPTACH complete\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: ATTACH RAMPTACH complete\n", __FUNCTION__);
|
||||
|
||||
/* Send Reset */
|
||||
size = (HCI_CMD_IND + HCI_COMMAND_HDR_SIZE + EDL_PATCH_CMD_LEN);
|
||||
@@ -1800,7 +1798,7 @@ int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti)
|
||||
}
|
||||
|
||||
/* NVM download */
|
||||
- fprintf(stderr, "%s: Downloading NVM\n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Downloading NVM\n", __FUNCTION__);
|
||||
err = rome_1_0_nvm_tag_dnld(fd);
|
||||
if ( err <0 ) {
|
||||
fprintf(stderr, "Downloading NVM Failed !!\n");
|
||||
@@ -1817,7 +1815,7 @@ int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti)
|
||||
}
|
||||
}
|
||||
|
||||
- fprintf(stderr, "HCI Reset is done\n");
|
||||
+ hciprintf(stderr, "HCI Reset is done\n");
|
||||
}
|
||||
break;
|
||||
case ROME_VER_1_1:
|
||||
@@ -1874,7 +1872,7 @@ download:
|
||||
fprintf(stderr, "%s: Download TLV file failed!\n", __FUNCTION__);
|
||||
goto error;
|
||||
}
|
||||
- fprintf(stderr, "%s: Download TLV file successfully \n", __FUNCTION__);
|
||||
+ hciprintf(stderr, "%s: Download TLV file successfully \n", __FUNCTION__);
|
||||
|
||||
/*
|
||||
* Overriding the baud rate value in NVM file with the user
|
||||
@@ -1893,7 +1891,7 @@ download:
|
||||
fprintf(stderr, "HCI Reset Failed !!!\n");
|
||||
goto error;
|
||||
}
|
||||
- fprintf(stderr, "HCI Reset is done\n");
|
||||
+ hciprintf(stderr, "HCI Reset is done\n");
|
||||
|
||||
break;
|
||||
case ROME_VER_UNKNOWN:
|
||||
|
|
@ -67,66 +67,11 @@ bluetooth_init() {
|
|||
|
||||
# Start the Bluetooth driver and bring up the interface
|
||||
HCIATTACH_LOG="/var/log/hciattach.log"
|
||||
BT_CMD="HCIATTACH"
|
||||
RETRIES="5"
|
||||
while [ "${RETRIES}" -gt "0" ]; do
|
||||
case "${BT_CMD}" in
|
||||
HCIATTACH)
|
||||
# Reset BT
|
||||
killproc hciattach
|
||||
powercycle_gpio "${BT_EN_QCA_GPIO_NR}"
|
||||
if hciattach ttyBt qca ${BT_RATE:-3000000} ${BT_FLOW:-flow} >${HCIATTACH_LOG} 2>&1; then
|
||||
BT_CMD="HCICONFIG_UP"
|
||||
else
|
||||
BT_ERROR="FAILED (hciattach)"
|
||||
BT_CMD="BT_INIT_FAIL"
|
||||
fi
|
||||
;;
|
||||
HCICONFIG_UP)
|
||||
if hciconfig hci0 up; then
|
||||
BT_CMD="HCITOOL_SETMAC"
|
||||
else
|
||||
BT_ERROR="FAILED (hciconfig up)"
|
||||
BT_CMD="BT_INIT_FAIL"
|
||||
fi
|
||||
;;
|
||||
HCITOOL_SETMAC)
|
||||
#
|
||||
# Set the MAC address (the interface needs to be up to send HCI commands)
|
||||
#
|
||||
# Convert it to the format accepted by 'hcitool' ("00:04:F3:11:22:33" -> "33 22 11 F3 04 00")
|
||||
#
|
||||
HCI_MACADDR="$(echo ${BT_MACADDR} | tr ':' '\n' | tac | tr '\n' ' ' | sed -e 's/ $//g')"
|
||||
if hcitool -i hci0 cmd 3F 000B 01 02 06 ${HCI_MACADDR} >/dev/null; then
|
||||
BT_CMD="HCITOOL_RESET"
|
||||
else
|
||||
BT_ERROR="FAILED (hcitool set MAC)"
|
||||
BT_CMD="BT_INIT_FAIL"
|
||||
fi
|
||||
;;
|
||||
HCITOOL_RESET)
|
||||
if hcitool -i hci0 cmd 03 0003 00 >/dev/null; then
|
||||
BT_CMD="HCICONFIG_RESET"
|
||||
else
|
||||
BT_ERROR="FAILED (hcitool reset)"
|
||||
BT_CMD="BT_INIT_FAIL"
|
||||
fi
|
||||
;;
|
||||
HCICONFIG_RESET)
|
||||
if hciconfig hci0 reset; then
|
||||
break
|
||||
else
|
||||
BT_ERROR="FAILED (hciconfig reset)"
|
||||
BT_CMD="BT_INIT_FAIL"
|
||||
fi
|
||||
;;
|
||||
BT_INIT_FAIL)
|
||||
RETRIES="$((RETRIES - 1))"
|
||||
BT_CMD="HCIATTACH"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
[ "${RETRIES}" = "0" ] && error "${BT_ERROR}"
|
||||
killproc hciattach
|
||||
powercycle_gpio "${BT_EN_QCA_GPIO_NR}"
|
||||
if ! hciattach ttyBt qca ${BT_RATE:-3000000} -t30 ${BT_FLOW:-flow} unused ${BT_MACADDR} >${HCIATTACH_LOG} 2>&1; then
|
||||
BT_ERROR="FAIL (hciattach)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Source function library
|
||||
|
|
@ -137,17 +82,16 @@ case "$1" in
|
|||
if [ -d "/proc/device-tree/bluetooth" ]; then
|
||||
echo -n "Starting bluetooth hardware: "
|
||||
bluetooth_init
|
||||
echo "done."
|
||||
echo "${BT_ERROR:-done.}"
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
if [ -d "/sys/class/bluetooth/hci0" ]; then
|
||||
echo -n "Stopping bluetooth hardware: "
|
||||
hciconfig hci0 down || BT_ERROR="FAILED (hciconfig down)"
|
||||
killproc hciattach
|
||||
# Power down bluetooth
|
||||
set_gpio_value "${BT_EN_QCA_GPIO_NR}" 0
|
||||
echo "${BT_ERROR:-done.}"
|
||||
echo "done."
|
||||
fi
|
||||
;;
|
||||
restart)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
[General]
|
||||
|
||||
# Default adapter name
|
||||
# Defaults to 'BlueZ X.YZ'
|
||||
Name = cc6ul
|
||||
|
||||
[Policy]
|
||||
|
||||
# AutoEnable defines option to enable all controllers when they are found.
|
||||
# This includes adapters present on start as well as adapters that are plugged
|
||||
# in later on. Defaults to 'false'.
|
||||
AutoEnable=true
|
||||
|
|
@ -4,6 +4,7 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${BP}:"
|
|||
|
||||
SRC_URI += " \
|
||||
file://bluetooth-init \
|
||||
file://main.conf \
|
||||
file://0001-hcitool-do-not-show-unsupported-refresh-option.patch \
|
||||
file://0002-hcitool-increase-the-shown-connection-limit-to-20.patch \
|
||||
"
|
||||
|
|
@ -28,6 +29,9 @@ SRC_URI_append_ccimx6ul = " \
|
|||
file://0019-bluetooth-Fix-flow-control-operation.patch \
|
||||
file://0020-Adding-MDM-specific-code-under-_PLATFORM_MDM_.patch \
|
||||
file://0021-Bluetooth-Fix-static-analysis-issues.patch \
|
||||
file://0022-hciattach_rome-Respect-the-user-indication-for-noflo.patch \
|
||||
file://0023-hciattach-If-the-user-supplies-a-bdaddr-use-it.patch \
|
||||
file://0024-hciattach-Add-verbosity-option.patch \
|
||||
"
|
||||
|
||||
inherit update-rc.d
|
||||
|
|
@ -37,10 +41,12 @@ PACKAGECONFIG_append = " experimental"
|
|||
do_install_append() {
|
||||
install -d ${D}${sysconfdir}/init.d/
|
||||
install -m 0755 ${WORKDIR}/bluetooth-init ${D}${sysconfdir}/init.d/bluetooth-init
|
||||
install -m 0644 ${WORKDIR}/main.conf ${D}${sysconfdir}/bluetooth/
|
||||
}
|
||||
|
||||
PACKAGES =+ "${PN}-init"
|
||||
|
||||
FILES_${PN} += " ${sysconfdir}/bluetooth/main.conf"
|
||||
FILES_${PN}-init = "${sysconfdir}/init.d/bluetooth-init"
|
||||
|
||||
INITSCRIPT_PACKAGES += "${PN}-init"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
From: Tatiana Leon <tatiana.leon@digi.com>
|
||||
Date: Fri, 28 Apr 2017 14:47:43 +0200
|
||||
Subject: [PATCH] mbedtls library: add pkg-config file
|
||||
|
||||
Signed-off-by: Tatiana Leon <tatiana.leon@digi.com>
|
||||
---
|
||||
CMakeLists.txt | 4 ++++
|
||||
mbedtls.pc.in | 12 ++++++++++++
|
||||
2 files changed, 16 insertions(+)
|
||||
create mode 100644 mbedtls.pc.in
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 094d906..b662eee 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -124,3 +124,7 @@ if(ENABLE_TESTING)
|
||||
)
|
||||
endif(UNIX)
|
||||
endif()
|
||||
+
|
||||
+SET(prefix ${CMAKE_INSTALL_PREFIX})
|
||||
+CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/mbedtls.pc.in ${CMAKE_BINARY_DIR}/mbedtls.pc @ONLY)
|
||||
+INSTALL(FILES ${CMAKE_BINARY_DIR}/mbedtls.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
|
||||
diff --git a/mbedtls.pc.in b/mbedtls.pc.in
|
||||
new file mode 100644
|
||||
index 0000000..9eff4ac
|
||||
--- /dev/null
|
||||
+++ b/mbedtls.pc.in
|
||||
@@ -0,0 +1,12 @@
|
||||
+prefix=@prefix@
|
||||
+exec_prefix=${prefix}
|
||||
+libdir=${exec_prefix}/lib
|
||||
+includedir=${prefix}/include
|
||||
+
|
||||
+Name: mbedtls
|
||||
+Description: Light-weight open source cryptographic and SSL/TLS library
|
||||
+Version: 2.1.1
|
||||
+
|
||||
+Libs: -L${libdir} -lmbedtls -lmbedcrypto -lmbedx509
|
||||
+Cflags: -I${includedir}/mbedtls
|
||||
+
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
# Copyright (C) 2017 Digi International.
|
||||
|
||||
SUMMARY = "An open source, portable, easy to use, readable and flexible SSL \
|
||||
library"
|
||||
DESCRIPTION = "mbedtls is a lean open source crypto library \
|
||||
for providing SSL and TLS support in your programs. It offers \
|
||||
an intuitive API and documented header files, so you can actually \
|
||||
understand what the code does. It features: \
|
||||
\
|
||||
- Symmetric algorithms, like AES, Blowfish, Triple-DES, DES, ARC4, \
|
||||
Camellia and XTEA \
|
||||
- Hash algorithms, like SHA-1, SHA-2, RIPEMD-160 and MD5 \
|
||||
- Entropy pool and random generators, like CTR-DRBG and HMAC-DRBG \
|
||||
- Public key algorithms, like RSA, Elliptic Curves, Diffie-Hellman, \
|
||||
ECDSA and ECDH \
|
||||
- SSL v3 and TLS 1.0, 1.1 and 1.2 \
|
||||
- Abstraction layers for ciphers, hashes, public key operations, \
|
||||
platform abstraction and threading \
|
||||
"
|
||||
|
||||
HOMEPAGE = "https://tls.mbed.org/"
|
||||
SECTION = "libdevel"
|
||||
BUGTRACKER = "https://github.com/ARMmbed/mbedtls/issues"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://LICENSE;md5=302d50a6369f5f22efdb674db908167a"
|
||||
|
||||
SRC_URI = " \
|
||||
https://github.com/ARMmbed/mbedtls/archive/${PN}-${PV}.tar.gz \
|
||||
file://0001-mbedtls-library-add-pkg-config-file.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "6f5d3e7154ce4e04bcb9b299f614775f"
|
||||
SRC_URI[sha256sum] = "ae458a4987f36819bdf1d39519212f4063780fe448d4155878fccf4e782a715f"
|
||||
|
||||
S = "${WORKDIR}/${PN}-${PN}-${PV}"
|
||||
|
||||
inherit cmake
|
||||
|
||||
EXTRA_OECMAKE = " \
|
||||
-DENABLE_PROGRAMS:BOOL=OFF \
|
||||
-DENABLE_TESTING:BOOL=OFF \
|
||||
-DUSE_STATIC_MBEDTLS_LIBRARY:BOOL=ON \
|
||||
-DUSE_SHARED_MBEDTLS_LIBRARY:BOOL=ON \
|
||||
-DLIB_INSTALL_DIR:STRING=${libdir} \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
|
||||
"
|
||||
|
||||
ALLOW_EMPTY_${PN} = "1"
|
||||
|
|
@ -5,6 +5,7 @@ ACTION!="add|change|move", GOTO="mm_digi_xbee_cellular_modem_end"
|
|||
|
||||
# ConnectCore 6 SBC
|
||||
DEVPATH=="/devices/soc0/soc.0/2100000.aips-bus/21f4000.serial/tty/ttymxc4", ENV{ID_MM_PLATFORM_DRIVER_PROBE}="1"
|
||||
DEVPATH=="/devices/soc0/soc/2100000.aips-bus/21f4000.serial/tty/ttymxc4", ENV{ID_MM_PLATFORM_DRIVER_PROBE}="1"
|
||||
|
||||
# ConnectCore 6UL SBC Pro
|
||||
DEVPATH=="/devices/platform/soc/2100000.aips-bus/21e8000.serial/tty/ttymxc1", ENV{ID_MM_PLATFORM_DRIVER_PROBE}="1"
|
||||
|
|
|
|||
|
|
@ -1,65 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
RETRIES=12
|
||||
POLLING_WAIT=5
|
||||
|
||||
# Run only for cellular network interfaces
|
||||
[ -z "${IF_APN}" ] && exit 0
|
||||
|
||||
background_connect() {
|
||||
# The XBee Cellular needs more time to settle down before MM is able
|
||||
# to detect it. As the XBee is connected to a 'ttymxc' serial port,
|
||||
# we check those ports to conditionally delay the launch of MM.
|
||||
if echo "${IF_PORT}" | grep -qs ttymxc; then
|
||||
sleep 25
|
||||
fi
|
||||
|
||||
# Ensure ModemManager is running
|
||||
killall -0 ModemManager 2>/dev/null || ModemManager --log-file=/var/log/modemmanager.log &
|
||||
|
||||
# Wait for modem detection
|
||||
while [ "${RETRIES}" -gt "0" ]; do
|
||||
mmcli -m 0 > /dev/null 2>&1 && break
|
||||
sleep ${POLLING_WAIT}
|
||||
RETRIES="$((RETRIES - 1))"
|
||||
done
|
||||
|
||||
# Abort if no modem detected
|
||||
if [ "$RETRIES" -eq "0" ]; then
|
||||
logger -s -p error -t modemmanager "No modem detected";
|
||||
exit
|
||||
fi
|
||||
|
||||
ARGS="apn=${IF_APN}"
|
||||
[ -n "${IF_PIN}" ] && ARGS="${ARGS},pin=${IF_PIN}"
|
||||
|
||||
[ -n "${IF_USER}" ] && ARGS="${ARGS},user=${IF_USER}"
|
||||
[ -n "${IF_PASSWORD}" ] && ARGS="${ARGS},password=${IF_PASSWORD}"
|
||||
[ -n "${IF_PORT}" ] && ARGS="${ARGS},number=*99#"
|
||||
|
||||
# Enable the modem and connect to provider
|
||||
mmcli -m 0 --simple-connect=${ARGS} > /dev/null 2>&1
|
||||
|
||||
# For serial modems, pppd creates the network interface
|
||||
# Otherwise, get an IP with udhcpc
|
||||
if [ -n "${IF_PORT}" ]; then
|
||||
pppd ${IF_PORT} call mm_cellular > /dev/null 2>&1
|
||||
else
|
||||
udhcpc -q -i ${IFACE} >/dev/null
|
||||
fi
|
||||
|
||||
ifconfig ${IFACE} up
|
||||
}
|
||||
|
||||
|
||||
if [ "$MODE" = "start" ]; then
|
||||
background_connect &
|
||||
elif [ "$MODE" = "stop" ]; then
|
||||
# If a call number was used, destroy the network interface
|
||||
[ -n "${IF_PORT}" ] && poff mm_cellular
|
||||
|
||||
ifconfig ${IFACE} down
|
||||
|
||||
# Disconnect and disable the modem
|
||||
mmcli -m 0 -d > /dev/null 2>&1
|
||||
fi
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI += " \
|
||||
file://cellularifupdown \
|
||||
file://78-mm-digi-xbee-cellular.rules \
|
||||
"
|
||||
|
||||
|
|
@ -13,11 +12,6 @@ SRC_URI += " \
|
|||
PACKAGECONFIG_remove = " polkit"
|
||||
|
||||
do_install_append() {
|
||||
# Install ifupdown script for cellular interfaces
|
||||
install -d ${D}${sysconfdir}/network/if-pre-up.d/ ${D}${sysconfdir}/network/if-post-down.d/
|
||||
install -m 0755 ${WORKDIR}/cellularifupdown ${D}${sysconfdir}/network/if-pre-up.d/
|
||||
ln -sf ../if-pre-up.d/cellularifupdown ${D}${sysconfdir}/network/if-post-down.d/cellularifupdown
|
||||
|
||||
# Install udev rules for XBee cellular
|
||||
install -d ${D}${nonarch_base_libdir}/udev/rules.d
|
||||
install -m 0644 ${WORKDIR}/78-mm-digi-xbee-cellular.rules ${D}${nonarch_base_libdir}/udev/rules.d/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
[main]
|
||||
plugins=ifupdown,keyfile
|
||||
no-auto-default=type:ethernet
|
||||
|
||||
[ifupdown]
|
||||
managed=false
|
||||
|
||||
[keyfile]
|
||||
unmanaged-devices=interface-name:p2p0;interface-name:wlan1
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/bin/sh
|
||||
|
||||
DAEMON="/usr/sbin/NetworkManager"
|
||||
PIDFILE="/var/run/NetworkManager/NetworkManager.pid"
|
||||
DESC="NetworkManager"
|
||||
|
||||
case "${1}" in
|
||||
start)
|
||||
mkdir -p /var/run/NetworkManager
|
||||
echo -n "Starting ${DESC}: "
|
||||
${DAEMON}
|
||||
echo "done"
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping ${DESC}: "
|
||||
start-stop-daemon -K -o -q -p ${PIDFILE}
|
||||
echo "done"
|
||||
;;
|
||||
restart)
|
||||
${0} stop
|
||||
sleep 1
|
||||
${0} start
|
||||
;;
|
||||
*)
|
||||
echo "Usage: ${0} {start|stop|restart}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
[connection]
|
||||
id=cellular
|
||||
type=gsm
|
||||
|
||||
[gsm]
|
||||
apn=##CELLULAR_APN##
|
||||
number=*99#
|
||||
password=##CELLULAR_PASSWORD##
|
||||
pin=##CELLULAR_PIN##
|
||||
username=##CELLULAR_USER##
|
||||
|
||||
[ipv6]
|
||||
method=ignore
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[connection]
|
||||
id=eth0
|
||||
type=ethernet
|
||||
interface-name=eth0
|
||||
|
||||
[ipv4]
|
||||
method=auto
|
||||
|
||||
[ipv6]
|
||||
method=ignore
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
[connection]
|
||||
id=eth0
|
||||
type=ethernet
|
||||
interface-name=eth0
|
||||
|
||||
[ipv4]
|
||||
address1=##ETH0_STATIC_CIDR##,##ETH0_STATIC_GATEWAY##
|
||||
dns=##ETH0_STATIC_DNS##;
|
||||
method=manual
|
||||
|
||||
[ipv6]
|
||||
method=ignore
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[connection]
|
||||
id=eth1
|
||||
type=ethernet
|
||||
interface-name=eth1
|
||||
|
||||
[ipv4]
|
||||
method=auto
|
||||
|
||||
[ipv6]
|
||||
method=ignore
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
[connection]
|
||||
id=eth1
|
||||
type=ethernet
|
||||
interface-name=eth1
|
||||
|
||||
[ipv4]
|
||||
address1=##ETH1_STATIC_CIDR##,##ETH1_STATIC_GATEWAY##
|
||||
dns=##ETH1_STATIC_DNS##;
|
||||
method=manual
|
||||
|
||||
[ipv6]
|
||||
method=ignore
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
[connection]
|
||||
id=wlan0
|
||||
type=wifi
|
||||
interface-name=wlan0
|
||||
|
||||
[wifi]
|
||||
ssid=""
|
||||
|
||||
[ipv4]
|
||||
method=auto
|
||||
|
||||
[ipv6]
|
||||
method=ignore
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
[connection]
|
||||
id=wlan0
|
||||
type=wifi
|
||||
interface-name=wlan0
|
||||
|
||||
[wifi]
|
||||
ssid=""
|
||||
|
||||
[ipv4]
|
||||
address1=##WLAN0_STATIC_CIDR##,##WLAN0_STATIC_GATEWAY##
|
||||
dns=##WLAN0_STATIC_DNS##;
|
||||
method=manual
|
||||
|
||||
[ipv6]
|
||||
method=ignore
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
# Copyright (C) 2017, Digi International Inc.
|
||||
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI += " \
|
||||
file://NetworkManager.conf \
|
||||
file://networkmanager-init \
|
||||
file://nm.cellular \
|
||||
file://nm.eth0.dhcp \
|
||||
file://nm.eth0.static \
|
||||
file://nm.eth1.dhcp \
|
||||
file://nm.eth1.static \
|
||||
file://nm.wlan0.dhcp \
|
||||
file://nm.wlan0.static \
|
||||
"
|
||||
|
||||
# 'polkit' and 'consolekit' require 'x11' distro feature, so disable them for non-X11 distros
|
||||
DEPENDS_remove = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'polkit', d)}"
|
||||
PACKAGECONFIG_remove = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'consolekit', d)}"
|
||||
EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '--enable-polkit=disabled', d)}"
|
||||
|
||||
PACKAGECONFIG_remove = "dnsmasq netconfig"
|
||||
PACKAGECONFIG_append = " concheck modemmanager ppp"
|
||||
|
||||
#
|
||||
# NetworkManager only accepts IP addresses in CIDR format
|
||||
#
|
||||
def ipaddr_to_cidr(iface, d):
|
||||
ipaddr = d.getVar('%s_STATIC_IP' % iface.upper(), True)
|
||||
netmask = d.getVar('%s_STATIC_NETMASK' % iface.upper(), True)
|
||||
binary_str = ''
|
||||
for byte in netmask.split('.'):
|
||||
binary_str += bin(int(byte))[2:].zfill(8)
|
||||
return ipaddr + '/' + str(len(binary_str.rstrip('0')))
|
||||
|
||||
ETH0_STATIC_CIDR = "${@ipaddr_to_cidr('eth0', d)}"
|
||||
ETH1_STATIC_CIDR = "${@ipaddr_to_cidr('eth1', d)}"
|
||||
WLAN0_STATIC_CIDR = "${@ipaddr_to_cidr('wlan0', d)}"
|
||||
|
||||
inherit update-rc.d
|
||||
|
||||
do_install_append() {
|
||||
install -d ${D}${sysconfdir}/init.d ${D}${sysconfdir}/NetworkManager
|
||||
install -m 0644 ${WORKDIR}/NetworkManager.conf ${D}${sysconfdir}/NetworkManager/
|
||||
install -m 0755 ${WORKDIR}/networkmanager-init ${D}${sysconfdir}/init.d/networkmanager
|
||||
|
||||
#
|
||||
# Connections config files
|
||||
#
|
||||
install -d ${D}${sysconfdir}/NetworkManager/system-connections/
|
||||
|
||||
# Ethernet
|
||||
install -m 0600 ${WORKDIR}/nm.eth0.${ETH0_MODE} ${D}${sysconfdir}/NetworkManager/system-connections/nm.eth0
|
||||
sed -i -e "s,##ETH0_STATIC_CIDR##,${ETH0_STATIC_CIDR},g" \
|
||||
-e "s,##ETH0_STATIC_GATEWAY##,${ETH0_STATIC_GATEWAY},g" \
|
||||
-e "s,##ETH0_STATIC_DNS##,${ETH0_STATIC_DNS},g" \
|
||||
${D}${sysconfdir}/NetworkManager/system-connections/nm.eth0
|
||||
|
||||
# Ethernet (second interface)
|
||||
install -m 0600 ${WORKDIR}/nm.eth1.${ETH1_MODE} ${D}${sysconfdir}/NetworkManager/system-connections/nm.eth1
|
||||
sed -i -e "s,##ETH1_STATIC_CIDR##,${ETH1_STATIC_CIDR},g" \
|
||||
-e "s,##ETH1_STATIC_GATEWAY##,${ETH1_STATIC_GATEWAY},g" \
|
||||
-e "s,##ETH1_STATIC_DNS##,${ETH1_STATIC_DNS},g" \
|
||||
${D}${sysconfdir}/NetworkManager/system-connections/nm.eth1
|
||||
|
||||
# Wireless (only IP settings; connection settings need to be provided at runtime)
|
||||
install -m 0600 ${WORKDIR}/nm.wlan0.${WLAN0_MODE} ${D}${sysconfdir}/NetworkManager/system-connections/nm.wlan0
|
||||
sed -i -e "s,##WLAN0_STATIC_CIDR##,${WLAN0_STATIC_CIDR},g" \
|
||||
-e "s,##WLAN0_STATIC_GATEWAY##,${WLAN0_STATIC_GATEWAY},g" \
|
||||
-e "s,##WLAN0_STATIC_DNS##,${WLAN0_STATIC_DNS},g" \
|
||||
${D}${sysconfdir}/NetworkManager/system-connections/nm.wlan0
|
||||
|
||||
# Cellular
|
||||
if [ -n "${@bb.utils.contains('DISTRO_FEATURES', 'cellular', '1', '', d)}" ]; then
|
||||
install -m 0600 ${WORKDIR}/nm.cellular ${D}${sysconfdir}/NetworkManager/system-connections/nm.cellular
|
||||
[ -z "${CELLULAR_APN}" ] && sed -i -e "/##CELLULAR_APN##/d" ${D}${sysconfdir}/NetworkManager/system-connections/nm.cellular
|
||||
[ -z "${CELLULAR_PIN}" ] && sed -i -e "/##CELLULAR_PIN##/d" ${D}${sysconfdir}/NetworkManager/system-connections/nm.cellular
|
||||
[ -z "${CELLULAR_USER}" ] && sed -i -e "/##CELLULAR_USER##/d" ${D}${sysconfdir}/NetworkManager/system-connections/nm.cellular
|
||||
[ -z "${CELLULAR_PASSWORD}" ] && sed -i -e "/##CELLULAR_PASSWORD##/d" ${D}${sysconfdir}/NetworkManager/system-connections/nm.cellular
|
||||
sed -i -e "s,##CELLULAR_APN##,${CELLULAR_APN},g" \
|
||||
-e "s,##CELLULAR_PIN##,${CELLULAR_PIN},g" \
|
||||
-e "s,##CELLULAR_USER##,${CELLULAR_USER},g" \
|
||||
-e "s,##CELLULAR_PASSWORD##,${CELLULAR_PASSWORD},g" \
|
||||
${D}${sysconfdir}/NetworkManager/system-connections/nm.cellular
|
||||
fi
|
||||
}
|
||||
|
||||
# NetworkManager needs to be started after DBUS
|
||||
INITSCRIPT_NAME = "networkmanager"
|
||||
INITSCRIPT_PARAMS = "start 03 2 3 4 5 . stop 80 0 6 1 ."
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
From: Javier Viguera <javier.viguera@digi.com>
|
||||
Date: Tue, 16 May 2017 18:30:31 +0200
|
||||
Subject: [PATCH] wpa_supplicant: enable control socket interface when executed
|
||||
by D-Bus
|
||||
|
||||
Otherwise trying to use the "wpa_cli" fails with:
|
||||
|
||||
Failed to connect to non-global ctrl_ifname
|
||||
|
||||
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
|
||||
---
|
||||
wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service.in | 2 +-
|
||||
wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service.in b/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service.in
|
||||
index a75918f9380b..9cce6331d92e 100644
|
||||
--- a/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service.in
|
||||
+++ b/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service.in
|
||||
@@ -1,5 +1,5 @@
|
||||
[D-BUS Service]
|
||||
Name=fi.epitest.hostap.WPASupplicant
|
||||
-Exec=@BINDIR@/wpa_supplicant -u
|
||||
+Exec=@BINDIR@/wpa_supplicant -u -O /var/run/wpa_supplicant
|
||||
User=root
|
||||
SystemdService=wpa_supplicant.service
|
||||
diff --git a/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in b/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in
|
||||
index d97ff392175d..98b72cf32481 100644
|
||||
--- a/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in
|
||||
+++ b/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in
|
||||
@@ -1,5 +1,5 @@
|
||||
[D-BUS Service]
|
||||
Name=fi.w1.wpa_supplicant1
|
||||
-Exec=@BINDIR@/wpa_supplicant -u
|
||||
+Exec=@BINDIR@/wpa_supplicant -u -O /var/run/wpa_supplicant
|
||||
User=root
|
||||
SystemdService=wpa_supplicant.service
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
# Copyright (C) 2013 Digi International.
|
||||
# Copyright (C) 2013-2017 Digi International.
|
||||
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
PACKAGECONFIG ?= "openssl"
|
||||
|
||||
SRC_URI_append_ccimx6ul = "file://wpa_supplicant_p2p.conf"
|
||||
SRC_URI += "file://0001-wpa_supplicant-enable-control-socket-interface-when-.patch"
|
||||
SRC_URI_append_ccimx6ul = " file://wpa_supplicant_p2p.conf"
|
||||
|
||||
do_install_append_ccimx6ul() {
|
||||
install -m 600 ${WORKDIR}/wpa_supplicant_p2p.conf ${D}${sysconfdir}/wpa_supplicant_p2p.conf
|
||||
|
|
|
|||
|
|
@ -16,3 +16,5 @@ do_install_append_ccimx6() {
|
|||
install -d ${D}${sysconfdir}/${IMAGE_PKGTYPE}-postinsts
|
||||
install -m 0755 ${WORKDIR}/resize-ext4fs.sh ${D}${sysconfdir}/${IMAGE_PKGTYPE}-postinsts/
|
||||
}
|
||||
|
||||
CONFFILES_${PN} += "${sysconfdir}/sysctl.conf"
|
||||
|
|
|
|||
|
|
@ -31,27 +31,41 @@ usage() {
|
|||
}
|
||||
|
||||
suspend_interfaces() {
|
||||
# Suspend wireless interface
|
||||
if grep -qs '^wlan0' /var/run/ifstate; then
|
||||
ifdown wlan0 && up_wlan_on_resume="1" && sleep 0.5 && rmmod ath6kl_sdio
|
||||
# Suspend wireless interfaces
|
||||
if [ -d "/proc/device-tree/wireless" ]; then
|
||||
for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do
|
||||
ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}"
|
||||
done
|
||||
grep -qs '^ath6kl_sdio' /proc/modules && rmmod ath6kl_sdio ath6kl_core
|
||||
fi
|
||||
|
||||
# Suspend bluetooth interface
|
||||
hciconfig hci0 2>&1 | grep -qs UP && up_bt_on_resume="1"
|
||||
${BT_DAEMON} stop >/dev/null
|
||||
${BT_INIT} stop >/dev/null
|
||||
if [ -d "/proc/device-tree/bluetooth" ]; then
|
||||
hciconfig hci0 2>&1 | grep -qs UP && up_bt_on_resume="1"
|
||||
${BT_DAEMON} stop >/dev/null
|
||||
${BT_INIT} stop >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
resume_interfaces() {
|
||||
# Resume wireless interface
|
||||
if ! grep -qs '^wlan0' /var/run/ifstate; then
|
||||
[ -n "${up_wlan_on_resume}" ] && modprobe ath6kl_sdio && sleep 0.5 && ifup wlan0
|
||||
# Resume wireless interfaces
|
||||
if [ -d "/proc/device-tree/wireless" ]; then
|
||||
# Trigger wireless module loading event, and wait until the interface exists
|
||||
udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d0301"
|
||||
timeout -t 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null
|
||||
|
||||
# Bring up the interfaces that were bring down on suspend
|
||||
for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do
|
||||
grep -qs "^${i}" /var/run/ifstate || ifup "${i}"
|
||||
done
|
||||
fi
|
||||
|
||||
# Resume bluetooth interface
|
||||
if [ -n "${up_bt_on_resume}" ]; then
|
||||
${BT_INIT} start >/dev/null
|
||||
${BT_DAEMON} start >/dev/null
|
||||
if [ -d "/proc/device-tree/bluetooth" ]; then
|
||||
if [ -n "${up_bt_on_resume}" ]; then
|
||||
${BT_INIT} start >/dev/null
|
||||
${BT_DAEMON} start >/dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,30 +31,41 @@ usage() {
|
|||
}
|
||||
|
||||
suspend_interfaces() {
|
||||
# Suspend wireless interface
|
||||
if grep -qs '^wlan0' /var/run/ifstate; then
|
||||
ifdown wlan0 && up_wlan_on_resume="1"
|
||||
fi
|
||||
if grep -qs '^wlan' /proc/modules; then
|
||||
rmmod wlan
|
||||
# Suspend wireless interfaces
|
||||
if [ -d "/proc/device-tree/wireless" ]; then
|
||||
for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do
|
||||
ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}"
|
||||
done
|
||||
grep -qs '^wlan' /proc/modules && rmmod wlan
|
||||
fi
|
||||
|
||||
# Suspend bluetooth interface
|
||||
hciconfig hci0 2>&1 | grep -qs UP && up_bt_on_resume="1"
|
||||
${BT_DAEMON} stop >/dev/null
|
||||
${BT_INIT} stop >/dev/null
|
||||
if [ -d "/proc/device-tree/bluetooth" ]; then
|
||||
hciconfig hci0 2>&1 | grep -qs UP && up_bt_on_resume="1"
|
||||
${BT_DAEMON} stop >/dev/null
|
||||
${BT_INIT} stop >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
resume_interfaces() {
|
||||
# Resume wireless interface
|
||||
if ! grep -qs '^wlan0' /var/run/ifstate; then
|
||||
[ -n "${up_wlan_on_resume}" ] && ifup wlan0
|
||||
# Resume wireless interfaces
|
||||
if [ -d "/proc/device-tree/wireless" ]; then
|
||||
# Trigger wireless module loading event, and wait until the interface exists
|
||||
udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d050A"
|
||||
timeout -t 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null
|
||||
|
||||
# Bring up the interfaces that were bring down on suspend
|
||||
for i in $(echo ${RESUME_IFACES} | tr ' ' '\n' | sort); do
|
||||
grep -qs "^${i}" /var/run/ifstate || ifup "${i}"
|
||||
done
|
||||
fi
|
||||
|
||||
# Resume bluetooth interface
|
||||
if [ -n "${up_bt_on_resume}" ]; then
|
||||
${BT_INIT} start >/dev/null
|
||||
${BT_DAEMON} start >/dev/null
|
||||
if [ -d "/proc/device-tree/bluetooth" ]; then
|
||||
if [ -n "${up_bt_on_resume}" ]; then
|
||||
${BT_INIT} start >/dev/null
|
||||
${BT_DAEMON} start >/dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
# Copyright (C) 2017, Digi International Inc.
|
||||
|
||||
DESCRIPTION = "DEY image including Amazon Web Services packages"
|
||||
LICENSE = "MIT"
|
||||
|
||||
AWS_PACKAGES ?= " \
|
||||
awsiotsdk-demo \
|
||||
greengrass \
|
||||
"
|
||||
|
||||
IMAGE_INSTALL = " \
|
||||
packagegroup-dey-core \
|
||||
${AWS_PACKAGES} \
|
||||
${CORE_IMAGE_EXTRA_INSTALL} \
|
||||
${ROOTFS_PKGMANAGE_BOOTSTRAP} \
|
||||
"
|
||||
|
||||
IMAGE_FEATURES += " \
|
||||
dey-network \
|
||||
package-management \
|
||||
ssh-server-dropbear \
|
||||
${@bb.utils.contains('MACHINE_FEATURES', 'bluetooth', 'dey-bluetooth', '', d)} \
|
||||
${@bb.utils.contains('MACHINE_FEATURES', 'wifi', 'dey-wireless', '', d)} \
|
||||
"
|
||||
|
||||
IMAGE_LINGUAS = ""
|
||||
|
||||
inherit core-image
|
||||
inherit dey-image
|
||||
|
||||
IMAGE_ROOTFS_SIZE = "8192"
|
||||
|
||||
# Do not install udev-cache
|
||||
BAD_RECOMMENDATIONS += "udev-cache"
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
|
||||
auto wlan0
|
||||
iface wlan0 inet dhcp
|
||||
udhcpc_opts -S -b >/dev/null &
|
||||
wpa-driver ##WPA_DRIVER##
|
||||
wpa-conf /etc/wpa_supplicant.conf
|
||||
post-up /bin/virtwlans.sh
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
|
||||
auto wlan0
|
||||
iface wlan0 inet static
|
||||
address ##WLAN0_STATIC_IP##
|
||||
netmask ##WLAN0_STATIC_NETMASK##
|
||||
gateway ##WLAN0_STATIC_GATEWAY##
|
||||
dns-nameservers ##WLAN0_STATIC_DNS##
|
||||
wpa-driver ##WPA_DRIVER##
|
||||
wpa-conf /etc/wpa_supplicant.conf
|
||||
post-up /bin/virtwlans.sh
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
|
||||
# Cellular interface
|
||||
#auto ##CELLULAR_INTERFACE##
|
||||
iface ##CELLULAR_INTERFACE## inet manual
|
||||
port
|
||||
apn
|
||||
pin
|
||||
user
|
||||
password
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
|
||||
auto eth0
|
||||
iface eth0 inet dhcp
|
||||
udhcpc_opts -S -b >/dev/null &
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
|
||||
auto eth0
|
||||
iface eth0 inet static
|
||||
address ##ETH0_STATIC_IP##
|
||||
netmask ##ETH0_STATIC_NETMASK##
|
||||
gateway ##ETH0_STATIC_GATEWAY##
|
||||
dns-nameservers ##ETH0_STATIC_DNS##
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
|
||||
auto eth1
|
||||
iface eth1 inet dhcp
|
||||
udhcpc_opts -S -b >/dev/null &
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
|
||||
auto eth1
|
||||
iface eth1 inet static
|
||||
address ##ETH1_STATIC_IP##
|
||||
netmask ##ETH1_STATIC_NETMASK##
|
||||
gateway ##ETH1_STATIC_GATEWAY##
|
||||
dns-nameservers ##ETH1_STATIC_DNS##
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
auto wlan0
|
||||
iface wlan0 inet dhcp
|
||||
udhcpc_opts -S -b >/dev/null &
|
||||
wpa-driver ##WPA_DRIVER##
|
||||
wpa-conf /etc/wpa_supplicant.conf
|
||||
# post-up /etc/init.d/hostapd start
|
||||
# pre-down /etc/init.d/hostapd stop
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue