Skip to content

Commit

Permalink
package/base-files: caldata: allow setting target file
Browse files Browse the repository at this point in the history
This will enable platforms to extract caldata to an arbitrary file,
or patch mac in an abitrary file.

Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
  • Loading branch information
f00b4r0 authored and Koen Vandeputte committed May 8, 2020
1 parent e995577 commit 8f47352
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
2 changes: 1 addition & 1 deletion package/base-files/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
include $(INCLUDE_DIR)/feeds.mk

PKG_NAME:=base-files
PKG_RELEASE:=218
PKG_RELEASE:=219
PKG_FLAGS:=nonshared

PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
Expand Down
29 changes: 21 additions & 8 deletions package/base-files/files/lib/functions/caldata.sh
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,21 @@ caldata_from_file() {
local source=$1
local offset=$(($2))
local count=$(($3))
local target=$4

dd if=$source of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \
[ -n "$target" ] || target=/lib/firmware/$FIRMWARE

dd if=$source of=$target iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \
caldata_die "failed to extract calibration data from $source"
}

caldata_valid() {
local expected="$1"
local target=$2

[ -n "$target" ] || target=/lib/firmware/$FIRMWARE

magic=$(hexdump -v -n 2 -e '1/1 "%02x"' /lib/firmware/$FIRMWARE)
magic=$(hexdump -v -n 2 -e '1/1 "%02x"' $target)
[ "$magic" = "$expected" ]
return $?
}
Expand All @@ -77,6 +83,7 @@ caldata_patch_chksum() {
local mac=$1
local mac_offset=$(($2))
local chksum_offset=$(($3))
local target=$4
local xor_mac
local xor_fw_mac
local xor_fw_chksum
Expand All @@ -91,38 +98,44 @@ caldata_patch_chksum() {
xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac)

printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \
dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2
dd of=$target conv=notrunc bs=1 seek=$chksum_offset count=2
}

caldata_patch_mac() {
local mac=$1
local mac_offset=$(($2))
local chksum_offset=$3
local target=$4

[ -z "$mac" -o -z "$mac_offset" ] && return

[ -n "$chksum_offset" ] && caldata_patch_chksum "$mac" "$mac_offset" "$chksum_offset"
[ -n "$target" ] || target=/lib/firmware/$FIRMWARE

[ -n "$chksum_offset" ] && caldata_patch_chksum "$mac" "$mac_offset" "$chksum_offset" "$target"

macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc oflag=seek_bytes bs=6 seek=$mac_offset count=1 || \
macaddr_2bin $mac | dd of=$target conv=notrunc oflag=seek_bytes bs=6 seek=$mac_offset count=1 || \
caldata_die "failed to write MAC address to eeprom file"
}

ath9k_patch_mac() {
local mac=$1
local target=$2

caldata_patch_mac "$mac" 0x2
caldata_patch_mac "$mac" 0x2 "" "$target"
}

ath9k_patch_mac_crc() {
local mac=$1
local mac_offset=$2
local chksum_offset=$((mac_offset - 10))
local target=$4

caldata_patch_mac "$mac" "$mac_offset" "$chksum_offset"
caldata_patch_mac "$mac" "$mac_offset" "$chksum_offset" "$target"
}

ath10k_patch_mac() {
local mac=$1
local target=$2

caldata_patch_mac "$mac" 0x6 0x2
caldata_patch_mac "$mac" 0x6 0x2 "$target"
}

0 comments on commit 8f47352

Please sign in to comment.