mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 02:17:58 +00:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			for-4.1
			...
			v3.2.1-rc1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | e863bd1593 | ||
|   | eea469adc5 | ||
|   | a5758f7166 | ||
|   | cb5b8a2627 | ||
|   | 81e38dec0d | 
							
								
								
									
										11
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -15,20 +15,21 @@ on: | |||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   build: |   build: | ||||||
|     runs-on: ubuntu-22.04 |     runs-on: ubuntu-latest | ||||||
|     outputs: |     outputs: | ||||||
|       x64_vm_image_name: ${{ steps.package_and_upload_image.outputs.x64_vm_image_name }} |       x64_vm_image_name: ${{ steps.package_and_upload_image.outputs.x64_vm_image_name }} | ||||||
|     strategy: |     strategy: | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|       matrix: |       matrix: | ||||||
|         target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap7110c-341x', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ] |         target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cybertan_eww631-a1', 'cybertan_eww631-b1','sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'sercomm_ap72tip', 'udaya_a6-id2', 'udaya_a6-od2', 'wallys_dr5018', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ] | ||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|     - uses: actions/checkout@v3 |     - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|     # Clean unnecessary files to save disk space |     # Clean unnecessary files to save disk space | ||||||
|     - name: clean unncessary files to save space |     - name: clean unncessary files to save space | ||||||
|       run: | |       run: | | ||||||
|         docker rmi `docker images -q` || true |         docker rmi `docker images -q` | ||||||
|  |  | ||||||
|     - name: Build image for ${{ matrix.target }} |     - name: Build image for ${{ matrix.target }} | ||||||
|       id: build |       id: build | ||||||
| @@ -80,7 +81,7 @@ jobs: | |||||||
|         fi |         fi | ||||||
|  |  | ||||||
|   trigger-testing: |   trigger-testing: | ||||||
|     runs-on: ubuntu-22.04 |     runs-on: ubuntu-latest | ||||||
|     needs: build |     needs: build | ||||||
|     if: startsWith(github.ref, 'refs/tags/v') |     if: startsWith(github.ref, 'refs/tags/v') | ||||||
|     steps: |     steps: | ||||||
| @@ -93,7 +94,7 @@ jobs: | |||||||
|         client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}' |         client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}' | ||||||
|  |  | ||||||
|   create-x64_vm-ami: |   create-x64_vm-ami: | ||||||
|     runs-on: ubuntu-22.04 |     runs-on: ubuntu-latest | ||||||
|     needs: build |     needs: build | ||||||
|     if: startsWith(github.ref, 'refs/tags/v') |     if: startsWith(github.ref, 'refs/tags/v') | ||||||
|     steps: |     steps: | ||||||
|   | |||||||
| @@ -6,8 +6,7 @@ boot() { | |||||||
| 	. /lib/functions/system.sh | 	. /lib/functions/system.sh | ||||||
| 	case $(board_name) in | 	case $(board_name) in | ||||||
| 	edgecore,eap102|\ | 	edgecore,eap102|\ | ||||||
| 	edgecore,oap102|\ | 	edgecore,oap102) | ||||||
| 	edgecore,oap103) |  | ||||||
| 		echo 54 > /sys/class/gpio/export | 		echo 54 > /sys/class/gpio/export | ||||||
| 		echo out > /sys/class/gpio/gpio54/direction | 		echo out > /sys/class/gpio/gpio54/direction | ||||||
| 		echo 0 > /sys/class/gpio/gpio54/value | 		echo 0 > /sys/class/gpio/gpio54/value | ||||||
|   | |||||||
| @@ -1,46 +0,0 @@ | |||||||
| Index: hostapd-2023-09-08-e5ccbfc6/src/ap/wpa_auth_ft.c |  | ||||||
| =================================================================== |  | ||||||
| --- hostapd-2023-09-08-e5ccbfc6.orig/src/ap/wpa_auth_ft.c |  | ||||||
| +++ hostapd-2023-09-08-e5ccbfc6/src/ap/wpa_auth_ft.c |  | ||||||
| @@ -3293,6 +3297,8 @@ static int wpa_ft_process_auth_req(struc |  | ||||||
|  	size_t identity_len = 0, radius_cui_len = 0; |  | ||||||
|  	size_t pmk_r1_len, kdk_len, len; |  | ||||||
|  	int retval = WLAN_STATUS_UNSPECIFIED_FAILURE; |  | ||||||
| +	struct os_reltime now; |  | ||||||
| +	struct rsn_ftie *ftie; |  | ||||||
|   |  | ||||||
|  	*resp_ies = NULL; |  | ||||||
|  	*resp_ies_len = 0; |  | ||||||
| @@ -3324,6 +3330,9 @@ static int wpa_ft_process_auth_req(struc |  | ||||||
|  		goto out; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| +	ftie = (struct rsn_ftie *) parse.ftie; |  | ||||||
| +	os_memcpy(sm->SNonce, ftie->snonce, WPA_NONCE_LEN); |  | ||||||
| + |  | ||||||
|  	if (parse.r0kh_id == NULL) { |  | ||||||
|  		wpa_printf(MSG_DEBUG, "FT: Invalid FTIE - no R0KH-ID"); |  | ||||||
|  		retval = WLAN_STATUS_INVALID_FTIE; |  | ||||||
| @@ -3424,10 +3433,18 @@ pmk_r1_derived: |  | ||||||
|  	os_memcpy(sm->pmk_r1, pmk_r1, pmk_r1_len); |  | ||||||
|  	sm->pmk_r1_len = pmk_r1_len; |  | ||||||
|   |  | ||||||
| -	if (random_get_bytes(sm->ANonce, WPA_NONCE_LEN)) { |  | ||||||
| -		wpa_printf(MSG_DEBUG, "FT: Failed to get random data for " |  | ||||||
| -			   "ANonce"); |  | ||||||
| -		goto out; |  | ||||||
| +	if (os_get_reltime(&now) < 0 || |  | ||||||
| +	    os_reltime_expired(&now, &sm->ANonce_time, 1)) { |  | ||||||
| +		if (random_get_bytes(sm->ANonce, WPA_NONCE_LEN)) { |  | ||||||
| +			wpa_printf(MSG_DEBUG, "FT: Failed to get random data for " |  | ||||||
| +				   "ANonce"); |  | ||||||
| +			return WLAN_STATUS_UNSPECIFIED_FAILURE; |  | ||||||
| +		} |  | ||||||
| +		sm->ANonce_time.sec = now.sec; |  | ||||||
| +		sm->ANonce_time.usec = now.usec; |  | ||||||
| +		wpa_printf(MSG_INFO, "FT: ANonce was randomized"); |  | ||||||
| +	} else { |  | ||||||
| +		wpa_printf(MSG_INFO, "FT: ANonce has not expired"); |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	/* Now that we know the correct PMK-R1 length and as such, the length |  | ||||||
							
								
								
									
										12
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/Makefile
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										12
									
								
								feeds/ipq807x_v5.4/ath11k-wifi/Makefile
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -32,6 +32,8 @@ ALLWIFIBOARDS:= \ | |||||||
| 	cybertan-eww622-a1 \ | 	cybertan-eww622-a1 \ | ||||||
| 	cybertan-eww631-a1 \ | 	cybertan-eww631-a1 \ | ||||||
| 	cybertan-eww631-b1 \ | 	cybertan-eww631-b1 \ | ||||||
|  | 	sonicfi-rap630c-311g \ | ||||||
|  | 	sonicfi-rap630w-311g \ | ||||||
| 	edgecore-eap101 \ | 	edgecore-eap101 \ | ||||||
| 	gl-ax1800 \ | 	gl-ax1800 \ | ||||||
| 	gl-axt1800 \ | 	gl-axt1800 \ | ||||||
| @@ -39,7 +41,6 @@ ALLWIFIBOARDS:= \ | |||||||
| 	sercomm-wallaby \ | 	sercomm-wallaby \ | ||||||
| 	edgecore-eap102 \ | 	edgecore-eap102 \ | ||||||
| 	edgecore-oap102 \ | 	edgecore-oap102 \ | ||||||
| 	edgecore-oap103 \ |  | ||||||
| 	edgecore-eap104 \ | 	edgecore-eap104 \ | ||||||
| 	liteon-wpx8324 \ | 	liteon-wpx8324 \ | ||||||
| 	indio-um-310ax-v1 \ | 	indio-um-310ax-v1 \ | ||||||
| @@ -50,9 +51,6 @@ ALLWIFIBOARDS:= \ | |||||||
| 	wallys-dr5018 \ | 	wallys-dr5018 \ | ||||||
| 	wallys-dr6018 \ | 	wallys-dr6018 \ | ||||||
| 	wallys-dr6018-v4 \ | 	wallys-dr6018-v4 \ | ||||||
| 	sonicfi-rap630c-311g \ |  | ||||||
| 	sonicfi-rap630w-311g \ |  | ||||||
| 	sonicfi-rap630w-312g \ |  | ||||||
| 	tplink-ex227 \ | 	tplink-ex227 \ | ||||||
| 	tplink-ex447 \ | 	tplink-ex447 \ | ||||||
| 	yuncore-ax840 \ | 	yuncore-ax840 \ | ||||||
| @@ -395,21 +393,19 @@ $(eval $(call generate-ath11k-wifi-package,cig-wf194c4,Cigtech WF194c4)) | |||||||
| $(eval $(call generate-ath11k-wifi-package,cybertan-eww622-a1,CyberTan EWW622 A1)) | $(eval $(call generate-ath11k-wifi-package,cybertan-eww622-a1,CyberTan EWW622 A1)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,cybertan-eww631-a1,CyberTan EWW631 A1)) | $(eval $(call generate-ath11k-wifi-package,cybertan-eww631-a1,CyberTan EWW631 A1)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,cybertan-eww631-b1,CyberTan EWW631 B1)) | $(eval $(call generate-ath11k-wifi-package,cybertan-eww631-b1,CyberTan EWW631 B1)) | ||||||
|  | $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630c-311g,Sonicfi RAP630C 311G)) | ||||||
|  | $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-311g,Sonicfi RAP630W 311G)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,sercomm-wallaby,Sercomm Kiwi)) | $(eval $(call generate-ath11k-wifi-package,sercomm-wallaby,Sercomm Kiwi)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018)) | $(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4)) | $(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-eap101,EdgeCore EAP101)) | $(eval $(call generate-ath11k-wifi-package,edgecore-eap101,EdgeCore EAP101)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-eap102,Edgecore EAP102)) | $(eval $(call generate-ath11k-wifi-package,edgecore-eap102,Edgecore EAP102)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-oap102,Edgecore OAP102)) | $(eval $(call generate-ath11k-wifi-package,edgecore-oap102,Edgecore OAP102)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-oap103,Edgecore OAP103)) |  | ||||||
| $(eval $(call generate-ath11k-wifi-package,edgecore-eap104,Edgecore EAP104)) | $(eval $(call generate-ath11k-wifi-package,edgecore-eap104,Edgecore EAP104)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,liteon-wpx8324,Liteon WPX8324)) | $(eval $(call generate-ath11k-wifi-package,liteon-wpx8324,Liteon WPX8324)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-310ax-v1,Indio UM-310AX V1)) | $(eval $(call generate-ath11k-wifi-package,indio-um-310ax-v1,Indio UM-310AX V1)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1)) | $(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1)) | $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630c-311g,Sonicfi RAP630C 311G)) |  | ||||||
| $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-311g,Sonicfi RAP630W 311G)) |  | ||||||
| $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-312g,Sonicfi RAP630W 312G)) |  | ||||||
| $(eval $(call generate-ath11k-wifi-package,tplink-ex227,TP-Link EX227)) | $(eval $(call generate-ath11k-wifi-package,tplink-ex227,TP-Link EX227)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447)) | $(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447)) | ||||||
| $(eval $(call generate-ath11k-wifi-package,yuncore-ax840,YunCore AX840)) | $(eval $(call generate-ath11k-wifi-package,yuncore-ax840,YunCore AX840)) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -340,7 +340,6 @@ hostapd_common_add_bss_config() { | |||||||
| 		wpa_group_rekey wpa_pair_rekey wpa_master_rekey | 		wpa_group_rekey wpa_pair_rekey wpa_master_rekey | ||||||
| 	config_add_boolean wpa_strict_rekey | 	config_add_boolean wpa_strict_rekey | ||||||
| 	config_add_boolean wpa_disable_eapol_key_retries | 	config_add_boolean wpa_disable_eapol_key_retries | ||||||
| 	config_add_boolean multi_psk |  | ||||||
|  |  | ||||||
| 	config_add_boolean tdls_prohibit | 	config_add_boolean tdls_prohibit | ||||||
|  |  | ||||||
| @@ -725,7 +724,7 @@ hostapd_set_bss_options() { | |||||||
| 		airtime_bss_weight airtime_bss_limit airtime_sta_weight \ | 		airtime_bss_weight airtime_bss_limit airtime_sta_weight \ | ||||||
| 		multicast_to_unicast_all proxy_arp per_sta_vif \ | 		multicast_to_unicast_all proxy_arp per_sta_vif \ | ||||||
| 		eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \ | 		eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \ | ||||||
| 		vendor_elements fils uci_section dynamic_probe_resp multi_psk | 		vendor_elements fils uci_section dynamic_probe_resp | ||||||
|  |  | ||||||
| 	set_default fils 0 | 	set_default fils 0 | ||||||
| 	set_default isolate 0 | 	set_default isolate 0 | ||||||
| @@ -738,7 +737,6 @@ hostapd_set_bss_options() { | |||||||
| 	set_default wmm 1 | 	set_default wmm 1 | ||||||
| 	set_default uapsd 1 | 	set_default uapsd 1 | ||||||
| 	set_default wpa_disable_eapol_key_retries 0 | 	set_default wpa_disable_eapol_key_retries 0 | ||||||
| 	set_default multi_psk $multi_psk |  | ||||||
| 	set_default tdls_prohibit 0 | 	set_default tdls_prohibit 0 | ||||||
| 	set_default eapol_version $((wpa & 1)) | 	set_default eapol_version $((wpa & 1)) | ||||||
| 	set_default acct_port 1813 | 	set_default acct_port 1813 | ||||||
|   | |||||||
| @@ -26,12 +26,11 @@ function event_cb_6g(req) { | |||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
| 	let ssid = iface.ssid; | 	let ssid = iface.ssid; | ||||||
|  | 	if (!ssid || !length(ssids[ssid].keys)) | ||||||
| 	if (!ssid || !ssids[ssid].mpsk) |  | ||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
| 	let ssid_cache = cache[ssid]; | 	let ssid_cache = cache[ssid]; | ||||||
| 	if (ssid_cache && addr in ssid_cache) | 	if (ssid_cache && ssid_cache[addr]) | ||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
| 	if (req.type == 'probe') { | 	if (req.type == 'probe') { | ||||||
| @@ -54,15 +53,15 @@ function event_cb(req) { | |||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
| 	let ssid = iface.ssid; | 	let ssid = iface.ssid; | ||||||
| 	if (!ssid || !ssids[ssid].mpsk) | 	if (!ssid || !length(ssids[ssid].keys)) | ||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
| 	let ssid_cache = cache[ssid]; | 	let ssid_cache = cache[ssid]; | ||||||
| 	if (ssid_cache && addr in ssid_cache) | 	if (ssid_cache && ssid_cache[addr]) | ||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
| 	printf(`reply to ${req.type} on ${req.data.ifname} from ${addr} without 6G RNR\n`); | 	printf(`reply to ${req.type} on ${req.data.ifname} from ${addr} without 6G RNR\n`); | ||||||
| 	return 2; | 	return 2;  | ||||||
| } | } | ||||||
|  |  | ||||||
| function create_6g_subscriber() { | function create_6g_subscriber() { | ||||||
| @@ -144,7 +143,6 @@ function netifd_reload() { | |||||||
|  |  | ||||||
| 			push(ssid.interfaces, iface.ifname); | 			push(ssid.interfaces, iface.ifname); | ||||||
| 			ssid.bands[band] = iface.ifname; | 			ssid.bands[band] = iface.ifname; | ||||||
| 			ssid.mpsk = config.multi_psk; |  | ||||||
| 			for (let sta in iface.stations) { | 			for (let sta in iface.stations) { | ||||||
| 				let stacfg = sta.config; | 				let stacfg = sta.config; | ||||||
|  |  | ||||||
| @@ -176,20 +174,6 @@ function iface_ssid(ifname) { | |||||||
| 	return iface.ssid; | 	return iface.ssid; | ||||||
| } | } | ||||||
|  |  | ||||||
| function is_ssid_mpsk(ifname) { |  | ||||||
|         let ssid = iface_ssid(ifname); |  | ||||||
|         if (!ssid) |  | ||||||
|                 return false; |  | ||||||
|  |  | ||||||
| 	if (!ssids[ssid]) |  | ||||||
| 		return false; |  | ||||||
|  |  | ||||||
|         if (!ssids[ssid]?.mpsk) |  | ||||||
|                 return false; |  | ||||||
|  |  | ||||||
| 	return ssids[ssid].mpsk; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function sta_cache_entry_get(ssid, addr) { | function sta_cache_entry_get(ssid, addr) { | ||||||
| 	let ssid_cache = cache[ssid] ?? {}; | 	let ssid_cache = cache[ssid] ?? {}; | ||||||
|  |  | ||||||
| @@ -308,9 +292,6 @@ function sta_auth_cache(ifname, addr, idx, phrase) { | |||||||
| function auth_cb(msg) { | function auth_cb(msg) { | ||||||
| 	let data = msg.data; | 	let data = msg.data; | ||||||
|  |  | ||||||
| 	if (!is_ssid_mpsk(data.iface)) |  | ||||||
| 		return; |  | ||||||
|  |  | ||||||
| 	printf(`Event ${msg.type}: ${msg.data}\n`); | 	printf(`Event ${msg.type}: ${msg.data}\n`); | ||||||
| 	switch (msg.type) { | 	switch (msg.type) { | ||||||
| 	case 'sta_auth': | 	case 'sta_auth': | ||||||
|   | |||||||
| @@ -606,13 +606,12 @@ | |||||||
|  	for (pw = hapd->conf->sae_passwords; pw; pw = pw->next) { |  	for (pw = hapd->conf->sae_passwords; pw; pw = pw->next) { | ||||||
|  		if (!is_broadcast_ether_addr(pw->peer_addr) && |  		if (!is_broadcast_ether_addr(pw->peer_addr) && | ||||||
|  		    os_memcmp(pw->peer_addr, sta->addr, ETH_ALEN) != 0) |  		    os_memcmp(pw->peer_addr, sta->addr, ETH_ALEN) != 0) | ||||||
| @@ -519,6 +525,33 @@ static const char * sae_get_password(str | @@ -519,6 +525,31 @@ static const char * sae_get_password(str | ||||||
|  		pt = hapd->conf->ssid.pt; |  		pt = hapd->conf->ssid.pt; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| +use_sta_psk: | +use_sta_psk: | ||||||
| +	if (!password && sta) { | +	if (!password && sta) { | ||||||
| +		sta->psk_idx = 0; |  | ||||||
| +		for (psk = sta->psk; psk; psk = psk->next) { | +		for (psk = sta->psk; psk; psk = psk->next) { | ||||||
| +			if (!psk->is_passphrase) | +			if (!psk->is_passphrase) | ||||||
| +				continue; | +				continue; | ||||||
| @@ -621,7 +620,6 @@ | |||||||
| +			if (!sta->use_sta_psk) | +			if (!sta->use_sta_psk) | ||||||
| +				break; | +				break; | ||||||
| + | + | ||||||
| +			sta->psk_idx = 1; |  | ||||||
| +			if (sta->sae_pt) { | +			if (sta->sae_pt) { | ||||||
| +				pt = sta->sae_pt; | +				pt = sta->sae_pt; | ||||||
| +				break; | +				break; | ||||||
| @@ -640,7 +638,7 @@ | |||||||
|  	if (pw_entry) |  	if (pw_entry) | ||||||
|  		*pw_entry = pw; |  		*pw_entry = pw; | ||||||
|  	if (s_pt) |  	if (s_pt) | ||||||
| @@ -3698,6 +3731,12 @@ static void handle_auth(struct hostapd_d | @@ -3698,6 +3729,12 @@ static void handle_auth(struct hostapd_d | ||||||
|  		goto fail; |  		goto fail; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -688,15 +686,15 @@ | |||||||
|  	char *radius_cui; /* Chargeable-User-Identity from RADIUS */ |  	char *radius_cui; /* Chargeable-User-Identity from RADIUS */ | ||||||
| --- a/src/ap/wpa_auth_glue.c | --- a/src/ap/wpa_auth_glue.c | ||||||
| +++ b/src/ap/wpa_auth_glue.c | +++ b/src/ap/wpa_auth_glue.c | ||||||
| @@ -355,6 +355,7 @@ static const u8 * hostapd_wpa_auth_get_p | @@ -337,6 +337,7 @@ static const u8 * hostapd_wpa_auth_get_p | ||||||
|  	} |  	struct sta_info *sta = ap_get_sta(hapd, addr); | ||||||
|  #endif /* CONFIG_SAE */ |  	const u8 *psk; | ||||||
|   |   | ||||||
| +	sta->psk_idx = 0; | +	sta->psk_idx = 0; | ||||||
|  #ifdef CONFIG_OWE |  	if (vlan_id) | ||||||
|  	if ((hapd->conf->wpa_key_mgmt & WPA_KEY_MGMT_OWE) && |  		*vlan_id = 0; | ||||||
|  	    sta && sta->owe_pmk) { |  	if (psk_len) | ||||||
| @@ -381,12 +382,17 @@ static const u8 * hostapd_wpa_auth_get_p | @@ -381,13 +382,18 @@ static const u8 * hostapd_wpa_auth_get_p | ||||||
|  	 * returned psk which should not be returned again. |  	 * returned psk which should not be returned again. | ||||||
|  	 * logic list (all hostapd_get_psk; all sta->psk) |  	 * logic list (all hostapd_get_psk; all sta->psk) | ||||||
|  	 */ |  	 */ | ||||||
| @@ -704,26 +702,28 @@ | |||||||
| +		psk = NULL; | +		psk = NULL; | ||||||
|  	if (sta && sta->psk && !psk) { |  	if (sta && sta->psk && !psk) { | ||||||
|  		struct hostapd_sta_wpa_psk_short *pos; |  		struct hostapd_sta_wpa_psk_short *pos; | ||||||
| +		int psk_idx = 1; | +		int psk_idx; | ||||||
|   |   | ||||||
|  		if (vlan_id) |  		if (vlan_id) | ||||||
|  			*vlan_id = 0; |  			*vlan_id = 0; | ||||||
|  		psk = sta->psk->psk; |  		psk = sta->psk->psk; | ||||||
| +		if (vlan_id) | +		sta->psk_idx = psk_idx = 1; | ||||||
| +			sta->psk_idx = psk_idx; |  | ||||||
|  		for (pos = sta->psk; pos; pos = pos->next) { |  		for (pos = sta->psk; pos; pos = pos->next) { | ||||||
|  | +			psk_idx++; | ||||||
|  			if (pos->is_passphrase) { |  			if (pos->is_passphrase) { | ||||||
|  				pbkdf2_sha1(pos->passphrase, |  				pbkdf2_sha1(pos->passphrase, | ||||||
| @@ -397,9 +403,13 @@ static const u8 * hostapd_wpa_auth_get_p |  					    hapd->conf->ssid.ssid, | ||||||
|  | @@ -396,10 +402,14 @@ static const u8 * hostapd_wpa_auth_get_p | ||||||
|  |  				pos->is_passphrase = 0; | ||||||
|  			} |  			} | ||||||
|  			if (pos->psk == prev_psk) { |  			if (pos->psk == prev_psk) { | ||||||
|  | +				sta->psk_idx = psk_idx; | ||||||
|  				psk = pos->next ? pos->next->psk : NULL; |  				psk = pos->next ? pos->next->psk : NULL; | ||||||
| +				if (vlan_id) |  | ||||||
| +					sta->psk_idx = psk_idx + 1; |  | ||||||
|  				break; |  				break; | ||||||
|  			} |  			} | ||||||
|  		} |  		} | ||||||
| +		if (vlan_id && !psk) | + | ||||||
|  | +		if (!psk) | ||||||
| +			sta->psk_idx = 0; | +			sta->psk_idx = 0; | ||||||
|  	} |  	} | ||||||
|  	return psk; |  	return psk; | ||||||
|   | |||||||
| @@ -1,27 +0,0 @@ | |||||||
| --- a/src/ap/hostapd.c |  | ||||||
| +++ b/src/ap/hostapd.c |  | ||||||
| @@ -1527,19 +1527,15 @@ int hostapd_setup_bss(struct hostapd_dat |  | ||||||
|  		if (x_snoop_init(hapd)) { |  | ||||||
|  			wpa_printf(MSG_ERROR, |  | ||||||
|  				   "Generic snooping infrastructure initialization failed"); |  | ||||||
| -			return -1; |  | ||||||
| -		} |  | ||||||
| - |  | ||||||
| -		if (dhcp_snoop_init(hapd)) { |  | ||||||
| +			conf->proxy_arp = 0; |  | ||||||
| +		} else if (dhcp_snoop_init(hapd)) { |  | ||||||
|  			wpa_printf(MSG_ERROR, |  | ||||||
|  				   "DHCP snooping initialization failed"); |  | ||||||
| -			return -1; |  | ||||||
| -		} |  | ||||||
| - |  | ||||||
| -		if (ndisc_snoop_init(hapd)) { |  | ||||||
| +			conf->proxy_arp = 0; |  | ||||||
| +		} else if (ndisc_snoop_init(hapd)) { |  | ||||||
|  			wpa_printf(MSG_ERROR, |  | ||||||
|  				   "Neighbor Discovery snooping initialization failed"); |  | ||||||
| -			return -1; |  | ||||||
| +			conf->proxy_arp = 0; |  | ||||||
|  		} |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| @@ -1,411 +0,0 @@ | |||||||
| From: Jouni Malinen <quic_jouni@quicinc.com> |  | ||||||
| Date: Tue, 14 Feb 2023 11:29:30 +0200 |  | ||||||
| Subject: [PATCH] FT: Store PMK-R0/PMK-R1 after EAPOL-Key msg 2/4 MIC |  | ||||||
|  validation |  | ||||||
|  |  | ||||||
| hostapd was previously storing the derived PMK-R0 and PMK-R1 as soon as |  | ||||||
| these keys were derived. While that is fine for most purposes, it is |  | ||||||
| unnecessary to do that so quickly and if anything were to fail before |  | ||||||
| the supplicant is able to return a valid EAPOL-Key msg 2/4, there would |  | ||||||
| not really be any real use for the derived keys. |  | ||||||
|  |  | ||||||
| For the special case of FT-PSK and VLAN determination based on the |  | ||||||
| wpa_psk file, the VLAN information is set in the per-STA data structures |  | ||||||
| only after the EAPOL-Key msg 2/4 MIC has been verified. This ended up |  | ||||||
| storing the PMK-R0/PMK-R1 entries without correct VLAN assignment and as |  | ||||||
| such, any use of the FT protocol would not be able to transfer the VLAN |  | ||||||
| information through RRB. |  | ||||||
|  |  | ||||||
| Split local storing of the FT key hierarchy for the cases using the FT |  | ||||||
| 4-way handshake so that PMK-R0 and PMK-R1 are first derived and then |  | ||||||
| stored as a separate step after having verified the MIC in the EAPOL-Key |  | ||||||
| msg 2/4 (i.e., after having confirmed the per-STA passphrase/PSK was |  | ||||||
| selected) and VLAN update. This fixes VLAN information for the |  | ||||||
| wpa_psk_file cases with FT-PSK. |  | ||||||
|  |  | ||||||
| Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/src/ap/wpa_auth.c |  | ||||||
| +++ b/src/ap/wpa_auth.c |  | ||||||
| @@ -58,7 +58,9 @@ static int wpa_group_config_group_keys(s |  | ||||||
|  				       struct wpa_group *group); |  | ||||||
|  static int wpa_derive_ptk(struct wpa_state_machine *sm, const u8 *snonce, |  | ||||||
|  			  const u8 *pmk, unsigned int pmk_len, |  | ||||||
| -			  struct wpa_ptk *ptk, int force_sha256); |  | ||||||
| +			  struct wpa_ptk *ptk, int force_sha256, |  | ||||||
| +			  u8 *pmk_r0, u8 *pmk_r1, u8 *pmk_r0_name, |  | ||||||
| +			  size_t *key_len); |  | ||||||
|  static void wpa_group_free(struct wpa_authenticator *wpa_auth, |  | ||||||
|  			   struct wpa_group *group); |  | ||||||
|  static void wpa_group_get(struct wpa_authenticator *wpa_auth, |  | ||||||
| @@ -940,6 +942,10 @@ static int wpa_try_alt_snonce(struct wpa |  | ||||||
|  	const u8 *pmk = NULL; |  | ||||||
|  	size_t pmk_len; |  | ||||||
|  	int vlan_id = 0; |  | ||||||
| +	u8 pmk_r0[PMK_LEN_MAX], pmk_r0_name[WPA_PMK_NAME_LEN]; |  | ||||||
| +	u8 pmk_r1[PMK_LEN_MAX]; |  | ||||||
| +	size_t key_len; |  | ||||||
| +	int ret = -1; |  | ||||||
|   |  | ||||||
|  	os_memset(&PTK, 0, sizeof(PTK)); |  | ||||||
|  	for (;;) { |  | ||||||
| @@ -961,8 +967,8 @@ static int wpa_try_alt_snonce(struct wpa |  | ||||||
|  			pmk_len = sm->pmk_len; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -		if (wpa_derive_ptk(sm, sm->alt_SNonce, pmk, pmk_len, &PTK, 0) < |  | ||||||
| -		    0) |  | ||||||
| +		if (wpa_derive_ptk(sm, sm->alt_SNonce, pmk, pmk_len, &PTK, 0, |  | ||||||
| +				   pmk_r0, pmk_r1, pmk_r0_name, &key_len) < 0) |  | ||||||
|  			break; |  | ||||||
|   |  | ||||||
|  		if (wpa_verify_key_mic(sm->wpa_key_mgmt, pmk_len, &PTK, |  | ||||||
| @@ -983,7 +989,7 @@ static int wpa_try_alt_snonce(struct wpa |  | ||||||
|  	if (!ok) { |  | ||||||
|  		wpa_printf(MSG_DEBUG, |  | ||||||
|  			   "WPA: Earlier SNonce did not result in matching MIC"); |  | ||||||
| -		return -1; |  | ||||||
| +		goto fail; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	wpa_printf(MSG_DEBUG, |  | ||||||
| @@ -992,14 +998,26 @@ static int wpa_try_alt_snonce(struct wpa |  | ||||||
|   |  | ||||||
|  	if (vlan_id && wpa_key_mgmt_wpa_psk(sm->wpa_key_mgmt) && |  | ||||||
|  	    wpa_auth_update_vlan(sm->wpa_auth, sm->addr, vlan_id) < 0) |  | ||||||
| -		return -1; |  | ||||||
| +		goto fail; |  | ||||||
| + |  | ||||||
| +#ifdef CONFIG_IEEE80211R_AP |  | ||||||
| +	if (wpa_key_mgmt_ft(sm->wpa_key_mgmt) && !sm->ft_completed) { |  | ||||||
| +		wpa_printf(MSG_DEBUG, "FT: Store PMK-R0/PMK-R1"); |  | ||||||
| +		wpa_auth_ft_store_keys(sm, pmk_r0, pmk_r1, pmk_r0_name, |  | ||||||
| +				       key_len); |  | ||||||
| +	} |  | ||||||
| +#endif /* CONFIG_IEEE80211R_AP */ |  | ||||||
|   |  | ||||||
|  	os_memcpy(sm->SNonce, sm->alt_SNonce, WPA_NONCE_LEN); |  | ||||||
|  	os_memcpy(&sm->PTK, &PTK, sizeof(PTK)); |  | ||||||
|  	forced_memzero(&PTK, sizeof(PTK)); |  | ||||||
|  	sm->PTK_valid = true; |  | ||||||
|   |  | ||||||
| -	return 0; |  | ||||||
| +	ret = 0; |  | ||||||
| +fail: |  | ||||||
| +	forced_memzero(pmk_r0, sizeof(pmk_r0)); |  | ||||||
| +	forced_memzero(pmk_r1, sizeof(pmk_r1)); |  | ||||||
| +	return ret; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| @@ -2283,7 +2301,9 @@ SM_STATE(WPA_PTK, PTKSTART) |  | ||||||
|   |  | ||||||
|  static int wpa_derive_ptk(struct wpa_state_machine *sm, const u8 *snonce, |  | ||||||
|  			  const u8 *pmk, unsigned int pmk_len, |  | ||||||
| -			  struct wpa_ptk *ptk, int force_sha256) |  | ||||||
| +			  struct wpa_ptk *ptk, int force_sha256, |  | ||||||
| +			  u8 *pmk_r0, u8 *pmk_r1, u8 *pmk_r0_name, |  | ||||||
| +			  size_t *key_len) |  | ||||||
|  { |  | ||||||
|  	const u8 *z = NULL; |  | ||||||
|  	size_t z_len = 0, kdk_len; |  | ||||||
| @@ -2311,7 +2331,8 @@ static int wpa_derive_ptk(struct wpa_sta |  | ||||||
|  						 sm->pairwise, |  | ||||||
|  						 kdk_len); |  | ||||||
|  		} |  | ||||||
| -		return wpa_auth_derive_ptk_ft(sm, ptk); |  | ||||||
| +		return wpa_auth_derive_ptk_ft(sm, ptk, pmk_r0, pmk_r1, |  | ||||||
| +					      pmk_r0_name, key_len); |  | ||||||
|  	} |  | ||||||
|  #endif /* CONFIG_IEEE80211R_AP */ |  | ||||||
|   |  | ||||||
| @@ -2934,6 +2955,9 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  	struct wpa_eapol_ie_parse kde; |  | ||||||
|  	int vlan_id = 0; |  | ||||||
|  	int owe_ptk_workaround = !!wpa_auth->conf.owe_ptk_workaround; |  | ||||||
| +	u8 pmk_r0[PMK_LEN_MAX], pmk_r0_name[WPA_PMK_NAME_LEN]; |  | ||||||
| +	u8 pmk_r1[PMK_LEN_MAX]; |  | ||||||
| +	size_t key_len; |  | ||||||
|   |  | ||||||
|  	SM_ENTRY_MA(WPA_PTK, PTKCALCNEGOTIATING, wpa_ptk); |  | ||||||
|  	sm->EAPOLKeyReceived = false; |  | ||||||
| @@ -2972,7 +2996,8 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
|  		if (wpa_derive_ptk(sm, sm->SNonce, pmk, pmk_len, &PTK, |  | ||||||
| -				   owe_ptk_workaround == 2) < 0) |  | ||||||
| +				   owe_ptk_workaround == 2, pmk_r0, pmk_r1, |  | ||||||
| +				   pmk_r0_name, &key_len) < 0) |  | ||||||
|  			break; |  | ||||||
|   |  | ||||||
|  		if (mic_len && |  | ||||||
| @@ -3021,7 +3046,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  						 sm->last_rx_eapol_key, |  | ||||||
|  						 sm->last_rx_eapol_key_len); |  | ||||||
|  		sm->waiting_radius_psk = 1; |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	if (!ok) { |  | ||||||
| @@ -3029,7 +3054,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  				"invalid MIC in msg 2/4 of 4-Way Handshake"); |  | ||||||
|  		if (psk_found) |  | ||||||
|  			wpa_auth_psk_failure_report(sm->wpa_auth, sm->addr); |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	/* |  | ||||||
| @@ -3043,12 +3068,12 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  	key_data_length = WPA_GET_BE16(mic + mic_len); |  | ||||||
|  	if (key_data_length > sm->last_rx_eapol_key_len - sizeof(*hdr) - |  | ||||||
|  	    sizeof(*key) - mic_len - 2) |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|   |  | ||||||
|  	if (wpa_parse_kde_ies(key_data, key_data_length, &kde) < 0) { |  | ||||||
|  		wpa_auth_vlogger(wpa_auth, sm->addr, LOGGER_INFO, |  | ||||||
|  				 "received EAPOL-Key msg 2/4 with invalid Key Data contents"); |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|  	} |  | ||||||
|  	if (kde.rsn_ie) { |  | ||||||
|  		eapol_key_ie = kde.rsn_ie; |  | ||||||
| @@ -3075,7 +3100,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  		/* MLME-DEAUTHENTICATE.request */ |  | ||||||
|  		wpa_sta_disconnect(wpa_auth, sm->addr, |  | ||||||
|  				   WLAN_REASON_PREV_AUTH_NOT_VALID); |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|  	} |  | ||||||
|  	if ((!sm->rsnxe && kde.rsnxe) || |  | ||||||
|  	    (sm->rsnxe && !kde.rsnxe) || |  | ||||||
| @@ -3091,7 +3116,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  		/* MLME-DEAUTHENTICATE.request */ |  | ||||||
|  		wpa_sta_disconnect(wpa_auth, sm->addr, |  | ||||||
|  				   WLAN_REASON_PREV_AUTH_NOT_VALID); |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|  	} |  | ||||||
|  #ifdef CONFIG_OCV |  | ||||||
|  	if (wpa_auth_uses_ocv(sm)) { |  | ||||||
| @@ -3103,14 +3128,14 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  		if (wpa_channel_info(wpa_auth, &ci) != 0) { |  | ||||||
|  			wpa_auth_logger(wpa_auth, sm->addr, LOGGER_INFO, |  | ||||||
|  					"Failed to get channel info to validate received OCI in EAPOL-Key 2/4"); |  | ||||||
| -			return; |  | ||||||
| +			goto out; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
|  		if (get_sta_tx_parameters(sm, |  | ||||||
|  					  channel_width_to_int(ci.chanwidth), |  | ||||||
|  					  ci.seg1_idx, &tx_chanwidth, |  | ||||||
|  					  &tx_seg1_idx) < 0) |  | ||||||
| -			return; |  | ||||||
| +			goto out; |  | ||||||
|   |  | ||||||
|  		res = ocv_verify_tx_params(kde.oci, kde.oci_len, &ci, |  | ||||||
|  					   tx_chanwidth, tx_seg1_idx); |  | ||||||
| @@ -3127,7 +3152,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  					OCV_FAILURE "addr=" MACSTR |  | ||||||
|  					" frame=eapol-key-m2 error=%s", |  | ||||||
|  					MAC2STR(sm->addr), ocv_errorstr); |  | ||||||
| -			return; |  | ||||||
| +			goto out; |  | ||||||
|  		} |  | ||||||
|  	} |  | ||||||
|  #endif /* CONFIG_OCV */ |  | ||||||
| @@ -3135,7 +3160,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  	if (ft && ft_check_msg_2_of_4(wpa_auth, sm, &kde) < 0) { |  | ||||||
|  		wpa_sta_disconnect(wpa_auth, sm->addr, |  | ||||||
|  				   WLAN_REASON_PREV_AUTH_NOT_VALID); |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|  	} |  | ||||||
|  #endif /* CONFIG_IEEE80211R_AP */ |  | ||||||
|  #ifdef CONFIG_P2P |  | ||||||
| @@ -3171,7 +3196,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  				   "DPP: Peer indicated it supports PFS and local configuration allows this, but PFS was not negotiated for the association"); |  | ||||||
|  			wpa_sta_disconnect(wpa_auth, sm->addr, |  | ||||||
|  					   WLAN_REASON_PREV_AUTH_NOT_VALID); |  | ||||||
| -			return; |  | ||||||
| +			goto out; |  | ||||||
|  		} |  | ||||||
|  	} |  | ||||||
|  #endif /* CONFIG_DPP2 */ |  | ||||||
| @@ -3191,7 +3216,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  				    sm->sup_pmk_r1_name, WPA_PMK_NAME_LEN); |  | ||||||
|  			wpa_hexdump(MSG_DEBUG, "FT: Derived PMKR1Name", |  | ||||||
|  				    sm->pmk_r1_name, WPA_PMK_NAME_LEN); |  | ||||||
| -			return; |  | ||||||
| +			goto out; |  | ||||||
|  		} |  | ||||||
|  	} |  | ||||||
|  #endif /* CONFIG_IEEE80211R_AP */ |  | ||||||
| @@ -3200,7 +3225,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|  	    wpa_auth_update_vlan(wpa_auth, sm->addr, vlan_id) < 0) { |  | ||||||
|  		wpa_sta_disconnect(wpa_auth, sm->addr, |  | ||||||
|  				   WLAN_REASON_PREV_AUTH_NOT_VALID); |  | ||||||
| -		return; |  | ||||||
| +		goto out; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	sm->pending_1_of_4_timeout = 0; |  | ||||||
| @@ -3216,9 +3241,20 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING) |  | ||||||
|   |  | ||||||
|  	sm->MICVerified = true; |  | ||||||
|   |  | ||||||
| +#ifdef CONFIG_IEEE80211R_AP |  | ||||||
| +	if (wpa_key_mgmt_ft(sm->wpa_key_mgmt) && !sm->ft_completed) { |  | ||||||
| +		wpa_printf(MSG_DEBUG, "FT: Store PMK-R0/PMK-R1"); |  | ||||||
| +		wpa_auth_ft_store_keys(sm, pmk_r0, pmk_r1, pmk_r0_name, |  | ||||||
| +				       key_len); |  | ||||||
| +	} |  | ||||||
| +#endif /* CONFIG_IEEE80211R_AP */ |  | ||||||
| + |  | ||||||
|  	os_memcpy(&sm->PTK, &PTK, sizeof(PTK)); |  | ||||||
|  	forced_memzero(&PTK, sizeof(PTK)); |  | ||||||
|  	sm->PTK_valid = true; |  | ||||||
| +out: |  | ||||||
| +	forced_memzero(pmk_r0, sizeof(pmk_r0)); |  | ||||||
| +	forced_memzero(pmk_r1, sizeof(pmk_r1)); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| --- a/src/ap/wpa_auth_ft.c |  | ||||||
| +++ b/src/ap/wpa_auth_ft.c |  | ||||||
| @@ -2175,13 +2175,13 @@ int wpa_ft_store_pmk_fils(struct wpa_sta |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, struct wpa_ptk *ptk) |  | ||||||
| +int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, struct wpa_ptk *ptk, |  | ||||||
| +			   u8 *pmk_r0, u8 *pmk_r1, u8 *pmk_r0_name, |  | ||||||
| +			   size_t *key_len) |  | ||||||
|  { |  | ||||||
| -	u8 pmk_r0[PMK_LEN_MAX], pmk_r0_name[WPA_PMK_NAME_LEN]; |  | ||||||
|  	size_t pmk_r0_len = wpa_key_mgmt_sha384(sm->wpa_key_mgmt) ? |  | ||||||
|  		SHA384_MAC_LEN : PMK_LEN; |  | ||||||
|  	size_t pmk_r1_len = pmk_r0_len; |  | ||||||
| -	u8 pmk_r1[PMK_LEN_MAX]; |  | ||||||
|  	u8 ptk_name[WPA_PMK_NAME_LEN]; |  | ||||||
|  	const u8 *mdid = sm->wpa_auth->conf.mobility_domain; |  | ||||||
|  	const u8 *r0kh = sm->wpa_auth->conf.r0_key_holder; |  | ||||||
| @@ -2189,13 +2189,6 @@ int wpa_auth_derive_ptk_ft(struct wpa_st |  | ||||||
|  	const u8 *r1kh = sm->wpa_auth->conf.r1_key_holder; |  | ||||||
|  	const u8 *ssid = sm->wpa_auth->conf.ssid; |  | ||||||
|  	size_t ssid_len = sm->wpa_auth->conf.ssid_len; |  | ||||||
| -	int psk_local = sm->wpa_auth->conf.ft_psk_generate_local; |  | ||||||
| -	int expires_in = sm->wpa_auth->conf.r0_key_lifetime; |  | ||||||
| -	struct vlan_description vlan; |  | ||||||
| -	struct rate_description rate; |  | ||||||
| -	const u8 *identity, *radius_cui; |  | ||||||
| -	size_t identity_len, radius_cui_len; |  | ||||||
| -	int session_timeout; |  | ||||||
|  	const u8 *mpmk; |  | ||||||
|  	size_t mpmk_len; |  | ||||||
|   |  | ||||||
| @@ -2211,10 +2204,41 @@ int wpa_auth_derive_ptk_ft(struct wpa_st |  | ||||||
|  		return -1; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| +	*key_len = pmk_r0_len; |  | ||||||
| +	if (wpa_derive_pmk_r0(mpmk, mpmk_len, ssid, ssid_len, mdid, |  | ||||||
| +			      r0kh, r0kh_len, sm->addr, |  | ||||||
| +			      pmk_r0, pmk_r0_name, |  | ||||||
| +			      pmk_r0_len == SHA384_MAC_LEN) < 0 || |  | ||||||
| +	    wpa_derive_pmk_r1(pmk_r0, pmk_r0_len, pmk_r0_name, r1kh, sm->addr, |  | ||||||
| +			      pmk_r1, sm->pmk_r1_name) < 0) |  | ||||||
| +		return -1; |  | ||||||
| + |  | ||||||
| +	return wpa_pmk_r1_to_ptk(pmk_r1, pmk_r1_len, sm->SNonce, sm->ANonce, |  | ||||||
| +				 sm->addr, sm->wpa_auth->addr, sm->pmk_r1_name, |  | ||||||
| +				 ptk, ptk_name, sm->wpa_key_mgmt, sm->pairwise, |  | ||||||
| +				 0); |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| + |  | ||||||
| +void wpa_auth_ft_store_keys(struct wpa_state_machine *sm, const u8 *pmk_r0, |  | ||||||
| +			    const u8 *pmk_r1, const u8 *pmk_r0_name, |  | ||||||
| +			    size_t key_len) |  | ||||||
| +{ |  | ||||||
| +	int psk_local = sm->wpa_auth->conf.ft_psk_generate_local; |  | ||||||
| +	int expires_in = sm->wpa_auth->conf.r0_key_lifetime; |  | ||||||
| +	struct vlan_description vlan; |  | ||||||
| +	struct rate_description rate; |  | ||||||
| +	const u8 *identity, *radius_cui; |  | ||||||
| +	size_t identity_len, radius_cui_len; |  | ||||||
| +	int session_timeout; |  | ||||||
| + |  | ||||||
| +	if (psk_local && wpa_key_mgmt_ft_psk(sm->wpa_key_mgmt)) |  | ||||||
| +		return; |  | ||||||
| + |  | ||||||
|  	if (wpa_ft_get_vlan(sm->wpa_auth, sm->addr, &vlan) < 0) { |  | ||||||
|  		wpa_printf(MSG_DEBUG, "FT: vlan not available for STA " MACSTR, |  | ||||||
|  			   MAC2STR(sm->addr)); |  | ||||||
| -		return -1; |  | ||||||
| +		return; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	wpa_ft_get_rate_limit(sm->wpa_auth, sm->addr, &rate); |  | ||||||
| @@ -2224,32 +2248,16 @@ int wpa_auth_derive_ptk_ft(struct wpa_st |  | ||||||
|  					       &radius_cui); |  | ||||||
|  	session_timeout = wpa_ft_get_session_timeout(sm->wpa_auth, sm->addr); |  | ||||||
|   |  | ||||||
| -	if (wpa_derive_pmk_r0(mpmk, mpmk_len, ssid, ssid_len, mdid, |  | ||||||
| -			      r0kh, r0kh_len, sm->addr, |  | ||||||
| -			      pmk_r0, pmk_r0_name, |  | ||||||
| -			      wpa_key_mgmt_sha384(sm->wpa_key_mgmt)) < 0) |  | ||||||
| -		return -1; |  | ||||||
| -	if (!psk_local || !wpa_key_mgmt_ft_psk(sm->wpa_key_mgmt)) |  | ||||||
| -		wpa_ft_store_pmk_r0(sm->wpa_auth, sm->addr, pmk_r0, pmk_r0_len, |  | ||||||
| -				    pmk_r0_name, |  | ||||||
| -				    sm->pairwise, &vlan, expires_in, |  | ||||||
| -				    session_timeout, identity, identity_len, |  | ||||||
| -				    radius_cui, radius_cui_len, &rate); |  | ||||||
| - |  | ||||||
| -	if (wpa_derive_pmk_r1(pmk_r0, pmk_r0_len, pmk_r0_name, r1kh, sm->addr, |  | ||||||
| -			      pmk_r1, sm->pmk_r1_name) < 0) |  | ||||||
| -		return -1; |  | ||||||
| -	if (!psk_local || !wpa_key_mgmt_ft_psk(sm->wpa_key_mgmt)) |  | ||||||
| -		wpa_ft_store_pmk_r1(sm->wpa_auth, sm->addr, pmk_r1, pmk_r1_len, |  | ||||||
| -				    sm->pmk_r1_name, sm->pairwise, &vlan, |  | ||||||
| -				    expires_in, session_timeout, identity, |  | ||||||
| -				    identity_len, radius_cui, radius_cui_len, |  | ||||||
| -				    &rate); |  | ||||||
| - |  | ||||||
| -	return wpa_pmk_r1_to_ptk(pmk_r1, pmk_r1_len, sm->SNonce, sm->ANonce, |  | ||||||
| -				 sm->addr, sm->wpa_auth->addr, sm->pmk_r1_name, |  | ||||||
| -				 ptk, ptk_name, sm->wpa_key_mgmt, sm->pairwise, |  | ||||||
| -				 0); |  | ||||||
| +	wpa_ft_store_pmk_r0(sm->wpa_auth, sm->addr, pmk_r0, key_len, |  | ||||||
| +			    pmk_r0_name, |  | ||||||
| +			    sm->pairwise, &vlan, expires_in, |  | ||||||
| +			    session_timeout, identity, identity_len, |  | ||||||
| +			    radius_cui, radius_cui_len, &rate); |  | ||||||
| + |  | ||||||
| +	wpa_ft_store_pmk_r1(sm->wpa_auth, sm->addr, pmk_r1, key_len, |  | ||||||
| +			    sm->pmk_r1_name, sm->pairwise, &vlan, |  | ||||||
| +			    expires_in, session_timeout, identity, |  | ||||||
| +			    identity_len, radius_cui, radius_cui_len, &rate); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| --- a/src/ap/wpa_auth_i.h |  | ||||||
| +++ b/src/ap/wpa_auth_i.h |  | ||||||
| @@ -302,7 +302,12 @@ int wpa_write_ftie(struct wpa_auth_confi |  | ||||||
|  		   const u8 *anonce, const u8 *snonce, |  | ||||||
|  		   u8 *buf, size_t len, const u8 *subelem, |  | ||||||
|  		   size_t subelem_len, int rsnxe_used); |  | ||||||
| -int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, struct wpa_ptk *ptk); |  | ||||||
| +int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, struct wpa_ptk *ptk, |  | ||||||
| +			   u8 *pmk_r0, u8 *pmk_r1, u8 *pmk_r0_name, |  | ||||||
| +			   size_t *key_len); |  | ||||||
| +void wpa_auth_ft_store_keys(struct wpa_state_machine *sm, const u8 *pmk_r0, |  | ||||||
| +			    const u8 *pmk_r1, const u8 *pmk_r0_name, |  | ||||||
| +			    size_t key_len); |  | ||||||
|  struct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void); |  | ||||||
|  void wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache); |  | ||||||
|  void wpa_ft_install_ptk(struct wpa_state_machine *sm, int retry); |  | ||||||
| @@ -24,11 +24,6 @@ cybertan,eww631-a1|\ | |||||||
| cybertan,eww631-b1) | cybertan,eww631-b1) | ||||||
|         ucidef_set_led_default "power" "POWER" "sys:blue" "on" |         ucidef_set_led_default "power" "POWER" "sys:blue" "on" | ||||||
| 	;; | 	;; | ||||||
| sonicfi,rap630w-312g) |  | ||||||
| 	ucidef_set_led_default "power" "POWER" "red:power" "on" |  | ||||||
| 	ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy0tpt" |  | ||||||
| 	ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy1tpt" |  | ||||||
| 	;; |  | ||||||
| sonicfi,rap630c-311g|\ | sonicfi,rap630c-311g|\ | ||||||
| sonicfi,rap630w-311g) | sonicfi,rap630w-311g) | ||||||
|         ucidef_set_led_default "power" "POWER" "pwm:blue" "on" |         ucidef_set_led_default "power" "POWER" "pwm:blue" "on" | ||||||
|   | |||||||
| @@ -13,10 +13,10 @@ qcom_setup_interfaces() | |||||||
|  |  | ||||||
| 	case $board in | 	case $board in | ||||||
| 	cig,wf186w) | 	cig,wf186w) | ||||||
| 		ucidef_add_switch "switch0" "4:wan" "0:lan" "1:lan" "2:lan" "3:lan" "6u@eth0" | 		ucidef_add_switch "switch0" "4:wan" "0:lan" "1:lan" "2:lan" "3:lan" "6@eth0" | ||||||
| 		;; | 		;; | ||||||
| 	cig,wf186h) | 	cig,wf186h) | ||||||
| 		ucidef_add_switch "switch0" "4:wan" "1:lan" "2:lan" "6u@eth0" | 		ucidef_add_switch "switch0" "4:wan" "1:lan" "2:lan" "6@eth0" | ||||||
| 		;; | 		;; | ||||||
| 	sonicfi,rap630c-311g|\ | 	sonicfi,rap630c-311g|\ | ||||||
| 	cybertan,eww631-a1) | 	cybertan,eww631-a1) | ||||||
| @@ -25,7 +25,7 @@ qcom_setup_interfaces() | |||||||
| 		;; | 		;; | ||||||
| 	sonicfi,rap630w-311g|\ | 	sonicfi,rap630w-311g|\ | ||||||
| 	cybertan,eww631-b1) | 	cybertan,eww631-b1) | ||||||
| 		ucidef_add_switch "switch1" "5:wan" "2:lan" "3:lan" "4:lan" "6u@eth0" | 		ucidef_add_switch "switch1" "5:wan" "2:lan" "3:lan" "4:lan" "6@eth0" | ||||||
| 		;; | 		;; | ||||||
| 	udaya,a6-id2) | 	udaya,a6-id2) | ||||||
| 		ucidef_set_interface_wan "eth1" | 		ucidef_set_interface_wan "eth1" | ||||||
| @@ -46,7 +46,7 @@ qcom_setup_interfaces() | |||||||
| 	edgecore,eap104) | 	edgecore,eap104) | ||||||
| 		ucidef_set_interface_wan "eth0" | 		ucidef_set_interface_wan "eth0" | ||||||
| 		ucidef_add_switch "switch1" \ | 		ucidef_add_switch "switch1" \ | ||||||
| 			"6u@eth1" "1:lan" "2:lan" "3:lan" "4:lan" | 			"6@eth1" "1:lan" "2:lan" "3:lan" "4:lan" | ||||||
| 		;; | 		;; | ||||||
| 	hfcl,ion4x_w|\ | 	hfcl,ion4x_w|\ | ||||||
| 	hfcl,ion4xi_w) | 	hfcl,ion4xi_w) | ||||||
| @@ -59,13 +59,12 @@ qcom_setup_interfaces() | |||||||
|                 ucidef_set_interface_wan "eth0" |                 ucidef_set_interface_wan "eth0" | ||||||
|                 ucidef_set_interface_lan "eth1" |                 ucidef_set_interface_lan "eth1" | ||||||
|                 ;; |                 ;; | ||||||
| 	sonicfi,rap630w-312g|\ |  | ||||||
| 	yuncore,fap655) | 	yuncore,fap655) | ||||||
| 		ucidef_add_switch "switch1" \ | 		ucidef_add_switch "switch1" \ | ||||||
| 			"6u@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" | 			"6@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" | ||||||
| 		;; | 		;; | ||||||
| 	glinet,b3000) | 	glinet,b3000) | ||||||
| 		ucidef_add_switch "switch1" "6u@eth1" "1:wan" "2:lan" "3:lan" | 		ucidef_add_switch "switch1" "6@eth1" "1:wan" "2:lan" "3:lan" | ||||||
| 		;; | 		;; | ||||||
| 	esac | 	esac | ||||||
| } | } | ||||||
|   | |||||||
| @@ -121,7 +121,6 @@ ath11k/IPQ5018/hw1.0/caldata.bin) | |||||||
| 	cig,wf186h|\ | 	cig,wf186h|\ | ||||||
| 	sonicfi,rap630c-311g|\ | 	sonicfi,rap630c-311g|\ | ||||||
| 	sonicfi,rap630w-311g|\ | 	sonicfi,rap630w-311g|\ | ||||||
| 	sonicfi,rap630w-312g|\ |  | ||||||
| 	cybertan,eww631-a1|\ | 	cybertan,eww631-a1|\ | ||||||
| 	cybertan,eww631-b1|\ | 	cybertan,eww631-b1|\ | ||||||
| 	edgecore,eap104|\ | 	edgecore,eap104|\ | ||||||
| @@ -150,7 +149,6 @@ ath11k/qcn6122/hw1.0/caldata_1.bin) | |||||||
| 	cig,wf186h|\ | 	cig,wf186h|\ | ||||||
| 	sonicfi,rap630c-311g|\ | 	sonicfi,rap630c-311g|\ | ||||||
| 	sonicfi,rap630w-311g|\ | 	sonicfi,rap630w-311g|\ | ||||||
| 	sonicfi,rap630w-312g|\ |  | ||||||
| 	cybertan,eww631-a1|\ | 	cybertan,eww631-a1|\ | ||||||
| 	cybertan,eww631-b1|\ | 	cybertan,eww631-b1|\ | ||||||
| 	edgecore,oap101|\ | 	edgecore,oap101|\ | ||||||
| @@ -219,7 +217,6 @@ ath11k-macs) | |||||||
| 	optimcloud,d60-5g|\ | 	optimcloud,d60-5g|\ | ||||||
| 	optimcloud,d50|\ | 	optimcloud,d50|\ | ||||||
| 	optimcloud,d50-5g|\ | 	optimcloud,d50-5g|\ | ||||||
| 	sonicfi,rap630w-312g|\ |  | ||||||
| 	yuncore,fap655) | 	yuncore,fap655) | ||||||
| 		ath11k_generate_macs | 		ath11k_generate_macs | ||||||
| 		;; | 		;; | ||||||
|   | |||||||
| @@ -6,27 +6,26 @@ board=$(board_name) | |||||||
|  |  | ||||||
| case "$board" in | case "$board" in | ||||||
|     "edgecore,eap101") |     "edgecore,eap101") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,eap102"|\ |     "edgecore,eap102") | ||||||
|     "edgecore,oap103") |         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |  | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,oap101e-6e"|\ |     "edgecore,oap101e-6e"|\ | ||||||
|     "edgecore,oap101-6e") |     "edgecore,oap101-6e") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy6g |         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,oap101e"|\ |     "edgecore,oap101e"|\ | ||||||
|     "edgecore,oap101") |     "edgecore,oap101") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,eap104") |     "edgecore,eap104") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
| esac | esac | ||||||
|   | |||||||
| @@ -72,7 +72,6 @@ platform_check_image() { | |||||||
| 	cig,wf186h|\ | 	cig,wf186h|\ | ||||||
| 	sonicfi,rap630c-311g|\ | 	sonicfi,rap630c-311g|\ | ||||||
| 	sonicfi,rap630w-311g|\ | 	sonicfi,rap630w-311g|\ | ||||||
| 	sonicfi,rap630w-312g|\ |  | ||||||
| 	cybertan,eww631-a1|\ | 	cybertan,eww631-a1|\ | ||||||
| 	cybertan,eww631-b1|\ | 	cybertan,eww631-b1|\ | ||||||
| 	edgecore,eap104|\ | 	edgecore,eap104|\ | ||||||
| @@ -143,20 +142,19 @@ platform_do_upgrade() { | |||||||
| 		} | 		} | ||||||
| 		nand_upgrade_tar "$1" | 		nand_upgrade_tar "$1" | ||||||
| 		;; | 		;; | ||||||
| 	cybertan,eww631-a1|\ |  | ||||||
| 	cybertan,eww631-b1|\ |  | ||||||
| 	sonicfi,rap630c-311g|\ | 	sonicfi,rap630c-311g|\ | ||||||
| 	sonicfi,rap630w-311g|\ | 	sonicfi,rap630w-311g|\ | ||||||
| 	sonicfi,rap630w-312g) | 	cybertan,eww631-a1|\ | ||||||
|  | 	cybertan,eww631-b1) | ||||||
| 		boot_part=$(fw_printenv bootfrom | cut  -d = -f2) | 		boot_part=$(fw_printenv bootfrom | cut  -d = -f2) | ||||||
| 			echo "Current bootfrom is $boot_part" | 		echo "Current bootfrom is $boot_part" | ||||||
| 			if [[ $boot_part == 1 ]]; then | 		if [[ $boot_part == 1 ]]; then | ||||||
| 				CI_UBIPART="rootfs" | 			CI_UBIPART="rootfs" | ||||||
| 				CI_FWSETENV="bootfrom 0" | 			CI_FWSETENV="bootfrom 0" | ||||||
| 			elif [[ $boot_part == 0 ]]; then | 		else | ||||||
| 				CI_UBIPART="rootfs_1" | 			CI_UBIPART="rootfs_1" | ||||||
| 				CI_FWSETENV="bootfrom 1" | 			CI_FWSETENV="bootfrom 1" | ||||||
| 			fi | 		fi | ||||||
| 		nand_upgrade_tar "$1" | 		nand_upgrade_tar "$1" | ||||||
| 		;; | 		;; | ||||||
| 	esac | 	esac | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								feeds/ipq807x_v5.4/ipq50xx/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww631-a1.dts
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										3
									
								
								feeds/ipq807x_v5.4/ipq50xx/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww631-a1.dts
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -817,9 +817,10 @@ | |||||||
| 	qcom,board_id = <0x24>; | 	qcom,board_id = <0x24>; | ||||||
| #ifdef __CNSS2__ | #ifdef __CNSS2__ | ||||||
| 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | ||||||
| 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0>; | 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0 0>; | ||||||
| 	qcom,caldb-size = <0x200000>; | 	qcom,caldb-size = <0x200000>; | ||||||
| 	mem-region = <&q6_ipq5018_data>; | 	mem-region = <&q6_ipq5018_data>; | ||||||
|  | 1235 | ||||||
| #else | #else | ||||||
| 	memory-region = <&q6_ipq5018_data>; | 	memory-region = <&q6_ipq5018_data>; | ||||||
| #endif | #endif | ||||||
|   | |||||||
							
								
								
									
										78
									
								
								feeds/ipq807x_v5.4/ipq50xx/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww631-b1.dts
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										78
									
								
								feeds/ipq807x_v5.4/ipq50xx/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww631-b1.dts
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -173,40 +173,40 @@ | |||||||
| 	 * |   data   |              |                         | | 	 * |   data   |              |                         | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |   data   |  0x4C400000  |          13MB           | | 	 * |   data   |  0x4C400000  |          14MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |  M3 Dump |  0x4D100000  |           1MB           | | 	 * |  M3 Dump |  0x4D200000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |   QDSS   |  0x4D200000  |           1MB           | | 	 * |   QDSS   |  0x4D300000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |  Caldb   |  0x4D300000  |           2MB           | | 	 * |  Caldb   |  0x4D400000  |           2MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |   data   |  0x4D500000  |          13MB           | | 	 * |   data   |  0x4D600000  |          16MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |  M3 Dump |  0x4E200000  |           1MB           | | 	 * |  M3 Dump |  0x4E600000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |   QDSS   |  0x4E300000  |           1MB           | | 	 * |   QDSS   |  0x4E700000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |  Caldb   |  0x4E400000  |           5MB           | | 	 * |  Caldb   |  0x4E800000  |           5MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |   data   |  0x4E900000  |          13MB           | | 	 * |   data   |  0x4ED00000  |          16MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |  M3 Dump |  0x4F600000  |           1MB           | | 	 * |  M3 Dump |  0x4FD00000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |   QDSS   |  0x4F700000  |           1MB           | | 	 * |   QDSS   |  0x4FE00000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |  Caldb   |  0x4F800000  |           5MB           | | 	 * |  Caldb   |  0x4FF00000  |           5MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |                                                   | | 	 * |                                                   | | ||||||
| 	 * |            Rest of the memory for Linux           | | 	 * |            Rest of the memory for Linux           | | ||||||
| @@ -215,7 +215,7 @@ | |||||||
| 	 */ | 	 */ | ||||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4B000000 0x0 0x4D00000>; | 			reg = <0x0 0x4B000000 0x0 0x5400000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_code_data: q6_code_data@4B000000 { | 		q6_code_data: q6_code_data@4B000000 { | ||||||
| @@ -225,62 +225,62 @@ | |||||||
|  |  | ||||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; | 			reg = <0x0 0x4C400000 0x0 0xE00000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		m3_dump: m3_dump@4D100000 { | 		m3_dump: m3_dump@4D200000 { | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_etr_region: q6_etr_dump@4D200000 { |  | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; | 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_caldb_region: q6_caldb_region@4D300000 { | 		q6_etr_region: q6_etr_dump@4D300000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4D300000 0x0 0x200000>; | 			reg = <0x0 0x4D300000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D500000 { | 		q6_caldb_region: q6_caldb_region@4D400000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4D500000 0x0 0xD00000>; | 			reg = <0x0 0x4D400000 0x0 0x200000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E200000 { | 		q6_qcn6122_data1: q6_qcn6122_data1@4D600000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E200000 0x0 0x100000>; | 			reg = <0x0 0x4D600000 0x0 0x1000000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E300000 { | 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E600000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E300000 0x0 0x100000>; | 			reg = <0x0 0x4E600000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E400000 { | 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E700000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E400000 0x0 0x500000>; | 			reg = <0x0 0x4E700000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E800000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E800000 0x0 0x500000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E900000 0x0 0xD00000>; | 			reg = <0x0 0x4ED00000 0x0 0x1000000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F600000 { | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4FD00000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F600000 0x0 0x100000>; | 			reg = <0x0 0x4FD00000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F700000 { | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4FE00000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F700000 0x0 0x100000>; | 			reg = <0x0 0x4FE00000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4F800000 { | 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4FF00000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; | 			reg = <0x0 0x4FF00000 0x0 0x500000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 	#endif | 	#endif | ||||||
| @@ -883,8 +883,8 @@ | |||||||
| #endif | #endif | ||||||
| 	qcom,board_id = <0x24>; | 	qcom,board_id = <0x24>; | ||||||
| #ifdef __CNSS2__ | #ifdef __CNSS2__ | ||||||
| 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0 0x0>; | ||||||
| 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0>; | 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0 0>; | ||||||
| 	qcom,caldb-size = <0x200000>; | 	qcom,caldb-size = <0x200000>; | ||||||
| 	mem-region = <&q6_ipq5018_data>; | 	mem-region = <&q6_ipq5018_data>; | ||||||
| #else | #else | ||||||
|   | |||||||
| @@ -816,9 +816,10 @@ | |||||||
| 	qcom,board_id = <0x24>; | 	qcom,board_id = <0x24>; | ||||||
| #ifdef __CNSS2__ | #ifdef __CNSS2__ | ||||||
| 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | ||||||
| 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0>; | 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0 0>; | ||||||
| 	qcom,caldb-size = <0x200000>; | 	qcom,caldb-size = <0x200000>; | ||||||
| 	mem-region = <&q6_ipq5018_data>; | 	mem-region = <&q6_ipq5018_data>; | ||||||
|  | 1235 | ||||||
| #else | #else | ||||||
| 	memory-region = <&q6_ipq5018_data>; | 	memory-region = <&q6_ipq5018_data>; | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -175,40 +175,40 @@ | |||||||
| 	 * |   data   |              |                         | | 	 * |   data   |              |                         | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |   data   |  0x4C400000  |          13MB           | | 	 * |   data   |  0x4C400000  |          14MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |  M3 Dump |  0x4D100000  |           1MB           | | 	 * |  M3 Dump |  0x4D200000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |   QDSS   |  0x4D200000  |           1MB           | | 	 * |   QDSS   |  0x4D300000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |  IPQ5018 |              |                         | | 	 * |  IPQ5018 |              |                         | | ||||||
| 	 * |  Caldb   |  0x4D300000  |           2MB           | | 	 * |  Caldb   |  0x4D400000  |           2MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |   data   |  0x4D500000  |          13MB           | | 	 * |   data   |  0x4D600000  |          16MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |  M3 Dump |  0x4E200000  |           1MB           | | 	 * |  M3 Dump |  0x4E600000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |   QDSS   |  0x4E300000  |           1MB           | | 	 * |   QDSS   |  0x4E700000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_1|              |                         | | 	 * | QCN6122_1|              |                         | | ||||||
| 	 * |  Caldb   |  0x4E400000  |           5MB           | | 	 * |  Caldb   |  0x4E800000  |           5MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |   data   |  0x4E900000  |          13MB           | | 	 * |   data   |  0x4ED00000  |          16MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |  M3 Dump |  0x4F600000  |           1MB           | | 	 * |  M3 Dump |  0x4FD00000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |   QDSS   |  0x4F700000  |           1MB           | | 	 * |   QDSS   |  0x4FE00000  |           1MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * | QCN6122_2|              |                         | | 	 * | QCN6122_2|              |                         | | ||||||
| 	 * |  Caldb   |  0x4F800000  |           5MB           | | 	 * |  Caldb   |  0x4FF00000  |           5MB           | | ||||||
| 	 * +----------+--------------+-------------------------+ | 	 * +----------+--------------+-------------------------+ | ||||||
| 	 * |                                                   | | 	 * |                                                   | | ||||||
| 	 * |            Rest of the memory for Linux           | | 	 * |            Rest of the memory for Linux           | | ||||||
| @@ -217,7 +217,7 @@ | |||||||
| 	 */ | 	 */ | ||||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { | 		q6_mem_regions: q6_mem_regions@4B000000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4B000000 0x0 0x4D00000>; | 			reg = <0x0 0x4B000000 0x0 0x5400000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_code_data: q6_code_data@4B000000 { | 		q6_code_data: q6_code_data@4B000000 { | ||||||
| @@ -227,62 +227,62 @@ | |||||||
|  |  | ||||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; | 			reg = <0x0 0x4C400000 0x0 0xE00000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		m3_dump: m3_dump@4D100000 { | 		m3_dump: m3_dump@4D200000 { | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_etr_region: q6_etr_dump@4D200000 { |  | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; | 			reg = <0x0 0x4D200000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_caldb_region: q6_caldb_region@4D300000 { | 		q6_etr_region: q6_etr_dump@4D300000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4D300000 0x0 0x200000>; | 			reg = <0x0 0x4D300000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D500000 { | 		q6_caldb_region: q6_caldb_region@4D400000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4D500000 0x0 0xD00000>; | 			reg = <0x0 0x4D400000 0x0 0x200000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E200000 { | 		q6_qcn6122_data1: q6_qcn6122_data1@4D600000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E200000 0x0 0x100000>; | 			reg = <0x0 0x4D600000 0x0 0x1000000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E300000 { | 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E600000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E300000 0x0 0x100000>; | 			reg = <0x0 0x4E600000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E400000 { | 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E700000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E400000 0x0 0x500000>; | 			reg = <0x0 0x4E700000 0x0 0x100000>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E800000 { | ||||||
|  | 			no-map; | ||||||
|  | 			reg = <0x0 0x4E800000 0x0 0x500000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4E900000 0x0 0xD00000>; | 			reg = <0x0 0x4ED00000 0x0 0x1000000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F600000 { | 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4FD00000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F600000 0x0 0x100000>; | 			reg = <0x0 0x4FD00000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F700000 { | 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4FE00000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F700000 0x0 0x100000>; | 			reg = <0x0 0x4FE00000 0x0 0x100000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4F800000 { | 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4FF00000 { | ||||||
| 			no-map; | 			no-map; | ||||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; | 			reg = <0x0 0x4FF00000 0x0 0x500000>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 	#endif | 	#endif | ||||||
| @@ -894,8 +894,8 @@ | |||||||
| #endif | #endif | ||||||
| 	qcom,board_id = <0x24>; | 	qcom,board_id = <0x24>; | ||||||
| #ifdef __CNSS2__ | #ifdef __CNSS2__ | ||||||
| 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; | 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0 0x0>; | ||||||
| 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0>; | 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0 0>; | ||||||
| 	qcom,caldb-size = <0x200000>; | 	qcom,caldb-size = <0x200000>; | ||||||
| 	mem-region = <&q6_ipq5018_data>; | 	mem-region = <&q6_ipq5018_data>; | ||||||
| #else | #else | ||||||
|   | |||||||
| @@ -1,908 +0,0 @@ | |||||||
| /dts-v1/; |  | ||||||
| /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Permission to use, copy, modify, and/or distribute this software for any |  | ||||||
|  * purpose with or without fee is hereby granted, provided that the above |  | ||||||
|  * copyright notice and this permission notice appear in all copies. |  | ||||||
|  * |  | ||||||
|  * 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. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include "ipq5018.dtsi" |  | ||||||
| #include <dt-bindings/input/input.h> |  | ||||||
|  |  | ||||||
| / { |  | ||||||
| 	#address-cells = <0x2>; |  | ||||||
| 	#size-cells = <0x2>; |  | ||||||
| 	model = "Sonicfi RAP630W-312G"; |  | ||||||
| 	compatible = "sonicfi,rap630w-312g", "qcom,ipq5018-mp03.3", "qcom,ipq5018"; |  | ||||||
| 	interrupt-parent = <&intc>; |  | ||||||
|  |  | ||||||
| 	aliases { |  | ||||||
| 		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ |  | ||||||
| 		serial0 = &blsp1_uart1; |  | ||||||
| 		serial1 = &blsp1_uart2; |  | ||||||
| 		ethernet1 = "/soc/dp1"; |  | ||||||
|  |  | ||||||
| 		led-boot = &led_power; |  | ||||||
| 		led-failsafe = &led_power; |  | ||||||
| 		led-running = &led_power; |  | ||||||
| 		led-upgrade = &led_power; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	chosen { |  | ||||||
| 		bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; |  | ||||||
| 		bootargs-append = " swiotlb=1 coherent_pool=2M"; |  | ||||||
| 		stdout-path = "serial0"; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	reserved-memory { |  | ||||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 	/*		   256 MB Profile |  | ||||||
| 	 * +==========+==============+=========================+ |  | ||||||
| 	 * |	  |	      |			 | |  | ||||||
| 	 * |  Region  | Start Offset |	  Size	   | |  | ||||||
| 	 * |	  |	      |			 | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    NSS   |  0x40000000  |	   8MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |   Linux  |  0x40800000  | Depends on total memory | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |   uboot  |  0x4A600000  |	   4MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    SBL   |  0x4AA00000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |   smem   |  0x4AB00000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    TZ    |  0x4AC00000  |	   4MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    Q6    |	      |			 | |  | ||||||
| 	 * |   code/  |  0x4B000000  |	  20MB	   | |  | ||||||
| 	 * |   data   |	      |			 | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |  IPQ5018 |	      |			 | |  | ||||||
| 	 * |   data   |  0x4C400000  |	  13MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |  IPQ5018 |	      |			 | |  | ||||||
| 	 * |  M3 Dump |  0x4D100000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |  IPQ5018 |	      |			 | |  | ||||||
| 	 * |   QDSS   |  0x4D200000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_1|	      |			 | |  | ||||||
| 	 * |   data   |  0x4D300000  |	  13MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_1|	      |			 | |  | ||||||
| 	 * |  M3 Dump |  0x4E000000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_1|	      |			 | |  | ||||||
| 	 * |   QDSS   |  0x4E100000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_2|	      |			 | |  | ||||||
| 	 * |   data   |  0x4E200000  |	  13MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_2|	      |			 | |  | ||||||
| 	 * |  M3 Dump |  0x4EF00000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_2|	      |			 | |  | ||||||
| 	 * |   QDSS   |  0x4F000000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |						   | |  | ||||||
| 	 * |	    Rest of the memory for Linux	   | |  | ||||||
| 	 * |						   | |  | ||||||
| 	 * +===================================================+ |  | ||||||
| 	 */ |  | ||||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4B000000 0x0 0x4100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_code_data: q6_code_data@4B000000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4B000000 0x0 0x1400000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		m3_dump: m3_dump@4D100000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_etr_region: q6_etr_dump@4D200000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D300000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D300000 0x0 0xD00000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E000000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4E000000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E100000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4E100000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E200000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4E200000 0x0 0xD00000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4EF00000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4EF00000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F000000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4F000000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
| 	#else |  | ||||||
| 	/*		 512MB/1GB Profiles |  | ||||||
| 	 * +==========+==============+=========================+ |  | ||||||
| 	 * |	  |	      |			 | |  | ||||||
| 	 * |  Region  | Start Offset |	  Size	   | |  | ||||||
| 	 * |	  |	      |			 | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    NSS   |  0x40000000  |	  16MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |   Linux  |  0x41000000  | Depends on total memory | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |   uboot  |  0x4A600000  |	   4MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    SBL   |  0x4AA00000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |   smem   |  0x4AB00000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    TZ    |  0x4AC00000  |	   4MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |    Q6    |	      |			 | |  | ||||||
| 	 * |   code/  |  0x4B000000  |	  20MB	   | |  | ||||||
| 	 * |   data   |	      |			 | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |  IPQ5018 |	      |			 | |  | ||||||
| 	 * |   data   |  0x4C400000  |	  13MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |  IPQ5018 |	      |			 | |  | ||||||
| 	 * |  M3 Dump |  0x4D100000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |  IPQ5018 |	      |			 | |  | ||||||
| 	 * |   QDSS   |  0x4D200000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |  IPQ5018 |	      |			 | |  | ||||||
| 	 * |  Caldb   |  0x4D300000  |	   2MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_1|	      |			 | |  | ||||||
| 	 * |   data   |  0x4D500000  |	  13MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_1|	      |			 | |  | ||||||
| 	 * |  M3 Dump |  0x4E200000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_1|	      |			 | |  | ||||||
| 	 * |   QDSS   |  0x4E300000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_1|	      |			 | |  | ||||||
| 	 * |  Caldb   |  0x4E400000  |	   5MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_2|	      |			 | |  | ||||||
| 	 * |   data   |  0x4E900000  |	  13MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_2|	      |			 | |  | ||||||
| 	 * |  M3 Dump |  0x4F600000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_2|	      |			 | |  | ||||||
| 	 * |   QDSS   |  0x4F700000  |	   1MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * | QCN6122_2|	      |			 | |  | ||||||
| 	 * |  Caldb   |  0x4F800000  |	   5MB	   | |  | ||||||
| 	 * +----------+--------------+-------------------------+ |  | ||||||
| 	 * |						   | |  | ||||||
| 	 * |	    Rest of the memory for Linux	   | |  | ||||||
| 	 * |						   | |  | ||||||
| 	 * +===================================================+ |  | ||||||
| 	 */ |  | ||||||
| 		q6_mem_regions: q6_mem_regions@4B000000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4B000000 0x0 0x4D00000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_code_data: q6_code_data@4B000000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4B000000 0x0 01400000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_ipq5018_data: q6_ipq5018_data@4C400000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4C400000 0x0 0xD00000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		m3_dump: m3_dump@4D100000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D100000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_etr_region: q6_etr_dump@4D200000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D200000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_caldb_region: q6_caldb_region@4D300000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D300000 0x0 0x200000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_data1: q6_qcn6122_data1@4D500000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4D500000 0x0 0xD00000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E200000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4E200000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E300000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4E300000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E400000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4E400000 0x0 0x500000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4E900000 0x0 0xD00000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F600000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4F600000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F700000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4F700000 0x0 0x100000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4F800000 { |  | ||||||
| 			no-map; |  | ||||||
| 			reg = <0x0 0x4F800000 0x0 0x500000>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 	#endif |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	soc { |  | ||||||
| 		serial@78af000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		blsp1_uart2: serial@78b0000 { |  | ||||||
| 			pinctrl-0 = <&blsp1_uart_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
| 			status = "disabled"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		qpic_bam: dma@7984000{ |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		nand: qpic-nand@79b0000 { |  | ||||||
| 			pinctrl-0 = <&qspi_nand_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		spi_0: spi@78b5000 { /* BLSP1 QUP0 */ |  | ||||||
| 			pinctrl-0 = <&blsp0_spi_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
| 			cs-select = <0>; |  | ||||||
| 			status = "ok"; |  | ||||||
|  |  | ||||||
| 			m25p80@0 { |  | ||||||
| 				#address-cells = <1>; |  | ||||||
| 				#size-cells = <1>; |  | ||||||
| 				reg = <0>; |  | ||||||
| 				compatible = "n25q128a11"; |  | ||||||
| 				linux,modalias = "m25p80", "n25q128a11"; |  | ||||||
| 				spi-max-frequency = <50000000>; |  | ||||||
| 				use-default-sizes; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		mdio0: mdio@88000 { |  | ||||||
| 			status = "ok"; |  | ||||||
|  |  | ||||||
| 			ethernet-phy@0 { |  | ||||||
| 				reg = <7>; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		mdio1: mdio@90000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 			pinctrl-0 = <&mdio1_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
| 			phy-reset-gpio = <&tlmm 16 0>; |  | ||||||
| 			ethernet-phy@0 { |  | ||||||
| 				reg = <0>; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			ethernet-phy@1 { |  | ||||||
| 				reg = <1>; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			ethernet-phy@2 { |  | ||||||
| 				reg = <2>; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			ethernet-phy@3 { |  | ||||||
| 				reg = <3>; |  | ||||||
| 			}; |  | ||||||
| 			ethernet-phy@4 { |  | ||||||
| 				reg = <4>; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		ess-instance { |  | ||||||
| 			num_devices = <0x2>; |  | ||||||
| 			ess-switch@0x39c00000 { |  | ||||||
| 				compatible = "qcom,ess-switch-ipq50xx"; |  | ||||||
| 				device_id = <0>; |  | ||||||
| 				switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/ |  | ||||||
| 				cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/ |  | ||||||
| 				qcom,port_phyinfo { |  | ||||||
| 					port@0 { |  | ||||||
| 						port_id = <1>; |  | ||||||
| 						phy_address = <7>; |  | ||||||
| 						phy_dac = <0x10 0x10>; |  | ||||||
| 						mdio-bus = <&mdio0>; |  | ||||||
| 					}; |  | ||||||
| 					port@1 { |  | ||||||
| 						mdio-bus = <&mdio0>; |  | ||||||
| 						port_id = <2>; |  | ||||||
| 						forced-speed = <1000>; |  | ||||||
| 						forced-duplex = <1>; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				led_source@0 { |  | ||||||
| 					source = <0>; |  | ||||||
| 					mode = "normal"; |  | ||||||
| 					speed = "all"; |  | ||||||
| 					blink_en = "enable"; |  | ||||||
| 					active = "high"; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 			ess-switch1@1 { |  | ||||||
| 				compatible = "qcom,ess-switch-qca83xx"; |  | ||||||
| 				device_id = <1>; |  | ||||||
| 				switch_access_mode = "mdio"; |  | ||||||
| 				mdio-bus = <&mdio1>; |  | ||||||
| 				reset_gpio = <&tlmm 0x10 0>;   /* gpio 16 */ |  | ||||||
| 				switch_cpu_bmp = <0x40>;  /* cpu port bitmap */ |  | ||||||
| 				switch_lan_bmp = <0x3e>; /* lan port bitmap */ |  | ||||||
| 				switch_wan_bmp = <0x0>;  /* wan port bitmap */ |  | ||||||
| 				qca,ar8327-initvals = < |  | ||||||
| 						0x00004 0x7600000   /* PAD0_MODE */ |  | ||||||
| 						0x00008 0x1000000   /* PAD5_MODE */ |  | ||||||
| 						0x0000c 0x80        /* PAD6_MODE */ |  | ||||||
| 						0x00010 0x2613a0    /* PORT6 FORCE MODE*/ |  | ||||||
| 						0x000e4 0xaa545     /* MAC_POWER_SEL */ |  | ||||||
| 						0x000e0 0xc74164de  /* SGMII_CTRL */ |  | ||||||
| 						0x0007c 0x4e        /* PORT0_STATUS */ |  | ||||||
| 						0x00094 0x4e        /* PORT6_STATUS */ |  | ||||||
| 				>; |  | ||||||
| 				qcom,port_phyinfo { |  | ||||||
| 					port@0 { |  | ||||||
| 						port_id = <1>; |  | ||||||
| 						phy_address = <0>; |  | ||||||
| 					}; |  | ||||||
| 					port@1 { |  | ||||||
| 						port_id = <2>; |  | ||||||
| 						phy_address = <1>; |  | ||||||
| 					}; |  | ||||||
| 					port@2 { |  | ||||||
| 						port_id = <3>; |  | ||||||
| 						phy_address = <2>; |  | ||||||
| 					}; |  | ||||||
| 					port@3 { |  | ||||||
| 						port_id = <4>; |  | ||||||
| 						phy_address = <3>; |  | ||||||
| 					}; |  | ||||||
| 					port@4 { |  | ||||||
| 						port_id = <5>; |  | ||||||
| 						phy_address = <4>; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		wifi0: wifi@c000000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		dp1 { |  | ||||||
| 			device_type = "network"; |  | ||||||
| 			compatible = "qcom,nss-dp"; |  | ||||||
| 			clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; |  | ||||||
| 			clock-names = "nss-snoc-gmac-axi-clk"; |  | ||||||
| 			qcom,id = <2>; |  | ||||||
| 			reg = <0x39D00000 0x10000>; |  | ||||||
| 			interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; |  | ||||||
| 			qcom,mactype = <2>; |  | ||||||
| 			mdio-bus = <&mdio1>; |  | ||||||
| 			local-mac-address = [000000000000]; |  | ||||||
| 			phy-mode = "sgmii"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		nss-macsec1 { |  | ||||||
| 			compatible = "qcom,nss-macsec"; |  | ||||||
| 			phy_addr = <0x1c>; |  | ||||||
| 			mdiobus = <&mdio1>; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	qcom,test@0 { |  | ||||||
| 		status = "ok"; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	thermal-zones { |  | ||||||
| 		status = "ok"; |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &tlmm { |  | ||||||
| 	pinctrl-0 = <&blsp0_uart_pins>; |  | ||||||
| 	pinctrl-names = "default"; |  | ||||||
|  |  | ||||||
| 	blsp0_uart_pins: uart_pins { |  | ||||||
| 		blsp0_uart_rx_tx { |  | ||||||
| 			pins = "gpio20", "gpio21"; |  | ||||||
| 			function = "blsp0_uart0"; |  | ||||||
| 			bias-disable; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	blsp1_uart_pins: blsp1_uart_pins { |  | ||||||
| 		blsp1_uart_rx_tx { |  | ||||||
| 			pins = "gpio23", "gpio25", "gpio24", "gpio26"; |  | ||||||
| 			function = "blsp1_uart2"; |  | ||||||
| 			bias-disable; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	blsp0_spi_pins: blsp0_spi_pins { |  | ||||||
| 		mux { |  | ||||||
| 			pins = "gpio10", "gpio11", "gpio12", "gpio13"; |  | ||||||
| 			function = "blsp0_spi"; |  | ||||||
| 			drive-strength = <2>; |  | ||||||
| 			bias-disable; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	qspi_nand_pins: qspi_nand_pins { |  | ||||||
| 		qspi_clock { |  | ||||||
| 			pins = "gpio9"; |  | ||||||
| 			function = "qspi_clk"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-disable; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		qspi_cs { |  | ||||||
| 			pins = "gpio8"; |  | ||||||
| 			function = "qspi_cs"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-disable; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		qspi_data { |  | ||||||
| 			pins = "gpio4", "gpio5", "gpio6", "gpio7"; |  | ||||||
| 			function = "qspi_data"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-disable; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	mdio1_pins: mdio_pinmux { |  | ||||||
| 		mux_0 { |  | ||||||
| 			pins = "gpio36"; |  | ||||||
| 			function = "mdc"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-up; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		mux_1 { |  | ||||||
| 			pins = "gpio37"; |  | ||||||
| 			function = "mdio"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-up; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| //	phy_led_pins: phy_led_pins { |  | ||||||
| //		gephy_led_pin { |  | ||||||
| //			pins = "gpio50"; |  | ||||||
| //			function = "led0"; |  | ||||||
| //			drive-strength = <8>; |  | ||||||
| //			bias-pull-down; |  | ||||||
| //		}; |  | ||||||
| //	}; |  | ||||||
|  |  | ||||||
| 	button_pins: button_pins { |  | ||||||
| 		wps_button { |  | ||||||
| 			pins = "gpio38"; |  | ||||||
| 			function = "gpio"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-up; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	leds_pins: leds_pins { |  | ||||||
| 		led_sys { |  | ||||||
| 			pins = "gpio24"; |  | ||||||
| 			function = "gpio"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-down; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		led_5g { |  | ||||||
| 			pins = "gpio22"; |  | ||||||
| 			function = "gpio"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-down; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		led_2g { |  | ||||||
| 			pins = "gpio23"; |  | ||||||
| 			function = "gpio"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-down; |  | ||||||
| 		}; |  | ||||||
| 		led_onekey { |  | ||||||
| 	            pins = "gpio46"; |  | ||||||
|         	    function = "gpio"; |  | ||||||
|         	    drive-strength = <8>; |  | ||||||
|         	    bias-pull-down; |  | ||||||
|         	};  |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &soc { |  | ||||||
| 	gpio_keys { |  | ||||||
| 		compatible = "gpio-keys"; |  | ||||||
| 		pinctrl-0 = <&button_pins>; |  | ||||||
| 		pinctrl-names = "default"; |  | ||||||
| 		button@1 { |  | ||||||
| 			label = "restart"; |  | ||||||
| 			linux,code = <KEY_RESTART>; |  | ||||||
| 			gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; |  | ||||||
| 			linux,input-type = <1>; |  | ||||||
| 			debounce-interval = <60>; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	leds { |  | ||||||
|   	      compatible = "gpio-leds"; |  | ||||||
| 		pinctrl-0 = <&leds_pins>; |  | ||||||
| 		pinctrl-names = "default"; |  | ||||||
|  |  | ||||||
| 		led_power: led24 { |  | ||||||
| 			label = "red:power"; |  | ||||||
| 			gpios = <&tlmm 24 GPIO_ACTIVE_LOW>; |  | ||||||
| 			linux,default-trigger = "default-on"; |  | ||||||
| 			default-state = "on"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		led22 { |  | ||||||
| 			label = "green:wifi5"; |  | ||||||
| 			gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; |  | ||||||
| 			linux,default-trigger = "default-on"; |  | ||||||
| 			default-state = "off"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		led23 { |  | ||||||
| 			label = "green:wifi2"; |  | ||||||
| 			gpios = <&tlmm 23 GPIO_ACTIVE_LOW>; |  | ||||||
| 			linux,default-trigger = "default-on"; |  | ||||||
| 			default-state = "off"; |  | ||||||
| 		}; |  | ||||||
| 		led46 { |  | ||||||
|   			label = "led_onekey"; |  | ||||||
| 			gpios = <&tlmm 46 GPIO_ACTIVE_LOW>;   |  | ||||||
| 			linux,default-trigger = "led_onekey"; |  | ||||||
| 			default-state = "off"; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	 gpio_keys { |  | ||||||
| 		compatible = "gpio-keys"; |  | ||||||
| 		pinctrl-0 = <&button_pins>; |  | ||||||
| 		pinctrl-names = "default"; |  | ||||||
|  |  | ||||||
| 		wps { |  | ||||||
| 			label = "reset"; |  | ||||||
| 			linux,code = <KEY_RESTART>; |  | ||||||
| 			gpios = <&tlmm 32 GPIO_ACTIVE_LOW>; |  | ||||||
| 			linux,input-type = <1>; |  | ||||||
| 			debounce-interval = <60>; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &q6v5_wcss { |  | ||||||
| 	compatible = "qcom,ipq5018-q6-mpd"; |  | ||||||
| 	#address-cells = <1>; |  | ||||||
| 	#size-cells = <1>; |  | ||||||
| 	ranges; |  | ||||||
| 	firmware = "IPQ5018/q6_fw.mdt"; |  | ||||||
| 	reg = <0x0cd00000 0x4040>, |  | ||||||
| 		<0x1938000 0x8>, |  | ||||||
| 		<0x193d204 0x4>; |  | ||||||
| 	reg-names = "qdsp6", |  | ||||||
| 			"tcsr-msip", |  | ||||||
| 			"tcsr-q6"; |  | ||||||
| 	resets = <&gcc GCC_WCSSAON_RESET>, |  | ||||||
| 			<&gcc GCC_WCSS_Q6_BCR>; |  | ||||||
|  |  | ||||||
| 	reset-names = "wcss_aon_reset", |  | ||||||
| 			"wcss_q6_reset"; |  | ||||||
|  |  | ||||||
| 	clocks = <&gcc GCC_Q6_AXIS_CLK>, |  | ||||||
| 		<&gcc GCC_WCSS_ECAHB_CLK>, |  | ||||||
| 		<&gcc GCC_Q6_AXIM_CLK>, |  | ||||||
| 		<&gcc GCC_Q6_AXIM2_CLK>, |  | ||||||
| 		<&gcc GCC_Q6_AHB_CLK>, |  | ||||||
| 		<&gcc GCC_Q6_AHB_S_CLK>, |  | ||||||
| 		<&gcc GCC_WCSS_AXI_S_CLK>; |  | ||||||
| 	clock-names = "gcc_q6_axis_clk", |  | ||||||
| 		"gcc_wcss_ecahb_clk", |  | ||||||
| 		"gcc_q6_axim_clk", |  | ||||||
| 		"gcc_q6_axim2_clk", |  | ||||||
| 		"gcc_q6_ahb_clk", |  | ||||||
| 		"gcc_q6_ahb_s_clk", |  | ||||||
| 		"gcc_wcss_axi_s_clk"; |  | ||||||
|  |  | ||||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 		memory-region = <&q6_mem_regions>, <&q6_etr_region>; |  | ||||||
| 	#else |  | ||||||
| 		memory-region = <&q6_mem_regions>, <&q6_etr_region>, |  | ||||||
| 				<&q6_caldb_region>; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 	qcom,rproc = <&q6v5_wcss>; |  | ||||||
| 	qcom,bootargs_smem = <507>; |  | ||||||
| 	boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>, |  | ||||||
| 			<0x2 0x4 0x2 0x12 0x0 0x0>; |  | ||||||
| 	status = "ok"; |  | ||||||
| 	q6_wcss_pd1: remoteproc_pd1@4ab000 { |  | ||||||
| 		compatible = "qcom,ipq5018-wcss-ahb-mpd"; |  | ||||||
| 		reg = <0x4ab000 0x20>; |  | ||||||
| 		reg-names = "rmb"; |  | ||||||
| 		firmware = "IPQ5018/q6_fw.mdt"; |  | ||||||
| 		m3_firmware = "IPQ5018/m3_fw.mdt"; |  | ||||||
| 		interrupts-extended = <&wcss_smp2p_in 8 0>, |  | ||||||
| 					<&wcss_smp2p_in 9 0>, |  | ||||||
| 					<&wcss_smp2p_in 12 0>, |  | ||||||
| 					<&wcss_smp2p_in 11 0>; |  | ||||||
| 		interrupt-names = "fatal", |  | ||||||
| 					"ready", |  | ||||||
| 					"spawn-ack", |  | ||||||
| 					"stop-ack"; |  | ||||||
|  |  | ||||||
| 		resets = <&gcc GCC_WCSSAON_RESET>, |  | ||||||
| 				<&gcc GCC_WCSS_BCR>, |  | ||||||
| 				<&gcc GCC_CE_BCR>; |  | ||||||
| 		reset-names = "wcss_aon_reset", |  | ||||||
| 				"wcss_reset", |  | ||||||
| 				"ce_reset"; |  | ||||||
|  |  | ||||||
| 		clocks = <&gcc GCC_WCSS_AHB_S_CLK>, |  | ||||||
| 				<&gcc GCC_WCSS_ACMT_CLK>, |  | ||||||
| 				<&gcc GCC_WCSS_AXI_M_CLK>; |  | ||||||
| 		clock-names = "gcc_wcss_ahb_s_clk", |  | ||||||
| 					"gcc_wcss_acmt_clk", |  | ||||||
| 					"gcc_wcss_axi_m_clk"; |  | ||||||
|  |  | ||||||
| 		qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; |  | ||||||
|  |  | ||||||
| 		qcom,smem-states = <&wcss_smp2p_out 8>, |  | ||||||
| 					<&wcss_smp2p_out 9>, |  | ||||||
| 					<&wcss_smp2p_out 10>; |  | ||||||
| 		qcom,smem-state-names = "shutdown", |  | ||||||
| 					"stop", |  | ||||||
| 					"spawn"; |  | ||||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, |  | ||||||
| 				<&q6_etr_region>; |  | ||||||
| 	#else |  | ||||||
| 		memory-region = <&q6_ipq5018_data>, <&m3_dump>, |  | ||||||
| 				<&q6_etr_region>, <&q6_caldb_region>; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	q6_wcss_pd2: remoteproc_pd2 { |  | ||||||
| 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; |  | ||||||
| 		firmware = "IPQ5018/q6_fw.mdt"; |  | ||||||
| 		m3_firmware = "qcn6122/m3_fw.mdt"; |  | ||||||
| 		interrupts-extended = <&wcss_smp2p_in 16 0>, |  | ||||||
| 					<&wcss_smp2p_in 17 0>, |  | ||||||
| 					<&wcss_smp2p_in 20 0>, |  | ||||||
| 					<&wcss_smp2p_in 19 0>; |  | ||||||
| 		interrupt-names = "fatal", |  | ||||||
| 					"ready", |  | ||||||
| 					"spawn-ack", |  | ||||||
| 					"stop-ack"; |  | ||||||
|  |  | ||||||
| 		qcom,smem-states = <&wcss_smp2p_out 16>, |  | ||||||
| 					<&wcss_smp2p_out 17>, |  | ||||||
| 					<&wcss_smp2p_out 18>; |  | ||||||
| 		qcom,smem-state-names = "shutdown", |  | ||||||
| 					"stop", |  | ||||||
| 					"spawn"; |  | ||||||
| 	#ifdef __IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, |  | ||||||
| 				<&q6_qcn6122_etr_1>; |  | ||||||
| 	#else |  | ||||||
| 		memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, |  | ||||||
| 				<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	q6_wcss_pd3: remoteproc_pd3 { |  | ||||||
| 		compatible = "qcom,ipq5018-wcss-pcie-mpd"; |  | ||||||
| 		firmware = "IPQ5018/q6_fw.mdt"; |  | ||||||
| 		interrupts-extended = <&wcss_smp2p_in 24 0>, |  | ||||||
| 					<&wcss_smp2p_in 25 0>, |  | ||||||
| 					<&wcss_smp2p_in 28 0>, |  | ||||||
| 					<&wcss_smp2p_in 27 0>; |  | ||||||
| 		interrupt-names = "fatal", |  | ||||||
| 					"ready", |  | ||||||
| 					"spawn-ack", |  | ||||||
| 					"stop-ack"; |  | ||||||
|  |  | ||||||
| 		qcom,smem-states = <&wcss_smp2p_out 24>, |  | ||||||
| 					<&wcss_smp2p_out 25>, |  | ||||||
| 					<&wcss_smp2p_out 26>; |  | ||||||
| 		qcom,smem-state-names = "shutdown", |  | ||||||
| 					"stop", |  | ||||||
| 					"spawn"; |  | ||||||
| 	#ifdef	__IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, |  | ||||||
| 				<&q6_qcn6122_etr_2>; |  | ||||||
| 	#else |  | ||||||
| 		memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>, |  | ||||||
| 				<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>; |  | ||||||
| 	#endif |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &wifi0 { |  | ||||||
| 	/* IPQ5018 */ |  | ||||||
| 	qcom,multipd_arch; |  | ||||||
| 	qcom,rproc = <&q6_wcss_pd1>; |  | ||||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; |  | ||||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 	qcom,tgt-mem-mode = <2>; |  | ||||||
| #else |  | ||||||
| 	qcom,tgt-mem-mode = <1>; |  | ||||||
| #endif |  | ||||||
| 	qcom,board_id = <0x23>; |  | ||||||
| #ifdef __CNSS2__ |  | ||||||
| 	qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; |  | ||||||
| 	qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0>; |  | ||||||
| 	qcom,caldb-size = <0x200000>; |  | ||||||
| 	mem-region = <&q6_ipq5018_data>; |  | ||||||
| #else |  | ||||||
| 	memory-region = <&q6_ipq5018_data>; |  | ||||||
| #endif |  | ||||||
| 	status = "ok"; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &wifi1 { |  | ||||||
| 	/* QCN6122 5G */ |  | ||||||
| 	qcom,multipd_arch; |  | ||||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd2"; |  | ||||||
| 	qcom,rproc = <&q6_wcss_pd2>; |  | ||||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 	qcom,tgt-mem-mode = <2>; |  | ||||||
| #else |  | ||||||
| 	qcom,tgt-mem-mode = <1>; |  | ||||||
| #endif |  | ||||||
| 	qcom,board_id = <0x60>; |  | ||||||
| #ifdef __CNSS2__ |  | ||||||
| 	qcom,bdf-addr = <0x4D500000 0x4D500000 0x4D300000 0x0 0x0>; |  | ||||||
| 	qcom,caldb-addr = <0x4E400000 0x4E400000 0 0 0>; |  | ||||||
| 	qcom,caldb-size = <0x500000>; |  | ||||||
| 	mem-region = <&q6_qcn6122_data1>; |  | ||||||
| #else |  | ||||||
| 	memory-region = <&q6_qcn6122_data1>; |  | ||||||
| #endif |  | ||||||
| 	status = "ok"; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &wifi2 { |  | ||||||
| 	/* QCN6122 6G */ |  | ||||||
| 	qcom,multipd_arch; |  | ||||||
| 	qcom,userpd-subsys-name = "q6v5_wcss_userpd3"; |  | ||||||
| 	qcom,rproc = <&q6_wcss_pd3>; |  | ||||||
| #ifdef __IPQ_MEM_PROFILE_256_MB__ |  | ||||||
| 	qcom,tgt-mem-mode = <2>; |  | ||||||
| #else |  | ||||||
| 	qcom,tgt-mem-mode = <1>; |  | ||||||
| #endif |  | ||||||
| 	qcom,board_id = <0xb0>; |  | ||||||
| #ifdef __CNSS2__ |  | ||||||
| 	qcom,bdf-addr = <0x4E900000 0x4E900000 0x4E200000 0x0 0x0>; |  | ||||||
| 	qcom,caldb-addr = <0x4F800000 0x4F800000 0 0 0>; |  | ||||||
| 	qcom,caldb-size = <0x500000>; |  | ||||||
| 	mem-region = <&q6_qcn6122_data2>; |  | ||||||
| #else |  | ||||||
| 	memory-region = <&q6_qcn6122_data2>; |  | ||||||
| #endif |  | ||||||
| 	status = "disabled"; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &usb3 { |  | ||||||
|        status = "ok"; |  | ||||||
|        /* device-power-gpio = <&tlmm 24 1>; */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &dwc_0 { |  | ||||||
|        /delete-property/ #phy-cells; |  | ||||||
|        /delete-property/ phys; |  | ||||||
|        /delete-property/ phy-names; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &hs_m31phy_0 { |  | ||||||
|        status = "ok"; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &eud { |  | ||||||
| 	status = "ok"; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &pcie_x1 { |  | ||||||
| 	perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &pcie_x2 { |  | ||||||
| 	perst-gpio = <&tlmm 15 GPIO_ACTIVE_LOW>; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &pcie_x1_rp { |  | ||||||
| 	status = "disabled"; |  | ||||||
|  |  | ||||||
| 	mhi_0: qcom,mhi@0 { |  | ||||||
| 		reg = <0 0 0 0 0 >; |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &pcie_x2_rp { |  | ||||||
| 	status = "disabled"; |  | ||||||
|  |  | ||||||
| 	mhi_1: qcom,mhi@1 { |  | ||||||
| 		reg = <0 0 0 0 0 >; |  | ||||||
|  |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
							
								
								
									
										11
									
								
								feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										11
									
								
								feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -40,17 +40,6 @@ define Device/cybertan_eww631_b1 | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += cybertan_eww631_b1 | TARGET_DEVICES += cybertan_eww631_b1 | ||||||
|  |  | ||||||
| define Device/sonicfi_rap630w_312g |  | ||||||
|   DEVICE_TITLE := Sonicfi RAP630W-312G |  | ||||||
|   DEVICE_DTS := qcom-ipq5018-rap630w-312g |  | ||||||
|   SUPPORTED_DEVICES := sonicfi,rap630w-312g |  | ||||||
|   DEVICE_PACKAGES := ath11k-wifi-sonicfi-rap630w-312g ath11k-firmware-ipq50xx-map-spruce \ |  | ||||||
|                      -kmod-usb-dwc3-of-simple kmod-usb-dwc3-qcom kmod-usb3 \ |  | ||||||
|                      kmod-usb-uas kmod-fs-msdos kmod-fs-ntfs |  | ||||||
|   DEVICE_DTS_CONFIG := config@mp03.3 |  | ||||||
| endef |  | ||||||
| TARGET_DEVICES += sonicfi_rap630w_312g |  | ||||||
|  |  | ||||||
| define Device/sonicfi_rap630c_311g | define Device/sonicfi_rap630c_311g | ||||||
|   DEVICE_TITLE := Sonicfi RAP630C-311G |   DEVICE_TITLE := Sonicfi RAP630C-311G | ||||||
|   DEVICE_DTS := qcom-ipq5018-rap630c-311g |   DEVICE_DTS := qcom-ipq5018-rap630c-311g | ||||||
|   | |||||||
							
								
								
									
										177
									
								
								feeds/ipq807x_v5.4/ipq50xx/modules.mk
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										177
									
								
								feeds/ipq807x_v5.4/ipq50xx/modules.mk
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -52,183 +52,6 @@ define KernelPackage/tpm-tis-i2c/description | |||||||
| endef | endef | ||||||
| $(eval $(call KernelPackage,tpm-tis-i2c)) | $(eval $(call KernelPackage,tpm-tis-i2c)) | ||||||
|  |  | ||||||
| define KernelPackage/usb-dwc3-internal |  | ||||||
|   TITLE:=DWC3 USB controller driver |  | ||||||
|   DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget |  | ||||||
|   KCONFIG:= \ |  | ||||||
|         CONFIG_USB_DWC3 \ |  | ||||||
|         CONFIG_USB_DWC3_HOST=n \ |  | ||||||
|         CONFIG_USB_DWC3_GADGET=n \ |  | ||||||
|         CONFIG_USB_DWC3_DUAL_ROLE=y \ |  | ||||||
|         CONFIG_EXTCON=y \ |  | ||||||
|         CONFIG_USB_DWC3_DEBUG=n \ |  | ||||||
|         CONFIG_USB_DWC3_VERBOSE=n |  | ||||||
|   FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3.ko |  | ||||||
|   AUTOLOAD:=$(call AutoLoad,84,dwc3) |  | ||||||
|   $(call AddPlatformDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-dwc3-internal/description |  | ||||||
|  This driver provides support for the Dual Role SuperSpeed |  | ||||||
|  USB Controller based on the Synopsys DesignWare USB3 IP Core |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-dwc3-internal)) |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-dwc3-qcom-internal |  | ||||||
|   TITLE:=DWC3 QTI USB driver |  | ||||||
|   DEPENDS:=@!LINUX_4_14 @(TARGET_ipq40xx||TARGET_ipq806x||TARGET_ipq807x||TARGET_ipq60xx||TARGET_ipq95xx||TARGET_ipq50xx||TARGET_ipq53xx) +kmod-usb-dwc3-internal |  | ||||||
|   KCONFIG:= CONFIG_USB_DWC3_QCOM |  | ||||||
|   FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko |  | ||||||
|   AUTOLOAD:=$(call AutoLoad,83,dwc3-qcom) |  | ||||||
|   $(call AddPlatformDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-dwc3-qcom-internal/description |  | ||||||
|  Some QTI SoCs use DesignWare Core IP for USB2/3 functionality. |  | ||||||
|  This driver also handles Qscratch wrapper which is needed for |  | ||||||
|  peripheral mode support. |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-dwc3-qcom-internal)) |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-configfs |  | ||||||
|  TITLE:= USB functions |  | ||||||
|   KCONFIG:=CONFIG_USB_CONFIGFS \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_SERIAL=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_ACM=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_OBEX=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_NCM=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_ECM=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_ECM_SUBSET=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_RNDIS=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_EEM=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_MASS_STORAGE=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_LB_SS=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_FS=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_UAC1=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_UAC2=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_MIDI=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_HID=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_PRINTER=n \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_QDSS=n |  | ||||||
|   $(call AddPlatformDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-configfs/description |  | ||||||
|  USB functions |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-configfs)) |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-f-diag |  | ||||||
|   TITLE:=USB DIAG |  | ||||||
|   KCONFIG:=CONFIG_USB_F_DIAG \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_DIAG=y \ |  | ||||||
| 	CONFIG_DIAG_OVER_USB=y |  | ||||||
|   DEPENDS:=+kmod-usb-lib-composite +kmod-usb-configfs |  | ||||||
|   FILES:=$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_diag.ko |  | ||||||
|   AUTOLOAD:=$(call AutoLoad,52,usb_f_diag) |  | ||||||
|   $(call AddPlatformDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-f-diag/description |  | ||||||
|  USB DIAG |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-f-diag)) |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-uas |  | ||||||
|   TITLE:=USB Attched SCSI support |  | ||||||
|   DEPENDS:= +kmod-scsi-core +kmod-usb-storage |  | ||||||
|   KCONFIG:=CONFIG_USB_UAS |  | ||||||
|   FILES:=$(LINUX_DIR)/drivers/usb/storage/uas.ko |  | ||||||
|   AUTOLOAD:=$(call AutoProbe,uas) |  | ||||||
|   $(call AddPlatformDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-uas/description |  | ||||||
|  Kernel support for USB Attached SCSI devices (UAS) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-uas)) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| define KernelPackage/diag-char |  | ||||||
|   TITLE:=CHAR DIAG |  | ||||||
|   KCONFIG:= CONFIG_DIAG_MHI=y@ge5.4 \ |  | ||||||
| 	  CONFIG_DIAG_OVER_PCIE=n@ge5.4 \ |  | ||||||
| 	  CONFIG_DIAGFWD_BRIDGE_CODE=y \ |  | ||||||
| 	  CONFIG_DIAG_CHAR |  | ||||||
|   DEPENDS:=+kmod-lib-crc-ccitt +USB_CONFIGFS_F_DIAG:kmod-usb-f-diag +USB_CONFIGFS_F_DIAG:kmod-usb-core |  | ||||||
|   FILES:=$(LINUX_DIR)/drivers/char/diag/diagchar.ko |  | ||||||
| ifneq (,$(findstring $(CONFIG_KERNEL_IPQ_MEM_PROFILE), 256)$(CONFIG_LOWMEM_FLASH)) |  | ||||||
|    AUTOLOAD:= |  | ||||||
| else |  | ||||||
|    AUTOLOAD:=$(call AutoLoad,52,diagchar) |  | ||||||
| endif |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/diag-char/description |  | ||||||
|  CHAR DIAG |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,diag-char)) |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-f-qdss |  | ||||||
|   TITLE:=USB QDSS |  | ||||||
|   KCONFIG:=CONFIG_USB_F_QDSS \ |  | ||||||
| 	CONFIG_USB_CONFIGFS_F_QDSS=y |  | ||||||
|   DEPENDS:=@TARGET_ipq807x||TARGET_ipq60xx||TARGET_ipq_ipq807x||TARGET_ipq_ipq807x_64||TARGET_ipq_ipq60xx||TARGET_ipq_ipq60xx_64||TARGET_ipq_ipq50xx||TARGET_ipq_ipq50xx_64 +kmod-usb-lib-composite +kmod-usb-configfs +kmod-lib-crc-ccitt +kmod-usb-dwc3 +TARGET_ipq_ipq60xx:kmod-usb-dwc3-qcom +TARGET_ipq_ipq60xx_64:kmod-usb-dwc3-qcom +TARGET_ipq_ipq50xx:kmod-usb-dwc3-qcom +TARGET_ipq_ipq50xx_64:kmod-usb-dwc3-qcom +TARGET_ipq_ipq807x:kmod-usb-dwc3-of-simple +TARGET_ipq_ipq807x_64:kmod-usb-dwc3-of-simple +TARGET_ipq60xx:kmod-usb-dwc3-qcom +TARGET_ipq60xx:kmod-usb-dwc3-of-simple +TARGET_ipq807x:kmod-usb-dwc3-qcom +TARGET_ipq807x:kmod-usb-dwc3-of-simple |  | ||||||
|   FILES:=$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_qdss.ko \ |  | ||||||
| 	$(LINUX_DIR)/drivers/usb/gadget/function/u_qdss.ko |  | ||||||
|   AUTOLOAD:=$(call AutoLoad,52,usb_f_qdss) |  | ||||||
|   $(call AddPlatformDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-f-qdss/description |  | ||||||
|  USB QDSS |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-f-qdss)) |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-gdiag |  | ||||||
|   TITLE:=USB GDIAG support |  | ||||||
|   KCONFIG:=CONFIG_USB_G_DIAG |  | ||||||
|   FILES:=\ |  | ||||||
|        $(LINUX_DIR)/drivers/usb/gadget/legacy/g_diag.ko |  | ||||||
|   AUTOLOAD:=$(call AutoLoad,52,g_diag) |  | ||||||
|   DEPENDS:=@TARGET_ipq807x||TARGET_ipq60xx||TARGET_ipq95xx||TARGET_ipq_ipq60xx||TARGET_ipq_ipq60xx_64||TARGET_ipq50xx||TARGET_ipq53xx +kmod-usb-gadget +kmod-usb-lib-composite |  | ||||||
|   $(call AddPlatformDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-gdiag/description |  | ||||||
|  Kernel support for USB gdiag mode |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-gdiag)) |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-phy-ipq5018 |  | ||||||
|   TITLE:=DWC3 USB PHY driver for IPQ5018 |  | ||||||
|   DEPENDS:=@TARGET_ipq50xx||TARGET_ipq53xx |  | ||||||
|   KCONFIG:= \ |  | ||||||
| 	CONFIG_USB_QCA_M31_PHY \ |  | ||||||
| 	CONFIG_PHY_IPQ_UNIPHY_USB |  | ||||||
|   FILES:= \ |  | ||||||
| 	$(LINUX_DIR)/drivers/usb/phy/phy-qca-m31.ko \ |  | ||||||
| 	$(LINUX_DIR)/drivers/phy/phy-qca-uniphy.ko@le4.4 \ |  | ||||||
| 	$(LINUX_DIR)/drivers/phy/qualcomm/phy-qca-uniphy.ko@ge5.4 |  | ||||||
|   AUTOLOAD:=$(call AutoLoad,85,phy-qca-m31 phy-qca-uniphy) |  | ||||||
|   $(call AddDepends/usb) |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| define KernelPackage/usb-phy-ipq5018/description |  | ||||||
|  This driver provides support for the USB PHY drivers |  | ||||||
|  within the IPQ5018 SoCs. |  | ||||||
| endef |  | ||||||
|  |  | ||||||
| $(eval $(call KernelPackage,usb-phy-ipq5018)) |  | ||||||
|  |  | ||||||
| define KernelPackage/bootconfig | define KernelPackage/bootconfig | ||||||
|   SUBMENU:=Other modules |   SUBMENU:=Other modules | ||||||
|   TITLE:=Bootconfig partition for failsafe |   TITLE:=Bootconfig partition for failsafe | ||||||
|   | |||||||
| @@ -15,9 +15,6 @@ cig,wf188n) | |||||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" |         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" | ||||||
|         ucidef_set_led_default "power" "POWER" "green:power" "on" |         ucidef_set_led_default "power" "POWER" "green:power" "on" | ||||||
| 	;; | 	;; | ||||||
| cig,wf660a) |  | ||||||
|         ucidef_set_led_default "power" "POWER" "status:blue" "on" |  | ||||||
| 	;; |  | ||||||
| edgecore,eap101) | edgecore,eap101) | ||||||
|         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt" |         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt" | ||||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" |         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" | ||||||
|   | |||||||
| @@ -6,27 +6,26 @@ board=$(board_name) | |||||||
|  |  | ||||||
| case "$board" in | case "$board" in | ||||||
|     "edgecore,eap101") |     "edgecore,eap101") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,eap102"|\ |     "edgecore,eap102") | ||||||
|     "edgecore,oap103") |         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |  | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,oap101e-6e"|\ |     "edgecore,oap101e-6e"|\ | ||||||
|     "edgecore,oap101-6e") |     "edgecore,oap101-6e") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy6g |         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,oap101e"|\ |     "edgecore,oap101e"|\ | ||||||
|     "edgecore,oap101") |     "edgecore,oap101") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,eap104") |     "edgecore,eap104") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
| esac | esac | ||||||
|   | |||||||
| @@ -7,12 +7,11 @@ boot() { | |||||||
| 	hfcl,ion4xe|\ | 	hfcl,ion4xe|\ | ||||||
| 	hfcl,ion4xi) | 	hfcl,ion4xi) | ||||||
| 		fw_setenv boot_count 0 | 		fw_setenv boot_count 0 | ||||||
| 		;; | 		;;		 | ||||||
| 	edgecore,eap101|\ | 	edgecore,eap101|\ | ||||||
| 	edgecore,eap102|\ | 	edgecore,eap102|\ | ||||||
| 	edgecore,oap102|\ | 	edgecore,oap102|\ | ||||||
| 	edgecore,oap103|\ | 	edgecore.eap104) | ||||||
| 	edgecore,eap104) |  | ||||||
| 		avail=$(fw_printenv -n upgrade_available) | 		avail=$(fw_printenv -n upgrade_available) | ||||||
| 		[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1 | 		[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1 | ||||||
| 		fw_setenv bootcount 0 | 		fw_setenv bootcount 0 | ||||||
|   | |||||||
| @@ -145,13 +145,7 @@ platform_do_upgrade() { | |||||||
| 	cig,wf660a) | 	cig,wf660a) | ||||||
| 		spi_nor_emmc_do_upgrade_bootconfig $1 | 		spi_nor_emmc_do_upgrade_bootconfig $1 | ||||||
| 		;; | 		;; | ||||||
| 	cig,wf188n) | 	cig,wf188n|\ | ||||||
| 		[ -f /proc/boot_info/rootfs/upgradepartition ] && { |  | ||||||
| 			CI_UBIPART="$(cat /proc/boot_info/rootfs/upgradepartition)" |  | ||||||
| 			CI_BOOTCFG=1 |  | ||||||
| 		} |  | ||||||
| 		nand_upgrade_tar "$1" |  | ||||||
| 		;; |  | ||||||
| 	glinet,ax1800|\ | 	glinet,ax1800|\ | ||||||
| 	glinet,axt1800|\ | 	glinet,axt1800|\ | ||||||
| 	wallys,dr6018|\ | 	wallys,dr6018|\ | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ | |||||||
| #include "ipq6018-cpr-regulator.dtsi" | #include "ipq6018-cpr-regulator.dtsi" | ||||||
| #include <dt-bindings/input/input.h> | #include <dt-bindings/input/input.h> | ||||||
| #include <dt-bindings/gpio/gpio.h> | #include <dt-bindings/gpio/gpio.h> | ||||||
|  | #include <dt-bindings/pwm/pwm.h> | ||||||
|  |  | ||||||
| / { | / { | ||||||
|     compatible = "cig,wf660a", "qcom,ipq6018-ap-cp01", "qcom,ipq6018"; |     compatible = "cig,wf660a", "qcom,ipq6018-ap-cp01", "qcom,ipq6018"; | ||||||
| @@ -28,11 +29,6 @@ | |||||||
| 		ethernet2 = "/soc/dp3"; | 		ethernet2 = "/soc/dp3"; | ||||||
| 		ethernet3 = "/soc/dp4"; | 		ethernet3 = "/soc/dp4"; | ||||||
| 		ethernet4 = "/soc/dp5"; | 		ethernet4 = "/soc/dp5"; | ||||||
|  |  | ||||||
| 		led-boot = &led_power; |  | ||||||
| 		led-failsafe = &led_power; |  | ||||||
| 		led-running = &led_power; |  | ||||||
| 		led-upgrade = &led_power; |  | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	chosen { | 	chosen { | ||||||
| @@ -159,21 +155,6 @@ | |||||||
| 		drive-strength = <8>; | 		drive-strength = <8>; | ||||||
| 		bias-pull-up; | 		bias-pull-up; | ||||||
| 	}; | 	}; | ||||||
| 	 |  | ||||||
| 	button_pins: button_pins { |  | ||||||
| 		wps_button { |  | ||||||
| 			pins = "gpio9"; |  | ||||||
| 			function = "gpio"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-up; |  | ||||||
| 		}; |  | ||||||
| 		reset_button { |  | ||||||
| 			pins = "gpio19"; |  | ||||||
| 			function = "gpio"; |  | ||||||
| 			drive-strength = <8>; |  | ||||||
| 			bias-pull-up; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	mdio_pins: mdio_pinmux { | 	mdio_pins: mdio_pinmux { | ||||||
| 		mux_0 { | 		mux_0 { | ||||||
| @@ -200,20 +181,20 @@ | |||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	led_pins: led_pins { | 	pwm_pins: pwm_pinmux { | ||||||
| 		mux_1 { | 		mux_1 { | ||||||
| 			pins = "gpio22"; | 			pins = "gpio22"; | ||||||
| 			function = "gpio"; | 			function = "pwm02"; | ||||||
| 			drive-strength = <8>; | 			drive-strength = <8>; | ||||||
| 		}; | 		}; | ||||||
| 		mux_2 { | 		mux_2 { | ||||||
| 			pins = "gpio23"; | 			pins = "gpio23"; | ||||||
| 			function = "gpio"; | 			function = "pwm12"; | ||||||
| 			drive-strength = <8>; | 			drive-strength = <8>; | ||||||
| 		}; | 		}; | ||||||
| 		mux_3 { | 		mux_3 { | ||||||
| 			pins = "gpio24"; | 			pins = "gpio24"; | ||||||
| 			function = "gpio"; | 			function = "pwm22"; | ||||||
| 			drive-strength = <8>; | 			drive-strength = <8>; | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
| @@ -227,6 +208,27 @@ | |||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  | 	leds_pins: leds_pins { | ||||||
|  | 		led_5g { | ||||||
|  | 			pins = "gpio35"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 		led_2g { | ||||||
|  | 			pins = "gpio37"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 		led_usb0 { | ||||||
|  | 			pins = "gpio50"; | ||||||
|  | 			function = "gpio"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			bias-pull-down; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
| 	btcoex_pins: btcoex_pins { | 	btcoex_pins: btcoex_pins { | ||||||
| 		mux_0 { | 		mux_0 { | ||||||
| 			pins = "gpio51"; | 			pins = "gpio51"; | ||||||
| @@ -388,38 +390,36 @@ | |||||||
| 		mdiobus = <&mdio>; | 		mdiobus = <&mdio>; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	gpio_keys { | 	pwm { | ||||||
| 		compatible = "gpio-keys"; | 		pinctrl-0 = <&pwm_pins>; | ||||||
| 		pinctrl-0 = <&button_pins>; |  | ||||||
| 		pinctrl-names = "default"; | 		pinctrl-names = "default"; | ||||||
|  | 		used-pwm-indices = <1>, <1>, <1>, <0>; | ||||||
| 		reset { | 		dft-pwm-status = <0>, <1>, <0>, <0>; | ||||||
| 			label = "reset"; | 		status = "ok"; | ||||||
| 			linux,code = <KEY_RESTART>; |  | ||||||
| 			gpios = <&tlmm 19 GPIO_ACTIVE_LOW>; |  | ||||||
| 			linux,input-type = <1>; |  | ||||||
| 			debounce-interval = <60>; |  | ||||||
| 		}; |  | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	leds { | 	leds { | ||||||
| 		compatible = "gpio-leds"; | 		compatible = "gpio-leds"; | ||||||
| 		pinctrl-0 = <&led_pins>; | 		pinctrl-0 = <&leds_pins>; | ||||||
| 		pinctrl-names = "default"; | 		pinctrl-names = "default"; | ||||||
|  |  | ||||||
| 		led_power: led@22 { | 		led@35 { | ||||||
| 			label = "status:blue"; | 			label = "led_5g"; | ||||||
| 			gpios = <&tlmm 22 GPIO_ACTIVE_HIGH>; | 			gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; | ||||||
|  | 			linux,default-trigger = "led_5g"; | ||||||
|  | 			default-state = "off"; | ||||||
| 		}; | 		}; | ||||||
| 		 | 		led@37 { | ||||||
| 		led@23 { | 			label = "led_2g"; | ||||||
| 			label = "status:green"; | 			gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>; | ||||||
| 			gpios = <&tlmm 23 GPIO_ACTIVE_HIGH>; | 			linux,default-trigger = "led_2g"; | ||||||
|  | 			default-state = "off"; | ||||||
| 		}; | 		}; | ||||||
|  | 		led@50 { | ||||||
| 		led@24 { | 			label = "led_usb0"; | ||||||
| 			label = "status:red"; | 			gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; | ||||||
| 			gpios = <&tlmm 24 GPIO_ACTIVE_HIGH>; | 			linux,default-trigger = "usb-host"; | ||||||
|  | 			default-state = "off"; | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -1,11 +0,0 @@ | |||||||
| --- a/drivers/mmc/host/sdhci.c |  | ||||||
| +++ b/drivers/mmc/host/sdhci.c |  | ||||||
| @@ -367,7 +367,7 @@ static void __sdhci_led_deactivate(struc |  | ||||||
|  	sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| -#if IS_REACHABLE(CONFIG_LEDS_CLASS) |  | ||||||
| +#if 0 |  | ||||||
|  static void sdhci_led_control(struct led_classdev *led, |  | ||||||
|  			      enum led_brightness brightness) |  | ||||||
|  { |  | ||||||
| @@ -13,8 +13,7 @@ cig,wf194c4) | |||||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" |         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" | ||||||
| 	;; | 	;; | ||||||
| edgecore,eap102|\ | edgecore,eap102|\ | ||||||
| edgecore,oap102|\ | edgecore,oap102) | ||||||
| edgecore,oap103) |  | ||||||
| 	ucidef_set_led_netdev "poe" "poe" "green:wan" "eth0" | 	ucidef_set_led_netdev "poe" "poe" "green:wan" "eth0" | ||||||
|         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt" |         ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt" | ||||||
|         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" |         ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt" | ||||||
|   | |||||||
| @@ -23,7 +23,6 @@ qcom_setup_interfaces() | |||||||
| 		;; | 		;; | ||||||
| 	edgecore,eap102|\ | 	edgecore,eap102|\ | ||||||
| 	edgecore,oap102|\ | 	edgecore,oap102|\ | ||||||
| 	edgecore,oap103|\ |  | ||||||
| 	cig,wf196) | 	cig,wf196) | ||||||
| 		ucidef_set_interface_lan "eth1" | 		ucidef_set_interface_lan "eth1" | ||||||
| 		ucidef_set_interface_wan "eth0" | 		ucidef_set_interface_wan "eth0" | ||||||
|   | |||||||
| @@ -56,7 +56,6 @@ case "$FIRMWARE" in | |||||||
| 	cig,wf196|\ | 	cig,wf196|\ | ||||||
| 	edgecore,eap102 |\ | 	edgecore,eap102 |\ | ||||||
| 	edgecore,oap102 |\ | 	edgecore,oap102 |\ | ||||||
| 	edgecore,oap103 |\ |  | ||||||
| 	edgecore,eap106 |\ | 	edgecore,eap106 |\ | ||||||
| 	qcom,ipq807x-hk01|\ | 	qcom,ipq807x-hk01|\ | ||||||
| 	qcom,ipq807x-hk14|\ | 	qcom,ipq807x-hk14|\ | ||||||
| @@ -90,7 +89,6 @@ ath11k-macs) | |||||||
| 	case "$board" in | 	case "$board" in | ||||||
| 	edgecore,eap102|\ | 	edgecore,eap102|\ | ||||||
| 	edgecore,oap102|\ | 	edgecore,oap102|\ | ||||||
| 	edgecore,oap103|\ |  | ||||||
| 	edgecore,eap106) | 	edgecore,eap106) | ||||||
| 		ath11k_generate_macs | 		ath11k_generate_macs | ||||||
| 		;; | 		;; | ||||||
|   | |||||||
| @@ -6,27 +6,26 @@ board=$(board_name) | |||||||
|  |  | ||||||
| case "$board" in | case "$board" in | ||||||
|     "edgecore,eap101") |     "edgecore,eap101") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,eap102"|\ |     "edgecore,eap102") | ||||||
|     "edgecore,oap103") |         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |  | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,oap101e-6e"|\ |     "edgecore,oap101e-6e"|\ | ||||||
|     "edgecore,oap101-6e") |     "edgecore,oap101-6e") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy6g |         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,oap101e"|\ |     "edgecore,oap101e"|\ | ||||||
|     "edgecore,oap101") |     "edgecore,oap101") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_1/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
|     "edgecore,eap104") |     "edgecore,eap104") | ||||||
|         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy2g |         ln -s /sys/kernel/debug/ath11k/ipq5018\ hw1.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy0 | ||||||
|         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g |         ln -s /sys/kernel/debug/ath11k/qcn6122_2/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy1 | ||||||
|         ;; |         ;; | ||||||
| esac | esac | ||||||
|   | |||||||
| @@ -11,8 +11,7 @@ boot() { | |||||||
| 	edgecore,eap101|\ | 	edgecore,eap101|\ | ||||||
| 	edgecore,eap102|\ | 	edgecore,eap102|\ | ||||||
| 	edgecore,oap102|\ | 	edgecore,oap102|\ | ||||||
| 	edgecore,oap103|\ | 	edgecore.eap104) | ||||||
| 	edgecore,eap104) |  | ||||||
| 		avail=$(fw_printenv -n upgrade_available) | 		avail=$(fw_printenv -n upgrade_available) | ||||||
| 		[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1 | 		[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1 | ||||||
| 		fw_setenv bootcount 0 | 		fw_setenv bootcount 0 | ||||||
|   | |||||||
| @@ -27,7 +27,6 @@ platform_check_image() { | |||||||
| 	cig,wf196|\ | 	cig,wf196|\ | ||||||
| 	edgecore,eap102|\ | 	edgecore,eap102|\ | ||||||
| 	edgecore,oap102|\ | 	edgecore,oap102|\ | ||||||
| 	edgecore,oap103|\ |  | ||||||
| 	edgecore,eap106|\ | 	edgecore,eap106|\ | ||||||
| 	tplink,ex227|\ | 	tplink,ex227|\ | ||||||
| 	tplink,ex447) | 	tplink,ex447) | ||||||
| @@ -47,14 +46,8 @@ platform_do_upgrade() { | |||||||
| 	tplink,ex227)	 | 	tplink,ex227)	 | ||||||
| 		qca_do_upgrade "$1" | 		qca_do_upgrade "$1" | ||||||
| 		;; | 		;; | ||||||
|         cig,wf196) |  | ||||||
|                 [ -f /proc/boot_info/rootfs/upgradepartition ] && { |  | ||||||
|                         CI_UBIPART="$(cat /proc/boot_info/rootfs/upgradepartition)" |  | ||||||
|                         CI_BOOTCFG=1 |  | ||||||
|                 } |  | ||||||
|                 nand_upgrade_tar "$1" |  | ||||||
|                 ;; |  | ||||||
| 	cig,wf194c4|\ | 	cig,wf194c4|\ | ||||||
|  | 	cig,wf196|\ | ||||||
| 	tplink,ex447) | 	tplink,ex447) | ||||||
| 		nand_upgrade_tar "$1" | 		nand_upgrade_tar "$1" | ||||||
| 		;; | 		;; | ||||||
| @@ -64,8 +57,7 @@ platform_do_upgrade() { | |||||||
| 		nand_upgrade_tar "$1" | 		nand_upgrade_tar "$1" | ||||||
| 		;; | 		;; | ||||||
| 	edgecore,eap102|\ | 	edgecore,eap102|\ | ||||||
| 	edgecore,oap102|\ | 	edgecore,oap102) | ||||||
| 	edgecore,oap103) |  | ||||||
| 		if [ "$(find_mtd_chardev rootfs)" ]; then | 		if [ "$(find_mtd_chardev rootfs)" ]; then | ||||||
| 			CI_UBIPART="rootfs" | 			CI_UBIPART="rootfs" | ||||||
| 		else | 		else | ||||||
|   | |||||||
| @@ -1,736 +0,0 @@ | |||||||
| // SPDX-License-Identifier: GPL-2.0-only |  | ||||||
| /dts-v1/; |  | ||||||
| /* Copyright (c) 2020 The Linux Foundation. All rights reserved. |  | ||||||
|  */ |  | ||||||
| #include "ipq8074.dtsi" |  | ||||||
| #include "ipq8074-ac-cpu.dtsi" |  | ||||||
|  |  | ||||||
| / { |  | ||||||
| 	#address-cells = <0x2>; |  | ||||||
| 	#size-cells = <0x2>; |  | ||||||
| 	model = "Edgecore OAP103"; |  | ||||||
| 	compatible = "edgecore,oap103", "qcom,ipq807x-ac02", "qcom,ipq807x"; |  | ||||||
| 	qcom,msm-id = <0x178 0x0>; |  | ||||||
| 	interrupt-parent = <&intc>; |  | ||||||
|  |  | ||||||
| 	aliases { |  | ||||||
| 		serial0 = &blsp1_uart5; |  | ||||||
| 		/* Aliases as required by u-boot to patch MAC addresses */ |  | ||||||
| 		ethernet1 = "/soc/dp5"; |  | ||||||
| 		ethernet0 = "/soc/dp6"; |  | ||||||
|  |  | ||||||
| 		led-boot = &led_power; |  | ||||||
| 		led-failsafe = &led_power; |  | ||||||
| 		led-running = &led_power; |  | ||||||
| 		led-upgrade = &led_power; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	chosen { |  | ||||||
| 		stdout-path = "serial0"; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	gpio-export { |  | ||||||
| 		compatible = "gpio-export"; |  | ||||||
| 		#size-cells = <0>; |  | ||||||
|  |  | ||||||
| 		mcu-enable { |  | ||||||
| 			gpio-export,name = "mcu-enable"; |  | ||||||
| 			gpio-export,output = <0>; |  | ||||||
| 			gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		usb-hub-enable { |  | ||||||
| 			gpio-export,name = "usb-hub-enable"; |  | ||||||
| 			gpio-export,output = <1>; |  | ||||||
| 			gpios = <&tlmm 55 GPIO_ACTIVE_HIGH>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		usb-rear-power { |  | ||||||
| 			gpio-export,name = "usb-rear-power"; |  | ||||||
| 			gpio-export,output = <1>; |  | ||||||
| 			gpios = <&tlmm 29 GPIO_ACTIVE_HIGH>; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		usb-side-power { |  | ||||||
| 			gpio-export,name = "usb-side-power"; |  | ||||||
| 			gpio-export,output = <1>; |  | ||||||
| 			gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	soc { |  | ||||||
| 		pinctrl@1000000 { |  | ||||||
| 			pinctrl-0 = <&mcu_rst &mcu_rsv &usb_rear_pwr &usb_side_pwr &usb_hub_rst>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
|  |  | ||||||
| 			mcu_rst: mcu_rst_pins { |  | ||||||
| 				pins = "gpio54"; |  | ||||||
| 				function = "gpio"; |  | ||||||
| 				drive-strength = <8>; |  | ||||||
| 				bias-disable; |  | ||||||
| 				output-low; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			mcu_rsv: mcu_rsv_pins { |  | ||||||
| 				pins = "gpio56"; |  | ||||||
| 				function = "gpio"; |  | ||||||
| 				drive-strength = <8>; |  | ||||||
| 				bias-disable; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			usb_rear_pwr: usb_rear_pwr_pins { |  | ||||||
| 				pins = "gpio29"; |  | ||||||
| 				function = "gpio"; |  | ||||||
| 				drive-strength = <8>; |  | ||||||
| 				bias-disable; |  | ||||||
| 				output-high; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			usb_side_pwr: usb_side_pwr_pins { |  | ||||||
| 				pins = "gpio30"; |  | ||||||
| 				function = "gpio"; |  | ||||||
| 				drive-strength = <8>; |  | ||||||
| 				bias-disable; |  | ||||||
| 				output-high; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			usb_hub_rst: usb_hub_rst_pins { |  | ||||||
| 				pins = "gpio55"; |  | ||||||
| 				function = "gpio"; |  | ||||||
| 				drive-strength = <8>; |  | ||||||
| 				bias-disable; |  | ||||||
| 				output-high; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			button_pins: button_pins { |  | ||||||
| 				reset_button { |  | ||||||
| 					pins = "gpio66"; |  | ||||||
| 					function = "gpio"; |  | ||||||
| 					drive-strength = <8>; |  | ||||||
| 					bias-pull-up; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			mdio_pins: mdio_pinmux { |  | ||||||
| 				mux_0 { |  | ||||||
| 					pins = "gpio68"; |  | ||||||
| 					function = "mdc"; |  | ||||||
| 					drive-strength = <8>; |  | ||||||
| 					bias-pull-up; |  | ||||||
| 				}; |  | ||||||
| 				mux_1 { |  | ||||||
| 					pins = "gpio69"; |  | ||||||
| 					function = "mdio"; |  | ||||||
| 					drive-strength = <8>; |  | ||||||
| 					bias-pull-up; |  | ||||||
| 				}; |  | ||||||
| 				mux_2 { |  | ||||||
| 					pins = "gpio33"; |  | ||||||
| 					function = "gpio"; |  | ||||||
| 					bias-pull-up; |  | ||||||
| 				}; |  | ||||||
| 				mux_3 { |  | ||||||
| 					pins = "gpio44"; |  | ||||||
| 					function = "gpio"; |  | ||||||
| 					bias-pull-up; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 			led_pins: led_pins { |  | ||||||
| 				led_2g { |  | ||||||
| 					pins = "gpio42"; |  | ||||||
| 					function = "gpio"; |  | ||||||
| 					drive-strength = <8>; |  | ||||||
| 					bias-pull-down; |  | ||||||
| 				}; |  | ||||||
|  |  | ||||||
| 				led_5g { |  | ||||||
| 					pins = "gpio43"; |  | ||||||
| 					function = "gpio"; |  | ||||||
| 					drive-strength = <8>; |  | ||||||
| 					bias-pull-down; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		serial@78b3000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		spi@78b5000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 			pinctrl-0 = <&spi_0_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
| 			cs-select = <0>; |  | ||||||
|  |  | ||||||
| 			m25p80@0 { |  | ||||||
| 				  compatible = "n25q128a11"; |  | ||||||
| 				  #address-cells = <1>; |  | ||||||
| 				  #size-cells = <1>; |  | ||||||
| 				  reg = <0>; |  | ||||||
| 				  spi-max-frequency = <50000000>; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		dma@7984000 { |  | ||||||
| 			 status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		nand@79b0000 { |  | ||||||
| 			status = "ok"; |  | ||||||
|  |  | ||||||
| 			nand@0 { |  | ||||||
| 				reg = <0>; |  | ||||||
| 				#address-cells = <1>; |  | ||||||
| 				#size-cells = <1>; |  | ||||||
|  |  | ||||||
| 				nand-ecc-strength = <4>; |  | ||||||
| 				nand-ecc-step-size = <512>; |  | ||||||
| 				nand-bus-width = <8>; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		qusb@79000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		ssphy@78000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		usb3@8A00000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		usb3@8C00000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		qusb@59000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		ssphy@58000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		usb3@8C00000 { |  | ||||||
| 			status = "ok"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		gpio_keys { |  | ||||||
| 			compatible = "gpio-keys"; |  | ||||||
| 			pinctrl-0 = <&button_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
| 			status = "ok"; |  | ||||||
|  |  | ||||||
| 			button@1 { |  | ||||||
| 				label = "reset"; |  | ||||||
| 				linux,code = <KEY_RESTART>; |  | ||||||
| 				gpios = <&tlmm 66 GPIO_ACTIVE_LOW>; |  | ||||||
| 				linux,input-type = <1>; |  | ||||||
| 				debounce-interval = <60>; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		mdio: mdio@90000 { |  | ||||||
| 			pinctrl-0 = <&mdio_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
| 			phy-reset-gpio = <&tlmm 37 0 &tlmm 25 1 &tlmm 44 1>; |  | ||||||
| 			phy0: ethernet-phy@0 { |  | ||||||
| 				reg = <0>; |  | ||||||
| 			}; |  | ||||||
| 			phy1: ethernet-phy@1 { |  | ||||||
| 				reg = <1>; |  | ||||||
| 			}; |  | ||||||
| 			phy2: ethernet-phy@2 { |  | ||||||
| 				reg = <2>; |  | ||||||
| 			}; |  | ||||||
| 			phy3: ethernet-phy@3 { |  | ||||||
| 				reg = <3>; |  | ||||||
| 			}; |  | ||||||
| 			phy4: ethernet-phy@4 { |  | ||||||
| 				reg = <24>; |  | ||||||
| 			}; |  | ||||||
| 			phy5: ethernet-phy@5 { |  | ||||||
| 				reg = <28>; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		ess-switch@3a000000 { |  | ||||||
| 			switch_cpu_bmp = <0x1>;  /* cpu port bitmap */ |  | ||||||
| 			switch_lan_bmp = <0x3e>; /* lan port bitmap */ |  | ||||||
| 			switch_wan_bmp = <0x40>; /* wan port bitmap */ |  | ||||||
| 			switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ |  | ||||||
| 			switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/ |  | ||||||
| 			switch_mac_mode2 = <0xf>; /* mac mode for uniphy instance2*/ |  | ||||||
| 			bm_tick_mode = <0>; /* bm tick mode */ |  | ||||||
| 			tm_tick_mode = <0>; /* tm tick mode */ |  | ||||||
| 			qcom,port_phyinfo { |  | ||||||
| 				port@0 { |  | ||||||
| 					port_id = <1>; |  | ||||||
| 					phy_address = <0>; |  | ||||||
| 				}; |  | ||||||
| 				port@1 { |  | ||||||
| 					port_id = <2>; |  | ||||||
| 					phy_address = <1>; |  | ||||||
| 				}; |  | ||||||
| 				port@2 { |  | ||||||
| 					port_id = <3>; |  | ||||||
| 					phy_address = <2>; |  | ||||||
| 				}; |  | ||||||
| 				port@3 { |  | ||||||
| 					port_id = <4>; |  | ||||||
| 					phy_address = <3>; |  | ||||||
| 				}; |  | ||||||
| 				port@4 { |  | ||||||
| 					port_id = <5>; |  | ||||||
| 					phy_address = <24>; |  | ||||||
| 					port_mac_sel = "QGMAC_PORT"; |  | ||||||
| 				}; |  | ||||||
| 				port@5 { |  | ||||||
| 					port_id = <6>; |  | ||||||
| 					phy_address = <28>; |  | ||||||
| 					port_mac_sel = "QGMAC_PORT"; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 			port_scheduler_resource { |  | ||||||
| 				port@0 { |  | ||||||
| 					port_id = <0>; |  | ||||||
| 					ucast_queue = <0 143>; |  | ||||||
| 					mcast_queue = <256 271>; |  | ||||||
| 					l0sp = <0 35>; |  | ||||||
| 					l0cdrr = <0 47>; |  | ||||||
| 					l0edrr = <0 47>; |  | ||||||
| 					l1cdrr = <0 7>; |  | ||||||
| 					l1edrr = <0 7>; |  | ||||||
| 				}; |  | ||||||
| 				port@1 { |  | ||||||
| 					port_id = <1>; |  | ||||||
| 					ucast_queue = <144 159>; |  | ||||||
| 					mcast_queue = <272 275>; |  | ||||||
| 					l0sp = <36 39>; |  | ||||||
| 					l0cdrr = <48 63>; |  | ||||||
| 					l0edrr = <48 63>; |  | ||||||
| 					l1cdrr = <8 11>; |  | ||||||
| 					l1edrr = <8 11>; |  | ||||||
| 				}; |  | ||||||
| 				port@2 { |  | ||||||
| 					port_id = <2>; |  | ||||||
| 					ucast_queue = <160 175>; |  | ||||||
| 					mcast_queue = <276 279>; |  | ||||||
| 					l0sp = <40 43>; |  | ||||||
| 					l0cdrr = <64 79>; |  | ||||||
| 					l0edrr = <64 79>; |  | ||||||
| 					l1cdrr = <12 15>; |  | ||||||
| 					l1edrr = <12 15>; |  | ||||||
| 				}; |  | ||||||
| 				port@3 { |  | ||||||
| 					port_id = <3>; |  | ||||||
| 					ucast_queue = <176 191>; |  | ||||||
| 					mcast_queue = <280 283>; |  | ||||||
| 					l0sp = <44 47>; |  | ||||||
| 					l0cdrr = <80 95>; |  | ||||||
| 					l0edrr = <80 95>; |  | ||||||
| 					l1cdrr = <16 19>; |  | ||||||
| 					l1edrr = <16 19>; |  | ||||||
| 				}; |  | ||||||
| 				port@4 { |  | ||||||
| 					port_id = <4>; |  | ||||||
| 					ucast_queue = <192 207>; |  | ||||||
| 					mcast_queue = <284 287>; |  | ||||||
| 					l0sp = <48 51>; |  | ||||||
| 					l0cdrr = <96 111>; |  | ||||||
| 					l0edrr = <96 111>; |  | ||||||
| 					l1cdrr = <20 23>; |  | ||||||
| 					l1edrr = <20 23>; |  | ||||||
| 				}; |  | ||||||
| 				port@5 { |  | ||||||
| 					port_id = <5>; |  | ||||||
| 					ucast_queue = <208 223>; |  | ||||||
| 					mcast_queue = <288 291>; |  | ||||||
| 					l0sp = <52 55>; |  | ||||||
| 					l0cdrr = <112 127>; |  | ||||||
| 					l0edrr = <112 127>; |  | ||||||
| 					l1cdrr = <24 27>; |  | ||||||
| 					l1edrr = <24 27>; |  | ||||||
| 				}; |  | ||||||
| 				port@6 { |  | ||||||
| 					port_id = <6>; |  | ||||||
| 					ucast_queue = <224 239>; |  | ||||||
| 					mcast_queue = <292 295>; |  | ||||||
| 					l0sp = <56 59>; |  | ||||||
| 					l0cdrr = <128 143>; |  | ||||||
| 					l0edrr = <128 143>; |  | ||||||
| 					l1cdrr = <28 31>; |  | ||||||
| 					l1edrr = <28 31>; |  | ||||||
| 				}; |  | ||||||
| 				port@7 { |  | ||||||
| 					port_id = <7>; |  | ||||||
| 					ucast_queue = <240 255>; |  | ||||||
| 					mcast_queue = <296 299>; |  | ||||||
| 					l0sp = <60 63>; |  | ||||||
| 					l0cdrr = <144 159>; |  | ||||||
| 					l0edrr = <144 159>; |  | ||||||
| 					l1cdrr = <32 35>; |  | ||||||
| 					l1edrr = <32 35>; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 			port_scheduler_config { |  | ||||||
| 				port@0 { |  | ||||||
| 					port_id = <0>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <0 1>; /*L0 SPs*/ |  | ||||||
| 							/*cpri cdrr epri edrr*/ |  | ||||||
| 							cfg = <0 0 0 0>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							/*unicast queues*/ |  | ||||||
| 							ucast_queue = <0 4 8>; |  | ||||||
| 							/*multicast queues*/ |  | ||||||
| 							mcast_queue = <256 260>; |  | ||||||
| 							/*sp cpri cdrr epri edrr*/ |  | ||||||
| 							cfg = <0 0 0 0 0>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							ucast_queue = <1 5 9>; |  | ||||||
| 							mcast_queue = <257 261>; |  | ||||||
| 							cfg = <0 1 1 1 1>; |  | ||||||
| 						}; |  | ||||||
| 						group@2 { |  | ||||||
| 							ucast_queue = <2 6 10>; |  | ||||||
| 							mcast_queue = <258 262>; |  | ||||||
| 							cfg = <0 2 2 2 2>; |  | ||||||
| 						}; |  | ||||||
| 						group@3 { |  | ||||||
| 							ucast_queue = <3 7 11>; |  | ||||||
| 							mcast_queue = <259 263>; |  | ||||||
| 							cfg = <0 3 3 3 3>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				port@1 { |  | ||||||
| 					port_id = <1>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <36>; |  | ||||||
| 							cfg = <0 8 0 8>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							sp = <37>; |  | ||||||
| 							cfg = <1 9 1 9>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							ucast_queue = <144>; |  | ||||||
| 							ucast_loop_pri = <16>; |  | ||||||
| 							mcast_queue = <272>; |  | ||||||
| 							mcast_loop_pri = <4>; |  | ||||||
| 							cfg = <36 0 48 0 48>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				port@2 { |  | ||||||
| 					port_id = <2>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <40>; |  | ||||||
| 							cfg = <0 12 0 12>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							sp = <41>; |  | ||||||
| 							cfg = <1 13 1 13>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							ucast_queue = <160>; |  | ||||||
| 							ucast_loop_pri = <16>; |  | ||||||
| 							mcast_queue = <276>; |  | ||||||
| 							mcast_loop_pri = <4>; |  | ||||||
| 							cfg = <40 0 64 0 64>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				port@3 { |  | ||||||
| 					port_id = <3>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <44>; |  | ||||||
| 							cfg = <0 16 0 16>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							sp = <45>; |  | ||||||
| 							cfg = <1 17 1 17>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							ucast_queue = <176>; |  | ||||||
| 							ucast_loop_pri = <16>; |  | ||||||
| 							mcast_queue = <280>; |  | ||||||
| 							mcast_loop_pri = <4>; |  | ||||||
| 							cfg = <44 0 80 0 80>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				port@4 { |  | ||||||
| 					port_id = <4>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <48>; |  | ||||||
| 							cfg = <0 20 0 20>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							sp = <49>; |  | ||||||
| 							cfg = <1 21 1 21>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							ucast_queue = <192>; |  | ||||||
| 							ucast_loop_pri = <16>; |  | ||||||
| 							mcast_queue = <284>; |  | ||||||
| 							mcast_loop_pri = <4>; |  | ||||||
| 							cfg = <48 0 96 0 96>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				port@5 { |  | ||||||
| 					port_id = <5>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <52>; |  | ||||||
| 							cfg = <0 24 0 24>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							sp = <53>; |  | ||||||
| 							cfg = <1 25 1 25>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							ucast_queue = <208>; |  | ||||||
| 							ucast_loop_pri = <16>; |  | ||||||
| 							mcast_queue = <288>; |  | ||||||
| 							mcast_loop_pri = <4>; |  | ||||||
| 							cfg = <52 0 112 0 112>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				port@6 { |  | ||||||
| 					port_id = <6>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <56>; |  | ||||||
| 							cfg = <0 28 0 28>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							sp = <57>; |  | ||||||
| 							cfg = <1 29 1 29>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							ucast_queue = <224>; |  | ||||||
| 							ucast_loop_pri = <16>; |  | ||||||
| 							mcast_queue = <292>; |  | ||||||
| 							mcast_loop_pri = <4>; |  | ||||||
| 							cfg = <56 0 128 0 128>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 				port@7 { |  | ||||||
| 					port_id = <7>; |  | ||||||
| 					l1scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							sp = <60>; |  | ||||||
| 							cfg = <0 32 0 32>; |  | ||||||
| 						}; |  | ||||||
| 						group@1 { |  | ||||||
| 							sp = <61>; |  | ||||||
| 							cfg = <1 33 1 33>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 					l0scheduler { |  | ||||||
| 						group@0 { |  | ||||||
| 							ucast_queue = <240>; |  | ||||||
| 							ucast_loop_pri = <16>; |  | ||||||
| 							mcast_queue = <296>; |  | ||||||
| 							cfg = <60 0 144 0 144>; |  | ||||||
| 						}; |  | ||||||
| 					}; |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		dp6 { |  | ||||||
| 			device_type = "network"; |  | ||||||
| 			compatible = "qcom,nss-dp"; |  | ||||||
| 			qcom,id = <6>; |  | ||||||
| 			reg = <0x3a001800 0x200>; |  | ||||||
| 			qcom,mactype = <0>; |  | ||||||
| 			local-mac-address = [000000000000]; |  | ||||||
| 			qcom,link-poll = <1>; |  | ||||||
| 			qcom,phy-mdio-addr = <28>; |  | ||||||
| 			phy-mode = "sgmii"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		dp5 { |  | ||||||
| 			device_type = "network"; |  | ||||||
| 			compatible = "qcom,nss-dp"; |  | ||||||
| 			qcom,id = <5>; |  | ||||||
| 			reg = <0x3a001a00 0x200>; |  | ||||||
| 			qcom,mactype = <0>; |  | ||||||
| 			local-mac-address = [000000000000]; |  | ||||||
| 			qcom,link-poll = <1>; |  | ||||||
| 			qcom,phy-mdio-addr = <24>; |  | ||||||
| 			phy-mode = "sgmii"; |  | ||||||
| 		}; |  | ||||||
|  |  | ||||||
| 		leds { |  | ||||||
| 			compatible = "gpio-leds"; |  | ||||||
| 			pinctrl-0 = <&led_pins>; |  | ||||||
| 			pinctrl-names = "default"; |  | ||||||
|  |  | ||||||
| 			led_pwr { |  | ||||||
| 				label = "green:wan"; |  | ||||||
| 				gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>; |  | ||||||
| 				default-state = "off"; |  | ||||||
| 				linux,default-trigger = "led_pwr"; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			led_2g { |  | ||||||
| 				label = "green:wifi2"; |  | ||||||
| 				gpio = <&tlmm 47 GPIO_ACTIVE_HIGH>; |  | ||||||
| 				default-state = "off"; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			led_5g { |  | ||||||
| 				label = "green:wifi5"; |  | ||||||
| 				gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; |  | ||||||
| 				default-state = "off"; |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			led_power: led_bt { |  | ||||||
| 				gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; |  | ||||||
| 				label = "green:power"; |  | ||||||
| 				default-state = "on"; |  | ||||||
| 				linux,default-trigger = "led_bt"; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
| 		nss-macsec0 { |  | ||||||
| 			compatible = "qcom,nss-macsec"; |  | ||||||
| 			phy_addr = <0x18>; |  | ||||||
| 			mdiobus = <&mdio>; |  | ||||||
| 		}; |  | ||||||
| 		nss-macsec1 { |  | ||||||
| 			compatible = "qcom,nss-macsec"; |  | ||||||
| 			phy_addr = <0x1c>; |  | ||||||
| 			mdiobus = <&mdio>; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &apc_cpr { |  | ||||||
| 	/* Same CPR configuration as OAK */ |  | ||||||
| 	compatible = "qcom,cpr4-ipq817x-apss-regulator"; |  | ||||||
|  |  | ||||||
| 	thread@0 { |  | ||||||
| 		apc_vreg: regulator { |  | ||||||
| 			regulator-min-microvolt = <1>; |  | ||||||
| 			regulator-max-microvolt = <2>; |  | ||||||
| 			qcom,cpr-fuse-corners = <2>; |  | ||||||
| 			qcom,cpr-corners = <3>; |  | ||||||
| 			qcom,cpr-speed-bin-corners = <3>; |  | ||||||
| 			qcom,cpr-corner-fmax-map = <1 3>; |  | ||||||
|  |  | ||||||
| 			qcom,cpr-voltage-ceiling = |  | ||||||
| 				<840000 904000 944000>; |  | ||||||
| 			qcom,cpr-voltage-floor = |  | ||||||
| 				<592000 648000 712000>; |  | ||||||
| 			qcom,corner-frequencies = |  | ||||||
| 				<1017600000 1382400000 1382400000>; |  | ||||||
|  |  | ||||||
| 			qcom,cpr-open-loop-voltage-fuse-adjustment-0 = |  | ||||||
| 				/* Speed bin 0; CPR rev 0..7 */ |  | ||||||
| 				< 0      0>, |  | ||||||
| 				< 0      0>, |  | ||||||
| 				< 0      0>, |  | ||||||
| 				< 0      0>, |  | ||||||
| 				< 0      0>, |  | ||||||
| 				< 0      0>, |  | ||||||
| 				< 0      0>, |  | ||||||
| 				< 0      0>; |  | ||||||
|  |  | ||||||
| 			qcom,cpr-open-loop-voltage-fuse-adjustment-1 = |  | ||||||
| 				/* Speed bin 0; CPR rev 0..7 */ |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				< 20000  26000>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>; |  | ||||||
|  |  | ||||||
| 			qcom,cpr-open-loop-voltage-fuse-adjustment-v2-0 = |  | ||||||
| 				/* Speed bin 0; CPR rev 0..7 */ |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>; |  | ||||||
|  |  | ||||||
| 			qcom,cpr-open-loop-voltage-fuse-adjustment-v2-1 = |  | ||||||
| 				/* Speed bin 0; CPR rev 0..7 */ |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0   7000>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>, |  | ||||||
| 				<     0      0>; |  | ||||||
|  |  | ||||||
| 			qcom,cpr-floor-to-ceiling-max-range = |  | ||||||
| 				< 40000 40000 40000>, |  | ||||||
| 				< 40000 40000 40000>, |  | ||||||
| 				< 40000 40000 40000>, |  | ||||||
| 				< 40000 40000 40000>, |  | ||||||
| 				< 40000 40000 40000>, |  | ||||||
| 				< 40000 40000 40000>, |  | ||||||
| 				< 40000 40000 40000>, |  | ||||||
| 				< 40000 40000 40000>; |  | ||||||
| 		}; |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &npu_cpr { |  | ||||||
| 	status = "disabled"; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &nss0 { |  | ||||||
|         qcom,low-frequency = <187200000>; |  | ||||||
|         qcom,mid-frequency = <748800000>; |  | ||||||
|         qcom,max-frequency = <1497600000>; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &nss0 { |  | ||||||
| 	npu-supply = <&dummy_reg>; |  | ||||||
| 	mx-supply = <&dummy_reg>; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &wifi0 { |  | ||||||
| 	qcom,board_id = <0x92>; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| &wifi1 { |  | ||||||
| 	qcom,board_id = <0x292>; |  | ||||||
| }; |  | ||||||
| @@ -39,15 +39,6 @@ define Device/edgecore_oap102 | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += edgecore_oap102 | TARGET_DEVICES += edgecore_oap102 | ||||||
|  |  | ||||||
| define Device/edgecore_oap103 |  | ||||||
|   DEVICE_TITLE := Edgecore OAP103 |  | ||||||
|   DEVICE_DTS := qcom-ipq807x-oap103 |  | ||||||
|   DEVICE_DTS_CONFIG=config@ac02 |  | ||||||
|   SUPPORTED_DEVICES := edgecore,oap103 |  | ||||||
|   DEVICE_PACKAGES := ath11k-wifi-edgecore-oap103 kmod-usb2 kmod-usb3 uboot-envtools |  | ||||||
| endef |  | ||||||
| TARGET_DEVICES += edgecore_oap103 |  | ||||||
|  |  | ||||||
| define Device/edgecore_eap106 | define Device/edgecore_eap106 | ||||||
|   DEVICE_TITLE := Edgecore EAP106 |   DEVICE_TITLE := Edgecore EAP106 | ||||||
|   DEVICE_DTS := qcom-ipq807x-eap106 |   DEVICE_DTS := qcom-ipq807x-eap106 | ||||||
|   | |||||||
| @@ -0,0 +1,38 @@ | |||||||
|  | --- a/drivers/net/wireless/ath/ath11k/peer.c | ||||||
|  | +++ b/drivers/net/wireless/ath/ath11k/peer.c | ||||||
|  | @@ -819,8 +819,13 @@ int ath11k_peer_delete(struct ath11k *ar | ||||||
|  |  				} | ||||||
|  |  			} | ||||||
|  |  #endif | ||||||
|  | -		ath11k_peer_rhash_delete(ar->ab, peer); | ||||||
|  | +		if (peer->vdev_id == vdev_id) | ||||||
|  | +			ath11k_peer_rhash_delete(ar->ab, peer); | ||||||
|  |  	} | ||||||
|  | + | ||||||
|  | +	if (!peer) | ||||||
|  | +		peer = ath11k_peer_find(ar->ab, vdev_id, addr); | ||||||
|  | + | ||||||
|  |  	spin_unlock_bh(&ar->ab->base_lock); | ||||||
|  |  	mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||||
|  |  #ifdef CPTCFG_ATH11K_NSS_SUPPORT | ||||||
|  | @@ -870,8 +875,18 @@ int ath11k_peer_create(struct ath11k *ar | ||||||
|  |  	spin_lock_bh(&ar->ab->base_lock); | ||||||
|  |  	peer = ath11k_peer_find_by_addr(ar->ab, param->peer_addr); | ||||||
|  |  	if (peer) { | ||||||
|  | -		spin_unlock_bh(&ar->ab->base_lock); | ||||||
|  | -		return -EINVAL; | ||||||
|  | +		if (peer->vdev_id == param->vdev_id) { | ||||||
|  | +			spin_unlock_bh(&ar->ab->base_lock); | ||||||
|  | +			return -EINVAL; | ||||||
|  | +		} | ||||||
|  | + | ||||||
|  | +		/* Assume sta is transitioning to another band. | ||||||
|  | +		 * Remove here the peer from rhash. | ||||||
|  | +		 */ | ||||||
|  | +		mutex_lock(&ar->ab->tbl_mtx_lock); | ||||||
|  | +		ath11k_peer_rhash_delete(ar->ab, peer); | ||||||
|  | +		mutex_unlock(&ar->ab->tbl_mtx_lock); | ||||||
|  | + | ||||||
|  |  	} | ||||||
|  |  	spin_unlock_bh(&ar->ab->base_lock); | ||||||
|  |   | ||||||
| @@ -1,116 +0,0 @@ | |||||||
| Index: backports-20210222_001-5.4.164-b157d2276/drivers/net/wireless/ath/ath11k/peer.c |  | ||||||
| =================================================================== |  | ||||||
| --- backports-20210222_001-5.4.164-b157d2276.orig/drivers/net/wireless/ath/ath11k/peer.c |  | ||||||
| +++ backports-20210222_001-5.4.164-b157d2276/drivers/net/wireless/ath/ath11k/peer.c |  | ||||||
| @@ -789,8 +789,6 @@ int ath11k_peer_delete(struct ath11k *ar |  | ||||||
|  #endif |  | ||||||
|  	lockdep_assert_held(&ar->conf_mutex); |  | ||||||
|   |  | ||||||
| -	reinit_completion(&ar->peer_delete_done); |  | ||||||
| - |  | ||||||
|  	ath11k_nss_peer_delete(ar->ab, vdev_id, addr); |  | ||||||
|  #ifdef CCPTCFG_ATH11K_NSS_SUPPORTPTCFG_ATH11K_NSS_SUPPORT |  | ||||||
|  	mutex_lock(&ar->ab->base_ast_lock); |  | ||||||
| @@ -799,33 +797,60 @@ int ath11k_peer_delete(struct ath11k *ar |  | ||||||
|  	spin_lock_bh(&ar->ab->base_lock); |  | ||||||
|   |  | ||||||
|  	peer = ath11k_peer_find_by_addr(ar->ab, addr); |  | ||||||
| -	if (peer) { |  | ||||||
| +	/* Check if the found peer is what we want to remove. |  | ||||||
| +	 * While the sta is transitioning to another band we may |  | ||||||
| +	 * have 2 peer with the same addr assigned to different |  | ||||||
| +	 * vdev_id. Make sure we are deleting the correct peer. |  | ||||||
| +	 */ |  | ||||||
| +	if (peer && peer->vdev_id == vdev_id) |  | ||||||
| +		ath11k_peer_rhash_delete(ar->ab, peer); |  | ||||||
| + |  | ||||||
| +	/* Fallback to peer list search if the correct peer can't be found. |  | ||||||
| +	 * Skip the deletion of the peer from the rhash since it has already |  | ||||||
| +	 * been deleted in peer add. |  | ||||||
| +	 */ |  | ||||||
| +	if (!peer) |  | ||||||
| +		peer = ath11k_peer_find(ar->ab, vdev_id, addr); |  | ||||||
| + |  | ||||||
| + |  | ||||||
| +	if (!peer) { |  | ||||||
| +		spin_unlock_bh(&ar->ab->base_lock); |  | ||||||
| +		mutex_unlock(&ar->ab->tbl_mtx_lock); |  | ||||||
|  #ifdef CPTCFG_ATH11K_NSS_SUPPORT |  | ||||||
| -		peer->delete_in_progress = true; |  | ||||||
| -		if (peer->self_ast_entry) { |  | ||||||
| -			ath11k_peer_del_ast(ar, peer->self_ast_entry); |  | ||||||
| -			peer->self_ast_entry = NULL; |  | ||||||
| -		} |  | ||||||
| +		mutex_unlock(&ar->ab->base_ast_lock); |  | ||||||
| +#endif |  | ||||||
| +		ath11k_warn(ar->ab, |  | ||||||
| +			    "failed to find peer vdev_id %d addr %pM in delete\n", |  | ||||||
| +			    vdev_id, addr); |  | ||||||
| +		return -EINVAL; |  | ||||||
| +        } |  | ||||||
| + |  | ||||||
| +#ifdef CPTCFG_ATH11K_NSS_SUPPORT |  | ||||||
| +	peer->delete_in_progress = true; |  | ||||||
| +	if (peer->self_ast_entry) { |  | ||||||
| +		ath11k_peer_del_ast(ar, peer->self_ast_entry); |  | ||||||
| +		peer->self_ast_entry = NULL; |  | ||||||
| +	} |  | ||||||
|   |  | ||||||
| -		list_for_each_entry_safe(ast_entry, tmp_ast, |  | ||||||
| -					 &peer->ast_entry_list, ase_list) |  | ||||||
| -			if ((ast_entry->type == ATH11K_AST_TYPE_WDS) || |  | ||||||
| -			    (ast_entry->type == ATH11K_AST_TYPE_MEC)) { |  | ||||||
| -				if (!list_empty(&ast_entry->wmi_list)) { |  | ||||||
| -					ath11k_dbg(ar->ab, ATH11K_DBG_MAC, |  | ||||||
| -						   "%s deleting unprocessed ast entry %pM of peer %pM from wmi list\n", |  | ||||||
| -						    __func__, ast_entry->addr, addr); |  | ||||||
| -					list_del_init(&ast_entry->wmi_list); |  | ||||||
| -				} |  | ||||||
| +	list_for_each_entry_safe(ast_entry, tmp_ast, |  | ||||||
| +				 &peer->ast_entry_list, ase_list) |  | ||||||
| +		if ((ast_entry->type == ATH11K_AST_TYPE_WDS) || |  | ||||||
| +		    (ast_entry->type == ATH11K_AST_TYPE_MEC)) { |  | ||||||
| +			if (!list_empty(&ast_entry->wmi_list)) { |  | ||||||
| +				ath11k_dbg(ar->ab, ATH11K_DBG_MAC, |  | ||||||
| +					   "%s deleting unprocessed ast entry %pM of peer %pM from wmi list\n", |  | ||||||
| +					    __func__, ast_entry->addr, addr); |  | ||||||
| +				list_del_init(&ast_entry->wmi_list); |  | ||||||
|  			} |  | ||||||
| +		} |  | ||||||
|  #endif |  | ||||||
| -		ath11k_peer_rhash_delete(ar->ab, peer); |  | ||||||
| -	} |  | ||||||
|  	spin_unlock_bh(&ar->ab->base_lock); |  | ||||||
|  	mutex_unlock(&ar->ab->tbl_mtx_lock); |  | ||||||
|  #ifdef CPTCFG_ATH11K_NSS_SUPPORT |  | ||||||
|  	mutex_unlock(&ar->ab->base_ast_lock); |  | ||||||
|  #endif |  | ||||||
| +	reinit_completion(&ar->peer_delete_done); |  | ||||||
| + |  | ||||||
|  	ret = ath11k_wmi_send_peer_delete_cmd(ar, addr, vdev_id); |  | ||||||
|  	if (ret) { |  | ||||||
|  		ath11k_warn(ar->ab, |  | ||||||
| @@ -866,14 +891,20 @@ int ath11k_peer_create(struct ath11k *ar |  | ||||||
|  			    "failed to create peer due to insufficient peer entry resource in firmware\n"); |  | ||||||
|  		return -ENOBUFS; |  | ||||||
|  	} |  | ||||||
| - |  | ||||||
| +	mutex_lock(&ar->ab->tbl_mtx_lock); |  | ||||||
|  	spin_lock_bh(&ar->ab->base_lock); |  | ||||||
|  	peer = ath11k_peer_find_by_addr(ar->ab, param->peer_addr); |  | ||||||
|  	if (peer) { |  | ||||||
| -		spin_unlock_bh(&ar->ab->base_lock); |  | ||||||
| -		return -EINVAL; |  | ||||||
| +		if (peer->vdev_id == param->vdev_id) { |  | ||||||
| +			spin_unlock_bh(&ar->ab->base_lock); |  | ||||||
| +			mutex_unlock(&ar->ab->tbl_mtx_lock); |  | ||||||
| +			return -EINVAL; |  | ||||||
| +		} |  | ||||||
| +		ath11k_peer_rhash_delete(ar->ab, peer); |  | ||||||
|  	} |  | ||||||
| + |  | ||||||
|  	spin_unlock_bh(&ar->ab->base_lock); |  | ||||||
| +	mutex_unlock(&ar->ab->tbl_mtx_lock); |  | ||||||
|   |  | ||||||
|  	ret = ath11k_wmi_send_peer_create_cmd(ar, param); |  | ||||||
|  	if (ret) { |  | ||||||
| @@ -1,36 +0,0 @@ | |||||||
| From 93d02017c444d9bcb5e319ba6d9dac5794529cdd Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Venkat Chimata <venkata@shasta.cloud> |  | ||||||
| Date: Fri, 19 Jul 2024 18:43:19 +0530 |  | ||||||
| Subject: [PATCH] mac80211: workaround: Send multicast frames as multiple |  | ||||||
|  unicast frames in DVLAN mode |  | ||||||
|  |  | ||||||
| Broadcast / Multciast transmission is not working in DVLAN mode in the driver. |  | ||||||
| If we send the frames as unicast frames, it works. This is a workaround for now. |  | ||||||
| Need to rollback once we add a clean fix. |  | ||||||
|  |  | ||||||
| Signed-off-by: Venkat Chimata <venkata@shasta.cloud> |  | ||||||
| --- |  | ||||||
|  net/mac80211/tx.c | 7 ++----- |  | ||||||
|  1 file changed, 2 insertions(+), 5 deletions(-) |  | ||||||
|  |  | ||||||
| diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c |  | ||||||
| index 9e978f9..6ebf9c2 100644 |  | ||||||
| --- a/net/mac80211/tx.c |  | ||||||
| +++ b/net/mac80211/tx.c |  | ||||||
| @@ -4197,11 +4197,8 @@ static bool ieee80211_multicast_to_unicast(struct sk_buff *skb, |  | ||||||
|   |  | ||||||
|  	switch (sdata->vif.type) { |  | ||||||
|  	case NL80211_IFTYPE_AP_VLAN: |  | ||||||
| -		if (sdata->u.vlan.sta) |  | ||||||
| -			return false; |  | ||||||
| -		if (sdata->wdev.use_4addr) |  | ||||||
| -			return false; |  | ||||||
| -		fallthrough; |  | ||||||
| +		// For now always enable multicast_to_unicast in DVLAN |  | ||||||
| +		return true; |  | ||||||
|  	case NL80211_IFTYPE_AP: |  | ||||||
|  		/* check runtime toggle for this bss */ |  | ||||||
|  		if (!sdata->bss->multicast_to_unicast) |  | ||||||
| --  |  | ||||||
| 2.34.1 |  | ||||||
|  |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| --- a/include/net/cfg80211.h |  | ||||||
| +++ b/include/net/cfg80211.h |  | ||||||
| @@ -543,6 +543,9 @@ ieee80211_get_sband_iftype_data(const st |  | ||||||
|  	if (WARN_ON(iftype >= NL80211_IFTYPE_MAX)) |  | ||||||
|  		return NULL; |  | ||||||
|   |  | ||||||
| +	if (iftype == NL80211_IFTYPE_AP_VLAN) |  | ||||||
| +		iftype = NL80211_IFTYPE_AP; |  | ||||||
| + |  | ||||||
|  	for (i = 0; i < sband->n_iftype_data; i++)  { |  | ||||||
|  		const struct ieee80211_sband_iftype_data *data = |  | ||||||
|  			&sband->iftype_data[i]; |  | ||||||
							
								
								
									
										37
									
								
								feeds/ipq95xx/ath11k-firmware/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								feeds/ipq95xx/ath11k-firmware/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
|  | PKG_NAME:=ath11k-firmware | ||||||
|  | PKG_SOURCE_PROTO:=git | ||||||
|  | PKG_BRANCH:=main | ||||||
|  | PKG_SOURCE_URL:=https://github.com/quic/upstream-wifi-fw.git | ||||||
|  | PKG_MIRROR_HASH:=557505744764b0442c887be3f5bb0ce924323d785b6d207899f19fad992a6020 | ||||||
|  | PKG_SOURCE_VERSION:=3417bb86645c5ff4c58258db7cc33e43260b4222 | ||||||
|  |  | ||||||
|  | PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||||
|  |  | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|  | define Package/ath11k-firmware-default | ||||||
|  |   SECTION:=firmware | ||||||
|  |   CATEGORY:=Firmware | ||||||
|  |   URL:=$(PKG_SOURCE_URL) | ||||||
|  |   DEPENDS:= | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath11k-firmware-ipq95xx | ||||||
|  |   $(Package/ath11k-firmware-default) | ||||||
|  |   TITLE:=ath11k firmware for IPQ95xx devices | ||||||
|  |   DEPENDS:=@TARGET_ipq95xx | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/Compile | ||||||
|  |  | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath11k-firmware-ipq95xx/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/IPQ9574/ | ||||||
|  | 	$(INSTALL_DATA) $(PKG_BUILD_DIR)/ath11k-firmware/IPQ9574/hw1.0/2.9.0.1/WLAN.HK.2.9.0.1-01890-QCAHKSWPL_SILICONZ-1/* \ | ||||||
|  | 		$(1)/lib/firmware/IPQ9574/ | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call BuildPackage,ath11k-firmware-ipq95xx)) | ||||||
							
								
								
									
										36
									
								
								feeds/ipq95xx/ath11k-wifi/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								feeds/ipq95xx/ath11k-wifi/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  | include $(INCLUDE_DIR)/version.mk | ||||||
|  |  | ||||||
|  | PKG_NAME:=ath11k-wifi | ||||||
|  | PKG_RELEASE:=1 | ||||||
|  | PKG_FLAGS:=nonshared | ||||||
|  |  | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|  | define Build/Prepare | ||||||
|  | 	mkdir -p $(PKG_BUILD_DIR) | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/Compile | ||||||
|  |  | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath11k-wifi-default | ||||||
|  |   SUBMENU:=ath11k Board-Specific Overrides | ||||||
|  |   SECTION:=firmware | ||||||
|  |   CATEGORY:=Firmware | ||||||
|  |   DEPENDS:=@TARGET_ipq95xx | ||||||
|  |   TITLE:=Custom Board | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath11k-wifi-qcom-ipq95xx | ||||||
|  | $(call Package/ath11k-wifi-default) | ||||||
|  |     TITLE:=board-2.bin for QCOM IPQ9574 eval kits | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath11k-wifi-qcom-ipq95xx/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ9574/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-2.bin.IPQ9574 $(1)/lib/firmware/ath11k/IPQ9574/hw1.0/board-2.bin | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq95xx)) | ||||||
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath11k-wifi/board-2.bin.IPQ9574
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath11k-wifi/board-2.bin.IPQ9574
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										76
									
								
								feeds/ipq95xx/ath12k-firmware/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								feeds/ipq95xx/ath12k-firmware/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | |||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
|  | PKG_NAME:=ath12k-firmware | ||||||
|  | PKG_MIRROR_HASH:=a325f86b1d613f713d2e015abca4a9ff86c8448d4cd540fa022866da2c5aa042 | ||||||
|  | PKG_SOURCE_PROTO:=git | ||||||
|  | PKG_BRANCH:=main | ||||||
|  | PKG_SOURCE_URL:=https://github.com/quic/upstream-wifi-fw.git | ||||||
|  | PKG_SOURCE_VERSION:=e90d32aaa149800ea79760639cb5ac9ddcfc8281 | ||||||
|  |  | ||||||
|  | PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||||
|  |  | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-default | ||||||
|  |   SECTION:=firmware | ||||||
|  |   CATEGORY:=Firmware | ||||||
|  |   URL:=$(PKG_SOURCE_URL) | ||||||
|  |   DEPENDS:= | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-qcn92xx-split-phy | ||||||
|  |   $(Package/ath12k-firmware-default) | ||||||
|  |   TITLE:=ath12k firmware for qcn92xx split phy devices | ||||||
|  |   DEPENDS:=@(TARGET_ipq95xx||TARGET_ipq53xx) | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-qcn92xx | ||||||
|  |   $(Package/ath12k-firmware-default) | ||||||
|  |   TITLE:=ath12k firmware for qcn92xx devices | ||||||
|  |   DEPENDS:=@(TARGET_ipq95xx||TARGET_ipq53xx) | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-ipq53xx | ||||||
|  |   $(Package/ath12k-firmware-default) | ||||||
|  |   TITLE:=ath12k firmware for ipq53xx devices | ||||||
|  |   DEPENDS:=@TARGET_ipq53xx | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-ipq53xx-wk-wk | ||||||
|  |   $(Package/ath12k-firmware-default) | ||||||
|  |   TITLE:=ath12k firmware for ipq53xx + wk + wk devices | ||||||
|  |   DEPENDS:=@TARGET_ipq53xx | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/Compile | ||||||
|  |  | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-qcn92xx-split-phy/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0 | ||||||
|  | 	$(CP) $(PKG_BUILD_DIR)/ath12k-firmware/QCN9274/hw2.0_split_phy/1.2.1/WLAN.WBE.1.2.1-00148-QCAHKSWPL_SILICONZ-1/* \ | ||||||
|  | 		$(1)/lib/firmware/ath12k/QCN92XX/hw1.0 | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-qcn92xx/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0 | ||||||
|  | 	$(CP) $(PKG_BUILD_DIR)/ath12k-firmware/QCN9274/hw2.0/1.2.1/WLAN.WBE.1.2.1-00201-QCAHKSWPL_SILICONZ-1/* \ | ||||||
|  | 		$(1)/lib/firmware/ath12k/QCN92XX/hw1.0 | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-ipq53xx/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/IPQ5332/ | ||||||
|  | 	$(CP) $(PKG_BUILD_DIR)/ath12k-firmware//IPQ5322/hw1.0/1.2.1/WLAN.WBE.1.2.1-00201-QCAHKSWPL_SILICONZ-1/* \ | ||||||
|  | 		$(1)/lib/firmware/IPQ5332/ | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-firmware-ipq53xx-wk-wk/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/IPQ5332/ | ||||||
|  | 	$(CP) $(PKG_BUILD_DIR)/ath12k-firmware/IPQ5322_QCN6432_QCN6432/hw1.0/testing/1.3/WLAN.WBE.1.3-02907-QCAHKSWPL_SILICONZ-1/* \ | ||||||
|  | 		$(1)/lib/firmware/IPQ5332/ | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call BuildPackage,ath12k-firmware-qcn92xx)) | ||||||
|  | $(eval $(call BuildPackage,ath12k-firmware-qcn92xx-split-phy)) | ||||||
|  | $(eval $(call BuildPackage,ath12k-firmware-ipq53xx)) | ||||||
|  | $(eval $(call BuildPackage,ath12k-firmware-ipq53xx-wk-wk)) | ||||||
							
								
								
									
										78
									
								
								feeds/ipq95xx/ath12k-wifi/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								feeds/ipq95xx/ath12k-wifi/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  | include $(INCLUDE_DIR)/version.mk | ||||||
|  |  | ||||||
|  | PKG_NAME:=ath12k-wifi | ||||||
|  | PKG_RELEASE:=1 | ||||||
|  | PKG_FLAGS:=nonshared | ||||||
|  |  | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|  | define Build/Prepare | ||||||
|  | 	mkdir -p $(PKG_BUILD_DIR) | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/Compile | ||||||
|  |  | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-default | ||||||
|  |   SUBMENU:=ath12k Board-Specific Overrides | ||||||
|  |   SECTION:=firmware | ||||||
|  |   CATEGORY:=Firmware | ||||||
|  |   DEPENDS:=@(TARGET_qcn9274||TARGET_ipq53xx) | ||||||
|  |   TITLE:=Custom Board | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-qcom-qcn9274 | ||||||
|  | $(call Package/ath12k-wifi-default) | ||||||
|  |     TITLE:=board-2.bin for QCOM QCN9274 eval kits | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-qcom-qcn9274/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN9274/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-2.bin.QCN9274 $(1)/lib/firmware/ath12k/QCN9274/hw1.0/board-2.bin | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-cig-wf189 | ||||||
|  | $(call Package/ath12k-wifi-default) | ||||||
|  |     TITLE:=board.bin for CIG WF189 | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-edgecore-eap105 | ||||||
|  | $(call Package/ath12k-wifi-default) | ||||||
|  |     TITLE:=board.bin for Edgecore EAP105 | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-sercomm-ap72tip | ||||||
|  | $(call Package/ath12k-wifi-default) | ||||||
|  |     TITLE:=board.bin for Sercomm WIFI-7 | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-cig-wf189/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0 | ||||||
|  | 	$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-cig-wf189.bin.qcn9224 $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board.bin | ||||||
|  | 	$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-cig-wf189.bin.ipq53xx $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board.bin | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-edgecore-eap105/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0 | ||||||
|  | 	$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-edgecore-eap105.bin.qcn9224 $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board.bin | ||||||
|  | 	$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-edgecore-eap105.bin.ipq53xx $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board.bin | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/ath12k-wifi-sercomm-ap72tip/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0 | ||||||
|  | 	$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-sercomm-ap72tip.bin.qcn9224 $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board.bin | ||||||
|  | 	$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/ | ||||||
|  | 	$(INSTALL_DATA) ./board-sercomm-ap72tip.bin.ipq53xx $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board.bin | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call BuildPackage,ath12k-wifi-qcom-qcn9274)) | ||||||
|  | $(eval $(call BuildPackage,ath12k-wifi-cig-wf189)) | ||||||
|  | $(eval $(call BuildPackage,ath12k-wifi-edgecore-eap105)) | ||||||
|  | $(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip)) | ||||||
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-2.bin.IPQ9574
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-2.bin.IPQ9574
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-2.bin.QCN9274
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-2.bin.QCN9274
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.ipq53xx
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.ipq53xx
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.qcn9224
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.qcn9224
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.ipq53xx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.ipq53xx
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.qcn9224
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.qcn9224
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/regdb.bin
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/ipq95xx/ath12k-wifi/regdb.bin
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										88
									
								
								feeds/ipq95xx/batman-adv/Config.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								feeds/ipq95xx/batman-adv/Config.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | |||||||
|  | # SPDX-License-Identifier: GPL-2.0 | ||||||
|  | # Copyright (C) 2007-2019  B.A.T.M.A.N. contributors: | ||||||
|  | # | ||||||
|  | # Marek Lindner, Simon Wunderlich | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # B.A.T.M.A.N meshing protocol | ||||||
|  | # | ||||||
|  |  | ||||||
|  | config BATMAN_ADV_BATMAN_V | ||||||
|  | 	bool "B.A.T.M.A.N. V protocol" | ||||||
|  | 	depends on PACKAGE_kmod-batman-adv | ||||||
|  | 	default y | ||||||
|  | 	help | ||||||
|  | 	  This option enables the B.A.T.M.A.N. V protocol, the successor | ||||||
|  | 	  of the currently used B.A.T.M.A.N. IV protocol. The main | ||||||
|  | 	  changes include splitting of the OGM protocol into a neighbor | ||||||
|  | 	  discovery protocol (Echo Location Protocol, ELP) and a new OGM | ||||||
|  | 	  Protocol OGMv2 for flooding protocol information through the | ||||||
|  | 	  network, as well as a throughput based metric. | ||||||
|  | 	  B.A.T.M.A.N. V is currently considered experimental and not | ||||||
|  | 	  compatible to B.A.T.M.A.N. IV networks. | ||||||
|  |  | ||||||
|  | config BATMAN_ADV_BLA | ||||||
|  | 	bool "Bridge Loop Avoidance" | ||||||
|  | 	depends on PACKAGE_kmod-batman-adv | ||||||
|  | 	select PACKAGE_kmod-lib-crc16 | ||||||
|  | 	default y | ||||||
|  | 	help | ||||||
|  | 	  This option enables BLA (Bridge Loop Avoidance), a mechanism | ||||||
|  | 	  to avoid Ethernet frames looping when mesh nodes are connected | ||||||
|  | 	  to both the same LAN and the same mesh. If you will never use | ||||||
|  | 	  more than one mesh node in the same LAN, you can safely remove | ||||||
|  | 	  this feature and save some space. | ||||||
|  |  | ||||||
|  | config BATMAN_ADV_DAT | ||||||
|  | 	bool "Distributed ARP Table" | ||||||
|  | 	depends on PACKAGE_kmod-batman-adv | ||||||
|  | 	default y | ||||||
|  | 	help | ||||||
|  | 	  This option enables DAT (Distributed ARP Table), a DHT based | ||||||
|  | 	  mechanism that increases ARP reliability on sparse wireless | ||||||
|  | 	  mesh networks. If you think that your network does not need | ||||||
|  | 	  this option you can safely remove it and save some space. | ||||||
|  |  | ||||||
|  | config BATMAN_ADV_NC | ||||||
|  | 	bool "Network Coding" | ||||||
|  | 	depends on PACKAGE_kmod-batman-adv | ||||||
|  | 	help | ||||||
|  | 	  This option enables network coding, a mechanism that aims to | ||||||
|  | 	  increase the overall network throughput by fusing multiple | ||||||
|  | 	  packets in one transmission. | ||||||
|  | 	  Note that interfaces controlled by batman-adv must be manually | ||||||
|  | 	  configured to have promiscuous mode enabled in order to make | ||||||
|  | 	  network coding work. | ||||||
|  | 	  If you think that your network does not need this feature you | ||||||
|  | 	  can safely disable it and save some space. | ||||||
|  |  | ||||||
|  | config BATMAN_ADV_MCAST | ||||||
|  | 	bool "Multicast optimisation" | ||||||
|  | 	depends on PACKAGE_kmod-batman-adv | ||||||
|  | 	default y | ||||||
|  | 	help | ||||||
|  | 	  This option enables the multicast optimisation which aims to | ||||||
|  | 	  reduce the air overhead while improving the reliability of | ||||||
|  | 	  multicast messages. | ||||||
|  |  | ||||||
|  | config BATMAN_ADV_DEBUG | ||||||
|  | 	bool "B.A.T.M.A.N. debugging" | ||||||
|  | 	depends on PACKAGE_kmod-batman-adv | ||||||
|  | 	help | ||||||
|  | 	  This is an option for use by developers; most people should | ||||||
|  | 	  say N here. This enables compilation of support for | ||||||
|  | 	  outputting debugging information to the debugfs log or tracing | ||||||
|  | 	  buffer. The output is controlled via the batadv netdev specific | ||||||
|  | 	  log_level setting. | ||||||
|  |  | ||||||
|  | config BATMAN_ADV_TRACING | ||||||
|  | 	bool "B.A.T.M.A.N. tracing support" | ||||||
|  | 	depends on PACKAGE_kmod-batman-adv | ||||||
|  | 	select KERNEL_FTRACE | ||||||
|  | 	select KERNEL_ENABLE_DEFAULT_TRACERS | ||||||
|  | 	help | ||||||
|  | 	  This is an option for use by developers; most people should | ||||||
|  | 	  say N here. Select this option to gather traces like the debug | ||||||
|  | 	  messages using the generic tracing infrastructure of the kernel. | ||||||
|  | 	  BATMAN_ADV_DEBUG must also be selected to get trace events for | ||||||
|  | 	  batadv_dbg. | ||||||
							
								
								
									
										101
									
								
								feeds/ipq95xx/batman-adv/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								feeds/ipq95xx/batman-adv/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | |||||||
|  | # SPDX-License-Identifier: GPL-2.0-only | ||||||
|  |  | ||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
|  | PKG_NAME:=batman-adv | ||||||
|  | PKG_VERSION:=2022.0 | ||||||
|  | PKG_RELEASE:=$(AUTORELEASE) | ||||||
|  |  | ||||||
|  | PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | ||||||
|  | PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION) | ||||||
|  | PKG_HASH:=49338705bc207709ac84d766688e702571009c827c0a320788ea51fb887714aa | ||||||
|  | PKG_EXTMOD_SUBDIRS:=net/batman-adv | ||||||
|  |  | ||||||
|  | PKG_MAINTAINER:=Simon Wunderlich <sw@simonwunderlich.de> | ||||||
|  | PKG_LICENSE:=GPL-2.0-only MIT | ||||||
|  | PKG_LICENSE_FILES:=LICENSES/preferred/GPL-2.0 LICENSES/preferred/MIT | ||||||
|  |  | ||||||
|  | PKG_BUILD_PARALLEL:=1 | ||||||
|  |  | ||||||
|  | STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backport/autoconf.h | ||||||
|  |  | ||||||
|  | PKG_CONFIG_DEPENDS += \ | ||||||
|  | 	CONFIG_BATMAN_ADV_BATMAN_V \ | ||||||
|  | 	CONFIG_BATMAN_ADV_BLA \ | ||||||
|  | 	CONFIG_BATMAN_ADV_DAT \ | ||||||
|  | 	CONFIG_BATMAN_ADV_NC \ | ||||||
|  | 	CONFIG_BATMAN_ADV_MCAST \ | ||||||
|  | 	CONFIG_BATMAN_ADV_DEBUG \ | ||||||
|  | 	CONFIG_BATMAN_ADV_TRACING | ||||||
|  |  | ||||||
|  | include $(INCLUDE_DIR)/kernel.mk | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|  | define KernelPackage/batman-adv | ||||||
|  |   SUBMENU:=Network Support | ||||||
|  |   TITLE:=B.A.T.M.A.N. Adv | ||||||
|  |   URL:=https://www.open-mesh.org/ | ||||||
|  |   DEPENDS:=+BATMAN_ADV_BLA:kmod-lib-crc16 +kmod-lib-crc32c +kmod-cfg80211 +batctl | ||||||
|  |   FILES:=$(PKG_BUILD_DIR)/net/batman-adv/batman-adv.$(LINUX_KMOD_SUFFIX) | ||||||
|  |   AUTOLOAD:=$(call AutoProbe,batman-adv) | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define KernelPackage/batman-adv/description | ||||||
|  |   B.A.T.M.A.N. (better approach to mobile ad-hoc networking) is | ||||||
|  |   a routing protocol for multi-hop ad-hoc mesh networks. The | ||||||
|  |   networks may be wired or wireless. See | ||||||
|  |   https://www.open-mesh.org/ for more information and user space | ||||||
|  |   tools. This package builds version $(PKG_VERSION) of the kernel | ||||||
|  |   module. | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define KernelPackage/batman-adv/config | ||||||
|  | 	source "$(SOURCE)/Config.in" | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/kmod-batman-adv/conffiles | ||||||
|  | /etc/config/batman-adv | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | PKG_EXTRA_KCONFIG:= \ | ||||||
|  | 	CONFIG_BATMAN_ADV=m \ | ||||||
|  | 	CONFIG_BATMAN_ADV_DEBUG=$(if $(CONFIG_BATMAN_ADV_DEBUG),y,n) \ | ||||||
|  | 	CONFIG_BATMAN_ADV_BLA=$(if $(CONFIG_BATMAN_ADV_BLA),y,n) \ | ||||||
|  | 	CONFIG_BATMAN_ADV_DAT=$(if $(CONFIG_BATMAN_ADV_DAT),y,n) \ | ||||||
|  | 	CONFIG_BATMAN_ADV_MCAST=$(if $(CONFIG_BATMAN_ADV_MCAST),y,n) \ | ||||||
|  | 	CONFIG_BATMAN_ADV_NC=$(if $(CONFIG_BATMAN_ADV_NC),y,n) \ | ||||||
|  | 	CONFIG_BATMAN_ADV_BATMAN_V=$(if $(CONFIG_BATMAN_ADV_BATMAN_V),y,n) \ | ||||||
|  | 	CONFIG_BATMAN_ADV_TRACING=$(if $(CONFIG_BATMAN_ADV_TRACING),y,n) \ | ||||||
|  |  | ||||||
|  | PKG_EXTRA_CFLAGS:= \ | ||||||
|  | 	$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(PKG_EXTRA_KCONFIG)))) \ | ||||||
|  | 	$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(PKG_EXTRA_KCONFIG)))) \ | ||||||
|  |  | ||||||
|  | NOSTDINC_FLAGS = \ | ||||||
|  | 	$(KERNEL_NOSTDINC_FLAGS) \ | ||||||
|  | 	-I$(PKG_BUILD_DIR)/net/batman-adv \ | ||||||
|  | 	-I$(STAGING_DIR)/usr/include/mac80211-backport \ | ||||||
|  | 	-I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \ | ||||||
|  | 	-I$(STAGING_DIR)/usr/include/mac80211 \ | ||||||
|  | 	-I$(STAGING_DIR)/usr/include/mac80211/uapi \ | ||||||
|  | 	-I$(PKG_BUILD_DIR)/include/ \ | ||||||
|  | 	-include backport/autoconf.h \ | ||||||
|  | 	-include backport/backport.h \ | ||||||
|  | 	-include $(PKG_BUILD_DIR)/compat-hacks.h \ | ||||||
|  | 	-DBATADV_SOURCE_VERSION=\\\"$(PKG_VERSION)-openwrt-$(PKG_RELEASE)\\\" | ||||||
|  |  | ||||||
|  | define Build/Compile | ||||||
|  | 	$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ | ||||||
|  | 		$(KERNEL_MAKE_FLAGS) \ | ||||||
|  | 		M="$(PKG_BUILD_DIR)/net/batman-adv" \ | ||||||
|  | 		$(PKG_EXTRA_KCONFIG) \ | ||||||
|  | 		EXTRA_CFLAGS="$(PKG_EXTRA_CFLAGS)" \ | ||||||
|  | 		NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \ | ||||||
|  | 		modules | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define KernelPackage/batman-adv/install | ||||||
|  | 	$(CP) ./files/. $(1)/ | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call KernelPackage,batman-adv)) | ||||||
							
								
								
									
										97
									
								
								feeds/ipq95xx/batman-adv/files/etc/uci-defaults/99-migrate-batadv_hardif
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										97
									
								
								feeds/ipq95xx/batman-adv/files/etc/uci-defaults/99-migrate-batadv_hardif
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,97 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | # This UCI-Defaults script will split the batadv proto network interfaces | ||||||
|  | # in batadv_hardif and batadv proto. The configuration options from | ||||||
|  | # /etc/config/batman-adv will be moved to the latter. | ||||||
|  |  | ||||||
|  | . /lib/functions.sh | ||||||
|  |  | ||||||
|  | proto_batadv_to_batadv_hardif() { | ||||||
|  |     local section="$1" | ||||||
|  |     local proto | ||||||
|  |     local mesh | ||||||
|  |     local routing_algo | ||||||
|  |  | ||||||
|  |     config_get proto "${section}" proto | ||||||
|  |     config_get mesh "${section}" mesh | ||||||
|  |     config_get routing_algo "${section}" routing_algo | ||||||
|  |  | ||||||
|  |     if [ -z "$mesh" -o "${proto}" != "batadv" ]; then | ||||||
|  |         continue | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     uci set network."${section}".proto="batadv_hardif" | ||||||
|  |     uci rename network."${section}".mesh="master" | ||||||
|  |     uci delete network."${section}".routing_algo | ||||||
|  |  | ||||||
|  |     # create new section or adjust existing one | ||||||
|  |     uci set network."${mesh}"=interface | ||||||
|  |     uci set network."${mesh}".proto=batadv | ||||||
|  |     [ -n "${routing_algo}" ]  && uci set network."${mesh}".routing_algo="${routing_algo}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mv_batadv_config_section() { | ||||||
|  |     local section="$1" | ||||||
|  |     local aggregated_ogms | ||||||
|  |     local ap_isolation | ||||||
|  |     local bonding | ||||||
|  |     local bridge_loop_avoidance | ||||||
|  |     local distributed_arp_table | ||||||
|  |     local fragmentation | ||||||
|  |     local gw_bandwidth | ||||||
|  |     local gw_mode | ||||||
|  |     local gw_sel_class | ||||||
|  |     local hop_penalty | ||||||
|  |     local isolation_mark | ||||||
|  |     local log_level | ||||||
|  |     local multicast_mode | ||||||
|  |     local network_coding | ||||||
|  |     local orig_interval | ||||||
|  |  | ||||||
|  |     config_get aggregated_ogms "${section}" aggregated_ogms | ||||||
|  |     config_get ap_isolation "${section}" ap_isolation | ||||||
|  |     config_get bonding "${section}" bonding | ||||||
|  |     config_get bridge_loop_avoidance "${section}" bridge_loop_avoidance | ||||||
|  |     config_get distributed_arp_table "${section}" distributed_arp_table | ||||||
|  |     config_get fragmentation "${section}" fragmentation | ||||||
|  |     config_get gw_bandwidth "${section}" gw_bandwidth | ||||||
|  |     config_get gw_mode "${section}" gw_mode | ||||||
|  |     config_get gw_sel_class "${section}" gw_sel_class | ||||||
|  |     config_get hop_penalty "${section}" hop_penalty | ||||||
|  |     config_get isolation_mark "${section}" isolation_mark | ||||||
|  |     config_get log_level "${section}" log_level | ||||||
|  |     config_get multicast_mode "${section}" multicast_mode | ||||||
|  |     config_get network_coding "${section}" network_coding | ||||||
|  |     config_get orig_interval "${section}" orig_interval | ||||||
|  |  | ||||||
|  |     # update section in case it exists | ||||||
|  |     [ -n "${aggregated_ogms}" ]  && uci set network."${section}".aggregated_ogms="${aggregated_ogms}" | ||||||
|  |     [ -n "${ap_isolation}" ]  && uci set network."${section}".ap_isolation="${ap_isolation}" | ||||||
|  |     [ -n "${bonding}" ]  && uci set network."${section}".bonding="${bonding}" | ||||||
|  |     [ -n "${bridge_loop_avoidance}" ]  && uci set network."${section}".bridge_loop_avoidance="${bridge_loop_avoidance}" | ||||||
|  |     [ -n "${distributed_arp_table}" ]  && uci set network."${section}".distributed_arp_table="${distributed_arp_table}" | ||||||
|  |     [ -n "${fragmentation}" ]  && uci set network."${section}".fragmentation="${fragmentation}" | ||||||
|  |     [ -n "${gw_bandwidth}" ]  && uci set network."${section}".gw_bandwidth="${gw_bandwidth}" | ||||||
|  |     [ -n "${gw_mode}" ]  && uci set network."${section}".gw_mode="${gw_mode}" | ||||||
|  |     [ -n "${gw_sel_class}" ]  && uci set network."${section}".gw_sel_class="${gw_sel_class}" | ||||||
|  |     [ -n "${hop_penalty}" ]  && uci set network."${section}".hop_penalty="${hop_penalty}" | ||||||
|  |     [ -n "${isolation_mark}" ]  && uci set network."${section}".isolation_mark="${isolation_mark}" | ||||||
|  |     [ -n "${log_level}" ]  && uci set network."${section}".log_level="${log_level}" | ||||||
|  |     [ -n "${multicast_mode}" ]  && uci set network."${section}".multicast_mode="${multicast_mode}" | ||||||
|  |     [ -n "${network_coding}" ]  && uci set network."${section}".network_coding="${network_coding}" | ||||||
|  |     [ -n "${orig_interval}" ]  && uci set network."${section}".orig_interval="${orig_interval}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | if [ -f /etc/config/batman-adv ]; then | ||||||
|  |     config_load network | ||||||
|  |     config_foreach proto_batadv_to_batadv_hardif 'interface' | ||||||
|  |     uci commit network | ||||||
|  |  | ||||||
|  |     config_load batman-adv | ||||||
|  |     config_foreach mv_batadv_config_section 'mesh' | ||||||
|  |     uci commit network | ||||||
|  |  | ||||||
|  |     rm -f /etc/config/batman-adv | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | exit 0 | ||||||
							
								
								
									
										123
									
								
								feeds/ipq95xx/batman-adv/files/lib/netifd/proto/batadv.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										123
									
								
								feeds/ipq95xx/batman-adv/files/lib/netifd/proto/batadv.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,123 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | [ -n "$INCLUDE_ONLY" ] || { | ||||||
|  | 	. /lib/functions.sh | ||||||
|  | 	. ../netifd-proto.sh | ||||||
|  | 	init_proto "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_batadv_init_config() { | ||||||
|  | 	no_device=1 | ||||||
|  | 	available=1 | ||||||
|  |  | ||||||
|  | 	proto_config_add_boolean 'aggregated_ogms:bool' | ||||||
|  | 	proto_config_add_boolean 'ap_isolation:bool' | ||||||
|  | 	proto_config_add_boolean 'bonding:bool' | ||||||
|  | 	proto_config_add_boolean 'bridge_loop_avoidance:bool' | ||||||
|  | 	proto_config_add_boolean 'distributed_arp_table:bool' | ||||||
|  | 	proto_config_add_boolean 'fragmentation:bool' | ||||||
|  | 	proto_config_add_string 'gw_bandwidth' | ||||||
|  | 	proto_config_add_string 'gw_mode' | ||||||
|  | 	proto_config_add_int 'gw_sel_class' | ||||||
|  | 	proto_config_add_int 'hop_penalty' | ||||||
|  | 	proto_config_add_string 'isolation_mark' | ||||||
|  | 	proto_config_add_string 'log_level' | ||||||
|  | 	proto_config_add_int 'multicast_fanout' | ||||||
|  | 	proto_config_add_boolean 'multicast_mode:bool' | ||||||
|  | 	proto_config_add_boolean 'network_coding:bool' | ||||||
|  | 	proto_config_add_int 'orig_interval' | ||||||
|  | 	proto_config_add_string 'routing_algo' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_batadv_setup() { | ||||||
|  | 	local config="$1" | ||||||
|  | 	local iface="$config" | ||||||
|  |  | ||||||
|  | 	local aggregated_ogms | ||||||
|  | 	local ap_isolation | ||||||
|  | 	local bonding | ||||||
|  | 	local bridge_loop_avoidance | ||||||
|  | 	local distributed_arp_table | ||||||
|  | 	local fragmentation | ||||||
|  | 	local gw_bandwidth | ||||||
|  | 	local gw_mode | ||||||
|  | 	local gw_sel_class | ||||||
|  | 	local hop_penalty | ||||||
|  | 	local isolation_mark | ||||||
|  | 	local log_level | ||||||
|  | 	local multicast_fanout | ||||||
|  | 	local multicast_mode | ||||||
|  | 	local network_coding | ||||||
|  | 	local orig_interval | ||||||
|  | 	local routing_algo | ||||||
|  |  | ||||||
|  | 	json_get_vars aggregated_ogms | ||||||
|  | 	json_get_vars ap_isolation | ||||||
|  | 	json_get_vars bonding | ||||||
|  | 	json_get_vars bridge_loop_avoidance | ||||||
|  | 	json_get_vars distributed_arp_table | ||||||
|  | 	json_get_vars fragmentation | ||||||
|  | 	json_get_vars gw_bandwidth | ||||||
|  | 	json_get_vars gw_mode | ||||||
|  | 	json_get_vars gw_sel_class | ||||||
|  | 	json_get_vars hop_penalty | ||||||
|  | 	json_get_vars isolation_mark | ||||||
|  | 	json_get_vars log_level | ||||||
|  | 	json_get_vars multicast_fanout | ||||||
|  | 	json_get_vars multicast_mode | ||||||
|  | 	json_get_vars network_coding | ||||||
|  | 	json_get_vars orig_interval | ||||||
|  | 	json_get_vars routing_algo | ||||||
|  |  | ||||||
|  | 	set_default routing_algo 'BATMAN_IV' | ||||||
|  |  | ||||||
|  | 	batctl routing_algo "$routing_algo" | ||||||
|  | 	batctl meshif "$iface" interface create | ||||||
|  |  | ||||||
|  | 	[ -n "$aggregated_ogms" ] && batctl meshif "$iface" aggregation "$aggregated_ogms" | ||||||
|  | 	[ -n "$ap_isolation" ] && batctl meshif "$iface" ap_isolation "$ap_isolation" | ||||||
|  | 	[ -n "$bonding" ] && batctl meshif "$iface" bonding "$bonding" | ||||||
|  | 	[ -n "$bridge_loop_avoidance" ] &&  batctl meshif "$iface" bridge_loop_avoidance "$bridge_loop_avoidance" 2>&- | ||||||
|  | 	[ -n "$distributed_arp_table" ] && batctl meshif "$iface" distributed_arp_table "$distributed_arp_table" 2>&- | ||||||
|  | 	[ -n "$fragmentation" ] && batctl meshif "$iface" fragmentation "$fragmentation" | ||||||
|  |  | ||||||
|  | 	case "$gw_mode" in | ||||||
|  | 	server) | ||||||
|  | 		if [ -n "$gw_bandwidth" ]; then | ||||||
|  | 			batctl meshif "$iface" gw_mode "server" "$gw_bandwidth" | ||||||
|  | 		else | ||||||
|  | 			batctl meshif "$iface" gw_mode "server" | ||||||
|  | 		fi | ||||||
|  | 		;; | ||||||
|  | 	client) | ||||||
|  | 		if [ -n "$gw_sel_class" ]; then | ||||||
|  | 			batctl meshif "$iface" gw_mode "client" "$gw_sel_class" | ||||||
|  | 		else | ||||||
|  | 			batctl meshif "$iface" gw_mode "client" | ||||||
|  | 		fi | ||||||
|  | 		;; | ||||||
|  | 	*) | ||||||
|  | 		batctl meshif "$iface" gw_mode "off" | ||||||
|  | 		;; | ||||||
|  | 	esac | ||||||
|  |  | ||||||
|  | 	[ -n "$hop_penalty" ] && batctl meshif "$iface" hop_penalty "$hop_penalty" | ||||||
|  | 	[ -n "$isolation_mark" ] && batctl meshif "$iface" isolation_mark "$isolation_mark" | ||||||
|  | 	[ -n "$multicast_fanout" ] && batctl meshif "$iface" multicast_fanout "$multicast_fanout" | ||||||
|  | 	[ -n "$multicast_mode" ] && batctl meshif "$iface" multicast_mode "$multicast_mode" 2>&- | ||||||
|  | 	[ -n "$network_coding" ] && batctl meshif "$iface" network_coding "$network_coding" 2>&- | ||||||
|  | 	[ -n "$log_level" ] && batctl meshif "$iface" loglevel "$log_level" 2>&- | ||||||
|  | 	[ -n "$orig_interval" ] && batctl meshif "$iface" orig_interval "$orig_interval" | ||||||
|  |  | ||||||
|  | 	proto_init_update "$iface" 1 | ||||||
|  | 	proto_send_update "$config" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_batadv_teardown() { | ||||||
|  | 	local config="$1" | ||||||
|  | 	local iface="$config" | ||||||
|  |  | ||||||
|  | 	batctl meshif "$iface" interface destroy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add_protocol batadv | ||||||
							
								
								
									
										53
									
								
								feeds/ipq95xx/batman-adv/files/lib/netifd/proto/batadv_hardif.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										53
									
								
								feeds/ipq95xx/batman-adv/files/lib/netifd/proto/batadv_hardif.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | [ -n "$INCLUDE_ONLY" ] || { | ||||||
|  | 	. /lib/functions.sh | ||||||
|  | 	. ../netifd-proto.sh | ||||||
|  | 	init_proto "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_batadv_hardif_init_config() { | ||||||
|  | 	proto_config_add_int 'elp_interval' | ||||||
|  | 	proto_config_add_int 'hop_penalty' | ||||||
|  | 	proto_config_add_string "master" | ||||||
|  | 	proto_config_add_string 'throughput_override' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_batadv_hardif_setup() { | ||||||
|  | 	local config="$1" | ||||||
|  | 	local iface="$2" | ||||||
|  |  | ||||||
|  | 	local elp_interval | ||||||
|  | 	local hop_penalty | ||||||
|  | 	local master | ||||||
|  | 	local throughput_override | ||||||
|  |  | ||||||
|  | 	json_get_vars elp_interval | ||||||
|  | 	json_get_vars hop_penalty | ||||||
|  | 	json_get_vars master | ||||||
|  | 	json_get_vars throughput_override | ||||||
|  |  | ||||||
|  | 	( proto_add_host_dependency "$config" '' "$master" ) | ||||||
|  |  | ||||||
|  | 	batctl meshif "$master" interface -M add "$iface" | ||||||
|  |  | ||||||
|  | 	[ -n "$elp_interval" ] && batctl hardif "$iface" elp_interval "$elp_interval" | ||||||
|  | 	[ -n "$hop_penalty" ] && batctl hardif "$iface" hop_penalty "$hop_penalty" | ||||||
|  | 	[ -n "$throughput_override" ] && batctl hardif "$iface" throughput_override "$throughput_override" | ||||||
|  |  | ||||||
|  | 	proto_init_update "$iface" 1 | ||||||
|  | 	proto_send_update "$config" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_batadv_hardif_teardown() { | ||||||
|  | 	local config="$1" | ||||||
|  | 	local iface="$2" | ||||||
|  |  | ||||||
|  | 	local master | ||||||
|  |  | ||||||
|  | 	json_get_vars master | ||||||
|  |  | ||||||
|  | 	batctl meshif "$master" interface -M del "$iface" || true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add_protocol batadv_hardif | ||||||
							
								
								
									
										25
									
								
								feeds/ipq95xx/batman-adv/files/lib/netifd/proto/batadv_vlan.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								feeds/ipq95xx/batman-adv/files/lib/netifd/proto/batadv_vlan.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | . /lib/functions.sh | ||||||
|  | . ../netifd-proto.sh | ||||||
|  | init_proto "$@" | ||||||
|  |  | ||||||
|  | proto_batadv_vlan_init_config() { | ||||||
|  | 	proto_config_add_boolean 'ap_isolation:bool' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_batadv_vlan_setup() { | ||||||
|  | 	local config="$1" | ||||||
|  | 	local iface="$2" | ||||||
|  |  | ||||||
|  | 	# batadv_vlan options | ||||||
|  | 	local ap_isolation | ||||||
|  |  | ||||||
|  | 	json_get_vars ap_isolation | ||||||
|  |  | ||||||
|  | 	[ -n "$ap_isolation" ] && batctl vlan "$iface" ap_isolation "$ap_isolation" | ||||||
|  | 	proto_init_update "$iface" 1 | ||||||
|  | 	proto_send_update "$config" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add_protocol batadv_vlan | ||||||
| @@ -0,0 +1,128 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Sat, 24 Oct 2020 22:51:23 +0200 | ||||||
|  | Subject: Revert "batman-adv: genetlink: move to smaller ops wherever possible" | ||||||
|  |  | ||||||
|  | The netlink genl_ops interface was splitted into two parts for Linux 5.10. | ||||||
|  | The batman-adv code changed to the new one because it doesn't use the more | ||||||
|  | complex policy handling of genl_ops. But the backports-5.8-1 version in | ||||||
|  | OpenWrt doesn't yet support the new genl_small_ops. | ||||||
|  |  | ||||||
|  | This patch must be dropped directly when OpenWrt switches to backports-5.10 | ||||||
|  | or newer - otherwise it will not work as expected. | ||||||
|  |  | ||||||
|  | This reverts commit 725b4ef5be840cfcd0ca33b9393c14dee40c10f7. | ||||||
|  |  | ||||||
|  | --- a/compat-include/net/genetlink.h | ||||||
|  | +++ b/compat-include/net/genetlink.h | ||||||
|  | @@ -31,17 +31,15 @@ void batadv_genl_dump_check_consistent(s | ||||||
|  |  #endif /* LINUX_VERSION_IS_LESS(4, 15, 0) */ | ||||||
|  |   | ||||||
|  |   | ||||||
|  | -#if LINUX_VERSION_IS_LESS(5, 10, 0) | ||||||
|  | - | ||||||
|  |  #if LINUX_VERSION_IS_LESS(5, 2, 0) | ||||||
|  | + | ||||||
|  |  enum genl_validate_flags { | ||||||
|  |  	GENL_DONT_VALIDATE_STRICT		= BIT(0), | ||||||
|  |  	GENL_DONT_VALIDATE_DUMP			= BIT(1), | ||||||
|  |  	GENL_DONT_VALIDATE_DUMP_STRICT		= BIT(2), | ||||||
|  |  }; | ||||||
|  | -#endif /* LINUX_VERSION_IS_LESS(5, 2, 0) */ | ||||||
|  |   | ||||||
|  | -struct batadv_genl_small_ops { | ||||||
|  | +struct batadv_genl_ops { | ||||||
|  |  	int		       (*doit)(struct sk_buff *skb, | ||||||
|  |  				       struct genl_info *info); | ||||||
|  |  	int		       (*dumpit)(struct sk_buff *skb, | ||||||
|  | @@ -70,9 +68,9 @@ struct batadv_genl_family { | ||||||
|  |  			 struct genl_info *info); | ||||||
|  |          void (*post_doit)(const struct genl_ops *ops, struct sk_buff *skb, | ||||||
|  |  			  struct genl_info *info); | ||||||
|  | -	const struct batadv_genl_small_ops *small_ops; | ||||||
|  | +	const struct batadv_genl_ops *ops; | ||||||
|  |  	const struct genl_multicast_group *mcgrps; | ||||||
|  | -	unsigned int n_small_ops; | ||||||
|  | +	unsigned int n_ops; | ||||||
|  |  	unsigned int n_mcgrps; | ||||||
|  |  	struct module *module; | ||||||
|  |   | ||||||
|  | @@ -96,32 +94,24 @@ static inline int batadv_genl_register_f | ||||||
|  |  	family->family.pre_doit = family->pre_doit; | ||||||
|  |  	family->family.post_doit = family->post_doit; | ||||||
|  |  	family->family.mcgrps = family->mcgrps; | ||||||
|  | -	family->family.n_ops = family->n_small_ops; | ||||||
|  | +	family->family.n_ops = family->n_ops; | ||||||
|  |  	family->family.n_mcgrps = family->n_mcgrps; | ||||||
|  |  	family->family.module = family->module; | ||||||
|  |   | ||||||
|  | -	ops = kzalloc(sizeof(*ops) * family->n_small_ops, GFP_KERNEL); | ||||||
|  | +	ops = kzalloc(sizeof(*ops) * family->n_ops, GFP_KERNEL); | ||||||
|  |  	if (!ops) | ||||||
|  |  		return -ENOMEM; | ||||||
|  |   | ||||||
|  |  	for (i = 0; i < family->family.n_ops; i++) { | ||||||
|  | -		ops[i].doit = family->small_ops[i].doit; | ||||||
|  | -		ops[i].dumpit = family->small_ops[i].dumpit; | ||||||
|  | -		ops[i].done = family->small_ops[i].done; | ||||||
|  | -		ops[i].cmd = family->small_ops[i].cmd; | ||||||
|  | -		ops[i].internal_flags = family->small_ops[i].internal_flags; | ||||||
|  | -		ops[i].flags = family->small_ops[i].flags; | ||||||
|  | -#if LINUX_VERSION_IS_GEQ(5, 2, 0) | ||||||
|  | -		ops[i].validate = family->small_ops[i].validate; | ||||||
|  | -#else | ||||||
|  | +		ops[i].doit = family->ops[i].doit; | ||||||
|  | +		ops[i].dumpit = family->ops[i].dumpit; | ||||||
|  | +		ops[i].done = family->ops[i].done; | ||||||
|  | +		ops[i].cmd = family->ops[i].cmd; | ||||||
|  | +		ops[i].internal_flags = family->ops[i].internal_flags; | ||||||
|  | +		ops[i].flags = family->ops[i].flags; | ||||||
|  |  		ops[i].policy = family->policy; | ||||||
|  | -#endif | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -#if LINUX_VERSION_IS_GEQ(5, 2, 0) | ||||||
|  | -	family->family.policy = family->policy; | ||||||
|  | -#endif | ||||||
|  | - | ||||||
|  |  	family->family.ops = ops; | ||||||
|  |  	family->copy_ops = ops; | ||||||
|  |   | ||||||
|  | @@ -136,7 +126,7 @@ typedef struct genl_ops batadv_genl_ops_ | ||||||
|  |  #define batadv_post_doit(__x, __y, __z) \ | ||||||
|  |  	batadv_post_doit(const batadv_genl_ops_old *ops, __y, __z) | ||||||
|  |   | ||||||
|  | -#define genl_small_ops batadv_genl_small_ops | ||||||
|  | +#define genl_ops batadv_genl_ops | ||||||
|  |  #define genl_family batadv_genl_family | ||||||
|  |   | ||||||
|  |  #define genl_register_family(family) \ | ||||||
|  | @@ -160,6 +150,6 @@ batadv_genl_unregister_family(struct bat | ||||||
|  |  	genlmsg_multicast_netns(&(_family)->family, _net, _skb, _portid, \ | ||||||
|  |  				_group, _flags) | ||||||
|  |   | ||||||
|  | -#endif /* LINUX_VERSION_IS_LESS(5, 10, 0) */ | ||||||
|  | +#endif /* LINUX_VERSION_IS_LESS(5, 2, 0) */ | ||||||
|  |   | ||||||
|  |  #endif /* _NET_BATMAN_ADV_COMPAT_NET_GENETLINK_H_ */ | ||||||
|  | --- a/net/batman-adv/netlink.c | ||||||
|  | +++ b/net/batman-adv/netlink.c | ||||||
|  | @@ -1357,7 +1357,7 @@ static void batadv_post_doit(const struc | ||||||
|  |  	} | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static const struct genl_small_ops batadv_netlink_ops[] = { | ||||||
|  | +static const struct genl_ops batadv_netlink_ops[] = { | ||||||
|  |  	{ | ||||||
|  |  		.cmd = BATADV_CMD_GET_MESH, | ||||||
|  |  		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, | ||||||
|  | @@ -1491,8 +1491,8 @@ struct genl_family batadv_netlink_family | ||||||
|  |  	.pre_doit = batadv_pre_doit, | ||||||
|  |  	.post_doit = batadv_post_doit, | ||||||
|  |  	.module = THIS_MODULE, | ||||||
|  | -	.small_ops = batadv_netlink_ops, | ||||||
|  | -	.n_small_ops = ARRAY_SIZE(batadv_netlink_ops), | ||||||
|  | +	.ops = batadv_netlink_ops, | ||||||
|  | +	.n_ops = ARRAY_SIZE(batadv_netlink_ops), | ||||||
|  |  	.mcgrps = batadv_netlink_mcgrps, | ||||||
|  |  	.n_mcgrps = ARRAY_SIZE(batadv_netlink_mcgrps), | ||||||
|  |  }; | ||||||
| @@ -0,0 +1,116 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Thu, 28 Jan 2021 21:06:51 +0100 | ||||||
|  | Subject: Revert "batman-adv: Add new include for min/max helpers" | ||||||
|  |  | ||||||
|  | The OpenWrt kernel sources and backports sources are currently missing this | ||||||
|  | header. | ||||||
|  |  | ||||||
|  | This reverts commit 1810de05310d5c5e9140f870ac21052f38bc06b8. | ||||||
|  |  | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  |  | ||||||
|  | --- a/compat-include/linux/minmax.h | ||||||
|  | +++ /dev/null | ||||||
|  | @@ -1,20 +0,0 @@ | ||||||
|  | -/* SPDX-License-Identifier: GPL-2.0 */ | ||||||
|  | -/* Copyright (C) B.A.T.M.A.N. contributors: | ||||||
|  | - * | ||||||
|  | - * Marek Lindner, Simon Wunderlich | ||||||
|  | - * | ||||||
|  | - * This file contains macros for maintaining compatibility with older versions | ||||||
|  | - * of the Linux kernel. | ||||||
|  | - */ | ||||||
|  | - | ||||||
|  | -#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_MINMAX_H_ | ||||||
|  | -#define _NET_BATMAN_ADV_COMPAT_LINUX_MINMAX_H_ | ||||||
|  | - | ||||||
|  | -#include <linux/version.h> | ||||||
|  | -#if LINUX_VERSION_IS_GEQ(5, 10, 0) | ||||||
|  | -#include_next <linux/minmax.h> | ||||||
|  | -#else | ||||||
|  | -#include <linux/kernel.h> | ||||||
|  | -#endif | ||||||
|  | - | ||||||
|  | -#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_MINMAX_H_ */ | ||||||
|  | --- a/net/batman-adv/bat_v.c | ||||||
|  | +++ b/net/batman-adv/bat_v.c | ||||||
|  | @@ -15,7 +15,6 @@ | ||||||
|  |  #include <linux/jiffies.h> | ||||||
|  |  #include <linux/kref.h> | ||||||
|  |  #include <linux/list.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/netlink.h> | ||||||
|  |  #include <linux/rculist.h> | ||||||
|  | --- a/net/batman-adv/bat_v_elp.c | ||||||
|  | +++ b/net/batman-adv/bat_v_elp.c | ||||||
|  | @@ -18,7 +18,6 @@ | ||||||
|  |  #include <linux/jiffies.h> | ||||||
|  |  #include <linux/kernel.h> | ||||||
|  |  #include <linux/kref.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/nl80211.h> | ||||||
|  |  #include <linux/prandom.h> | ||||||
|  | --- a/net/batman-adv/bat_v_ogm.c | ||||||
|  | +++ b/net/batman-adv/bat_v_ogm.c | ||||||
|  | @@ -18,7 +18,6 @@ | ||||||
|  |  #include <linux/kref.h> | ||||||
|  |  #include <linux/list.h> | ||||||
|  |  #include <linux/lockdep.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/mutex.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/prandom.h> | ||||||
|  | --- a/net/batman-adv/fragmentation.c | ||||||
|  | +++ b/net/batman-adv/fragmentation.c | ||||||
|  | @@ -14,8 +14,8 @@ | ||||||
|  |  #include <linux/gfp.h> | ||||||
|  |  #include <linux/if_ether.h> | ||||||
|  |  #include <linux/jiffies.h> | ||||||
|  | +#include <linux/kernel.h> | ||||||
|  |  #include <linux/lockdep.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/skbuff.h> | ||||||
|  |  #include <linux/slab.h> | ||||||
|  | --- a/net/batman-adv/hard-interface.c | ||||||
|  | +++ b/net/batman-adv/hard-interface.c | ||||||
|  | @@ -17,7 +17,6 @@ | ||||||
|  |  #include <linux/kref.h> | ||||||
|  |  #include <linux/limits.h> | ||||||
|  |  #include <linux/list.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/mutex.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/printk.h> | ||||||
|  | --- a/net/batman-adv/main.c | ||||||
|  | +++ b/net/batman-adv/main.c | ||||||
|  | @@ -23,7 +23,6 @@ | ||||||
|  |  #include <linux/kobject.h> | ||||||
|  |  #include <linux/kref.h> | ||||||
|  |  #include <linux/list.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/module.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/printk.h> | ||||||
|  | --- a/net/batman-adv/netlink.c | ||||||
|  | +++ b/net/batman-adv/netlink.c | ||||||
|  | @@ -23,7 +23,6 @@ | ||||||
|  |  #include <linux/kernel.h> | ||||||
|  |  #include <linux/limits.h> | ||||||
|  |  #include <linux/list.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/netlink.h> | ||||||
|  |  #include <linux/printk.h> | ||||||
|  | --- a/net/batman-adv/tp_meter.c | ||||||
|  | +++ b/net/batman-adv/tp_meter.c | ||||||
|  | @@ -23,7 +23,6 @@ | ||||||
|  |  #include <linux/kthread.h> | ||||||
|  |  #include <linux/limits.h> | ||||||
|  |  #include <linux/list.h> | ||||||
|  | -#include <linux/minmax.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  |  #include <linux/param.h> | ||||||
|  |  #include <linux/printk.h> | ||||||
| @@ -0,0 +1,34 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Fri, 14 May 2021 19:34:35 +0200 | ||||||
|  | Subject: batman-adv: Fix build of multicast code against Linux < 5.13 | ||||||
|  |  | ||||||
|  | Fixes: 007b4c4b031f ("batman-adv: convert ifmcaddr6 to RCU") | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/multicast.c | ||||||
|  | +++ b/net/batman-adv/multicast.c | ||||||
|  | @@ -422,9 +422,14 @@ batadv_mcast_mla_softif_get_ipv6(struct | ||||||
|  |  		return 0; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +#if LINUX_VERSION_IS_LESS(5, 13, 0) | ||||||
|  | +	read_lock_bh(&in6_dev->lock); | ||||||
|  | +	for (pmc6 = in6_dev->mc_list; pmc6; pmc6 = pmc6->next) { | ||||||
|  | +#else | ||||||
|  |  	for (pmc6 = rcu_dereference(in6_dev->mc_list); | ||||||
|  |  	     pmc6; | ||||||
|  |  	     pmc6 = rcu_dereference(pmc6->next)) { | ||||||
|  | +#endif | ||||||
|  |  		if (IPV6_ADDR_MC_SCOPE(&pmc6->mca_addr) < | ||||||
|  |  		    IPV6_ADDR_SCOPE_LINKLOCAL) | ||||||
|  |  			continue; | ||||||
|  | @@ -453,6 +458,9 @@ batadv_mcast_mla_softif_get_ipv6(struct | ||||||
|  |  		hlist_add_head(&new->list, mcast_list); | ||||||
|  |  		ret++; | ||||||
|  |  	} | ||||||
|  | +#if LINUX_VERSION_IS_LESS(5, 13, 0) | ||||||
|  | +	read_unlock_bh(&in6_dev->lock); | ||||||
|  | +#endif | ||||||
|  |  	rcu_read_unlock(); | ||||||
|  |   | ||||||
|  |  	return ret; | ||||||
| @@ -0,0 +1,19 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Tue, 14 Sep 2021 21:02:10 +0200 | ||||||
|  | Subject: Revert "batman-adv: Switch to kstrtox.h for kstrtou64" | ||||||
|  |  | ||||||
|  | This header is only available after Linux 5.14 | ||||||
|  |  | ||||||
|  | This reverts commit c9a69cb4048ebef3a4d91835669011a26d9b7dab. | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/gateway_common.c | ||||||
|  | +++ b/net/batman-adv/gateway_common.c | ||||||
|  | @@ -10,7 +10,7 @@ | ||||||
|  |  #include <linux/atomic.h> | ||||||
|  |  #include <linux/byteorder/generic.h> | ||||||
|  |  #include <linux/errno.h> | ||||||
|  | -#include <linux/kstrtox.h> | ||||||
|  | +#include <linux/kernel.h> | ||||||
|  |  #include <linux/limits.h> | ||||||
|  |  #include <linux/math64.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
| @@ -0,0 +1,19 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Tue, 14 Sep 2021 21:07:34 +0200 | ||||||
|  | Subject: Revert "batman-adv: use Linux's stdarg.h" | ||||||
|  |  | ||||||
|  | This header is only available since Linux 5.15 | ||||||
|  |  | ||||||
|  | This reverts commit 36d059797a14f0e373fdc3c79df7b467435925ad. | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/log.c | ||||||
|  | +++ b/net/batman-adv/log.c | ||||||
|  | @@ -7,7 +7,7 @@ | ||||||
|  |  #include "log.h" | ||||||
|  |  #include "main.h" | ||||||
|  |   | ||||||
|  | -#include <linux/stdarg.h> | ||||||
|  | +#include <stdarg.h> | ||||||
|  |   | ||||||
|  |  #include "trace.h" | ||||||
|  |   | ||||||
| @@ -0,0 +1,27 @@ | |||||||
|  | From: Eric Dumazet <edumazet@google.com> | ||||||
|  | Date: Wed, 2 Mar 2022 20:05:13 +0100 | ||||||
|  | Subject: batman-adv: make mc_forwarding atomic | ||||||
|  |  | ||||||
|  | This fixes minor data-races in ip6_mc_input() and | ||||||
|  | batadv_mcast_mla_rtr_flags_softif_get_ipv6() | ||||||
|  |  | ||||||
|  | Signed-off-by: Eric Dumazet <edumazet@google.com> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
|  | [sven@narfation.org: Add ugly hack to get it building with old kernels] | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/56db7c0540e733a1f063ccd6bab1b537a80857eb | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/multicast.c | ||||||
|  | +++ b/net/batman-adv/multicast.c | ||||||
|  | @@ -134,7 +134,11 @@ static u8 batadv_mcast_mla_rtr_flags_sof | ||||||
|  |  { | ||||||
|  |  	struct inet6_dev *in6_dev = __in6_dev_get(dev); | ||||||
|  |   | ||||||
|  | +#if LINUX_VERSION_IS_GEQ(5, 18, 0) // UGLY_HACK_NEW | ||||||
|  | +	if (in6_dev && atomic_read(&in6_dev->cnf.mc_forwarding)) | ||||||
|  | +#else // UGLY_HACK_OLD | ||||||
|  |  	if (in6_dev && in6_dev->cnf.mc_forwarding) | ||||||
|  | +#endif // UGLY_HACK_STOP | ||||||
|  |  		return BATADV_NO_FLAGS; | ||||||
|  |  	else | ||||||
|  |  		return BATADV_MCAST_WANT_NO_RTR6; | ||||||
| @@ -0,0 +1,23 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Fri, 15 Apr 2022 15:12:45 +0200 | ||||||
|  | Subject: batman-adv: compat: Add atomic mc_fowarding support for stable kernels | ||||||
|  |  | ||||||
|  | Fixes: 56db7c0540e7 ("batman-adv: make mc_forwarding atomic") | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/350adcaec82fbaa358a2406343b6130ac8dad126 | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/multicast.c | ||||||
|  | +++ b/net/batman-adv/multicast.c | ||||||
|  | @@ -134,7 +134,11 @@ static u8 batadv_mcast_mla_rtr_flags_sof | ||||||
|  |  { | ||||||
|  |  	struct inet6_dev *in6_dev = __in6_dev_get(dev); | ||||||
|  |   | ||||||
|  | -#if LINUX_VERSION_IS_GEQ(5, 18, 0) // UGLY_HACK_NEW | ||||||
|  | +#if (LINUX_VERSION_IS_GEQ(5, 4, 189) && LINUX_VERSION_IS_LESS(5, 5, 0)) || /* UGLY_HACK */ \ | ||||||
|  | +    (LINUX_VERSION_IS_GEQ(5, 10, 111) && LINUX_VERSION_IS_LESS(5, 11, 0)) || /* UGLY_HACK */ \ | ||||||
|  | +    (LINUX_VERSION_IS_GEQ(5, 15, 34) && LINUX_VERSION_IS_LESS(5, 16, 0)) || /* UGLY_HACK */ \ | ||||||
|  | +    (LINUX_VERSION_IS_GEQ(5, 16, 20) && LINUX_VERSION_IS_LESS(5, 17, 0)) || /* UGLY_HACK */ \ | ||||||
|  | +    LINUX_VERSION_IS_GEQ(5, 17, 3) // UGLY_HACK_NEW | ||||||
|  |  	if (in6_dev && atomic_read(&in6_dev->cnf.mc_forwarding)) | ||||||
|  |  #else // UGLY_HACK_OLD | ||||||
|  |  	if (in6_dev && in6_dev->cnf.mc_forwarding) | ||||||
| @@ -0,0 +1,44 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Wed, 2 Mar 2022 19:49:44 +0100 | ||||||
|  | Subject: batman-adv: Request iflink once in batadv-on-batadv check | ||||||
|  |  | ||||||
|  | There is no need to call dev_get_iflink multiple times for the same | ||||||
|  | net_device in batadv_is_on_batman_iface. And since some of the | ||||||
|  | .ndo_get_iflink callbacks are dynamic (for example via RCUs like in | ||||||
|  | vxcan_get_iflink), it could easily happen that the returned values are not | ||||||
|  | stable. The pre-checks before __dev_get_by_index are then of course bogus. | ||||||
|  |  | ||||||
|  | Fixes: 3d48811b27f5 ("batman-adv: prevent using any virtual device created on batman-adv as hard-interface") | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/f6c0c45356fe3ab9c5e01b81d060f8a436658037 | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/hard-interface.c | ||||||
|  | +++ b/net/batman-adv/hard-interface.c | ||||||
|  | @@ -148,22 +148,23 @@ static bool batadv_is_on_batman_iface(co | ||||||
|  |  	struct net *net = dev_net(net_dev); | ||||||
|  |  	struct net_device *parent_dev; | ||||||
|  |  	struct net *parent_net; | ||||||
|  | +	int iflink; | ||||||
|  |  	bool ret; | ||||||
|  |   | ||||||
|  |  	/* check if this is a batman-adv mesh interface */ | ||||||
|  |  	if (batadv_softif_is_valid(net_dev)) | ||||||
|  |  		return true; | ||||||
|  |   | ||||||
|  | +	iflink = dev_get_iflink(net_dev); | ||||||
|  | + | ||||||
|  |  	/* no more parents..stop recursion */ | ||||||
|  | -	if (dev_get_iflink(net_dev) == 0 || | ||||||
|  | -	    dev_get_iflink(net_dev) == net_dev->ifindex) | ||||||
|  | +	if (iflink == 0 || iflink == net_dev->ifindex) | ||||||
|  |  		return false; | ||||||
|  |   | ||||||
|  |  	parent_net = batadv_getlink_net(net_dev, net); | ||||||
|  |   | ||||||
|  |  	/* recurse over the parent device */ | ||||||
|  | -	parent_dev = __dev_get_by_index((struct net *)parent_net, | ||||||
|  | -					dev_get_iflink(net_dev)); | ||||||
|  | +	parent_dev = __dev_get_by_index((struct net *)parent_net, iflink); | ||||||
|  |  	/* if we got a NULL parent_dev there is something broken.. */ | ||||||
|  |  	if (!parent_dev) { | ||||||
|  |  		pr_err("Cannot find parent device\n"); | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Wed, 2 Mar 2022 19:49:45 +0100 | ||||||
|  | Subject: batman-adv: Request iflink once in batadv_get_real_netdevice | ||||||
|  |  | ||||||
|  | There is no need to call dev_get_iflink multiple times for the same | ||||||
|  | net_device in batadv_get_real_netdevice. And since some of the | ||||||
|  | ndo_get_iflink callbacks are dynamic (for example via RCUs like in | ||||||
|  | vxcan_get_iflink), it could easily happen that the returned values are not | ||||||
|  | stable. The pre-checks before __dev_get_by_index are then of course bogus. | ||||||
|  |  | ||||||
|  | Fixes: 2b45bb6c3aad ("batman-adv: additional checks for virtual interfaces on top of WiFi") | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/445f477ec3e805425186f5fbe8ed0fe89cc226b6 | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/hard-interface.c | ||||||
|  | +++ b/net/batman-adv/hard-interface.c | ||||||
|  | @@ -214,14 +214,16 @@ static struct net_device *batadv_get_rea | ||||||
|  |  	struct net_device *real_netdev = NULL; | ||||||
|  |  	struct net *real_net; | ||||||
|  |  	struct net *net; | ||||||
|  | -	int ifindex; | ||||||
|  | +	int iflink; | ||||||
|  |   | ||||||
|  |  	ASSERT_RTNL(); | ||||||
|  |   | ||||||
|  |  	if (!netdev) | ||||||
|  |  		return NULL; | ||||||
|  |   | ||||||
|  | -	if (netdev->ifindex == dev_get_iflink(netdev)) { | ||||||
|  | +	iflink = dev_get_iflink(netdev); | ||||||
|  | + | ||||||
|  | +	if (netdev->ifindex == iflink) { | ||||||
|  |  		dev_hold(netdev); | ||||||
|  |  		return netdev; | ||||||
|  |  	} | ||||||
|  | @@ -231,9 +233,8 @@ static struct net_device *batadv_get_rea | ||||||
|  |  		goto out; | ||||||
|  |   | ||||||
|  |  	net = dev_net(hard_iface->soft_iface); | ||||||
|  | -	ifindex = dev_get_iflink(netdev); | ||||||
|  |  	real_net = batadv_getlink_net(netdev, net); | ||||||
|  | -	real_netdev = dev_get_by_index(real_net, ifindex); | ||||||
|  | +	real_netdev = dev_get_by_index(real_net, iflink); | ||||||
|  |   | ||||||
|  |  out: | ||||||
|  |  	batadv_hardif_put(hard_iface); | ||||||
| @@ -0,0 +1,86 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Wed, 2 Mar 2022 19:49:46 +0100 | ||||||
|  | Subject: batman-adv: Don't expect inter-netns unique iflink indices | ||||||
|  |  | ||||||
|  | The ifindex doesn't have to be unique for multiple network namespaces on | ||||||
|  | the same machine. | ||||||
|  |  | ||||||
|  |   $ ip netns add test1 | ||||||
|  |   $ ip -net test1 link add dummy1 type dummy | ||||||
|  |   $ ip netns add test2 | ||||||
|  |   $ ip -net test2 link add dummy2 type dummy | ||||||
|  |  | ||||||
|  |   $ ip -net test1 link show dev dummy1 | ||||||
|  |   6: dummy1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 | ||||||
|  |       link/ether 96:81:55:1e:dd:85 brd ff:ff:ff:ff:ff:ff | ||||||
|  |   $ ip -net test2 link show dev dummy2 | ||||||
|  |   6: dummy2: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 | ||||||
|  |       link/ether 5a:3c:af:35:07:c3 brd ff:ff:ff:ff:ff:ff | ||||||
|  |  | ||||||
|  | But the batman-adv code to walk through the various layers of virtual | ||||||
|  | interfaces uses this assumption because dev_get_iflink handles it | ||||||
|  | internally and doesn't return the actual netns of the iflink. And | ||||||
|  | dev_get_iflink only documents the situation where ifindex == iflink for | ||||||
|  | physical devices. | ||||||
|  |  | ||||||
|  | But only checking for dev->netdev_ops->ndo_get_iflink is also not an option | ||||||
|  | because ipoib_get_iflink implements it even when it sometimes returns an | ||||||
|  | iflink != ifindex and sometimes iflink == ifindex. The caller must | ||||||
|  | therefore make sure itself to check both netns and iflink + ifindex for | ||||||
|  | equality. Only when they are equal, a "physical" interface was detected | ||||||
|  | which should stop the traversal. On the other hand, vxcan_get_iflink can | ||||||
|  | also return 0 in case there was currently no valid peer. In this case, it | ||||||
|  | is still necessary to stop. | ||||||
|  |  | ||||||
|  | Fixes: 3d48811b27f5 ("batman-adv: prevent using any virtual device created on batman-adv as hard-interface") | ||||||
|  | Fixes: 2b45bb6c3aad ("batman-adv: additional checks for virtual interfaces on top of WiFi") | ||||||
|  | Reported-by: Sabrina Dubroca <sd@queasysnail.net> | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/0aac7a9fbbbeec25f2f54a9e6d53ea91217ba720 | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/hard-interface.c | ||||||
|  | +++ b/net/batman-adv/hard-interface.c | ||||||
|  | @@ -156,13 +156,15 @@ static bool batadv_is_on_batman_iface(co | ||||||
|  |  		return true; | ||||||
|  |   | ||||||
|  |  	iflink = dev_get_iflink(net_dev); | ||||||
|  | - | ||||||
|  | -	/* no more parents..stop recursion */ | ||||||
|  | -	if (iflink == 0 || iflink == net_dev->ifindex) | ||||||
|  | +	if (iflink == 0) | ||||||
|  |  		return false; | ||||||
|  |   | ||||||
|  |  	parent_net = batadv_getlink_net(net_dev, net); | ||||||
|  |   | ||||||
|  | +	/* iflink to itself, most likely physical device */ | ||||||
|  | +	if (net == parent_net && iflink == net_dev->ifindex) | ||||||
|  | +		return false; | ||||||
|  | + | ||||||
|  |  	/* recurse over the parent device */ | ||||||
|  |  	parent_dev = __dev_get_by_index((struct net *)parent_net, iflink); | ||||||
|  |  	/* if we got a NULL parent_dev there is something broken.. */ | ||||||
|  | @@ -222,8 +224,7 @@ static struct net_device *batadv_get_rea | ||||||
|  |  		return NULL; | ||||||
|  |   | ||||||
|  |  	iflink = dev_get_iflink(netdev); | ||||||
|  | - | ||||||
|  | -	if (netdev->ifindex == iflink) { | ||||||
|  | +	if (iflink == 0) { | ||||||
|  |  		dev_hold(netdev); | ||||||
|  |  		return netdev; | ||||||
|  |  	} | ||||||
|  | @@ -234,6 +235,14 @@ static struct net_device *batadv_get_rea | ||||||
|  |   | ||||||
|  |  	net = dev_net(hard_iface->soft_iface); | ||||||
|  |  	real_net = batadv_getlink_net(netdev, net); | ||||||
|  | + | ||||||
|  | +	/* iflink to itself, most likely physical device */ | ||||||
|  | +	if (net == real_net && netdev->ifindex == iflink) { | ||||||
|  | +		real_netdev = netdev; | ||||||
|  | +		dev_hold(real_netdev); | ||||||
|  | +		goto out; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	real_netdev = dev_get_by_index(real_net, iflink); | ||||||
|  |   | ||||||
|  |  out: | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | From: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Date: Sat, 16 Apr 2022 14:24:34 +0200 | ||||||
|  | Subject: batman-adv: Don't skb_split skbuffs with frag_list | ||||||
|  |  | ||||||
|  | The receiving interface might have used GRO to receive more fragments than | ||||||
|  | MAX_SKB_FRAGS fragments. In this case, these will not be stored in | ||||||
|  | skb_shinfo(skb)->frags but merged into the frag list. | ||||||
|  |  | ||||||
|  | batman-adv relies on the function skb_split to split packets up into | ||||||
|  | multiple smaller packets which are not larger than the MTU on the outgoing | ||||||
|  | interface. But this function cannot handle frag_list entries and is only | ||||||
|  | operating on skb_shinfo(skb)->frags. If it is still trying to split such an | ||||||
|  | skb and xmit'ing it on an interface without support for NETIF_F_FRAGLIST, | ||||||
|  | then validate_xmit_skb() will try to linearize it. But this fails due to | ||||||
|  | inconsistent information. And __pskb_pull_tail will trigger a BUG_ON after | ||||||
|  | skb_copy_bits() returns an error. | ||||||
|  |  | ||||||
|  | In case of entries in frag_list, just linearize the skb before operating on | ||||||
|  | it with skb_split(). | ||||||
|  |  | ||||||
|  | Reported-by: Felix Kaechele <felix@kaechele.ca> | ||||||
|  | Tested-by: Felix Kaechele <felix@kaechele.ca> | ||||||
|  | Fixes: 9de347143505 ("batman-adv: layer2 unicast packet fragmentation") | ||||||
|  | Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||||
|  | Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/d467720acaf1b22b0cee58144eeaf9ef6c5e285c | ||||||
|  |  | ||||||
|  | --- a/net/batman-adv/fragmentation.c | ||||||
|  | +++ b/net/batman-adv/fragmentation.c | ||||||
|  | @@ -475,6 +475,17 @@ int batadv_frag_send_packet(struct sk_bu | ||||||
|  |  		goto free_skb; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	/* GRO might have added fragments to the fragment list instead of | ||||||
|  | +	 * frags[]. But this is not handled by skb_split and must be | ||||||
|  | +	 * linearized to avoid incorrect length information after all | ||||||
|  | +	 * batman-adv fragments were created and submitted to the | ||||||
|  | +	 * hard-interface | ||||||
|  | +	 */ | ||||||
|  | +	if (skb_has_frag_list(skb) && __skb_linearize(skb)) { | ||||||
|  | +		ret = -ENOMEM; | ||||||
|  | +		goto free_skb; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	/* Create one header to be copied to all fragments */ | ||||||
|  |  	frag_header.packet_type = BATADV_UNICAST_FRAG; | ||||||
|  |  	frag_header.version = BATADV_COMPAT_VERSION; | ||||||
							
								
								
									
										179
									
								
								feeds/ipq95xx/batman-adv/src/compat-hacks.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								feeds/ipq95xx/batman-adv/src/compat-hacks.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,179 @@ | |||||||
|  | /* Please avoid adding hacks here - instead add it to mac80211/backports.git */ | ||||||
|  |  | ||||||
|  | #undef CONFIG_MODULE_STRIPPED | ||||||
|  |  | ||||||
|  | #include <linux/version.h>	/* LINUX_VERSION_CODE */ | ||||||
|  | #include <linux/types.h> | ||||||
|  |  | ||||||
|  | #if LINUX_VERSION_IS_LESS(5, 10, 0) | ||||||
|  |  | ||||||
|  | #include <linux/if_bridge.h> | ||||||
|  |  | ||||||
|  | struct batadv_br_ip { | ||||||
|  | 	union { | ||||||
|  | 		__be32  ip4; | ||||||
|  | #if IS_ENABLED(CONFIG_IPV6) | ||||||
|  | 		struct in6_addr ip6; | ||||||
|  | #endif | ||||||
|  | 	} dst; | ||||||
|  | 	__be16          proto; | ||||||
|  | 	__u16           vid; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct batadv_br_ip_list { | ||||||
|  | 	struct list_head list; | ||||||
|  | 	struct batadv_br_ip addr; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #if 0 | ||||||
|  | /* "static" dropped to force compiler to evaluate it as part of multicast.c | ||||||
|  |  * might need to be added again and then called in some kind of dummy | ||||||
|  |  * compat.c in case this header is included in multiple files. | ||||||
|  |  */ | ||||||
|  | inline void __batadv_br_ip_list_check(void) | ||||||
|  | { | ||||||
|  | 	BUILD_BUG_ON(sizeof(struct batadv_br_ip_list) != sizeof(struct br_ip_list)); | ||||||
|  | 	BUILD_BUG_ON(offsetof(struct batadv_br_ip_list, list) != offsetof(struct br_ip_list, list)); | ||||||
|  | 	BUILD_BUG_ON(offsetof(struct batadv_br_ip_list, addr) != offsetof(struct br_ip_list, addr)); | ||||||
|  |  | ||||||
|  | 	BUILD_BUG_ON(sizeof(struct batadv_br_ip) != sizeof(struct br_ip)); | ||||||
|  | 	BUILD_BUG_ON(offsetof(struct batadv_br_ip, dst.ip4) != offsetof(struct br_ip, u.ip4)); | ||||||
|  | 	BUILD_BUG_ON(offsetof(struct batadv_br_ip, dst.ip6) != offsetof(struct br_ip, u.ip6)); | ||||||
|  | 	BUILD_BUG_ON(offsetof(struct batadv_br_ip, proto) != offsetof(struct br_ip, proto)); | ||||||
|  | 	BUILD_BUG_ON(offsetof(struct batadv_br_ip, vid) != offsetof(struct br_ip, vid)); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define br_ip batadv_br_ip | ||||||
|  | #define br_ip_list batadv_br_ip_list | ||||||
|  |  | ||||||
|  | #endif /* LINUX_VERSION_IS_LESS(5, 10, 0) */ | ||||||
|  |  | ||||||
|  | #if LINUX_VERSION_IS_LESS(5, 14, 0) | ||||||
|  |  | ||||||
|  | #include <linux/if_bridge.h> | ||||||
|  | #include <net/addrconf.h> | ||||||
|  |  | ||||||
|  | #if IS_ENABLED(CONFIG_IPV6) | ||||||
|  | static inline bool | ||||||
|  | br_multicast_has_router_adjacent(struct net_device *dev, int proto) | ||||||
|  | { | ||||||
|  | 	struct list_head bridge_mcast_list = LIST_HEAD_INIT(bridge_mcast_list); | ||||||
|  | 	struct br_ip_list *br_ip_entry, *tmp; | ||||||
|  | 	int ret; | ||||||
|  |  | ||||||
|  | 	if (proto != ETH_P_IPV6) | ||||||
|  | 		return true; | ||||||
|  |  | ||||||
|  | 	ret = br_multicast_list_adjacent(dev, &bridge_mcast_list); | ||||||
|  | 	if (ret < 0) | ||||||
|  | 		return true; | ||||||
|  |  | ||||||
|  | 	ret = false; | ||||||
|  |  | ||||||
|  | 	list_for_each_entry_safe(br_ip_entry, tmp, &bridge_mcast_list, list) { | ||||||
|  | 		if (br_ip_entry->addr.proto == htons(ETH_P_IPV6) && | ||||||
|  | 		    ipv6_addr_is_ll_all_routers(&br_ip_entry->addr.dst.ip6)) | ||||||
|  | 			ret = true; | ||||||
|  |  | ||||||
|  | 		list_del(&br_ip_entry->list); | ||||||
|  | 		kfree(br_ip_entry); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | static inline bool | ||||||
|  | br_multicast_has_router_adjacent(struct net_device *dev, int proto) | ||||||
|  | { | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* LINUX_VERSION_IS_LESS(5, 14, 0) */ | ||||||
|  |  | ||||||
|  | #if LINUX_VERSION_IS_LESS(5, 15, 0) | ||||||
|  |  | ||||||
|  | static inline void batadv_eth_hw_addr_set(struct net_device *dev, | ||||||
|  | 					  const u8 *addr) | ||||||
|  | { | ||||||
|  | 	ether_addr_copy(dev->dev_addr, addr); | ||||||
|  | } | ||||||
|  | #define eth_hw_addr_set batadv_eth_hw_addr_set | ||||||
|  |  | ||||||
|  | #endif /* LINUX_VERSION_IS_LESS(5, 15, 0) */ | ||||||
|  |  | ||||||
|  | /* <DECLARE_EWMA> */ | ||||||
|  |  | ||||||
|  | #include <linux/version.h> | ||||||
|  | #include_next <linux/average.h> | ||||||
|  |  | ||||||
|  | #include <linux/bug.h> | ||||||
|  |  | ||||||
|  | #ifdef DECLARE_EWMA | ||||||
|  | #undef DECLARE_EWMA | ||||||
|  | #endif /* DECLARE_EWMA */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Exponentially weighted moving average (EWMA) | ||||||
|  |  * | ||||||
|  |  * This implements a fixed-precision EWMA algorithm, with both the | ||||||
|  |  * precision and fall-off coefficient determined at compile-time | ||||||
|  |  * and built into the generated helper funtions. | ||||||
|  |  * | ||||||
|  |  * The first argument to the macro is the name that will be used | ||||||
|  |  * for the struct and helper functions. | ||||||
|  |  * | ||||||
|  |  * The second argument, the precision, expresses how many bits are | ||||||
|  |  * used for the fractional part of the fixed-precision values. | ||||||
|  |  * | ||||||
|  |  * The third argument, the weight reciprocal, determines how the | ||||||
|  |  * new values will be weighed vs. the old state, new values will | ||||||
|  |  * get weight 1/weight_rcp and old values 1-1/weight_rcp. Note | ||||||
|  |  * that this parameter must be a power of two for efficiency. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #define DECLARE_EWMA(name, _precision, _weight_rcp)			\ | ||||||
|  | 	struct ewma_##name {						\ | ||||||
|  | 		unsigned long internal;					\ | ||||||
|  | 	};								\ | ||||||
|  | 	static inline void ewma_##name##_init(struct ewma_##name *e)	\ | ||||||
|  | 	{								\ | ||||||
|  | 		BUILD_BUG_ON(!__builtin_constant_p(_precision));	\ | ||||||
|  | 		BUILD_BUG_ON(!__builtin_constant_p(_weight_rcp));	\ | ||||||
|  | 		/*							\ | ||||||
|  | 		 * Even if you want to feed it just 0/1 you should have	\ | ||||||
|  | 		 * some bits for the non-fractional part...		\ | ||||||
|  | 		 */							\ | ||||||
|  | 		BUILD_BUG_ON((_precision) > 30);			\ | ||||||
|  | 		BUILD_BUG_ON_NOT_POWER_OF_2(_weight_rcp);		\ | ||||||
|  | 		e->internal = 0;					\ | ||||||
|  | 	}								\ | ||||||
|  | 	static inline unsigned long					\ | ||||||
|  | 	ewma_##name##_read(struct ewma_##name *e)			\ | ||||||
|  | 	{								\ | ||||||
|  | 		BUILD_BUG_ON(!__builtin_constant_p(_precision));	\ | ||||||
|  | 		BUILD_BUG_ON(!__builtin_constant_p(_weight_rcp));	\ | ||||||
|  | 		BUILD_BUG_ON((_precision) > 30);			\ | ||||||
|  | 		BUILD_BUG_ON_NOT_POWER_OF_2(_weight_rcp);		\ | ||||||
|  | 		return e->internal >> (_precision);			\ | ||||||
|  | 	}								\ | ||||||
|  | 	static inline void ewma_##name##_add(struct ewma_##name *e,	\ | ||||||
|  | 					     unsigned long val)		\ | ||||||
|  | 	{								\ | ||||||
|  | 		unsigned long internal = READ_ONCE(e->internal);	\ | ||||||
|  | 		unsigned long weight_rcp = ilog2(_weight_rcp);		\ | ||||||
|  | 		unsigned long precision = _precision;			\ | ||||||
|  | 									\ | ||||||
|  | 		BUILD_BUG_ON(!__builtin_constant_p(_precision));	\ | ||||||
|  | 		BUILD_BUG_ON(!__builtin_constant_p(_weight_rcp));	\ | ||||||
|  | 		BUILD_BUG_ON((_precision) > 30);			\ | ||||||
|  | 		BUILD_BUG_ON_NOT_POWER_OF_2(_weight_rcp);		\ | ||||||
|  | 									\ | ||||||
|  | 		WRITE_ONCE(e->internal, internal ?			\ | ||||||
|  | 			(((internal << weight_rcp) - internal) +	\ | ||||||
|  | 				(val << precision)) >> weight_rcp :	\ | ||||||
|  | 			(val << precision));				\ | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | /* </DECLARE_EWMA> */ | ||||||
							
								
								
									
										82
									
								
								feeds/ipq95xx/ftm/Makefile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										82
									
								
								feeds/ipq95xx/ftm/Makefile
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
|  | PKG:=ftm | ||||||
|  | PKG_NAME:=$(PKG) | ||||||
|  | PKG_RELEASE:=1 | ||||||
|  |  | ||||||
|  | LOCAL_SRC:=$(TOPDIR)/qca/src/common-tools/ftm | ||||||
|  |  | ||||||
|  | PKG_VERSION:=12.3 | ||||||
|  |  | ||||||
|  | #PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG) | ||||||
|  |  | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|  | define Package/$(PKG_NAME) | ||||||
|  |   SECTION:=QCA | ||||||
|  |   CATEGORY:=QTI software | ||||||
|  |   URL:=http://www.qca.qualcomm.com | ||||||
|  |   MAINTAINER:=Qualcomm Atheros | ||||||
|  |   TITLE:= QCA ftm utils | ||||||
|  |   DEPENDS:= @TARGET_ipq_ipq807x||TARGET_ipq_ipq807x_64||TARGET_ipq_ipq60xx||TARGET_ipq_ipq60xx_64||TARGET_ipq_ipq50xx||TARGET_ipq_ipq50xx_64||TARGET_ipq807x||TARGET_ipq50xx||TARGET_ipq60xx||TARGET_ipq95xx||TARGET_ipq53xx +libnl +libtcmd +qca-diag +librt +kmod-diag-char | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/$(PKG_NAME)/description/Default | ||||||
|  | 	FTM Package Support for QCA WIFI 11 drivers | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | TARGET_CFLAGS += -DCONFIG_FTM_WLAN -DDEBUG -DFTM_DEBUG -DWIN_AP_HOST | ||||||
|  | TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/qca-diag | ||||||
|  | TARGET_CFLAGS += -MMD -O2 -Wall -g | ||||||
|  | TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include | ||||||
|  | TARGET_CFLAGS += -fpie | ||||||
|  | TARGET_LDFLAGS += -ldiag -lnl-3 -lnl-genl-3 -lrt -ltcmd | ||||||
|  | TARGET_CSRCS := ftm_main.c ftm_wlan.c ftm_write_to_flash.c | ||||||
|  | TARGET_LDFLAGS += -pie | ||||||
|  |  | ||||||
|  | ifeq ($(CONFIG_FEATURE_IPQ_PROVISION_SUPPORT),y) | ||||||
|  |         TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/qti-mfg-provision | ||||||
|  |         TARGET_CFLAGS += -DWIN_AP_AFC | ||||||
|  |         TARGET_LDFLAGS += -lprovision | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifneq ($(CONFIG_PACKAGE_kmod-mac80211),) | ||||||
|  |         TARGET_CFLAGS+=-DWIN_AP_HOST_OPEN=1 | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(CONFIG_FEATURE_QCA_IOT),y) | ||||||
|  | TARGET_CFLAGS += -DIPQ_AP_HOST_IOT -DIPQ_AP_HOST_IOT_QCA402X -ggdb3 -DCONFIG_DAEMON_MODE | ||||||
|  | TARGET_CSRCS += ftm_iot.c | ||||||
|  | TARGET_LDFLAGS += -lpthread | ||||||
|  | TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/qca-iot | ||||||
|  | TARGET_LDFLAGS += -ldiag_demo | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(CONFIG_FEATURE_IPQ_IOT_SUPPORT),y) | ||||||
|  | TARGET_CFLAGS += -DIPQ_AP_HOST_IOT -DIPQ_AP_HOST_IOT_IPQ -ggdb3 -I$(STAGING_DIR)/usr/include/btdaemon | ||||||
|  | TARGET_CSRCS += ftm_iot.c | ||||||
|  | TARGET_LDFLAGS += -lpthread -lbtdaemon | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | define Build/Compile | ||||||
|  | $(MAKE) -C $(PKG_BUILD_DIR) \ | ||||||
|  | 	CC="$(TARGET_CC)" \ | ||||||
|  | 	CFLAGS="$(TARGET_CFLAGS)" \ | ||||||
|  | 	LDFLAGS="$(TARGET_LDFLAGS)" \ | ||||||
|  | 	CSRCS="$(TARGET_CSRCS)" | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Package/$(PKG_NAME)/install | ||||||
|  | 	$(INSTALL_DIR) $(1)/usr/sbin | ||||||
|  | 	$(INSTALL_DIR) $(1)/etc/init.d | ||||||
|  | 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/ftm $(1)/usr/sbin/ | ||||||
|  | 	$(INSTALL_BIN) ./files/ftm.init $(1)/etc/init.d/ftm | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/wifi | ||||||
|  | 	$(INSTALL_BIN) ./files/compress_vart.sh $(1)/lib/compress_vart.sh | ||||||
|  | ifneq (, $(findstring ipq95xx, $(CONFIG_TARGET_BOARD))) | ||||||
|  | 	$(INSTALL_DIR) $(1)/sbin | ||||||
|  | 	$(INSTALL_BIN) ./files/ftm_qcc710_start.sh $(1)/sbin/ftm_qcc710_start | ||||||
|  | endif | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call BuildPackage,ftm)) | ||||||
							
								
								
									
										75
									
								
								feeds/ipq95xx/ftm/files/compress_vart.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										75
									
								
								feeds/ipq95xx/ftm/files/compress_vart.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # Copyright (c) 2020 Qualcomm Technologies, Inc. | ||||||
|  | # | ||||||
|  | #  All Rights Reserved. | ||||||
|  | # Confidential and Proprietary - Qualcomm Technologies, Inc. | ||||||
|  | # | ||||||
|  | # | ||||||
|  |  | ||||||
|  | [ -e /lib/functions.sh ] && . /lib/functions.sh | ||||||
|  | [ -e /lib/ipq806x.sh ] && . /lib/ipq806x.sh | ||||||
|  | [ -e /lib/functions/boot.sh ] && . /lib/functions/boot.sh | ||||||
|  |  | ||||||
|  | low_mem_compress_art() | ||||||
|  | { | ||||||
|  | 	local mtdblock=$(find_mtd_part 0:ART) | ||||||
|  |  | ||||||
|  | 	if [ -z "$mtdblock" ]; then | ||||||
|  | 	    # read from mmc | ||||||
|  | 	    mtdblock=$(find_mmc_part 0:ART) | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	[ -n "$mtdblock" ] || return | ||||||
|  |  | ||||||
|  |         local apmp="/tmp" | ||||||
|  |  | ||||||
|  |         lzma -zvfk -4 ${apmp}/virtual_art.bin 2> /dev/null || { | ||||||
|  |                 echo "Error Compressing Virtual ART" > /dev/console | ||||||
|  |                 return | ||||||
|  |         } | ||||||
|  |  | ||||||
|  | 	dd if=${apmp}/virtual_art.bin.lzma of=${mtdblock} | ||||||
|  |         echo "Success compressing Virtual ART(${mtdblock})" > /dev/console | ||||||
|  |         return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | normal_art() | ||||||
|  | { | ||||||
|  | 	local mtdblock=$(find_mtd_part 0:ART) | ||||||
|  |  | ||||||
|  | 	if [ -z "$mtdblock" ]; then | ||||||
|  | 	    # read from mmc | ||||||
|  | 	    mtdblock=$(find_mmc_part 0:ART) | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	[ -n "$mtdblock" ] || return | ||||||
|  |  | ||||||
|  | 	local apmp="/tmp" | ||||||
|  |  | ||||||
|  | 	dd if=${apmp}/virtual_art.bin of=${mtdblock} | ||||||
|  | 	echo "Success writing to ART(${mtdblock})" > /dev/console | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | write_caldata() | ||||||
|  | { | ||||||
|  | 	local board | ||||||
|  | 	[ -f /tmp/sysinfo/board_name ] && { | ||||||
|  | 		board=ap$(cat /tmp/sysinfo/board_name | awk -F 'ap' '{print$2}') | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if [ -e /sys/firmware/devicetree/base/compressed_art ] | ||||||
|  | 	then | ||||||
|  | 		echo "Compressed ART Supported Platform $board " > /dev/console | ||||||
|  | 		low_mem_compress_art | ||||||
|  | 	else | ||||||
|  | 		echo "Non Compressed ART Platform $board " > /dev/console | ||||||
|  | 		normal_art | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | if [ "$1" = "write_caldata" ] | ||||||
|  | then | ||||||
|  |         write_caldata | ||||||
|  | fi | ||||||
							
								
								
									
										99
									
								
								feeds/ipq95xx/ftm/files/ftm.init
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										99
									
								
								feeds/ipq95xx/ftm/files/ftm.init
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,99 @@ | |||||||
|  | #!/bin/sh /etc/rc.common | ||||||
|  | # | ||||||
|  | # Copyright (c) 2013, 2017, 2020 Qualcomm Technologies, Inc. | ||||||
|  | # | ||||||
|  | # All Rights Reserved. | ||||||
|  | # Confidential and Proprietary - Qualcomm Technologies, Inc. | ||||||
|  | # | ||||||
|  | # 2013 Qualcomm Atheros, Inc. | ||||||
|  | # | ||||||
|  | # All Rights Reserved. | ||||||
|  | # Qualcomm Atheros Confidential and Proprietary | ||||||
|  | # | ||||||
|  |  | ||||||
|  | [ -e /lib/functions.sh ] && . /lib/functions.sh | ||||||
|  | [ -e /lib/ipq806x.sh ] && . /lib/ipq806x.sh | ||||||
|  | [ -e /lib/functions/boot.sh ] && . /lib/functions/boot.sh | ||||||
|  |  | ||||||
|  | START=97 | ||||||
|  | SERVICE_DAEMONIZE=1 | ||||||
|  | SERVICE_WRITE_PID=1 | ||||||
|  |  | ||||||
|  | MTD_ART_PART_NAME="art" | ||||||
|  |  | ||||||
|  | compressed_art_read() { | ||||||
|  | 	local mtdblock=$(find_mtd_part 0:ART) | ||||||
|  |  | ||||||
|  | 	if [ -z "$mtdblock" ]; then | ||||||
|  | 		#read from mmc | ||||||
|  | 		mtdblock=$(find_mmc_part 0:ART) | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	[ -n "$mtdblock" ] || return | ||||||
|  |  | ||||||
|  | 	local apmp="/tmp" | ||||||
|  |  | ||||||
|  | 	dd if=${mtdblock} of=${apmp}/virtual_art.bin.lzma | ||||||
|  | 	lzma -fdv --single-stream ${apmp}/virtual_art.bin.lzma || { | ||||||
|  | 	# Create dummy virtual_art.bin file of size 512K | ||||||
|  | 	dd if=/dev/zero of=${apmp}/virtual_art.bin bs=1024 count=512 | ||||||
|  | 	} | ||||||
|  | 	echo "Uncompressed and Copied ART content from ${mtdblock} to /tmp/virtual_art.bin" > /dev/console | ||||||
|  | } | ||||||
|  |  | ||||||
|  | raw_art_read() { | ||||||
|  | 	local mtdblock=$(find_mtd_part 0:ART) | ||||||
|  |  | ||||||
|  | 	if [ -z "$mtdblock" ]; then | ||||||
|  | 		#read from mmc | ||||||
|  | 		mtdblock=$(find_mmc_part 0:ART) | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	[ -n "$mtdblock" ] || return | ||||||
|  |  | ||||||
|  | 	local apmp="/tmp" | ||||||
|  |  | ||||||
|  | 	dd if=${mtdblock} of=${apmp}/virtual_art.bin | ||||||
|  | 	echo "Copy ART caldata from ${mtdblock} to /tmp/virtual_art.bin" > /dev/console | ||||||
|  | } | ||||||
|  |  | ||||||
|  | retrieve_caldata() { | ||||||
|  | 	local board | ||||||
|  | 	[ -f /tmp/sysinfo/board_name ] && { | ||||||
|  | 		board=ap$(cat /tmp/sysinfo/board_name | awk -F 'ap' '{print$2}') | ||||||
|  | 	} | ||||||
|  | 	echo "**** Platform Name: $board *****" > /dev/console | ||||||
|  |  | ||||||
|  | 	if [ -e /sys/firmware/devicetree/base/compressed_art ] | ||||||
|  | 	then | ||||||
|  | 		compressed_art_read | ||||||
|  | 	else | ||||||
|  | 		raw_art_read | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | start() { | ||||||
|  | 	local emmc_flash="" | ||||||
|  | 	local nor_flash="" | ||||||
|  |  | ||||||
|  | 	emmc_flash=$(find_mmc_part 0:ART 2> /dev/null) | ||||||
|  | 	mtd_name=$(grep -i -w ${MTD_ART_PART_NAME} /proc/mtd | cut -f1 -d:) | ||||||
|  | 	nor_flash=`find /sys/bus/spi/devices/*/mtd -name ${mtd_name} 2> /dev/null` | ||||||
|  |  | ||||||
|  | 	if [ -n "$emmc_flash" ]; then | ||||||
|  | 		[ -L /dev/caldata ] || \ | ||||||
|  | 			ln -s $emmc_flash /dev/caldata | ||||||
|  | 	elif [ -n "$nor_flash" ]; then | ||||||
|  | 		[ -L /dev/caldata ] || \ | ||||||
|  | 			ln -s /dev/${mtd_name//mtd/mtdblock} /dev/caldata | ||||||
|  | 	elif [ -n "$mtd_name" ]; then | ||||||
|  | 		[ -L /dev/caldata ] || \ | ||||||
|  | 			ln -s /dev/${mtd_name//mtd/mtdblock} /dev/caldata | ||||||
|  | 	fi | ||||||
|  | 	retrieve_caldata | ||||||
|  | } | ||||||
|  |  | ||||||
|  | stop() { | ||||||
|  | 	[ -L /dev/caldata ] && rm /dev/caldata | ||||||
|  | } | ||||||
							
								
								
									
										86
									
								
								feeds/ipq95xx/ftm/files/ftm_qcc710_start.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										86
									
								
								feeds/ipq95xx/ftm/files/ftm_qcc710_start.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,86 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # Copyright (c) 2021 Qualcomm Technologies, Inc. | ||||||
|  | # | ||||||
|  | # All Rights Reserved. | ||||||
|  | # Confidential and Proprietary - Qualcomm Technologies, Inc. | ||||||
|  | # | ||||||
|  | # | ||||||
|  |  | ||||||
|  | # QCC710 v1.0 reset for BT bringup | ||||||
|  | qcc710_reset() { | ||||||
|  | 	reset_gpio_pin=$(cat /proc/device-tree/soc/pinctrl@1000000/QCC710_pins/QCC710_reset/pins | sed s/"gpio"//) | ||||||
|  | 	[[ -z $reset_gpio_pin ]] && return | ||||||
|  | 	gpio_base=$(cat /sys/class/gpio/gpiochip*/base | head -n1) | ||||||
|  | 	gpio_reset=$(( gpio_base + reset_gpio_pin )) | ||||||
|  | 	if [[ ! -e /sys/class/gpio/gpio$gpio_reset ]]; then | ||||||
|  | 		[ -z ${SLEEP} ] && echo -e "Enter sleep value for reset. Options:\n10 \n1" && read -p "Enter : "  SLEEP | ||||||
|  | 		[ -z ${SLEEP} ] && SLEEP=10 | ||||||
|  | 		echo $gpio_reset > /sys/class/gpio/export | ||||||
|  | 		echo out > /sys/class/gpio/gpio$gpio_reset/direction | ||||||
|  | 		echo "Performing QCC710 reset ...." > /dev/console | ||||||
|  | 		{ echo 1 > /sys/class/gpio/gpio$gpio_reset/value ; \ | ||||||
|  | 			sleep $SLEEP; \ | ||||||
|  | 			echo 0 > /sys/class/gpio/gpio$gpio_reset/value; \ | ||||||
|  | 			echo "QCC710 reset complete ...." > /dev/console; } | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | while [ -n "$1" ]; do | ||||||
|  | 	case "$1" in | ||||||
|  | 		-h|--help) HELP=1; break;; | ||||||
|  | 		-a|--ipaddr) SERVERIP="$2";shift;; | ||||||
|  | 		-s|--sleep) SLEEP="$2";shift;; | ||||||
|  | 		-r|--baud-rate) BAUDRATE="$2";shift;; | ||||||
|  | 		-*) | ||||||
|  | 			echo "Invalid option: $1" | ||||||
|  | 			ERROR=1; | ||||||
|  | 			break | ||||||
|  | 		;; | ||||||
|  | 		*)break;; | ||||||
|  | 	esac | ||||||
|  | 	shift | ||||||
|  | done | ||||||
|  | [ -n "$HELP" -o -n "$ERROR" ] && { | ||||||
|  | 	        cat <<EOF | ||||||
|  | Usage: $0 [-h] [-a SERVERIP] [-r baud-rate] [-s sleep] | ||||||
|  | ftm_qcc710_start options: | ||||||
|  | 	-h	print this help | ||||||
|  | 	-a	ipaddr of the server for diag connection | ||||||
|  | 	-r	baudrate | ||||||
|  | 	-s	sleep | ||||||
|  |  | ||||||
|  | Example: | ||||||
|  | ftm_qcc710_start -a <serverip> -r <baud-rate> -s <sleep> | ||||||
|  |  | ||||||
|  | version 1 : ./sbin/ftm_qcc710_start -a 192.168.1.121 -r 2000000 -s 10 | ||||||
|  | version 2 : ./sbin/ftm_qcc710_start -a 192.168.1.121 -r 115200 -s 1 | ||||||
|  | EOF | ||||||
|  | 	# If we requested the help flag, then exit normally. | ||||||
|  | 	# Else, it's probably an error so report it as such. | ||||||
|  | 	[ -n "$HELP" ] && exit 0 | ||||||
|  | 	exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | [ -z ${SERVERIP} ] && SERVERIP=$(grep -oh "serverip.*#"  /proc/cmdline  | awk -F '#' '{print $2}') | ||||||
|  | [ -z ${SERVERIP} ] && read -p "No serverip in cmdline, please enter the serverip : "  SERVERIP | ||||||
|  | [ -z ${BAUDRATE} ] && echo -e "Enter baudrate for stack bringup. Options:\n2000000\n115200" && read -p "Enter : "  BAUDRATE | ||||||
|  | [ -z ${BAUDRATE} ] && BAUDRATE=2000000 | ||||||
|  | qcc710_reset | ||||||
|  | DIAG_PID=$(ps | grep diag_socket_app | grep -v grep | awk '{print $1}') | ||||||
|  | while [ -n "$DIAG_PID" ] | ||||||
|  | do | ||||||
|  |     kill -s SIGTERM $DIAG_PID | ||||||
|  |     DIAG_PID=$(ps | grep diag_socket_app | grep -v grep | awk '{print $1}') | ||||||
|  | done | ||||||
|  | echo "Stopped previous instances of diag_socket_app process" | ||||||
|  | [ -z "$DIAG_PID" ] && /usr/sbin/diag_socket_app -a $SERVERIP -p 2500 & | ||||||
|  |  | ||||||
|  | FTM_PID=$(ps | grep "ftm " | grep -v grep | awk '{print $1}') | ||||||
|  | while [ -n "$FTM_PID" ] | ||||||
|  | do | ||||||
|  |     kill -s SIGTERM $FTM_PID | ||||||
|  |     FTM_PID=$(ps | grep "ftm " | grep -v grep | awk '{print $1}') | ||||||
|  | done | ||||||
|  | echo "Stopped previous instances ftm process" | ||||||
|  | [ -z "$FTM_PID" ] && /usr/sbin/ftm -n -dd -r $BAUDRATE | ||||||
							
								
								
									
										133
									
								
								feeds/ipq95xx/ftm/src/Android.mk
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										133
									
								
								feeds/ipq95xx/ftm/src/Android.mk
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,133 @@ | |||||||
|  | ifeq ($(call is-vendor-board-platform,QCOM),true) | ||||||
|  |  | ||||||
|  | # Build only if board has BT/FM/WLAN | ||||||
|  | ifeq ($(findstring true, $(BOARD_HAVE_QCOM_FM) $(BOARD_HAVE_BLUETOOTH) $(BOARD_HAS_ATH_WLAN_AR6320)),true) | ||||||
|  |  | ||||||
|  | LOCAL_PATH:= $(call my-dir) | ||||||
|  |  | ||||||
|  | BDROID_DIR:= system/bt | ||||||
|  | ifeq ($(TARGET_SUPPORTS_WEARABLES),true) | ||||||
|  | QTI_DIR  := hardware/qcom/bt/msm8909/libbt-vendor | ||||||
|  | else | ||||||
|  | QTI_DIR  := hardware/qcom/bt/libbt-vendor | ||||||
|  | endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | include $(CLEAR_VARS) | ||||||
|  |  | ||||||
|  | LOCAL_C_INCLUDES := $(TARGET_OUT_HEADERS)/diag/include \ | ||||||
|  | LOCAL_C_INCLUDES += vendor/qcom/proprietary/diag/src \ | ||||||
|  | LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/common/inc \ | ||||||
|  | LOCAL_C_INCLUDES += vendor/qcom/proprietary/bt/hci_qcomm_init \ | ||||||
|  | LOCAL_C_INCLUDES += vendor/qcom/opensource/fm/helium \ | ||||||
|  | LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \ | ||||||
|  | LOCAL_C_INCLUDES += $(BDROID_DIR)/hci/include \ | ||||||
|  | LOCAL_C_INCLUDES += $(QTI_DIR)/include | ||||||
|  | ifeq ($(TARGET_SUPPORTS_WEARABLES),true) | ||||||
|  | LOCAL_C_INCLUDES += device/qcom/msm8909w/opensource/bluetooth/tools/hidl_client/inc | ||||||
|  | else | ||||||
|  | LOCAL_C_INCLUDES += vendor/qcom/opensource/bluetooth/tools/hidl_client/inc | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr | ||||||
|  |  | ||||||
|  | LOCAL_CFLAGS:= \ | ||||||
|  |               -DANDROID \ | ||||||
|  |               -DDEBUG | ||||||
|  |  | ||||||
|  | #LOCAL_CFLAGS += -include bionic/libc/include/sys/socket.h | ||||||
|  | #LOCAL_CFLAGS += -include bionic/libc/include/netinet/in.h | ||||||
|  |  | ||||||
|  | ifneq ($(DISABLE_BT_FTM),true) | ||||||
|  | LOCAL_CFLAGS +=  -DCONFIG_FTM_BT | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(BOARD_HAVE_QCOM_FM),true) | ||||||
|  | LOCAL_CFLAGS +=  -DCONFIG_FTM_FM | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(BOARD_HAS_QCA_FM_SOC), "cherokee") | ||||||
|  | LOCAL_CFLAGS += -DFM_SOC_TYPE_CHEROKEE | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifneq ($(BOARD_ANT_WIRELESS_DEVICE), ) | ||||||
|  | LOCAL_CFLAGS +=  -DCONFIG_FTM_ANT | ||||||
|  | endif | ||||||
|  | LOCAL_CFLAGS +=  -DCONFIG_FTM_NFC | ||||||
|  |  | ||||||
|  | ifeq ($(BOARD_HAVE_BLUETOOTH_BLUEZ), true) | ||||||
|  |     LOCAL_CFLAGS += -DHAS_BLUEZ_BUILDCFG | ||||||
|  | endif # BOARD_HAVE_BLUETOOTH_BLUEZ | ||||||
|  |  | ||||||
|  | LOCAL_SRC_FILES:= \ | ||||||
|  |     ftm_main.c \ | ||||||
|  |     ftm_nfc.c \ | ||||||
|  |     ftm_nfcnq.c \ | ||||||
|  |     ftm_nfcqti.c \ | ||||||
|  |     ftm_nfcnq_fwdl.c \ | ||||||
|  |     ftm_nfcnq_test.c | ||||||
|  |  | ||||||
|  | ifneq ($(DISABLE_BT_FTM),true) | ||||||
|  | LOCAL_SRC_FILES += \ | ||||||
|  |     ftm_bt.c \ | ||||||
|  |     ftm_bt_power_pfal_linux.c \ | ||||||
|  |     ftm_bt_hci_pfal_linux.c \ | ||||||
|  |     ftm_bt_persist.cpp | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(call is-platform-sdk-version-at-least,23),true) | ||||||
|  | LOCAL_CFLAGS += -DANDROID_M | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(BOARD_HAVE_QCOM_FM),true) | ||||||
|  | ifeq ($(BOARD_HAS_QCA_FM_SOC), "cherokee") | ||||||
|  | LOCAL_SRC_FILES += ftm_fm.c ftm_fm_pfal_linux_3990.c | ||||||
|  | else | ||||||
|  | LOCAL_SRC_FILES += ftm_fm.c ftm_fm_pfal_linux.c | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifneq ($(BOARD_ANT_WIRELESS_DEVICE), ) | ||||||
|  | LOCAL_SRC_FILES += ftm_ant.c | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(findstring true, $(BOARD_HAS_ATH_WLAN) $(BOARD_HAS_ATH_WLAN_AR6320)),true) | ||||||
|  | LOCAL_CFLAGS += -DBOARD_HAS_ATH_WLAN_AR6320 | ||||||
|  | LOCAL_CFLAGS +=  -DCONFIG_FTM_WLAN | ||||||
|  | LOCAL_CFLAGS +=  -DCONFIG_FTM_WLAN_AUTOLOAD | ||||||
|  | LOCAL_STATIC_LIBRARIES += libtcmd | ||||||
|  | LOCAL_SHARED_LIBRARIES += libnl | ||||||
|  | LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/libtcmd | ||||||
|  | LOCAL_SRC_FILES  += ftm_wlan.c | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | LOCAL_SHARED_LIBRARIES += libdl | ||||||
|  |  | ||||||
|  | ifneq ($(DISABLE_BT_FTM),true) | ||||||
|  | LOCAL_SHARED_LIBRARIES += libbt-hidlclient | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES) | ||||||
|  | LOCAL_MODULE:= ftmdaemon | ||||||
|  | LOCAL_CLANG := true | ||||||
|  | ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true) | ||||||
|  | LOCAL_PROPRIETARY_MODULE := true | ||||||
|  | endif | ||||||
|  | LOCAL_MODULE_TAGS := optional | ||||||
|  | LOCAL_SHARED_LIBRARIES  += libdiag | ||||||
|  | LOCAL_SHARED_LIBRARIES  += libcutils liblog libhardware | ||||||
|  |  | ||||||
|  | ifneq ($(DISABLE_BT_FTM),true) | ||||||
|  | LOCAL_SHARED_LIBRARIES  += libbtnv | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | # By default NV persist gets used | ||||||
|  | LOCAL_CFLAGS += -DBT_NV_SUPPORT | ||||||
|  |  | ||||||
|  | LDFLAGS += -ldl | ||||||
|  |  | ||||||
|  | include $(BUILD_EXECUTABLE) | ||||||
|  | include $(call all-makefiles-under,$(LOCAL_PATH)) | ||||||
|  |  | ||||||
|  | endif # filter | ||||||
|  | endif # is-vendor-board-platform | ||||||
							
								
								
									
										181
									
								
								feeds/ipq95xx/ftm/src/LICENSE
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										181
									
								
								feeds/ipq95xx/ftm/src/LICENSE
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,181 @@ | |||||||
|  | This text file is provided to comply with the attribution requirements of | ||||||
|  | the licenses herein, but see NOTICE for license terms of this software. | ||||||
|  | The Apache 2.0 license can be found at | ||||||
|  | http://www.apache.org/licenses/LICENSE-2.0.html | ||||||
|  |  | ||||||
|  |                                  Apache License | ||||||
|  |                            Version 2.0, January 2004 | ||||||
|  |                         http://www.apache.org/licenses/ | ||||||
|  |  | ||||||
|  |    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||||||
|  |  | ||||||
|  |    1. Definitions. | ||||||
|  |  | ||||||
|  |       "License" shall mean the terms and conditions for use, reproduction, | ||||||
|  |       and distribution as defined by Sections 1 through 9 of this document. | ||||||
|  |  | ||||||
|  |       "Licensor" shall mean the copyright owner or entity authorized by | ||||||
|  |       the copyright owner that is granting the License. | ||||||
|  |  | ||||||
|  |       "Legal Entity" shall mean the union of the acting entity and all | ||||||
|  |       other entities that control, are controlled by, or are under common | ||||||
|  |       control with that entity. For the purposes of this definition, | ||||||
|  |       "control" means (i) the power, direct or indirect, to cause the | ||||||
|  |       direction or management of such entity, whether by contract or | ||||||
|  |       otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||||||
|  |       outstanding shares, or (iii) beneficial ownership of such entity. | ||||||
|  |  | ||||||
|  |       "You" (or "Your") shall mean an individual or Legal Entity | ||||||
|  |       exercising permissions granted by this License. | ||||||
|  |  | ||||||
|  |       "Source" form shall mean the preferred form for making modifications, | ||||||
|  |       including but not limited to software source code, documentation | ||||||
|  |       source, and configuration files. | ||||||
|  |  | ||||||
|  |       "Object" form shall mean any form resulting from mechanical | ||||||
|  |       transformation or translation of a Source form, including but | ||||||
|  |       not limited to compiled object code, generated documentation, | ||||||
|  |       and conversions to other media types. | ||||||
|  |  | ||||||
|  |       "Work" shall mean the work of authorship, whether in Source or | ||||||
|  |       Object form, made available under the License, as indicated by a | ||||||
|  |       copyright notice that is included in or attached to the work | ||||||
|  |       (an example is provided in the Appendix below). | ||||||
|  |  | ||||||
|  |       "Derivative Works" shall mean any work, whether in Source or Object | ||||||
|  |       form, that is based on (or derived from) the Work and for which the | ||||||
|  |       editorial revisions, annotations, elaborations, or other modifications | ||||||
|  |       represent, as a whole, an original work of authorship. For the purposes | ||||||
|  |       of this License, Derivative Works shall not include works that remain | ||||||
|  |       separable from, or merely link (or bind by name) to the interfaces of, | ||||||
|  |       the Work and Derivative Works thereof. | ||||||
|  |  | ||||||
|  |       "Contribution" shall mean any work of authorship, including | ||||||
|  |       the original version of the Work and any modifications or additions | ||||||
|  |       to that Work or Derivative Works thereof, that is intentionally | ||||||
|  |       submitted to Licensor for inclusion in the Work by the copyright owner | ||||||
|  |       or by an individual or Legal Entity authorized to submit on behalf of | ||||||
|  |       the copyright owner. For the purposes of this definition, "submitted" | ||||||
|  |       means any form of electronic, verbal, or written communication sent | ||||||
|  |       to the Licensor or its representatives, including but not limited to | ||||||
|  |       communication on electronic mailing lists, source code control systems, | ||||||
|  |       and issue tracking systems that are managed by, or on behalf of, the | ||||||
|  |       Licensor for the purpose of discussing and improving the Work, but | ||||||
|  |       excluding communication that is conspicuously marked or otherwise | ||||||
|  |       designated in writing by the copyright owner as "Not a Contribution." | ||||||
|  |  | ||||||
|  |       "Contributor" shall mean Licensor and any individual or Legal Entity | ||||||
|  |       on behalf of whom a Contribution has been received by Licensor and | ||||||
|  |       subsequently incorporated within the Work. | ||||||
|  |  | ||||||
|  |    2. Grant of Copyright License. Subject to the terms and conditions of | ||||||
|  |       this License, each Contributor hereby grants to You a perpetual, | ||||||
|  |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||||
|  |       copyright license to reproduce, prepare Derivative Works of, | ||||||
|  |       publicly display, publicly perform, sublicense, and distribute the | ||||||
|  |       Work and such Derivative Works in Source or Object form. | ||||||
|  |  | ||||||
|  |    3. Grant of Patent License. Subject to the terms and conditions of | ||||||
|  |       this License, each Contributor hereby grants to You a perpetual, | ||||||
|  |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||||
|  |       (except as stated in this section) patent license to make, have made, | ||||||
|  |       use, offer to sell, sell, import, and otherwise transfer the Work, | ||||||
|  |       where such license applies only to those patent claims licensable | ||||||
|  |       by such Contributor that are necessarily infringed by their | ||||||
|  |       Contribution(s) alone or by combination of their Contribution(s) | ||||||
|  |       with the Work to which such Contribution(s) was submitted. If You | ||||||
|  |       institute patent litigation against any entity (including a | ||||||
|  |       cross-claim or counterclaim in a lawsuit) alleging that the Work | ||||||
|  |       or a Contribution incorporated within the Work constitutes direct | ||||||
|  |       or contributory patent infringement, then any patent licenses | ||||||
|  |       granted to You under this License for that Work shall terminate | ||||||
|  |       as of the date such litigation is filed. | ||||||
|  |  | ||||||
|  |    4. Redistribution. You may reproduce and distribute copies of the | ||||||
|  |       Work or Derivative Works thereof in any medium, with or without | ||||||
|  |       modifications, and in Source or Object form, provided that You | ||||||
|  |       meet the following conditions: | ||||||
|  |  | ||||||
|  |       (a) You must give any other recipients of the Work or | ||||||
|  |           Derivative Works a copy of this License; and | ||||||
|  |  | ||||||
|  |       (b) You must cause any modified files to carry prominent notices | ||||||
|  |           stating that You changed the files; and | ||||||
|  |  | ||||||
|  |       (c) You must retain, in the Source form of any Derivative Works | ||||||
|  |           that You distribute, all copyright, patent, trademark, and | ||||||
|  |           attribution notices from the Source form of the Work, | ||||||
|  |           excluding those notices that do not pertain to any part of | ||||||
|  |           the Derivative Works; and | ||||||
|  |  | ||||||
|  |       (d) If the Work includes a "NOTICE" text file as part of its | ||||||
|  |           distribution, then any Derivative Works that You distribute must | ||||||
|  |           include a readable copy of the attribution notices contained | ||||||
|  |           within such NOTICE file, excluding those notices that do not | ||||||
|  |           pertain to any part of the Derivative Works, in at least one | ||||||
|  |           of the following places: within a NOTICE text file distributed | ||||||
|  |           as part of the Derivative Works; within the Source form or | ||||||
|  |           documentation, if provided along with the Derivative Works; or, | ||||||
|  |           within a display generated by the Derivative Works, if and | ||||||
|  |           wherever such third-party notices normally appear. The contents | ||||||
|  |           of the NOTICE file are for informational purposes only and | ||||||
|  |           do not modify the License. You may add Your own attribution | ||||||
|  |           notices within Derivative Works that You distribute, alongside | ||||||
|  |           or as an addendum to the NOTICE text from the Work, provided | ||||||
|  |           that such additional attribution notices cannot be construed | ||||||
|  |           as modifying the License. | ||||||
|  |  | ||||||
|  |       You may add Your own copyright statement to Your modifications and | ||||||
|  |       may provide additional or different license terms and conditions | ||||||
|  |       for use, reproduction, or distribution of Your modifications, or | ||||||
|  |       for any such Derivative Works as a whole, provided Your use, | ||||||
|  |       reproduction, and distribution of the Work otherwise complies with | ||||||
|  |       the conditions stated in this License. | ||||||
|  |  | ||||||
|  |    5. Submission of Contributions. Unless You explicitly state otherwise, | ||||||
|  |       any Contribution intentionally submitted for inclusion in the Work | ||||||
|  |       by You to the Licensor shall be under the terms and conditions of | ||||||
|  |       this License, without any additional terms or conditions. | ||||||
|  |       Notwithstanding the above, nothing herein shall supersede or modify | ||||||
|  |       the terms of any separate license agreement you may have executed | ||||||
|  |       with Licensor regarding such Contributions. | ||||||
|  |  | ||||||
|  |    6. Trademarks. This License does not grant permission to use the trade | ||||||
|  |       names, trademarks, service marks, or product names of the Licensor, | ||||||
|  |       except as required for reasonable and customary use in describing the | ||||||
|  |       origin of the Work and reproducing the content of the NOTICE file. | ||||||
|  |  | ||||||
|  |    7. Disclaimer of Warranty. Unless required by applicable law or | ||||||
|  |       agreed to in writing, Licensor provides the Work (and each | ||||||
|  |       Contributor provides its Contributions) on an "AS IS" BASIS, | ||||||
|  |       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||||||
|  |       implied, including, without limitation, any warranties or conditions | ||||||
|  |       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||||||
|  |       PARTICULAR PURPOSE. You are solely responsible for determining the | ||||||
|  |       appropriateness of using or redistributing the Work and assume any | ||||||
|  |       risks associated with Your exercise of permissions under this License. | ||||||
|  |  | ||||||
|  |    8. Limitation of Liability. In no event and under no legal theory, | ||||||
|  |       whether in tort (including negligence), contract, or otherwise, | ||||||
|  |       unless required by applicable law (such as deliberate and grossly | ||||||
|  |       negligent acts) or agreed to in writing, shall any Contributor be | ||||||
|  |       liable to You for damages, including any direct, indirect, special, | ||||||
|  |       incidental, or consequential damages of any character arising as a | ||||||
|  |       result of this License or out of the use or inability to use the | ||||||
|  |       Work (including but not limited to damages for loss of goodwill, | ||||||
|  |       work stoppage, computer failure or malfunction, or any and all | ||||||
|  |       other commercial damages or losses), even if such Contributor | ||||||
|  |       has been advised of the possibility of such damages. | ||||||
|  |  | ||||||
|  |    9. Accepting Warranty or Additional Liability. While redistributing | ||||||
|  |       the Work or Derivative Works thereof, You may choose to offer, | ||||||
|  |       and charge a fee for, acceptance of support, warranty, indemnity, | ||||||
|  |       or other liability obligations and/or rights consistent with this | ||||||
|  |       License. However, in accepting such obligations, You may act only | ||||||
|  |       on Your own behalf and on Your sole responsibility, not on behalf | ||||||
|  |       of any other Contributor, and only if You agree to indemnify, | ||||||
|  |       defend, and hold each Contributor harmless for any liability | ||||||
|  |       incurred by, or claims asserted against, such Contributor by reason | ||||||
|  |       of your accepting any such warranty or additional liability. | ||||||
|  |  | ||||||
|  |    END OF TERMS AND CONDITIONS | ||||||
							
								
								
									
										12
									
								
								feeds/ipq95xx/ftm/src/Makefile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								feeds/ipq95xx/ftm/src/Makefile
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | #CC := $(ATH_CROSS_COMPILE_TYPE)gcc | ||||||
|  | TARGET_TYPE ?= AR9888 | ||||||
|  | TARGET_VERS ?= v2 | ||||||
|  |  | ||||||
|  | #Sources to compile | ||||||
|  | CSRCS := ftm_main.c ftm_wlan.c ftm_write_to_flash.c | ||||||
|  |  | ||||||
|  | all: | ||||||
|  | 	$(CC) $(CFLAGS) $(LDFLAGS) -g3 -Wall  \ | ||||||
|  | 		$(CSRCS) -o ftm | ||||||
|  | clean: | ||||||
|  | 	rm -f ftm | ||||||
							
								
								
									
										86
									
								
								feeds/ipq95xx/ftm/src/Makefile.am
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										86
									
								
								feeds/ipq95xx/ftm/src/Makefile.am
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,86 @@ | |||||||
|  | AM_CFLAGS = -Wall \ | ||||||
|  |             -g -O0 \ | ||||||
|  |             $(DIAG_CFLAGS) | ||||||
|  |  | ||||||
|  | AM_CPPFLAGS = -Wall \ | ||||||
|  |             -g -O0 \ | ||||||
|  |             $(DIAG_CFLAGS) | ||||||
|  |  | ||||||
|  | AM_CFLAGS += -I${WORKSPACE}/system/bt/hci/include | ||||||
|  | AM_CFLAGS += -I${WORKSPACE}/vendor/qcom/proprietary/bt/hci_qcomm_init/ | ||||||
|  |  | ||||||
|  | AM_CPPFLAGS += -I${WORKSPACE}/system/bt/hci/include | ||||||
|  | AM_CPPFLAGS += -I${WORKSPACE}/vendor/qcom/proprietary/bt/hci_qcomm_init/ | ||||||
|  |  | ||||||
|  | if DEBUG | ||||||
|  | AM_CFLAGS += -DDEBUG | ||||||
|  | AM_CPPFLAGS += -DDEBUG | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | requiredlibs = -lrt $(DIAG_LIBS) | ||||||
|  |  | ||||||
|  | if USE_GLIB | ||||||
|  | AM_CFLAGS += -DUSE_GLIB $(GLIB_CFLAGS) | ||||||
|  | AM_CPPFLAGS += -DUSE_GLIB $(GLIB_CFLAGS) | ||||||
|  | requiredlibs += $(GLIB_LIBS) | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | #By default build for MDM_LE | ||||||
|  | AM_CFLAGS += -DMDM_LE | ||||||
|  | AM_CPPFLAGS += -DMDM_LE | ||||||
|  |  | ||||||
|  | if MDM_ROME | ||||||
|  | AM_CFLAGS += -DBT_SOC_TYPE_ROME | ||||||
|  | AM_CPPFLAGS += -DBT_SOC_TYPE_ROME | ||||||
|  | else | ||||||
|  | if MDM_PRONTO | ||||||
|  | AM_CFLAGS += -DHCI_USE_MCT | ||||||
|  | AM_CPPFLAGS += -DHCI_USE_MCT | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | c_sources = ftm_main.c | ||||||
|  |  | ||||||
|  | if CONFIG_FTM_BT | ||||||
|  | AM_CFLAGS += -DCONFIG_FTM_BT -DBT_NV_SUPPORT | ||||||
|  | AM_CPPFLAGS += -DCONFIG_FTM_BT -DBT_NV_SUPPORT | ||||||
|  | c_sources += ftm_bt.c | ||||||
|  | c_sources += ftm_bt_power_pfal_linux.c | ||||||
|  | c_sources += ftm_bt_hci_pfal_linux.c | ||||||
|  | c_sources += ftm_bt_persist.cpp | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if CONFIG_FTM_FM | ||||||
|  | AM_CFLAGS += -DCONFIG_FTM_FM | ||||||
|  | c_sources += ftm_fm.c | ||||||
|  | c_sources += ftm_fm_pfal_linux.c | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if CONFIG_FTM_ANT | ||||||
|  | AM_CFLAGS += -DCONFIG_FTM_ANT | ||||||
|  | c_sources += ftm_ant.c | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if CONFIG_FTM_NFC | ||||||
|  | AM_CFLAGS += -DCONFIG_FTM_NFC | ||||||
|  | c_sources += ftm_nfc.c | ||||||
|  | c_sources += ftm_nfcnq.c | ||||||
|  | c_sources += ftm_nfcqti.c | ||||||
|  | c_sources += ftm_nfcnq_fwdl.c | ||||||
|  | c_sources += ftm_nfcnq_test.c | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | if CONFIG_FTM_WLAN | ||||||
|  |  | ||||||
|  | AM_CFLAGS += -DCONFIG_FTM_WLAN -DCONFIG_FTM_WLAN_AUTOLOAD | ||||||
|  | AM_CFLAGS += $(LIBNL_CFLAGS) $(ATH6KL_UTILS_CFLAGS) | ||||||
|  | AM_CPPFLAGS += $(LIBNL_CFLAGS) $(ATH6KL_UTILS_CFLAGS) | ||||||
|  |  | ||||||
|  | requiredlibs += $(ATH6KL_UTILS_LIBS) $(LIBNL_LIBS) | ||||||
|  |  | ||||||
|  | c_sources += ftm_wlan.c | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ftmdaemon_SOURCES = $(c_sources) | ||||||
|  | ftmdaemon_LDADD = -ldl $(requiredlibs) -lbtnv | ||||||
|  | bin_PROGRAMS = ftmdaemon | ||||||
							
								
								
									
										72
									
								
								feeds/ipq95xx/ftm/src/NOTICE
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										72
									
								
								feeds/ipq95xx/ftm/src/NOTICE
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | This NOTICE file contains certain notices of software components included | ||||||
|  | with the software that Qualcomm Technologies, Inc. ("Qualcomm Technologies") | ||||||
|  | is required to provide you. Notwithstanding anything in the notices in this | ||||||
|  | file, your use of these software components together with the | ||||||
|  | Qualcomm Technologies software (Qualcomm Technologies software hereinafter | ||||||
|  | referred to as "Software") is subject to the terms of your license from | ||||||
|  | Qualcomm Technologies. Compliance with all copyright laws and software | ||||||
|  | license agreements included in the notice section of this file are the | ||||||
|  | responsibility of the user. Except as may be granted by separate express | ||||||
|  | written agreement, this file provides no license to any patents, | ||||||
|  | trademarks, copyrights, or other intellectual property. | ||||||
|  |  | ||||||
|  | Copyright (c) 2016 Qualcomm Technologies, Inc. | ||||||
|  | All rights reserved. | ||||||
|  | Qualcomm is a registered trademark and registered service mark of | ||||||
|  | QUALCOMM Incorporated. All other trademarks and service marks are the | ||||||
|  | property of their respective owners. | ||||||
|  | ________________________________________ | ||||||
|  | NOTICES | ||||||
|  | ________________________________________ | ||||||
|  |  | ||||||
|  | Copyright (C) 2010 The Android Open Source Project | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  | http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | ________________________________________ | ||||||
|  |  | ||||||
|  | Copyright (C) 2015 NXP Semiconductors | ||||||
|  | The original Work has been changed by NXP Semiconductors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  | http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | ________________________________________ | ||||||
|  |  | ||||||
|  | Copyright (C) 2015 The Android Open Source Project | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  | http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | ________________________________________ | ||||||
|  |  | ||||||
|  | Note: Any files for which the above Apache License notices are required | ||||||
|  | to be provided are not contributions. | ||||||
|  |  | ||||||
|  | A copy of the Apache 2.0 license is included in the file LICENSE | ||||||
|  | for attribution purposes only. | ||||||
							
								
								
									
										149
									
								
								feeds/ipq95xx/ftm/src/configure.ac
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										149
									
								
								feeds/ipq95xx/ftm/src/configure.ac
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,149 @@ | |||||||
|  | #                                               -*- Autoconf -*- | ||||||
|  |  | ||||||
|  | # configure.ac -- Autoconf script for ftm. | ||||||
|  | # | ||||||
|  |  | ||||||
|  | # Process this file with autoconf to produce a configure script | ||||||
|  |  | ||||||
|  | # Requires autoconf tool later than 2.61 | ||||||
|  | AC_PREREQ(2.61) | ||||||
|  | # Initialize the ftm package version 1.0.0 | ||||||
|  | AC_INIT([ftm],1.0.0) | ||||||
|  | # Does not strictly follow GNU Coding standards | ||||||
|  | AM_INIT_AUTOMAKE([foreign]) | ||||||
|  | # Disables auto rebuilding of configure, Makefile.ins | ||||||
|  | AM_MAINTAINER_MODE | ||||||
|  | # defines some macros variable to be included by source | ||||||
|  | AC_CONFIG_HEADERS([config.h]) | ||||||
|  | AC_CONFIG_MACRO_DIR([m4]) | ||||||
|  |  | ||||||
|  | # Checks for programs. | ||||||
|  | AC_PROG_CC | ||||||
|  | AC_PROG_CXX | ||||||
|  | AM_PROG_CC_C_O | ||||||
|  | AC_PROG_LIBTOOL | ||||||
|  | AC_PROG_AWK | ||||||
|  | AC_PROG_CPP | ||||||
|  | AC_PROG_INSTALL | ||||||
|  | AC_PROG_LN_S | ||||||
|  | AC_PROG_MAKE_SET | ||||||
|  |  | ||||||
|  | # Checks for libraries. | ||||||
|  | PKG_CHECK_MODULES([DIAG], [diag]) | ||||||
|  | AC_SUBST([DIAG_CFLAGS]) | ||||||
|  | AC_SUBST([DIAG_LIBS]) | ||||||
|  |  | ||||||
|  | has_libnl_ver=0 | ||||||
|  | # libnl-2 provides only libnl-2.0.pc file, so we check for separate libnl-genl-3.0.pc | ||||||
|  | # pkg-config file just for libnl-3.0 case. | ||||||
|  | # | ||||||
|  | PKG_CHECK_MODULES([LIBNL], [libnl-3.0 >= 3.0 libnl-genl-3.0 >= 3.0], [has_libnl_ver=3], [ | ||||||
|  |    PKG_CHECK_MODULES([LIBNL], [libnl-2.0 >= 2.0], [has_libnl_ver=2], [ | ||||||
|  |            PKG_CHECK_MODULES([LIBNL], [libnl-1], [has_libnl_ver=1], [has_libnl_ver=0])])]) | ||||||
|  |  | ||||||
|  | if (test "$has_libnl_ver" -eq 0); then | ||||||
|  |         AC_MSG_ERROR(libnl and libnl-genl are required but were not found) | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if (test "$has_libnl_ver" -gt 1); then | ||||||
|  |         AC_DEFINE([HAVE_LIBNL20], [1], [Define if you have libnl-2.0 or higher]) | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | AC_SUBST([LIBNL_CFLAGS]) | ||||||
|  | AC_SUBST([LIBNL_LIBS]) | ||||||
|  |  | ||||||
|  | PKG_CHECK_MODULES([ATH6KL_UTILS], [ath6kl-utils]) | ||||||
|  | AC_SUBST([ATH6KL_UTILS_CFLAGS]) | ||||||
|  | AC_SUBST([ATH6KL_UTILS_LIBS]) | ||||||
|  |  | ||||||
|  | AC_ARG_WITH([glib], | ||||||
|  |       AC_HELP_STRING([--with-glib], | ||||||
|  |          [enable glib, building FTM Daemon which use glib])) | ||||||
|  |  | ||||||
|  | if (test "x${with_glib}" = "xyes"); then | ||||||
|  |         PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes, | ||||||
|  |                                 AC_MSG_ERROR(GThread >= 2.16 is required)) | ||||||
|  |         PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes, | ||||||
|  |                                 AC_MSG_ERROR(GLib >= 2.16 is required)) | ||||||
|  |         GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS" | ||||||
|  |         GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS" | ||||||
|  |  | ||||||
|  |         AC_SUBST(GLIB_CFLAGS) | ||||||
|  |         AC_SUBST(GLIB_LIBS) | ||||||
|  | fi | ||||||
|  | AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes") | ||||||
|  |  | ||||||
|  | AC_ARG_ENABLE([debug], | ||||||
|  |         [  --enable-debug    Turn on debugging], | ||||||
|  |         [case "${enableval}" in | ||||||
|  |             yes) debug=true ;; | ||||||
|  |             no)  debug=false ;; | ||||||
|  |             *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;; | ||||||
|  |         esac],[debug=false]) | ||||||
|  |  | ||||||
|  | AM_CONDITIONAL([DEBUG], [test x$debug = xtrue]) | ||||||
|  |  | ||||||
|  | AC_ARG_ENABLE([all], | ||||||
|  |         [  --enable-all Enable all FTM functionality], | ||||||
|  |         [case "${enableval}" in | ||||||
|  |             yes) all=true ;; | ||||||
|  |             no)  all=false ;; | ||||||
|  |             *) AC_MSG_ERROR([bad value ${enableval} for --enable-all]) ;; | ||||||
|  |         esac],[all=false]) | ||||||
|  |  | ||||||
|  | AM_CONDITIONAL([CONFIG_FTM_BT], [test x$all = xtrue]) | ||||||
|  | AM_CONDITIONAL([CONFIG_FTM_FM], [test x$all = xtrue]) | ||||||
|  | AM_CONDITIONAL([CONFIG_FTM_ANT], [test x$all = xtrue]) | ||||||
|  | AM_CONDITIONAL([CONFIG_FTM_NFC], [test x$all = xtrue]) | ||||||
|  |  | ||||||
|  | AC_ARG_ENABLE([wlan], | ||||||
|  |         [  --enable-wlan Enable WLAN FTM functionality], | ||||||
|  |         [case "${enableval}" in | ||||||
|  |             yes) wlan=true ;; | ||||||
|  |             no)  wlan=false ;; | ||||||
|  |             *) AC_MSG_ERROR([bad value ${enableval} for --enable-wlan]) ;; | ||||||
|  |         esac],[wlan=false]) | ||||||
|  |  | ||||||
|  | AM_CONDITIONAL([CONFIG_FTM_WLAN], [test x$wlan = xtrue -o x$all = xtrue]) | ||||||
|  |  | ||||||
|  | AC_ARG_ENABLE([bt], | ||||||
|  |         [  --enable-bt Enable BT FTM functionality], | ||||||
|  |         [case "${enableval}" in | ||||||
|  |            yes) bt=true ;; | ||||||
|  |            no)  bt=false ;; | ||||||
|  |         *) AC_MSG_ERROR([bad value ${enableval} for --enable-bt]) ;; | ||||||
|  |          esac],[bt=false]) | ||||||
|  |  | ||||||
|  | AM_CONDITIONAL([CONFIG_FTM_BT], [test x$bt = xtrue -o x$all = xtrue]) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_ARG_ENABLE(target, | ||||||
|  |   [AS_HELP_STRING([--enable-target=TARGET], [Specify the target product to build])], | ||||||
|  |   [TARGET=$enableval], | ||||||
|  |   [TARGET=none] | ||||||
|  | ) | ||||||
|  | AM_CONDITIONAL([MDM_ROME], [test "x$TARGET" = "xmdm9607" -o "x$TARGET" = "xmdm9635" -o "x$TARGET" = "xmdm9640" -o "x$TARGET" = "xmdmcalifornium"]) | ||||||
|  | AM_CONDITIONAL([MDM_PRONTO], [test "x$TARGET" = "xapq8009" -o "x$TARGET" = "xapq8017" -o "x$TARGET" = "xapq8053"]) | ||||||
|  |  | ||||||
|  | # Checks for typedefs, structures, and compiler characteristics. | ||||||
|  | AC_HEADER_STDBOOL | ||||||
|  | AC_HEADER_STDC | ||||||
|  | AC_C_INLINE | ||||||
|  | AC_TYPE_INT64_T | ||||||
|  | AC_TYPE_PID_T | ||||||
|  | AC_TYPE_SIZE_T | ||||||
|  | AC_TYPE_SSIZE_T | ||||||
|  | AC_TYPE_UINT16_T | ||||||
|  | AC_TYPE_UINT32_T | ||||||
|  | AC_TYPE_UINT8_T | ||||||
|  |  | ||||||
|  | # Checks for library functions. | ||||||
|  | AC_FUNC_ERROR_AT_LINE | ||||||
|  | AC_FUNC_FORK | ||||||
|  | AC_FUNC_MALLOC | ||||||
|  |  | ||||||
|  | AC_CONFIG_FILES([ \ | ||||||
|  |         Makefile \ | ||||||
|  |         ]) | ||||||
|  | AC_OUTPUT | ||||||
|  |  | ||||||
							
								
								
									
										585
									
								
								feeds/ipq95xx/ftm/src/ftm_ant.c
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										585
									
								
								feeds/ipq95xx/ftm/src/ftm_ant.c
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,585 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |          FTM ANT Source File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |   FTM platform independent processing of packet data | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010-2012 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who      what, where, why | ||||||
|  | --------   ---      ---------------------------------------------------------- | ||||||
|  | 05/16/12  ankurn    Adding support for ANT commands | ||||||
|  | 11/28/12  c_ssugas  implements efficent method for Ant cmd transfer | ||||||
|  |                      and implements Rx thread for event handling. | ||||||
|  | ===========================================================================*/ | ||||||
|  | #include "event.h" | ||||||
|  | #include "msg.h" | ||||||
|  | #include "log.h" | ||||||
|  |  | ||||||
|  | #include "diag_lsm.h" | ||||||
|  | #include "diagpkt.h" | ||||||
|  | #include "diagcmd.h" | ||||||
|  | #include "diag.h" | ||||||
|  | #include "termios.h" | ||||||
|  |  | ||||||
|  | #include <errno.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <sys/ioctl.h> | ||||||
|  | #include <sys/socket.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <pthread.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdbool.h> | ||||||
|  | #include <dlfcn.h> | ||||||
|  | #include "bt_vendor_qcom.h" | ||||||
|  | #include "ftm_ant_common.h" | ||||||
|  | #include "ftm_bt.h" | ||||||
|  | #include <string.h> | ||||||
|  | #include "hidl_client.h" | ||||||
|  |  | ||||||
|  | #ifdef ANDROID | ||||||
|  | #include <cutils/properties.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef ANDROID | ||||||
|  | extern int soc_type; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define ANT_CTRL_PACKET_TYPE    0x0c | ||||||
|  | #define ANT_DATA_PACKET_TYPE    0x0e | ||||||
|  |  | ||||||
|  | #define UNUSED(x) (void)(x) | ||||||
|  |  | ||||||
|  | int init_transport_ant(int on); | ||||||
|  | // The following functions are dummy implementations of the callbacks required by libbt-vendor. | ||||||
|  | static void vendor_fwcfg_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_scocfg_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_lpm_vnd_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_audio_state_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void* vendor_alloc(int size) { | ||||||
|  |     UNUSED(size); | ||||||
|  |     return NULL; | ||||||
|  | } | ||||||
|  | static void vendor_dealloc(void *p_buf) { | ||||||
|  |     UNUSED(p_buf); | ||||||
|  | } | ||||||
|  | static uint8_t vendor_xmit_cb(uint16_t opcode, void *p_buf, tINT_CMD_CBACK p_cback) { | ||||||
|  |     UNUSED(opcode); | ||||||
|  |     UNUSED(p_buf); | ||||||
|  |     UNUSED(p_cback); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | static void vendor_epilog_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_a2dp_offload_cb(bt_vendor_op_result_t result, bt_vendor_opcode_t op, unsigned char handle) { | ||||||
|  |     UNUSED(result); | ||||||
|  |     UNUSED(op); | ||||||
|  |     UNUSED(handle); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // This struct is used to regsiter the dummy callbacks with libbt-vendor | ||||||
|  | static bt_vendor_interface_t *vendor_interface=NULL; | ||||||
|  | static const bt_vendor_callbacks_t vendor_callbacks = { | ||||||
|  |   sizeof(bt_vendor_callbacks_t), | ||||||
|  |     vendor_fwcfg_cb, | ||||||
|  |     vendor_scocfg_cb, | ||||||
|  |     vendor_lpm_vnd_cb, | ||||||
|  |     vendor_audio_state_cb, | ||||||
|  |     vendor_alloc, | ||||||
|  |     vendor_dealloc, | ||||||
|  |     vendor_xmit_cb, | ||||||
|  |     vendor_epilog_cb, | ||||||
|  |     vendor_a2dp_offload_cb | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* Transport file descriptor */ | ||||||
|  | int fd_transport_ant_cmd; | ||||||
|  | extern int first_ant_command; | ||||||
|  | /* Reader thread handle */ | ||||||
|  | pthread_t ant_cmd_thread_hdl; | ||||||
|  | /* Pipe file descriptors for cancelling read operation */ | ||||||
|  | int ant_pipefd[2]; | ||||||
|  |  | ||||||
|  | /* Enable FTM_DEBUG to turn on Debug messages  */ | ||||||
|  | //#define FTM_DEBUG | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_ant_readerthread | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Thread Routine to perfom asynchrounous handling of events coming on Smd | ||||||
|  |   descriptor. It invokes a callback to the FTM ANT layer to intiate a request | ||||||
|  |   to read event bytes. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   The LifeTime of ReaderThraad is dependent on the status returned by the | ||||||
|  |   call to ftm_ant_qcomm_handle_event | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN NULL | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | void *ftm_ant_readerthread(void *ptr) | ||||||
|  | { | ||||||
|  |    boolean status = FALSE; | ||||||
|  |    int retval; | ||||||
|  |    fd_set readfds; | ||||||
|  |    int buf; | ||||||
|  |  | ||||||
|  |    UNUSED(ptr); | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |    printf("ftm_ant_readerthread --> \n"); | ||||||
|  | #endif | ||||||
|  |    do | ||||||
|  |    { | ||||||
|  |       FD_ZERO(&readfds); | ||||||
|  |       FD_SET(fd_transport_ant_cmd, &readfds); | ||||||
|  |       FD_SET(ant_pipefd[0],&readfds); | ||||||
|  |       retval = select((fd_transport_ant_cmd>ant_pipefd[0]?fd_transport_ant_cmd | ||||||
|  |                   :ant_pipefd[0]) + 1, &readfds, NULL, NULL, NULL); | ||||||
|  |       if(retval == -1) | ||||||
|  |       { | ||||||
|  |          printf("select failed\n"); | ||||||
|  |          break; | ||||||
|  |       } | ||||||
|  |       if(FD_ISSET(ant_pipefd[0],&readfds)) | ||||||
|  |       { | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |          printf("Pipe descriptor set\n"); | ||||||
|  | #endif | ||||||
|  |          read(ant_pipefd[0],&buf,1); | ||||||
|  |          if(buf == 1) | ||||||
|  |             break; | ||||||
|  |       } | ||||||
|  |       if(FD_ISSET(fd_transport_ant_cmd,&readfds)) | ||||||
|  |       { | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |          printf("Read descriptor set\n"); | ||||||
|  | #endif | ||||||
|  |          status = ftm_ant_qcomm_handle_event(); | ||||||
|  |          if(TRUE != status) | ||||||
|  |             break; | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  |    while(1); | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |    printf("\nReader thread exited\n"); | ||||||
|  | #endif | ||||||
|  |    return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_ant_open_channel | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |    Open the SMD transport associated with ANT | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   int value indicating success or failure | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   NONE | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | static bool ftm_ant_open_channel() | ||||||
|  | { | ||||||
|  |    struct termios term_port; | ||||||
|  |    int opts; | ||||||
|  |  | ||||||
|  |    printf("%s: \n",__func__ ); | ||||||
|  |    switch (soc_type) | ||||||
|  |    { | ||||||
|  |        case BT_SOC_ROME: | ||||||
|  |        case BT_SOC_CHEROKEE: | ||||||
|  |        case BT_SOC_NAPIER: | ||||||
|  |            //Use hidl_client_initialize for chip initialization | ||||||
|  |            if (hidl_client_initialize(MODE_ANT,&fd_transport_ant_cmd) == false) { | ||||||
|  |                printf("%s: HIDL client initialization failed, opening port with init_transpor_ant\n", __func__); | ||||||
|  |                //Use libbt-vendor for chip initialization | ||||||
|  |                fd_transport_ant_cmd = init_transport_ant(TRUE); | ||||||
|  |                if (fd_transport_ant_cmd == -1) { | ||||||
|  |                    printf("%s: ANT Device open Failed, fd:%d: \n", __func__, fd_transport_ant_cmd); | ||||||
|  |                    return false; | ||||||
|  |                } | ||||||
|  |            } | ||||||
|  |            break; | ||||||
|  |        case BT_SOC_AR3K: | ||||||
|  |        case BT_SOC_SMD: | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |            printf("ftm_ant_open_channel --> \n"); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |            fd_transport_ant_cmd = open(APPS_RIVA_ANT_CMD_CH, (O_RDWR)); | ||||||
|  |            if (fd_transport_ant_cmd == -1) { | ||||||
|  |                printf("Ant Device open Failed= %d\n ", fd_transport_ant_cmd); | ||||||
|  |                return false; | ||||||
|  |            } | ||||||
|  |  | ||||||
|  |            // Blocking Read | ||||||
|  |            opts = fcntl(fd_transport_ant_cmd, F_GETFL); | ||||||
|  |            if (opts < 0) { | ||||||
|  |                perror("fcntl(F_GETFL)"); | ||||||
|  |                exit(EXIT_FAILURE); | ||||||
|  |            } | ||||||
|  |  | ||||||
|  |            opts = opts & (~O_NONBLOCK); | ||||||
|  |            if (fcntl(fd_transport_ant_cmd, F_SETFL, opts) < 0) { | ||||||
|  |                perror("fcntl(F_SETFL)"); | ||||||
|  |                exit(EXIT_FAILURE); | ||||||
|  |            } | ||||||
|  |  | ||||||
|  |            if (tcgetattr(fd_transport_ant_cmd, &term_port) < 0) | ||||||
|  |                close(fd_transport_ant_cmd); | ||||||
|  |            cfmakeraw(&term_port); | ||||||
|  |            if (tcsetattr(fd_transport_ant_cmd, TCSANOW, &term_port) < 0) { | ||||||
|  |                printf("\n Error while setting attributes\n"); | ||||||
|  |                return false; | ||||||
|  |            } | ||||||
|  |  | ||||||
|  |            tcflush(fd_transport_ant_cmd, TCIFLUSH); | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |            printf("ftm_ant_open_channel success \n"); | ||||||
|  | #endif | ||||||
|  |            break; | ||||||
|  |        default: | ||||||
|  |            ALOGE("%s:Unknown soc type.",__func__); | ||||||
|  |            return false; | ||||||
|  |    } | ||||||
|  |    if (pipe(ant_pipefd) == -1) | ||||||
|  |    { | ||||||
|  |        printf("pipe create error"); | ||||||
|  |        return STATUS_FAIL; | ||||||
|  |    } | ||||||
|  |    /* Creating read thread which listens for various masks & pkt requests */ | ||||||
|  |    pthread_create( &ant_cmd_thread_hdl, NULL, ftm_ant_readerthread, NULL); | ||||||
|  |    return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int init_transport_ant(int on) { | ||||||
|  |  | ||||||
|  |     void *so_handle; | ||||||
|  |     unsigned char bdaddr[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06}; | ||||||
|  |     int  fd[CH_MAX], powerstate, ret = -1; | ||||||
|  |     char ref_count[PROPERTY_VALUE_MAX]; | ||||||
|  |     int value; | ||||||
|  |  | ||||||
|  |     if (on) { | ||||||
|  |         so_handle = dlopen("libbt-vendor.so", RTLD_NOW); | ||||||
|  |         if (!so_handle) | ||||||
|  |         { | ||||||
|  |            ALOGE("Failed to load vendor component"); | ||||||
|  |            return -1; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         vendor_interface = (bt_vendor_interface_t *) dlsym(so_handle, "BLUETOOTH_VENDOR_LIB_INTERFACE"); | ||||||
|  |         if (!vendor_interface) | ||||||
|  |         { | ||||||
|  |             ALOGE("Failed to accesst bt vendor interface"); | ||||||
|  |             return -1; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         vendor_interface->init(&vendor_callbacks, bdaddr); | ||||||
|  |  | ||||||
|  |         ALOGI("Turn On BT power"); | ||||||
|  |         powerstate = BT_VND_PWR_ON; | ||||||
|  |         ret = vendor_interface->op(BT_VND_OP_POWER_CTRL, &powerstate); | ||||||
|  |         if (ret < 0) | ||||||
|  |         { | ||||||
|  |             ALOGE("Failed to turn on power from  bt vendor interface"); | ||||||
|  |             return -1; | ||||||
|  |         } | ||||||
|  |         for (int i = 0; i < CH_MAX; i++) | ||||||
|  |             fd[i] = -1; | ||||||
|  |  | ||||||
|  | #ifdef ANDROID | ||||||
|  |         if (soc_type == BT_SOC_ROME || soc_type == BT_SOC_CHEROKEE || soc_type == BT_SOC_NAPIER) { | ||||||
|  |             /*call ANT_USERIAL_OPEN to get ANT handle*/ | ||||||
|  |             ret = vendor_interface->op((bt_vendor_opcode_t)BT_VND_OP_ANT_USERIAL_OPEN, fd); | ||||||
|  |     } | ||||||
|  | #else | ||||||
|  | #ifdef BT_SOC_TYPE_ROME | ||||||
|  |         /*call ANT_USERIAL_OPEN to get ANT handle*/ | ||||||
|  |         ret = vendor_interface->op((bt_vendor_opcode_t)BT_VND_OP_ANT_USERIAL_OPEN, fd); | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |         ALOGE("ret value: %d", ret); | ||||||
|  |         if (ret != 1) | ||||||
|  |         { | ||||||
|  |             ALOGE("Failed to get fd from  bt vendor interface"); | ||||||
|  |             return -1; | ||||||
|  |         } else { | ||||||
|  |             ALOGE("FD: %x", fd[0]); | ||||||
|  |             return fd[0]; | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|  |         if (vendor_interface) { | ||||||
|  |             ALOGE("Close and cleanup the interfaces"); | ||||||
|  |  | ||||||
|  | #ifdef ANDROID | ||||||
|  |             if (soc_type == BT_SOC_ROME || soc_type == BT_SOC_CHEROKEE || soc_type == BT_SOC_NAPIER) { | ||||||
|  |                 int ret = vendor_interface->op((bt_vendor_opcode_t)BT_VND_OP_ANT_USERIAL_CLOSE, NULL); | ||||||
|  |             } | ||||||
|  | #else | ||||||
|  | #ifdef BT_SOC_TYPE_ROME | ||||||
|  |             int ret = vendor_interface->op((bt_vendor_opcode_t)BT_VND_OP_ANT_USERIAL_CLOSE, NULL); | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |             ALOGE("ret value: %d", ret); | ||||||
|  |             ALOGI("Turn off BT power"); | ||||||
|  |             powerstate = BT_VND_PWR_OFF; | ||||||
|  |             ret = vendor_interface->op(BT_VND_OP_POWER_CTRL, &powerstate); | ||||||
|  |             if (ret < 0) | ||||||
|  |             { | ||||||
|  |                 ALOGE("Failed to turn off power from  bt vendor interface"); | ||||||
|  |                 return -1; | ||||||
|  |             } | ||||||
|  |             vendor_interface->cleanup(); | ||||||
|  |             vendor_interface = NULL; | ||||||
|  |             return 0; | ||||||
|  |         } else { | ||||||
|  |  | ||||||
|  |             ALOGE("Not able to find vendor interface handle"); | ||||||
|  |             return -1; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_log_send_msg | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Processes the buffer sent and sends it to the libdiag for sending the Cmd | ||||||
|  |   response | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | void ftm_ant_log_send_msg(const uint8 *pEventBuf,int event_bytes) | ||||||
|  | { | ||||||
|  |    int result = log_status(LOG_FTM_VER_2_C); | ||||||
|  |    ftm_ant_log_pkt_type*  ftm_ant_log_pkt_ptr = NULL; | ||||||
|  |  | ||||||
|  |    if((pEventBuf == NULL) || (event_bytes == 0)) | ||||||
|  |       return; | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |    printf("ftm_ant_log_send_msg --> \n"); | ||||||
|  | #endif | ||||||
|  |    if(result == 1) | ||||||
|  |    { | ||||||
|  |       ftm_ant_log_pkt_ptr = (ftm_ant_log_pkt_type *)log_alloc(LOG_FTM_VER_2_C, | ||||||
|  |       FTM_ANT_LOG_HEADER_SIZE + (event_bytes-1)); | ||||||
|  |       if(ftm_ant_log_pkt_ptr != NULL) | ||||||
|  |       { | ||||||
|  |          /* FTM ANT Log PacketID */ | ||||||
|  |          ftm_ant_log_pkt_ptr->ftm_log_id = FTM_ANT_LOG_PKT_ID; | ||||||
|  |          memcpy((void *)ftm_ant_log_pkt_ptr->data,(void *)pEventBuf,event_bytes); | ||||||
|  |          log_commit( ftm_ant_log_pkt_ptr ); | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_ant_dispatch | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Dispatch routine for the various FM Rx/Tx commands. Copies the data into | ||||||
|  |   a global union data structure before calling the processing routine | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   A Packed structre pointer including the response to the FTM FM packet | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | void * ftm_ant_dispatch(ftm_ant_pkt_type *ant_ftm_pkt, uint16 pkt_len) | ||||||
|  | { | ||||||
|  |    ftm_ant_generic_sudo_res *rsp; | ||||||
|  |    int err = 0, i; | ||||||
|  |    int data_len = ant_ftm_pkt->cmd_data_len; | ||||||
|  |    bool resp = false; | ||||||
|  |    unsigned char *pdata = NULL, *ptemp; | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |    printf("ftm_ant_dispatch --> \n"); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |    UNUSED(pkt_len); | ||||||
|  |  | ||||||
|  |    if (first_ant_command == 0) { | ||||||
|  |        first_ant_command = 1; | ||||||
|  |        ftm_ant_open_channel(); | ||||||
|  |    } | ||||||
|  |  | ||||||
|  |    rsp = (ftm_ant_generic_sudo_res*)diagpkt_subsys_alloc( DIAG_SUBSYS_FTM | ||||||
|  |                                                 , FTM_ANT_CMD_CODE | ||||||
|  |                                                 , sizeof(ftm_ant_generic_sudo_res) | ||||||
|  |                                                 ); | ||||||
|  |    if(rsp ==  NULL) | ||||||
|  |    { | ||||||
|  |        printf("%s Failed to allocate resource",__func__); | ||||||
|  |        return NULL; | ||||||
|  |    } | ||||||
|  |  | ||||||
|  |    switch (soc_type) { | ||||||
|  |       //Rome shares the same UART transport for ANT and BT. Hence, to differenciate the | ||||||
|  |       //packets by controller, adding one extra byte for ANT data and control packets | ||||||
|  |        case BT_SOC_ROME: | ||||||
|  |        case BT_SOC_CHEROKEE: | ||||||
|  |        case BT_SOC_NAPIER: | ||||||
|  |            data_len = data_len + 1; | ||||||
|  |            pdata = (unsigned char *) malloc(data_len); | ||||||
|  |            if (pdata == NULL) { | ||||||
|  |                ALOGE("Failed to allocate the memory for ANT command packet"); | ||||||
|  |                rsp->result = FTM_ANT_FAIL; | ||||||
|  |                return (void *) rsp; | ||||||
|  |            } | ||||||
|  |            //To be compatible with Legacy, SMD based PLs, send all the packets | ||||||
|  |            //with cmd opcode 0x0c | ||||||
|  |            pdata[0] = 0x0c; | ||||||
|  |            memcpy(pdata+1, ant_ftm_pkt->data, data_len-1); | ||||||
|  |            err = write(fd_transport_ant_cmd, pdata, data_len); | ||||||
|  |            ptemp = pdata; | ||||||
|  |            break; | ||||||
|  |        case BT_SOC_AR3K: | ||||||
|  |        case BT_SOC_SMD: | ||||||
|  |            /* Send the packet to controller and send a dummy response back to host*/ | ||||||
|  |            err = write(fd_transport_ant_cmd, ant_ftm_pkt->data, data_len); | ||||||
|  |            ptemp = ant_ftm_pkt->data; | ||||||
|  |            break; | ||||||
|  |        default: | ||||||
|  |            ALOGE("%s:Unknown soc type", __func__); | ||||||
|  |            break; | ||||||
|  |    } | ||||||
|  |    if (err == data_len) { | ||||||
|  |        rsp->result = FTM_ANT_SUCCESS; | ||||||
|  |        printf("ANT CMD: "); | ||||||
|  |        for (i = 1; i<data_len; i++) { | ||||||
|  |            printf("%02X ", ptemp[i]); | ||||||
|  |        } | ||||||
|  |        printf("\n"); | ||||||
|  |    } else { | ||||||
|  |        rsp->result = FTM_ANT_FAIL; | ||||||
|  |        printf("FTM ANT write fail len: %d\n", err); | ||||||
|  |    } | ||||||
|  |    if (pdata) | ||||||
|  |      free(pdata); | ||||||
|  |    return (void *)rsp; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_qcomm_handle_event | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  Routine called by the HAL layer reader thread to process the HCI events | ||||||
|  |  The post conditions of each event is covered in a state machine pattern | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | boolean ftm_ant_qcomm_handle_event () | ||||||
|  | { | ||||||
|  |    boolean status = TRUE; | ||||||
|  |    int nbytes,i,len =0; | ||||||
|  |    int event_type; | ||||||
|  |    ftm_ant_generic_res *res = (ftm_ant_generic_res *)diagpkt_subsys_alloc( | ||||||
|  |                                    DIAG_SUBSYS_FTM | ||||||
|  |                                    , FTM_ANT_CMD_CODE | ||||||
|  |                                    , sizeof(ftm_ant_generic_res) | ||||||
|  |                                ); | ||||||
|  |    if(res ==  NULL) | ||||||
|  |     { | ||||||
|  |        printf("%s Failed to allocate res",__func__); | ||||||
|  |        tcflush(fd_transport_ant_cmd, TCIFLUSH); | ||||||
|  |        return FALSE; | ||||||
|  |     } | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |    printf("ftm_ant_hci_qcomm_handle_event --> \n"); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |    /* Read length and event type  of Ant Resp event*/ | ||||||
|  |    nbytes = read(fd_transport_ant_cmd, (void *)res->evt, 2); | ||||||
|  |    if(nbytes <= 0) { | ||||||
|  |       status = FALSE; | ||||||
|  |       printf("ftm_ant_qcomm_handle_event read fail len=%d\n", nbytes); | ||||||
|  |       return status; | ||||||
|  |    } | ||||||
|  |    event_type = res->evt[0]; | ||||||
|  |    len = res->evt[1]; | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |    printf(" event type  =%d\n",event_type); | ||||||
|  |    printf("length of event =%d\n",len); | ||||||
|  | #endif | ||||||
|  |    /* Read out the Ant Resp event*/ | ||||||
|  |    if (len <= (int)sizeof(res->evt)) | ||||||
|  |    { | ||||||
|  |       nbytes = read(fd_transport_ant_cmd, (void *)res->evt, len); | ||||||
|  |       if (nbytes != len) { | ||||||
|  |           res->result = FTM_ANT_FAIL; | ||||||
|  |           status = FALSE; | ||||||
|  |           printf("ftm_ant_qcomm_handle_event read fail len=%d\n", nbytes); | ||||||
|  |       } | ||||||
|  |       else  { | ||||||
|  |           res->result = FTM_ANT_SUCCESS; | ||||||
|  |           printf("ANT EVT: "); | ||||||
|  |           for (i=0; i<nbytes; i++) { | ||||||
|  |             printf("%02X ", res->evt[i]); | ||||||
|  |           } | ||||||
|  |           printf("\n"); | ||||||
|  |           ftm_ant_log_send_msg(res->evt, nbytes); | ||||||
|  |           tcflush(fd_transport_ant_cmd, TCIOFLUSH); | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  |    else | ||||||
|  |    { | ||||||
|  |        res->result = FTM_ANT_FAIL; | ||||||
|  |        status = FALSE; | ||||||
|  |        printf("ftm_ant_qcomm_handle_event read fail len=%d is more than sizeof(res->evt)=%d\n", len, (int)sizeof(res->evt)); | ||||||
|  |    } | ||||||
|  |    return status; | ||||||
|  | } | ||||||
							
								
								
									
										124
									
								
								feeds/ipq95xx/ftm/src/ftm_ant_common.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										124
									
								
								feeds/ipq95xx/ftm/src/ftm_ant_common.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,124 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM FM Common Header File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |   Global Data declarations of the ftm ant component. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2012,2014 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who      what, where, why | ||||||
|  | --------   ---      ---------------------------------------------------------- | ||||||
|  | 05/16/2012 ankurn   Adding support for ANT+ | ||||||
|  | 11/28/12  c_ssugas  Adds data structures and macro for ant log event support. | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | #ifdef CONFIG_FTM_ANT | ||||||
|  |  | ||||||
|  | #include "diagpkt.h" | ||||||
|  | #include "log.h" | ||||||
|  | #include "ftm_bt_common.h" | ||||||
|  |  | ||||||
|  | #include <sys/types.h> | ||||||
|  |  | ||||||
|  | #define APPS_RIVA_ANT_CMD_CH            "/dev/smd5" | ||||||
|  | #define APPS_RIVA_ANT_DATA_CH           "/dev/smd6" | ||||||
|  |  | ||||||
|  | #define FTM_ANT_CMD_CODE                94 | ||||||
|  | #define OPCODE_OFFSET                   5 | ||||||
|  |  | ||||||
|  | #define FTM_ANT_LOG_HEADER_SIZE (sizeof(ftm_ant_log_pkt_type) - 1) | ||||||
|  | #define FTM_ANT_LOG_PKT_ID 0x0D | ||||||
|  |  | ||||||
|  | /* FTM Log Packet - Used to send back the event of a ANT Command */ | ||||||
|  | typedef PACKED struct | ||||||
|  | { | ||||||
|  |    log_hdr_type hdr; | ||||||
|  |    word         ftm_log_id;     /* FTM log id */ | ||||||
|  |    byte         data[1];        /* Variable length payload, | ||||||
|  |                                  look at FTM log id for contents */ | ||||||
|  | } ftm_ant_log_pkt_type; | ||||||
|  |  | ||||||
|  | /* Generic result, used for any command that only returns an error code */ | ||||||
|  | typedef enum { | ||||||
|  |      FTM_ANT_FAIL, | ||||||
|  |      FTM_ANT_SUCCESS, | ||||||
|  | } ftm_ant_api_result_type; | ||||||
|  |  | ||||||
|  | typedef PACKED struct | ||||||
|  | { | ||||||
|  |     diagpkt_subsys_header_type  header ; | ||||||
|  |     char    result ; | ||||||
|  | } ftm_ant_generic_sudo_res; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Generic Response */ | ||||||
|  | typedef PACKED struct | ||||||
|  | { | ||||||
|  |   diagpkt_subsys_header_type  header; /*Diag header*/ | ||||||
|  |   uint8     evt[18];  /*allocates memory to hold longest valid event */ | ||||||
|  |   char      result; /* result */ | ||||||
|  | }__attribute__((packed)) ftm_ant_generic_res; | ||||||
|  |  | ||||||
|  | /* FTM ANT request type */ | ||||||
|  | typedef PACKED struct | ||||||
|  | { | ||||||
|  |   diagpkt_cmd_code_type              cmd_code; | ||||||
|  |   diagpkt_subsys_id_type             subsys_id; | ||||||
|  |   diagpkt_subsys_cmd_code_type       subsys_cmd_code; | ||||||
|  |   uint8                              cmd_id; /* command id (required) */ | ||||||
|  |   uint8                              cmd_data_len; | ||||||
|  |   byte                               data[1]; | ||||||
|  | }__attribute__((packed))ftm_ant_pkt_type; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_ant_dispatch | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Dispatch routine for the various ANT commands. Copies the data into | ||||||
|  |   a global union data structure before calling the processing routine | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   A Packed structre pointer including the response to the FTM ANT packet | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | void * ftm_ant_dispatch(ftm_ant_pkt_type *ftm_ant_pkt, uint16 length ); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_ant_qcomm_handle_event | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Handler for the various ANT Events received. Sends data as log packets | ||||||
|  |   using diag to upper layers. | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   Status value TRUE if event received successfuly | ||||||
|  |   otherwise returns status value FALSE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | boolean ftm_ant_qcomm_handle_event (); | ||||||
|  |  | ||||||
|  | #endif /* CONFIG_FTM_ANT */ | ||||||
							
								
								
									
										2013
									
								
								feeds/ipq95xx/ftm/src/ftm_bt.c
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2013
									
								
								feeds/ipq95xx/ftm/src/ftm_bt.c
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										289
									
								
								feeds/ipq95xx/ftm/src/ftm_bt.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										289
									
								
								feeds/ipq95xx/ftm/src/ftm_bt.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,289 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM BT Task Header File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |   Global Data declarations of the ftm bt component. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010-2011, 2013-2014 by Qualcomm Technologies, Inc. | ||||||
|  | # All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 09/28/11   rrr      Moved peristent NV item related APIs to CPP, | ||||||
|  |                     for having BD address being programmed twice if previous | ||||||
|  |                     BD address was random generated. | ||||||
|  | 09/03/11   agaja    Added support for NV_READ and NV_WRITE Commands to write | ||||||
|  |                     onto Persist File system | ||||||
|  | 02/08/11   braghave Changes to read the HCI commands from a binary file for | ||||||
|  | 		    non-Android case | ||||||
|  | 06/18/10   rakeshk  Created a header file to hold the definitons for ftm bt | ||||||
|  |                     task | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | #ifdef  CONFIG_FTM_BT | ||||||
|  |  | ||||||
|  | #include "diagpkt.h" | ||||||
|  | #include <sys/types.h> | ||||||
|  | #ifdef USE_LIBSOCCFG | ||||||
|  | #include "btqsocnvm.h" | ||||||
|  | #include "btqsocnvmutils.h" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* ------------------------------------------------------------------------- | ||||||
|  | ** Definitions and Declarations | ||||||
|  | ** ------------------------------------------------------------------------- */ | ||||||
|  |  | ||||||
|  | #define FTM_BT_CMD_CODE 4          /* BT FTM Command code */ | ||||||
|  | #define FTM_FM_CMD_CODE 28         /* FM FTM Command code */ | ||||||
|  | #define HCI_EVT_HDR_SIZE  3 | ||||||
|  | #define HCI_ACL_HDR_SIZE  5 | ||||||
|  | #define PROTOCOL_BYTE_SIZE 1 | ||||||
|  | #define HC_VS_MAX_CMD_EVENT  260 | ||||||
|  | #define HC_VS_MAX_ACL  1200 | ||||||
|  | #define FTM_BT_HCI_USER_CMD 0 | ||||||
|  | #define BT_FTM_CMD_RSP_LEN 1100 | ||||||
|  | #define FTM_BT_DRV_START_TEST 0xA | ||||||
|  |  | ||||||
|  | /* MACROS for pin connectivty test*/ | ||||||
|  | #define BT_CMD_SLIM_TEST          0xBFAC | ||||||
|  | #define LOOP_BACK_EVT_OGF         0x02 | ||||||
|  | #define LOOP_BACK_EVT_OCF         0x18 | ||||||
|  | #define LOOP_BACK_EVT_STATUS      0x00 | ||||||
|  | #define LOOP_BACK_EVT_OGF_BIT     0x04 | ||||||
|  | #define LOOP_BACK_EVT_OCF_BIT     0x05 | ||||||
|  | #define LOOP_BACK_EVT_STATUS_BIT  0x06 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define FTM_BT_LOG_HEADER_SIZE (sizeof(ftm_bt_log_pkt_type) - 1) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Vendor Specific command codes */ | ||||||
|  | #define BT_QSOC_EDL_CMD_OPCODE             (0xFC00) | ||||||
|  | #define BT_QSOC_NVM_ACCESS_OPCODE          (0xFC0B) | ||||||
|  |  | ||||||
|  | #define BT_QSOC_EDL_CMD_CODE             (0x00) | ||||||
|  | #define BT_QSOC_NVM_ACCESS_CODE          (0x0B) | ||||||
|  | #define BT_QSOC_VS_EDL_APPVER_RESP   	(0x02) | ||||||
|  |  | ||||||
|  | #ifndef HC_VS_MAX_CMD_EVENT | ||||||
|  | #define HC_VS_MAX_CMD_EVENT  260 | ||||||
|  | #endif /* HC_VS_MAX_CMD_EVENT */ | ||||||
|  |  | ||||||
|  | #define BT_QSOC_MAX_NVM_CMD_SIZE     0x64  /* Maximum size config (NVM) cmd  */ | ||||||
|  | #define BT_QSOC_MAX_BD_ADDRESS_SIZE  0x06  /**< Length of BT Address */ | ||||||
|  |  | ||||||
|  | #ifndef HCI_CMD_HDR_SIZE | ||||||
|  | #define HCI_CMD_HDR_SIZE  4 | ||||||
|  | #endif /* HCI_CMD_HDR_SIZE */ | ||||||
|  |  | ||||||
|  | #ifndef HCI_EVT_HDR_SIZE | ||||||
|  | #define HCI_EVT_HDR_SIZE  3 | ||||||
|  | #endif /* HCI_EVT_HDR_SIZE */ | ||||||
|  |  | ||||||
|  | #define FTM_BT_LOG_PKT_ID 0x01 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define BT_HCI_CMD_PKT 0x01 | ||||||
|  | #define BT_HCI_ACL_PKT 0x02 | ||||||
|  | #define BT_HCI_EVT_PKT 0x04 | ||||||
|  |  | ||||||
|  | #define BT_HCI_CMD_CMPLT_EVT 0x0E | ||||||
|  | #define FM_HCI_EVT_PKT 0x14 | ||||||
|  | #define FM_HCI_CMD_PKT 0x11 | ||||||
|  |  | ||||||
|  | extern int boardtype; | ||||||
|  |  | ||||||
|  | /* VS command structure */ | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   uint8  vs_cmd_len; | ||||||
|  |   uint8  vs_cmd_data[BT_QSOC_MAX_NVM_CMD_SIZE]; | ||||||
|  | } bt_qsoc_cfg_tbl_struct_type; | ||||||
|  |  | ||||||
|  | /* First Commamd structure - Used to store the First command for later | ||||||
|  | *  processing | ||||||
|  | */ | ||||||
|  | struct first_cmd | ||||||
|  | { | ||||||
|  |   uint8 *cmd_buf; | ||||||
|  |   int cmd_len; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* FTM Global State - Enum defines the various states of the FTM | ||||||
|  | * module | ||||||
|  | */ | ||||||
|  | typedef enum ftm_state | ||||||
|  | { | ||||||
|  |   FTM_SOC_NOT_INITIALISED, | ||||||
|  |   FTM_SOC_READ_APP_VER, | ||||||
|  |   FTM_SOC_READ_HW_VER, | ||||||
|  |   FTM_SOC_POKE8_TBL_INIT, | ||||||
|  |   FTM_SOC_DOWNLOAD_NVM, | ||||||
|  |   FTM_SOC_DOWNLOAD_NVM_EFS, | ||||||
|  |   FTM_SOC_SLEEP_DISABLE, | ||||||
|  |   FTM_SOC_RESET, | ||||||
|  |   FTM_SOC_INITIALISED | ||||||
|  | }ftm_state; | ||||||
|  | /* FTM CMD status */ | ||||||
|  | typedef enum ftm_log_packet_type | ||||||
|  | { | ||||||
|  |   FTM_USER_CMD_PASS, | ||||||
|  |   FTM_USER_CMD_FAIL, | ||||||
|  |   FTM_HCI_EVENT | ||||||
|  | }ftm_log_packet_type; | ||||||
|  |  | ||||||
|  | /* FTM Log Packet - Used to send back the event of a HCI Command */ | ||||||
|  | typedef PACKED struct | ||||||
|  | { | ||||||
|  |   log_hdr_type hdr; | ||||||
|  |   byte         data[1];         /* Variable length payload, | ||||||
|  |                                    look at FTM log id for contents */ | ||||||
|  | } ftm_bt_log_pkt_type; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* FTM (BT) PKT Header */ | ||||||
|  | typedef PACKED struct | ||||||
|  | { | ||||||
|  |   word cmd_id;            /* command id (required) */ | ||||||
|  |   word cmd_data_len;      /* request pkt data length, excluding the diag and ftm headers | ||||||
|  |                              (optional, set to 0 if not used)*/ | ||||||
|  |   word cmd_rsp_pkt_size;  /* rsp pkt size, size of response pkt if different then req pkt | ||||||
|  |                              (optional, set to 0 if not used)*/ | ||||||
|  | } ftm_bt_cmd_header_type; | ||||||
|  |  | ||||||
|  | /* Bluetooth FTM packet */ | ||||||
|  | typedef PACKED struct | ||||||
|  | { | ||||||
|  |   diagpkt_subsys_header_type diag_hdr; | ||||||
|  |   ftm_bt_cmd_header_type     ftm_hdr; | ||||||
|  |   byte                       data[1]; | ||||||
|  | } ftm_bt_pkt_type; | ||||||
|  |  | ||||||
|  | /* SoC Cfg open Struct*/ | ||||||
|  | #ifdef USE_LIBSOCCFG | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |    bt_qsoc_config_params_struct_type run_time_params; | ||||||
|  |    bt_qsoc_enum_nvm_mode nvm_mode; | ||||||
|  |    bt_qsoc_enum_type soc_type; | ||||||
|  | }ftm_bt_soc_runtime_cfg_type; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_err_timedout | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   This routine triggers the shutdown of the HCI and Power resources in case | ||||||
|  |   a HCI command previously sent times out. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN NIL | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   NONE | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | void ftm_bt_err_timedout(); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_dispatch | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Processes the BT FTM packet and dispatches the command to FTM HCI driver | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   NIL,The error in the Command Processing is sent to the DIAG App on PC via | ||||||
|  |   log packets | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | void ftm_bt_dispatch(void *ftm_bt_pkt ,int cmd_len ); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   bt_hci_send_ftm_cmd | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  Helper Routine to process the HCI cmd and invokes the sub routines to intialise | ||||||
|  |  the SoC if needed based on the state of the FTM module | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | boolean ftm_bt_hci_send_cmd | ||||||
|  | ( | ||||||
|  |   uint8 * cmd_buf,   /* pointer to Cmd */ | ||||||
|  |   uint16 cmd_len     /* Cmd length */ | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   bt_hci_hal_vs_sendcmd | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  Helper Routine to process the VS HCI cmd and constucts the HCI packet before | ||||||
|  |  calling bt_hci_send_ftm_cmd routine | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_hal_vs_sendcmd | ||||||
|  | ( | ||||||
|  | uint16 opcode,       /* Opcode */ | ||||||
|  | uint8  *pCmdBuffer,  /* Pointer to Payload*/ | ||||||
|  | uint8  nSize         /* Cmd Size */ | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   isLatestTarget | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  | For all the target/solution which has Bluedroid as stack and libbt-vendor as | ||||||
|  | vendor initialization component considered as latest target | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean isLatestTarget(); | ||||||
|  | char *get_current_time(void); | ||||||
|  | #endif /* CONFIG_FTM_BT */ | ||||||
							
								
								
									
										115
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_common.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										115
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_common.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,115 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM BT Commom Header File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |   The header file includes helper enums for request_status and bt_power_state. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010-2011, 2014 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 09/28/11   rrr      Common utility API abstracted, | ||||||
|  | 06/18/10   rakeshk  Created a header file to hold the  helper enums for | ||||||
|  |                     request_status and bt_power_state | ||||||
|  | ========================================================================*/ | ||||||
|  |  | ||||||
|  | #ifdef  CONFIG_FTM_BT | ||||||
|  |  | ||||||
|  | #include "event.h" | ||||||
|  | #include "msg.h" | ||||||
|  | #include "log.h" | ||||||
|  |  | ||||||
|  | #include "diag_lsm.h" | ||||||
|  | #include <sys/types.h> | ||||||
|  |  | ||||||
|  | #ifndef __FTM_BT_COMMON_H__ | ||||||
|  |  | ||||||
|  | #define __FTM_BT_COMMON_H__ | ||||||
|  |  | ||||||
|  | #define TRUE 1 | ||||||
|  | #define FALSE 0 | ||||||
|  |  | ||||||
|  | /* request_status - enum to encapuslate the status of a HAL request*/ | ||||||
|  | typedef enum request_status | ||||||
|  | { | ||||||
|  |   STATUS_SUCCESS, | ||||||
|  |   STATUS_FAIL, | ||||||
|  |   STATUS_NO_RESOURCES, | ||||||
|  |   STATUS_SHORT_WRITE, | ||||||
|  |   STATUS_SHORT_READ | ||||||
|  | }request_status; | ||||||
|  |  | ||||||
|  | /* request_status - enum to encapuslate the possible statea of BT power*/ | ||||||
|  | typedef enum bt_power_state | ||||||
|  | { | ||||||
|  |   BT_OFF = 0x30, /* Its the value 0 to be input to rfkill driver */ | ||||||
|  |   BT_ON = 0x31 /* ASCII value for '1'*/ | ||||||
|  | }bt_power_state; | ||||||
|  |  | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   FTM_BT_DRV_NO_ERR = 0, | ||||||
|  |   FTM_BT_DRV_CONN_TEST_FAILS, | ||||||
|  |   FTM_BT_DRV_QSOC_POWERUP_FAILS, | ||||||
|  |   FTM_BT_DRV_RX_PKT_TYPE_NOT_SUPPORTED, | ||||||
|  |   FTM_BT_DRV_SIO_OPEN_FAILS, | ||||||
|  |   FTM_BT_DRV_NO_SOC_RSP_TOUT, | ||||||
|  |   FTM_BT_DRV_BAD_NVM, | ||||||
|  | #ifdef BT_NV_SUPPORT | ||||||
|  |   FTM_BT_NV_READ_FAIL, | ||||||
|  |   FTM_BT_NV_WRITE_FAIL, | ||||||
|  | #endif | ||||||
|  |   FTM_BT_DRV_UNKNOWN_ERR | ||||||
|  | } ftm_bt_drv_err_state_type; | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_qcomm_handle_event | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Routine called by the HAL layer reader thread to process the HCI events | ||||||
|  |   The post conditions of each event is covered in a state machine pattern | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_qcomm_handle_event(); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_log_send_msg | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Processes the buffer sent and sends it to the libdiag for sending the Cmd | ||||||
|  |   response | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void ftm_log_send_msg(const uint8 *pEventBuf,int event_bytes); | ||||||
|  | #endif //__FTM_BT_COMMON_H__ | ||||||
|  | #endif /* CONFIG_FTM_BT */ | ||||||
							
								
								
									
										161
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_hci_hal.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										161
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_hci_hal.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,161 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM BT HCI PFAL Header File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |    Warpper API definitions of the ftm bt hci hal component. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 06/18/10   rakeshk  Created a header file to hold the wrapper HAL | ||||||
|  |                     definitions for HCI UART control | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | #include "ftm_bt_common.h" | ||||||
|  | #include "ftm_bt_hci_pfal.h" | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_hal_set_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   sets the type of transport based on the msm type | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  | returns the type of transport | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_hal_set_transport() | ||||||
|  | { | ||||||
|  |    return ftm_bt_hci_pfal_set_transport(); | ||||||
|  | } | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_hal_deinit_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform independent wrapper API which intiatea a De-intialise of UART/SMD | ||||||
|  |   resources with PFAL layer and returns the status of the PFAL operation | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_hal_deinit_transport() | ||||||
|  | { | ||||||
|  |   return ftm_bt_hci_pfal_deinit_transport(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_hal_init_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform independent wrapper API which intiatea a intialise of UART/SMD | ||||||
|  |   resources with PFAL layer and returns the status of the PFAL operation | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_hal_init_transport (int mode) | ||||||
|  | { | ||||||
|  |   return ftm_bt_hci_pfal_init_transport(mode); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_hal_nwrite | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform independent wrapper API which intiates a write operation | ||||||
|  |   with the PFAL layer and returns the status of the PFAL operation. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_hal_nwrite(uint8 *buf, int size) | ||||||
|  | { | ||||||
|  |   return ftm_bt_hci_pfal_nwrite(buf,size); | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_hal_nread | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform independent wrapper API which intiates a read operation | ||||||
|  |   with the PFAL layer and returns the status of the PFAL operation. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_hal_nread(uint8 *buf, int size) | ||||||
|  | { | ||||||
|  |   return ftm_bt_hci_pfal_nread(buf,size); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_hal_changebaudrate | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform independent wrapper API which intiatea a UART baud rate change | ||||||
|  |   with the PFAL layer and returns the status of the PFAL request. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   TRUE if SUCCESS, else FAIL | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_hal_changebaudrate (uint32 new_baud) | ||||||
|  | { | ||||||
|  |   return ftm_bt_hci_pfal_changebaudrate(new_baud); | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										177
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_hci_pfal.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										177
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_hci_pfal.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,177 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM BT HCI PFAL Header File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |    PFAL API declarations of the ftm bt hci pfal component. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 06/18/10   rakeshk  Created a header file to hold the PFAL declarations for | ||||||
|  |                     HCI UART programming | ||||||
|  | ===========================================================================*/ | ||||||
|  | #include "ftm_bt_common.h" | ||||||
|  |  | ||||||
|  | #ifndef __FTM_BT_HCI_PFAL_H__ | ||||||
|  | #define __FTM_BT_HCI_PFAL_H__ | ||||||
|  |  | ||||||
|  | #define PIN_CON_CMD_OGF               0xFC | ||||||
|  | #define PIN_CON_CMD_OCF               0x0C | ||||||
|  | #define PIN_CON_CMD_SUB_OP            0x38 | ||||||
|  | #define PIN_CON_INTERFACE_ID          0x01 | ||||||
|  | #define PIN_CON_EVENT_LEN             0x06 | ||||||
|  | #define EXT_PIN_CON_LEN               0x02 | ||||||
|  |  | ||||||
|  | #define PIN_CON_CMD_OCF_BIT           0x01 | ||||||
|  | #define PIN_CON_CMD_OGF_BIT           0x02 | ||||||
|  | #define PIN_CON_CMD_SUBOP_BIT         0x04 | ||||||
|  | #define PIN_CON_CMD_INTER_BIT         0x05 | ||||||
|  |  | ||||||
|  | #define PIN_CON_EVT_OGF_BIT           0x05 | ||||||
|  | #define PIN_CON_EVT_OCF_BIT           0x04 | ||||||
|  | #define PIN_CON_EVT_SUB_OP_BIT        0x07 | ||||||
|  | #define PIN_CON_INTERFACE_ID_EVT_BIT  0x08 | ||||||
|  | #define PIN_CON_EVENT_LEN_BIT         0x02 | ||||||
|  | #define PIN_CON_EVT_STATUS_BIT        0x06 | ||||||
|  |  | ||||||
|  | #define LOG_TAG "ftmdaemon" | ||||||
|  |  | ||||||
|  | #define PRI_INFO " I" | ||||||
|  | #define PRI_WARN " W" | ||||||
|  | #define PRI_ERROR " E" | ||||||
|  | #define PRI_DEBUG " D" | ||||||
|  | #define PRI_VERB " V" | ||||||
|  |  | ||||||
|  | #define ALOG(pri, tag, fmt, arg...) fprintf(stderr, tag pri ": " fmt"\n", ##arg) | ||||||
|  | #define ALOGV(fmt, arg...) ALOG(PRI_VERB, LOG_TAG, fmt, ##arg) | ||||||
|  | #define ALOGD(fmt, arg...) ALOG(PRI_DEBUG, LOG_TAG, fmt, ##arg) | ||||||
|  | #define ALOGI(fmt, arg...) ALOG(PRI_INFO, LOG_TAG, fmt, ##arg) | ||||||
|  | #define ALOGW(fmt, arg...) ALOG(PRI_WARN, LOG_TAG, fmt, ##arg) | ||||||
|  | #define ALOGE(fmt, arg...) ALOG(PRI_ERROR, LOG_TAG, fmt, ##arg) | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_set_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  sets the type of transport based on the msm type | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  | returns the type of transport | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_pfal_set_transport(void); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_deinit_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to de-intialise the UART/SMD resource. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_deinit_transport(); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_init_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to intialise the UART/SMD resources. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_init_transport (); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_nwrite | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to write the data in the argument to the UART/SMD | ||||||
|  |   port intialised. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_nwrite(uint8 *buf, int size); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_nread | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to read data from the UART/SMD port intialised into | ||||||
|  |   the buffer passed in argument. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_nread(uint8 *buf, int size); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_changebaudrate | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to intiate a change in baud rate | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   TRUE if SUCCESS, else FALSE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_pfal_changebaudrate (uint32 new_baud); | ||||||
|  |  | ||||||
|  | #endif //__FTM_BT_HCI_PFAL_H__ | ||||||
							
								
								
									
										674
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_hci_pfal_linux.c
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										674
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_hci_pfal_linux.c
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,674 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM Platform specfic HCI UART/SMD File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |   Platform specific routines to program the UART/SMD descriptors | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010-2011, 2013 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 06/07/11   bneti       Add support smd support for msm8960 | ||||||
|  | 06/18/10   rakeshk  Created a source file to implement platform specific | ||||||
|  |                     routines for UART | ||||||
|  | 07/07/10   rakeshk  Removed the conversion of 3.2 Mbps baud rate | ||||||
|  | 01/07/10   rakeshk  Added support for verbose logging of Cmd and events | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | #include <errno.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <sys/ioctl.h> | ||||||
|  | #include <sys/socket.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <sys/select.h> | ||||||
|  | #include <termios.h> | ||||||
|  | #include <pthread.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <dlfcn.h> | ||||||
|  | #include "bt_vendor_lib.h" | ||||||
|  | #include "ftm_bt_hci_pfal.h" | ||||||
|  | #include "ftm_common.h" | ||||||
|  | #include <string.h> | ||||||
|  | #include "log.h" | ||||||
|  | #include <cutils/properties.h> | ||||||
|  | #include "hidl_client.h" | ||||||
|  |  | ||||||
|  | #ifdef ANDROID | ||||||
|  | #define VENDOR_LIB "libbt-vendor.so" | ||||||
|  | #else | ||||||
|  | #define VENDOR_LIB "libbt-vendor.so.0" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | uint8_t is_slim_bus_test = 0; | ||||||
|  | #define UNUSED(x) (void)(x) | ||||||
|  |  | ||||||
|  | /*identify the transport type*/ | ||||||
|  | static char *transport_dev; | ||||||
|  |  | ||||||
|  | typedef enum { | ||||||
|  |     BT_SOC_DEFAULT = 0, | ||||||
|  |     BT_SOC_SMD = BT_SOC_DEFAULT, | ||||||
|  |     BT_SOC_AR3K, | ||||||
|  |     BT_SOC_ROME, | ||||||
|  |     BT_SOC_CHEROKEE, | ||||||
|  |     BT_SOC_NAPIER, | ||||||
|  |     /* Add chipset type here */ | ||||||
|  |     BT_SOC_RESERVED | ||||||
|  | } bt_soc_type; | ||||||
|  |  | ||||||
|  | static void vendor_fwcfg_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_scocfg_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_lpm_vnd_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_audio_state_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void* vendor_alloc(int size) { | ||||||
|  |     UNUSED(size); | ||||||
|  |     return NULL; | ||||||
|  | } | ||||||
|  | static void vendor_dealloc(void *p_buf) { | ||||||
|  |     UNUSED(p_buf); | ||||||
|  | } | ||||||
|  | static uint8_t vendor_xmit_cb(uint16_t opcode, void *p_buf, tINT_CMD_CBACK p_cback) { | ||||||
|  |     UNUSED(opcode); | ||||||
|  |     UNUSED(p_buf); | ||||||
|  |     UNUSED(p_cback); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | static void vendor_epilog_cb(bt_vendor_op_result_t result) { | ||||||
|  |     UNUSED(result); | ||||||
|  | } | ||||||
|  | static void vendor_a2dp_offload_cb(bt_vendor_op_result_t result, bt_vendor_opcode_t op, unsigned char handle) { | ||||||
|  |     UNUSED(result); | ||||||
|  |     UNUSED(op); | ||||||
|  |     UNUSED(handle); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bt_vendor_interface_t *vendor_interface=NULL; | ||||||
|  | static const bt_vendor_callbacks_t vendor_callbacks = { | ||||||
|  |   sizeof(bt_vendor_callbacks_t), | ||||||
|  |     vendor_fwcfg_cb, | ||||||
|  |     vendor_scocfg_cb, | ||||||
|  |     vendor_lpm_vnd_cb, | ||||||
|  |     vendor_audio_state_cb, | ||||||
|  |     vendor_alloc, | ||||||
|  |     vendor_dealloc, | ||||||
|  |     vendor_xmit_cb, | ||||||
|  |     vendor_epilog_cb, | ||||||
|  |     vendor_a2dp_offload_cb | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /*BT HS UART TTY DEVICE */ | ||||||
|  | #define BT_HS_UART_DEVICE "/dev/ttyHS0" | ||||||
|  |  | ||||||
|  | /*BT RIVA-SMD CHANNELS */ | ||||||
|  | #define APPS_RIVA_BT_ACL_CH  "/dev/smd2" | ||||||
|  | #define APPS_RIVA_BT_CMD_CH  "/dev/smd3" | ||||||
|  |  | ||||||
|  | /* Variables to identify the platform */ | ||||||
|  | char transport_type[PROPERTY_VALUE_MAX]; | ||||||
|  | static boolean is_transportSMD; | ||||||
|  |  | ||||||
|  | extern int soc_type; | ||||||
|  |  | ||||||
|  | /* Reader thread handle */ | ||||||
|  | pthread_t hci_cmd_thread_hdl; | ||||||
|  | /* Pipe file descriptors for cancelling read operation */ | ||||||
|  | int pipefd[2]; | ||||||
|  | /* Transport file descriptor */ | ||||||
|  | int fd_transport; | ||||||
|  | /* Starting baud rate to init the tty device */ | ||||||
|  | int starting_baud = 115200; | ||||||
|  | /* Verbose output monitoring variable */ | ||||||
|  | int verbose = 1; | ||||||
|  | /* Defintion to convert integer baud rate to the | ||||||
|  |  * Data type understood by tty device | ||||||
|  |  */ | ||||||
|  | #define BAUDCLAUS(i) case (i): return ( B##i ) | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   convert_baud | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Routine to convert the integer baud rate to type speed_t | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   Converted Baud rate, else default 0 | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | static speed_t convert_baud(uint32 baud_rate) | ||||||
|  | { | ||||||
|  |   switch (baud_rate) | ||||||
|  |   { | ||||||
|  |     BAUDCLAUS(50); | ||||||
|  |     BAUDCLAUS(75); | ||||||
|  |     BAUDCLAUS(110); | ||||||
|  |     BAUDCLAUS(134); | ||||||
|  |     BAUDCLAUS(150); | ||||||
|  |     BAUDCLAUS(200); | ||||||
|  |     BAUDCLAUS(300); | ||||||
|  |     BAUDCLAUS(600); | ||||||
|  |     BAUDCLAUS(1200); | ||||||
|  |     BAUDCLAUS(1800); | ||||||
|  |     BAUDCLAUS(2400); | ||||||
|  |     BAUDCLAUS(4800); | ||||||
|  |     BAUDCLAUS(9600); | ||||||
|  |     BAUDCLAUS(19200); | ||||||
|  |     BAUDCLAUS(38400); | ||||||
|  |     BAUDCLAUS(57600); | ||||||
|  |     BAUDCLAUS(115200); | ||||||
|  |     BAUDCLAUS(230400); | ||||||
|  |     BAUDCLAUS(460800); | ||||||
|  |     BAUDCLAUS(500000); | ||||||
|  |     BAUDCLAUS(576000); | ||||||
|  |     BAUDCLAUS(921600); | ||||||
|  |     BAUDCLAUS(1000000); | ||||||
|  |     BAUDCLAUS(1152000); | ||||||
|  |     BAUDCLAUS(1500000); | ||||||
|  |     BAUDCLAUS(2000000); | ||||||
|  |     BAUDCLAUS(2500000); | ||||||
|  |     BAUDCLAUS(3000000); | ||||||
|  |     BAUDCLAUS(3500000); | ||||||
|  |     BAUDCLAUS(4000000); | ||||||
|  |  | ||||||
|  |     default: return 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_readerthread | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Thread Routine to perfom asynchrounous handling of events coming on Uart/Smd | ||||||
|  |   descriptor. It invokes a callback to the FTM BT layer to intiate a request | ||||||
|  |   to read event bytes. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   The LifeTime of ReaderThraad is dependent on the status returned by the | ||||||
|  |   call to ftm_bt_hci_qcomm_handle_event | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN NIL | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | void *ftm_readerthread(void *ptr) | ||||||
|  | { | ||||||
|  |   UNUSED(ptr); | ||||||
|  |   boolean status = FALSE; | ||||||
|  |   int retval; | ||||||
|  |   fd_set readfds; | ||||||
|  |   int buf; | ||||||
|  |  | ||||||
|  |   do | ||||||
|  |   { | ||||||
|  |     FD_ZERO(&readfds); | ||||||
|  |     FD_SET(fd_transport, &readfds); | ||||||
|  |     FD_SET(pipefd[0],&readfds); | ||||||
|  |     retval = select((pipefd[0] > fd_transport? pipefd[0] : fd_transport) + 1, | ||||||
|  |                    &readfds, NULL, NULL, NULL); | ||||||
|  |     if(retval == -1) | ||||||
|  |     { | ||||||
|  |       printf("select failed\n"); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |     if(FD_ISSET(pipefd[0],&readfds)) | ||||||
|  |     { | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |        printf("Pipe descriptor set\n"); | ||||||
|  | #endif | ||||||
|  |        read(pipefd[0],&buf,1); | ||||||
|  |        if(buf == 1) | ||||||
|  |          break; | ||||||
|  |     } | ||||||
|  |     if(FD_ISSET(fd_transport,&readfds)) | ||||||
|  |     { | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |       printf("Read descriptor set\n"); | ||||||
|  | #endif | ||||||
|  |       status = ftm_bt_hci_qcomm_handle_event(); | ||||||
|  |       if(TRUE != status) | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   while(1); | ||||||
|  | #ifdef FTM_DEBUG | ||||||
|  |   printf("\nReader thread exited\n"); | ||||||
|  | #endif | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_pfal_set_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  sets the type of transport based on the msm type | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  | returns the type of transport | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_pfal_set_transport(void) | ||||||
|  | { | ||||||
|  |     if (soc_type == BT_SOC_ROME || soc_type == BT_SOC_CHEROKEE || soc_type == BT_SOC_NAPIER) { | ||||||
|  |         strlcpy(transport_type, "uart", sizeof(transport_type)); | ||||||
|  |         printf("[%s]: Transport type is: %s\n", __FUNCTION__, transport_type); | ||||||
|  |         is_transportSMD = 0; | ||||||
|  |         transport_dev = BT_HS_UART_DEVICE; | ||||||
|  |     } else { | ||||||
|  |         strlcpy(transport_type, "smd", sizeof(transport_type)); | ||||||
|  |         printf("[%s]: Transport type is: %s\n", __FUNCTION__, transport_type); | ||||||
|  |         is_transportSMD = 1; | ||||||
|  |         transport_dev = APPS_RIVA_BT_CMD_CH; | ||||||
|  |     } | ||||||
|  |     return is_transportSMD; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | int init_transport_bdroid(boolean on) { | ||||||
|  |  | ||||||
|  |     void *so_handle; | ||||||
|  |     unsigned char bdaddr[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06}; | ||||||
|  |     request_status st; | ||||||
|  |     int  fd[CH_MAX], powerstate, ret; | ||||||
|  |  | ||||||
|  |     if (on) { | ||||||
|  |         so_handle = dlopen(VENDOR_LIB, RTLD_NOW); | ||||||
|  |         if (!so_handle) | ||||||
|  |         { | ||||||
|  |            ALOGE("Failed to load vendor component %s", dlerror()); | ||||||
|  |            return -1; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         vendor_interface = (bt_vendor_interface_t *) dlsym(so_handle, "BLUETOOTH_VENDOR_LIB_INTERFACE"); | ||||||
|  |         if (!vendor_interface) | ||||||
|  |         { | ||||||
|  |             ALOGE("Failed to accesst bt vendor interface"); | ||||||
|  |             return -1; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         vendor_interface->init(&vendor_callbacks, bdaddr); | ||||||
|  |  | ||||||
|  |         ALOGI("Turn On BT power"); | ||||||
|  |         powerstate = BT_VND_PWR_ON; | ||||||
|  |         ret = vendor_interface->op(BT_VND_OP_POWER_CTRL, &powerstate); | ||||||
|  |         if (ret < 0) | ||||||
|  |         { | ||||||
|  |             ALOGE("Failed to turn on power from  bt vendor interface"); | ||||||
|  |             return -1; | ||||||
|  |         } | ||||||
|  |         ret = vendor_interface->op(BT_VND_OP_USERIAL_OPEN, fd); | ||||||
|  |         ALOGE("ret value: %d", ret); | ||||||
|  |         /* This is just a hack; needs to be removed */ | ||||||
|  |         ret = 1; | ||||||
|  |         ALOGE("setting ret value to 1 manually"); | ||||||
|  |         if (ret != 1) | ||||||
|  |         { | ||||||
|  |             ALOGE("Failed to get fd from  bt vendor interface"); | ||||||
|  |             return -1; | ||||||
|  |         } else { | ||||||
|  |             ALOGE("FD: %x", fd[0]); | ||||||
|  |             return fd[0]; | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|  |         if (vendor_interface) { | ||||||
|  |             ALOGE("Close and cleanup the interfaces"); | ||||||
|  |             int ret = vendor_interface->op(BT_VND_OP_USERIAL_CLOSE, NULL); | ||||||
|  |  | ||||||
|  |             ALOGE("ret value: %d", ret); | ||||||
|  |             vendor_interface->cleanup(); | ||||||
|  |             return 0; | ||||||
|  |         } else { | ||||||
|  |  | ||||||
|  |             ALOGE("Not able to find vendor interface handle"); | ||||||
|  |             return -1; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_deinit_transport | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to de-intialise the UART/SMD resource. | ||||||
|  |  | ||||||
|  | PLATFORM SPECIFIC DESCRIPTION | ||||||
|  |   Closes the TTY/SMD file descriptor and sets the descriptor value to -1 | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   The Close of the descriptor will trigger a failure in the Reader Thread | ||||||
|  |   and hence cause a Deinit of the ReaderThread | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_deinit_transport() | ||||||
|  | { | ||||||
|  |   int buf = 1; | ||||||
|  |   write(pipefd[1],&buf,1); | ||||||
|  |   if(!isLatestTarget()) | ||||||
|  |   { | ||||||
|  |     close(fd_transport); | ||||||
|  |     fd_transport = -1; | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     //Use libbt-vendor for chip de-initialization | ||||||
|  |     init_transport_bdroid(FALSE); | ||||||
|  |   } | ||||||
|  |   return STATUS_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_init_uart | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to intialise the UART/SMD resources. | ||||||
|  |  | ||||||
|  | PLATFORM SPECIFIC DESCRIPTION | ||||||
|  |   Opens the TTY/SMD device file descriptor, congiures the TTY/SMD device for CTS/RTS | ||||||
|  |   flow control,sets 115200 for TTY as the default baudrate and starts the Reader | ||||||
|  |   Thread | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_init_transport(int mode) | ||||||
|  | { | ||||||
|  |   struct termios   term; | ||||||
|  |   if(isLatestTarget()) | ||||||
|  |   { | ||||||
|  |     printf("%s: ",__func__ ); | ||||||
|  |     //Use hidl_client_initialize for chip initialization | ||||||
|  |     if (hidl_client_initialize(mode, &fd_transport) == false) { | ||||||
|  |         printf("%s: HIDL client initialization failed \n", __func__); | ||||||
|  |         return STATUS_NO_RESOURCES; | ||||||
|  |     } | ||||||
|  |     printf("%s: , fd:%d: ", __func__, fd_transport); | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     fd_transport = open(transport_dev, (O_RDWR | O_NOCTTY)); | ||||||
|  |  | ||||||
|  |     if (-1 == fd_transport) | ||||||
|  |     { | ||||||
|  |       return STATUS_NO_RESOURCES; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (tcflush(fd_transport, TCIOFLUSH) < 0) | ||||||
|  |     { | ||||||
|  |       close(fd_transport); | ||||||
|  |       return STATUS_FAIL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (tcgetattr(fd_transport, &term) < 0) | ||||||
|  |     { | ||||||
|  |       close(fd_transport); | ||||||
|  |       return STATUS_FAIL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     cfmakeraw(&term); | ||||||
|  |     /* Set RTS/CTS HW Flow Control*/ | ||||||
|  |     term.c_cflag |= (CRTSCTS | CLOCAL); | ||||||
|  |  | ||||||
|  |     if (tcsetattr(fd_transport, TCSANOW, &term) < 0) | ||||||
|  |     { | ||||||
|  |       close(fd_transport); | ||||||
|  |       return STATUS_FAIL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* Configure the /dev/ttyHS0 device to operate at 115200. | ||||||
|  |      no need for msm8960 as it is using smd as transport | ||||||
|  |      */ | ||||||
|  |     if (!is_transportSMD) | ||||||
|  |        if (ftm_bt_hci_pfal_changebaudrate(starting_baud) == FALSE) | ||||||
|  |        { | ||||||
|  |           close(fd_transport); | ||||||
|  |           return STATUS_FAIL; | ||||||
|  |        } | ||||||
|  |   } | ||||||
|  |   if (pipe(pipefd) == -1) | ||||||
|  |   { | ||||||
|  |     printf("pipe create error"); | ||||||
|  |     return STATUS_FAIL; | ||||||
|  |   } | ||||||
|  |   if(mode != MODE_FM) { | ||||||
|  |   /* Creating read thread which listens for various masks & pkt requests */ | ||||||
|  |   pthread_create( &hci_cmd_thread_hdl, NULL, ftm_readerthread, NULL); | ||||||
|  |   } | ||||||
|  |   return STATUS_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_nwrite | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to write the data in the argument to the UART/SMD | ||||||
|  |   port intialised. | ||||||
|  |  | ||||||
|  | PLATFORM SPECIFIC DESCRIPTION | ||||||
|  |   Write the buffer to the tty device and ensure it is completely written | ||||||
|  |   In case of short write report error to the BT FTM layer. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_nwrite(uint8 *buf, int size) | ||||||
|  | { | ||||||
|  |   int tx_bytes = 0, nwrite; | ||||||
|  |   int i = 0, buf_size = size; | ||||||
|  |   uint8 loop_back_cmd[6] = {0x1, 0x02, 0x18, 0x01, 0x01}; | ||||||
|  |   /*hci packet is not required to carry the Packet indicator (for UART interfaces) for msm8960 | ||||||
|  |      as it is using share memory interface */ | ||||||
|  |   int hci_uart_pkt_ind = 0; | ||||||
|  |  | ||||||
|  |   if(fd_transport < 0) | ||||||
|  |     return STATUS_NO_RESOURCES; | ||||||
|  |   if ( buf[PIN_CON_CMD_OGF_BIT] == PIN_CON_CMD_OGF && | ||||||
|  |        buf[PIN_CON_CMD_OCF_BIT] == PIN_CON_CMD_OCF && | ||||||
|  |       (size > PIN_CON_CMD_SUBOP_BIT) && | ||||||
|  |        buf[PIN_CON_CMD_SUBOP_BIT] == PIN_CON_CMD_SUB_OP && | ||||||
|  |       (size > PIN_CON_CMD_INTER_BIT) && | ||||||
|  |        buf[PIN_CON_CMD_INTER_BIT] == PIN_CON_INTERFACE_ID) | ||||||
|  |   { | ||||||
|  |      is_slim_bus_test = 1; | ||||||
|  |      printf("\nPinConnectivityTest: Sending loopback command to SOC before initiasing slimbus\n"); | ||||||
|  |      strlcpy(buf, loop_back_cmd, size); | ||||||
|  |   } | ||||||
|  |   do | ||||||
|  |   { | ||||||
|  |     nwrite = write(fd_transport, (buf + hci_uart_pkt_ind + tx_bytes), (size - hci_uart_pkt_ind - tx_bytes)); | ||||||
|  |  | ||||||
|  |     if (nwrite < 0) | ||||||
|  |     { | ||||||
|  |       printf("Error while writing ->\n"); | ||||||
|  |       return STATUS_SHORT_WRITE; | ||||||
|  |     } | ||||||
|  |     if (nwrite == 0) | ||||||
|  |     { | ||||||
|  |       printf("ftm_bt_hci_pfal_nwrite: zero-length write\n"); | ||||||
|  |       return STATUS_SHORT_WRITE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tx_bytes += nwrite; | ||||||
|  |     size     -= nwrite; | ||||||
|  |   } while (tx_bytes < size - hci_uart_pkt_ind); | ||||||
|  |  | ||||||
|  |   if (verbose == 1) | ||||||
|  |   { | ||||||
|  |     printf("[%s] %s: CMD:", get_current_time(), __FUNCTION__); | ||||||
|  |     for (i = 0; i < buf_size; i++) | ||||||
|  |     { | ||||||
|  |       printf(" %02X", buf[i]); | ||||||
|  |     } | ||||||
|  |     printf("\n"); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return STATUS_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_nread | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to read data from the UART/SMD port intialised into | ||||||
|  |   the buffer passed in argument. | ||||||
|  |  | ||||||
|  | PLATFORM SPECIFIC DESCRIPTION | ||||||
|  |   Read from the tty device into the buffer and ensure  the read request is | ||||||
|  |   completed, in case of short read report error to the BT FTM layer. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_hci_pfal_nread(uint8 *buf, int size) | ||||||
|  | { | ||||||
|  |   int rx_bytes = 0, nread; | ||||||
|  |  | ||||||
|  |   if(fd_transport < 0) | ||||||
|  |     return STATUS_NO_RESOURCES; | ||||||
|  |  | ||||||
|  |   do | ||||||
|  |   { | ||||||
|  |     nread = read(fd_transport, (buf + rx_bytes), (size - rx_bytes)); | ||||||
|  |     if (nread < 0) | ||||||
|  |     { | ||||||
|  |       printf("Error while reading ->\n"); | ||||||
|  |       return STATUS_SHORT_READ; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     rx_bytes += nread; | ||||||
|  |  | ||||||
|  |   } while (rx_bytes < size); | ||||||
|  |  | ||||||
|  |   return STATUS_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_hci_pfal_changebaudrate | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform specific routine to intiate a change in baud rate | ||||||
|  |  | ||||||
|  | PLATFORM SPECIFIC DESCRIPTION | ||||||
|  |   Convert the Baud rate passed to the speed_t type and program the | ||||||
|  |   Baud rate change after ensuring all transmit is drained at the | ||||||
|  |   current baud rate | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   It is expected that the Upper layer will intiate a Flow Off to the | ||||||
|  |   BT SoC, to signal the stop of receive if the baud rate change is | ||||||
|  |   initiated while SoC init is in progress | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   TRUE if SUCCESS, else FALSE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_hci_pfal_changebaudrate (uint32 new_baud) | ||||||
|  | { | ||||||
|  |   struct termios term; | ||||||
|  |   boolean status = TRUE; | ||||||
|  |   speed_t baud_code; | ||||||
|  |   speed_t actual_baud_code; | ||||||
|  |  | ||||||
|  |   if (tcgetattr(fd_transport, &term) < 0) | ||||||
|  |   { | ||||||
|  |     printf("Can't get port settings\n"); | ||||||
|  |     status = FALSE; | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     baud_code = convert_baud(new_baud); | ||||||
|  |     (void) cfsetospeed(&term, baud_code); | ||||||
|  |     if (tcsetattr(fd_transport, TCSADRAIN, &term) < 0) /* don't change speed until last write done */ | ||||||
|  |     { | ||||||
|  |       printf("bt_hci_qcomm_pfal_changebaudrate: tcsetattr:\n"); | ||||||
|  |       status = FALSE; | ||||||
|  |     } | ||||||
|  |     /* make sure that we reportedly got the speed we tried to set */ | ||||||
|  |     if (1 < verbose) | ||||||
|  |     { | ||||||
|  |       if (tcgetattr(fd_transport, &term) < 0) | ||||||
|  |       { | ||||||
|  |         printf("bt_hci_qcomm_pfal_changebaudrate: tcgetattr:\n"); | ||||||
|  |         status = FALSE; | ||||||
|  |       } | ||||||
|  |       if (baud_code != (actual_baud_code = cfgetospeed(&term))) | ||||||
|  |       { | ||||||
|  |         printf("bt_hci_qcomm_pfal_changebaudrate: new baud %u FAILED, got 0x%x\n", new_baud, actual_baud_code); | ||||||
|  |       } | ||||||
|  |       else | ||||||
|  |       { | ||||||
|  |         printf("bt_hci_qcomm_pfal_changebaudrate: new baud %u SUCCESS, got 0x%x\n", new_baud, actual_baud_code); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return status; | ||||||
|  | } | ||||||
							
								
								
									
										278
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_persist.cpp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										278
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_persist.cpp
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,278 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      BT persist NV items access source file | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |   Read/Write APIs for retreiving NV items from persist memory. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2011-12 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 05/25/12   jav    Added FTM log that will display bt address while testing. | ||||||
|  | 09/27/11   rrr     Moved persist related API for c/c++ compatibility, needed | ||||||
|  |                    for random BD address to be persistent across target | ||||||
|  |                    reboots. | ||||||
|  | ==========================================================================*/ | ||||||
|  |  | ||||||
|  | #include "ftm_bt_persist.h" | ||||||
|  | #include <semaphore.h> | ||||||
|  |  | ||||||
|  | #ifdef BT_NV_SUPPORT | ||||||
|  | #include "bt_nv.h" | ||||||
|  |  | ||||||
|  | /* Semaphore shared by the Event handler and main thread */ | ||||||
|  | extern sem_t semaphore_cmd_complete; | ||||||
|  | /*Flag to manage the verbose output */ | ||||||
|  | extern int verbose; | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_send_nv_read_cmd | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  Helper Routine to process the nv read command | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_send_nv_read_cmd | ||||||
|  | ( | ||||||
|  |   uint8 * cmd_buf,   /* pointer to Cmd */ | ||||||
|  |   uint16 cmd_len     /* Cmd length */ | ||||||
|  | ) | ||||||
|  | { | ||||||
|  |   nv_persist_item_type my_nv_item; | ||||||
|  |   nv_persist_stat_enum_type cmd_result; | ||||||
|  |   boolean result = TRUE; | ||||||
|  |  | ||||||
|  |   if(cmd_len >1) | ||||||
|  |   { | ||||||
|  |     switch(*(cmd_buf+1)) | ||||||
|  |     { | ||||||
|  |       case NV_BD_ADDR_I: | ||||||
|  |         cmd_result = (nv_persist_stat_enum_type)bt_nv_cmd(NV_READ_F,  NV_BD_ADDR_I, &my_nv_item); | ||||||
|  |         if (NV_SUCCESS != cmd_result) | ||||||
|  |         { | ||||||
|  |           if (verbose > 0) | ||||||
|  |           { | ||||||
|  |             fprintf (stderr, "nv_cmd_remote failed to get BD_ADDR from NV, code %d\n", cmd_result); | ||||||
|  |           } | ||||||
|  |           /* Send fail response */ | ||||||
|  |           result = FALSE; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |           /* copy bytes */ | ||||||
|  |           event_buf_nv_read_response[0] = FTM_BT_CMD_NV_READ; | ||||||
|  |           event_buf_nv_read_response[1] = NV_BD_ADDR_I; | ||||||
|  |           event_buf_nv_read_response[7] = my_nv_item.bd_addr[5]; | ||||||
|  |           event_buf_nv_read_response[6] = my_nv_item.bd_addr[4]; | ||||||
|  |           event_buf_nv_read_response[5] = my_nv_item.bd_addr[3]; | ||||||
|  |           event_buf_nv_read_response[4] = my_nv_item.bd_addr[2]; | ||||||
|  |           event_buf_nv_read_response[3] = my_nv_item.bd_addr[1]; | ||||||
|  |           event_buf_nv_read_response[2] = my_nv_item.bd_addr[0]; | ||||||
|  |           /* send BD_ADDR in the response */ | ||||||
|  |           fprintf (stderr, "nv_cmd_remote got NV_BD_ADDR_I from NV: %x:%x:%x:%x:%x:%x\n", | ||||||
|  |                            (unsigned int) my_nv_item.bd_addr[5], (unsigned int) my_nv_item.bd_addr[4], | ||||||
|  |                            (unsigned int) my_nv_item.bd_addr[3], (unsigned int) my_nv_item.bd_addr[2], | ||||||
|  |                            (unsigned int) my_nv_item.bd_addr[1], (unsigned int) my_nv_item.bd_addr[0]); | ||||||
|  |  | ||||||
|  |           ftm_log_send_msg((const uint8 *)event_buf_nv_read_response,nv_read_response_size); | ||||||
|  |           result = TRUE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case NV_BT_SOC_REFCLOCK_TYPE_I: | ||||||
|  |         cmd_result = (nv_persist_stat_enum_type)bt_nv_cmd(NV_READ_F,  NV_BT_SOC_REFCLOCK_TYPE_I, &my_nv_item); | ||||||
|  |         if (NV_SUCCESS != cmd_result) | ||||||
|  |         { | ||||||
|  |           if (verbose > 0) | ||||||
|  |           { | ||||||
|  |             fprintf (stderr, "nv_cmd_remote failed to get BD_ADDR from NV, code %d\n", cmd_result); | ||||||
|  |           } | ||||||
|  |           /* Send fail response */ | ||||||
|  |           result = FALSE; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |           event_buf_nv_read_response[0] = FTM_BT_CMD_NV_READ; | ||||||
|  |           event_buf_nv_read_response[1] = NV_BT_SOC_REFCLOCK_TYPE_I; | ||||||
|  |           event_buf_nv_read_response[2] = (uint8) my_nv_item.bt_soc_refclock_type ; | ||||||
|  |           event_buf_nv_read_response[7] = 0x0; | ||||||
|  |           event_buf_nv_read_response[6] = 0x0; | ||||||
|  |           event_buf_nv_read_response[5] = 0x0; | ||||||
|  |           event_buf_nv_read_response[4] = 0x0; | ||||||
|  |           event_buf_nv_read_response[3] = 0x0; | ||||||
|  |           fprintf (stderr, "nv_cmd_remote got NV_BT_SOC_REFCLOCK_TYPE_I from NV: 0x%x\n", | ||||||
|  |                            (unsigned int) my_nv_item.bt_soc_refclock_type); | ||||||
|  |           ftm_log_send_msg((const uint8 *)event_buf_nv_read_response,nv_read_response_size); | ||||||
|  |           result = TRUE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case NV_BT_SOC_CLK_SHARING_TYPE_I: | ||||||
|  |         cmd_result = (nv_persist_stat_enum_type)bt_nv_cmd(NV_READ_F,  NV_BT_SOC_CLK_SHARING_TYPE_I, &my_nv_item); | ||||||
|  |         if (NV_SUCCESS != cmd_result) | ||||||
|  |         { | ||||||
|  |           if (verbose > 0) | ||||||
|  |           { | ||||||
|  |             fprintf (stderr, "nv_cmd_remote failed to get CLK_SHARING from NV, code %d\n", cmd_result); | ||||||
|  |           } | ||||||
|  |           /* Send fail response */ | ||||||
|  |           result = FALSE; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |           event_buf_nv_read_response[0] = FTM_BT_CMD_NV_READ; | ||||||
|  |           event_buf_nv_read_response[1] = NV_BT_SOC_CLK_SHARING_TYPE_I; | ||||||
|  |           event_buf_nv_read_response[2] = (uint8) my_nv_item.bt_soc_clk_sharing_type ; | ||||||
|  |           event_buf_nv_read_response[7] = 0x0; | ||||||
|  |           event_buf_nv_read_response[6] = 0x0; | ||||||
|  |           event_buf_nv_read_response[5] = 0x0; | ||||||
|  |           event_buf_nv_read_response[4] = 0x0; | ||||||
|  |           event_buf_nv_read_response[3] = 0x0; | ||||||
|  |           fprintf (stderr, "nv_cmd_remote got NV_BT_SOC_CLK_SHARING_TYPE_I from NV: 0x%x\n", | ||||||
|  |                         (unsigned int) my_nv_item.bt_soc_refclock_type); | ||||||
|  |           ftm_log_send_msg((const uint8 *)event_buf_nv_read_response,nv_read_response_size); | ||||||
|  |           result = TRUE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |     if(result == FALSE) | ||||||
|  |       ftm_log_send_msg(event_buf_nv_read_response_fail,nv_read_response_size_fail); | ||||||
|  |  | ||||||
|  |     sem_post(&semaphore_cmd_complete); | ||||||
|  |     return result; | ||||||
|  |   } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_send_nv_write_cmd | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  Helper Routine to process the nv write command | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_send_nv_write_cmd | ||||||
|  | ( | ||||||
|  |   uint8 * cmd_buf,   /* pointer to Cmd */ | ||||||
|  |   uint16 cmd_len     /* Cmd length */ | ||||||
|  | ) | ||||||
|  | { | ||||||
|  |   nv_persist_item_type my_nv_item; | ||||||
|  |   nv_persist_stat_enum_type cmd_result; | ||||||
|  |   boolean result = TRUE; | ||||||
|  |   if(cmd_len >1) | ||||||
|  |   { | ||||||
|  |     switch(*(cmd_buf+1)) | ||||||
|  |     { | ||||||
|  |       case NV_BD_ADDR_I: | ||||||
|  |         memcpy(&my_nv_item.bd_addr, (cmd_buf+2), NV_BD_ADDR_SIZE); | ||||||
|  |         cmd_result = (nv_persist_stat_enum_type)bt_nv_cmd(NV_WRITE_F,  NV_BD_ADDR_I, &my_nv_item); | ||||||
|  |         if (NV_SUCCESS != cmd_result) | ||||||
|  |         { | ||||||
|  |           if (verbose > 0) | ||||||
|  |           { | ||||||
|  |             fprintf (stderr, "nv_cmd_remote failed to get BD_ADDR from NV, code %d\n", cmd_result); | ||||||
|  |           } | ||||||
|  |           /* Send fail response */ | ||||||
|  |           result = FALSE; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |           result = TRUE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case NV_BT_SOC_REFCLOCK_TYPE_I: | ||||||
|  |         switch (*(cmd_buf+2)) | ||||||
|  |         { | ||||||
|  |           case NV_PS_BT_SOC_REFCLOCK_32MHZ: | ||||||
|  |           case NV_PS_BT_SOC_REFCLOCK_19P2MHZ: | ||||||
|  |             my_nv_item.bt_soc_refclock_type = (nv_ps_bt_soc_refclock_enum_type)(*(cmd_buf+2)) ; | ||||||
|  |             break; | ||||||
|  |           default: | ||||||
|  |           fprintf (stderr, "Invalid Ref Clock option\n"); | ||||||
|  |           result = FALSE; | ||||||
|  |         } | ||||||
|  |         if (result != FALSE) | ||||||
|  |         { | ||||||
|  |           cmd_result= (nv_persist_stat_enum_type)bt_nv_cmd(NV_WRITE_F,  NV_BT_SOC_REFCLOCK_TYPE_I, &my_nv_item); | ||||||
|  |           if (NV_SUCCESS != cmd_result) | ||||||
|  |           { | ||||||
|  |             fprintf (stderr, "nv_cmd_remote failed to write SOC_REFCLOCK_TYPE to NV, code %d\n", cmd_result); | ||||||
|  |             result = FALSE; | ||||||
|  |           } | ||||||
|  |           else | ||||||
|  |           { | ||||||
|  |             result = TRUE; | ||||||
|  |           } | ||||||
|  |           break; | ||||||
|  |         } | ||||||
|  |       case NV_BT_SOC_CLK_SHARING_TYPE_I: | ||||||
|  |         switch (*(cmd_buf+2)) | ||||||
|  |         { | ||||||
|  |           case NV_PS_BT_SOC_CLOCK_SHARING_ENABLED: | ||||||
|  |           case NV_PS_BT_SOC_CLOCK_SHARING_DISABLED: | ||||||
|  |             my_nv_item.bt_soc_clk_sharing_type = (nv_ps_bt_soc_clock_sharing_enum_type)(*(cmd_buf+2)) ; | ||||||
|  |             break; | ||||||
|  |           default: | ||||||
|  |           fprintf (stderr, "Invalid Clock Sharing option\n"); | ||||||
|  |           result = FALSE; | ||||||
|  |         } | ||||||
|  |         if (result != FALSE) | ||||||
|  |         { | ||||||
|  |           cmd_result= (nv_persist_stat_enum_type)bt_nv_cmd(NV_WRITE_F, NV_BT_SOC_CLK_SHARING_TYPE_I, &my_nv_item); | ||||||
|  |           if (NV_SUCCESS != cmd_result) | ||||||
|  |           { | ||||||
|  |             fprintf (stderr, "nv_cmd_remote failed to write SOC_CLK_SHARING_TYPE to NV, code %d\n", cmd_result); | ||||||
|  |             result = FALSE; | ||||||
|  |           } | ||||||
|  |           else | ||||||
|  |           { | ||||||
|  |             result = TRUE; | ||||||
|  |           } | ||||||
|  |           break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     if(result == FALSE) | ||||||
|  |     { | ||||||
|  |       ftm_log_send_msg(event_buf_bt_nv_write_fail,nv_write_response_size); | ||||||
|  |       sem_post(&semaphore_cmd_complete); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |       ftm_log_send_msg((const uint8 *)event_buf_bt_nv_write_pass,nv_write_response_size); | ||||||
|  |       sem_post(&semaphore_cmd_complete); | ||||||
|  |     } | ||||||
|  |     return result; | ||||||
|  |   } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  | #endif /* End of BT_NV_SUPPORT */ | ||||||
							
								
								
									
										113
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_persist.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										113
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_persist.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,113 @@ | |||||||
|  | #ifndef _FTM_BT_PERSIST_H_ | ||||||
|  | #define _FTM_BT_PERSIST_H_ | ||||||
|  |  | ||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      BT persist NV items access source file | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |   Read/Write APIs for retreiving NV items from persist memory. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2011 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 09/27/11   rrr     Moved persist related API for c/c++ compatibility, needed | ||||||
|  |                    for random BD address to be persistent across target | ||||||
|  |                    reboots. | ||||||
|  | ==========================================================================*/ | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" | ||||||
|  | { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #include <errno.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include "ftm_bt_common.h" | ||||||
|  | #include <string.h> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifdef BT_NV_SUPPORT | ||||||
|  |  | ||||||
|  | #define FTM_BT_CMD_NV_READ 0xB | ||||||
|  | #define FTM_BT_CMD_NV_WRITE 0xC | ||||||
|  |  | ||||||
|  | const uint8 nv_read_response_size = 8; | ||||||
|  | const uint8 nv_read_response_size_fail = 2; | ||||||
|  | const uint8 nv_write_response_size = 2; | ||||||
|  |  | ||||||
|  | /* NV Write Responses */ | ||||||
|  | const uint8 event_buf_bt_nv_write_pass[2] = { FTM_BT_CMD_NV_WRITE, FTM_BT_DRV_NO_ERR}; | ||||||
|  | const uint8 event_buf_bt_nv_write_fail[2] = { FTM_BT_CMD_NV_WRITE, FTM_BT_NV_WRITE_FAIL}; | ||||||
|  |  | ||||||
|  | /* NV Read Responses */ | ||||||
|  | const uint8 event_buf_nv_read_response_fail[8] = | ||||||
|  | { | ||||||
|  |   FTM_BT_CMD_NV_READ, FTM_BT_NV_READ_FAIL, 0x0, 0x0,0x0,0x0,0x0,0x0 | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | uint8 event_buf_nv_read_response[8]; | ||||||
|  | #endif /* BT_NV_SUPPORT */ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_send_nv_read_cmd | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  Helper Routine to process the nv read command | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_send_nv_read_cmd | ||||||
|  | ( | ||||||
|  |   uint8 * cmd_buf,   /* pointer to Cmd */ | ||||||
|  |   uint16 cmd_len     /* Cmd length */ | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_send_nv_write_cmd | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  Helper Routine to process the nv write command | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   FALSE = failure, else TRUE | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | boolean ftm_bt_send_nv_write_cmd | ||||||
|  | ( | ||||||
|  |   uint8 * cmd_buf,   /* pointer to Cmd */ | ||||||
|  |   uint16 cmd_len     /* Cmd length */ | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* _FTM_BT_PERSIST_H_ */ | ||||||
|  |  | ||||||
							
								
								
									
										76
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_power_hal.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										76
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_power_hal.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,76 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM BT POWER HAL Header File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |    Wrapper API definitions of the ftm bt power hal component. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 06/18/10   rakeshk  Created a header file to include the wrapper API | ||||||
|  |                     definitions for BT power control | ||||||
|  | 07/07/10   rakeshk  Modified the function name of BT power set HAL routine | ||||||
|  | ===========================================================================*/ | ||||||
|  | #include "ftm_bt_common.h" | ||||||
|  | #include "ftm_bt_power_pfal.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef __FTM_BT_POWER_HAL_H__ | ||||||
|  | #define __FTM_BT_POWER_HAL_H__ | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_power_hal_set | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform independent wrapper API which sets a BT power  from PFAL | ||||||
|  |   layer and returns the status of the PFAL operation. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_power_hal_set(bt_power_state state) | ||||||
|  | { | ||||||
|  |   return ftm_bt_power_pfal_set(state); | ||||||
|  | } | ||||||
|  | /*=========================================================================== | ||||||
|  | FtUNCTION    ftm_bt_power_hal_check | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  | ||||||
|  |   Platform independent wrapper API which gets the BT power from PFAL | ||||||
|  |   layer and returns the current state of the BT HW. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   Current BT power state | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | bt_power_state ftm_bt_power_hal_check() | ||||||
|  | { | ||||||
|  |   return ftm_bt_power_pfal_check(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif //__FTM_BT_POWER_HAL_H__ | ||||||
							
								
								
									
										71
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_power_pfal.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										71
									
								
								feeds/ipq95xx/ftm/src/ftm_bt_power_pfal.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,71 @@ | |||||||
|  | /*========================================================================== | ||||||
|  |  | ||||||
|  |                      FTM BT POWER PFAL Header File | ||||||
|  |  | ||||||
|  | Description | ||||||
|  |    PFAL API declarations of the ftm bt power pfal component. | ||||||
|  |  | ||||||
|  | # Copyright (c) 2010 by Qualcomm Technologies, Inc.  All Rights Reserved. | ||||||
|  | # Qualcomm Technologies Proprietary and Confidential. | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  |  | ||||||
|  |                          Edit History | ||||||
|  |  | ||||||
|  |  | ||||||
|  | when       who     what, where, why | ||||||
|  | --------   ---     ---------------------------------------------------------- | ||||||
|  | 06/18/10   rakeshk  Created a header file to hold the PFAL declarations for | ||||||
|  |                     BT power programming | ||||||
|  | 07/07/10   rakeshk  Modified the function name of BT power set PFAL routine | ||||||
|  | ===========================================================================*/ | ||||||
|  | #include "ftm_bt_common.h" | ||||||
|  |  | ||||||
|  | #ifndef __FTM_BT_POWER_PFAL_H__ | ||||||
|  | #define __FTM_BT_POWER_PFAL_H__ | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_power_pfal_set | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |   Platform dependent interface API which sets the BT power | ||||||
|  |   and returns the status of the toggle operation. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   STATUS_SUCCESS if SUCCESS, else other reasons | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | request_status ftm_bt_power_pfal_set(bt_power_state state); | ||||||
|  |  | ||||||
|  | /*=========================================================================== | ||||||
|  | FUNCTION   ftm_bt_power_pfal_check | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  |  | ||||||
|  |   Platform dependent interface API which intiates a BT power read/check | ||||||
|  |   and returns the current state of the BT HW. | ||||||
|  |  | ||||||
|  | DEPENDENCIES | ||||||
|  |   NIL | ||||||
|  |  | ||||||
|  | RETURN VALUE | ||||||
|  |   RETURN VALUE | ||||||
|  |   Current BT power state | ||||||
|  |  | ||||||
|  | SIDE EFFECTS | ||||||
|  |   None | ||||||
|  |  | ||||||
|  | ===========================================================================*/ | ||||||
|  | bt_power_state ftm_bt_power_pfal_check(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user