wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 1 | /* |
Grant Erickson | bc11756 | 2008-05-06 20:16:15 -0700 | [diff] [blame] | 2 | * (C) Copyright 2002-2008 |
wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 3 | * Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
| 4 | * |
Wolfgang Denk | 3765b3e | 2013-10-07 13:07:26 +0200 | [diff] [blame] | 5 | * SPDX-License-Identifier: GPL-2.0+ |
wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 6 | */ |
| 7 | |
Andreas Fenkart | 371ee13 | 2015-12-09 13:13:24 +0100 | [diff] [blame] | 8 | #include <aes.h> |
| 9 | #include <stdint.h> |
| 10 | |
Tom Rini | e3c52f2 | 2012-12-20 07:30:27 -0700 | [diff] [blame] | 11 | /* Pull in the current config to define the default environment */ |
Peter Robinson | 0b36738 | 2015-06-17 16:58:32 +0100 | [diff] [blame] | 12 | #include <linux/kconfig.h> |
| 13 | |
Tom Rini | e3c52f2 | 2012-12-20 07:30:27 -0700 | [diff] [blame] | 14 | #ifndef __ASSEMBLY__ |
| 15 | #define __ASSEMBLY__ /* get only #defines from config.h */ |
| 16 | #include <config.h> |
| 17 | #undef __ASSEMBLY__ |
| 18 | #else |
| 19 | #include <config.h> |
| 20 | #endif |
| 21 | |
wdenk | 8bde7f7 | 2003-06-27 21:31:46 +0000 | [diff] [blame] | 22 | /* |
Frans Meulenbroeks | 9cbfee6 | 2012-01-05 08:09:10 +0000 | [diff] [blame] | 23 | * To build the utility with the static configuration |
| 24 | * comment out the next line. |
Wolfgang Denk | 566e5cf | 2011-05-01 20:44:23 +0200 | [diff] [blame] | 25 | * See included "fw_env.config" sample file |
wdenk | d0fb80c | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 26 | * for notes on configuration. |
| 27 | */ |
wdenk | d791b1d | 2003-04-20 14:04:18 +0000 | [diff] [blame] | 28 | #define CONFIG_FILE "/etc/fw_env.config" |
wdenk | d0fb80c | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 29 | |
Joe Hershberger | 497f205 | 2012-10-03 09:38:46 +0000 | [diff] [blame] | 30 | #ifndef CONFIG_FILE |
wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 31 | #define HAVE_REDUND /* For systems with 2 env sectors */ |
| 32 | #define DEVICE1_NAME "/dev/mtd1" |
| 33 | #define DEVICE2_NAME "/dev/mtd2" |
wdenk | d0fb80c | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 34 | #define DEVICE1_OFFSET 0x0000 |
wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 35 | #define ENV1_SIZE 0x4000 |
Frans Meulenbroeks | 5d5cc38 | 2011-12-01 03:30:04 +0000 | [diff] [blame] | 36 | #define DEVICE1_ESIZE 0x4000 |
| 37 | #define DEVICE1_ENVSECTORS 2 |
wdenk | d0fb80c | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 38 | #define DEVICE2_OFFSET 0x0000 |
wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 39 | #define ENV2_SIZE 0x4000 |
Frans Meulenbroeks | 5d5cc38 | 2011-12-01 03:30:04 +0000 | [diff] [blame] | 40 | #define DEVICE2_ESIZE 0x4000 |
| 41 | #define DEVICE2_ENVSECTORS 2 |
Joe Hershberger | 497f205 | 2012-10-03 09:38:46 +0000 | [diff] [blame] | 42 | #endif |
wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 43 | |
Tom Rini | e3c52f2 | 2012-12-20 07:30:27 -0700 | [diff] [blame] | 44 | #ifndef CONFIG_BAUDRATE |
| 45 | #define CONFIG_BAUDRATE 115200 |
| 46 | #endif |
| 47 | |
| 48 | #ifndef CONFIG_BOOTDELAY |
| 49 | #define CONFIG_BOOTDELAY 5 /* autoboot after 5 seconds */ |
| 50 | #endif |
| 51 | |
| 52 | #ifndef CONFIG_BOOTCOMMAND |
| 53 | #define CONFIG_BOOTCOMMAND \ |
| 54 | "bootp; " \ |
| 55 | "setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} " \ |
| 56 | "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \ |
| 57 | "bootm" |
| 58 | #endif |
| 59 | |
Andreas Fenkart | 81974f4 | 2016-04-05 23:13:42 +0200 | [diff] [blame] | 60 | struct env_opts { |
Andreas Fenkart | 371ee13 | 2015-12-09 13:13:24 +0100 | [diff] [blame] | 61 | #ifdef CONFIG_FILE |
| 62 | char *config_file; |
| 63 | #endif |
Andreas Fenkart | 371ee13 | 2015-12-09 13:13:24 +0100 | [diff] [blame] | 64 | int aes_flag; /* Is AES encryption used? */ |
Andreas Fenkart | 81974f4 | 2016-04-05 23:13:42 +0200 | [diff] [blame] | 65 | uint8_t aes_key[AES_KEY_LENGTH]; |
Andreas Fenkart | 371ee13 | 2015-12-09 13:13:24 +0100 | [diff] [blame] | 66 | }; |
Andreas Fenkart | 07ce944 | 2015-12-09 13:13:23 +0100 | [diff] [blame] | 67 | |
Andreas Fenkart | 371ee13 | 2015-12-09 13:13:24 +0100 | [diff] [blame] | 68 | int parse_aes_key(char *key, uint8_t *bin_key); |
| 69 | |
Andreas Fenkart | 81974f4 | 2016-04-05 23:13:42 +0200 | [diff] [blame] | 70 | int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts); |
Andreas Fenkart | c3a23e8 | 2016-04-19 22:43:40 +0200 | [diff] [blame] | 71 | char *fw_getenv(char *name); |
Andreas Fenkart | 81974f4 | 2016-04-05 23:13:42 +0200 | [diff] [blame] | 72 | int fw_setenv(int argc, char *argv[], struct env_opts *opts); |
| 73 | int fw_parse_script(char *fname, struct env_opts *opts); |
| 74 | int fw_env_open(struct env_opts *opts); |
Andreas Fenkart | c3a23e8 | 2016-04-19 22:43:40 +0200 | [diff] [blame] | 75 | int fw_env_write(char *name, char *value); |
Andreas Fenkart | 81974f4 | 2016-04-05 23:13:42 +0200 | [diff] [blame] | 76 | int fw_env_close(struct env_opts *opts); |
wdenk | 6aff311 | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 77 | |
Andreas Fenkart | c3a23e8 | 2016-04-19 22:43:40 +0200 | [diff] [blame] | 78 | unsigned long crc32(unsigned long, const unsigned char *, unsigned); |