From f4f72af271e836351bc97b08617918b40bb9eb0a Mon Sep 17 00:00:00 2001 From: Jakob Link Date: Fri, 17 Nov 2023 17:28:57 +0100 Subject: [PATCH] bcm6715b0: adding chip and firmware version 17.10.188.6401 (r808804) taken from Asus RT-AX86U Pro. The firmware file is Hybrid, meaning it contains two firmware blobs: one that is loaded to the dongle RAM as usual, and a second that is mapped through PCIE Host Memory Extension. The file starts with the magic bytes LFOC. Each embedded firmware image has a 4 byte type 4 byte length header. --- firmwares/.gitignore | 2 + .../17_10_188_6401_r808804_ax86upro/Makefile | 31 + .../definitions.mk | 61 + .../rtecdc.bin | Bin 0 -> 2766872 bytes .../17_10_188_6401_r808804_ax86upro/structs.h | 52 + firmwares/bcm6715b0/Makefile | 11 + firmwares/bcm6715b0/structs.common.h | 1108 +++++++++++++++++ patches/include/firmware_version.h | 4 + 8 files changed, 1269 insertions(+) create mode 100644 firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/Makefile create mode 100644 firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/definitions.mk create mode 100644 firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/rtecdc.bin create mode 100644 firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/structs.h create mode 100644 firmwares/bcm6715b0/Makefile create mode 100644 firmwares/bcm6715b0/structs.common.h diff --git a/firmwares/.gitignore b/firmwares/.gitignore index 7afc584a5..4abb6503c 100644 --- a/firmwares/.gitignore +++ b/firmwares/.gitignore @@ -12,3 +12,5 @@ rom.bin clm.bin d11ucode_*.bin sr_source_code_*.bin +rtecdc_dongle.bin +rtecdc_pageable.bin diff --git a/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/Makefile b/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/Makefile new file mode 100644 index 000000000..d319e5d84 --- /dev/null +++ b/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/Makefile @@ -0,0 +1,31 @@ +include definitions.mk + +all: d11ucodex_btcxmu132_2.bin d11ucode_btcxmu132_2.bin d11ucodex_mu132_2.bin d11ucode_mu132_2.bin $(DONGLE_FW_FILE) $(HOST_FW_FILE) + +d11ucodex_btcxmu132_2.bin: $(FW_FILE) definitions.mk + @printf "\033[0;31m EXTRACTING FIRST UCODE\033[0m\n" + $(Q)dd if=$< of=$@ bs=1 skip=$$(($(DONGLE_FW_OFFSET)+$(UCODE0START)-$(DONGLE_RAMSTART))) count=$$(($(UCODE0SIZE))) 2>/dev/null + +d11ucode_btcxmu132_2.bin: $(FW_FILE) definitions.mk + @printf "\033[0;31m EXTRACTING SECOND UCODE\033[0m\n" + $(Q)dd if=$< of=$@ bs=1 skip=$$(($(DONGLE_FW_OFFSET)+$(UCODE1START)-$(DONGLE_RAMSTART))) count=$$(($(UCODE1SIZE))) 2>/dev/null + +d11ucodex_mu132_2.bin: $(FW_FILE) definitions.mk + @printf "\033[0;31m EXTRACTING THIRD UCODE\033[0m\n" + $(Q)dd if=$< of=$@ bs=1 skip=$$(($(DONGLE_FW_OFFSET)+$(UCODE2START)-$(DONGLE_RAMSTART))) count=$$(($(UCODE2SIZE))) 2>/dev/null + +d11ucode_mu132_2.bin: $(FW_FILE) definitions.mk + @printf "\033[0;31m EXTRACTING FORTH UCODE\033[0m\n" + $(Q)dd if=$< of=$@ bs=1 skip=$$(($(DONGLE_FW_OFFSET)+$(UCODE3START)-$(DONGLE_RAMSTART))) count=$$(($(UCODE3SIZE))) 2>/dev/null + +$(DONGLE_FW_FILE): $(FW_FILE) definitions.mk + @printf "\033[0;31m EXTRACTING DONGLE FIRMWARE IMAGE\033[0m\n" + $(Q)dd if=$< of=$@ bs=1 skip=$$(($(DONGLE_FW_OFFSET))) count=$$(($(DONGLE_FW_SIZE))) 2>/dev/null + +$(HOST_FW_FILE): $(FW_FILE) definitions.mk + @printf "\033[0;31m EXTRACTING HOST FIRMWARE IMAGE\033[0m\n" + $(Q)dd if=$< of=$@ bs=1 skip=$$(($(HOST_FW_OFFSET))) count=$$(($(HOST_FW_SIZE))) 2>/dev/null + +clean: + @printf "\033[0;31m CLEANING\033[0m\n" + $(Q)rm -f d11ucodex_btcxmu132_2.bin d11ucode_btcxmu132_2.bin d11ucodex_mu132_2.bin d11ucode_mu132_2.bin $(DONGLE_FW_FILE) $(HOST_FW_FILE) diff --git a/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/definitions.mk b/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/definitions.mk new file mode 100644 index 000000000..83919fdee --- /dev/null +++ b/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/definitions.mk @@ -0,0 +1,61 @@ +NEXMON_CHIP=CHIP_VER_BCM6715b0 +NEXMON_CHIP_NUM=`$(NEXMON_ROOT)/buildtools/scripts/getdefine.sh $(NEXMON_CHIP)` +NEXMON_FW_VERSION=FW_VER_17_10_188_6401_r808804_ax86upro +NEXMON_FW_VERSION_NUM=`$(NEXMON_ROOT)/buildtools/scripts/getdefine.sh $(NEXMON_FW_VERSION)` + +NEXMON_ARCH=armv7-a + +FW_FILE=rtecdc.bin +DONGLE_FW_OFFSET=0xC +DONGLE_FW_SIZE=0x1AD804 +HOST_FW_OFFSET=0x1AD818 +HOST_FW_SIZE=0xF6000 + +DONGLE_FW_FILE=rtecdc_dongle.bin +DONGLE_RAMSTART=0x0 +DONGLE_RAMSIZE=0x380000 + +HOST_FW_FILE=rtecdc_pageable.bin +HOST_RAMSTART=0x800000 +HOST_RAMSIZE=0xF6000 + +# ucodes +UCODE0START=0x12CF6C +UCODE0SIZE=0xC788 +UCODE0START_PTR=0x12CF54 +UCODE0SIZE_PTR=0x12CF58 + +UCODE1START=0x1396F4 +UCODE1SIZE=0x110E8 +UCODE1START_PTR=0x12CF50 +UCODE1SIZE_PTR=0x12CF4C + +UCODE2START=0x14A7E4 +UCODE2SIZE=0xC898 +UCODE2START_PTR=0x12CF64 +UCODE2SIZE_PTR=0x12CF68 + +UCODE3START=0x157080 +UCODE3SIZE=0x10330 +UCODE3START_PTR=0x12CF60 +UCODE3SIZE_PTR=0x12CF5C + +WLC_BMAC_PROCESS_UCODE_SR_BL_HOOK_ADDR=0x102BBE + +WLC_UCODE_WRITE_BL_HOOK_0_ADDR=0x12CEE8 +WLC_UCODE_WRITE_BL_HOOK_1_ADDR=0x12CEFC +WLC_UCODEX_WRITE_BL_HOOK_ADDR=0x12CF08 + +# patch area +RECLAIM_3_END_PTR=0xE1A0 +RECLAIM_3_ORIG_END=0x168000 + +PATCHSIZE=0x1000 +PATCHSTART=$$(($(RECLAIM_3_ORIG_END) - $(PATCHSIZE))) + +VERSION_PTR_1=0x21064 +VERSION_PTR_2=0xE9574 +VERSION_PTR_3=0x100120 +VERSION_PTR_4=0xE81EC +DATE_PTR=0x21070 +TIME_PTR=0x21060 diff --git a/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/rtecdc.bin b/firmwares/bcm6715b0/17_10_188_6401_r808804_ax86upro/rtecdc.bin new file mode 100644 index 0000000000000000000000000000000000000000..1459c263a308d880bd3bed84f4c760dfbfb9faa4 GIT binary patch literal 2766872 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