Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
c36fb31110
@ -5,7 +5,7 @@
|
|||||||
mainmenu "OpenWrt Configuration"
|
mainmenu "OpenWrt Configuration"
|
||||||
|
|
||||||
config MODULES
|
config MODULES
|
||||||
option modules
|
modules
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
src-git packages https://github.com/immortalwrt/packages.git
|
src-git-full packages https://github.com/immortalwrt/packages.git
|
||||||
src-git luci https://github.com/immortalwrt/luci.git
|
src-git-full luci https://github.com/immortalwrt/luci.git
|
||||||
src-git routing https://github.com/openwrt/routing.git
|
src-git-full routing https://github.com/openwrt/routing.git
|
||||||
src-git telephony https://github.com/openwrt/telephony.git
|
src-git-full telephony https://github.com/openwrt/telephony.git
|
||||||
#src-git video https://github.com/openwrt/video.git
|
#src-git-full video https://github.com/openwrt/video.git
|
||||||
#src-git targets https://github.com/openwrt/targets.git
|
#src-git-full targets https://github.com/openwrt/targets.git
|
||||||
#src-git oldpackages http://git.openwrt.org/packages.git
|
#src-git-full oldpackages http://git.openwrt.org/packages.git
|
||||||
#src-link custom /usr/src/openwrt/custom-feed
|
#src-link custom /usr/src/openwrt/custom-feed
|
||||||
|
|||||||
@ -295,6 +295,11 @@ define Build/install-dtb
|
|||||||
)
|
)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Build/iptime-crc32
|
||||||
|
$(STAGING_DIR_HOST)/bin/iptime-crc32 $(1) $@ $@.new
|
||||||
|
mv $@.new $@
|
||||||
|
endef
|
||||||
|
|
||||||
define Build/iptime-naspkg
|
define Build/iptime-naspkg
|
||||||
$(STAGING_DIR_HOST)/bin/iptime-naspkg $(1) $@ $@.new
|
$(STAGING_DIR_HOST)/bin/iptime-naspkg $(1) $@ $@.new
|
||||||
mv $@.new $@
|
mv $@.new $@
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
LINUX_VERSION-5.10 = .96
|
LINUX_VERSION-5.10 = .100
|
||||||
LINUX_KERNEL_HASH-5.10.96 = 35e5a042819dd37af891c47d151b209d93e078a22f2637b2f5171bdff5b2e048
|
LINUX_KERNEL_HASH-5.10.100 = d56965afc9b6a3d26d53db40ccd37fd9d15f2ca6bfd54ef6f0f8b6e92c170999
|
||||||
|
|||||||
@ -101,7 +101,7 @@ ifneq ($(DISTRO_PKG_CONFIG),)
|
|||||||
scripts/config/%onf: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH)
|
scripts/config/%onf: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH)
|
||||||
endif
|
endif
|
||||||
scripts/config/%onf: CFLAGS+= -O2
|
scripts/config/%onf: CFLAGS+= -O2
|
||||||
scripts/config/%onf:
|
scripts/config/%onf: FORCE
|
||||||
@$(_SINGLE)$(SUBMAKE) $(if $(findstring s,$(OPENWRT_VERBOSE)),,-s) \
|
@$(_SINGLE)$(SUBMAKE) $(if $(findstring s,$(OPENWRT_VERBOSE)),,-s) \
|
||||||
-C scripts/config $(notdir $@)
|
-C scripts/config $(notdir $@)
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
root::0:0:99999:7:::
|
root:::0:99999:7:::
|
||||||
daemon:*:0:0:99999:7:::
|
daemon:*:0:0:99999:7:::
|
||||||
ftp:*:0:0:99999:7:::
|
ftp:*:0:0:99999:7:::
|
||||||
network:*:0:0:99999:7:::
|
network:*:0:0:99999:7:::
|
||||||
|
|||||||
@ -418,6 +418,15 @@ ucidef_set_led_default() {
|
|||||||
json_select ..
|
json_select ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_heartbeat() {
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string trigger heartbeat
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
ucidef_set_led_gpio() {
|
ucidef_set_led_gpio() {
|
||||||
local gpio="$4"
|
local gpio="$4"
|
||||||
local inverted="$5"
|
local inverted="$5"
|
||||||
|
|||||||
@ -193,20 +193,17 @@ nand_upgrade_prepare_ubi() {
|
|||||||
|
|
||||||
# create rootfs_data for non-ubifs rootfs
|
# create rootfs_data for non-ubifs rootfs
|
||||||
if [ "$rootfs_type" != "ubifs" ]; then
|
if [ "$rootfs_type" != "ubifs" ]; then
|
||||||
local availeb=$(cat /sys/devices/virtual/ubi/$ubidev/avail_eraseblocks)
|
|
||||||
local ebsize=$(cat /sys/devices/virtual/ubi/$ubidev/eraseblock_size)
|
|
||||||
local avail_size=$((availeb * ebsize))
|
|
||||||
local rootfs_data_size_param="-m"
|
local rootfs_data_size_param="-m"
|
||||||
if [ -n "$rootfs_data_max" ] &&
|
if [ -n "$rootfs_data_max" ]; then
|
||||||
[ "$rootfs_data_max" != "0" ] &&
|
|
||||||
[ "$rootfs_data_max" -le "$avail_size" ]; then
|
|
||||||
rootfs_data_size_param="-s $rootfs_data_max"
|
rootfs_data_size_param="-s $rootfs_data_max"
|
||||||
fi
|
fi
|
||||||
if ! ubimkvol /dev/$ubidev -N rootfs_data $rootfs_data_size_param; then
|
if ! ubimkvol /dev/$ubidev -N rootfs_data $rootfs_data_size_param; then
|
||||||
|
if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then
|
||||||
echo "cannot initialize rootfs_data volume"
|
echo "cannot initialize rootfs_data volume"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
sync
|
sync
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,13 +46,19 @@ switch_to_ramfs() {
|
|||||||
ubiupdatevol ubiattach ubiblock ubiformat \
|
ubiupdatevol ubiattach ubiblock ubiformat \
|
||||||
ubidetach ubirsvol ubirmvol ubimkvol \
|
ubidetach ubirsvol ubirmvol ubimkvol \
|
||||||
snapshot snapshot_tool date logger \
|
snapshot snapshot_tool date logger \
|
||||||
|
/usr/sbin/fw_printenv /usr/bin/fwtool \
|
||||||
$RAMFS_COPY_LOSETUP $RAMFS_COPY_LVM \
|
$RAMFS_COPY_LOSETUP $RAMFS_COPY_LVM \
|
||||||
$RAMFS_COPY_BIN
|
$RAMFS_COPY_BIN
|
||||||
do
|
do
|
||||||
local file="$(command -v "$binary" 2>/dev/null)"
|
local file="$(command -v "$binary" 2>/dev/null)"
|
||||||
[ -n "$file" ] && install_bin "$file"
|
[ -n "$file" ] && install_bin "$file"
|
||||||
done
|
done
|
||||||
install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh /lib/upgrade/do_stage2 /usr/share/libubox/jshn.sh $RAMFS_COPY_DATA
|
install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh \
|
||||||
|
/lib/upgrade/*.sh /lib/upgrade/do_stage2 \
|
||||||
|
/usr/share/libubox/jshn.sh /usr/sbin/fw_setenv \
|
||||||
|
/etc/fw_env.config $RAMFS_COPY_DATA
|
||||||
|
|
||||||
|
mkdir -p $RAM_ROOT/var/lock
|
||||||
|
|
||||||
[ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64
|
[ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64
|
||||||
|
|
||||||
|
|||||||
@ -9,13 +9,31 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=at91bootstrap
|
PKG_NAME:=at91bootstrap
|
||||||
PKG_VERSION:=v3.9.3
|
PKG_VERSION:=v4.0.1
|
||||||
|
PKG_MIRROR_HASH:=3d45a4bcb52162097d4cdf042b8fe1ccf53e88b512e7541f42a23f2a73692a69
|
||||||
|
PKG_SOURCE_VERSION:=4d41296e9ae12379555fb46a941897e7264600a2
|
||||||
|
BINARIES_DIR:=build/binaries
|
||||||
|
|
||||||
|
AT91BOOTSTRAP_V4=y
|
||||||
|
ifdef CONFIG_PACKAGE_at91bootstrap-sama5d4_xplaineddf_uboot_secure
|
||||||
|
AT91BOOTSTRAP_V4=n
|
||||||
|
else ifdef CONFIG_TARGET_at91_sam9x
|
||||||
|
ifndef CONFIG_TARGET_at91_sam9x_DEVICE_microchip_sam9x60ek
|
||||||
|
AT91BOOTSTRAP_V4=n
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(AT91BOOTSTRAP_V4),n)
|
||||||
|
PKG_VERSION=v3.10.4
|
||||||
|
PKG_MIRROR_HASH=6fe61fe90838e785917383bb9e887fa05e1bd061a6725954242f504e38b5c426
|
||||||
|
PKG_SOURCE_VERSION=404846dd283894367a015ca59189bcf927d92e11
|
||||||
|
BINARIES_DIR=binaries
|
||||||
|
endif
|
||||||
|
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=2
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/linux4sam/at91bootstrap.git
|
PKG_SOURCE_URL:=https://github.com/linux4sam/at91bootstrap.git
|
||||||
PKG_MIRROR_HASH:=06753d673756edc9753932db00f4e5b8c1f9fa7708337c4d6ce280573efb86b4
|
|
||||||
PKG_SOURCE_VERSION:=d96833a4b6680b237708eb4dc9f10708b9e709d8
|
|
||||||
PKG_BUILD_DIR = \
|
PKG_BUILD_DIR = \
|
||||||
$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
|
$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
|
||||||
|
|
||||||
@ -154,6 +172,12 @@ define AT91Bootstrap/sama5d2_ptc_eksd_uboot
|
|||||||
BUILD_DEVICES:=microchip_sama5d2-ptc-ek
|
BUILD_DEVICES:=microchip_sama5d2-ptc-ek
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define AT91Bootstrap/sama7g5eksd_uboot
|
||||||
|
TITLE:=AT91Bootstrap for SAMA7G5-EK (SDCard)
|
||||||
|
BUILD_SUBTARGET:=sama7
|
||||||
|
BUILD_DEVICES:=microchip_sama7g5-ek
|
||||||
|
endef
|
||||||
|
|
||||||
AT91BOOTSTRAP_TARGETS := \
|
AT91BOOTSTRAP_TARGETS := \
|
||||||
at91sam9x5eknf_uboot \
|
at91sam9x5eknf_uboot \
|
||||||
at91sam9x5eksd_uboot \
|
at91sam9x5eksd_uboot \
|
||||||
@ -174,7 +198,8 @@ AT91BOOTSTRAP_TARGETS := \
|
|||||||
sama5d27_wlsom1_eksd_uboot \
|
sama5d27_wlsom1_eksd_uboot \
|
||||||
sama5d27_wlsom1_ekdf_qspi_uboot \
|
sama5d27_wlsom1_ekdf_qspi_uboot \
|
||||||
sama5d2_ptc_eknf_uboot \
|
sama5d2_ptc_eknf_uboot \
|
||||||
sama5d2_ptc_eksd_uboot
|
sama5d2_ptc_eksd_uboot \
|
||||||
|
sama7g5eksd_uboot
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||||
|
|||||||
@ -5,7 +5,7 @@ PKG_FLAGS:=nonshared
|
|||||||
export GCC_HONOUR_COPTS=s
|
export GCC_HONOUR_COPTS=s
|
||||||
|
|
||||||
define Package/at91bootstrap/install/default
|
define Package/at91bootstrap/install/default
|
||||||
$(CP) -avL $(PKG_BUILD_DIR)/binaries/at91bootstrap.bin $(1)/
|
$(CP) -avL $(PKG_BUILD_DIR)/$(BINARIES_DIR)/at91bootstrap.bin $(1)/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
Package/at91bootstrap/install = $(Package/at91bootstrap/install/default)
|
Package/at91bootstrap/install = $(Package/at91bootstrap/install/default)
|
||||||
|
|||||||
@ -1,38 +0,0 @@
|
|||||||
From 59c8963d8e6a08222616d1b384e1009ba05e6b82 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chris Elledge <celledge@digitallumensinc.com>
|
|
||||||
Date: Tue, 8 Jun 2021 14:01:14 -0400
|
|
||||||
Subject: Makefile: Remove -nostartfiles from LDFLAGS
|
|
||||||
|
|
||||||
Binutils linker ld does not support the flag -nostartfiles.
|
|
||||||
This is interpreted as "-n -o startfiles" which fortunately has no impact
|
|
||||||
on the build process. Removing -nostartfiles has no impact on the build.
|
|
||||||
|
|
||||||
Binutils 2.36 and later ld has improved flag parsing and throws an error if
|
|
||||||
-nostartfiles is passed as an argument. Removing the flag fixes the problem.
|
|
||||||
|
|
||||||
Details on the Binutils ML:
|
|
||||||
https://sourceware.org/pipermail/binutils/2021-June/116826.html
|
|
||||||
|
|
||||||
In our ld command line there are explicit
|
|
||||||
-n -o $(BINDIR)/$(BOOT_NAME).elf options,
|
|
||||||
hence removing -nostartfiles will not alter the build.
|
|
||||||
|
|
||||||
Signed-off-by: Chris Elledge <celledge@digitallumensinc.com>
|
|
||||||
Reviewed-by: Aubin Constans <aubin.constans@microchip.com>
|
|
||||||
[eugen.hristev@microchip.com: ported to at91bootstrap4]
|
|
||||||
Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
|
|
||||||
---
|
|
||||||
Makefile | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -275,7 +275,7 @@ endif
|
|
||||||
# --cref: add cross reference to map file
|
|
||||||
# -lc : tells the linker to tie in newlib
|
|
||||||
# -lgcc : tells the linker to tie in newlib
|
|
||||||
-LDFLAGS=-nostartfiles -Map=$(BINDIR)/$(BOOT_NAME).map --cref -static
|
|
||||||
+LDFLAGS=-Map=$(BINDIR)/$(BOOT_NAME).map --cref -static
|
|
||||||
LDFLAGS+=-T $(link_script) $(GC_SECTIONS) -Ttext $(LINK_ADDR)
|
|
||||||
|
|
||||||
ifneq ($(DATA_SECTION_ADDR),)
|
|
||||||
@ -120,28 +120,28 @@ define Package/grub2/install
|
|||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c $(PKG_BUILD_DIR)/grub-early.cfg \
|
-c $(PKG_BUILD_DIR)/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \
|
||||||
at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot serial vga
|
at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot search serial vga
|
||||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||||
-d $(PKG_BUILD_DIR)/grub-core \
|
-d $(PKG_BUILD_DIR)/grub-core \
|
||||||
-p /boot/grub \
|
-p /boot/grub \
|
||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c ./files/grub-early.cfg \
|
-c ./files/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \
|
||||||
at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga
|
at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial vga
|
||||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||||
-d $(PKG_BUILD_DIR)/grub-core \
|
-d $(PKG_BUILD_DIR)/grub-core \
|
||||||
-p /boot/grub \
|
-p /boot/grub \
|
||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c ./files/grub-early.cfg \
|
-c ./files/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/eltorito.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/eltorito.img \
|
||||||
at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot serial test vga
|
at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot search serial test vga
|
||||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||||
-d $(PKG_BUILD_DIR)/grub-core \
|
-d $(PKG_BUILD_DIR)/grub-core \
|
||||||
-p /boot/grub \
|
-p /boot/grub \
|
||||||
-O i386-pc \
|
-O i386-pc \
|
||||||
-c ./files/grub-early.cfg \
|
-c ./files/grub-early.cfg \
|
||||||
-o $(STAGING_DIR_IMAGE)/grub2/legacy-core.img \
|
-o $(STAGING_DIR_IMAGE)/grub2/legacy-core.img \
|
||||||
biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga
|
biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial vga
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/grub2-efi/install
|
define Package/grub2-efi/install
|
||||||
|
|||||||
@ -7,13 +7,13 @@
|
|||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_VERSION:=linux4sam-2020.04
|
PKG_VERSION:=linux4sam-2021.10
|
||||||
PKG_RELEASE:=$(AUTORELEASE)
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/linux4sam/u-boot-at91.git
|
PKG_SOURCE_URL:=https://github.com/linux4sam/u-boot-at91.git
|
||||||
PKG_MIRROR_HASH:=4f106d215c01c4d024c4612bbd3ef189188d19abc1ab2cc316b257d308534feb
|
PKG_MIRROR_HASH:=f1190062f2012b182b45b78263a4cce4ada9b7b8d6f5a66d68fa51437105fc8c
|
||||||
PKG_SOURCE_VERSION:=0e1d1b6efb7f8e27c372279a906fcd2524df09da
|
PKG_SOURCE_VERSION:=39854ce82232cdc05c20158d0439bdbc40991e4a
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/u-boot.mk
|
include $(INCLUDE_DIR)/u-boot.mk
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
@ -143,6 +143,12 @@ define U-Boot/sama5d2_ptc_ek_mmc
|
|||||||
BUILD_DEVICES:=microchip_sama5d2-ptc-ek
|
BUILD_DEVICES:=microchip_sama5d2-ptc-ek
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define U-Boot/sama7g5ek_mmc1
|
||||||
|
NAME:=SAMA7G5-EK (SDCard)
|
||||||
|
BUILD_SUBTARGET:=sama7
|
||||||
|
BUILD_DEVICES:=microchip_sama7g5-ek
|
||||||
|
endef
|
||||||
|
|
||||||
UBOOT_TARGETS := \
|
UBOOT_TARGETS := \
|
||||||
at91sam9m10g45ek_nandflash \
|
at91sam9m10g45ek_nandflash \
|
||||||
at91sam9x5ek_nandflash \
|
at91sam9x5ek_nandflash \
|
||||||
@ -162,7 +168,8 @@ UBOOT_TARGETS := \
|
|||||||
sama5d27_wlsom1_ek_mmc \
|
sama5d27_wlsom1_ek_mmc \
|
||||||
sama5d27_wlsom1_ek_qspiflash \
|
sama5d27_wlsom1_ek_qspiflash \
|
||||||
sama5d2_ptc_ek_nandflash \
|
sama5d2_ptc_ek_nandflash \
|
||||||
sama5d2_ptc_ek_mmc
|
sama5d2_ptc_ek_mmc \
|
||||||
|
sama7g5ek_mmc1
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||||
|
|||||||
@ -1,6 +1,33 @@
|
|||||||
|
From 3b05406c02070df3e7f19399d81ebd35ed6deae5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||||||
|
Date: Tue, 12 Oct 2021 17:43:28 +0300
|
||||||
|
Subject: [PATCH] fix -Wformat-security
|
||||||
|
|
||||||
|
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||||||
|
---
|
||||||
|
cmd/panic.c | 2 +-
|
||||||
|
cmd/version.c | 2 +-
|
||||||
|
drivers/pinctrl/pinctrl-uclass.c | 2 +-
|
||||||
|
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmd/panic.c b/cmd/panic.c
|
||||||
|
index f13b3f094fab..197e2d0870ff 100644
|
||||||
|
--- a/cmd/panic.c
|
||||||
|
+++ b/cmd/panic.c
|
||||||
|
@@ -11,7 +11,7 @@ static int do_panic(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
{
|
||||||
|
char *text = (argc < 2) ? "" : argv[1];
|
||||||
|
|
||||||
|
- panic(text);
|
||||||
|
+ panic("%s\n", text);
|
||||||
|
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
|
}
|
||||||
|
diff --git a/cmd/version.c b/cmd/version.c
|
||||||
|
index 3686b8733249..35b52c48171d 100644
|
||||||
--- a/cmd/version.c
|
--- a/cmd/version.c
|
||||||
+++ b/cmd/version.c
|
+++ b/cmd/version.c
|
||||||
@@ -18,7 +18,7 @@ static int do_version(cmd_tbl_t *cmdtp,
|
@@ -19,7 +19,7 @@ static int do_version(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
{
|
{
|
||||||
char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
|
char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
|
||||||
|
|
||||||
@ -9,9 +36,11 @@
|
|||||||
#ifdef CC_VERSION_STRING
|
#ifdef CC_VERSION_STRING
|
||||||
puts(CC_VERSION_STRING "\n");
|
puts(CC_VERSION_STRING "\n");
|
||||||
#endif
|
#endif
|
||||||
|
diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
|
||||||
|
index b0f30aa1f758..aa62a890609a 100644
|
||||||
--- a/drivers/pinctrl/pinctrl-uclass.c
|
--- a/drivers/pinctrl/pinctrl-uclass.c
|
||||||
+++ b/drivers/pinctrl/pinctrl-uclass.c
|
+++ b/drivers/pinctrl/pinctrl-uclass.c
|
||||||
@@ -368,7 +368,7 @@ int pinctrl_get_pin_name(struct udevice
|
@@ -371,7 +371,7 @@ int pinctrl_get_pin_name(struct udevice *dev, int selector, char *buf,
|
||||||
if (!ops->get_pin_name)
|
if (!ops->get_pin_name)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|
||||||
@ -20,14 +49,6 @@
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
--- a/lib/efi_loader/efi_variable.c
|
--
|
||||||
+++ b/lib/efi_loader/efi_variable.c
|
2.33.0
|
||||||
@@ -522,7 +522,7 @@ efi_status_t EFIAPI efi_set_variable(u16
|
|
||||||
|
|
||||||
if (old_size)
|
|
||||||
/* APPEND_WRITE */
|
|
||||||
- s += sprintf(s, old_val);
|
|
||||||
+ s += sprintf(s, "%s", old_val);
|
|
||||||
else
|
|
||||||
s += sprintf(s, "(blob)");
|
|
||||||
|
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
From e33a814e772cdc36436c8c188d8c42d019fda639 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dirk Mueller <dmueller@suse.com>
|
|
||||||
Date: Tue, 14 Jan 2020 18:53:41 +0100
|
|
||||||
Subject: [PATCH] scripts/dtc: Remove redundant YYLOC global declaration
|
|
||||||
|
|
||||||
gcc 10 will default to -fno-common, which causes this error at link
|
|
||||||
time:
|
|
||||||
|
|
||||||
(.text+0x0): multiple definition of `yylloc'; dtc-lexer.lex.o (symbol from plugin):(.text+0x0): first defined here
|
|
||||||
|
|
||||||
This is because both dtc-lexer as well as dtc-parser define the same
|
|
||||||
global symbol yyloc. Before with -fcommon those were merged into one
|
|
||||||
defintion. The proper solution would be to to mark this as "extern",
|
|
||||||
however that leads to:
|
|
||||||
|
|
||||||
dtc-lexer.l:26:16: error: redundant redeclaration of 'yylloc' [-Werror=redundant-decls]
|
|
||||||
26 | extern YYLTYPE yylloc;
|
|
||||||
| ^~~~~~
|
|
||||||
In file included from dtc-lexer.l:24:
|
|
||||||
dtc-parser.tab.h:127:16: note: previous declaration of 'yylloc' was here
|
|
||||||
127 | extern YYLTYPE yylloc;
|
|
||||||
| ^~~~~~
|
|
||||||
cc1: all warnings being treated as errors
|
|
||||||
|
|
||||||
which means the declaration is completely redundant and can just be
|
|
||||||
dropped.
|
|
||||||
|
|
||||||
Signed-off-by: Dirk Mueller <dmueller@suse.com>
|
|
||||||
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
|
|
||||||
[robh: cherry-pick from upstream]
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Rob Herring <robh@kernel.org>
|
|
||||||
---
|
|
||||||
scripts/dtc/dtc-lexer.l | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/scripts/dtc/dtc-lexer.l
|
|
||||||
+++ b/scripts/dtc/dtc-lexer.l
|
|
||||||
@@ -38,7 +38,6 @@ LINECOMMENT "//".*\n
|
|
||||||
#include "srcpos.h"
|
|
||||||
#include "dtc-parser.tab.h"
|
|
||||||
|
|
||||||
-YYLTYPE yylloc;
|
|
||||||
extern bool treesource_error;
|
|
||||||
|
|
||||||
/* CAUTION: this will stop working if we ever use yyless() or yyunput() */
|
|
||||||
@ -123,7 +123,7 @@ wallys,dr531)
|
|||||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0xf800" "0x10000"
|
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0xf800" "0x10000"
|
||||||
;;
|
;;
|
||||||
zte,mf286)
|
zte,mf286)
|
||||||
ubootenv_add_uci_config "/dev/mtd9" "0x0" "0x20000" "0x10000"
|
ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x20000" "0x10000"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,9 @@ ocedo,panda)
|
|||||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
|
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
|
||||||
ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x20000" "0x20000"
|
ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x20000" "0x20000"
|
||||||
;;
|
;;
|
||||||
|
aerohive,hiveap-330)
|
||||||
|
ubootenv_add_uci_config "$(find_mtd_part 'u-boot-env')" "0x0" "0x20000" "0x10000"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
config_load ubootenv
|
config_load ubootenv
|
||||||
|
|||||||
@ -0,0 +1,65 @@
|
|||||||
|
From c11428c7def52671f57089701efe878f7071b696 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||||
|
Date: Thu, 17 Feb 2022 01:08:37 +0100
|
||||||
|
Subject: [PATCH 1/3] ddr: marvell: a38x: fix BYTE_HOMOGENEOUS_SPLIT_OUT
|
||||||
|
decision
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
In commit 3fc92a215b69 ("ddr: marvell: a38x: fix SPLIT_OUT_MIX state
|
||||||
|
decision") I ported a cleaned up and changed version of patch
|
||||||
|
mv_ddr: a380: fix SPLIT_OUT_MIX state decision
|
||||||
|
|
||||||
|
In the port we removed checking for BYTE_HOMOGENEOUS_SPLIT_OUT bit,
|
||||||
|
because:
|
||||||
|
- the fix seemed to work without it
|
||||||
|
- the bit was checked for only at one place out of two, while the second
|
||||||
|
bit, BYTE_SPLIT_OUT_MIX, was checked for in both cases
|
||||||
|
- without the removal it didn't work on Allied Telesis' x530 board
|
||||||
|
|
||||||
|
We recently had a chance to test on more boards, and it seems that the
|
||||||
|
change needs to be opposite: instead of removing the check for
|
||||||
|
BYTE_HOMOGENEOUS_SPLIT_OUT from the first if() statement, the check
|
||||||
|
needs to be added also to the second one - it needs to be at both
|
||||||
|
places.
|
||||||
|
|
||||||
|
With this change all the Turris Omnia boards I have had available to
|
||||||
|
test seem to work, I didn't encounter not even one failed DDR training.
|
||||||
|
|
||||||
|
As last time, I am noting that I do not understand what this code is
|
||||||
|
actually doing, I haven't studied the DDR training algorithm and
|
||||||
|
I suspect that no one will be able to explain it to U-Boot contributors,
|
||||||
|
so we are left with this blind poking in the code with testing whether
|
||||||
|
it works on several boards and hoping it doesn't break anything for
|
||||||
|
anyone :-(.
|
||||||
|
|
||||||
|
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||||
|
Tested-by: Chris Packham <judge.packham@gmail.com>
|
||||||
|
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||||
|
---
|
||||||
|
drivers/ddr/marvell/a38x/ddr3_training_centralization.c | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/ddr/marvell/a38x/ddr3_training_centralization.c
|
||||||
|
+++ b/drivers/ddr/marvell/a38x/ddr3_training_centralization.c
|
||||||
|
@@ -180,7 +180,8 @@ static int ddr3_tip_centralization(u32 d
|
||||||
|
[bit_id],
|
||||||
|
EDGE_1);
|
||||||
|
if (current_byte_status &
|
||||||
|
- BYTE_SPLIT_OUT_MIX) {
|
||||||
|
+ (BYTE_SPLIT_OUT_MIX |
|
||||||
|
+ BYTE_HOMOGENEOUS_SPLIT_OUT)) {
|
||||||
|
if (cur_start_win[bit_id] >= 64)
|
||||||
|
cur_start_win[bit_id] -= 64;
|
||||||
|
else
|
||||||
|
@@ -197,7 +198,8 @@ static int ddr3_tip_centralization(u32 d
|
||||||
|
EDGE_1);
|
||||||
|
if (cur_end_win[bit_id] >= 64 &&
|
||||||
|
(current_byte_status &
|
||||||
|
- BYTE_SPLIT_OUT_MIX)) {
|
||||||
|
+ (BYTE_SPLIT_OUT_MIX |
|
||||||
|
+ BYTE_HOMOGENEOUS_SPLIT_OUT))) {
|
||||||
|
cur_end_win[bit_id] -= 64;
|
||||||
|
DEBUG_CENTRALIZATION_ENGINE
|
||||||
|
(DEBUG_LEVEL_INFO,
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
From 74767a3875c99b1a3d2818456a5fdc02ec1e4f93 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||||
|
Date: Thu, 17 Feb 2022 13:54:42 +0100
|
||||||
|
Subject: [PATCH 2/3] arm: mvebu: spl: Add option to reset the board on DDR
|
||||||
|
training failure
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Some boards may occacionally fail DDR training. Currently we hang() in
|
||||||
|
this case. Add an option that makes the board do an immediate reset in
|
||||||
|
such a case, so that a new training is tried as soon as possible,
|
||||||
|
instead of hanging and possibly waiting for watchdog to reset the board.
|
||||||
|
|
||||||
|
(If the DDR training fails while booting the image via UART, we will
|
||||||
|
still hang - it doesn't make sense to reset in such a case, because
|
||||||
|
after reset the board will try booting from another medium, and the
|
||||||
|
UART booting utility does not expect that.)
|
||||||
|
|
||||||
|
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||||
|
Reviewed-by: Pali Rohár <pali@kernel.org>
|
||||||
|
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||||
|
---
|
||||||
|
arch/arm/mach-mvebu/spl.c | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/arch/arm/mach-mvebu/spl.c
|
||||||
|
+++ b/arch/arm/mach-mvebu/spl.c
|
||||||
|
@@ -4,6 +4,7 @@
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
+#include <cpu_func.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <debug_uart.h>
|
||||||
|
#include <fdtdec.h>
|
||||||
|
@@ -290,7 +291,11 @@ void board_init_f(ulong dummy)
|
||||||
|
ret = ddr3_init();
|
||||||
|
if (ret) {
|
||||||
|
debug("ddr3_init() failed: %d\n", ret);
|
||||||
|
- hang();
|
||||||
|
+ if (IS_ENABLED(CONFIG_DDR_RESET_ON_TRAINING_FAILURE) &&
|
||||||
|
+ get_boot_device() != BOOT_DEVICE_UART)
|
||||||
|
+ reset_cpu();
|
||||||
|
+ else
|
||||||
|
+ hang();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
From 930c46e86123aeea1c73ae55d70ff3dcfc077992 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@nic.cz>
|
||||||
|
Date: Thu, 17 Feb 2022 13:54:43 +0100
|
||||||
|
Subject: [PATCH 3/3] arm: mvebu: turris_omnia: Reset the board immediately on
|
||||||
|
DDR training failure
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The state of the current DDR training code for Armada 38x is such that
|
||||||
|
we cannot be sure it will always train successfully - although after the
|
||||||
|
last change we were yet unable to find a board that failed DDR training,
|
||||||
|
from experience in the last 2 years we know that it is possible.
|
||||||
|
|
||||||
|
The experience also tells us that in many cases the board fails training
|
||||||
|
only sometimes, and after a reset the training is successful.
|
||||||
|
|
||||||
|
Enable the new option that makes the board reset itself on DDR training
|
||||||
|
failure immediately. Until now we called hang() in such a case, which
|
||||||
|
meant that the board was reset by the MCU after 120 seconds.
|
||||||
|
|
||||||
|
Signed-off-by: Marek Behún <marek.behun@nic.cz>
|
||||||
|
Reviewed-by: Stefan Roese <sr@denx.de>
|
||||||
|
Reviewed-by: Pali Rohár <pali@kernel.org>
|
||||||
|
---
|
||||||
|
configs/turris_omnia_defconfig | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
--- a/configs/turris_omnia_defconfig
|
||||||
|
+++ b/configs/turris_omnia_defconfig
|
||||||
|
@@ -11,6 +11,7 @@ CONFIG_NR_DRAM_BANKS=2
|
||||||
|
CONFIG_SYS_MEMTEST_START=0x00800000
|
||||||
|
CONFIG_SYS_MEMTEST_END=0x00ffffff
|
||||||
|
CONFIG_TARGET_TURRIS_OMNIA=y
|
||||||
|
+CONFIG_DDR_RESET_ON_TRAINING_FAILURE=y
|
||||||
|
CONFIG_ENV_SIZE=0x10000
|
||||||
|
CONFIG_ENV_OFFSET=0xF0000
|
||||||
|
CONFIG_ENV_SECT_SIZE=0x10000
|
||||||
@ -1,12 +1,12 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=wireless-regdb
|
PKG_NAME:=wireless-regdb
|
||||||
PKG_VERSION:=2021.08.28
|
PKG_VERSION:=2022.02.18
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=@KERNEL/software/network/wireless-regdb/
|
PKG_SOURCE_URL:=@KERNEL/software/network/wireless-regdb/
|
||||||
PKG_HASH:=cff370c410d1e6d316ae0a7fa8ac6278fdf1efca5d3d664aca7cfd2aafa54446
|
PKG_HASH:=8828c25a4ee25020044004f57374bb9deac852809fad70f8d3d01770bf9ac97f
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
|
|||||||
@ -1,35 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2020 Mauri Sandberg <sandberg@mailfence.com>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
include $(INCLUDE_DIR)/kernel.mk
|
|
||||||
|
|
||||||
PKG_NAME:=gpio-nxp-74hc153
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
PKG_LICENSE:=GPL-2.0
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define KernelPackage/gpio-nxp-74hc153
|
|
||||||
SUBMENU:=Other modules
|
|
||||||
TITLE:= NXP 74HC153 GPIO expander
|
|
||||||
FILES:=$(PKG_BUILD_DIR)/gpio-nxp-74hc153.ko
|
|
||||||
AUTOLOAD:=$(call AutoLoad,30,gpio-nxp-74hc153,1)
|
|
||||||
KCONFIG:=
|
|
||||||
DEPENDS:= @GPIO_SUPPORT @TARGET_ath79
|
|
||||||
endef
|
|
||||||
|
|
||||||
define KernelPackage/gpio-nxp-74hc153/description
|
|
||||||
Platform driver for NXP 74HC153 Dual 4-input Multiplexer.
|
|
||||||
This provides a GPIO interface supporting input mode only.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(KERNEL_MAKE) M=$(PKG_BUILD_DIR) modules
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call KernelPackage,gpio-nxp-74hc153))
|
|
||||||
@ -1 +0,0 @@
|
|||||||
obj-m += gpio-nxp-74hc153.o
|
|
||||||
@ -1,291 +0,0 @@
|
|||||||
/*
|
|
||||||
* NXP 74HC153 - Dual 4-input multiplexer GPIO driver
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org>
|
|
||||||
* Copyright (C) 2020 Mauri Sandberg <sandberg@mailfence.com>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* Example device tree definition:
|
|
||||||
*
|
|
||||||
* gpio-extender {
|
|
||||||
* compatible = "nxp,74hc153-gpio";
|
|
||||||
* gpio-controller;
|
|
||||||
* #gpio-cells = <2>;
|
|
||||||
*
|
|
||||||
* // GPIOs used by this node
|
|
||||||
* gpio-s0 = <&gpio 9 GPIO_ACTIVE_HIGH>;
|
|
||||||
* gpio-s1 = <&gpio 11 GPIO_ACTIVE_HIGH>;
|
|
||||||
* gpio-1y = <&gpio 12 GPIO_ACTIVE_HIGH>;
|
|
||||||
* gpio-2y = <&gpio 14 GPIO_ACTIVE_HIGH>;
|
|
||||||
* };
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/version.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/gpio.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/of_gpio.h>
|
|
||||||
|
|
||||||
#define NXP_74HC153_NUM_GPIOS 8
|
|
||||||
#define NXP_74HC153_S0_MASK 0x1
|
|
||||||
#define NXP_74HC153_S1_MASK 0x2
|
|
||||||
#define NXP_74HC153_BANK_MASK 0x4
|
|
||||||
|
|
||||||
#define NXP_74HC153_DRIVER_NAME "nxp-74hc153"
|
|
||||||
|
|
||||||
struct nxp_74hc153_config {
|
|
||||||
unsigned gpio_pin_s0;
|
|
||||||
unsigned gpio_pin_s1;
|
|
||||||
unsigned gpio_pin_1y;
|
|
||||||
unsigned gpio_pin_2y;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct nxp_74hc153_chip {
|
|
||||||
struct device *parent;
|
|
||||||
struct gpio_chip gpio_chip;
|
|
||||||
struct mutex lock;
|
|
||||||
struct nxp_74hc153_config config;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct nxp_74hc153_chip *gpio_to_nxp(struct gpio_chip *gc)
|
|
||||||
{
|
|
||||||
return container_of(gc, struct nxp_74hc153_chip, gpio_chip);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nxp_74hc153_direction_input(struct gpio_chip *gc, unsigned offset)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nxp_74hc153_direction_output(struct gpio_chip *gc,
|
|
||||||
unsigned offset, int val)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nxp_74hc153_get_value(struct gpio_chip *gc, unsigned offset)
|
|
||||||
{
|
|
||||||
struct nxp_74hc153_chip *nxp;
|
|
||||||
struct nxp_74hc153_platform_data *pdata;
|
|
||||||
unsigned s0;
|
|
||||||
unsigned s1;
|
|
||||||
unsigned pin;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
nxp = gpio_to_nxp(gc);
|
|
||||||
pdata = nxp->parent->platform_data;
|
|
||||||
|
|
||||||
s0 = !!(offset & NXP_74HC153_S0_MASK);
|
|
||||||
s1 = !!(offset & NXP_74HC153_S1_MASK);
|
|
||||||
pin = (offset & NXP_74HC153_BANK_MASK) ? nxp->config.gpio_pin_2y
|
|
||||||
: nxp->config.gpio_pin_1y;
|
|
||||||
|
|
||||||
mutex_lock(&nxp->lock);
|
|
||||||
gpio_set_value(nxp->config.gpio_pin_s0, s0);
|
|
||||||
gpio_set_value(nxp->config.gpio_pin_s1, s1);
|
|
||||||
ret = gpio_get_value(pin);
|
|
||||||
mutex_unlock(&nxp->lock);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void nxp_74hc153_set_value(struct gpio_chip *gc,
|
|
||||||
unsigned offset, int val)
|
|
||||||
{
|
|
||||||
/* not supported */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nxp_74hc153_probe(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct device_node *np = pdev->dev.of_node;
|
|
||||||
struct nxp_74hc153_chip *nxp;
|
|
||||||
struct gpio_chip *gc;
|
|
||||||
int err;
|
|
||||||
unsigned gpio_s0;
|
|
||||||
unsigned gpio_s1;
|
|
||||||
unsigned gpio_1y;
|
|
||||||
unsigned gpio_2y;
|
|
||||||
|
|
||||||
nxp = kzalloc(sizeof(struct nxp_74hc153_chip), GFP_KERNEL);
|
|
||||||
if (nxp == NULL) {
|
|
||||||
dev_err(&pdev->dev, "no memory for private data\n");
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
gpio_s0 = of_get_named_gpio(np, "gpio-s0", 0);
|
|
||||||
gpio_s1 = of_get_named_gpio(np, "gpio-s1", 0);
|
|
||||||
gpio_1y = of_get_named_gpio(np, "gpio-1y", 0);
|
|
||||||
gpio_2y = of_get_named_gpio(np, "gpio-2y", 0);
|
|
||||||
|
|
||||||
if (!gpio_is_valid(gpio_s0) || !gpio_is_valid(gpio_s1) ||
|
|
||||||
!gpio_is_valid(gpio_1y) || !gpio_is_valid(gpio_2y)) {
|
|
||||||
|
|
||||||
dev_err(&pdev->dev, "control GPIO(s) are missing\n");
|
|
||||||
err = -EINVAL;
|
|
||||||
goto err_free_nxp;
|
|
||||||
} else {
|
|
||||||
nxp->config.gpio_pin_s0 = gpio_s0;
|
|
||||||
nxp->config.gpio_pin_s1 = gpio_s1;
|
|
||||||
nxp->config.gpio_pin_1y = gpio_1y;
|
|
||||||
nxp->config.gpio_pin_2y = gpio_2y;
|
|
||||||
}
|
|
||||||
|
|
||||||
// apply pin configuration
|
|
||||||
err = gpio_request(nxp->config.gpio_pin_s0, dev_name(&pdev->dev));
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_s0, err);
|
|
||||||
goto err_free_nxp;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gpio_request(nxp->config.gpio_pin_s1, dev_name(&pdev->dev));
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_s1, err);
|
|
||||||
goto err_free_s0;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gpio_request(nxp->config.gpio_pin_1y, dev_name(&pdev->dev));
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_1y, err);
|
|
||||||
goto err_free_s1;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gpio_request(nxp->config.gpio_pin_2y, dev_name(&pdev->dev));
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_2y, err);
|
|
||||||
goto err_free_1y;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gpio_direction_output(nxp->config.gpio_pin_s0, 0);
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev,
|
|
||||||
"unable to set direction of gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_s0, err);
|
|
||||||
goto err_free_2y;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gpio_direction_output(nxp->config.gpio_pin_s1, 0);
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev,
|
|
||||||
"unable to set direction of gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_s1, err);
|
|
||||||
goto err_free_2y;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gpio_direction_input(nxp->config.gpio_pin_1y);
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev,
|
|
||||||
"unable to set direction of gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_1y, err);
|
|
||||||
goto err_free_2y;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gpio_direction_input(nxp->config.gpio_pin_2y);
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev,
|
|
||||||
"unable to set direction of gpio %u, err=%d\n",
|
|
||||||
nxp->config.gpio_pin_2y, err);
|
|
||||||
goto err_free_2y;
|
|
||||||
}
|
|
||||||
|
|
||||||
nxp->parent = &pdev->dev;
|
|
||||||
mutex_init(&nxp->lock);
|
|
||||||
|
|
||||||
gc = &nxp->gpio_chip;
|
|
||||||
|
|
||||||
gc->direction_input = nxp_74hc153_direction_input;
|
|
||||||
gc->direction_output = nxp_74hc153_direction_output;
|
|
||||||
gc->get = nxp_74hc153_get_value;
|
|
||||||
gc->set = nxp_74hc153_set_value;
|
|
||||||
gc->can_sleep = 1;
|
|
||||||
|
|
||||||
gc->base = -1;
|
|
||||||
gc->ngpio = NXP_74HC153_NUM_GPIOS;
|
|
||||||
gc->label = dev_name(nxp->parent);
|
|
||||||
gc->parent = nxp->parent;
|
|
||||||
gc->owner = THIS_MODULE;
|
|
||||||
gc->of_node = np;
|
|
||||||
|
|
||||||
err = gpiochip_add(&nxp->gpio_chip);
|
|
||||||
if (err) {
|
|
||||||
dev_err(&pdev->dev, "unable to add gpio chip, err=%d\n", err);
|
|
||||||
goto err_free_2y;
|
|
||||||
}
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, nxp);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err_free_2y:
|
|
||||||
gpio_free(nxp->config.gpio_pin_2y);
|
|
||||||
err_free_1y:
|
|
||||||
gpio_free(nxp->config.gpio_pin_1y);
|
|
||||||
err_free_s1:
|
|
||||||
gpio_free(nxp->config.gpio_pin_s1);
|
|
||||||
err_free_s0:
|
|
||||||
gpio_free(nxp->config.gpio_pin_s0);
|
|
||||||
err_free_nxp:
|
|
||||||
kfree(nxp);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nxp_74hc153_remove(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct nxp_74hc153_chip *nxp = platform_get_drvdata(pdev);
|
|
||||||
|
|
||||||
if (nxp) {
|
|
||||||
gpiochip_remove(&nxp->gpio_chip);
|
|
||||||
gpio_free(nxp->config.gpio_pin_2y);
|
|
||||||
gpio_free(nxp->config.gpio_pin_1y);
|
|
||||||
gpio_free(nxp->config.gpio_pin_s1);
|
|
||||||
gpio_free(nxp->config.gpio_pin_s0);
|
|
||||||
|
|
||||||
kfree(nxp);
|
|
||||||
platform_set_drvdata(pdev, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct of_device_id nxp_74hc153_id[] = {
|
|
||||||
{
|
|
||||||
.compatible = "nxp,74hc153-gpio",
|
|
||||||
.data = NULL,
|
|
||||||
}, { /* sentinel */ }
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE(of, nxp_74hc153_id);
|
|
||||||
|
|
||||||
static struct platform_driver nxp_74hc153_driver = {
|
|
||||||
.probe = nxp_74hc153_probe,
|
|
||||||
.remove = nxp_74hc153_remove,
|
|
||||||
.driver = {
|
|
||||||
.name = NXP_74HC153_DRIVER_NAME,
|
|
||||||
.owner = THIS_MODULE,
|
|
||||||
.of_match_table = nxp_74hc153_id,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init nxp_74hc153_init(void)
|
|
||||||
{
|
|
||||||
return platform_driver_register(&nxp_74hc153_driver);
|
|
||||||
}
|
|
||||||
subsys_initcall(nxp_74hc153_init);
|
|
||||||
|
|
||||||
static void __exit nxp_74hc153_exit(void)
|
|
||||||
{
|
|
||||||
platform_driver_unregister(&nxp_74hc153_driver);
|
|
||||||
}
|
|
||||||
module_exit(nxp_74hc153_exit);
|
|
||||||
|
|
||||||
MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>");
|
|
||||||
MODULE_DESCRIPTION("GPIO expander driver for NXP 74HC153");
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_ALIAS("platform:" NXP_74HC153_DRIVER_NAME);
|
|
||||||
73
package/kernel/ksmbd/Makefile
Normal file
73
package/kernel/ksmbd/Makefile
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=ksmbd
|
||||||
|
PKG_VERSION:=3.4.3
|
||||||
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
|
PKG_SOURCE_URL:=https://codeload.github.com/cifsd-team/cifsd/tar.gz/$(PKG_VERSION)?
|
||||||
|
PKG_HASH:=a910c55d9e6924775e00504eddd00b49788603af29d0772cb9fb6722c189f628
|
||||||
|
|
||||||
|
PKG_LICENSE:=GPL-2.0-or-later
|
||||||
|
PKG_LICENSE_FILES:=COPYING
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
TAR_OPTIONS+= --strip-components 1
|
||||||
|
TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
|
||||||
|
|
||||||
|
define KernelPackage/fs-ksmbd
|
||||||
|
SUBMENU:=Filesystems
|
||||||
|
TITLE:=SMB kernel server support
|
||||||
|
URL:=https://github.com/cifsd-team/cifsd
|
||||||
|
FILES:=$(PKG_BUILD_DIR)/ksmbd.ko
|
||||||
|
DEPENDS:= \
|
||||||
|
+kmod-nls-base \
|
||||||
|
+kmod-nls-utf8 \
|
||||||
|
+kmod-crypto-md4 \
|
||||||
|
+kmod-crypto-md5 \
|
||||||
|
+kmod-crypto-hmac \
|
||||||
|
+kmod-crypto-ecb \
|
||||||
|
+kmod-crypto-des \
|
||||||
|
+kmod-crypto-sha256 \
|
||||||
|
+kmod-crypto-cmac \
|
||||||
|
+kmod-crypto-sha512 \
|
||||||
|
+kmod-crypto-aead \
|
||||||
|
+kmod-crypto-ccm \
|
||||||
|
+kmod-crypto-gcm \
|
||||||
|
+kmod-asn1-decoder \
|
||||||
|
+kmod-oid-registry
|
||||||
|
endef
|
||||||
|
|
||||||
|
# The last two DEPENDS are hacks in order to get CONFIG_ASN1 and CONFIG_OID_REGISTRY
|
||||||
|
# which it seems can't be selected independently. Some bug in either base or upstream.
|
||||||
|
|
||||||
|
define KernelPackage/fs-ksmbd/description
|
||||||
|
Ksmbd is an In-kernel SMBv(1)2/3 fileserver.
|
||||||
|
It's an implementation of the SMB protocol in kernel space for sharing files and IPC services over network.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/fs-ksmbd/config
|
||||||
|
config KSMBD_SMB_INSECURE_SERVER
|
||||||
|
bool "Support for insecure SMB1/CIFS and SMB2.0 protocols"
|
||||||
|
depends on PACKAGE_kmod-fs-ksmbd
|
||||||
|
help
|
||||||
|
This enables deprecated insecure protocols dialects: SMB1/CIFS and SMB2.0.
|
||||||
|
default y
|
||||||
|
endef
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_KSMBD_SMB_INSECURE_SERVER),y)
|
||||||
|
PKG_EXTRA_KCONFIG:=CONFIG_SMB_INSECURE_SERVER=y
|
||||||
|
EXTRA_CFLAGS += -DCONFIG_SMB_INSECURE_SERVER=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(KERNEL_MAKE) M="$(PKG_BUILD_DIR)" \
|
||||||
|
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
|
||||||
|
$(PKG_EXTRA_KCONFIG) \
|
||||||
|
CONFIG_SMB_SERVER=m \
|
||||||
|
modules
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,fs-ksmbd))
|
||||||
11
package/kernel/ksmbd/patches/01-keep_kmod_metadata.patch
Normal file
11
package/kernel/ksmbd/patches/01-keep_kmod_metadata.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- a/glob.h
|
||||||
|
+++ b/glob.h
|
||||||
|
@@ -7,6 +7,8 @@
|
||||||
|
#ifndef __KSMBD_GLOB_H
|
||||||
|
#define __KSMBD_GLOB_H
|
||||||
|
|
||||||
|
+#undef CONFIG_MODULE_STRIPPED
|
||||||
|
+
|
||||||
|
#include <linux/ctype.h>
|
||||||
|
|
||||||
|
#include "unicode.h"
|
||||||
@ -380,6 +380,7 @@ $(eval $(call KernelPackage,fs-nfs))
|
|||||||
define KernelPackage/fs-nfs-common
|
define KernelPackage/fs-nfs-common
|
||||||
SUBMENU:=$(FS_MENU)
|
SUBMENU:=$(FS_MENU)
|
||||||
TITLE:=Common NFS filesystem modules
|
TITLE:=Common NFS filesystem modules
|
||||||
|
DEPENDS:=+kmod-oid-registry
|
||||||
KCONFIG:= \
|
KCONFIG:= \
|
||||||
CONFIG_LOCKD \
|
CONFIG_LOCKD \
|
||||||
CONFIG_SUNRPC \
|
CONFIG_SUNRPC \
|
||||||
@ -412,10 +413,9 @@ define KernelPackage/fs-nfs-common-rpcsec
|
|||||||
CONFIG_SUNRPC_GSS \
|
CONFIG_SUNRPC_GSS \
|
||||||
CONFIG_RPCSEC_GSS_KRB5
|
CONFIG_RPCSEC_GSS_KRB5
|
||||||
FILES:= \
|
FILES:= \
|
||||||
$(LINUX_DIR)/lib/oid_registry.ko \
|
|
||||||
$(LINUX_DIR)/net/sunrpc/auth_gss/auth_rpcgss.ko \
|
$(LINUX_DIR)/net/sunrpc/auth_gss/auth_rpcgss.ko \
|
||||||
$(LINUX_DIR)/net/sunrpc/auth_gss/rpcsec_gss_krb5.ko
|
$(LINUX_DIR)/net/sunrpc/auth_gss/rpcsec_gss_krb5.ko
|
||||||
AUTOLOAD:=$(call AutoLoad,31,oid_registry auth_rpcgss rpcsec_gss_krb5)
|
AUTOLOAD:=$(call AutoLoad,31,auth_rpcgss rpcsec_gss_krb5)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define KernelPackage/fs-nfs-common-rpcsec/description
|
define KernelPackage/fs-nfs-common-rpcsec/description
|
||||||
@ -498,6 +498,27 @@ endef
|
|||||||
$(eval $(call KernelPackage,fs-ntfs))
|
$(eval $(call KernelPackage,fs-ntfs))
|
||||||
|
|
||||||
|
|
||||||
|
define KernelPackage/pstore
|
||||||
|
SUBMENU:=$(FS_MENU)
|
||||||
|
TITLE:=Pstore file system
|
||||||
|
DEFAULT:=m if ALL_KMODS
|
||||||
|
KCONFIG:= \
|
||||||
|
CONFIG_PSTORE \
|
||||||
|
CONFIG_PSTORE_COMPRESS=y \
|
||||||
|
CONFIG_PSTORE_COMPRESS_DEFAULT="deflate" \
|
||||||
|
CONFIG_PSTORE_DEFLATE_COMPRESS=y \
|
||||||
|
CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y
|
||||||
|
FILES:= $(LINUX_DIR)/fs/pstore/pstore.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,30,pstore,1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/pstore/description
|
||||||
|
Kernel module for pstore filesystem support
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,pstore))
|
||||||
|
|
||||||
|
|
||||||
define KernelPackage/fs-reiserfs
|
define KernelPackage/fs-reiserfs
|
||||||
SUBMENU:=$(FS_MENU)
|
SUBMENU:=$(FS_MENU)
|
||||||
TITLE:=ReiserFS filesystem support
|
TITLE:=ReiserFS filesystem support
|
||||||
|
|||||||
20
package/kernel/linux/modules/gpio-cascade.mk
Normal file
20
package/kernel/linux/modules/gpio-cascade.mk
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
MENU_TITLE:=GPIO support
|
||||||
|
|
||||||
|
define KernelPackage/gpio-cascade
|
||||||
|
SUBMENU:=$(MENU_TITLE)
|
||||||
|
TITLE:=Generic GPIO cascade
|
||||||
|
KCONFIG:=CONFIG_GPIO_CASCADE
|
||||||
|
DEPENDS:=@GPIO_SUPPORT +kmod-mux-core
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/gpio/gpio-cascade.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,29,gpio-cascade,1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/gpio-cascade/description
|
||||||
|
Kernel module for Generic GPIO cascade
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,gpio-cascade))
|
||||||
@ -213,6 +213,23 @@ endef
|
|||||||
$(eval $(call KernelPackage,hwmon-lm63))
|
$(eval $(call KernelPackage,hwmon-lm63))
|
||||||
|
|
||||||
|
|
||||||
|
define KernelPackage/hwmon-lm70
|
||||||
|
TITLE:=LM70 monitoring support
|
||||||
|
KCONFIG:=CONFIG_SENSORS_LM70 \
|
||||||
|
CONFIG_SPI=y \
|
||||||
|
CONFIG_SPI_MASTER=y
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/hwmon/lm70.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,lm70)
|
||||||
|
$(call AddDepends/hwmon)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/hwmon-lm70/description
|
||||||
|
Kernel module for lm70 and compatible thermal monitor chip
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,hwmon-lm70))
|
||||||
|
|
||||||
|
|
||||||
define KernelPackage/hwmon-lm75
|
define KernelPackage/hwmon-lm75
|
||||||
TITLE:=LM75 monitoring support
|
TITLE:=LM75 monitoring support
|
||||||
KCONFIG:=CONFIG_SENSORS_LM75
|
KCONFIG:=CONFIG_SENSORS_LM75
|
||||||
|
|||||||
@ -272,3 +272,13 @@ define KernelPackage/asn1-decoder
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call KernelPackage,asn1-decoder))
|
$(eval $(call KernelPackage,asn1-decoder))
|
||||||
|
|
||||||
|
define KernelPackage/oid-registry
|
||||||
|
SUBMENU:=$(LIB_MENU)
|
||||||
|
TITLE:=Object identifier registry
|
||||||
|
KCONFIG:= CONFIG_OID_REGISTRY
|
||||||
|
FILES:=$(LINUX_DIR)/lib/oid_registry.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,31,oid_registry)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,oid-registry))
|
||||||
|
|||||||
34
package/kernel/linux/modules/multiplexer.mk
Normal file
34
package/kernel/linux/modules/multiplexer.mk
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
MENU_TITLE:=Multiplexer Support
|
||||||
|
|
||||||
|
define KernelPackage/mux-core
|
||||||
|
SUBMENU:=$(MENU_TITLE)
|
||||||
|
TITLE:=Multiplexer Support
|
||||||
|
KCONFIG:=CONFIG_MULTIPLEXER
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/mux/mux-core.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,25,mux-core,1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/mux-core/description
|
||||||
|
Kernel module for multiplexer support
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,mux-core))
|
||||||
|
|
||||||
|
define KernelPackage/mux-gpio
|
||||||
|
SUBMENU:=$(MENU_TITLE)
|
||||||
|
TITLE:=GPIO-controlled Multiplexer controller
|
||||||
|
KCONFIG:=CONFIG_MUX_GPIO
|
||||||
|
DEPENDS:=@GPIO_SUPPORT kmod-mux-core
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/mux/mux-gpio.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,25,mux-gpio,1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/mux-gpio/description
|
||||||
|
Kernel modules for GPIO-controlled Multiplexer controller
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,mux-gpio))
|
||||||
@ -770,6 +770,41 @@ endef
|
|||||||
$(eval $(call KernelPackage,mtdram))
|
$(eval $(call KernelPackage,mtdram))
|
||||||
|
|
||||||
|
|
||||||
|
define KernelPackage/ramoops
|
||||||
|
SUBMENU:=$(OTHER_MENU)
|
||||||
|
TITLE:=Ramoops (pstore-ram)
|
||||||
|
DEFAULT:=m if ALL_KMODS
|
||||||
|
KCONFIG:=CONFIG_PSTORE_RAM
|
||||||
|
DEPENDS:=+kmod-pstore +kmod-reed-solomon
|
||||||
|
FILES:= $(LINUX_DIR)/fs/pstore/ramoops.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,30,ramoops,1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/ramoops/description
|
||||||
|
Kernel module for pstore-ram (ramoops) crash log storage
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,ramoops))
|
||||||
|
|
||||||
|
|
||||||
|
define KernelPackage/reed-solomon
|
||||||
|
SUBMENU:=$(OTHER_MENU)
|
||||||
|
TITLE:=Reed-Solomon error correction
|
||||||
|
DEFAULT:=m if ALL_KMODS
|
||||||
|
KCONFIG:=CONFIG_REED_SOLOMON \
|
||||||
|
CONFIG_REED_SOLOMON_DEC8=y \
|
||||||
|
CONFIG_REED_SOLOMON_ENC8=y
|
||||||
|
FILES:= $(LINUX_DIR)/lib/reed_solomon/reed_solomon.ko
|
||||||
|
AUTOLOAD:=$(call AutoLoad,30,reed_solomon,1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/reed-solomon/description
|
||||||
|
Kernel module for Reed-Solomon error correction
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,reed-solomon))
|
||||||
|
|
||||||
|
|
||||||
define KernelPackage/serial-8250
|
define KernelPackage/serial-8250
|
||||||
SUBMENU:=$(OTHER_MENU)
|
SUBMENU:=$(OTHER_MENU)
|
||||||
TITLE:=8250 UARTs
|
TITLE:=8250 UARTs
|
||||||
|
|||||||
@ -0,0 +1,43 @@
|
|||||||
|
From: Deren Wu <deren.wu@mediatek.com>
|
||||||
|
Date: Sun, 13 Feb 2022 00:20:15 +0800
|
||||||
|
Subject: [PATCH] mac80211: fix EAPoL rekey fail in 802.3 rx path
|
||||||
|
|
||||||
|
mac80211 set capability NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211
|
||||||
|
to upper layer by default. That means we should pass EAPoL packets through
|
||||||
|
nl80211 path only, and should not send the EAPoL skb to netdevice diretly.
|
||||||
|
At the meanwhile, wpa_supplicant would not regist sock to listen EAPoL skb
|
||||||
|
on the netdevice.
|
||||||
|
|
||||||
|
However, there is no contorl_port_protocol handler in mac80211 for 802.3 RX
|
||||||
|
packets, mac80211 driver would pass up the EAPoL rekey frame to netdevice
|
||||||
|
and wpa_supplicant would be never interactive with this kind of packets,
|
||||||
|
if SUPPORTS_RX_DECAP_OFFLOAD is enabled. This causes STA always rekey fail
|
||||||
|
if EAPoL frame go through 802.3 path.
|
||||||
|
|
||||||
|
To avoid this problem, align the same process as 802.11 type to handle
|
||||||
|
this frame before put it into network stack.
|
||||||
|
|
||||||
|
Fixes: 80a915ec4427 ("mac80211: add rx decapsulation offload support")
|
||||||
|
Signed-off-by: Deren Wu <deren.wu@mediatek.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/rx.c
|
||||||
|
+++ b/net/mac80211/rx.c
|
||||||
|
@@ -4523,16 +4523,7 @@ static void ieee80211_rx_8023(struct iee
|
||||||
|
|
||||||
|
/* deliver to local stack */
|
||||||
|
skb->protocol = eth_type_trans(skb, fast_rx->dev);
|
||||||
|
- memset(skb->cb, 0, sizeof(skb->cb));
|
||||||
|
- if (rx->list)
|
||||||
|
-#if LINUX_VERSION_IS_GEQ(4,19,0)
|
||||||
|
- list_add_tail(&skb->list, rx->list);
|
||||||
|
-#else
|
||||||
|
- __skb_queue_tail(rx->list, skb);
|
||||||
|
-#endif
|
||||||
|
- else
|
||||||
|
- netif_receive_skb(skb);
|
||||||
|
-
|
||||||
|
+ ieee80211_deliver_skb_to_local_stack(skb, rx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
From: Nicolas Escande <nico.escande@gmail.com>
|
||||||
|
Date: Mon, 14 Feb 2022 18:32:14 +0100
|
||||||
|
Subject: [PATCH] mac80211: fix forwarded mesh frames AC & queue selection
|
||||||
|
|
||||||
|
There are two problems with the current code that have been highlighted
|
||||||
|
with the AQL feature that is now enbaled by default.
|
||||||
|
|
||||||
|
First problem is in ieee80211_rx_h_mesh_fwding(),
|
||||||
|
ieee80211_select_queue_80211() is used on received packets to choose
|
||||||
|
the sending AC queue of the forwarding packet although this function
|
||||||
|
should only be called on TX packet (it uses ieee80211_tx_info).
|
||||||
|
This ends with forwarded mesh packets been sent on unrelated random AC
|
||||||
|
queue. To fix that, AC queue can directly be infered from skb->priority
|
||||||
|
which has been extracted from QOS info (see ieee80211_parse_qos()).
|
||||||
|
|
||||||
|
Second problem is the value of queue_mapping set on forwarded mesh
|
||||||
|
frames via skb_set_queue_mapping() is not the AC of the packet but a
|
||||||
|
hardware queue index. This may or may not work depending on AC to HW
|
||||||
|
queue mapping which is driver specific.
|
||||||
|
|
||||||
|
Both of these issues lead to improper AC selection while forwarding
|
||||||
|
mesh packets but more importantly due to improper airtime accounting
|
||||||
|
(which is done on a per STA, per AC basis) caused traffic stall with
|
||||||
|
the introduction of AQL.
|
||||||
|
|
||||||
|
Fixes: cf44012810cc ("mac80211: fix unnecessary frame drops in mesh fwding")
|
||||||
|
Fixes: d3c1597b8d1b ("mac80211: fix forwarded mesh frame queue mapping")
|
||||||
|
Co-developed-by: Remi Pommarel <repk@triplefau.lt>
|
||||||
|
Signed-off-by: Remi Pommarel <repk@triplefau.lt>
|
||||||
|
Signed-off-by: Nicolas Escande <nico.escande@gmail.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/rx.c
|
||||||
|
+++ b/net/mac80211/rx.c
|
||||||
|
@@ -2921,13 +2921,13 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
|
||||||
|
ether_addr_equal(sdata->vif.addr, hdr->addr3))
|
||||||
|
return RX_CONTINUE;
|
||||||
|
|
||||||
|
- ac = ieee80211_select_queue_80211(sdata, skb, hdr);
|
||||||
|
+ ac = ieee802_1d_to_ac[skb->priority];
|
||||||
|
q = sdata->vif.hw_queue[ac];
|
||||||
|
if (ieee80211_queue_stopped(&local->hw, q)) {
|
||||||
|
IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion);
|
||||||
|
return RX_DROP_MONITOR;
|
||||||
|
}
|
||||||
|
- skb_set_queue_mapping(skb, q);
|
||||||
|
+ skb_set_queue_mapping(skb, ac);
|
||||||
|
|
||||||
|
if (!--mesh_hdr->ttl) {
|
||||||
|
if (!is_multicast_ether_addr(hdr->addr1))
|
||||||
@ -27,6 +27,8 @@ config-y += STAGING
|
|||||||
|
|
||||||
config-$(call config_package,rtw88) += RTW88 RTW88_CORE RTW88_PCI
|
config-$(call config_package,rtw88) += RTW88 RTW88_CORE RTW88_PCI
|
||||||
config-y += RTW88_8822BE RTW88_8822CE RTW88_8723DE
|
config-y += RTW88_8822BE RTW88_8822CE RTW88_8723DE
|
||||||
|
config-$(CONFIG_PACKAGE_RTW88_DEBUG) += RTW88_DEBUG
|
||||||
|
config-$(CONFIG_PACKAGE_RTW88_DEBUGFS) += RTW88_DEBUGFS
|
||||||
|
|
||||||
define KernelPackage/rtl818x/Default
|
define KernelPackage/rtl818x/Default
|
||||||
$(call KernelPackage/mac80211/Default)
|
$(call KernelPackage/mac80211/Default)
|
||||||
@ -175,6 +177,22 @@ define KernelPackage/rtl8xxxu/description
|
|||||||
Please report your results!
|
Please report your results!
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/rtw88/config
|
||||||
|
config PACKAGE_RTW88_DEBUG
|
||||||
|
bool "Realtek wireless debugging (rtw88)"
|
||||||
|
depends on PACKAGE_kmod-rtw88
|
||||||
|
help
|
||||||
|
Enable debugging output for rtw88 devices
|
||||||
|
|
||||||
|
config PACKAGE_RTW88_DEBUGFS
|
||||||
|
bool "Enable rtw88 debugfS support"
|
||||||
|
select KERNEL_DEBUG_FS
|
||||||
|
depends on PACKAGE_kmod-rtw88
|
||||||
|
help
|
||||||
|
Select this to see extensive information about
|
||||||
|
the internal state of rtw88 in debugfs.
|
||||||
|
endef
|
||||||
|
|
||||||
define KernelPackage/rtw88
|
define KernelPackage/rtw88
|
||||||
$(call KernelPackage/mac80211/Default)
|
$(call KernelPackage/mac80211/Default)
|
||||||
TITLE:=Realtek RTL8822BE/RTL8822CE/RTL8723DE
|
TITLE:=Realtek RTL8822BE/RTL8822CE/RTL8723DE
|
||||||
|
|||||||
@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
|
|||||||
|
|
||||||
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_DATE:=2022-02-03
|
PKG_SOURCE_DATE:=2022-02-15
|
||||||
PKG_SOURCE_VERSION:=ab9b8078427a9a886b11516d5725190f0e7763b0
|
PKG_SOURCE_VERSION:=c67df0d3130a51d79b558f0329c2ca289c73b16e
|
||||||
PKG_MIRROR_HASH:=60562cf2ac2e97e654a8202bd6af2c928ca96b129edb168af29f227b6ffbc873
|
PKG_MIRROR_HASH:=57526f62adc1c1cc2c594ff23b883314ad83df8cdfab54c9e3503a8ec4c3a33f
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
PKG_USE_NINJA:=0
|
PKG_USE_NINJA:=0
|
||||||
|
|||||||
@ -8,12 +8,12 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=libnetfilter_conntrack
|
PKG_NAME:=libnetfilter_conntrack
|
||||||
PKG_VERSION:=1.0.8
|
PKG_VERSION:=1.0.9
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||||
PKG_SOURCE_URL:=https://www.netfilter.org/projects/libnetfilter_conntrack/files
|
PKG_SOURCE_URL:=https://www.netfilter.org/projects/libnetfilter_conntrack/files
|
||||||
PKG_HASH:=0cd13be008923528687af6c6b860f35392d49251c04ee0648282d36b1faec1cf
|
PKG_HASH:=67bd9df49fe34e8b82144f6dfb93b320f384a8ea59727e92ff8d18b5f4b579a8
|
||||||
|
|
||||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||||
PKG_LICENSE:=GPL-2.0-or-later
|
PKG_LICENSE:=GPL-2.0-or-later
|
||||||
|
|||||||
@ -11,9 +11,8 @@ PKG_NAME:=openssl
|
|||||||
PKG_BASE:=1.1.1
|
PKG_BASE:=1.1.1
|
||||||
PKG_BUGFIX:=m
|
PKG_BUGFIX:=m
|
||||||
PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX)
|
PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX)
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=3
|
||||||
PKG_USE_MIPS16:=0
|
PKG_USE_MIPS16:=0
|
||||||
ENGINES_DIR=engines-1.1
|
|
||||||
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
PKG_BUILD_PARALLEL:=1
|
||||||
|
|
||||||
@ -67,6 +66,7 @@ PKG_CONFIG_DEPENDS:= \
|
|||||||
CONFIG_OPENSSL_WITH_WHIRLPOOL
|
CONFIG_OPENSSL_WITH_WHIRLPOOL
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include engine.mk
|
||||||
|
|
||||||
ifneq ($(CONFIG_CCACHE),)
|
ifneq ($(CONFIG_CCACHE),)
|
||||||
HOSTCC=$(HOSTCC_NOCACHE)
|
HOSTCC=$(HOSTCC_NOCACHE)
|
||||||
@ -130,6 +130,8 @@ endef
|
|||||||
|
|
||||||
define Package/libopenssl-conf/conffiles
|
define Package/libopenssl-conf/conffiles
|
||||||
/etc/ssl/openssl.cnf
|
/etc/ssl/openssl.cnf
|
||||||
|
$(if CONFIG_OPENSSL_ENGINE_BUILTIN_DEVCRYPTO,/etc/ssl/engines.cnf.d/devcrypto.cnf)
|
||||||
|
$(if CONFIG_OPENSSL_ENGINE_BUILTIN_PADLOCK,/etc/ssl/engines.cnf.d/padlock.cnf)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libopenssl-conf/description
|
define Package/libopenssl-conf/description
|
||||||
@ -137,51 +139,50 @@ $(call Package/openssl/Default/description)
|
|||||||
This package installs the OpenSSL configuration file /etc/ssl/openssl.cnf.
|
This package installs the OpenSSL configuration file /etc/ssl/openssl.cnf.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
$(eval $(call Package/openssl/add-engine,afalg))
|
||||||
define Package/libopenssl-afalg
|
define Package/libopenssl-afalg
|
||||||
$(call Package/openssl/Default)
|
$(call Package/openssl/Default)
|
||||||
SUBMENU:=SSL
|
$(call Package/openssl/engine/Default)
|
||||||
TITLE:=AFALG hardware acceleration engine
|
TITLE:=AFALG hardware acceleration engine
|
||||||
DEPENDS:=libopenssl @OPENSSL_ENGINE @KERNEL_AIO \
|
DEPENDS += @KERNEL_AIO +PACKAGE_libopenssl-afalg:kmod-crypto-user \
|
||||||
+PACKAGE_libopenssl-afalg:kmod-crypto-user +libopenssl-conf @!OPENSSL_ENGINE_BUILTIN
|
@!OPENSSL_ENGINE_BUILTIN
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libopenssl-afalg/description
|
define Package/libopenssl-afalg/description
|
||||||
This package adds an engine that enables hardware acceleration
|
This package adds an engine that enables hardware acceleration
|
||||||
through the AF_ALG kernel interface.
|
through the AF_ALG kernel interface.
|
||||||
To use it, you need to configure the engine in /etc/ssl/openssl.cnf
|
|
||||||
See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module
|
See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module
|
||||||
and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators
|
and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators
|
||||||
The engine_id is "afalg"
|
The engine_id is "afalg"
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
$(eval $(call Package/openssl/add-engine,devcrypto))
|
||||||
define Package/libopenssl-devcrypto
|
define Package/libopenssl-devcrypto
|
||||||
$(call Package/openssl/Default)
|
$(call Package/openssl/Default)
|
||||||
SUBMENU:=SSL
|
$(call Package/openssl/engine/Default)
|
||||||
TITLE:=/dev/crypto hardware acceleration engine
|
TITLE:=/dev/crypto hardware acceleration engine
|
||||||
DEPENDS:=libopenssl @OPENSSL_ENGINE +PACKAGE_libopenssl-devcrypto:kmod-cryptodev +libopenssl-conf \
|
DEPENDS += +PACKAGE_libopenssl-devcrypto:kmod-cryptodev @!OPENSSL_ENGINE_BUILTIN
|
||||||
@!OPENSSL_ENGINE_BUILTIN
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libopenssl-devcrypto/description
|
define Package/libopenssl-devcrypto/description
|
||||||
This package adds an engine that enables hardware acceleration
|
This package adds an engine that enables hardware acceleration
|
||||||
through the /dev/crypto kernel interface.
|
through the /dev/crypto kernel interface.
|
||||||
To use it, you need to configure the engine in /etc/ssl/openssl.cnf
|
|
||||||
See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module
|
See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module
|
||||||
and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators
|
and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators
|
||||||
The engine_id is "devcrypto"
|
The engine_id is "devcrypto"
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
$(eval $(call Package/openssl/add-engine,padlock))
|
||||||
define Package/libopenssl-padlock
|
define Package/libopenssl-padlock
|
||||||
$(call Package/openssl/Default)
|
$(call Package/openssl/Default)
|
||||||
SUBMENU:=SSL
|
$(call Package/openssl/engine/Default)
|
||||||
TITLE:=VIA Padlock hardware acceleration engine
|
TITLE:=VIA Padlock hardware acceleration engine
|
||||||
DEPENDS:=libopenssl @OPENSSL_ENGINE @TARGET_x86 +PACKAGE_libopenssl-padlock:kmod-crypto-hw-padlock \
|
DEPENDS += @TARGET_x86 +PACKAGE_libopenssl-padlock:kmod-crypto-hw-padlock \
|
||||||
+libopenssl-conf @!OPENSSL_ENGINE_BUILTIN
|
@!OPENSSL_ENGINE_BUILTIN
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libopenssl-padlock/description
|
define Package/libopenssl-padlock/description
|
||||||
This package adds an engine that enables VIA Padlock hardware acceleration.
|
This package adds an engine that enables VIA Padlock hardware acceleration.
|
||||||
To use it, you need to configure it in /etc/ssl/openssl.cnf.
|
|
||||||
See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module
|
See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module
|
||||||
and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators
|
and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators
|
||||||
The engine_id is "padlock"
|
The engine_id is "padlock"
|
||||||
@ -378,8 +379,17 @@ define Package/libopenssl/install
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libopenssl-conf/install
|
define Package/libopenssl-conf/install
|
||||||
$(INSTALL_DIR) $(1)/etc/ssl
|
$(INSTALL_DIR) $(1)/etc/ssl/engines.cnf.d $(1)/etc/config $(1)/etc/init.d
|
||||||
$(CP) $(PKG_INSTALL_DIR)/etc/ssl/openssl.cnf $(1)/etc/ssl/
|
$(CP) $(PKG_INSTALL_DIR)/etc/ssl/openssl.cnf $(1)/etc/ssl/
|
||||||
|
$(INSTALL_BIN) ./files/openssl.init $(1)/etc/init.d/openssl
|
||||||
|
$(SED) 's!%ENGINES_DIR%!/usr/lib/$(ENGINES_DIR)!' $(1)/etc/init.d/openssl
|
||||||
|
touch $(1)/etc/config/openssl
|
||||||
|
$(if $(CONFIG_OPENSSL_ENGINE_BUILTIN_DEVCRYPTO),
|
||||||
|
$(CP) ./files/devcrypto.cnf $(1)/etc/ssl/engines.cnf.d/
|
||||||
|
echo -e "config engine 'devcrypto'\n\toption enabled '1'" >> $(1)/etc/config/openssl)
|
||||||
|
$(if $(CONFIG_OPENSSL_ENGINE_BUILTIN_PADLOCK),
|
||||||
|
$(CP) ./files/padlock.cnf $(1)/etc/ssl/engines.cnf.d/
|
||||||
|
echo -e "\nconfig engine 'padlock'\n\toption enabled '1'" >> $(1)/etc/config/openssl)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/openssl-util/install
|
define Package/openssl-util/install
|
||||||
@ -387,21 +397,6 @@ define Package/openssl-util/install
|
|||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/openssl $(1)/usr/bin/
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/openssl $(1)/usr/bin/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libopenssl-afalg/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/$(ENGINES_DIR)
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/afalg.so $(1)/usr/lib/$(ENGINES_DIR)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libopenssl-devcrypto/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/$(ENGINES_DIR)
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/devcrypto.so $(1)/usr/lib/$(ENGINES_DIR)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libopenssl-padlock/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/$(ENGINES_DIR)
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/*padlock.so $(1)/usr/lib/$(ENGINES_DIR)
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,libopenssl))
|
$(eval $(call BuildPackage,libopenssl))
|
||||||
$(eval $(call BuildPackage,libopenssl-conf))
|
$(eval $(call BuildPackage,libopenssl-conf))
|
||||||
$(eval $(call BuildPackage,libopenssl-afalg))
|
$(eval $(call BuildPackage,libopenssl-afalg))
|
||||||
|
|||||||
46
package/libs/openssl/engine.mk
Normal file
46
package/libs/openssl/engine.mk
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
ENGINES_DIR=engines-1.1
|
||||||
|
|
||||||
|
define Package/openssl/engine/Default
|
||||||
|
SECTION:=libs
|
||||||
|
CATEGORY:=Libraries
|
||||||
|
SUBMENU:=SSL
|
||||||
|
DEPENDS:=libopenssl @OPENSSL_ENGINE +libopenssl-conf
|
||||||
|
endef
|
||||||
|
|
||||||
|
# 1 = engine name
|
||||||
|
# 2 - package name, defaults to libopenssl-$(1)
|
||||||
|
define Package/openssl/add-engine
|
||||||
|
OSSL_ENG_PKG:=$(if $(2),$(2),libopenssl-$(1))
|
||||||
|
Package/$$(OSSL_ENG_PKG)/conffiles:=/etc/ssl/engines.cnf.d/$(1).cnf
|
||||||
|
|
||||||
|
define Package/$$(OSSL_ENG_PKG)/install
|
||||||
|
$$(INSTALL_DIR) $$(1)/usr/lib/$(ENGINES_DIR)
|
||||||
|
$$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/$(1).so \
|
||||||
|
$$(1)/usr/lib/$(ENGINES_DIR)
|
||||||
|
$$(INSTALL_DIR) $$(1)/etc/ssl/engines.cnf.d
|
||||||
|
$$(INSTALL_DATA) ./files/$(1).cnf $$(1)/etc/ssl/engines.cnf.d/
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/$$(OSSL_ENG_PKG)/postinst :=
|
||||||
|
#!/bin/sh
|
||||||
|
OPENSSL_UCI="$$$${IPKG_INSTROOT}/etc/config/openssl"
|
||||||
|
|
||||||
|
[ -z "$$$${IPKG_INSTROOT}" ] && uci -q get openssl.$(1) >/dev/null && exit 0
|
||||||
|
|
||||||
|
cat << EOF >> "$$$${OPENSSL_UCI}"
|
||||||
|
|
||||||
|
config engine '$(1)'
|
||||||
|
option enabled '1'
|
||||||
|
EOF
|
||||||
|
|
||||||
|
[ -n "$$$${IPKG_INSTROOT}" ] || /etc/init.d/openssl reload
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/$$(OSSL_ENG_PKG)/postrm :=
|
||||||
|
#!/bin/sh
|
||||||
|
[ -n "$$$${IPKG_INSTROOT}" ] && exit 0
|
||||||
|
uci delete openssl.$(1)
|
||||||
|
uci commit openssl
|
||||||
|
/etc/init.d/openssl reload
|
||||||
|
endef
|
||||||
|
endef
|
||||||
3
package/libs/openssl/files/afalg.cnf
Normal file
3
package/libs/openssl/files/afalg.cnf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[afalg]
|
||||||
|
default_algorithms = ALL
|
||||||
|
|
||||||
31
package/libs/openssl/files/devcrypto.cnf
Normal file
31
package/libs/openssl/files/devcrypto.cnf
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[devcrypto]
|
||||||
|
# Leave this alone and configure algorithms with CIPERS/DIGESTS below
|
||||||
|
default_algorithms = ALL
|
||||||
|
|
||||||
|
# Configuration commands:
|
||||||
|
# Run 'openssl engine -t -c -vv -pre DUMP_INFO devcrypto' to see a
|
||||||
|
# list of supported algorithms, along with their driver, whether they
|
||||||
|
# are hw accelerated or not, and the engine's configuration commands.
|
||||||
|
|
||||||
|
# USE_SOFTDRIVERS: specifies whether to use software (not accelerated)
|
||||||
|
# drivers (0=use only accelerated drivers, 1=allow all drivers, 2=use
|
||||||
|
# if acceleration can't be determined) [default=2]
|
||||||
|
#USE_SOFTDRIVERS = 2
|
||||||
|
|
||||||
|
# CIPHERS: either ALL, NONE, or a comma-separated list of ciphers to
|
||||||
|
# enable [default=ALL]
|
||||||
|
# It is recommended to disable the ECB ciphers; in most cases, it will
|
||||||
|
# only be used for PRNG, in small blocks, where performance is poor,
|
||||||
|
# and there may be problems with apps forking with open crypto
|
||||||
|
# contexts, leading to failures. The CBC ciphers work well:
|
||||||
|
#CIPHERS=DES-CBC, DES-EDE3-CBC, AES-128-CBC, AES-192-CBC, AES-256-CBC
|
||||||
|
|
||||||
|
# DIGESTS: either ALL, NONE, or a comma-separated list of digests to
|
||||||
|
# enable [default=NONE]
|
||||||
|
# It is strongly recommended not to enable digests; their performance
|
||||||
|
# is poor, and there are many cases in which they will not work,
|
||||||
|
# especially when calling fork with open crypto contexts. Openssh,
|
||||||
|
# for example, does this, and you may not be able to login.
|
||||||
|
#DIGESTS = NONE
|
||||||
|
|
||||||
|
|
||||||
31
package/libs/openssl/files/openssl.init
Executable file
31
package/libs/openssl/files/openssl.init
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=13
|
||||||
|
ENGINES_CNF_D="/etc/ssl/engines.cnf.d"
|
||||||
|
ENGINES_CNF="/var/etc/ssl/engines.cnf"
|
||||||
|
ENGINES_DIR="%ENGINES_DIR%"
|
||||||
|
|
||||||
|
config_engine() {
|
||||||
|
local enabled force
|
||||||
|
config_get_bool enabled "$1" enabled 1
|
||||||
|
config_get_bool force "$1" force 0
|
||||||
|
[ "$enabled" = 0 ] && return
|
||||||
|
if [ "$force" = 0 ] && \
|
||||||
|
[ ! -f "${ENGINES_CNF_D}/$1.cnf" ] && \
|
||||||
|
[ ! -f "${ENGINES_DIR}/$1.so" ]; then
|
||||||
|
echo Skipping engine "$1": not installed
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
echo Enabling engine "$1"
|
||||||
|
echo "$1=$1" >> "${ENGINES_CNF}"
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
mkdir -p "$(dirname "${ENGINES_CNF}")" || exit 1
|
||||||
|
echo Generating engines.cnf
|
||||||
|
echo "# This file is automatically generated from /etc/config/openssl." \
|
||||||
|
> "${ENGINES_CNF}" || \
|
||||||
|
{ echo Error writing ${ENGINES_CNF} >&2; exit 1; }
|
||||||
|
config_load openssl
|
||||||
|
config_foreach config_engine engine
|
||||||
|
}
|
||||||
3
package/libs/openssl/files/padlock.cnf
Normal file
3
package/libs/openssl/files/padlock.cnf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[padlock]
|
||||||
|
default_algorithms = ALL
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
From 559fbff13af9ce2fbc0b9bc5727a7323e1db6217 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
Date: Thu, 27 Sep 2018 08:29:21 -0300
|
Date: Thu, 27 Sep 2018 08:29:21 -0300
|
||||||
Subject: Do not use host kernel version to disable AFALG
|
Subject: Do not use host kernel version to disable AFALG
|
||||||
@ -9,7 +9,6 @@ version to disable building the AFALG engine on openwrt targets.
|
|||||||
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
|
|
||||||
diff --git a/Configure b/Configure
|
diff --git a/Configure b/Configure
|
||||||
index 5a699836f3..74d057c219 100755
|
|
||||||
--- a/Configure
|
--- a/Configure
|
||||||
+++ b/Configure
|
+++ b/Configure
|
||||||
@@ -1548,7 +1548,9 @@ unless ($disabled{"crypto-mdebug-backtrace"})
|
@@ -1548,7 +1548,9 @@ unless ($disabled{"crypto-mdebug-backtrace"})
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
From 3d43acc6068f00dbfc0c9a06355e2c8f7d302d0f Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
Date: Thu, 27 Sep 2018 08:30:24 -0300
|
Date: Thu, 27 Sep 2018 08:30:24 -0300
|
||||||
Subject: Add openwrt targets
|
Subject: Add openwrt targets
|
||||||
@ -9,7 +9,6 @@ Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
|||||||
|
|
||||||
diff --git a/Configurations/25-openwrt.conf b/Configurations/25-openwrt.conf
|
diff --git a/Configurations/25-openwrt.conf b/Configurations/25-openwrt.conf
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000..86a86d31e4
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/Configurations/25-openwrt.conf
|
+++ b/Configurations/25-openwrt.conf
|
||||||
@@ -0,0 +1,52 @@
|
@@ -0,0 +1,52 @@
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
From 4ad8f2fe6bf3b91df7904fcbe960e5fdfca36336 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
Date: Thu, 27 Sep 2018 08:31:38 -0300
|
Date: Thu, 27 Sep 2018 08:31:38 -0300
|
||||||
Subject: Avoid exposing build directories
|
Subject: Avoid exposing build directories
|
||||||
@ -9,7 +9,6 @@ OpenSSL_version(OPENSSL_CFLAGS), or running openssl version -a
|
|||||||
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
|
|
||||||
diff --git a/crypto/build.info b/crypto/build.info
|
diff --git a/crypto/build.info b/crypto/build.info
|
||||||
index 2c619c62e8..893128345a 100644
|
|
||||||
--- a/crypto/build.info
|
--- a/crypto/build.info
|
||||||
+++ b/crypto/build.info
|
+++ b/crypto/build.info
|
||||||
@@ -10,7 +10,7 @@ EXTRA= ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \
|
@@ -10,7 +10,7 @@ EXTRA= ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
From ba2fe646f2d9104a18b066e43582154049e9ffcb Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
Date: Thu, 27 Sep 2018 08:34:38 -0300
|
Date: Thu, 27 Sep 2018 08:34:38 -0300
|
||||||
Subject: Do not build tests and fuzz directories
|
Subject: Do not build tests and fuzz directories
|
||||||
@ -8,7 +8,6 @@ This shortens build time.
|
|||||||
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
|
|
||||||
diff --git a/Configure b/Configure
|
diff --git a/Configure b/Configure
|
||||||
index 74d057c219..5813e9f8fe 100755
|
|
||||||
--- a/Configure
|
--- a/Configure
|
||||||
+++ b/Configure
|
+++ b/Configure
|
||||||
@@ -318,7 +318,7 @@ my $auto_threads=1; # enable threads automatically? true by default
|
@@ -318,7 +318,7 @@ my $auto_threads=1; # enable threads automatically? true by default
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
From 4f7ab2040bb71f03a8f8388911144559aa2a5b60 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
Date: Thu, 27 Sep 2018 08:44:39 -0300
|
Date: Thu, 27 Sep 2018 08:44:39 -0300
|
||||||
Subject: Add OPENSSL_PREFER_CHACHA_OVER_GCM option
|
Subject: Add OPENSSL_PREFER_CHACHA_OVER_GCM option
|
||||||
@ -15,7 +15,6 @@ when the client has it on top of its ciphersuite preference.
|
|||||||
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
|
|
||||||
diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
|
diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
|
||||||
index 6724ccf2d2..96d959427e 100644
|
|
||||||
--- a/include/openssl/ssl.h
|
--- a/include/openssl/ssl.h
|
||||||
+++ b/include/openssl/ssl.h
|
+++ b/include/openssl/ssl.h
|
||||||
@@ -173,9 +173,15 @@ extern "C" {
|
@@ -173,9 +173,15 @@ extern "C" {
|
||||||
@ -38,7 +37,6 @@ index 6724ccf2d2..96d959427e 100644
|
|||||||
# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \
|
# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \
|
||||||
"TLS_AES_128_GCM_SHA256"
|
"TLS_AES_128_GCM_SHA256"
|
||||||
diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c
|
diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c
|
||||||
index 27a1b2ec68..7039811323 100644
|
|
||||||
--- a/ssl/ssl_ciph.c
|
--- a/ssl/ssl_ciph.c
|
||||||
+++ b/ssl/ssl_ciph.c
|
+++ b/ssl/ssl_ciph.c
|
||||||
@@ -1467,11 +1467,29 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method,
|
@@ -1467,11 +1467,29 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method,
|
||||||
|
|||||||
@ -1,6 +1,17 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eneas U de Queiroz <cotequeiroz@gmail.com>
|
||||||
|
Date: Sat, 27 Mar 2021 17:43:25 -0300
|
||||||
|
Subject: openssl.cnf: add engine configuration
|
||||||
|
|
||||||
|
This adds configuration options for engines, loading all cnf files under
|
||||||
|
/etc/ssl/engines.cnf.d/.
|
||||||
|
|
||||||
|
Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
|
||||||
|
|
||||||
|
diff --git a/apps/openssl.cnf b/apps/openssl.cnf
|
||||||
--- a/apps/openssl.cnf
|
--- a/apps/openssl.cnf
|
||||||
+++ b/apps/openssl.cnf
|
+++ b/apps/openssl.cnf
|
||||||
@@ -22,6 +22,99 @@ oid_section = new_oids
|
@@ -22,6 +22,16 @@ oid_section = new_oids
|
||||||
# (Alternatively, use a configuration file that has only
|
# (Alternatively, use a configuration file that has only
|
||||||
# X.509v3 extensions in its main [= default] section.)
|
# X.509v3 extensions in its main [= default] section.)
|
||||||
|
|
||||||
@ -10,92 +21,9 @@
|
|||||||
+engines=engines
|
+engines=engines
|
||||||
+
|
+
|
||||||
+[engines]
|
+[engines]
|
||||||
+# To enable an engine, install the package, and uncomment it here:
|
+.include /var/etc/ssl/engines.cnf
|
||||||
+#devcrypto=devcrypto
|
|
||||||
+#afalg=afalg
|
|
||||||
+#padlock=padlock
|
|
||||||
+##gost=gost
|
|
||||||
+
|
+
|
||||||
+[afalg]
|
+.include /etc/ssl/engines.cnf.d
|
||||||
+# Leave this alone and configure algorithms with CIPERS/DIGESTS below
|
|
||||||
+default_algorithms = ALL
|
|
||||||
+
|
|
||||||
+# The following commands are only available if using the alternative
|
|
||||||
+# (sync) AFALG engine
|
|
||||||
+# Configuration commands:
|
|
||||||
+# Run 'openssl engine -t -c -vv -pre DUMP_INFO devcrypto' to see a
|
|
||||||
+# list of supported algorithms, along with their driver, whether they
|
|
||||||
+# are hw accelerated or not, and the engine's configuration commands.
|
|
||||||
+
|
|
||||||
+# USE_SOFTDRIVERS: specifies whether to use software (not accelerated)
|
|
||||||
+# drivers (0=use only accelerated drivers, 1=allow all drivers, 2=use
|
|
||||||
+# if acceleration can't be determined) [default=2]
|
|
||||||
+#USE_SOFTDRIVERS = 2
|
|
||||||
+
|
|
||||||
+# CIPHERS: either ALL, NONE, NO_ECB (all except ECB-mode) or a
|
|
||||||
+# comma-separated list of ciphers to enable [default=NO_ECB]
|
|
||||||
+# Starting in 1.2.0, if you use a cipher list, each cipher may be
|
|
||||||
+# followed by a colon (:) and the minimum request length to use
|
|
||||||
+# AF_ALG drivers for that cipher; smaller requests are processed by
|
|
||||||
+# softare; a negative value will use the default for that cipher
|
|
||||||
+#CIPHERS=AES-128-CBC:1024, AES-256-CBC:768, DES-EDE3-CBC:0
|
|
||||||
+
|
|
||||||
+# DIGESTS: either ALL, NONE, or a comma-separated list of digests to
|
|
||||||
+# enable [default=NONE]
|
|
||||||
+# It is strongly recommended not to enable digests; their performance
|
|
||||||
+# is poor, and there are many cases in which they will not work,
|
|
||||||
+# especially when calling fork with open crypto contexts. Openssh,
|
|
||||||
+# for example, does this, and you may not be able to login.
|
|
||||||
+#DIGESTS = NONE
|
|
||||||
+
|
|
||||||
+[devcrypto]
|
|
||||||
+# Leave this alone and configure algorithms with CIPERS/DIGESTS below
|
|
||||||
+default_algorithms = ALL
|
|
||||||
+
|
|
||||||
+# Configuration commands:
|
|
||||||
+# Run 'openssl engine -t -c -vv -pre DUMP_INFO devcrypto' to see a
|
|
||||||
+# list of supported algorithms, along with their driver, whether they
|
|
||||||
+# are hw accelerated or not, and the engine's configuration commands.
|
|
||||||
+
|
|
||||||
+# USE_SOFTDRIVERS: specifies whether to use software (not accelerated)
|
|
||||||
+# drivers (0=use only accelerated drivers, 1=allow all drivers, 2=use
|
|
||||||
+# if acceleration can't be determined) [default=2]
|
|
||||||
+#USE_SOFTDRIVERS = 2
|
|
||||||
+
|
|
||||||
+# CIPHERS: either ALL, NONE, or a comma-separated list of ciphers to
|
|
||||||
+# enable [default=ALL]
|
|
||||||
+# It is recommended to disable the ECB ciphers; in most cases, it will
|
|
||||||
+# only be used for PRNG, in small blocks, where performance is poor,
|
|
||||||
+# and there may be problems with apps forking with open crypto
|
|
||||||
+# contexts, leading to failures. The CBC ciphers work well:
|
|
||||||
+#CIPHERS=DES-CBC, DES-EDE3-CBC, AES-128-CBC, AES-192-CBC, AES-256-CBC
|
|
||||||
+
|
|
||||||
+# DIGESTS: either ALL, NONE, or a comma-separated list of digests to
|
|
||||||
+# enable [default=NONE]
|
|
||||||
+# It is strongly recommended not to enable digests; their performance
|
|
||||||
+# is poor, and there are many cases in which they will not work,
|
|
||||||
+# especially when calling fork with open crypto contexts. Openssh,
|
|
||||||
+# for example, does this, and you may not be able to login.
|
|
||||||
+#DIGESTS = NONE
|
|
||||||
+
|
|
||||||
+[padlock]
|
|
||||||
+default_algorithms = ALL
|
|
||||||
+
|
|
||||||
+[gost]
|
|
||||||
+default_algorithms = ALL
|
|
||||||
+# CRYPT_PARAMS: OID of default GOST 28147-89 parameters It allows the
|
|
||||||
+# user to choose between different parameter sets of symmetric cipher
|
|
||||||
+# algorithm. RFC 4357 specifies several parameters for the
|
|
||||||
+# GOST 28147-89 algorithm, but OpenSSL doesn't provide user interface
|
|
||||||
+# to choose one when encrypting. So use engine configuration parameter
|
|
||||||
+# instead.
|
|
||||||
+# Value of this parameter can be either short name, defined in OpenSSL
|
|
||||||
+# obj_dat.h header file or numeric representation of OID, defined in
|
|
||||||
+# RFC 4357. Defaults to id-tc26-gost-28147-param-Z
|
|
||||||
+#CRYPT_PARAMS = id-tc26-gost-28147-param-Z
|
|
||||||
+
|
|
||||||
+# PBE_PARAMS: Shortname of default digest alg for PBE
|
|
||||||
+#PBE_PARAMS =
|
|
||||||
+
|
+
|
||||||
[ new_oids ]
|
[ new_oids ]
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
From f14345422747a495a52f9237a43b8be189f21912 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
Date: Mon, 5 Nov 2018 15:54:17 -0200
|
Date: Mon, 5 Nov 2018 15:54:17 -0200
|
||||||
Subject: eng_devcrypto: save ioctl if EVP_MD_..FLAG_ONESHOT
|
Subject: eng_devcrypto: save ioctl if EVP_MD_..FLAG_ONESHOT
|
||||||
@ -15,7 +15,6 @@ Reviewed-by: Richard Levitte <levitte@openssl.org>
|
|||||||
(Merged from https://github.com/openssl/openssl/pull/7585)
|
(Merged from https://github.com/openssl/openssl/pull/7585)
|
||||||
|
|
||||||
diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c
|
diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c
|
||||||
index a727c6f646..a2c9a966f7 100644
|
|
||||||
--- a/crypto/engine/eng_devcrypto.c
|
--- a/crypto/engine/eng_devcrypto.c
|
||||||
+++ b/crypto/engine/eng_devcrypto.c
|
+++ b/crypto/engine/eng_devcrypto.c
|
||||||
@@ -461,6 +461,7 @@ struct digest_ctx {
|
@@ -461,6 +461,7 @@ struct digest_ctx {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
From 78e7b1cc7119622645bc5a8542c55b6c95dc7868 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
Date: Tue, 6 Nov 2018 22:54:07 -0200
|
Date: Tue, 6 Nov 2018 22:54:07 -0200
|
||||||
Subject: eng_devcrypto: add command to dump driver info
|
Subject: eng_devcrypto: add command to dump driver info
|
||||||
@ -12,7 +12,6 @@ Reviewed-by: Richard Levitte <levitte@openssl.org>
|
|||||||
(Merged from https://github.com/openssl/openssl/pull/7585)
|
(Merged from https://github.com/openssl/openssl/pull/7585)
|
||||||
|
|
||||||
diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c
|
diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c
|
||||||
index 5ec38ca8f3..64dc6b891d 100644
|
|
||||||
--- a/crypto/engine/eng_devcrypto.c
|
--- a/crypto/engine/eng_devcrypto.c
|
||||||
+++ b/crypto/engine/eng_devcrypto.c
|
+++ b/crypto/engine/eng_devcrypto.c
|
||||||
@@ -50,16 +50,20 @@ static int use_softdrivers = DEVCRYPTO_DEFAULT_USE_SOFDTRIVERS;
|
@@ -50,16 +50,20 @@ static int use_softdrivers = DEVCRYPTO_DEFAULT_USE_SOFDTRIVERS;
|
||||||
|
|||||||
@ -9,7 +9,6 @@ engines/e_devcrypto.c.
|
|||||||
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
|
|
||||||
diff --git a/crypto/engine/build.info b/crypto/engine/build.info
|
diff --git a/crypto/engine/build.info b/crypto/engine/build.info
|
||||||
index e00802a3fd..47fe948966 100644
|
|
||||||
--- a/crypto/engine/build.info
|
--- a/crypto/engine/build.info
|
||||||
+++ b/crypto/engine/build.info
|
+++ b/crypto/engine/build.info
|
||||||
@@ -6,6 +6,3 @@ SOURCE[../../libcrypto]=\
|
@@ -6,6 +6,3 @@ SOURCE[../../libcrypto]=\
|
||||||
@ -20,7 +19,6 @@ index e00802a3fd..47fe948966 100644
|
|||||||
- SOURCE[../../libcrypto]=eng_devcrypto.c
|
- SOURCE[../../libcrypto]=eng_devcrypto.c
|
||||||
-ENDIF
|
-ENDIF
|
||||||
diff --git a/crypto/init.c b/crypto/init.c
|
diff --git a/crypto/init.c b/crypto/init.c
|
||||||
index 1b0d523bea..ee3e2eb075 100644
|
|
||||||
--- a/crypto/init.c
|
--- a/crypto/init.c
|
||||||
+++ b/crypto/init.c
|
+++ b/crypto/init.c
|
||||||
@@ -329,18 +329,6 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_engine_openssl)
|
@@ -329,18 +329,6 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_engine_openssl)
|
||||||
@ -86,7 +84,6 @@ index 1b0d523bea..ee3e2eb075 100644
|
|||||||
if ((opts & OPENSSL_INIT_ENGINE_PADLOCK)
|
if ((opts & OPENSSL_INIT_ENGINE_PADLOCK)
|
||||||
&& !RUN_ONCE(&engine_padlock, ossl_init_engine_padlock))
|
&& !RUN_ONCE(&engine_padlock, ossl_init_engine_padlock))
|
||||||
diff --git a/engines/build.info b/engines/build.info
|
diff --git a/engines/build.info b/engines/build.info
|
||||||
index 1db771971c..33a25d7004 100644
|
|
||||||
--- a/engines/build.info
|
--- a/engines/build.info
|
||||||
+++ b/engines/build.info
|
+++ b/engines/build.info
|
||||||
@@ -11,6 +11,9 @@ IF[{- !$disabled{"engine"} -}]
|
@@ -11,6 +11,9 @@ IF[{- !$disabled{"engine"} -}]
|
||||||
@ -116,7 +113,6 @@ diff --git a/crypto/engine/eng_devcrypto.c b/engines/e_devcrypto.c
|
|||||||
similarity index 95%
|
similarity index 95%
|
||||||
rename from crypto/engine/eng_devcrypto.c
|
rename from crypto/engine/eng_devcrypto.c
|
||||||
rename to engines/e_devcrypto.c
|
rename to engines/e_devcrypto.c
|
||||||
index 2c1b52d572..eff1ed3a7d 100644
|
|
||||||
--- a/crypto/engine/eng_devcrypto.c
|
--- a/crypto/engine/eng_devcrypto.c
|
||||||
+++ b/engines/e_devcrypto.c
|
+++ b/engines/e_devcrypto.c
|
||||||
@@ -7,7 +7,7 @@
|
@@ -7,7 +7,7 @@
|
||||||
|
|||||||
@ -20,7 +20,6 @@ turn them on if it is safe and fast enough.
|
|||||||
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
|
|
||||||
diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c
|
diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c
|
||||||
index 3fcd81de7a..d25230d366 100644
|
|
||||||
--- a/engines/e_devcrypto.c
|
--- a/engines/e_devcrypto.c
|
||||||
+++ b/engines/e_devcrypto.c
|
+++ b/engines/e_devcrypto.c
|
||||||
@@ -852,7 +852,7 @@ static void prepare_digest_methods(void)
|
@@ -852,7 +852,7 @@ static void prepare_digest_methods(void)
|
||||||
|
|||||||
@ -9,7 +9,6 @@ session. It may have been closed by another process after a fork.
|
|||||||
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
|
||||||
|
|
||||||
diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c
|
diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c
|
||||||
index d25230d366..f4570f1666 100644
|
|
||||||
--- a/engines/e_devcrypto.c
|
--- a/engines/e_devcrypto.c
|
||||||
+++ b/engines/e_devcrypto.c
|
+++ b/engines/e_devcrypto.c
|
||||||
@@ -195,9 +195,8 @@ static int cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
@@ -195,9 +195,8 @@ static int cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||||
|
|||||||
@ -0,0 +1,26 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Juliusz Sosinowicz <juliusz@wolfssl.com>
|
||||||
|
Date: Sat, 12 Feb 2022 00:34:24 +0100
|
||||||
|
Subject: [PATCH] Reported in ZD13631
|
||||||
|
|
||||||
|
`ssl->peerVerifyRet` wasn't being cleared when retrying with an alternative cert chain
|
||||||
|
|
||||||
|
References: https://github.com/wolfSSL/wolfssl/issues/4879
|
||||||
|
---
|
||||||
|
src/internal.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/internal.c b/src/internal.c
|
||||||
|
index 0dded42a76c4..f5814d30607c 100644
|
||||||
|
--- a/src/internal.c
|
||||||
|
+++ b/src/internal.c
|
||||||
|
@@ -12372,6 +12372,9 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx,
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0; /* clear errors and continue */
|
||||||
|
+ #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
|
||||||
|
+ ssl->peerVerifyRet = 0;
|
||||||
|
+ #endif
|
||||||
|
args->verifyErr = 0;
|
||||||
|
}
|
||||||
|
|
||||||
@ -9,9 +9,9 @@ PKG_RELEASE:=$(AUTORELEASE)
|
|||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firewall4.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firewall4.git
|
||||||
PKG_SOURCE_DATE:=2022-02-07.1
|
PKG_SOURCE_DATE:=2022-02-12
|
||||||
PKG_SOURCE_VERSION:=a0518b6d0273ad3267e65953e52989a1589fefab
|
PKG_SOURCE_VERSION:=53caa1a762125a71389a486aa913e4fbdf3650cf
|
||||||
PKG_MIRROR_HASH:=feebf9cbcdf6e5f702edea711c8b36dbaa7609c32e4fe5a2abbf1aa288dc7c6a
|
PKG_MIRROR_HASH:=9052a779b12c0c9b21914bf38daf11a2d98879c2f9c9b39f091d7ebb7f0f877b
|
||||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||||
PKG_LICENSE:=ISC
|
PKG_LICENSE:=ISC
|
||||||
|
|
||||||
|
|||||||
@ -5,9 +5,9 @@ PKG_RELEASE:=1
|
|||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
|
||||||
PKG_SOURCE_DATE:=2022-02-04
|
PKG_SOURCE_DATE:=2022-02-20
|
||||||
PKG_SOURCE_VERSION:=fd4c9e17c8f22b866c1bf386c580074e3e678910
|
PKG_SOURCE_VERSION:=136006b88826feff4f0a36ffab511d1366483cf2
|
||||||
PKG_MIRROR_HASH:=ffd3eed50fb8eb354258922053cd098ead6f739c9fda67f8058a6ec9bd0167c4
|
PKG_MIRROR_HASH:=6358738d20e6df27b82c3bdb575fba0fdad8bef45a3c7479b93a5587c465dba4
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|||||||
@ -11,9 +11,9 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
PKG_NAME:=qosify
|
PKG_NAME:=qosify
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/qosify.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/qosify.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_DATE:=2021-11-22
|
PKG_SOURCE_DATE:=2022-02-20
|
||||||
PKG_SOURCE_VERSION:=06872673c10fdf0eec7da1b2fe335e750d768f1e
|
PKG_SOURCE_VERSION:=65b42032063f75d8efc37cdb7215a04818be2fa7
|
||||||
PKG_MIRROR_HASH:=121653ce5f8d6c62fbf77fea158f738c3fd9d9ecc7b1ad61cfee1dfe10486b94
|
PKG_MIRROR_HASH:=0458a9fd7e90fc64239712435f24e7d74b2a3aefcfb0c5f64a9fd70bfd0fe7ae
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
|
|||||||
@ -529,7 +529,7 @@ hostapd_set_bss_options() {
|
|||||||
|
|
||||||
wireless_vif_parse_encryption
|
wireless_vif_parse_encryption
|
||||||
|
|
||||||
local bss_conf bss_md5sum
|
local bss_conf bss_md5sum ft_key
|
||||||
local wep_rekey wpa_group_rekey wpa_pair_rekey wpa_master_rekey wpa_key_mgmt
|
local wep_rekey wpa_group_rekey wpa_pair_rekey wpa_master_rekey wpa_key_mgmt
|
||||||
|
|
||||||
json_get_vars \
|
json_get_vars \
|
||||||
@ -623,10 +623,12 @@ hostapd_set_bss_options() {
|
|||||||
sae|owe|eap192|eap-eap192)
|
sae|owe|eap192|eap-eap192)
|
||||||
set_default ieee80211w 2
|
set_default ieee80211w 2
|
||||||
set_default sae_require_mfp 1
|
set_default sae_require_mfp 1
|
||||||
|
set_default sae_pwe 2
|
||||||
;;
|
;;
|
||||||
psk-sae)
|
psk-sae)
|
||||||
set_default ieee80211w 1
|
set_default ieee80211w 1
|
||||||
set_default sae_require_mfp 1
|
set_default sae_require_mfp 1
|
||||||
|
set_default sae_pwe 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
[ -n "$sae_require_mfp" ] && append bss_conf "sae_require_mfp=$sae_require_mfp" "$N"
|
[ -n "$sae_require_mfp" ] && append bss_conf "sae_require_mfp=$sae_require_mfp" "$N"
|
||||||
@ -879,10 +881,10 @@ hostapd_set_bss_options() {
|
|||||||
set_default pmk_r1_push 0
|
set_default pmk_r1_push 0
|
||||||
|
|
||||||
[ -n "$r0kh" -a -n "$r1kh" ] || {
|
[ -n "$r0kh" -a -n "$r1kh" ] || {
|
||||||
key=`echo -n "$mobility_domain/$auth_secret" | md5sum | awk '{print $1}'`
|
ft_key=`echo -n "$mobility_domain/${auth_secret:-${key}}" | md5sum | awk '{print $1}'`
|
||||||
|
|
||||||
set_default r0kh "ff:ff:ff:ff:ff:ff,*,$key"
|
set_default r0kh "ff:ff:ff:ff:ff:ff,*,$ft_key"
|
||||||
set_default r1kh "00:00:00:00:00:00,00:00:00:00:00:00,$key"
|
set_default r1kh "00:00:00:00:00:00,00:00:00:00:00:00,$ft_key"
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -n "$r1_key_holder" ] && append bss_conf "r1_key_holder=$r1_key_holder" "$N"
|
[ -n "$r1_key_holder" ] && append bss_conf "r1_key_holder=$r1_key_holder" "$N"
|
||||||
|
|||||||
@ -322,6 +322,16 @@ hostapd_bss_get_clients(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
for (i = 0; i < ARRAY_SIZE(sta->rrm_enabled_capa); i++)
|
for (i = 0; i < ARRAY_SIZE(sta->rrm_enabled_capa); i++)
|
||||||
blobmsg_add_u32(&b, "", sta->rrm_enabled_capa[i]);
|
blobmsg_add_u32(&b, "", sta->rrm_enabled_capa[i]);
|
||||||
blobmsg_close_array(&b, r);
|
blobmsg_close_array(&b, r);
|
||||||
|
|
||||||
|
r = blobmsg_open_array(&b, "extended_capabilities");
|
||||||
|
/* Check if client advertises extended capabilities */
|
||||||
|
if (sta->ext_capability && sta->ext_capability[0] > 0) {
|
||||||
|
for (i = 0; i < sta->ext_capability[0]; i++) {
|
||||||
|
blobmsg_add_u32(&b, "", sta->ext_capability[1 + i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
blobmsg_close_array(&b, r);
|
||||||
|
|
||||||
blobmsg_add_u32(&b, "aid", sta->aid);
|
blobmsg_add_u32(&b, "aid", sta->aid);
|
||||||
#ifdef CONFIG_TAXONOMY
|
#ifdef CONFIG_TAXONOMY
|
||||||
r = blobmsg_alloc_string_buffer(&b, "signature", 1024);
|
r = blobmsg_alloc_string_buffer(&b, "signature", 1024);
|
||||||
|
|||||||
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=tcpdump
|
PKG_NAME:=tcpdump
|
||||||
PKG_VERSION:=4.9.3
|
PKG_VERSION:=4.9.3
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=4
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=http://www.tcpdump.org/release/
|
PKG_SOURCE_URL:=http://www.tcpdump.org/release/
|
||||||
|
|||||||
101
package/network/utils/tcpdump/patches/102-CVE-2018-16301.patch
Normal file
101
package/network/utils/tcpdump/patches/102-CVE-2018-16301.patch
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
From 8ab211a7ec728bb0ad8c766c8eeb12deb0a13b86 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Guy Harris <gharris@sonic.net>
|
||||||
|
Date: Wed, 30 Sep 2020 11:37:30 -0700
|
||||||
|
Subject: [PATCH] Handle very large -f files by rejecting them.
|
||||||
|
|
||||||
|
_read(), on Windows, has a 32-bit size argument and a 32-bit return
|
||||||
|
value, so reject -f files that have more than 2^31-1 characters.
|
||||||
|
|
||||||
|
Add some #defines so that, on Windows, we use _fstati64 to get the size
|
||||||
|
of that file, to handle large files.
|
||||||
|
|
||||||
|
Don't assume that our definition for ssize_t is the same size as size_t;
|
||||||
|
by the time we want to print the return value of the read, we know it'll
|
||||||
|
fit into an int, so just cast it to int and print it with %d.
|
||||||
|
|
||||||
|
(cherry picked from commit faf8fb70af3a013e5d662b8283dec742fd6b1a77)
|
||||||
|
---
|
||||||
|
netdissect-stdinc.h | 16 +++++++++++++++-
|
||||||
|
tcpdump.c | 15 ++++++++++++---
|
||||||
|
2 files changed, 27 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
--- a/netdissect-stdinc.h
|
||||||
|
+++ b/netdissect-stdinc.h
|
||||||
|
@@ -149,10 +149,17 @@
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define stat _stat
|
||||||
|
#define open _open
|
||||||
|
-#define fstat _fstat
|
||||||
|
#define read _read
|
||||||
|
#define close _close
|
||||||
|
#define O_RDONLY _O_RDONLY
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * We define our_fstat64 as _fstati64, and define our_statb as
|
||||||
|
+ * struct _stati64, so we get 64-bit file sizes.
|
||||||
|
+ */
|
||||||
|
+#define our_fstat _fstati64
|
||||||
|
+#define our_statb struct _stati64
|
||||||
|
+
|
||||||
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -211,6 +218,13 @@ typedef char* caddr_t;
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * We should have large file support enabled, if it's available,
|
||||||
|
+ * so just use fstat as our_fstat and struct stat as our_statb.
|
||||||
|
+ */
|
||||||
|
+#define our_fstat fstat
|
||||||
|
+#define our_statb struct stat
|
||||||
|
+
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#ifndef HAVE___ATTRIBUTE__
|
||||||
|
--- a/tcpdump.c
|
||||||
|
+++ b/tcpdump.c
|
||||||
|
@@ -108,6 +108,7 @@ The Regents of the University of Califor
|
||||||
|
#endif /* HAVE_CAP_NG_H */
|
||||||
|
#endif /* HAVE_LIBCAP_NG */
|
||||||
|
|
||||||
|
+#include "netdissect-stdinc.h"
|
||||||
|
#include "netdissect.h"
|
||||||
|
#include "interface.h"
|
||||||
|
#include "addrtoname.h"
|
||||||
|
@@ -861,15 +862,22 @@ read_infile(char *fname)
|
||||||
|
{
|
||||||
|
register int i, fd, cc;
|
||||||
|
register char *cp;
|
||||||
|
- struct stat buf;
|
||||||
|
+ our_statb buf;
|
||||||
|
|
||||||
|
fd = open(fname, O_RDONLY|O_BINARY);
|
||||||
|
if (fd < 0)
|
||||||
|
error("can't open %s: %s", fname, pcap_strerror(errno));
|
||||||
|
|
||||||
|
- if (fstat(fd, &buf) < 0)
|
||||||
|
+ if (our_fstat(fd, &buf) < 0)
|
||||||
|
error("can't stat %s: %s", fname, pcap_strerror(errno));
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * Reject files whose size doesn't fit into an int; a filter
|
||||||
|
+ * *that* large will probably be too big.
|
||||||
|
+ */
|
||||||
|
+ if (buf.st_size > INT_MAX)
|
||||||
|
+ error("%s is too large", fname);
|
||||||
|
+
|
||||||
|
cp = malloc((u_int)buf.st_size + 1);
|
||||||
|
if (cp == NULL)
|
||||||
|
error("malloc(%d) for %s: %s", (u_int)buf.st_size + 1,
|
||||||
|
@@ -878,7 +886,8 @@ read_infile(char *fname)
|
||||||
|
if (cc < 0)
|
||||||
|
error("read %s: %s", fname, pcap_strerror(errno));
|
||||||
|
if (cc != buf.st_size)
|
||||||
|
- error("short read %s (%d != %d)", fname, cc, (int)buf.st_size);
|
||||||
|
+ error("short read %s (%d != %d)", fname, (int) cc,
|
||||||
|
+ (int)buf.st_size);
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
/* replace "# comment" with spaces */
|
||||||
@ -12,9 +12,9 @@ PKG_RELEASE:=$(AUTORELEASE)
|
|||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git
|
||||||
PKG_MIRROR_HASH:=6880a4013c6b846ff0ad088a84294bbdbf7bb030a6838a97211c8e0161ee29db
|
PKG_MIRROR_HASH:=af4ca76197b89943c85e4e2d27a1036f43337d475971d0041cb525bcbca075c1
|
||||||
PKG_SOURCE_DATE:=2022-01-31
|
PKG_SOURCE_DATE:=2022-02-19
|
||||||
PKG_SOURCE_VERSION:=cb0031c47b9d46f3cf84daa90d484af5f9c90e31
|
PKG_SOURCE_VERSION:=ad652490d47916a27c01e3dd8f9eafcecbb4bc7f
|
||||||
CMAKE_INSTALL:=1
|
CMAKE_INSTALL:=1
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|||||||
@ -6,17 +6,11 @@ NAME=uxc
|
|||||||
PROG=/sbin/uxc
|
PROG=/sbin/uxc
|
||||||
|
|
||||||
start_service() {
|
start_service() {
|
||||||
[ "${__BOOT_UXC}" = "1" ] || return 0
|
|
||||||
procd_open_instance "uxc"
|
procd_open_instance "uxc"
|
||||||
procd_set_param command "$PROG" boot
|
procd_set_param command "$PROG" boot
|
||||||
procd_close_instance
|
procd_close_instance
|
||||||
}
|
}
|
||||||
|
|
||||||
boot() {
|
|
||||||
__BOOT_UXC=1
|
|
||||||
start
|
|
||||||
}
|
|
||||||
|
|
||||||
service_triggers() {
|
service_triggers() {
|
||||||
procd_add_raw_trigger "mount.add" 3000 /etc/init.d/uxc boot
|
procd_add_raw_trigger "mount.add" 3000 /etc/init.d/uxc start
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,9 +12,9 @@ PKG_RELEASE:=1
|
|||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=https://github.com/jow-/ucode.git
|
PKG_SOURCE_URL=https://github.com/jow-/ucode.git
|
||||||
PKG_SOURCE_DATE:=2022-02-08
|
PKG_SOURCE_DATE:=2022-02-11
|
||||||
PKG_SOURCE_VERSION:=a317c17f5ddfc3f749d349de01eeea5cad3eb162
|
PKG_SOURCE_VERSION:=a29bad9454edcc285f7f37410b6822affede44d1
|
||||||
PKG_MIRROR_HASH:=11177e9be736d379d61de4450d5556b0275b5125e5e6ead35e0e44157e9b7eae
|
PKG_MIRROR_HASH:=eaba0f12c469ef82b772a64f8763e8855dbba81551a78d05f547c0922a7dacad
|
||||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||||
PKG_LICENSE:=ISC
|
PKG_LICENSE:=ISC
|
||||||
|
|
||||||
|
|||||||
30
scripts/config/.gitignore
vendored
30
scripts/config/.gitignore
vendored
@ -1,22 +1,16 @@
|
|||||||
#
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
# Generated files
|
/conf
|
||||||
#
|
/[gmnq]conf
|
||||||
*.moc
|
/[gmnq]conf-cfg
|
||||||
*conf-cfg
|
/qconf-moc.cc
|
||||||
|
|
||||||
|
# From linux kconfig parent directories
|
||||||
|
.*
|
||||||
|
|
||||||
|
# OpenWrt-generated files
|
||||||
mconf_check
|
mconf_check
|
||||||
|
|
||||||
#
|
# Temporary files from older versions. They should be removed after the
|
||||||
# configuration programs
|
# end of support for OpenWrt 19.07.
|
||||||
#
|
|
||||||
conf
|
|
||||||
mconf
|
|
||||||
nconf
|
|
||||||
qconf
|
|
||||||
gconf
|
|
||||||
|
|
||||||
#
|
|
||||||
# temporary files from older version. Should be removed
|
|
||||||
#
|
|
||||||
zconf.???.c
|
zconf.???.c
|
||||||
zconf.hash.c
|
zconf.hash.c
|
||||||
.tmp_qtcheck
|
|
||||||
|
|||||||
@ -5,11 +5,11 @@
|
|||||||
.PHONY: clean all
|
.PHONY: clean all
|
||||||
all: conf mconf
|
all: conf mconf
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o lxdialog/*.o *.moc $(clean-files) conf mconf qconf nconf
|
rm -f *.o lxdialog/*.o *.moc .*.cmd $(clean-files)
|
||||||
|
|
||||||
# This clean-files definition is here to ensure that temporary files from the
|
# This clean-files definition is here to ensure that temporary files from the
|
||||||
# previous version are removed by make config-clean.
|
# previous version are removed by make config-clean.
|
||||||
# It should be removed or emptied when this Makefile get updated again.
|
# It should be emptied after the end of support for OpenWrt 19.07.
|
||||||
clean-files := zconf.tab.c zconf.lex.c zconf.hash.c .tmp_qtcheck
|
clean-files := zconf.tab.c zconf.lex.c zconf.hash.c .tmp_qtcheck
|
||||||
|
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
@ -24,9 +24,11 @@ src:=.
|
|||||||
obj:=.
|
obj:=.
|
||||||
Q:=$(if $V,,@)
|
Q:=$(if $V,,@)
|
||||||
cmd = $(cmd_$(1))
|
cmd = $(cmd_$(1))
|
||||||
dot-target = $(dir $@).$(notdir $@)
|
|
||||||
|
|
||||||
# taken from ../Kbuild.include
|
# some definitions taken from ../Kbuild.include
|
||||||
|
dot-target = $(dir $@).$(notdir $@)
|
||||||
|
squote := '
|
||||||
|
escsq = $(subst $(squote),'\$(squote)',$1)
|
||||||
define filechk
|
define filechk
|
||||||
$(Q)set -e; \
|
$(Q)set -e; \
|
||||||
mkdir -p $(dir $@); \
|
mkdir -p $(dir $@); \
|
||||||
@ -37,23 +39,29 @@ define filechk
|
|||||||
mv -f $(dot-target).tmp $@; \
|
mv -f $(dot-target).tmp $@; \
|
||||||
fi
|
fi
|
||||||
endef
|
endef
|
||||||
|
cmd-check = $(if $(strip $(cmd_$@)),,1)
|
||||||
|
make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))))
|
||||||
|
newer-prereqs = $(filter-out $(PHONY),$?)
|
||||||
|
if_changed = $(if $(newer-prereqs)$(cmd-check), \
|
||||||
|
$(cmd); \
|
||||||
|
printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
|
||||||
|
|
||||||
### Stripped down upstream Makefile follows:
|
### Stripped down upstream Makefile follows:
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
# object files used by all kconfig flavours
|
# object files used by all kconfig flavours
|
||||||
common-objs := confdata.o expr.o lexer.lex.o parser.tab.o preprocess.o \
|
common-objs := confdata.o expr.o lexer.lex.o menu.o parser.tab.o \
|
||||||
symbol.o util.o
|
preprocess.o symbol.o util.o
|
||||||
|
|
||||||
$(obj)/lexer.lex.o: $(obj)/parser.tab.h
|
$(obj)/lexer.lex.o: $(obj)/parser.tab.h
|
||||||
HOSTCFLAGS_lexer.lex.o := -I $(srctree)/$(src)
|
HOSTCFLAGS_lexer.lex.o := -I $(srctree)/$(src)
|
||||||
HOSTCFLAGS_parser.tab.o := -I $(srctree)/$(src)
|
HOSTCFLAGS_parser.tab.o := -I $(srctree)/$(src)
|
||||||
|
|
||||||
# conf: Used for defconfig, oldconfig and related targets
|
# conf: Used for defconfig, oldconfig and related targets
|
||||||
hostprogs-y += conf
|
hostprogs += conf
|
||||||
conf-objs := conf.o $(common-objs)
|
conf-objs := conf.o $(common-objs)
|
||||||
|
|
||||||
# nconf: Used for the nconfig target based on ncurses
|
# nconf: Used for the nconfig target based on ncurses
|
||||||
hostprogs-y += nconf
|
hostprogs += nconf
|
||||||
nconf-objs := nconf.o nconf.gui.o $(common-objs)
|
nconf-objs := nconf.o nconf.gui.o $(common-objs)
|
||||||
|
|
||||||
HOSTLDLIBS_nconf = $(shell . $(obj)/nconf-cfg && echo $$libs)
|
HOSTLDLIBS_nconf = $(shell . $(obj)/nconf-cfg && echo $$libs)
|
||||||
@ -63,7 +71,7 @@ HOSTCFLAGS_nconf.gui.o = $(shell . $(obj)/nconf-cfg && echo $$cflags)
|
|||||||
$(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/nconf-cfg
|
$(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/nconf-cfg
|
||||||
|
|
||||||
# mconf: Used for the menuconfig target based on lxdialog
|
# mconf: Used for the menuconfig target based on lxdialog
|
||||||
hostprogs-y += mconf
|
hostprogs += mconf
|
||||||
lxdialog := $(addprefix lxdialog/, \
|
lxdialog := $(addprefix lxdialog/, \
|
||||||
checklist.o inputbox.o menubox.o textbox.o util.o yesno.o)
|
checklist.o inputbox.o menubox.o textbox.o util.o yesno.o)
|
||||||
mconf-objs := mconf.o $(lxdialog) $(common-objs)
|
mconf-objs := mconf.o $(lxdialog) $(common-objs)
|
||||||
@ -75,20 +83,23 @@ $(foreach f, mconf.o $(lxdialog), \
|
|||||||
$(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/mconf-cfg
|
$(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/mconf-cfg
|
||||||
|
|
||||||
# qconf: Used for the xconfig target based on Qt
|
# qconf: Used for the xconfig target based on Qt
|
||||||
hostprogs-y += qconf
|
hostprogs += qconf
|
||||||
qconf-cxxobjs := qconf.o
|
qconf-cxxobjs := qconf.o qconf-moc.o
|
||||||
qconf-objs := images.o $(common-objs)
|
qconf-objs := images.o $(common-objs)
|
||||||
|
|
||||||
HOSTLDLIBS_qconf = $(shell . $(obj)/qconf-cfg && echo $$libs)
|
HOSTLDLIBS_qconf = $(shell . $(obj)/qconf-cfg && echo $$libs)
|
||||||
HOSTCXXFLAGS_qconf.o = $(shell . $(obj)/qconf-cfg && echo $$cflags)
|
HOSTCXXFLAGS_qconf.o = $(shell . $(obj)/qconf-cfg && echo $$cflags)
|
||||||
|
HOSTCXXFLAGS_qconf-moc.o = $(shell . $(obj)/qconf-cfg && echo $$cflags)
|
||||||
|
|
||||||
$(obj)/qconf.o: $(obj)/qconf-cfg $(obj)/qconf.moc
|
$(obj)/qconf.o: $(obj)/qconf-cfg
|
||||||
|
|
||||||
quiet_cmd_moc = MOC $@
|
quiet_cmd_moc = MOC $@
|
||||||
cmd_moc = $(shell . $(obj)/qconf-cfg && echo $$moc) -i $< -o $@
|
cmd_moc = $(shell . $(obj)/qconf-cfg && echo $$moc) $< -o $@
|
||||||
|
|
||||||
$(obj)/%.moc: $(src)/%.h $(obj)/qconf-cfg
|
$(obj)/qconf-moc.cc: $(src)/qconf.h $(obj)/qconf-cfg FORCE
|
||||||
$(call cmd,moc)
|
$(call if_changed,moc)
|
||||||
|
|
||||||
|
targets += qconf-moc.cc
|
||||||
|
|
||||||
# check if necessary packages are available, and configure build flags
|
# check if necessary packages are available, and configure build flags
|
||||||
filechk_conf_cfg = $(CONFIG_SHELL) $<
|
filechk_conf_cfg = $(CONFIG_SHELL) $<
|
||||||
@ -102,6 +113,8 @@ clean-files += *conf-cfg
|
|||||||
# OpenWrt rules and final adjustments that need to be made after reading the
|
# OpenWrt rules and final adjustments that need to be made after reading the
|
||||||
# full upstream Makefile
|
# full upstream Makefile
|
||||||
|
|
||||||
|
clean-files += $(targets) $(hostprogs)
|
||||||
|
|
||||||
FORCE:
|
FORCE:
|
||||||
|
|
||||||
ifdef BUILD_SHIPPED_FILES
|
ifdef BUILD_SHIPPED_FILES
|
||||||
@ -117,24 +130,25 @@ clean-files += $(shipped-files)
|
|||||||
flex -L -o$@ $<
|
flex -L -o$@ $<
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(foreach f, mconf.o $(lxdialog), \
|
$(foreach f,$(conf-objs) $(filter-out $(common-objs),$(mconf-objs) \
|
||||||
$(eval $f: CFLAGS+=$$(HOSTCFLAGS_$f)))
|
$(qconf-objs) \
|
||||||
|
$(nconf-objs)), \
|
||||||
|
$(eval $(obj)/$f: CFLAGS+=$$(HOSTCFLAGS_$f)))
|
||||||
|
|
||||||
$(obj)/lexer.lex.o: CFLAGS += $(HOSTCFLAGS_lexer.lex.o)
|
$(foreach f,$(qconf-cxxobjs), \
|
||||||
$(obj)/parser.tab.o: CFLAGS += $(HOSTCFLAGS_parser.tab.o)
|
$(eval $(obj)/$f: CXXFLAGS+=$$(HOSTCXXFLAGS_$f)))
|
||||||
$(obj)/qconf.o: CXXFLAGS+=$(HOSTCXXFLAGS_qconf.o)
|
|
||||||
|
|
||||||
conf: $(conf-objs)
|
$(obj)/conf: $(addprefix $(obj)/,$(conf-objs))
|
||||||
|
|
||||||
# The *conf-cfg file is used (then filtered out) as the first prerequisite to
|
# The *conf-cfg file is used (then filtered out) as the first prerequisite to
|
||||||
# avoid sourcing it before the script is built, when trying to compute CFLAGS
|
# avoid sourcing it before the script is built, when trying to compute CFLAGS
|
||||||
# for the actual first prerequisite. This avoids errors like:
|
# for the actual first prerequisite. This avoids errors like:
|
||||||
# '/bin/sh: ./mconf-cfg: No such file or directory'
|
# '/bin/sh: ./mconf-cfg: No such file or directory'
|
||||||
mconf: mconf-cfg $(mconf-objs)
|
$(obj)/mconf: mconf-cfg $(addprefix $(obj)/,$(mconf-objs))
|
||||||
$(CC) -o $@ $(filter-out mconf-cfg,$^) $(HOSTLDLIBS_mconf)
|
$(CC) -o $@ $(filter-out mconf-cfg,$^) $(HOSTLDLIBS_mconf)
|
||||||
|
|
||||||
nconf: nconf-cfg $(nconf-objs)
|
$(obj)/nconf: nconf-cfg $(addprefix $(obj)/,$(nconf-objs))
|
||||||
$(CC) -o $@ $(filter-out nconf-cfg,$^) $(HOSTLDLIBS_nconf)
|
$(CC) -o $@ $(filter-out nconf-cfg,$^) $(HOSTLDLIBS_nconf)
|
||||||
|
|
||||||
qconf: qconf-cfg $(qconf-cxxobjs) $(qconf-objs)
|
$(obj)/qconf: qconf-cfg $(addprefix $(obj)/,$(qconf-cxxobjs) $(qconf-objs))
|
||||||
$(CXX) -o $@ $(filter-out qconf-cfg,$^) $(HOSTLDLIBS_qconf)
|
$(CXX) -o $@ $(filter-out qconf-cfg,$^) $(HOSTLDLIBS_qconf)
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
These files were taken from the Linux Kernel Configuration System at commit
|
These files were taken from the Linux 5.14 Kernel Configuration System and
|
||||||
089b7d890f972f6b649fedc9259f6b93a18fb970 (Feb 4, 2020) and modified for the
|
modified for the OpenWrt Buildroot:
|
||||||
OpenWrt Buildroot:
|
- Removed nconf, gconf, tests and kernel configuration targets.
|
||||||
- Removed gconf, tests and kernel configuration targets.
|
|
||||||
- Adjusted the Makefile to compile outside the kernel.
|
- Adjusted the Makefile to compile outside the kernel.
|
||||||
- Always use default file when running make all{no,mod,yes}config.
|
- Always use default file when running make all{no,mod,yes}config.
|
||||||
- Added a 'reset' command to reset config when the target changes.
|
- Added a 'reset' command to reset config when the target changes.
|
||||||
@ -24,4 +23,4 @@ OpenWrt Buildroot:
|
|||||||
BUILD_SHIPPED_FILES defined
|
BUILD_SHIPPED_FILES defined
|
||||||
|
|
||||||
For a full list of changes, see the repository at:
|
For a full list of changes, see the repository at:
|
||||||
https://github.com/cotequeiroz/linux/commits/openwrt/scripts/kconfig
|
https://github.com/cotequeiroz/linux/commits/openwrt-5.14/scripts/kconfig
|
||||||
|
|||||||
@ -11,7 +11,6 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
@ -39,7 +38,7 @@ enum input_mode {
|
|||||||
fatalrecursive,
|
fatalrecursive,
|
||||||
};
|
};
|
||||||
static enum input_mode input_mode = oldaskconfig;
|
static enum input_mode input_mode = oldaskconfig;
|
||||||
|
static int input_mode_opt;
|
||||||
static int indent = 1;
|
static int indent = 1;
|
||||||
static int tty_stdio;
|
static int tty_stdio;
|
||||||
static int sync_kconfig;
|
static int sync_kconfig;
|
||||||
@ -84,10 +83,243 @@ static void xfgets(char *str, int size, FILE *in)
|
|||||||
printf("%s", str);
|
printf("%s", str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void set_randconfig_seed(void)
|
||||||
|
{
|
||||||
|
unsigned int seed;
|
||||||
|
char *env;
|
||||||
|
bool seed_set = false;
|
||||||
|
|
||||||
|
env = getenv("KCONFIG_SEED");
|
||||||
|
if (env && *env) {
|
||||||
|
char *endp;
|
||||||
|
|
||||||
|
seed = strtol(env, &endp, 0);
|
||||||
|
if (*endp == '\0')
|
||||||
|
seed_set = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!seed_set) {
|
||||||
|
struct timeval now;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use microseconds derived seed, compensate for systems where it may
|
||||||
|
* be zero.
|
||||||
|
*/
|
||||||
|
gettimeofday(&now, NULL);
|
||||||
|
seed = (now.tv_sec + 1) * (now.tv_usec + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("KCONFIG_SEED=0x%X\n", seed);
|
||||||
|
srand(seed);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool randomize_choice_values(struct symbol *csym)
|
||||||
|
{
|
||||||
|
struct property *prop;
|
||||||
|
struct symbol *sym;
|
||||||
|
struct expr *e;
|
||||||
|
int cnt, def;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If choice is mod then we may have more items selected
|
||||||
|
* and if no then no-one.
|
||||||
|
* In both cases stop.
|
||||||
|
*/
|
||||||
|
if (csym->curr.tri != yes)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
prop = sym_get_choice_prop(csym);
|
||||||
|
|
||||||
|
/* count entries in choice block */
|
||||||
|
cnt = 0;
|
||||||
|
expr_list_for_each_sym(prop->expr, e, sym)
|
||||||
|
cnt++;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* find a random value and set it to yes,
|
||||||
|
* set the rest to no so we have only one set
|
||||||
|
*/
|
||||||
|
def = rand() % cnt;
|
||||||
|
|
||||||
|
cnt = 0;
|
||||||
|
expr_list_for_each_sym(prop->expr, e, sym) {
|
||||||
|
if (def == cnt++) {
|
||||||
|
sym->def[S_DEF_USER].tri = yes;
|
||||||
|
csym->def[S_DEF_USER].val = sym;
|
||||||
|
} else {
|
||||||
|
sym->def[S_DEF_USER].tri = no;
|
||||||
|
}
|
||||||
|
sym->flags |= SYMBOL_DEF_USER;
|
||||||
|
/* clear VALID to get value calculated */
|
||||||
|
sym->flags &= ~SYMBOL_VALID;
|
||||||
|
}
|
||||||
|
csym->flags |= SYMBOL_DEF_USER;
|
||||||
|
/* clear VALID to get value calculated */
|
||||||
|
csym->flags &= ~SYMBOL_VALID;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum conf_def_mode {
|
||||||
|
def_default,
|
||||||
|
def_yes,
|
||||||
|
def_mod,
|
||||||
|
def_y2m,
|
||||||
|
def_m2y,
|
||||||
|
def_no,
|
||||||
|
def_random
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool conf_set_all_new_symbols(enum conf_def_mode mode)
|
||||||
|
{
|
||||||
|
struct symbol *sym, *csym;
|
||||||
|
int i, cnt;
|
||||||
|
/*
|
||||||
|
* can't go as the default in switch-case below, otherwise gcc whines
|
||||||
|
* about -Wmaybe-uninitialized
|
||||||
|
*/
|
||||||
|
int pby = 50; /* probability of bool = y */
|
||||||
|
int pty = 33; /* probability of tristate = y */
|
||||||
|
int ptm = 33; /* probability of tristate = m */
|
||||||
|
bool has_changed = false;
|
||||||
|
|
||||||
|
if (mode == def_random) {
|
||||||
|
int n, p[3];
|
||||||
|
char *env = getenv("KCONFIG_PROBABILITY");
|
||||||
|
|
||||||
|
n = 0;
|
||||||
|
while (env && *env) {
|
||||||
|
char *endp;
|
||||||
|
int tmp = strtol(env, &endp, 10);
|
||||||
|
|
||||||
|
if (tmp >= 0 && tmp <= 100) {
|
||||||
|
p[n++] = tmp;
|
||||||
|
} else {
|
||||||
|
errno = ERANGE;
|
||||||
|
perror("KCONFIG_PROBABILITY");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
env = (*endp == ':') ? endp + 1 : endp;
|
||||||
|
if (n >= 3)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (n) {
|
||||||
|
case 1:
|
||||||
|
pby = p[0];
|
||||||
|
ptm = pby / 2;
|
||||||
|
pty = pby - ptm;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
pty = p[0];
|
||||||
|
ptm = p[1];
|
||||||
|
pby = pty + ptm;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
pby = p[0];
|
||||||
|
pty = p[1];
|
||||||
|
ptm = p[2];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pty + ptm > 100) {
|
||||||
|
errno = ERANGE;
|
||||||
|
perror("KCONFIG_PROBABILITY");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sym_clear_all_valid();
|
||||||
|
|
||||||
|
for_all_symbols(i, sym) {
|
||||||
|
if (sym_has_value(sym) || sym->flags & SYMBOL_VALID)
|
||||||
|
continue;
|
||||||
|
switch (sym_get_type(sym)) {
|
||||||
|
case S_BOOLEAN:
|
||||||
|
case S_TRISTATE:
|
||||||
|
has_changed = true;
|
||||||
|
switch (mode) {
|
||||||
|
case def_yes:
|
||||||
|
sym->def[S_DEF_USER].tri = yes;
|
||||||
|
break;
|
||||||
|
case def_mod:
|
||||||
|
sym->def[S_DEF_USER].tri = mod;
|
||||||
|
break;
|
||||||
|
case def_no:
|
||||||
|
sym->def[S_DEF_USER].tri = no;
|
||||||
|
break;
|
||||||
|
case def_random:
|
||||||
|
sym->def[S_DEF_USER].tri = no;
|
||||||
|
cnt = rand() % 100;
|
||||||
|
if (sym->type == S_TRISTATE) {
|
||||||
|
if (cnt < pty)
|
||||||
|
sym->def[S_DEF_USER].tri = yes;
|
||||||
|
else if (cnt < pty + ptm)
|
||||||
|
sym->def[S_DEF_USER].tri = mod;
|
||||||
|
} else if (cnt < pby)
|
||||||
|
sym->def[S_DEF_USER].tri = yes;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!(sym_is_choice(sym) && mode == def_random))
|
||||||
|
sym->flags |= SYMBOL_DEF_USER;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have different type of choice blocks.
|
||||||
|
* If curr.tri equals to mod then we can select several
|
||||||
|
* choice symbols in one block.
|
||||||
|
* In this case we do nothing.
|
||||||
|
* If curr.tri equals yes then only one symbol can be
|
||||||
|
* selected in a choice block and we set it to yes,
|
||||||
|
* and the rest to no.
|
||||||
|
*/
|
||||||
|
if (mode != def_random) {
|
||||||
|
for_all_symbols(i, csym) {
|
||||||
|
if ((sym_is_choice(csym) && !sym_has_value(csym)) ||
|
||||||
|
sym_is_choice_value(csym))
|
||||||
|
csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for_all_symbols(i, csym) {
|
||||||
|
if (sym_has_value(csym) || !sym_is_choice(csym))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sym_calc_value(csym);
|
||||||
|
if (mode == def_random)
|
||||||
|
has_changed |= randomize_choice_values(csym);
|
||||||
|
else {
|
||||||
|
set_all_choice_values(csym);
|
||||||
|
has_changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return has_changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void conf_rewrite_mod_or_yes(enum conf_def_mode mode)
|
||||||
|
{
|
||||||
|
struct symbol *sym;
|
||||||
|
int i;
|
||||||
|
tristate old_val = (mode == def_y2m) ? yes : mod;
|
||||||
|
tristate new_val = (mode == def_y2m) ? mod : yes;
|
||||||
|
|
||||||
|
for_all_symbols(i, sym) {
|
||||||
|
if (sym_get_type(sym) == S_TRISTATE &&
|
||||||
|
sym->def[S_DEF_USER].tri == old_val)
|
||||||
|
sym->def[S_DEF_USER].tri = new_val;
|
||||||
|
}
|
||||||
|
sym_clear_all_valid();
|
||||||
|
}
|
||||||
|
|
||||||
static int conf_askvalue(struct symbol *sym, const char *def)
|
static int conf_askvalue(struct symbol *sym, const char *def)
|
||||||
{
|
{
|
||||||
enum symbol_type type = sym_get_type(sym);
|
|
||||||
|
|
||||||
if (!sym_has_value(sym))
|
if (!sym_has_value(sym))
|
||||||
printf("(NEW) ");
|
printf("(NEW) ");
|
||||||
|
|
||||||
@ -109,24 +341,12 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case oldaskconfig:
|
default:
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
xfgets(line, sizeof(line), stdin);
|
xfgets(line, sizeof(line), stdin);
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case S_INT:
|
|
||||||
case S_HEX:
|
|
||||||
case S_STRING:
|
|
||||||
printf("%s\n", def);
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
printf("%s", line);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +359,7 @@ static int conf_string(struct menu *menu)
|
|||||||
printf("%*s%s ", indent - 1, "", menu->prompt->text);
|
printf("%*s%s ", indent - 1, "", menu->prompt->text);
|
||||||
printf("(%s) ", sym->name);
|
printf("(%s) ", sym->name);
|
||||||
def = sym_get_string_value(sym);
|
def = sym_get_string_value(sym);
|
||||||
if (sym_get_string_value(sym))
|
if (def)
|
||||||
printf("[%s] ", def);
|
printf("[%s] ", def);
|
||||||
if (!conf_askvalue(sym, def))
|
if (!conf_askvalue(sym, def))
|
||||||
return 0;
|
return 0;
|
||||||
@ -421,10 +641,12 @@ static void check_conf(struct menu *menu)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
sym = menu->sym;
|
sym = menu->sym;
|
||||||
if (sym && !sym_has_value(sym)) {
|
if (sym && !sym_has_value(sym) &&
|
||||||
if (sym_is_changeable(sym) ||
|
(sym_is_changeable(sym) ||
|
||||||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
|
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes))) {
|
||||||
if (input_mode == listnewconfig) {
|
|
||||||
|
switch (input_mode) {
|
||||||
|
case listnewconfig:
|
||||||
if (sym->name) {
|
if (sym->name) {
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
@ -438,17 +660,18 @@ static void check_conf(struct menu *menu)
|
|||||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (input_mode == helpnewconfig) {
|
break;
|
||||||
|
case helpnewconfig:
|
||||||
printf("-----\n");
|
printf("-----\n");
|
||||||
print_help(menu);
|
print_help(menu);
|
||||||
printf("-----\n");
|
printf("-----\n");
|
||||||
|
break;
|
||||||
} else {
|
default:
|
||||||
if (!conf_cnt++)
|
if (!conf_cnt++)
|
||||||
printf("*\n* Restart config...\n*\n");
|
printf("*\n* Restart config...\n*\n");
|
||||||
rootEntry = menu_get_parent_menu(menu);
|
rootEntry = menu_get_parent_menu(menu);
|
||||||
conf(rootEntry);
|
conf(rootEntry);
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -456,31 +679,38 @@ static void check_conf(struct menu *menu)
|
|||||||
check_conf(child);
|
check_conf(child);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct option long_opts[] = {
|
static const struct option long_opts[] = {
|
||||||
{"oldaskconfig", no_argument, NULL, oldaskconfig},
|
{"help", no_argument, NULL, 'h'},
|
||||||
{"oldconfig", no_argument, NULL, oldconfig},
|
{"silent", no_argument, NULL, 's'},
|
||||||
{"syncconfig", no_argument, NULL, syncconfig},
|
{"oldaskconfig", no_argument, &input_mode_opt, oldaskconfig},
|
||||||
{"defconfig", required_argument, NULL, defconfig},
|
{"oldconfig", no_argument, &input_mode_opt, oldconfig},
|
||||||
{"savedefconfig", required_argument, NULL, savedefconfig},
|
{"syncconfig", no_argument, &input_mode_opt, syncconfig},
|
||||||
{"allnoconfig", no_argument, NULL, allnoconfig},
|
{"defconfig", required_argument, &input_mode_opt, defconfig},
|
||||||
{"allyesconfig", no_argument, NULL, allyesconfig},
|
{"savedefconfig", required_argument, &input_mode_opt, savedefconfig},
|
||||||
{"allmodconfig", no_argument, NULL, allmodconfig},
|
{"allnoconfig", no_argument, &input_mode_opt, allnoconfig},
|
||||||
{"alldefconfig", no_argument, NULL, alldefconfig},
|
{"allyesconfig", no_argument, &input_mode_opt, allyesconfig},
|
||||||
{"randconfig", no_argument, NULL, randconfig},
|
{"allmodconfig", no_argument, &input_mode_opt, allmodconfig},
|
||||||
{"listnewconfig", no_argument, NULL, listnewconfig},
|
{"alldefconfig", no_argument, &input_mode_opt, alldefconfig},
|
||||||
{"helpnewconfig", no_argument, NULL, helpnewconfig},
|
{"randconfig", no_argument, &input_mode_opt, randconfig},
|
||||||
{"olddefconfig", no_argument, NULL, olddefconfig},
|
{"listnewconfig", no_argument, &input_mode_opt, listnewconfig},
|
||||||
{"yes2modconfig", no_argument, NULL, yes2modconfig},
|
{"helpnewconfig", no_argument, &input_mode_opt, helpnewconfig},
|
||||||
{"mod2yesconfig", no_argument, NULL, mod2yesconfig},
|
{"olddefconfig", no_argument, &input_mode_opt, olddefconfig},
|
||||||
|
{"yes2modconfig", no_argument, &input_mode_opt, yes2modconfig},
|
||||||
|
{"mod2yesconfig", no_argument, &input_mode_opt, mod2yesconfig},
|
||||||
{"fatalrecursive",no_argument, NULL, fatalrecursive},
|
{"fatalrecursive",no_argument, NULL, fatalrecursive},
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void conf_usage(const char *progname)
|
static void conf_usage(const char *progname)
|
||||||
{
|
{
|
||||||
|
printf("Usage: %s [options] <kconfig-file>\n", progname);
|
||||||
printf("Usage: %s [-s] [--fatalrecursive] [option] <kconfig-file>\n", progname);
|
printf("\n");
|
||||||
printf("[option] is _one_ of the following:\n");
|
printf("Generic options:\n");
|
||||||
|
printf(" -h, --help Print this message and exit.\n");
|
||||||
|
printf(" -s, --silent Do not print log.\n");
|
||||||
|
printf(" --fatalrecursive Treat recursive depenendencies as a fatal error\n");
|
||||||
|
printf("\n");
|
||||||
|
printf("Mode options:\n");
|
||||||
printf(" --listnewconfig List new options\n");
|
printf(" --listnewconfig List new options\n");
|
||||||
printf(" --helpnewconfig List new options and help text\n");
|
printf(" --helpnewconfig List new options and help text\n");
|
||||||
printf(" --oldaskconfig Start a new configuration using a line-oriented program\n");
|
printf(" --oldaskconfig Start a new configuration using a line-oriented program\n");
|
||||||
@ -497,6 +727,7 @@ static void conf_usage(const char *progname)
|
|||||||
printf(" --randconfig New config with random answer to all options\n");
|
printf(" --randconfig New config with random answer to all options\n");
|
||||||
printf(" --yes2modconfig Change answers from yes to mod if possible\n");
|
printf(" --yes2modconfig Change answers from yes to mod if possible\n");
|
||||||
printf(" --mod2yesconfig Change answers from mod to yes if possible\n");
|
printf(" --mod2yesconfig Change answers from mod to yes if possible\n");
|
||||||
|
printf(" (If none of the above is given, --oldaskconfig is the default)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int ac, char **av)
|
int main(int ac, char **av)
|
||||||
@ -509,16 +740,32 @@ int main(int ac, char **av)
|
|||||||
|
|
||||||
tty_stdio = isatty(0) && isatty(1);
|
tty_stdio = isatty(0) && isatty(1);
|
||||||
|
|
||||||
while ((opt = getopt_long(ac, av, "r:w:s", long_opts, NULL)) != -1) {
|
while ((opt = getopt_long(ac, av, "hr:sw:", long_opts, NULL)) != -1) {
|
||||||
if (opt == 's') {
|
|
||||||
conf_set_message_callback(NULL);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
|
case 'h':
|
||||||
|
conf_usage(progname);
|
||||||
|
exit(1);
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
conf_set_message_callback(NULL);
|
||||||
|
break;
|
||||||
|
case fatalrecursive:
|
||||||
|
recursive_is_error = 1;
|
||||||
|
continue;
|
||||||
|
case 'r':
|
||||||
|
input_file = optarg;
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
output_file = optarg;
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
input_mode = input_mode_opt;
|
||||||
|
switch (input_mode) {
|
||||||
case syncconfig:
|
case syncconfig:
|
||||||
/*
|
/*
|
||||||
* syncconfig is invoked during the build stage.
|
* syncconfig is invoked during the build stage.
|
||||||
* Suppress distracting "configuration written to ..."
|
* Suppress distracting
|
||||||
|
* "configuration written to ..."
|
||||||
*/
|
*/
|
||||||
conf_set_message_callback(NULL);
|
conf_set_message_callback(NULL);
|
||||||
sync_kconfig = 1;
|
sync_kconfig = 1;
|
||||||
@ -528,65 +775,21 @@ int main(int ac, char **av)
|
|||||||
defconfig_file = optarg;
|
defconfig_file = optarg;
|
||||||
break;
|
break;
|
||||||
case randconfig:
|
case randconfig:
|
||||||
{
|
set_randconfig_seed();
|
||||||
struct timeval now;
|
break;
|
||||||
unsigned int seed;
|
default:
|
||||||
char *seed_env;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Use microseconds derived seed,
|
|
||||||
* compensate for systems where it may be zero
|
|
||||||
*/
|
|
||||||
gettimeofday(&now, NULL);
|
|
||||||
seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
|
|
||||||
|
|
||||||
seed_env = getenv("KCONFIG_SEED");
|
|
||||||
if( seed_env && *seed_env ) {
|
|
||||||
char *endp;
|
|
||||||
int tmp = (int)strtol(seed_env, &endp, 0);
|
|
||||||
if (*endp == '\0') {
|
|
||||||
seed = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fprintf( stderr, "KCONFIG_SEED=0x%X\n", seed );
|
|
||||||
srand(seed);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case oldaskconfig:
|
default:
|
||||||
case oldconfig:
|
|
||||||
case allnoconfig:
|
|
||||||
case allyesconfig:
|
|
||||||
case allmodconfig:
|
|
||||||
case alldefconfig:
|
|
||||||
case listnewconfig:
|
|
||||||
case helpnewconfig:
|
|
||||||
case olddefconfig:
|
|
||||||
case yes2modconfig:
|
|
||||||
case mod2yesconfig:
|
|
||||||
break;
|
|
||||||
case fatalrecursive:
|
|
||||||
recursive_is_error = 1;
|
|
||||||
continue;
|
|
||||||
case 'r':
|
|
||||||
input_file = optarg;
|
|
||||||
continue;
|
|
||||||
case 'w':
|
|
||||||
output_file = optarg;
|
|
||||||
continue;
|
|
||||||
case '?':
|
|
||||||
conf_usage(progname);
|
|
||||||
exit(1);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
input_mode = (enum input_mode)opt;
|
|
||||||
}
|
}
|
||||||
if (ac == optind) {
|
if (ac == optind) {
|
||||||
fprintf(stderr, "%s: Kconfig file missing\n", av[0]);
|
fprintf(stderr, "%s: Kconfig file missing\n", av[0]);
|
||||||
conf_usage(progname);
|
conf_usage(progname);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
name = av[optind];
|
conf_parse(av[optind]);
|
||||||
conf_parse(name);
|
|
||||||
//zconfdump(stdout);
|
//zconfdump(stdout);
|
||||||
|
|
||||||
switch (input_mode) {
|
switch (input_mode) {
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -32,7 +33,7 @@ static bool is_dir(const char *path)
|
|||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if (stat(path, &st))
|
if (stat(path, &st))
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
return S_ISDIR(st.st_mode);
|
return S_ISDIR(st.st_mode);
|
||||||
}
|
}
|
||||||
@ -129,19 +130,14 @@ static size_t depfile_prefix_len;
|
|||||||
static int conf_touch_dep(const char *name)
|
static int conf_touch_dep(const char *name)
|
||||||
{
|
{
|
||||||
int fd, ret;
|
int fd, ret;
|
||||||
const char *s;
|
char *d;
|
||||||
char *d, c;
|
|
||||||
|
|
||||||
/* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
|
/* check overflow: prefix + name + '\0' must fit in buffer. */
|
||||||
if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
|
if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
d = depfile_path + depfile_prefix_len;
|
d = depfile_path + depfile_prefix_len;
|
||||||
s = name;
|
strcpy(d, name);
|
||||||
|
|
||||||
while ((c = *s++))
|
|
||||||
*d++ = (c == '_') ? '/' : tolower(c);
|
|
||||||
strcpy(d, ".h");
|
|
||||||
|
|
||||||
/* Assume directory path already exists. */
|
/* Assume directory path already exists. */
|
||||||
fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
||||||
@ -384,28 +380,46 @@ int conf_read_simple(const char *name, int def)
|
|||||||
if (name) {
|
if (name) {
|
||||||
in = zconf_fopen(name);
|
in = zconf_fopen(name);
|
||||||
} else {
|
} else {
|
||||||
struct property *prop;
|
char *env;
|
||||||
|
|
||||||
name = conf_get_configname();
|
name = conf_get_configname();
|
||||||
in = zconf_fopen(name);
|
in = zconf_fopen(name);
|
||||||
if (in)
|
if (in)
|
||||||
goto load;
|
goto load;
|
||||||
sym_add_change_count(1);
|
conf_set_changed(true);
|
||||||
if (!sym_defconfig_list)
|
|
||||||
|
env = getenv("KCONFIG_DEFCONFIG_LIST");
|
||||||
|
if (!env)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for_all_defaults(sym_defconfig_list, prop) {
|
while (1) {
|
||||||
if (expr_calc_value(prop->visible.expr) == no ||
|
bool is_last;
|
||||||
prop->expr->type != E_SYMBOL)
|
|
||||||
continue;
|
while (isspace(*env))
|
||||||
sym_calc_value(prop->expr->left.sym);
|
env++;
|
||||||
name = sym_get_string_value(prop->expr->left.sym);
|
|
||||||
in = zconf_fopen(name);
|
if (!*env)
|
||||||
|
break;
|
||||||
|
|
||||||
|
p = env;
|
||||||
|
while (*p && !isspace(*p))
|
||||||
|
p++;
|
||||||
|
|
||||||
|
is_last = (*p == '\0');
|
||||||
|
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
in = zconf_fopen(env);
|
||||||
if (in) {
|
if (in) {
|
||||||
conf_message("using defaults found in %s",
|
conf_message("using defaults found in %s",
|
||||||
name);
|
env);
|
||||||
goto load;
|
goto load;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_last)
|
||||||
|
break;
|
||||||
|
|
||||||
|
env = p + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!in)
|
if (!in)
|
||||||
@ -434,7 +448,7 @@ load:
|
|||||||
if (def == S_DEF_USER) {
|
if (def == S_DEF_USER) {
|
||||||
sym = sym_find(line + 2 + strlen(CONFIG_));
|
sym = sym_find(line + 2 + strlen(CONFIG_));
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
sym_add_change_count(1);
|
conf_set_changed(true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -470,11 +484,11 @@ load:
|
|||||||
* Reading from include/config/auto.conf
|
* Reading from include/config/auto.conf
|
||||||
* If CONFIG_FOO previously existed in
|
* If CONFIG_FOO previously existed in
|
||||||
* auto.conf but it is missing now,
|
* auto.conf but it is missing now,
|
||||||
* include/config/foo.h must be touched.
|
* include/config/FOO must be touched.
|
||||||
*/
|
*/
|
||||||
conf_touch_dep(line + strlen(CONFIG_));
|
conf_touch_dep(line + strlen(CONFIG_));
|
||||||
else
|
else
|
||||||
sym_add_change_count(1);
|
conf_set_changed(true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -519,7 +533,7 @@ int conf_read(const char *name)
|
|||||||
int conf_unsaved = 0;
|
int conf_unsaved = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
sym_set_change_count(0);
|
conf_set_changed(false);
|
||||||
|
|
||||||
if (conf_read_simple(name, S_DEF_USER)) {
|
if (conf_read_simple(name, S_DEF_USER)) {
|
||||||
sym_calc_value(modules_sym);
|
sym_calc_value(modules_sym);
|
||||||
@ -577,7 +591,8 @@ int conf_read(const char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sym_add_change_count(conf_warnings || conf_unsaved);
|
if (conf_warnings || conf_unsaved)
|
||||||
|
conf_set_changed(true);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -922,7 +937,7 @@ next:
|
|||||||
if (is_same(name, tmpname)) {
|
if (is_same(name, tmpname)) {
|
||||||
conf_message("No change to %s", name);
|
conf_message("No change to %s", name);
|
||||||
unlink(tmpname);
|
unlink(tmpname);
|
||||||
sym_set_change_count(0);
|
conf_set_changed(false);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -934,7 +949,7 @@ next:
|
|||||||
|
|
||||||
conf_message("configuration written to %s", name);
|
conf_message("configuration written to %s", name);
|
||||||
|
|
||||||
sym_set_change_count(0);
|
conf_set_changed(false);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1105,26 +1120,20 @@ int conf_write_autoconf(int overwrite)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sym_change_count;
|
static bool conf_changed;
|
||||||
static void (*conf_changed_callback)(void);
|
static void (*conf_changed_callback)(void);
|
||||||
|
|
||||||
void sym_set_change_count(int count)
|
void conf_set_changed(bool val)
|
||||||
{
|
{
|
||||||
int _sym_change_count = sym_change_count;
|
if (conf_changed_callback && conf_changed != val)
|
||||||
sym_change_count = count;
|
|
||||||
if (conf_changed_callback &&
|
|
||||||
(bool)_sym_change_count != (bool)count)
|
|
||||||
conf_changed_callback();
|
conf_changed_callback();
|
||||||
}
|
|
||||||
|
|
||||||
void sym_add_change_count(int count)
|
conf_changed = val;
|
||||||
{
|
|
||||||
sym_set_change_count(count + sym_change_count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool conf_get_changed(void)
|
bool conf_get_changed(void)
|
||||||
{
|
{
|
||||||
return sym_change_count;
|
return conf_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void conf_set_changed_callback(void (*fn)(void))
|
void conf_set_changed_callback(void (*fn)(void))
|
||||||
@ -1132,54 +1141,6 @@ void conf_set_changed_callback(void (*fn)(void))
|
|||||||
conf_changed_callback = fn;
|
conf_changed_callback = fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool randomize_choice_values(struct symbol *csym)
|
|
||||||
{
|
|
||||||
struct property *prop;
|
|
||||||
struct symbol *sym;
|
|
||||||
struct expr *e;
|
|
||||||
int cnt, def;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If choice is mod then we may have more items selected
|
|
||||||
* and if no then no-one.
|
|
||||||
* In both cases stop.
|
|
||||||
*/
|
|
||||||
if (csym->curr.tri != yes)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
prop = sym_get_choice_prop(csym);
|
|
||||||
|
|
||||||
/* count entries in choice block */
|
|
||||||
cnt = 0;
|
|
||||||
expr_list_for_each_sym(prop->expr, e, sym)
|
|
||||||
cnt++;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* find a random value and set it to yes,
|
|
||||||
* set the rest to no so we have only one set
|
|
||||||
*/
|
|
||||||
def = (rand() % cnt);
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
expr_list_for_each_sym(prop->expr, e, sym) {
|
|
||||||
if (def == cnt++) {
|
|
||||||
sym->def[S_DEF_USER].tri = yes;
|
|
||||||
csym->def[S_DEF_USER].val = sym;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sym->def[S_DEF_USER].tri = no;
|
|
||||||
}
|
|
||||||
sym->flags |= SYMBOL_DEF_USER;
|
|
||||||
/* clear VALID to get value calculated */
|
|
||||||
sym->flags &= ~SYMBOL_VALID;
|
|
||||||
}
|
|
||||||
csym->flags |= SYMBOL_DEF_USER;
|
|
||||||
/* clear VALID to get value calculated */
|
|
||||||
csym->flags &= ~(SYMBOL_VALID);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_all_choice_values(struct symbol *csym)
|
void set_all_choice_values(struct symbol *csym)
|
||||||
{
|
{
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
@ -1199,147 +1160,3 @@ void set_all_choice_values(struct symbol *csym)
|
|||||||
/* clear VALID to get value calculated */
|
/* clear VALID to get value calculated */
|
||||||
csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES);
|
csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool conf_set_all_new_symbols(enum conf_def_mode mode)
|
|
||||||
{
|
|
||||||
struct symbol *sym, *csym;
|
|
||||||
int i, cnt, pby, pty, ptm; /* pby: probability of bool = y
|
|
||||||
* pty: probability of tristate = y
|
|
||||||
* ptm: probability of tristate = m
|
|
||||||
*/
|
|
||||||
|
|
||||||
pby = 50; pty = ptm = 33; /* can't go as the default in switch-case
|
|
||||||
* below, otherwise gcc whines about
|
|
||||||
* -Wmaybe-uninitialized */
|
|
||||||
if (mode == def_random) {
|
|
||||||
int n, p[3];
|
|
||||||
char *env = getenv("KCONFIG_PROBABILITY");
|
|
||||||
n = 0;
|
|
||||||
while( env && *env ) {
|
|
||||||
char *endp;
|
|
||||||
int tmp = strtol( env, &endp, 10 );
|
|
||||||
if( tmp >= 0 && tmp <= 100 ) {
|
|
||||||
p[n++] = tmp;
|
|
||||||
} else {
|
|
||||||
errno = ERANGE;
|
|
||||||
perror( "KCONFIG_PROBABILITY" );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
env = (*endp == ':') ? endp+1 : endp;
|
|
||||||
if( n >=3 ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch( n ) {
|
|
||||||
case 1:
|
|
||||||
pby = p[0]; ptm = pby/2; pty = pby-ptm;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
pty = p[0]; ptm = p[1]; pby = pty + ptm;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
pby = p[0]; pty = p[1]; ptm = p[2];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( pty+ptm > 100 ) {
|
|
||||||
errno = ERANGE;
|
|
||||||
perror( "KCONFIG_PROBABILITY" );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bool has_changed = false;
|
|
||||||
|
|
||||||
sym_clear_all_valid();
|
|
||||||
|
|
||||||
for_all_symbols(i, sym) {
|
|
||||||
if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID))
|
|
||||||
continue;
|
|
||||||
switch (sym_get_type(sym)) {
|
|
||||||
case S_BOOLEAN:
|
|
||||||
case S_TRISTATE:
|
|
||||||
has_changed = true;
|
|
||||||
switch (mode) {
|
|
||||||
case def_yes:
|
|
||||||
sym->def[S_DEF_USER].tri = yes;
|
|
||||||
break;
|
|
||||||
case def_mod:
|
|
||||||
sym->def[S_DEF_USER].tri = mod;
|
|
||||||
break;
|
|
||||||
case def_no:
|
|
||||||
if (sym->flags & SYMBOL_ALLNOCONFIG_Y)
|
|
||||||
sym->def[S_DEF_USER].tri = yes;
|
|
||||||
else
|
|
||||||
sym->def[S_DEF_USER].tri = no;
|
|
||||||
break;
|
|
||||||
case def_random:
|
|
||||||
sym->def[S_DEF_USER].tri = no;
|
|
||||||
cnt = rand() % 100;
|
|
||||||
if (sym->type == S_TRISTATE) {
|
|
||||||
if (cnt < pty)
|
|
||||||
sym->def[S_DEF_USER].tri = yes;
|
|
||||||
else if (cnt < (pty+ptm))
|
|
||||||
sym->def[S_DEF_USER].tri = mod;
|
|
||||||
} else if (cnt < pby)
|
|
||||||
sym->def[S_DEF_USER].tri = yes;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!(sym_is_choice(sym) && mode == def_random))
|
|
||||||
sym->flags |= SYMBOL_DEF_USER;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We have different type of choice blocks.
|
|
||||||
* If curr.tri equals to mod then we can select several
|
|
||||||
* choice symbols in one block.
|
|
||||||
* In this case we do nothing.
|
|
||||||
* If curr.tri equals yes then only one symbol can be
|
|
||||||
* selected in a choice block and we set it to yes,
|
|
||||||
* and the rest to no.
|
|
||||||
*/
|
|
||||||
if (mode != def_random) {
|
|
||||||
for_all_symbols(i, csym) {
|
|
||||||
if ((sym_is_choice(csym) && !sym_has_value(csym)) ||
|
|
||||||
sym_is_choice_value(csym))
|
|
||||||
csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for_all_symbols(i, csym) {
|
|
||||||
if (sym_has_value(csym) || !sym_is_choice(csym))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
sym_calc_value(csym);
|
|
||||||
if (mode == def_random)
|
|
||||||
has_changed = randomize_choice_values(csym);
|
|
||||||
else {
|
|
||||||
set_all_choice_values(csym);
|
|
||||||
has_changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return has_changed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void conf_rewrite_mod_or_yes(enum conf_def_mode mode)
|
|
||||||
{
|
|
||||||
struct symbol *sym;
|
|
||||||
int i;
|
|
||||||
tristate old_val = (mode == def_y2m) ? yes : mod;
|
|
||||||
tristate new_val = (mode == def_y2m) ? mod : yes;
|
|
||||||
|
|
||||||
for_all_symbols(i, sym) {
|
|
||||||
if (sym_get_type(sym) == S_TRISTATE &&
|
|
||||||
sym->def[S_DEF_USER].tri == old_val) {
|
|
||||||
sym->def[S_DEF_USER].tri = new_val;
|
|
||||||
sym_add_change_count(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -156,9 +156,6 @@ struct symbol {
|
|||||||
/* choice values need to be set before calculating this symbol value */
|
/* choice values need to be set before calculating this symbol value */
|
||||||
#define SYMBOL_NEED_SET_CHOICE_VALUES 0x100000
|
#define SYMBOL_NEED_SET_CHOICE_VALUES 0x100000
|
||||||
|
|
||||||
/* Set symbol to y if allnoconfig; used for symbols that hide others */
|
|
||||||
#define SYMBOL_ALLNOCONFIG_Y 0x200000
|
|
||||||
|
|
||||||
#define SYMBOL_MAXLENGTH 256
|
#define SYMBOL_MAXLENGTH 256
|
||||||
#define SYMBOL_HASHSIZE 9973
|
#define SYMBOL_HASHSIZE 9973
|
||||||
|
|
||||||
@ -282,15 +279,12 @@ struct jump_key {
|
|||||||
int index;
|
int index;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define JUMP_NB 9
|
|
||||||
|
|
||||||
extern struct file *file_list;
|
extern struct file *file_list;
|
||||||
extern struct file *current_file;
|
extern struct file *current_file;
|
||||||
struct file *lookup_file(const char *name);
|
struct file *lookup_file(const char *name);
|
||||||
|
|
||||||
extern struct symbol symbol_yes, symbol_no, symbol_mod;
|
extern struct symbol symbol_yes, symbol_no, symbol_mod;
|
||||||
extern struct symbol *modules_sym;
|
extern struct symbol *modules_sym;
|
||||||
extern struct symbol *sym_defconfig_list;
|
|
||||||
extern int cdebug;
|
extern int cdebug;
|
||||||
struct expr *expr_alloc_symbol(struct symbol *sym);
|
struct expr *expr_alloc_symbol(struct symbol *sym);
|
||||||
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
|
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "images.h"
|
#include "images.h"
|
||||||
|
|
||||||
const char *xpm_load[] = {
|
const char * const xpm_load[] = {
|
||||||
"22 22 5 1",
|
"22 22 5 1",
|
||||||
". c None",
|
". c None",
|
||||||
"# c #000000",
|
"# c #000000",
|
||||||
@ -35,7 +35,7 @@ const char *xpm_load[] = {
|
|||||||
"###############.......",
|
"###############.......",
|
||||||
"......................"};
|
"......................"};
|
||||||
|
|
||||||
const char *xpm_save[] = {
|
const char * const xpm_save[] = {
|
||||||
"22 22 5 1",
|
"22 22 5 1",
|
||||||
". c None",
|
". c None",
|
||||||
"# c #000000",
|
"# c #000000",
|
||||||
@ -65,7 +65,7 @@ const char *xpm_save[] = {
|
|||||||
"..##################..",
|
"..##################..",
|
||||||
"......................"};
|
"......................"};
|
||||||
|
|
||||||
const char *xpm_back[] = {
|
const char * const xpm_back[] = {
|
||||||
"22 22 3 1",
|
"22 22 3 1",
|
||||||
". c None",
|
". c None",
|
||||||
"# c #000083",
|
"# c #000083",
|
||||||
@ -93,7 +93,7 @@ const char *xpm_back[] = {
|
|||||||
"......................",
|
"......................",
|
||||||
"......................"};
|
"......................"};
|
||||||
|
|
||||||
const char *xpm_tree_view[] = {
|
const char * const xpm_tree_view[] = {
|
||||||
"22 22 2 1",
|
"22 22 2 1",
|
||||||
". c None",
|
". c None",
|
||||||
"# c #000000",
|
"# c #000000",
|
||||||
@ -120,7 +120,7 @@ const char *xpm_tree_view[] = {
|
|||||||
"......................",
|
"......................",
|
||||||
"......................"};
|
"......................"};
|
||||||
|
|
||||||
const char *xpm_single_view[] = {
|
const char * const xpm_single_view[] = {
|
||||||
"22 22 2 1",
|
"22 22 2 1",
|
||||||
". c None",
|
". c None",
|
||||||
"# c #000000",
|
"# c #000000",
|
||||||
@ -147,7 +147,7 @@ const char *xpm_single_view[] = {
|
|||||||
"......................",
|
"......................",
|
||||||
"......................"};
|
"......................"};
|
||||||
|
|
||||||
const char *xpm_split_view[] = {
|
const char * const xpm_split_view[] = {
|
||||||
"22 22 2 1",
|
"22 22 2 1",
|
||||||
". c None",
|
". c None",
|
||||||
"# c #000000",
|
"# c #000000",
|
||||||
@ -174,7 +174,7 @@ const char *xpm_split_view[] = {
|
|||||||
"......................",
|
"......................",
|
||||||
"......................"};
|
"......................"};
|
||||||
|
|
||||||
const char *xpm_symbol_no[] = {
|
const char * const xpm_symbol_no[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -191,7 +191,7 @@ const char *xpm_symbol_no[] = {
|
|||||||
" .......... ",
|
" .......... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_symbol_mod[] = {
|
const char * const xpm_symbol_mod[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -208,7 +208,7 @@ const char *xpm_symbol_mod[] = {
|
|||||||
" .......... ",
|
" .......... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_symbol_yes[] = {
|
const char * const xpm_symbol_yes[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -225,7 +225,7 @@ const char *xpm_symbol_yes[] = {
|
|||||||
" .......... ",
|
" .......... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_choice_no[] = {
|
const char * const xpm_choice_no[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -242,7 +242,7 @@ const char *xpm_choice_no[] = {
|
|||||||
" .... ",
|
" .... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_choice_yes[] = {
|
const char * const xpm_choice_yes[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -259,7 +259,7 @@ const char *xpm_choice_yes[] = {
|
|||||||
" .... ",
|
" .... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_menu[] = {
|
const char * const xpm_menu[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -276,7 +276,7 @@ const char *xpm_menu[] = {
|
|||||||
" .......... ",
|
" .......... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_menu_inv[] = {
|
const char * const xpm_menu_inv[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -293,7 +293,7 @@ const char *xpm_menu_inv[] = {
|
|||||||
" .......... ",
|
" .......... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_menuback[] = {
|
const char * const xpm_menuback[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
@ -310,7 +310,7 @@ const char *xpm_menuback[] = {
|
|||||||
" .......... ",
|
" .......... ",
|
||||||
" "};
|
" "};
|
||||||
|
|
||||||
const char *xpm_void[] = {
|
const char * const xpm_void[] = {
|
||||||
"12 12 2 1",
|
"12 12 2 1",
|
||||||
" c white",
|
" c white",
|
||||||
". c black",
|
". c black",
|
||||||
|
|||||||
@ -10,21 +10,21 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern const char *xpm_load[];
|
extern const char * const xpm_load[];
|
||||||
extern const char *xpm_save[];
|
extern const char * const xpm_save[];
|
||||||
extern const char *xpm_back[];
|
extern const char * const xpm_back[];
|
||||||
extern const char *xpm_tree_view[];
|
extern const char * const xpm_tree_view[];
|
||||||
extern const char *xpm_single_view[];
|
extern const char * const xpm_single_view[];
|
||||||
extern const char *xpm_split_view[];
|
extern const char * const xpm_split_view[];
|
||||||
extern const char *xpm_symbol_no[];
|
extern const char * const xpm_symbol_no[];
|
||||||
extern const char *xpm_symbol_mod[];
|
extern const char * const xpm_symbol_mod[];
|
||||||
extern const char *xpm_symbol_yes[];
|
extern const char * const xpm_symbol_yes[];
|
||||||
extern const char *xpm_choice_no[];
|
extern const char * const xpm_choice_no[];
|
||||||
extern const char *xpm_choice_yes[];
|
extern const char * const xpm_choice_yes[];
|
||||||
extern const char *xpm_menu[];
|
extern const char * const xpm_menu[];
|
||||||
extern const char *xpm_menu_inv[];
|
extern const char * const xpm_menu_inv[];
|
||||||
extern const char *xpm_menuback[];
|
extern const char * const xpm_menuback[];
|
||||||
extern const char *xpm_void[];
|
extern const char * const xpm_void[];
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
9
scripts/config/internal.h
Normal file
9
scripts/config/internal.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
#ifndef INTERNAL_H
|
||||||
|
#define INTERNAL_H
|
||||||
|
|
||||||
|
struct menu;
|
||||||
|
|
||||||
|
extern struct menu *current_menu, *current_entry;
|
||||||
|
|
||||||
|
#endif /* INTERNAL_H */
|
||||||
@ -12,7 +12,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
|
||||||
#include <glob.h>
|
#include <glob.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
@ -38,7 +37,7 @@ struct buffer {
|
|||||||
YY_BUFFER_STATE state;
|
YY_BUFFER_STATE state;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct buffer *current_buf;
|
static struct buffer *current_buf;
|
||||||
|
|
||||||
static int last_ts, first_ts;
|
static int last_ts, first_ts;
|
||||||
|
|
||||||
@ -94,7 +93,6 @@ n [A-Za-z0-9_-]
|
|||||||
[ \t]* /* whitespaces */
|
[ \t]* /* whitespaces */
|
||||||
\\\n /* escaped new line */
|
\\\n /* escaped new line */
|
||||||
\n return T_EOL;
|
\n return T_EOL;
|
||||||
"allnoconfig_y" return T_ALLNOCONFIG_Y;
|
|
||||||
"bool" return T_BOOL;
|
"bool" return T_BOOL;
|
||||||
"choice" return T_CHOICE;
|
"choice" return T_CHOICE;
|
||||||
"comment" return T_COMMENT;
|
"comment" return T_COMMENT;
|
||||||
@ -102,12 +100,11 @@ n [A-Za-z0-9_-]
|
|||||||
"def_bool" return T_DEF_BOOL;
|
"def_bool" return T_DEF_BOOL;
|
||||||
"def_tristate" return T_DEF_TRISTATE;
|
"def_tristate" return T_DEF_TRISTATE;
|
||||||
"default" return T_DEFAULT;
|
"default" return T_DEFAULT;
|
||||||
"defconfig_list" return T_DEFCONFIG_LIST;
|
|
||||||
"depends" return T_DEPENDS;
|
"depends" return T_DEPENDS;
|
||||||
"endchoice" return T_ENDCHOICE;
|
"endchoice" return T_ENDCHOICE;
|
||||||
"endif" return T_ENDIF;
|
"endif" return T_ENDIF;
|
||||||
"endmenu" return T_ENDMENU;
|
"endmenu" return T_ENDMENU;
|
||||||
"help"|"---help---" return T_HELP;
|
"help" return T_HELP;
|
||||||
"hex" return T_HEX;
|
"hex" return T_HEX;
|
||||||
"if" return T_IF;
|
"if" return T_IF;
|
||||||
"imply" return T_IMPLY;
|
"imply" return T_IMPLY;
|
||||||
@ -117,7 +114,6 @@ n [A-Za-z0-9_-]
|
|||||||
"menuconfig" return T_MENUCONFIG;
|
"menuconfig" return T_MENUCONFIG;
|
||||||
"modules" return T_MODULES;
|
"modules" return T_MODULES;
|
||||||
"on" return T_ON;
|
"on" return T_ON;
|
||||||
"option" return T_OPTION;
|
|
||||||
"optional" return T_OPTIONAL;
|
"optional" return T_OPTIONAL;
|
||||||
"prompt" return T_PROMPT;
|
"prompt" return T_PROMPT;
|
||||||
"range" return T_RANGE;
|
"range" return T_RANGE;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,10 @@
|
|||||||
#ifndef LKC_H
|
#ifndef LKC_H
|
||||||
#define LKC_H
|
#define LKC_H
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -16,10 +20,6 @@ extern "C" {
|
|||||||
|
|
||||||
#define SRCTREE "srctree"
|
#define SRCTREE "srctree"
|
||||||
|
|
||||||
#ifndef PACKAGE
|
|
||||||
#define PACKAGE "linux"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CONFIG_
|
#ifndef CONFIG_
|
||||||
#define CONFIG_ "CONFIG_"
|
#define CONFIG_ "CONFIG_"
|
||||||
#endif
|
#endif
|
||||||
@ -30,16 +30,6 @@ static inline const char *CONFIG_prefix(void)
|
|||||||
#undef CONFIG_
|
#undef CONFIG_
|
||||||
#define CONFIG_ CONFIG_prefix()
|
#define CONFIG_ CONFIG_prefix()
|
||||||
|
|
||||||
enum conf_def_mode {
|
|
||||||
def_default,
|
|
||||||
def_yes,
|
|
||||||
def_mod,
|
|
||||||
def_y2m,
|
|
||||||
def_m2y,
|
|
||||||
def_no,
|
|
||||||
def_random
|
|
||||||
};
|
|
||||||
|
|
||||||
extern int yylineno;
|
extern int yylineno;
|
||||||
void zconfdump(FILE *out);
|
void zconfdump(FILE *out);
|
||||||
void zconf_starthelp(void);
|
void zconf_starthelp(void);
|
||||||
@ -52,10 +42,6 @@ extern int recursive_is_error;
|
|||||||
|
|
||||||
/* confdata.c */
|
/* confdata.c */
|
||||||
const char *conf_get_configname(void);
|
const char *conf_get_configname(void);
|
||||||
void sym_set_change_count(int count);
|
|
||||||
void sym_add_change_count(int count);
|
|
||||||
bool conf_set_all_new_symbols(enum conf_def_mode mode);
|
|
||||||
void conf_rewrite_mod_or_yes(enum conf_def_mode mode);
|
|
||||||
void set_all_choice_values(struct symbol *csym);
|
void set_all_choice_values(struct symbol *csym);
|
||||||
|
|
||||||
/* confdata.c and expr.c */
|
/* confdata.c and expr.c */
|
||||||
@ -67,24 +53,6 @@ static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
|
|||||||
fprintf(stderr, "Error in writing or end of file.\n");
|
fprintf(stderr, "Error in writing or end of file.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* menu.c */
|
|
||||||
void _menu_init(void);
|
|
||||||
void menu_warn(struct menu *menu, const char *fmt, ...);
|
|
||||||
struct menu *menu_add_menu(void);
|
|
||||||
void menu_end_menu(void);
|
|
||||||
void menu_add_entry(struct symbol *sym);
|
|
||||||
void menu_add_dep(struct expr *dep);
|
|
||||||
void menu_add_visibility(struct expr *dep);
|
|
||||||
struct property *menu_add_prop(enum prop_type type, struct expr *expr, struct expr *dep);
|
|
||||||
struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
|
|
||||||
void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
|
|
||||||
void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
|
|
||||||
void menu_add_option_modules(void);
|
|
||||||
void menu_add_option_defconfig_list(void);
|
|
||||||
void menu_add_option_allnoconfig_y(void);
|
|
||||||
void menu_finalize(struct menu *parent);
|
|
||||||
void menu_set_type(int type);
|
|
||||||
|
|
||||||
/* util.c */
|
/* util.c */
|
||||||
struct file *file_lookup(const char *name);
|
struct file *file_lookup(const char *name);
|
||||||
void *xmalloc(size_t size);
|
void *xmalloc(size_t size);
|
||||||
@ -111,6 +79,34 @@ void str_append(struct gstr *gs, const char *s);
|
|||||||
void str_printf(struct gstr *gs, const char *fmt, ...);
|
void str_printf(struct gstr *gs, const char *fmt, ...);
|
||||||
const char *str_get(struct gstr *gs);
|
const char *str_get(struct gstr *gs);
|
||||||
|
|
||||||
|
/* menu.c */
|
||||||
|
void _menu_init(void);
|
||||||
|
void menu_warn(struct menu *menu, const char *fmt, ...);
|
||||||
|
struct menu *menu_add_menu(void);
|
||||||
|
void menu_end_menu(void);
|
||||||
|
void menu_add_entry(struct symbol *sym);
|
||||||
|
void menu_add_dep(struct expr *dep);
|
||||||
|
void menu_add_visibility(struct expr *dep);
|
||||||
|
struct property *menu_add_prop(enum prop_type type, struct expr *expr, struct expr *dep);
|
||||||
|
struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
|
||||||
|
void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
|
||||||
|
void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
|
||||||
|
void menu_finalize(struct menu *parent);
|
||||||
|
void menu_set_type(int type);
|
||||||
|
|
||||||
|
extern struct menu rootmenu;
|
||||||
|
|
||||||
|
bool menu_is_empty(struct menu *menu);
|
||||||
|
bool menu_is_visible(struct menu *menu);
|
||||||
|
bool menu_has_prompt(struct menu *menu);
|
||||||
|
const char *menu_get_prompt(struct menu *menu);
|
||||||
|
struct menu *menu_get_root_menu(struct menu *menu);
|
||||||
|
struct menu *menu_get_parent_menu(struct menu *menu);
|
||||||
|
bool menu_has_help(struct menu *menu);
|
||||||
|
const char *menu_get_help(struct menu *menu);
|
||||||
|
struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head);
|
||||||
|
void menu_get_ext_help(struct menu *menu, struct gstr *help);
|
||||||
|
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
void sym_clear_all_valid(void);
|
void sym_clear_all_valid(void);
|
||||||
struct symbol *sym_choice_default(struct symbol *sym);
|
struct symbol *sym_choice_default(struct symbol *sym);
|
||||||
|
|||||||
@ -9,24 +9,11 @@ void conf_reset(int def);
|
|||||||
int conf_write_defconfig(const char *name);
|
int conf_write_defconfig(const char *name);
|
||||||
int conf_write(const char *name);
|
int conf_write(const char *name);
|
||||||
int conf_write_autoconf(int overwrite);
|
int conf_write_autoconf(int overwrite);
|
||||||
|
void conf_set_changed(bool val);
|
||||||
bool conf_get_changed(void);
|
bool conf_get_changed(void);
|
||||||
void conf_set_changed_callback(void (*fn)(void));
|
void conf_set_changed_callback(void (*fn)(void));
|
||||||
void conf_set_message_callback(void (*fn)(const char *s));
|
void conf_set_message_callback(void (*fn)(const char *s));
|
||||||
|
|
||||||
/* menu.c */
|
|
||||||
extern struct menu rootmenu;
|
|
||||||
|
|
||||||
bool menu_is_empty(struct menu *menu);
|
|
||||||
bool menu_is_visible(struct menu *menu);
|
|
||||||
bool menu_has_prompt(struct menu *menu);
|
|
||||||
const char * menu_get_prompt(struct menu *menu);
|
|
||||||
struct menu * menu_get_root_menu(struct menu *menu);
|
|
||||||
struct menu * menu_get_parent_menu(struct menu *menu);
|
|
||||||
bool menu_has_help(struct menu *menu);
|
|
||||||
const char * menu_get_help(struct menu *menu);
|
|
||||||
struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head);
|
|
||||||
void menu_get_ext_help(struct menu *menu, struct gstr *help);
|
|
||||||
|
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
|
extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
|
||||||
|
|
||||||
|
|||||||
@ -363,7 +363,7 @@ void print_title(WINDOW *dialog, const char *title, int width)
|
|||||||
/*
|
/*
|
||||||
* Print a string of text in a window, automatically wrap around to the
|
* Print a string of text in a window, automatically wrap around to the
|
||||||
* next line if the string is too long to fit on one line. Newline
|
* next line if the string is too long to fit on one line. Newline
|
||||||
* characters '\n' are propperly processed. We start on a new line
|
* characters '\n' are properly processed. We start on a new line
|
||||||
* if there is no room for at least 4 nonblanks following a double-space.
|
* if there is no room for at least 4 nonblanks following a double-space.
|
||||||
*/
|
*/
|
||||||
void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x)
|
void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x)
|
||||||
@ -541,7 +541,7 @@ int first_alpha(const char *string, const char *exempt)
|
|||||||
* lxdialog suggest <ESC> <ESC> which is correctly translated to two
|
* lxdialog suggest <ESC> <ESC> which is correctly translated to two
|
||||||
* times esc. But then we need to ignore the second esc to avoid stepping
|
* times esc. But then we need to ignore the second esc to avoid stepping
|
||||||
* out one menu too much. Filter away all escaped key sequences since
|
* out one menu too much. Filter away all escaped key sequences since
|
||||||
* keypad(FALSE) turn off ncurses support for escape sequences - and thats
|
* keypad(FALSE) turn off ncurses support for escape sequences - and that's
|
||||||
* needed to make notimeout() do as expected.
|
* needed to make notimeout() do as expected.
|
||||||
*/
|
*/
|
||||||
int on_key_esc(WINDOW *win)
|
int on_key_esc(WINDOW *win)
|
||||||
|
|||||||
@ -33,7 +33,9 @@ if [ -f /usr/include/ncurses/ncurses.h ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f /usr/include/ncurses.h ]; then
|
# As a final fallback before giving up, check if $HOSTCC knows of a default
|
||||||
|
# ncurses installation (e.g. from a vendor-specific sysroot).
|
||||||
|
if echo '#include <ncurses.h>' | ${HOSTCC} -E - >/dev/null 2>&1; then
|
||||||
echo cflags=\"-D_GNU_SOURCE\"
|
echo cflags=\"-D_GNU_SOURCE\"
|
||||||
echo libs=\"-lncurses\"
|
echo libs=\"-lncurses\"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@ -22,6 +22,8 @@
|
|||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
#include "lxdialog/dialog.h"
|
#include "lxdialog/dialog.h"
|
||||||
|
|
||||||
|
#define JUMP_NB 9
|
||||||
|
|
||||||
static const char mconf_readme[] =
|
static const char mconf_readme[] =
|
||||||
"OpenWrt config is based on Kernel kconfig\n"
|
"OpenWrt config is based on Kernel kconfig\n"
|
||||||
"so ipkg packages are referred here as modules.\n"
|
"so ipkg packages are referred here as modules.\n"
|
||||||
@ -300,17 +302,12 @@ static char filename[PATH_MAX+1];
|
|||||||
static void set_config_filename(const char *config_filename)
|
static void set_config_filename(const char *config_filename)
|
||||||
{
|
{
|
||||||
static char menu_backtitle[PATH_MAX+128];
|
static char menu_backtitle[PATH_MAX+128];
|
||||||
int size;
|
|
||||||
|
|
||||||
size = snprintf(menu_backtitle, sizeof(menu_backtitle),
|
snprintf(menu_backtitle, sizeof(menu_backtitle), "%s - %s",
|
||||||
"%s - %s", config_filename, rootmenu.prompt->text);
|
config_filename, rootmenu.prompt->text);
|
||||||
if (size >= sizeof(menu_backtitle))
|
|
||||||
menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
|
|
||||||
set_dialog_backtitle(menu_backtitle);
|
set_dialog_backtitle(menu_backtitle);
|
||||||
|
|
||||||
size = snprintf(filename, sizeof(filename), "%s", config_filename);
|
snprintf(filename, sizeof(filename), "%s", config_filename);
|
||||||
if (size >= sizeof(filename))
|
|
||||||
filename[sizeof(filename)-1] = '\0';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct subtitle_part {
|
struct subtitle_part {
|
||||||
@ -921,7 +918,7 @@ static void conf_load(void)
|
|||||||
return;
|
return;
|
||||||
if (!conf_read(dialog_input_result)) {
|
if (!conf_read(dialog_input_result)) {
|
||||||
set_config_filename(dialog_input_result);
|
set_config_filename(dialog_input_result);
|
||||||
sym_set_change_count(1);
|
conf_set_changed(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
show_textbox(NULL, "File does not exist!", 5, 38);
|
show_textbox(NULL, "File does not exist!", 5, 38);
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
static const char nohelp_text[] = "There is no help available for this option.";
|
static const char nohelp_text[] = "There is no help available for this option.";
|
||||||
|
|
||||||
@ -65,7 +66,8 @@ void menu_add_entry(struct symbol *sym)
|
|||||||
struct menu *menu_add_menu(void)
|
struct menu *menu_add_menu(void)
|
||||||
{
|
{
|
||||||
last_entry_ptr = ¤t_entry->list;
|
last_entry_ptr = ¤t_entry->list;
|
||||||
return current_menu = current_entry;
|
current_menu = current_entry;
|
||||||
|
return current_menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_end_menu(void)
|
void menu_end_menu(void)
|
||||||
@ -210,28 +212,6 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
|
|||||||
menu_add_prop(type, expr_alloc_symbol(sym), dep);
|
menu_add_prop(type, expr_alloc_symbol(sym), dep);
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_add_option_modules(void)
|
|
||||||
{
|
|
||||||
if (modules_sym)
|
|
||||||
zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'",
|
|
||||||
current_entry->sym->name, modules_sym->name);
|
|
||||||
modules_sym = current_entry->sym;
|
|
||||||
}
|
|
||||||
|
|
||||||
void menu_add_option_defconfig_list(void)
|
|
||||||
{
|
|
||||||
if (!sym_defconfig_list)
|
|
||||||
sym_defconfig_list = current_entry->sym;
|
|
||||||
else if (sym_defconfig_list != current_entry->sym)
|
|
||||||
zconf_error("trying to redefine defconfig symbol");
|
|
||||||
sym_defconfig_list->flags |= SYMBOL_NO_WRITE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void menu_add_option_allnoconfig_y(void)
|
|
||||||
{
|
|
||||||
current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
|
static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
|
||||||
{
|
{
|
||||||
return sym2->type == S_INT || sym2->type == S_HEX ||
|
return sym2->type == S_INT || sym2->type == S_HEX ||
|
||||||
|
|||||||
@ -271,7 +271,7 @@ static int mwin_max_cols;
|
|||||||
static MENU *curses_menu;
|
static MENU *curses_menu;
|
||||||
static ITEM *curses_menu_items[MAX_MENU_ITEMS];
|
static ITEM *curses_menu_items[MAX_MENU_ITEMS];
|
||||||
static struct mitem k_menu_items[MAX_MENU_ITEMS];
|
static struct mitem k_menu_items[MAX_MENU_ITEMS];
|
||||||
static int items_num;
|
static unsigned int items_num;
|
||||||
static int global_exit;
|
static int global_exit;
|
||||||
/* the currently selected button */
|
/* the currently selected button */
|
||||||
static const char *current_instructions = menu_instructions;
|
static const char *current_instructions = menu_instructions;
|
||||||
@ -373,18 +373,18 @@ static void print_function_line(void)
|
|||||||
int lines = getmaxy(stdscr);
|
int lines = getmaxy(stdscr);
|
||||||
|
|
||||||
for (i = 0; i < function_keys_num; i++) {
|
for (i = 0; i < function_keys_num; i++) {
|
||||||
(void) wattrset(main_window, attributes[FUNCTION_HIGHLIGHT]);
|
wattrset(main_window, attr_function_highlight);
|
||||||
mvwprintw(main_window, lines-3, offset,
|
mvwprintw(main_window, lines-3, offset,
|
||||||
"%s",
|
"%s",
|
||||||
function_keys[i].key_str);
|
function_keys[i].key_str);
|
||||||
(void) wattrset(main_window, attributes[FUNCTION_TEXT]);
|
wattrset(main_window, attr_function_text);
|
||||||
offset += strlen(function_keys[i].key_str);
|
offset += strlen(function_keys[i].key_str);
|
||||||
mvwprintw(main_window, lines-3,
|
mvwprintw(main_window, lines-3,
|
||||||
offset, "%s",
|
offset, "%s",
|
||||||
function_keys[i].func);
|
function_keys[i].func);
|
||||||
offset += strlen(function_keys[i].func) + skip;
|
offset += strlen(function_keys[i].func) + skip;
|
||||||
}
|
}
|
||||||
(void) wattrset(main_window, attributes[NORMAL]);
|
wattrset(main_window, attr_normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* help */
|
/* help */
|
||||||
@ -499,16 +499,20 @@ typedef enum {MATCH_TINKER_PATTERN_UP, MATCH_TINKER_PATTERN_DOWN,
|
|||||||
/* return the index of the matched item, or -1 if no such item exists */
|
/* return the index of the matched item, or -1 if no such item exists */
|
||||||
static int get_mext_match(const char *match_str, match_f flag)
|
static int get_mext_match(const char *match_str, match_f flag)
|
||||||
{
|
{
|
||||||
int match_start = item_index(current_item(curses_menu));
|
int match_start, index;
|
||||||
int index;
|
|
||||||
|
/* Do not search if the menu is empty (i.e. items_num == 0) */
|
||||||
|
match_start = item_index(current_item(curses_menu));
|
||||||
|
if (match_start == ERR)
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (flag == FIND_NEXT_MATCH_DOWN)
|
if (flag == FIND_NEXT_MATCH_DOWN)
|
||||||
++match_start;
|
++match_start;
|
||||||
else if (flag == FIND_NEXT_MATCH_UP)
|
else if (flag == FIND_NEXT_MATCH_UP)
|
||||||
--match_start;
|
--match_start;
|
||||||
|
|
||||||
|
match_start = (match_start + items_num) % items_num;
|
||||||
index = match_start;
|
index = match_start;
|
||||||
index = (index + items_num) % items_num;
|
|
||||||
while (true) {
|
while (true) {
|
||||||
char *str = k_menu_items[index].str;
|
char *str = k_menu_items[index].str;
|
||||||
if (strcasestr(str, match_str) != NULL)
|
if (strcasestr(str, match_str) != NULL)
|
||||||
@ -630,19 +634,12 @@ static int item_is_tag(char tag)
|
|||||||
|
|
||||||
static char filename[PATH_MAX+1];
|
static char filename[PATH_MAX+1];
|
||||||
static char menu_backtitle[PATH_MAX+128];
|
static char menu_backtitle[PATH_MAX+128];
|
||||||
static const char *set_config_filename(const char *config_filename)
|
static void set_config_filename(const char *config_filename)
|
||||||
{
|
{
|
||||||
int size;
|
snprintf(menu_backtitle, sizeof(menu_backtitle), "%s - %s",
|
||||||
|
config_filename, rootmenu.prompt->text);
|
||||||
|
|
||||||
size = snprintf(menu_backtitle, sizeof(menu_backtitle),
|
snprintf(filename, sizeof(filename), "%s", config_filename);
|
||||||
"%s - %s", config_filename, rootmenu.prompt->text);
|
|
||||||
if (size >= sizeof(menu_backtitle))
|
|
||||||
menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
|
|
||||||
|
|
||||||
size = snprintf(filename, sizeof(filename), "%s", config_filename);
|
|
||||||
if (size >= sizeof(filename))
|
|
||||||
filename[sizeof(filename)-1] = '\0';
|
|
||||||
return menu_backtitle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return = 0 means we are successful.
|
/* return = 0 means we are successful.
|
||||||
@ -758,7 +755,6 @@ static void build_conf(struct menu *menu)
|
|||||||
switch (ptype) {
|
switch (ptype) {
|
||||||
case P_MENU:
|
case P_MENU:
|
||||||
child_count++;
|
child_count++;
|
||||||
prompt = prompt;
|
|
||||||
if (single_menu_mode) {
|
if (single_menu_mode) {
|
||||||
item_make(menu, 'm',
|
item_make(menu, 'm',
|
||||||
"%s%*c%s",
|
"%s%*c%s",
|
||||||
@ -960,16 +956,15 @@ static void show_menu(const char *prompt, const char *instructions,
|
|||||||
current_instructions = instructions;
|
current_instructions = instructions;
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
(void) wattrset(main_window, attributes[NORMAL]);
|
print_in_middle(stdscr, 1, getmaxx(stdscr),
|
||||||
print_in_middle(stdscr, 1, 0, getmaxx(stdscr),
|
|
||||||
menu_backtitle,
|
menu_backtitle,
|
||||||
attributes[MAIN_HEADING]);
|
attr_main_heading);
|
||||||
|
|
||||||
(void) wattrset(main_window, attributes[MAIN_MENU_BOX]);
|
wattrset(main_window, attr_main_menu_box);
|
||||||
box(main_window, 0, 0);
|
box(main_window, 0, 0);
|
||||||
(void) wattrset(main_window, attributes[MAIN_MENU_HEADING]);
|
wattrset(main_window, attr_main_menu_heading);
|
||||||
mvwprintw(main_window, 0, 3, " %s ", prompt);
|
mvwprintw(main_window, 0, 3, " %s ", prompt);
|
||||||
(void) wattrset(main_window, attributes[NORMAL]);
|
wattrset(main_window, attr_normal);
|
||||||
|
|
||||||
set_menu_items(curses_menu, curses_menu_items);
|
set_menu_items(curses_menu, curses_menu_items);
|
||||||
|
|
||||||
@ -1072,7 +1067,6 @@ static int do_match(int key, struct match_state *state, int *ans)
|
|||||||
static void conf(struct menu *menu)
|
static void conf(struct menu *menu)
|
||||||
{
|
{
|
||||||
struct menu *submenu = NULL;
|
struct menu *submenu = NULL;
|
||||||
const char *prompt = menu_get_prompt(menu);
|
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
int res;
|
int res;
|
||||||
int current_index = 0;
|
int current_index = 0;
|
||||||
@ -1090,8 +1084,7 @@ static void conf(struct menu *menu)
|
|||||||
if (!child_count)
|
if (!child_count)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
show_menu(prompt ? prompt : "Main Menu",
|
show_menu(menu_get_prompt(menu), menu_instructions,
|
||||||
menu_instructions,
|
|
||||||
current_index, &last_top_row);
|
current_index, &last_top_row);
|
||||||
keypad((menu_win(curses_menu)), TRUE);
|
keypad((menu_win(curses_menu)), TRUE);
|
||||||
while (!global_exit) {
|
while (!global_exit) {
|
||||||
@ -1418,7 +1411,7 @@ static void conf_load(void)
|
|||||||
return;
|
return;
|
||||||
if (!conf_read(dialog_input_result)) {
|
if (!conf_read(dialog_input_result)) {
|
||||||
set_config_filename(dialog_input_result);
|
set_config_filename(dialog_input_result);
|
||||||
sym_set_change_count(1);
|
conf_set_changed(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
btn_dialog(main_window, "File does not exist!", 0);
|
btn_dialog(main_window, "File does not exist!", 0);
|
||||||
@ -1537,9 +1530,9 @@ int main(int ac, char **av)
|
|||||||
menu_opts_on(curses_menu, O_NONCYCLIC);
|
menu_opts_on(curses_menu, O_NONCYCLIC);
|
||||||
menu_opts_on(curses_menu, O_IGNORECASE);
|
menu_opts_on(curses_menu, O_IGNORECASE);
|
||||||
set_menu_mark(curses_menu, " ");
|
set_menu_mark(curses_menu, " ");
|
||||||
set_menu_fore(curses_menu, attributes[MAIN_MENU_FORE]);
|
set_menu_fore(curses_menu, attr_main_menu_fore);
|
||||||
set_menu_back(curses_menu, attributes[MAIN_MENU_BACK]);
|
set_menu_back(curses_menu, attr_main_menu_back);
|
||||||
set_menu_grey(curses_menu, attributes[MAIN_MENU_GREY]);
|
set_menu_grey(curses_menu, attr_main_menu_grey);
|
||||||
|
|
||||||
set_config_filename(conf_get_configname());
|
set_config_filename(conf_get_configname());
|
||||||
setup_windows();
|
setup_windows();
|
||||||
|
|||||||
@ -7,169 +7,120 @@
|
|||||||
#include "nconf.h"
|
#include "nconf.h"
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
/* a list of all the different widgets we use */
|
int attr_normal;
|
||||||
attributes_t attributes[ATTR_MAX+1] = {0};
|
int attr_main_heading;
|
||||||
|
int attr_main_menu_box;
|
||||||
|
int attr_main_menu_fore;
|
||||||
|
int attr_main_menu_back;
|
||||||
|
int attr_main_menu_grey;
|
||||||
|
int attr_main_menu_heading;
|
||||||
|
int attr_scrollwin_text;
|
||||||
|
int attr_scrollwin_heading;
|
||||||
|
int attr_scrollwin_box;
|
||||||
|
int attr_dialog_text;
|
||||||
|
int attr_dialog_menu_fore;
|
||||||
|
int attr_dialog_menu_back;
|
||||||
|
int attr_dialog_box;
|
||||||
|
int attr_input_box;
|
||||||
|
int attr_input_heading;
|
||||||
|
int attr_input_text;
|
||||||
|
int attr_input_field;
|
||||||
|
int attr_function_text;
|
||||||
|
int attr_function_highlight;
|
||||||
|
|
||||||
/* available colors:
|
#define COLOR_ATTR(_at, _fg, _bg, _hl) \
|
||||||
COLOR_BLACK 0
|
{ .attr = &(_at), .has_color = true, .color_fg = _fg, .color_bg = _bg, .highlight = _hl }
|
||||||
COLOR_RED 1
|
#define NO_COLOR_ATTR(_at, _hl) \
|
||||||
COLOR_GREEN 2
|
{ .attr = &(_at), .has_color = false, .highlight = _hl }
|
||||||
COLOR_YELLOW 3
|
#define COLOR_DEFAULT -1
|
||||||
COLOR_BLUE 4
|
|
||||||
COLOR_MAGENTA 5
|
|
||||||
COLOR_CYAN 6
|
|
||||||
COLOR_WHITE 7
|
|
||||||
*/
|
|
||||||
static void set_normal_colors(void)
|
|
||||||
{
|
|
||||||
init_pair(NORMAL, -1, -1);
|
|
||||||
init_pair(MAIN_HEADING, COLOR_MAGENTA, -1);
|
|
||||||
|
|
||||||
/* FORE is for the selected item */
|
struct nconf_attr_param {
|
||||||
init_pair(MAIN_MENU_FORE, -1, -1);
|
int *attr;
|
||||||
/* BACK for all the rest */
|
bool has_color;
|
||||||
init_pair(MAIN_MENU_BACK, -1, -1);
|
int color_fg;
|
||||||
init_pair(MAIN_MENU_GREY, -1, -1);
|
int color_bg;
|
||||||
init_pair(MAIN_MENU_HEADING, COLOR_GREEN, -1);
|
int highlight;
|
||||||
init_pair(MAIN_MENU_BOX, COLOR_YELLOW, -1);
|
};
|
||||||
|
|
||||||
init_pair(SCROLLWIN_TEXT, -1, -1);
|
static const struct nconf_attr_param color_theme_params[] = {
|
||||||
init_pair(SCROLLWIN_HEADING, COLOR_GREEN, -1);
|
COLOR_ATTR(attr_normal, COLOR_DEFAULT, COLOR_DEFAULT, A_NORMAL),
|
||||||
init_pair(SCROLLWIN_BOX, COLOR_YELLOW, -1);
|
COLOR_ATTR(attr_main_heading, COLOR_MAGENTA, COLOR_DEFAULT, A_BOLD | A_UNDERLINE),
|
||||||
|
COLOR_ATTR(attr_main_menu_box, COLOR_YELLOW, COLOR_DEFAULT, A_NORMAL),
|
||||||
|
COLOR_ATTR(attr_main_menu_fore, COLOR_DEFAULT, COLOR_DEFAULT, A_REVERSE),
|
||||||
|
COLOR_ATTR(attr_main_menu_back, COLOR_DEFAULT, COLOR_DEFAULT, A_NORMAL),
|
||||||
|
COLOR_ATTR(attr_main_menu_grey, COLOR_DEFAULT, COLOR_DEFAULT, A_NORMAL),
|
||||||
|
COLOR_ATTR(attr_main_menu_heading, COLOR_GREEN, COLOR_DEFAULT, A_BOLD),
|
||||||
|
COLOR_ATTR(attr_scrollwin_text, COLOR_DEFAULT, COLOR_DEFAULT, A_NORMAL),
|
||||||
|
COLOR_ATTR(attr_scrollwin_heading, COLOR_GREEN, COLOR_DEFAULT, A_BOLD),
|
||||||
|
COLOR_ATTR(attr_scrollwin_box, COLOR_YELLOW, COLOR_DEFAULT, A_BOLD),
|
||||||
|
COLOR_ATTR(attr_dialog_text, COLOR_DEFAULT, COLOR_DEFAULT, A_BOLD),
|
||||||
|
COLOR_ATTR(attr_dialog_menu_fore, COLOR_RED, COLOR_DEFAULT, A_STANDOUT),
|
||||||
|
COLOR_ATTR(attr_dialog_menu_back, COLOR_YELLOW, COLOR_DEFAULT, A_NORMAL),
|
||||||
|
COLOR_ATTR(attr_dialog_box, COLOR_YELLOW, COLOR_DEFAULT, A_BOLD),
|
||||||
|
COLOR_ATTR(attr_input_box, COLOR_YELLOW, COLOR_DEFAULT, A_NORMAL),
|
||||||
|
COLOR_ATTR(attr_input_heading, COLOR_GREEN, COLOR_DEFAULT, A_BOLD),
|
||||||
|
COLOR_ATTR(attr_input_text, COLOR_DEFAULT, COLOR_DEFAULT, A_NORMAL),
|
||||||
|
COLOR_ATTR(attr_input_field, COLOR_DEFAULT, COLOR_DEFAULT, A_UNDERLINE),
|
||||||
|
COLOR_ATTR(attr_function_text, COLOR_YELLOW, COLOR_DEFAULT, A_REVERSE),
|
||||||
|
COLOR_ATTR(attr_function_highlight, COLOR_DEFAULT, COLOR_DEFAULT, A_BOLD),
|
||||||
|
{ /* sentinel */ }
|
||||||
|
};
|
||||||
|
|
||||||
init_pair(DIALOG_TEXT, -1, -1);
|
static const struct nconf_attr_param no_color_theme_params[] = {
|
||||||
init_pair(DIALOG_BOX, COLOR_YELLOW, -1);
|
NO_COLOR_ATTR(attr_normal, A_NORMAL),
|
||||||
init_pair(DIALOG_MENU_BACK, COLOR_YELLOW, -1);
|
NO_COLOR_ATTR(attr_main_heading, A_BOLD | A_UNDERLINE),
|
||||||
init_pair(DIALOG_MENU_FORE, COLOR_RED, -1);
|
NO_COLOR_ATTR(attr_main_menu_box, A_NORMAL),
|
||||||
|
NO_COLOR_ATTR(attr_main_menu_fore, A_STANDOUT),
|
||||||
init_pair(INPUT_BOX, COLOR_YELLOW, -1);
|
NO_COLOR_ATTR(attr_main_menu_back, A_NORMAL),
|
||||||
init_pair(INPUT_HEADING, COLOR_GREEN, -1);
|
NO_COLOR_ATTR(attr_main_menu_grey, A_NORMAL),
|
||||||
init_pair(INPUT_TEXT, -1, -1);
|
NO_COLOR_ATTR(attr_main_menu_heading, A_BOLD),
|
||||||
init_pair(INPUT_FIELD, -1, -1);
|
NO_COLOR_ATTR(attr_scrollwin_text, A_NORMAL),
|
||||||
|
NO_COLOR_ATTR(attr_scrollwin_heading, A_BOLD),
|
||||||
init_pair(FUNCTION_HIGHLIGHT, -1, -1);
|
NO_COLOR_ATTR(attr_scrollwin_box, A_BOLD),
|
||||||
init_pair(FUNCTION_TEXT, COLOR_YELLOW, -1);
|
NO_COLOR_ATTR(attr_dialog_text, A_NORMAL),
|
||||||
}
|
NO_COLOR_ATTR(attr_dialog_menu_fore, A_STANDOUT),
|
||||||
|
NO_COLOR_ATTR(attr_dialog_menu_back, A_NORMAL),
|
||||||
/* available attributes:
|
NO_COLOR_ATTR(attr_dialog_box, A_BOLD),
|
||||||
A_NORMAL Normal display (no highlight)
|
NO_COLOR_ATTR(attr_input_box, A_BOLD),
|
||||||
A_STANDOUT Best highlighting mode of the terminal.
|
NO_COLOR_ATTR(attr_input_heading, A_BOLD),
|
||||||
A_UNDERLINE Underlining
|
NO_COLOR_ATTR(attr_input_text, A_NORMAL),
|
||||||
A_REVERSE Reverse video
|
NO_COLOR_ATTR(attr_input_field, A_UNDERLINE),
|
||||||
A_BLINK Blinking
|
NO_COLOR_ATTR(attr_function_text, A_REVERSE),
|
||||||
A_DIM Half bright
|
NO_COLOR_ATTR(attr_function_highlight, A_BOLD),
|
||||||
A_BOLD Extra bright or bold
|
{ /* sentinel */ }
|
||||||
A_PROTECT Protected mode
|
};
|
||||||
A_INVIS Invisible or blank mode
|
|
||||||
A_ALTCHARSET Alternate character set
|
|
||||||
A_CHARTEXT Bit-mask to extract a character
|
|
||||||
COLOR_PAIR(n) Color-pair number n
|
|
||||||
*/
|
|
||||||
static void normal_color_theme(void)
|
|
||||||
{
|
|
||||||
/* automatically add color... */
|
|
||||||
#define mkattr(name, attr) do { \
|
|
||||||
attributes[name] = attr | COLOR_PAIR(name); } while (0)
|
|
||||||
mkattr(NORMAL, NORMAL);
|
|
||||||
mkattr(MAIN_HEADING, A_BOLD | A_UNDERLINE);
|
|
||||||
|
|
||||||
mkattr(MAIN_MENU_FORE, A_REVERSE);
|
|
||||||
mkattr(MAIN_MENU_BACK, A_NORMAL);
|
|
||||||
mkattr(MAIN_MENU_GREY, A_NORMAL);
|
|
||||||
mkattr(MAIN_MENU_HEADING, A_BOLD);
|
|
||||||
mkattr(MAIN_MENU_BOX, A_NORMAL);
|
|
||||||
|
|
||||||
mkattr(SCROLLWIN_TEXT, A_NORMAL);
|
|
||||||
mkattr(SCROLLWIN_HEADING, A_BOLD);
|
|
||||||
mkattr(SCROLLWIN_BOX, A_BOLD);
|
|
||||||
|
|
||||||
mkattr(DIALOG_TEXT, A_BOLD);
|
|
||||||
mkattr(DIALOG_BOX, A_BOLD);
|
|
||||||
mkattr(DIALOG_MENU_FORE, A_STANDOUT);
|
|
||||||
mkattr(DIALOG_MENU_BACK, A_NORMAL);
|
|
||||||
|
|
||||||
mkattr(INPUT_BOX, A_NORMAL);
|
|
||||||
mkattr(INPUT_HEADING, A_BOLD);
|
|
||||||
mkattr(INPUT_TEXT, A_NORMAL);
|
|
||||||
mkattr(INPUT_FIELD, A_UNDERLINE);
|
|
||||||
|
|
||||||
mkattr(FUNCTION_HIGHLIGHT, A_BOLD);
|
|
||||||
mkattr(FUNCTION_TEXT, A_REVERSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void no_colors_theme(void)
|
|
||||||
{
|
|
||||||
/* automatically add highlight, no color */
|
|
||||||
#define mkattrn(name, attr) { attributes[name] = attr; }
|
|
||||||
|
|
||||||
mkattrn(NORMAL, NORMAL);
|
|
||||||
mkattrn(MAIN_HEADING, A_BOLD | A_UNDERLINE);
|
|
||||||
|
|
||||||
mkattrn(MAIN_MENU_FORE, A_STANDOUT);
|
|
||||||
mkattrn(MAIN_MENU_BACK, A_NORMAL);
|
|
||||||
mkattrn(MAIN_MENU_GREY, A_NORMAL);
|
|
||||||
mkattrn(MAIN_MENU_HEADING, A_BOLD);
|
|
||||||
mkattrn(MAIN_MENU_BOX, A_NORMAL);
|
|
||||||
|
|
||||||
mkattrn(SCROLLWIN_TEXT, A_NORMAL);
|
|
||||||
mkattrn(SCROLLWIN_HEADING, A_BOLD);
|
|
||||||
mkattrn(SCROLLWIN_BOX, A_BOLD);
|
|
||||||
|
|
||||||
mkattrn(DIALOG_TEXT, A_NORMAL);
|
|
||||||
mkattrn(DIALOG_BOX, A_BOLD);
|
|
||||||
mkattrn(DIALOG_MENU_FORE, A_STANDOUT);
|
|
||||||
mkattrn(DIALOG_MENU_BACK, A_NORMAL);
|
|
||||||
|
|
||||||
mkattrn(INPUT_BOX, A_BOLD);
|
|
||||||
mkattrn(INPUT_HEADING, A_BOLD);
|
|
||||||
mkattrn(INPUT_TEXT, A_NORMAL);
|
|
||||||
mkattrn(INPUT_FIELD, A_UNDERLINE);
|
|
||||||
|
|
||||||
mkattrn(FUNCTION_HIGHLIGHT, A_BOLD);
|
|
||||||
mkattrn(FUNCTION_TEXT, A_REVERSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_colors(void)
|
void set_colors(void)
|
||||||
{
|
{
|
||||||
|
const struct nconf_attr_param *p;
|
||||||
|
int pair = 0;
|
||||||
|
|
||||||
|
if (has_colors()) {
|
||||||
start_color();
|
start_color();
|
||||||
use_default_colors();
|
use_default_colors();
|
||||||
set_normal_colors();
|
p = color_theme_params;
|
||||||
if (has_colors()) {
|
|
||||||
normal_color_theme();
|
|
||||||
} else {
|
} else {
|
||||||
/* give defaults */
|
p = no_color_theme_params;
|
||||||
no_colors_theme();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (; p->attr; p++) {
|
||||||
|
int attr = p->highlight;
|
||||||
|
|
||||||
|
if (p->has_color) {
|
||||||
|
pair++;
|
||||||
|
init_pair(pair, p->color_fg, p->color_bg);
|
||||||
|
attr |= COLOR_PAIR(pair);
|
||||||
|
}
|
||||||
|
|
||||||
|
*p->attr = attr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* this changes the windows attributes !!! */
|
/* this changes the windows attributes !!! */
|
||||||
void print_in_middle(WINDOW *win,
|
void print_in_middle(WINDOW *win, int y, int width, const char *str, int attrs)
|
||||||
int starty,
|
{
|
||||||
int startx,
|
wattrset(win, attrs);
|
||||||
int width,
|
mvwprintw(win, y, (width - strlen(str)) / 2, "%s", str);
|
||||||
const char *string,
|
|
||||||
chtype color)
|
|
||||||
{ int length, x, y;
|
|
||||||
float temp;
|
|
||||||
|
|
||||||
|
|
||||||
if (win == NULL)
|
|
||||||
win = stdscr;
|
|
||||||
getyx(win, y, x);
|
|
||||||
if (startx != 0)
|
|
||||||
x = startx;
|
|
||||||
if (starty != 0)
|
|
||||||
y = starty;
|
|
||||||
if (width == 0)
|
|
||||||
width = 80;
|
|
||||||
|
|
||||||
length = strlen(string);
|
|
||||||
temp = (width - length) / 2;
|
|
||||||
x = startx + (int)temp;
|
|
||||||
(void) wattrset(win, color);
|
|
||||||
mvwprintw(win, y, x, "%s", string);
|
|
||||||
refresh();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_line_no(const char *text)
|
int get_line_no(const char *text)
|
||||||
@ -294,14 +245,14 @@ int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
|
|||||||
msg_win = derwin(win, win_rows-2, msg_width, 1,
|
msg_win = derwin(win, win_rows-2, msg_width, 1,
|
||||||
1+(total_width+2-msg_width)/2);
|
1+(total_width+2-msg_width)/2);
|
||||||
|
|
||||||
set_menu_fore(menu, attributes[DIALOG_MENU_FORE]);
|
set_menu_fore(menu, attr_dialog_menu_fore);
|
||||||
set_menu_back(menu, attributes[DIALOG_MENU_BACK]);
|
set_menu_back(menu, attr_dialog_menu_back);
|
||||||
|
|
||||||
(void) wattrset(win, attributes[DIALOG_BOX]);
|
wattrset(win, attr_dialog_box);
|
||||||
box(win, 0, 0);
|
box(win, 0, 0);
|
||||||
|
|
||||||
/* print message */
|
/* print message */
|
||||||
(void) wattrset(msg_win, attributes[DIALOG_TEXT]);
|
wattrset(msg_win, attr_dialog_text);
|
||||||
fill_window(msg_win, msg);
|
fill_window(msg_win, msg);
|
||||||
|
|
||||||
set_menu_win(menu, win);
|
set_menu_win(menu, win);
|
||||||
@ -405,16 +356,16 @@ int dialog_inputbox(WINDOW *main_window,
|
|||||||
form_win = derwin(win, 1, prompt_width, prompt_lines+3, 2);
|
form_win = derwin(win, 1, prompt_width, prompt_lines+3, 2);
|
||||||
keypad(form_win, TRUE);
|
keypad(form_win, TRUE);
|
||||||
|
|
||||||
(void) wattrset(form_win, attributes[INPUT_FIELD]);
|
wattrset(form_win, attr_input_field);
|
||||||
|
|
||||||
(void) wattrset(win, attributes[INPUT_BOX]);
|
wattrset(win, attr_input_box);
|
||||||
box(win, 0, 0);
|
box(win, 0, 0);
|
||||||
(void) wattrset(win, attributes[INPUT_HEADING]);
|
wattrset(win, attr_input_heading);
|
||||||
if (title)
|
if (title)
|
||||||
mvwprintw(win, 0, 3, "%s", title);
|
mvwprintw(win, 0, 3, "%s", title);
|
||||||
|
|
||||||
/* print message */
|
/* print message */
|
||||||
(void) wattrset(prompt_win, attributes[INPUT_TEXT]);
|
wattrset(prompt_win, attr_input_text);
|
||||||
fill_window(prompt_win, prompt);
|
fill_window(prompt_win, prompt);
|
||||||
|
|
||||||
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
||||||
@ -576,7 +527,7 @@ void show_scroll_win(WINDOW *main_window,
|
|||||||
|
|
||||||
/* create the pad */
|
/* create the pad */
|
||||||
pad = newpad(total_lines+10, total_cols+10);
|
pad = newpad(total_lines+10, total_cols+10);
|
||||||
(void) wattrset(pad, attributes[SCROLLWIN_TEXT]);
|
wattrset(pad, attr_scrollwin_text);
|
||||||
fill_window(pad, text);
|
fill_window(pad, text);
|
||||||
|
|
||||||
win_lines = min(total_lines+4, lines-2);
|
win_lines = min(total_lines+4, lines-2);
|
||||||
@ -591,9 +542,9 @@ void show_scroll_win(WINDOW *main_window,
|
|||||||
win = newwin(win_lines, win_cols, y, x);
|
win = newwin(win_lines, win_cols, y, x);
|
||||||
keypad(win, TRUE);
|
keypad(win, TRUE);
|
||||||
/* show the help in the help window, and show the help panel */
|
/* show the help in the help window, and show the help panel */
|
||||||
(void) wattrset(win, attributes[SCROLLWIN_BOX]);
|
wattrset(win, attr_scrollwin_box);
|
||||||
box(win, 0, 0);
|
box(win, 0, 0);
|
||||||
(void) wattrset(win, attributes[SCROLLWIN_HEADING]);
|
wattrset(win, attr_scrollwin_heading);
|
||||||
mvwprintw(win, 0, 3, " %s ", title);
|
mvwprintw(win, 0, 3, " %s ", title);
|
||||||
panel = new_panel(win);
|
panel = new_panel(win);
|
||||||
|
|
||||||
@ -604,10 +555,9 @@ void show_scroll_win(WINDOW *main_window,
|
|||||||
text_cols, 0);
|
text_cols, 0);
|
||||||
print_in_middle(win,
|
print_in_middle(win,
|
||||||
text_lines+2,
|
text_lines+2,
|
||||||
0,
|
|
||||||
text_cols,
|
text_cols,
|
||||||
"<OK>",
|
"<OK>",
|
||||||
attributes[DIALOG_MENU_FORE]);
|
attr_dialog_menu_fore);
|
||||||
wrefresh(win);
|
wrefresh(win);
|
||||||
|
|
||||||
res = wgetch(win);
|
res = wgetch(win);
|
||||||
|
|||||||
@ -32,30 +32,26 @@
|
|||||||
typeof(b) _b = b;\
|
typeof(b) _b = b;\
|
||||||
_a < _b ? _a : _b; })
|
_a < _b ? _a : _b; })
|
||||||
|
|
||||||
typedef enum {
|
extern int attr_normal;
|
||||||
NORMAL = 1,
|
extern int attr_main_heading;
|
||||||
MAIN_HEADING,
|
extern int attr_main_menu_box;
|
||||||
MAIN_MENU_BOX,
|
extern int attr_main_menu_fore;
|
||||||
MAIN_MENU_FORE,
|
extern int attr_main_menu_back;
|
||||||
MAIN_MENU_BACK,
|
extern int attr_main_menu_grey;
|
||||||
MAIN_MENU_GREY,
|
extern int attr_main_menu_heading;
|
||||||
MAIN_MENU_HEADING,
|
extern int attr_scrollwin_text;
|
||||||
SCROLLWIN_TEXT,
|
extern int attr_scrollwin_heading;
|
||||||
SCROLLWIN_HEADING,
|
extern int attr_scrollwin_box;
|
||||||
SCROLLWIN_BOX,
|
extern int attr_dialog_text;
|
||||||
DIALOG_TEXT,
|
extern int attr_dialog_menu_fore;
|
||||||
DIALOG_MENU_FORE,
|
extern int attr_dialog_menu_back;
|
||||||
DIALOG_MENU_BACK,
|
extern int attr_dialog_box;
|
||||||
DIALOG_BOX,
|
extern int attr_input_box;
|
||||||
INPUT_BOX,
|
extern int attr_input_heading;
|
||||||
INPUT_HEADING,
|
extern int attr_input_text;
|
||||||
INPUT_TEXT,
|
extern int attr_input_field;
|
||||||
INPUT_FIELD,
|
extern int attr_function_text;
|
||||||
FUNCTION_TEXT,
|
extern int attr_function_highlight;
|
||||||
FUNCTION_HIGHLIGHT,
|
|
||||||
ATTR_MAX
|
|
||||||
} attributes_t;
|
|
||||||
extern attributes_t attributes[];
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
F_HELP = 1,
|
F_HELP = 1,
|
||||||
@ -72,12 +68,7 @@ typedef enum {
|
|||||||
void set_colors(void);
|
void set_colors(void);
|
||||||
|
|
||||||
/* this changes the windows attributes !!! */
|
/* this changes the windows attributes !!! */
|
||||||
void print_in_middle(WINDOW *win,
|
void print_in_middle(WINDOW *win, int y, int width, const char *str, int attrs);
|
||||||
int starty,
|
|
||||||
int startx,
|
|
||||||
int width,
|
|
||||||
const char *string,
|
|
||||||
chtype color);
|
|
||||||
int get_line_length(const char *line);
|
int get_line_length(const char *line);
|
||||||
int get_line_no(const char *text);
|
int get_line_no(const char *text);
|
||||||
const char *get_line(const char *text, int line_no);
|
const char *get_line(const char *text, int line_no);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,9 @@
|
|||||||
/* A Bison parser, made by GNU Bison 3.1. */
|
/* A Bison parser, made by GNU Bison 3.7.6. */
|
||||||
|
|
||||||
/* Bison interface for Yacc-like parsers in C
|
/* Bison interface for Yacc-like parsers in C
|
||||||
|
|
||||||
Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
|
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
|
||||||
|
Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -15,7 +16,7 @@
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
/* As a special exception, you may create a larger work that contains
|
/* As a special exception, you may create a larger work that contains
|
||||||
part or all of the Bison parser skeleton and distribute that work
|
part or all of the Bison parser skeleton and distribute that work
|
||||||
@ -30,6 +31,10 @@
|
|||||||
This special exception was added by the Free Software Foundation in
|
This special exception was added by the Free Software Foundation in
|
||||||
version 2.2 of Bison. */
|
version 2.2 of Bison. */
|
||||||
|
|
||||||
|
/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
|
||||||
|
especially those whose name start with YY_ or yy_. They are
|
||||||
|
private implementation details that can be changed or removed. */
|
||||||
|
|
||||||
#ifndef YY_YY_PARSER_TAB_H_INCLUDED
|
#ifndef YY_YY_PARSER_TAB_H_INCLUDED
|
||||||
# define YY_YY_PARSER_TAB_H_INCLUDED
|
# define YY_YY_PARSER_TAB_H_INCLUDED
|
||||||
/* Debug traces. */
|
/* Debug traces. */
|
||||||
@ -40,72 +45,72 @@
|
|||||||
extern int yydebug;
|
extern int yydebug;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Token type. */
|
/* Token kinds. */
|
||||||
#ifndef YYTOKENTYPE
|
#ifndef YYTOKENTYPE
|
||||||
# define YYTOKENTYPE
|
# define YYTOKENTYPE
|
||||||
enum yytokentype
|
enum yytokentype
|
||||||
{
|
{
|
||||||
T_HELPTEXT = 258,
|
YYEMPTY = -2,
|
||||||
T_WORD = 259,
|
YYEOF = 0, /* "end of file" */
|
||||||
T_WORD_QUOTE = 260,
|
YYerror = 256, /* error */
|
||||||
T_ALLNOCONFIG_Y = 261,
|
YYUNDEF = 257, /* "invalid token" */
|
||||||
T_BOOL = 262,
|
T_HELPTEXT = 258, /* T_HELPTEXT */
|
||||||
T_CHOICE = 263,
|
T_WORD = 259, /* T_WORD */
|
||||||
T_CLOSE_PAREN = 264,
|
T_WORD_QUOTE = 260, /* T_WORD_QUOTE */
|
||||||
T_COLON_EQUAL = 265,
|
T_BOOL = 261, /* T_BOOL */
|
||||||
T_COMMENT = 266,
|
T_CHOICE = 262, /* T_CHOICE */
|
||||||
T_CONFIG = 267,
|
T_CLOSE_PAREN = 263, /* T_CLOSE_PAREN */
|
||||||
T_DEFAULT = 268,
|
T_COLON_EQUAL = 264, /* T_COLON_EQUAL */
|
||||||
T_DEFCONFIG_LIST = 269,
|
T_COMMENT = 265, /* T_COMMENT */
|
||||||
T_DEF_BOOL = 270,
|
T_CONFIG = 266, /* T_CONFIG */
|
||||||
T_DEF_TRISTATE = 271,
|
T_DEFAULT = 267, /* T_DEFAULT */
|
||||||
T_DEPENDS = 272,
|
T_DEF_BOOL = 268, /* T_DEF_BOOL */
|
||||||
T_ENDCHOICE = 273,
|
T_DEF_TRISTATE = 269, /* T_DEF_TRISTATE */
|
||||||
T_ENDIF = 274,
|
T_DEPENDS = 270, /* T_DEPENDS */
|
||||||
T_ENDMENU = 275,
|
T_ENDCHOICE = 271, /* T_ENDCHOICE */
|
||||||
T_HELP = 276,
|
T_ENDIF = 272, /* T_ENDIF */
|
||||||
T_HEX = 277,
|
T_ENDMENU = 273, /* T_ENDMENU */
|
||||||
T_IF = 278,
|
T_HELP = 274, /* T_HELP */
|
||||||
T_IMPLY = 279,
|
T_HEX = 275, /* T_HEX */
|
||||||
T_INT = 280,
|
T_IF = 276, /* T_IF */
|
||||||
T_MAINMENU = 281,
|
T_IMPLY = 277, /* T_IMPLY */
|
||||||
T_MENU = 282,
|
T_INT = 278, /* T_INT */
|
||||||
T_MENUCONFIG = 283,
|
T_MAINMENU = 279, /* T_MAINMENU */
|
||||||
T_MODULES = 284,
|
T_MENU = 280, /* T_MENU */
|
||||||
T_ON = 285,
|
T_MENUCONFIG = 281, /* T_MENUCONFIG */
|
||||||
T_OPEN_PAREN = 286,
|
T_MODULES = 282, /* T_MODULES */
|
||||||
T_OPTION = 287,
|
T_ON = 283, /* T_ON */
|
||||||
T_OPTIONAL = 288,
|
T_OPEN_PAREN = 284, /* T_OPEN_PAREN */
|
||||||
T_PLUS_EQUAL = 289,
|
T_OPTIONAL = 285, /* T_OPTIONAL */
|
||||||
T_PROMPT = 290,
|
T_PLUS_EQUAL = 286, /* T_PLUS_EQUAL */
|
||||||
T_RANGE = 291,
|
T_PROMPT = 287, /* T_PROMPT */
|
||||||
T_RESET = 292,
|
T_RANGE = 288, /* T_RANGE */
|
||||||
T_SELECT = 293,
|
T_RESET = 289, /* T_RESET */
|
||||||
T_SOURCE = 294,
|
T_SELECT = 290, /* T_SELECT */
|
||||||
T_STRING = 295,
|
T_SOURCE = 291, /* T_SOURCE */
|
||||||
T_TRISTATE = 296,
|
T_STRING = 292, /* T_STRING */
|
||||||
T_VISIBLE = 297,
|
T_TRISTATE = 293, /* T_TRISTATE */
|
||||||
T_EOL = 298,
|
T_VISIBLE = 294, /* T_VISIBLE */
|
||||||
T_ASSIGN_VAL = 299,
|
T_EOL = 295, /* T_EOL */
|
||||||
T_OR = 300,
|
T_ASSIGN_VAL = 296, /* T_ASSIGN_VAL */
|
||||||
T_AND = 301,
|
T_OR = 297, /* T_OR */
|
||||||
T_EQUAL = 302,
|
T_AND = 298, /* T_AND */
|
||||||
T_UNEQUAL = 303,
|
T_EQUAL = 299, /* T_EQUAL */
|
||||||
T_LESS = 304,
|
T_UNEQUAL = 300, /* T_UNEQUAL */
|
||||||
T_LESS_EQUAL = 305,
|
T_LESS = 301, /* T_LESS */
|
||||||
T_GREATER = 306,
|
T_LESS_EQUAL = 302, /* T_LESS_EQUAL */
|
||||||
T_GREATER_EQUAL = 307,
|
T_GREATER = 303, /* T_GREATER */
|
||||||
T_NOT = 308
|
T_GREATER_EQUAL = 304, /* T_GREATER_EQUAL */
|
||||||
|
T_NOT = 305 /* T_NOT */
|
||||||
};
|
};
|
||||||
|
typedef enum yytokentype yytoken_kind_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Value type. */
|
/* Value type. */
|
||||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||||
|
|
||||||
union YYSTYPE
|
union YYSTYPE
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
char *string;
|
char *string;
|
||||||
struct symbol *symbol;
|
struct symbol *symbol;
|
||||||
struct expr *expr;
|
struct expr *expr;
|
||||||
@ -115,7 +120,6 @@ union YYSTYPE
|
|||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef union YYSTYPE YYSTYPE;
|
typedef union YYSTYPE YYSTYPE;
|
||||||
# define YYSTYPE_IS_TRIVIAL 1
|
# define YYSTYPE_IS_TRIVIAL 1
|
||||||
# define YYSTYPE_IS_DECLARED 1
|
# define YYSTYPE_IS_DECLARED 1
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
|
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
|
||||||
|
|
||||||
@ -28,7 +29,7 @@ static bool zconf_endtoken(const char *tokenname,
|
|||||||
|
|
||||||
struct symbol *symbol_hash[SYMBOL_HASHSIZE];
|
struct symbol *symbol_hash[SYMBOL_HASHSIZE];
|
||||||
|
|
||||||
static struct menu *current_menu, *current_entry;
|
struct menu *current_menu, *current_entry;
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
@ -45,7 +46,6 @@ static struct menu *current_menu, *current_entry;
|
|||||||
%token <string> T_HELPTEXT
|
%token <string> T_HELPTEXT
|
||||||
%token <string> T_WORD
|
%token <string> T_WORD
|
||||||
%token <string> T_WORD_QUOTE
|
%token <string> T_WORD_QUOTE
|
||||||
%token T_ALLNOCONFIG_Y
|
|
||||||
%token T_BOOL
|
%token T_BOOL
|
||||||
%token T_CHOICE
|
%token T_CHOICE
|
||||||
%token T_CLOSE_PAREN
|
%token T_CLOSE_PAREN
|
||||||
@ -53,7 +53,6 @@ static struct menu *current_menu, *current_entry;
|
|||||||
%token T_COMMENT
|
%token T_COMMENT
|
||||||
%token T_CONFIG
|
%token T_CONFIG
|
||||||
%token T_DEFAULT
|
%token T_DEFAULT
|
||||||
%token T_DEFCONFIG_LIST
|
|
||||||
%token T_DEF_BOOL
|
%token T_DEF_BOOL
|
||||||
%token T_DEF_TRISTATE
|
%token T_DEF_TRISTATE
|
||||||
%token T_DEPENDS
|
%token T_DEPENDS
|
||||||
@ -71,7 +70,6 @@ static struct menu *current_menu, *current_entry;
|
|||||||
%token T_MODULES
|
%token T_MODULES
|
||||||
%token T_ON
|
%token T_ON
|
||||||
%token T_OPEN_PAREN
|
%token T_OPEN_PAREN
|
||||||
%token T_OPTION
|
|
||||||
%token T_OPTIONAL
|
%token T_OPTIONAL
|
||||||
%token T_PLUS_EQUAL
|
%token T_PLUS_EQUAL
|
||||||
%token T_PROMPT
|
%token T_PROMPT
|
||||||
@ -120,20 +118,24 @@ mainmenu_stmt: T_MAINMENU T_WORD_QUOTE T_EOL
|
|||||||
|
|
||||||
stmt_list:
|
stmt_list:
|
||||||
/* empty */
|
/* empty */
|
||||||
| stmt_list common_stmt
|
| stmt_list assignment_stmt
|
||||||
| stmt_list choice_stmt
|
| stmt_list choice_stmt
|
||||||
|
| stmt_list comment_stmt
|
||||||
|
| stmt_list config_stmt
|
||||||
|
| stmt_list if_stmt
|
||||||
| stmt_list menu_stmt
|
| stmt_list menu_stmt
|
||||||
|
| stmt_list menuconfig_stmt
|
||||||
|
| stmt_list source_stmt
|
||||||
| stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
|
| stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
|
||||||
| stmt_list error T_EOL { zconf_error("invalid statement"); }
|
| stmt_list error T_EOL { zconf_error("invalid statement"); }
|
||||||
;
|
;
|
||||||
|
|
||||||
common_stmt:
|
stmt_list_in_choice:
|
||||||
if_stmt
|
/* empty */
|
||||||
| comment_stmt
|
| stmt_list_in_choice comment_stmt
|
||||||
| config_stmt
|
| stmt_list_in_choice config_stmt
|
||||||
| menuconfig_stmt
|
| stmt_list_in_choice if_stmt_in_choice
|
||||||
| source_stmt
|
| stmt_list_in_choice error T_EOL { zconf_error("invalid statement"); }
|
||||||
| assignment_stmt
|
|
||||||
;
|
;
|
||||||
|
|
||||||
/* config/menuconfig entry */
|
/* config/menuconfig entry */
|
||||||
@ -215,19 +217,12 @@ config_option: T_RANGE symbol symbol if_expr T_EOL
|
|||||||
printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
|
printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
|
||||||
};
|
};
|
||||||
|
|
||||||
config_option: T_OPTION T_MODULES T_EOL
|
config_option: T_MODULES T_EOL
|
||||||
{
|
{
|
||||||
menu_add_option_modules();
|
if (modules_sym)
|
||||||
};
|
zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'",
|
||||||
|
current_entry->sym->name, modules_sym->name);
|
||||||
config_option: T_OPTION T_DEFCONFIG_LIST T_EOL
|
modules_sym = current_entry->sym;
|
||||||
{
|
|
||||||
menu_add_option_defconfig_list();
|
|
||||||
};
|
|
||||||
|
|
||||||
config_option: T_OPTION T_ALLNOCONFIG_Y T_EOL
|
|
||||||
{
|
|
||||||
menu_add_option_allnoconfig_y();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* choice entry */
|
/* choice entry */
|
||||||
@ -255,7 +250,7 @@ choice_end: end
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
choice_stmt: choice_entry choice_block choice_end
|
choice_stmt: choice_entry stmt_list_in_choice choice_end
|
||||||
;
|
;
|
||||||
|
|
||||||
choice_option_list:
|
choice_option_list:
|
||||||
@ -311,11 +306,6 @@ default:
|
|||||||
| T_DEF_BOOL { $$ = S_BOOLEAN; }
|
| T_DEF_BOOL { $$ = S_BOOLEAN; }
|
||||||
| T_DEF_TRISTATE { $$ = S_TRISTATE; }
|
| T_DEF_TRISTATE { $$ = S_TRISTATE; }
|
||||||
|
|
||||||
choice_block:
|
|
||||||
/* empty */
|
|
||||||
| choice_block common_stmt
|
|
||||||
;
|
|
||||||
|
|
||||||
/* if entry */
|
/* if entry */
|
||||||
|
|
||||||
if_entry: T_IF expr T_EOL
|
if_entry: T_IF expr T_EOL
|
||||||
@ -337,6 +327,9 @@ if_end: end
|
|||||||
if_stmt: if_entry stmt_list if_end
|
if_stmt: if_entry stmt_list if_end
|
||||||
;
|
;
|
||||||
|
|
||||||
|
if_stmt_in_choice: if_entry stmt_list_in_choice if_end
|
||||||
|
;
|
||||||
|
|
||||||
/* menu entry */
|
/* menu entry */
|
||||||
|
|
||||||
menu: T_MENU T_WORD_QUOTE T_EOL
|
menu: T_MENU T_WORD_QUOTE T_EOL
|
||||||
@ -517,7 +510,7 @@ void conf_parse(const char *name)
|
|||||||
}
|
}
|
||||||
if (yynerrs)
|
if (yynerrs)
|
||||||
exit(1);
|
exit(1);
|
||||||
sym_set_change_count(1);
|
conf_set_changed(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool zconf_endtoken(const char *tokenname,
|
static bool zconf_endtoken(const char *tokenname,
|
||||||
@ -723,5 +716,3 @@ void zconfdump(FILE *out)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "menu.c"
|
|
||||||
|
|||||||
@ -114,7 +114,7 @@ static char *do_error_if(int argc, char *argv[])
|
|||||||
if (!strcmp(argv[0], "y"))
|
if (!strcmp(argv[0], "y"))
|
||||||
pperror("%s", argv[1]);
|
pperror("%s", argv[1]);
|
||||||
|
|
||||||
return NULL;
|
return xstrdup("");
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *do_filename(int argc, char *argv[])
|
static char *do_filename(int argc, char *argv[])
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
PKG="Qt5Core Qt5Gui Qt5Widgets"
|
PKG="Qt5Core Qt5Gui Qt5Widgets"
|
||||||
PKG2="QtCore QtGui"
|
|
||||||
|
|
||||||
if [ -z "$(command -v pkg-config)" ]; then
|
if [ -z "$(command -v pkg-config)" ]; then
|
||||||
echo >&2 "*"
|
echo >&2 "*"
|
||||||
@ -12,21 +11,14 @@ if [ -z "$(command -v pkg-config)" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if pkg-config --exists $PKG; then
|
if pkg-config --exists $PKG; then
|
||||||
echo cflags=\"-std=c++11 -fPIC $(pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets)\"
|
echo cflags=\"-std=c++11 -fPIC $(pkg-config --cflags $PKG)\"
|
||||||
echo libs=\"$(pkg-config --libs $PKG)\"
|
echo libs=\"$(pkg-config --libs $PKG)\"
|
||||||
echo moc=\"$(pkg-config --variable=host_bins Qt5Core)/moc\"
|
echo moc=\"$(pkg-config --variable=host_bins Qt5Core)/moc\"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if pkg-config --exists $PKG2; then
|
|
||||||
echo cflags=\"$(pkg-config --cflags $PKG2)\"
|
|
||||||
echo libs=\"$(pkg-config --libs $PKG2)\"
|
|
||||||
echo moc=\"$(pkg-config --variable=moc_location QtCore)\"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo >&2 "*"
|
echo >&2 "*"
|
||||||
echo >&2 "* Could not find Qt via pkg-config."
|
echo >&2 "* Could not find Qt5 via pkg-config."
|
||||||
echo >&2 "* Please install either Qt 4.8 or 5.x. and make sure it's in PKG_CONFIG_PATH"
|
echo >&2 "* Please install Qt5 and make sure it's in PKG_CONFIG_PATH"
|
||||||
echo >&2 "*"
|
echo >&2 "*"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -3,23 +3,22 @@
|
|||||||
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
|
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <QTextBrowser>
|
|
||||||
#include <QTreeWidget>
|
|
||||||
#include <QMainWindow>
|
|
||||||
#include <QHeaderView>
|
|
||||||
#include <qsettings.h>
|
|
||||||
#include <QPushButton>
|
|
||||||
#include <QSettings>
|
|
||||||
#include <QLineEdit>
|
|
||||||
#include <QSplitter>
|
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QHeaderView>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QSplitter>
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
|
#include <QTextBrowser>
|
||||||
|
#include <QTreeWidget>
|
||||||
|
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
|
|
||||||
class ConfigView;
|
|
||||||
class ConfigList;
|
class ConfigList;
|
||||||
class ConfigItem;
|
class ConfigItem;
|
||||||
class ConfigLineEdit;
|
|
||||||
class ConfigMainWindow;
|
class ConfigMainWindow;
|
||||||
|
|
||||||
class ConfigSettings : public QSettings {
|
class ConfigSettings : public QSettings {
|
||||||
@ -30,7 +29,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum colIdx {
|
enum colIdx {
|
||||||
promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr
|
promptColIdx, nameColIdx, dataColIdx
|
||||||
};
|
};
|
||||||
enum listMode {
|
enum listMode {
|
||||||
singleMode, menuMode, symbolMode, fullMode, listMode
|
singleMode, menuMode, symbolMode, fullMode, listMode
|
||||||
@ -43,13 +42,16 @@ class ConfigList : public QTreeWidget {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
typedef class QTreeWidget Parent;
|
typedef class QTreeWidget Parent;
|
||||||
public:
|
public:
|
||||||
ConfigList(ConfigView* p, const char *name = 0);
|
ConfigList(QWidget *parent, const char *name = 0);
|
||||||
|
~ConfigList();
|
||||||
void reinit(void);
|
void reinit(void);
|
||||||
ConfigView* parent(void) const
|
|
||||||
{
|
|
||||||
return (ConfigView*)Parent::parent();
|
|
||||||
}
|
|
||||||
ConfigItem* findConfigItem(struct menu *);
|
ConfigItem* findConfigItem(struct menu *);
|
||||||
|
void setSelected(QTreeWidgetItem *item, bool enable) {
|
||||||
|
for (int i = 0; i < selectedItems().size(); i++)
|
||||||
|
selectedItems().at(i)->setSelected(false);
|
||||||
|
|
||||||
|
item->setSelected(enable);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void keyPressEvent(QKeyEvent *e);
|
void keyPressEvent(QKeyEvent *e);
|
||||||
@ -63,61 +65,52 @@ protected:
|
|||||||
public slots:
|
public slots:
|
||||||
void setRootMenu(struct menu *menu);
|
void setRootMenu(struct menu *menu);
|
||||||
|
|
||||||
void updateList(ConfigItem *item);
|
void updateList();
|
||||||
void setValue(ConfigItem* item, tristate val);
|
void setValue(ConfigItem* item, tristate val);
|
||||||
void changeValue(ConfigItem* item);
|
void changeValue(ConfigItem* item);
|
||||||
void updateSelection(void);
|
void updateSelection(void);
|
||||||
void saveSettings(void);
|
void saveSettings(void);
|
||||||
|
void setOptionMode(QAction *action);
|
||||||
|
void setShowName(bool on);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void menuChanged(struct menu *menu);
|
void menuChanged(struct menu *menu);
|
||||||
void menuSelected(struct menu *menu);
|
void menuSelected(struct menu *menu);
|
||||||
|
void itemSelected(struct menu *menu);
|
||||||
void parentSelected(void);
|
void parentSelected(void);
|
||||||
void gotFocus(struct menu *);
|
void gotFocus(struct menu *);
|
||||||
|
void showNameChanged(bool on);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void updateListAll(void)
|
void updateListAll(void)
|
||||||
{
|
{
|
||||||
updateAll = true;
|
updateAll = true;
|
||||||
updateList(NULL);
|
updateList();
|
||||||
updateAll = false;
|
updateAll = false;
|
||||||
}
|
}
|
||||||
ConfigList* listView()
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
ConfigItem* firstChild() const
|
|
||||||
{
|
|
||||||
return (ConfigItem *)children().first();
|
|
||||||
}
|
|
||||||
void addColumn(colIdx idx)
|
|
||||||
{
|
|
||||||
showColumn(idx);
|
|
||||||
}
|
|
||||||
void removeColumn(colIdx idx)
|
|
||||||
{
|
|
||||||
hideColumn(idx);
|
|
||||||
}
|
|
||||||
void setAllOpen(bool open);
|
void setAllOpen(bool open);
|
||||||
void setParentMenu(void);
|
void setParentMenu(void);
|
||||||
|
|
||||||
bool menuSkip(struct menu *);
|
bool menuSkip(struct menu *);
|
||||||
|
|
||||||
void updateMenuList(ConfigItem *parent, struct menu*);
|
void updateMenuList(ConfigItem *parent, struct menu*);
|
||||||
void updateMenuList(ConfigList *parent, struct menu*);
|
void updateMenuList(struct menu *menu);
|
||||||
|
|
||||||
bool updateAll;
|
bool updateAll;
|
||||||
|
|
||||||
QPixmap symbolYesPix, symbolModPix, symbolNoPix;
|
bool showName;
|
||||||
QPixmap choiceYesPix, choiceNoPix;
|
|
||||||
QPixmap menuPix, menuInvPix, menuBackPix, voidPix;
|
|
||||||
|
|
||||||
bool showName, showRange, showData;
|
|
||||||
enum listMode mode;
|
enum listMode mode;
|
||||||
enum optionMode optMode;
|
enum optionMode optMode;
|
||||||
struct menu *rootEntry;
|
struct menu *rootEntry;
|
||||||
QPalette disabledColorGroup;
|
QPalette disabledColorGroup;
|
||||||
QPalette inactivedColorGroup;
|
QPalette inactivedColorGroup;
|
||||||
QMenu* headerPopup;
|
QMenu* headerPopup;
|
||||||
|
|
||||||
|
static QList<ConfigList *> allLists;
|
||||||
|
static void updateListForAll();
|
||||||
|
static void updateListAllForAll();
|
||||||
|
|
||||||
|
static QAction *showNormalAction, *showAllAction, *showPromptAction;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConfigItem : public QTreeWidgetItem {
|
class ConfigItem : public QTreeWidgetItem {
|
||||||
@ -140,7 +133,6 @@ public:
|
|||||||
}
|
}
|
||||||
~ConfigItem(void);
|
~ConfigItem(void);
|
||||||
void init(void);
|
void init(void);
|
||||||
void okRename(int col);
|
|
||||||
void updateMenu(void);
|
void updateMenu(void);
|
||||||
void testUpdateMenu(bool v);
|
void testUpdateMenu(bool v);
|
||||||
ConfigList* listView() const
|
ConfigList* listView() const
|
||||||
@ -165,82 +157,36 @@ public:
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
void setText(colIdx idx, const QString& text)
|
|
||||||
{
|
|
||||||
Parent::setText(idx, text);
|
|
||||||
}
|
|
||||||
QString text(colIdx idx) const
|
|
||||||
{
|
|
||||||
return Parent::text(idx);
|
|
||||||
}
|
|
||||||
void setPixmap(colIdx idx, const QIcon &icon)
|
|
||||||
{
|
|
||||||
Parent::setIcon(idx, icon);
|
|
||||||
}
|
|
||||||
const QIcon pixmap(colIdx idx) const
|
|
||||||
{
|
|
||||||
return icon(idx);
|
|
||||||
}
|
|
||||||
// TODO: Implement paintCell
|
// TODO: Implement paintCell
|
||||||
|
|
||||||
ConfigItem* nextItem;
|
ConfigItem* nextItem;
|
||||||
struct menu *menu;
|
struct menu *menu;
|
||||||
bool visible;
|
bool visible;
|
||||||
bool goParent;
|
bool goParent;
|
||||||
|
|
||||||
|
static QIcon symbolYesIcon, symbolModIcon, symbolNoIcon;
|
||||||
|
static QIcon choiceYesIcon, choiceNoIcon;
|
||||||
|
static QIcon menuIcon, menubackIcon;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConfigLineEdit : public QLineEdit {
|
class ConfigItemDelegate : public QStyledItemDelegate
|
||||||
Q_OBJECT
|
|
||||||
typedef class QLineEdit Parent;
|
|
||||||
public:
|
|
||||||
ConfigLineEdit(ConfigView* parent);
|
|
||||||
ConfigView* parent(void) const
|
|
||||||
{
|
{
|
||||||
return (ConfigView*)Parent::parent();
|
private:
|
||||||
}
|
struct menu *menu;
|
||||||
void show(ConfigItem *i);
|
|
||||||
void keyPressEvent(QKeyEvent *e);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ConfigItem *item;
|
ConfigItemDelegate(QObject *parent = nullptr)
|
||||||
};
|
: QStyledItemDelegate(parent) {}
|
||||||
|
QWidget *createEditor(QWidget *parent,
|
||||||
class ConfigView : public QWidget {
|
const QStyleOptionViewItem &option,
|
||||||
Q_OBJECT
|
const QModelIndex &index) const override;
|
||||||
typedef class QWidget Parent;
|
void setModelData(QWidget *editor, QAbstractItemModel *model,
|
||||||
public:
|
const QModelIndex &index) const override;
|
||||||
ConfigView(QWidget* parent, const char *name = 0);
|
|
||||||
~ConfigView(void);
|
|
||||||
static void updateList(ConfigItem* item);
|
|
||||||
static void updateListAll(void);
|
|
||||||
|
|
||||||
bool showName(void) const { return list->showName; }
|
|
||||||
bool showRange(void) const { return list->showRange; }
|
|
||||||
bool showData(void) const { return list->showData; }
|
|
||||||
public slots:
|
|
||||||
void setShowName(bool);
|
|
||||||
void setShowRange(bool);
|
|
||||||
void setShowData(bool);
|
|
||||||
void setOptionMode(QAction *);
|
|
||||||
signals:
|
|
||||||
void showNameChanged(bool);
|
|
||||||
void showRangeChanged(bool);
|
|
||||||
void showDataChanged(bool);
|
|
||||||
public:
|
|
||||||
ConfigList* list;
|
|
||||||
ConfigLineEdit* lineEdit;
|
|
||||||
|
|
||||||
static ConfigView* viewList;
|
|
||||||
ConfigView* nextView;
|
|
||||||
|
|
||||||
static QAction *showNormalAction;
|
|
||||||
static QAction *showAllAction;
|
|
||||||
static QAction *showPromptAction;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConfigInfoView : public QTextBrowser {
|
class ConfigInfoView : public QTextBrowser {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
typedef class QTextBrowser Parent;
|
typedef class QTextBrowser Parent;
|
||||||
|
QMenu *contextMenu;
|
||||||
public:
|
public:
|
||||||
ConfigInfoView(QWidget* parent, const char *name = 0);
|
ConfigInfoView(QWidget* parent, const char *name = 0);
|
||||||
bool showDebug(void) const { return _showDebug; }
|
bool showDebug(void) const { return _showDebug; }
|
||||||
@ -249,6 +195,7 @@ public slots:
|
|||||||
void setInfo(struct menu *menu);
|
void setInfo(struct menu *menu);
|
||||||
void saveSettings(void);
|
void saveSettings(void);
|
||||||
void setShowDebug(bool);
|
void setShowDebug(bool);
|
||||||
|
void clicked (const QUrl &url);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void showDebugChanged(bool);
|
void showDebugChanged(bool);
|
||||||
@ -260,8 +207,7 @@ protected:
|
|||||||
QString debug_info(struct symbol *sym);
|
QString debug_info(struct symbol *sym);
|
||||||
static QString print_filter(const QString &str);
|
static QString print_filter(const QString &str);
|
||||||
static void expr_print_help(void *data, struct symbol *sym, const char *str);
|
static void expr_print_help(void *data, struct symbol *sym, const char *str);
|
||||||
QMenu *createStandardContextMenu(const QPoint & pos);
|
void contextMenuEvent(QContextMenuEvent *event);
|
||||||
void contextMenuEvent(QContextMenuEvent *e);
|
|
||||||
|
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct menu *_menu;
|
struct menu *_menu;
|
||||||
@ -272,7 +218,7 @@ class ConfigSearchWindow : public QDialog {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
typedef class QDialog Parent;
|
typedef class QDialog Parent;
|
||||||
public:
|
public:
|
||||||
ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0);
|
ConfigSearchWindow(ConfigMainWindow *parent);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void saveSettings(void);
|
void saveSettings(void);
|
||||||
@ -282,7 +228,7 @@ protected:
|
|||||||
QLineEdit* editField;
|
QLineEdit* editField;
|
||||||
QPushButton* searchButton;
|
QPushButton* searchButton;
|
||||||
QSplitter* split;
|
QSplitter* split;
|
||||||
ConfigView* list;
|
ConfigList *list;
|
||||||
ConfigInfoView* info;
|
ConfigInfoView* info;
|
||||||
|
|
||||||
struct symbol **result;
|
struct symbol **result;
|
||||||
@ -298,6 +244,7 @@ public:
|
|||||||
ConfigMainWindow(void);
|
ConfigMainWindow(void);
|
||||||
public slots:
|
public slots:
|
||||||
void changeMenu(struct menu *);
|
void changeMenu(struct menu *);
|
||||||
|
void changeItens(struct menu *);
|
||||||
void setMenuLink(struct menu *);
|
void setMenuLink(struct menu *);
|
||||||
void listFocusChanged(void);
|
void listFocusChanged(void);
|
||||||
void goBack(void);
|
void goBack(void);
|
||||||
@ -316,12 +263,9 @@ protected:
|
|||||||
void closeEvent(QCloseEvent *e);
|
void closeEvent(QCloseEvent *e);
|
||||||
|
|
||||||
ConfigSearchWindow *searchWindow;
|
ConfigSearchWindow *searchWindow;
|
||||||
ConfigView *menuView;
|
|
||||||
ConfigList *menuList;
|
ConfigList *menuList;
|
||||||
ConfigView *configView;
|
|
||||||
ConfigList *configList;
|
ConfigList *configList;
|
||||||
ConfigInfoView *helpText;
|
ConfigInfoView *helpText;
|
||||||
QToolBar *toolBar;
|
|
||||||
QAction *backAction;
|
QAction *backAction;
|
||||||
QAction *singleViewAction;
|
QAction *singleViewAction;
|
||||||
QAction *splitViewAction;
|
QAction *splitViewAction;
|
||||||
|
|||||||
@ -3,11 +3,11 @@
|
|||||||
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
|
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
#include <sys/utsname.h>
|
|
||||||
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
@ -15,23 +15,28 @@ struct symbol symbol_yes = {
|
|||||||
.name = "y",
|
.name = "y",
|
||||||
.curr = { "y", yes },
|
.curr = { "y", yes },
|
||||||
.flags = SYMBOL_CONST|SYMBOL_VALID,
|
.flags = SYMBOL_CONST|SYMBOL_VALID,
|
||||||
}, symbol_mod = {
|
};
|
||||||
|
|
||||||
|
struct symbol symbol_mod = {
|
||||||
.name = "m",
|
.name = "m",
|
||||||
.curr = { "m", mod },
|
.curr = { "m", mod },
|
||||||
.flags = SYMBOL_CONST|SYMBOL_VALID,
|
.flags = SYMBOL_CONST|SYMBOL_VALID,
|
||||||
}, symbol_no = {
|
};
|
||||||
|
|
||||||
|
struct symbol symbol_no = {
|
||||||
.name = "n",
|
.name = "n",
|
||||||
.curr = { "n", no },
|
.curr = { "n", no },
|
||||||
.flags = SYMBOL_CONST|SYMBOL_VALID,
|
.flags = SYMBOL_CONST|SYMBOL_VALID,
|
||||||
}, symbol_empty = {
|
};
|
||||||
|
|
||||||
|
static struct symbol symbol_empty = {
|
||||||
.name = "",
|
.name = "",
|
||||||
.curr = { "", no },
|
.curr = { "", no },
|
||||||
.flags = SYMBOL_VALID,
|
.flags = SYMBOL_VALID,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct symbol *sym_defconfig_list;
|
|
||||||
struct symbol *modules_sym;
|
struct symbol *modules_sym;
|
||||||
tristate modules_val;
|
static tristate modules_val;
|
||||||
int recursive_is_error;
|
int recursive_is_error;
|
||||||
|
|
||||||
enum symbol_type sym_get_type(struct symbol *sym)
|
enum symbol_type sym_get_type(struct symbol *sym)
|
||||||
@ -222,7 +227,7 @@ static void sym_calc_visibility(struct symbol *sym)
|
|||||||
sym_set_changed(sym);
|
sym_set_changed(sym);
|
||||||
}
|
}
|
||||||
tri = no;
|
tri = no;
|
||||||
if (sym->implied.expr && sym->dir_dep.tri != no)
|
if (sym->implied.expr)
|
||||||
tri = expr_calc_value(sym->implied.expr);
|
tri = expr_calc_value(sym->implied.expr);
|
||||||
if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
|
if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
|
||||||
tri = yes;
|
tri = yes;
|
||||||
@ -373,6 +378,8 @@ void sym_calc_value(struct symbol *sym)
|
|||||||
if (sym->implied.tri != no) {
|
if (sym->implied.tri != no) {
|
||||||
sym->flags |= SYMBOL_WRITE;
|
sym->flags |= SYMBOL_WRITE;
|
||||||
newval.tri = EXPR_OR(newval.tri, sym->implied.tri);
|
newval.tri = EXPR_OR(newval.tri, sym->implied.tri);
|
||||||
|
newval.tri = EXPR_AND(newval.tri,
|
||||||
|
sym->dir_dep.tri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
calc_newval:
|
calc_newval:
|
||||||
@ -381,8 +388,7 @@ void sym_calc_value(struct symbol *sym)
|
|||||||
else
|
else
|
||||||
newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
|
newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
|
||||||
}
|
}
|
||||||
if (newval.tri == mod &&
|
if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
|
||||||
(sym_get_type(sym) == S_BOOLEAN || sym->implied.tri == yes))
|
|
||||||
newval.tri = yes;
|
newval.tri = yes;
|
||||||
break;
|
break;
|
||||||
case S_STRING:
|
case S_STRING:
|
||||||
@ -446,7 +452,7 @@ void sym_clear_all_valid(void)
|
|||||||
|
|
||||||
for_all_symbols(i, sym)
|
for_all_symbols(i, sym)
|
||||||
sym->flags &= ~SYMBOL_VALID;
|
sym->flags &= ~SYMBOL_VALID;
|
||||||
sym_add_change_count(1);
|
conf_set_changed(true);
|
||||||
sym_calc_value(modules_sym);
|
sym_calc_value(modules_sym);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,8 +470,6 @@ bool sym_tristate_within_range(struct symbol *sym, tristate val)
|
|||||||
return false;
|
return false;
|
||||||
if (sym->visible <= sym->rev_dep.tri)
|
if (sym->visible <= sym->rev_dep.tri)
|
||||||
return false;
|
return false;
|
||||||
if (sym->implied.tri == yes && val == mod)
|
|
||||||
return false;
|
|
||||||
if (sym_is_choice_value(sym) && sym->visible == yes)
|
if (sym_is_choice_value(sym) && sym->visible == yes)
|
||||||
return val == yes;
|
return val == yes;
|
||||||
return val >= sym->rev_dep.tri && val <= sym->visible;
|
return val >= sym->rev_dep.tri && val <= sym->visible;
|
||||||
@ -812,7 +816,7 @@ struct symbol *sym_lookup(const char *name, int flags)
|
|||||||
memset(symbol, 0, sizeof(*symbol));
|
memset(symbol, 0, sizeof(*symbol));
|
||||||
symbol->name = new_name;
|
symbol->name = new_name;
|
||||||
symbol->type = S_UNKNOWN;
|
symbol->type = S_UNKNOWN;
|
||||||
symbol->flags |= flags;
|
symbol->flags = flags;
|
||||||
|
|
||||||
symbol->next = symbol_hash[hash];
|
symbol->next = symbol_hash[hash];
|
||||||
symbol_hash[hash] = symbol;
|
symbol_hash[hash] = symbol;
|
||||||
|
|||||||
@ -167,8 +167,8 @@ my %update_method = (
|
|||||||
'init' => "git clone '%s' '%s'",
|
'init' => "git clone '%s' '%s'",
|
||||||
'init_branch' => "git clone --branch '%s' '%s' '%s'",
|
'init_branch' => "git clone --branch '%s' '%s' '%s'",
|
||||||
'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",
|
'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",
|
||||||
'update' => "git pull --ff",
|
'update' => "git pull --ff-only",
|
||||||
'update_force' => "git pull --ff || (git reset --hard HEAD; git pull --ff; exit 1)",
|
'update_force' => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",
|
||||||
'post_update' => "git submodule update --init --recursive",
|
'post_update' => "git submodule update --init --recursive",
|
||||||
'controldir' => ".git",
|
'controldir' => ".git",
|
||||||
'revision' => "git rev-parse --short HEAD | tr -d '\n'"},
|
'revision' => "git rev-parse --short HEAD | tr -d '\n'"},
|
||||||
|
|||||||
@ -44,7 +44,7 @@ file_info = {
|
|||||||
"target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")),
|
"target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")),
|
||||||
"version_code": getenv("VERSION_CODE"),
|
"version_code": getenv("VERSION_CODE"),
|
||||||
"version_number": getenv("VERSION_NUMBER"),
|
"version_number": getenv("VERSION_NUMBER"),
|
||||||
"source_date_epoch": getenv("SOURCE_DATE_EPOCH"),
|
"source_date_epoch": int(getenv("SOURCE_DATE_EPOCH")),
|
||||||
"profiles": {
|
"profiles": {
|
||||||
device_id: {
|
device_id: {
|
||||||
"image_prefix": getenv("DEVICE_IMG_PREFIX"),
|
"image_prefix": getenv("DEVICE_IMG_PREFIX"),
|
||||||
|
|||||||
15
target/linux/apm821xx/base-files/etc/init.d/hwmon_fancontrol
Normal file
15
target/linux/apm821xx/base-files/etc/init.d/hwmon_fancontrol
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=98
|
||||||
|
|
||||||
|
boot() {
|
||||||
|
# configuring onboard temp/fan controller to run the fan on its own
|
||||||
|
# for more information, please read https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface
|
||||||
|
|
||||||
|
case $(board_name) in
|
||||||
|
netgear,wndr4700)
|
||||||
|
path_to_hwmon='/sys/devices/platform/plb/plb:opb/4ef600700.i2c/i2c-0/0-001b/hwmon/hwmon1'
|
||||||
|
echo 1 > "$path_to_hwmon/pwm1_enable"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
@ -105,32 +105,32 @@
|
|||||||
|
|
||||||
map1 {
|
map1 {
|
||||||
trip = <&cpu_alert1>;
|
trip = <&cpu_alert1>;
|
||||||
cooling-device = <&fan0 1 76>;
|
cooling-device = <&fan0 1 1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
map2 {
|
map2 {
|
||||||
trip = <&cpu_alert2>;
|
trip = <&cpu_alert2>;
|
||||||
cooling-device = <&fan0 77 101>;
|
cooling-device = <&fan0 2 4>;
|
||||||
};
|
};
|
||||||
|
|
||||||
map3 {
|
map3 {
|
||||||
trip = <&cpu_alert3>;
|
trip = <&cpu_alert3>;
|
||||||
cooling-device = <&fan0 102 147>;
|
cooling-device = <&fan0 4 8>;
|
||||||
};
|
};
|
||||||
|
|
||||||
map4 {
|
map4 {
|
||||||
trip = <&cpu_alert4>;
|
trip = <&cpu_alert4>;
|
||||||
cooling-device = <&fan0 148 207>;
|
cooling-device = <&fan0 9 12>;
|
||||||
};
|
};
|
||||||
|
|
||||||
map5 {
|
map5 {
|
||||||
trip = <&cpu_alert5>;
|
trip = <&cpu_alert5>;
|
||||||
cooling-device = <&fan0 208 231>;
|
cooling-device = <&fan0 13 15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
map6 {
|
map6 {
|
||||||
trip = <&cpu_alert6>;
|
trip = <&cpu_alert6>;
|
||||||
cooling-device =<&fan0 232 THERMAL_NO_LIMIT>;
|
cooling-device =<&fan0 16 THERMAL_NO_LIMIT>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -42,7 +42,9 @@ TARGET_DEVICES += meraki_mr24
|
|||||||
|
|
||||||
define Device/meraki_mx60
|
define Device/meraki_mx60
|
||||||
DEVICE_VENDOR := Cisco Meraki
|
DEVICE_VENDOR := Cisco Meraki
|
||||||
DEVICE_MODEL := MX60/MX60W
|
DEVICE_MODEL := MX60
|
||||||
|
DEVICE_ALT0_VENDOR := Cisco Meraki
|
||||||
|
DEVICE_ALT0_MODEL := MX60W
|
||||||
DEVICE_PACKAGES := kmod-spi-gpio kmod-usb-ledtrig-usbport kmod-usb-dwc2 \
|
DEVICE_PACKAGES := kmod-spi-gpio kmod-usb-ledtrig-usbport kmod-usb-dwc2 \
|
||||||
kmod-usb-storage block-mount
|
kmod-usb-storage block-mount
|
||||||
BLOCKSIZE := 128k
|
BLOCKSIZE := 128k
|
||||||
@ -91,7 +93,9 @@ TARGET_DEVICES += netgear_wndap660
|
|||||||
|
|
||||||
define Device/netgear_wndr4700
|
define Device/netgear_wndr4700
|
||||||
DEVICE_VENDOR := NETGEAR
|
DEVICE_VENDOR := NETGEAR
|
||||||
DEVICE_MODEL := Centria N900 WNDR4700/WNDR4720
|
DEVICE_MODEL := Centria N900 WNDR4700
|
||||||
|
DEVICE_ALT0_VENDOR := NETGEAR
|
||||||
|
DEVICE_ALT0_MODEL := Centria N900 WNDR4720
|
||||||
DEVICE_PACKAGES := badblocks block-mount e2fsprogs kmod-hwmon-drivetemp \
|
DEVICE_PACKAGES := badblocks block-mount e2fsprogs kmod-hwmon-drivetemp \
|
||||||
kmod-dm kmod-fs-ext4 kmod-fs-vfat kmod-usb-ledtrig-usbport \
|
kmod-dm kmod-fs-ext4 kmod-fs-vfat kmod-usb-ledtrig-usbport \
|
||||||
kmod-md-mod kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-iso8859-15 \
|
kmod-md-mod kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-iso8859-15 \
|
||||||
|
|||||||
@ -5,7 +5,9 @@ endef
|
|||||||
|
|
||||||
define Device/wd_mybooklive
|
define Device/wd_mybooklive
|
||||||
DEVICE_VENDOR := Western Digital
|
DEVICE_VENDOR := Western Digital
|
||||||
DEVICE_MODEL := My Book Live Series (Single + Duo)
|
DEVICE_MODEL := My Book Live
|
||||||
|
DEVICE_ALT0_VENDOR := Western Digital
|
||||||
|
DEVICE_ALT0_MODEL := My Book Live Duo
|
||||||
DEVICE_PACKAGES := kmod-usb-dwc2 kmod-usb-ledtrig-usbport kmod-usb-storage kmod-fs-vfat wpad-basic-wolfssl
|
DEVICE_PACKAGES := kmod-usb-dwc2 kmod-usb-ledtrig-usbport kmod-usb-storage kmod-fs-vfat wpad-basic-wolfssl
|
||||||
SUPPORTED_DEVICES += mbl wd,mybooklive-duo
|
SUPPORTED_DEVICES += mbl wd,mybooklive-duo
|
||||||
BLOCKSIZE := 1k
|
BLOCKSIZE := 1k
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user