From c81b2e94c7d89fbf9f03aa4680ebb3d26cede872 Mon Sep 17 00:00:00 2001 From: Roger Pueyo Centelles Date: Wed, 29 Jan 2020 11:27:03 +0100 Subject: [PATCH] rbextract: support devices with plain RLE caldata Old MikroTik devices have the RLE-encoded radio calibration data directly stored in the art (hard_config) partition, without LZO compression nor any preceding ERD magic bytes. This commit adds a fallback for these devices. Tested on the ath79 target with a MikroTik SXT 5nD r2 (SXT Lite5), only locally --not yet merged upstream--. Signed-off-by: Roger Pueyo Centelles --- package/utils/rbextract/Makefile | 2 +- package/utils/rbextract/src/rbextract.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/package/utils/rbextract/Makefile b/package/utils/rbextract/Makefile index 4bc6898b11fd..f50bbea1207e 100644 --- a/package/utils/rbextract/Makefile +++ b/package/utils/rbextract/Makefile @@ -11,7 +11,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=rbextract -PKG_RELEASE:=2 +PKG_RELEASE:=3 CMAKE_INSTALL:=1 include $(INCLUDE_DIR)/package.mk diff --git a/package/utils/rbextract/src/rbextract.c b/package/utils/rbextract/src/rbextract.c index ceed2494a121..e75d74957a10 100644 --- a/package/utils/rbextract/src/rbextract.c +++ b/package/utils/rbextract/src/rbextract.c @@ -335,7 +335,7 @@ __rb_get_wlan_data(void) } /* Older ath79-based boards directly show the RB_MAGIC_ERD bytes followed by the LZO-compressed calibration data with no RLE */ - if (magic == RB_MAGIC_ERD) { + else if (magic == RB_MAGIC_ERD) { if (tag_len > RB_ART_SIZE) { printf("Calibration data too large\n"); goto err_free_lzo_in; @@ -362,6 +362,18 @@ __rb_get_wlan_data(void) buf_rle_out = buf_lzo_out; } + /* Even older ath79-base boards directly have RLE-encoded calibration data, + without any LZO compresion nor showing RB_MAGIC_ERD bytes */ + else { + printf("Decode calibration data with RLE\n"); + err = rle_decode(tag, tag_len, buf_rle_out, RB_ART_SIZE, + NULL, NULL); + if (err) { + printf("unable to decode ERD data\n"); + goto err_free_rle_out; + } + } + return buf_rle_out; err_free_rle_out: -- 2.30.2