From c7c54f313425d8f05203d141d056a104ee05c512 Mon Sep 17 00:00:00 2001 From: "Sven Eckelmann (Plasma Cloud)" Date: Thu, 12 Oct 2023 13:57:32 +0200 Subject: [PATCH] ramips: add support for Plasma Cloud PAX1800-Lite Plasma Cloud PAX1800-Lite is a dual-band Wi-Fi 6 router, based on MediaTek MT7621A + MT79x5D platform. Specifications: - SOC: MT7621AT (880 MHz) - DRAM: DDR3 448 MiB (Nanya NT5CC256M16DP-DI) - Flash: 2 MiB SPI NOR (S25FL016K) + 128 MB SPI NAND (W25N02KVZEIR) - Ethernet: 1x 10/100/1000 Mbps (SOC's built-in switch, with PoE+) - Wi-Fi: 2x2:2 2.4/5 GHz (MT7905DAN + MT7975DN) (MT7905DAN doesn't support background DFS scan/BT) - LED: tri-color LED for status (red, blue, green) - Buttons: 1x (reset) - Antenna: 4x internal, non-detachable omnidirectional - UART: 1x 4-pin (2.54 mm pitch, marked as "3V3 G/RX GND W/TX") - Power: 12 V DC/2 A (DC jack) MAC addresses: WAN: 54:9C:27:xx:xx:00 (factory 0x3fff4, device label) 2.4 GHz: 54:9C:27:xx:xx:02 (factory 0x4, device label +2) 5 GHz: 54:9C:27:xx:xx:08 (factory 0xa, device label +8) Flashing instructions: ====================== Various methods can be used to install the actual image on the flash. Two easy ones are: ap51-flash ---------- The tool ap51-flash (https://github.com/ap51-flash/ap51-flash) should be used to transfer the image to the u-boot when the device boots up. initramfs from TFTP ------------------- The serial console (115200 8N1) must be used to access the u-boot shell during bootup. It can then be used to first boot up the initramfs image from a TFTP server (here with the IP 192.168.1.21): setenv serverip 192.168.1.21 setenv ipaddr 192.168.1.1 tftpboot 0x83001000 .bin && bootm $fileaddr The actual sysupgrade image can then be transferred (on the LAN port) to the device via scp .bin root@192.168.1.1:/tmp/ On the device, the sysupgrade must then be started using sysupgrade -n /tmp/.bin Signed-off-by: Sven Eckelmann (Plasma Cloud) Link: https://github.com/openwrt/openwrt/pull/20152 Signed-off-by: Hauke Mehrtens --- include/image-commands.mk | 13 + .../uboot-tools/uboot-envtools/files/ramips | 1 + scripts/nand-fwupgradecfg-gen.sh | 61 + .../dts/mt7621_plasmacloud_pax1800-lite.dts | 2229 +++++++++++++++++ target/linux/ramips/image/mt7621.mk | 15 + .../mt7621/base-files/etc/board.d/02_network | 1 + .../lib/upgrade/dualboot_datachk.sh | 67 + .../mt7621/base-files/lib/upgrade/platform.sh | 3 + target/linux/ramips/mt7621/config-6.12 | 1 + 9 files changed, 2391 insertions(+) create mode 100755 scripts/nand-fwupgradecfg-gen.sh create mode 100644 target/linux/ramips/dts/mt7621_plasmacloud_pax1800-lite.dts create mode 100644 target/linux/ramips/mt7621/base-files/lib/upgrade/dualboot_datachk.sh diff --git a/include/image-commands.mk b/include/image-commands.mk index 27a85d770e..7b2b346aa6 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -640,6 +640,19 @@ define Build/openmesh-image "$(call param_get_default,rootfs,$(1),$@)" "rootfs" endef +define Build/dualboot-datachk-nand-image + $(TOPDIR)/scripts/nand-fwupgradecfg-gen.sh \ + "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" \ + "$@-fwupgrade.cfg" \ + "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" \ + "$(call param_get_default,rootfs,$(1),$@)" + $(TOPDIR)/scripts/combined-ext-image.sh \ + "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" "$@" \ + "$@-fwupgrade.cfg" "fwupgrade.cfg" \ + "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" "kernel" \ + "$(call param_get_default,rootfs,$(1),$@)" "rootfs" +endef + define Build/pad-extra dd if=/dev/zero bs=$(1) count=1 >> $@ endef diff --git a/package/boot/uboot-tools/uboot-envtools/files/ramips b/package/boot/uboot-tools/uboot-envtools/files/ramips index 49a2b90f73..5d6cbe3936 100644 --- a/package/boot/uboot-tools/uboot-envtools/files/ramips +++ b/package/boot/uboot-tools/uboot-envtools/files/ramips @@ -32,6 +32,7 @@ allnet,all0256n-4m|\ allnet,all0256n-8m|\ allnet,all5002|\ asiarf,ap7621-004-v3|\ +plasmacloud,pax1800-lite|\ yuncore,ax820) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000" ;; diff --git a/scripts/nand-fwupgradecfg-gen.sh b/scripts/nand-fwupgradecfg-gen.sh new file mode 100755 index 0000000000..862cd94603 --- /dev/null +++ b/scripts/nand-fwupgradecfg-gen.sh @@ -0,0 +1,61 @@ +#!/bin/sh +# +# Copyright (C) 2011 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +usage() { + echo "Usage: $0 " + exit 1 +} + +[ "$#" -lt 4 ] && usage + +CE_TYPE=$1 +CFG_OUT=$2 +KERNEL_PATH=$3 +ROOTFS_PATH=$4 + +case $CE_TYPE in +PAX1800-Lite) + EXTRA_SETENV="" + ;; +*) + echo "Error - unsupported ce type: $CE_TYPE" + exit 1 + ;; +esac + +# kernel calculation +KERNEL_MD5=$(mkhash md5 $KERNEL_PATH) +KERNEL_SHA256=$(mkhash sha256 $KERNEL_PATH) +KERNEL_SIZE=$(stat -c%s "$KERNEL_PATH") +KERNEL_CHECK_SIZE=$(printf '0x%x' $KERNEL_SIZE) + +# rootfs calculation +ROOTFS_MD5=$(mkhash md5 $ROOTFS_PATH) +ROOTFS_SHA256=$(mkhash sha256 $ROOTFS_PATH) +ROOTFS_SIZE=$(stat -c%s "$ROOTFS_PATH") +ROOTFS_CHECK_SIZE=$(printf '0x%x' $ROOTFS_SIZE) + +cat << EOF > $CFG_OUT +[kernel] +filename=kernel +md5sum=$KERNEL_MD5 +filemd5sum=$KERNEL_MD5 +filesha256sum=$KERNEL_SHA256 +checksize=$KERNEL_CHECK_SIZE +ubi=1 +cmd_success=setenv bootseq 1,2; $EXTRA_SETENV; saveenv + +[rootfs] +filename=rootfs +md5sum=$ROOTFS_MD5 +filemd5sum=$ROOTFS_MD5 +filesha256sum=$ROOTFS_SHA256 +checksize=$ROOTFS_CHECK_SIZE +ubi=1 +cmd_success=setenv bootseq 1,2; $EXTRA_SETENV; saveenv +EOF diff --git a/target/linux/ramips/dts/mt7621_plasmacloud_pax1800-lite.dts b/target/linux/ramips/dts/mt7621_plasmacloud_pax1800-lite.dts new file mode 100644 index 0000000000..2236bdf7a0 --- /dev/null +++ b/target/linux/ramips/dts/mt7621_plasmacloud_pax1800-lite.dts @@ -0,0 +1,2229 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "mt7621.dtsi" + +#include +#include +#include + +/ { + compatible = "plasmacloud,pax1800-lite", "mediatek,mt7621-soc"; + model = "Plasma Cloud PAX1800-Lite"; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + aliases { + led-boot = &led_status_green; + led-failsafe = &led_status_green; + led-running = &led_status_green; + led-upgrade = &led_status_green; + label-mac-device = &gmac1; + }; + + gpio_export { + compatible = "gpio-export"; + #size-cells = <0>; + + dc_in { + gpio-export,name = "dc_in"; + gpios = <&gpio 28 GPIO_ACTIVE_LOW>; + }; + + poe_in { + gpio-export,name = "poe_in"; + gpios = <&gpio 29 GPIO_ACTIVE_LOW>; + }; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&gpio 18 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + status_blue { + color = ; + function = LED_FUNCTION_STATUS; + gpios = <&gpio 8 GPIO_ACTIVE_LOW>; + }; + + led_status_green: status_green { + color = ; + function = LED_FUNCTION_STATUS; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + }; + + status_red { + color = ; + function = LED_FUNCTION_STATUS; + gpios = <&gpio 16 GPIO_ACTIVE_LOW>; + }; + }; + + watchdog { + compatible = "linux,wdt-gpio"; + gpios = <&gpio 7 GPIO_ACTIVE_LOW>; + hw_algo = "toggle"; + /* hw_margin_ms is actually 300s but driver limits it to 60s */ + hw_margin_ms = <60000>; + always-running; + }; +}; + +&i2c { + status = "okay"; + + g751: g751@48 { + compatible = "gmt,g751"; + reg = <0x48>; + status = "okay"; + }; +}; + +&spi0 { + status = "okay"; + num-cs = <2>; + + flash@0 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "jedec,spi-nor"; + spi-max-frequency = <20000000>; + reg = <0>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "uboot"; + reg = <0x00000 0x80000>; + }; + + partition@80000 { + label = "uboot_env"; + reg = <0x80000 0x10000>; + }; + + partition@90000 { + label = "factory"; + reg = <0x90000 0x80000>; + + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + eeprom_factory_0: eeprom@0 { + reg = <0x0 0xe00>; + }; + + macaddr_factory_3fff4: macaddr@3fff4 { + reg = <0x3fff4 0x6>; + }; + }; + }; + + partition@110000 { + label = "keys"; + reg = <0x110000 0x10000>; + }; + + /* 0x120000 - 0x200000 unused */ + }; + }; + + flash@1 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "spi-nand"; + spi-max-frequency = <20000000>; + reg = <1>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "firmware1"; + reg = <0x0 0x4000000>; + compatible = "linux,ubi"; + }; + + partition@4000000 { + label = "firmware2"; + reg = <0x4000000 0x4000000>; + compatible = "linux,ubi"; + }; + }; + }; +}; + +&pcie { + status = "okay"; +}; + +&pcie1 { + wifi0: wifi@0,0 { + compatible = "mediatek,mt76"; + reg = <0x0000 0 0 0 0>; + + nvmem-cells = <&eeprom_factory_0>; + nvmem-cell-names = "eeprom"; + + mediatek,disable-radar-background; + + power-limits { + r0 { + country = "CA"; + + txpower-2g { + b0 { + channels = <1 1>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <36 36 36 36 36 36 36 36>; + rates-mcs = + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 34 34 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <36 36 60 60>; + paths-ofdm-bf = + /bits/ 8 <36 36 60 60>; + paths-ru = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b1 { + channels = <2 2>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <37 37 37 37 37 37 37 37>; + rates-mcs = + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 34 34 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <37 37 60 60>; + paths-ofdm-bf = + /bits/ 8 <37 37 60 60>; + paths-ru = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b2 { + channels = <3 6>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b3 { + channels = <7 9>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b4 { + channels = <10 10>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <38 38 38 38 38 38 38 38>; + rates-mcs = + /bits/ 8 <1 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 36 36 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <38 38 60 60>; + paths-ofdm-bf = + /bits/ 8 <38 38 60 60>; + paths-ru = + /bits/ 8 <4 36 36 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 36 36 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b5 { + channels = <11 11>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <35 35 35 35 35 35 35 35>; + rates-mcs = + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <35 35 60 60>; + paths-ofdm-bf = + /bits/ 8 <35 35 60 60>; + paths-ru = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b6 { + channels = <12 14>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + }; + txpower-5g { + b0 { + channels = <184 196>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b1 { + channels = <8 16>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b2 { + channels = <36 44>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <18 18 18 18 18 18 18 18>; + rates-mcs = + /bits/ 8 <1 20 20 20 20 20 20 20 20 20 20>, + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 20 20 20 20 20 20 20 20 20 20 20 20>, + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <18 18 60 60>; + paths-ofdm-bf = + /bits/ 8 <18 18 60 60>; + paths-ru = + /bits/ 8 <4 20 20 60 60 20 60 60 60 60 60>, + /bits/ 8 <1 24 24 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 25 25 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 17 17 60 60 20 60 60 60 60 60>, + /bits/ 8 <1 18 18 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 18 18 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b3 { + channels = <48 48>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <18 18 18 18 18 18 18 18>; + rates-mcs = + /bits/ 8 <1 19 19 19 19 19 19 19 19 19 19>, + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 19 19 19 19 19 19 19 19 19 19 19 19>, + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <18 18 60 60>; + paths-ofdm-bf = + /bits/ 8 <18 18 60 60>; + paths-ru = + /bits/ 8 <4 19 19 60 60 19 60 60 60 60 60>, + /bits/ 8 <1 24 24 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 25 25 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 17 17 60 60 19 60 60 60 60 60>, + /bits/ 8 <1 18 18 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 18 18 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b4 { + channels = <52 60>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <24 24 24 24 24 24 24 24>; + rates-mcs = + /bits/ 8 <3 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <6 24 24 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <24 24 60 60>; + paths-ofdm-bf = + /bits/ 8 <24 24 60 60>; + paths-ru = + /bits/ 8 <6 24 24 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 18 18 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 17 17 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 18 18 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b5 { + channels = <64 64>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <24 24 24 24 24 24 24 24>; + rates-mcs = + /bits/ 8 <1 23 23 23 23 23 23 23 23 23 23>, + /bits/ 8 <2 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 23 23 23 23 23 23 23 23 23 23 23 23>, + /bits/ 8 <2 24 24 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <24 24 60 60>; + paths-ofdm-bf = + /bits/ 8 <24 24 60 60>; + paths-ru = + /bits/ 8 <4 23 23 60 60 23 60 60 60 60 60>, + /bits/ 8 <2 24 24 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 18 18 60 60 23 60 60 60 60 60>, + /bits/ 8 <1 17 17 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 18 18 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b6 { + channels = <68 96>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b7 { + channels = <100 100>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <32 32 32 32 32 32 32 32>; + rates-mcs = + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <32 32 60 60>; + paths-ofdm-bf = + /bits/ 8 <32 32 60 60>; + paths-ru = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b8 { + channels = <104 104>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <3 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <6 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <6 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <6 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b9 { + channels = <108 112>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b10 { + channels = <116 128>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 32 32 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b11 { + channels = <132 136>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 30 30 30 30 30 30 30 30 30 30>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 30 30 30 30 30 30 30 30 30 30 30 30>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 30 30 60 60 30 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 30 30 60 60 30 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b12 { + channels = <140 140>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <29 29 29 29 29 29 29 29>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <29 29 60 60>; + paths-ofdm-bf = + /bits/ 8 <29 29 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b13 { + channels = <144 144>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <30 30 30 30 30 30 30 30>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <30 30 60 60>; + paths-ofdm-bf = + /bits/ 8 <30 30 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 31 31 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b14 { + channels = <149 149>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <39 39 39 39 39 39 39 39>; + rates-mcs = + /bits/ 8 <2 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <5 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <39 39 60 60>; + paths-ofdm-bf = + /bits/ 8 <39 39 60 60>; + paths-ru = + /bits/ 8 <5 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <5 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b15 { + channels = <153 161>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b16 { + channels = <165 165>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <39 39 39 39 39 39 39 39>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <39 39 60 60>; + paths-ofdm-bf = + /bits/ 8 <39 39 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + }; + b17 { + channels = <169 181>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + }; + }; + + r1 { + regdomain = "FCC"; + + txpower-2g { + b0 { + channels = <1 1>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <36 36 36 36 36 36 36 36>; + rates-mcs = + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 34 34 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <36 36 60 60>; + paths-ofdm-bf = + /bits/ 8 <36 36 60 60>; + paths-ru = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b1 { + channels = <2 2>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <37 37 37 37 37 37 37 37>; + rates-mcs = + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 34 34 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <37 37 60 60>; + paths-ofdm-bf = + /bits/ 8 <37 37 60 60>; + paths-ru = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b2 { + channels = <3 6>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b3 { + channels = <7 9>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b4 { + channels = <10 10>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <38 38 38 38 38 38 38 38>; + rates-mcs = + /bits/ 8 <1 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 36 36 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <38 38 60 60>; + paths-ofdm-bf = + /bits/ 8 <38 38 60 60>; + paths-ru = + /bits/ 8 <4 36 36 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 36 36 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b5 { + channels = <11 11>; + rates-cck = + /bits/ 8 <40 40 40 40>; + rates-ofdm = + /bits/ 8 <35 35 35 35 35 35 35 35>; + rates-mcs = + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <40 40 60 60>; + paths-ofdm = + /bits/ 8 <35 35 60 60>; + paths-ofdm-bf = + /bits/ 8 <35 35 60 60>; + paths-ru = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b6 { + channels = <12 14>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + }; + txpower-5g { + b0 { + channels = <184 196>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b1 { + channels = <8 16>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b2 { + channels = <36 36>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <38 38 38 38 38 38 38 38>; + rates-mcs = + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <38 38 60 60>; + paths-ofdm-bf = + /bits/ 8 <38 38 60 60>; + paths-ru = + /bits/ 8 <4 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b3 { + channels = <40 40>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <1 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 39 39 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 34 34 34 34 34 34 34 34 34 34 34 34>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 34 34 60 60 34 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b4 { + channels = <44 44>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <2 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <5 39 39 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <5 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <5 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b5 { + channels = <48 48>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <40 40 40 40 40 40 40 40>; + rates-mcs = + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 39 39 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b6 { + channels = <52 52>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 31 31 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b7 { + channels = <56 56>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 31 31 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 31 31 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b8 { + channels = <60 64>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 28 28 28 28 28 28 28 28 28 28 28 28>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 31 31 60 60 33 60 60 60 60 60>, + /bits/ 8 <1 31 31 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 28 28 60 60 28 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b9 { + channels = <68 96>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b10 { + channels = <100 100>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <32 32 32 32 32 32 32 32>; + rates-mcs = + /bits/ 8 <1 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 33 33 33 33 33 33 33 33 33 33 33 33>, + /bits/ 8 <2 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <32 32 60 60>; + paths-ofdm-bf = + /bits/ 8 <32 32 60 60>; + paths-ru = + /bits/ 8 <4 33 33 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 33 60 60 60 60 60>, + /bits/ 8 <2 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b11 { + channels = <104 104>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <3 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <6 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <6 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <6 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b12 { + channels = <108 112>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b13 { + channels = <116 128>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <2 37 37 37 37 37 37 37 37 37 37 37 37>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 37 37 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <2 32 32 60 60 37 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b14 { + channels = <132 136>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <31 31 31 31 31 31 31 31>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 30 30 30 30 30 30 30 30 30 30>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 30 30 30 30 30 30 30 30 30 30 30 30>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <31 31 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 30 30 60 60 30 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 30 30 60 60 30 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b15 { + channels = <140 140>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <29 29 29 29 29 29 29 29>; + rates-mcs = + /bits/ 8 <1 30 30 30 30 30 30 30 30 30 30>, + /bits/ 8 <1 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 30 30 30 30 30 30 30 30 30 30 30 30>, + /bits/ 8 <1 36 36 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <29 29 60 60>; + paths-ofdm-bf = + /bits/ 8 <29 29 60 60>; + paths-ru = + /bits/ 8 <4 30 30 60 60 30 60 60 60 60 60>, + /bits/ 8 <1 36 36 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 30 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b16 { + channels = <144 144>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <30 30 30 30 30 30 30 30>; + rates-mcs = + /bits/ 8 <1 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 32 32 32 32 32 32 32 32 32 32 32 32>, + /bits/ 8 <1 36 36 36 36 36 36 36 36 36 36 36 36>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <30 30 60 60>; + paths-ofdm-bf = + /bits/ 8 <30 30 60 60>; + paths-ru = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 36 36 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 32 32 60 60 32 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 36 60 60 60 60 60>, + /bits/ 8 <1 37 37 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b17 { + channels = <149 149>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <39 39 39 39 39 39 39 39>; + rates-mcs = + /bits/ 8 <2 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <5 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <39 39 60 60>; + paths-ofdm-bf = + /bits/ 8 <39 39 60 60>; + paths-ru = + /bits/ 8 <5 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <5 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b18 { + channels = <153 161>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <40 40 38 38 38 38 37 36>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b19 { + channels = <165 165>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <39 39 39 39 39 39 39 39>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <39 39 60 60>; + paths-ofdm-bf = + /bits/ 8 <39 39 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + }; + b20 { + channels = <169 181>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + }; + }; + + r2 { + regdomain = "ETSI"; + + txpower-2g { + b0 { + channels = <1 1>; + rates-cck = + /bits/ 8 <24 24 24 24>; + rates-ofdm = + /bits/ 8 <26 26 26 26 26 26 26 26>; + rates-mcs = + /bits/ 8 <1 26 26 26 26 26 26 26 26 26 26>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 26 26 26 26 26 26 26 26 26 26 26 26>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <24 24 60 60>; + paths-ofdm = + /bits/ 8 <26 26 60 60>; + paths-ofdm-bf = + /bits/ 8 <20 20 60 60>; + paths-ru = + /bits/ 8 <1 26 26 60 60 26 60 60 60 60 60>, + /bits/ 8 <1 26 26 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 26 26 60 60 26 60 60 60 60 60>, + /bits/ 8 <1 25 25 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <5 19 19 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b1 { + channels = <2 12>; + rates-cck = + /bits/ 8 <24 24 24 24>; + rates-ofdm = + /bits/ 8 <25 25 25 25 25 25 25 25>; + rates-mcs = + /bits/ 8 <2 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <5 25 25 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <24 24 60 60>; + paths-ofdm = + /bits/ 8 <25 25 60 60>; + paths-ofdm-bf = + /bits/ 8 <19 19 60 60>; + paths-ru = + /bits/ 8 <5 25 25 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 20 20 60 60 26 60 60 60 60 60>, + /bits/ 8 <1 19 19 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b2 { + channels = <13 13>; + rates-cck = + /bits/ 8 <24 24 24 24>; + rates-ofdm = + /bits/ 8 <25 25 25 25 25 25 25 25>; + rates-mcs = + /bits/ 8 <1 26 26 26 26 26 26 26 26 26 26>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 26 26 26 26 26 26 26 26 26 26 26 26>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <24 24 60 60>; + paths-ofdm = + /bits/ 8 <25 25 60 60>; + paths-ofdm-bf = + /bits/ 8 <19 19 60 60>; + paths-ru = + /bits/ 8 <1 26 26 60 60 26 60 60 60 60 60>, + /bits/ 8 <1 26 26 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 26 26 60 60 26 60 60 60 60 60>, + /bits/ 8 <1 25 25 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 20 20 60 60 26 60 60 60 60 60>, + /bits/ 8 <1 19 19 60 60 25 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b3 { + channels = <14 14>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + }; + txpower-5g { + b0 { + channels = <184 196>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b1 { + channels = <8 16>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b2 { + channels = <36 48>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <24 24 24 24 24 24 24 24>; + rates-mcs = + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <2 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 24 24 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <2 25 25 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <24 24 60 60>; + paths-ofdm-bf = + /bits/ 8 <18 18 60 60>; + paths-ru = + /bits/ 8 <4 24 24 60 60 24 60 60 60 60 60>, + /bits/ 8 <2 25 25 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <6 19 19 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b3 { + channels = <52 64>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <23 23 25 25 25 25 25 25>; + rates-mcs = + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 24 24 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 25 25 25 25 25 25 25 25 25 25 25 25>, + /bits/ 8 <1 24 24 24 24 24 24 24 24 24 24 24 24>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <23 23 60 60>; + paths-ofdm-bf = + /bits/ 8 <17 17 60 60>; + paths-ru = + /bits/ 8 <4 24 24 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 25 25 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 24 24 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 18 18 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 19 19 60 60 25 60 60 60 60 60>, + /bits/ 8 <1 18 18 60 60 24 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b4 { + channels = <68 96>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b5 { + channels = <100 128>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <38 38 38 38 38 38 38 38>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 39 39 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <38 38 60 60>; + paths-ofdm-bf = + /bits/ 8 <32 32 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 33 33 60 60 39 60 60 60 60 60>, + /bits/ 8 <2 32 32 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b6 { + channels = <132 136>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <38 38 38 38 38 38 38 38>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 39 39 39 39 39 39 39 39 39 39 39 39>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <38 38 60 60>; + paths-ofdm-bf = + /bits/ 8 <32 32 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 39 39 60 60 39 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 33 33 60 60 39 60 60 60 60 60>, + /bits/ 8 <1 32 32 60 60 38 60 60 60 60 60>, + /bits/ 8 <2 60 60 60 60 60 60 60 60 60 60>; + }; + b7 { + channels = <140 140>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <37 37 37 37 37 37 37 37>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <37 37 60 60>; + paths-ofdm-bf = + /bits/ 8 <31 31 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 33 33 60 60 39 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + }; + b8 { + channels = <144 144>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b9 { + channels = <149 149>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <39 39 39 39 39 39 39 39>; + rates-mcs = + /bits/ 8 <2 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <5 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <39 39 60 60>; + paths-ofdm-bf = + /bits/ 8 <39 39 60 60>; + paths-ru = + /bits/ 8 <5 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <5 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b10 { + channels = <153 161>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <40 40 38 38 38 38 37 36>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 40 40 40 40 40 40 40 40 40 40 40 40>, + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <40 40 60 60>; + paths-ofdm-bf = + /bits/ 8 <40 40 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 40 40 60 60 40 60 60 60 60 60>, + /bits/ 8 <1 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <1 60 60 60 60 60 60 60 60 60 60>; + }; + b11 { + channels = <165 165>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <39 39 39 39 39 39 39 39>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <39 39 60 60>; + paths-ofdm-bf = + /bits/ 8 <39 39 60 60>; + paths-ru = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <4 38 38 60 60 38 60 60 60 60 60>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + }; + b12 { + channels = <169 169>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <39 39 39 39 39 39 39 39>; + rates-mcs = + /bits/ 8 <1 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <4 38 38 38 38 38 38 38 38 38 38 38 38>, + /bits/ 8 <3 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + b13 { + channels = <173 181>; + rates-cck = + /bits/ 8 <60 60 60 60>; + rates-ofdm = + /bits/ 8 <60 60 60 60 60 60 60 60>; + rates-mcs = + /bits/ 8 <4 60 60 60 60 60 60 60 60 60 60>; + rates-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60 60 60>; + paths-cck = + /bits/ 8 <60 60 60 60>; + paths-ofdm = + /bits/ 8 <60 60 60 60>; + paths-ofdm-bf = + /bits/ 8 <60 60 60 60>; + paths-ru = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + paths-ru-bf = + /bits/ 8 <7 60 60 60 60 60 60 60 60 60 60>; + }; + }; + }; + }; + }; +}; + +&xhci { + status = "okay"; +}; + +ðernet { + pinctrl-0 = <&mdio_pins>; +}; + +&gmac0 { + nvmem-cells = <&macaddr_factory_3fff4 0>; + nvmem-cell-names = "mac-address"; + label = "dsa"; +}; + +&switch0 { + ports { + port@4 { + status = "okay"; + label = "lan"; + }; + }; +}; + +&state_default { + gpio { + /* for LEDs + Button + watchdog */ + groups = "uart3", "jtag", "wdt", "rgmii2"; + function = "gpio"; + }; +}; diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index 744d8c6279..b8a7d2d220 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -2528,6 +2528,21 @@ define Device/planex_vr500 endef TARGET_DEVICES += planex_vr500 +define Device/plasmacloud_pax1800-lite + $(Device/nand) + IMAGE_SIZE := 60512k + DEVICE_VENDOR := Plasma Cloud + DEVICE_MODEL := PAX1800-Lite + DEVICE_DTS_CONFIG := config@plasmacloud.pax1800-lite + DEVICE_PACKAGES := kmod-mt7915-firmware kmod-usb3 kmod-hwmon-lm75 + KERNEL_IN_UBI := 1 + IMAGES += factory.bin + KERNEL := kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | pad-to $$(BLOCKSIZE) + IMAGE/factory.bin := append-rootfs | pad-to 1k | dualboot-datachk-nand-image ce_type=PAX1800-Lite + IMAGE/sysupgrade.bin := append-rootfs | pad-to 1k | sysupgrade-tar rootfs=$$$$@ | append-metadata +endef +TARGET_DEVICES += plasmacloud_pax1800-lite + define Device/raisecom_msg1500-x-00 $(Device/nand) $(Device/uimage-lzma-loader) diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network index b55eb892e8..81fea421c7 100644 --- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network @@ -51,6 +51,7 @@ ramips_setup_interfaces() netgear,eax12|\ netgear,ex6150|\ netgear,wax214v2|\ + plasmacloud,pax1800-lite|\ sercomm,na502|\ sercomm,na502s|\ thunder,timecloud|\ diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/dualboot_datachk.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/dualboot_datachk.sh new file mode 100644 index 0000000000..d57c118c66 --- /dev/null +++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/dualboot_datachk.sh @@ -0,0 +1,67 @@ +# The U-Boot loader with the datachk patchset for dualbooting requires image +# sizes and checksums to be provided in the U-Boot environment. +# The devices come with 2 main partitions - while one is active +# sysupgrade will flash the other. The boot order is changed to boot the +# newly flashed partition. If the new partition can't be booted due to +# upgrade failures the previously used partition is loaded. + +platform_do_upgrade_dualboot_datachk() { + local next_boot_part=1 + local tar_file="$1" + local bootseq + + local setenv_script="/tmp/fw_env_upgrade" + + if [ "$(grep 'ubi.mtd=firmware1' /proc/cmdline)" ]; then + next_boot_part=2 + bootseq="2,1" + else + next_boot_part=1 + bootseq="1,2" + fi + + local board_dir="$(tar tf "${tar_file}" | grep -m 1 '^sysupgrade-.*/$')" + board_dir="${board_dir%/}" + + local kernel_length="$(tar xf "${tar_file}" "${board_dir}/kernel" -O | wc -c)" + local rootfs_length="$(tar xf "${tar_file}" "${board_dir}/root" -O | wc -c)" + + local kernel_md5="$(tar xf "${tar_file}" "${board_dir}/kernel" -O | md5sum)" + kernel_md5="${kernel_md5%% *}" + + local rootfs_md5="$(tar xf "${tar_file}" "${board_dir}/root" -O | md5sum)" + rootfs_md5="${rootfs_md5%% *}" + + CI_UBIPART="firmware${next_boot_part}" + CI_KERNPART="kernel" + CI_ROOTPART="rootfs" + + nand_upgrade_prepare_ubi "${rootfs_length}" "squashfs" "$kernel_length" "0" + + local ubidev="$(nand_find_ubi "${CI_UBIPART}")" + + local kern_ubivol="$(nand_find_volume "${ubidev}" "${CI_KERNPART}")" + tar xf "${tar_file}" "${board_dir}/kernel" -O | \ + ubiupdatevol "/dev/${kern_ubivol}" -s "${kernel_length}" - + + local root_ubivol="$(nand_find_volume "${ubidev}" "${CI_ROOTPART}")" + tar xf "${tar_file}" "${board_dir}/root" -O | \ + ubiupdatevol "/dev/${root_ubivol}" -s "${rootfs_length}" - + + [ -f "${UPGRADE_BACKUP}" ] && nand_restore_config "${UPGRADE_BACKUP}" + + # write new new uboot-env + printf "bootseq ${bootseq}\n" > "${setenv_script}" + + printf "kernel_%i_size 0x%08x\n" "${next_boot_part}" "${kernel_length}" >> "${setenv_script}" + printf "kernel_%i_checksum %s\n" "${next_boot_part}" "${kernel_md5}" >> "${setenv_script}" + + printf "rootfs_%i_size 0x%08x\n" "${next_boot_part}" "${rootfs_length}" >> "${setenv_script}" + printf "rootfs_%i_checksum %s\n" "${next_boot_part}" "${rootfs_md5}" >> "${setenv_script}" + + mkdir -p /var/lock + fw_setenv -s "${setenv_script}" || { + echo "failed to update U-Boot environment" + return 1 + } +} diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh index a1f14f9d78..679b2c0f01 100755 --- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh @@ -185,6 +185,9 @@ platform_do_upgrade() { iodata_mstc_set_flag "bootnum" "persist" "0x4" "1,2" "1" nand_do_upgrade "$1" ;; + plasmacloud,pax1800-lite) + platform_do_upgrade_dualboot_datachk "$1" + ;; tplink,er605-v2) echo "Upgrading tplink,er605-v2" CI_UBIPART="firmware" diff --git a/target/linux/ramips/mt7621/config-6.12 b/target/linux/ramips/mt7621/config-6.12 index fd6f93afca..d5ed778593 100644 --- a/target/linux/ramips/mt7621/config-6.12 +++ b/target/linux/ramips/mt7621/config-6.12 @@ -164,6 +164,7 @@ CONFIG_MTD_PHYSMAP=y CONFIG_MTD_RAW_NAND=y CONFIG_MTD_ROUTERBOOT_PARTS=y CONFIG_MTD_SERCOMM_PARTS=y +CONFIG_MTD_SPI_NAND=y CONFIG_MTD_SPI_NOR=y CONFIG_MTD_SPI_NOR_USE_VARIABLE_ERASE=y CONFIG_MTD_SPLIT_FIT_FW=y