1*c609719bSwdenk /* 2*c609719bSwdenk * (C) Copyright 2002 3*c609719bSwdenk * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*c609719bSwdenk * 5*c609719bSwdenk * See file CREDITS for list of people who contributed to this 6*c609719bSwdenk * project. 7*c609719bSwdenk * 8*c609719bSwdenk * This program is free software; you can redistribute it and/or 9*c609719bSwdenk * modify it under the terms of the GNU General Public License as 10*c609719bSwdenk * published by the Free Software Foundation; either version 2 of 11*c609719bSwdenk * the License, or (at your option) any later version. 12*c609719bSwdenk * 13*c609719bSwdenk * This program is distributed in the hope that it will be useful, 14*c609719bSwdenk * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*c609719bSwdenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*c609719bSwdenk * GNU General Public License for more details. 17*c609719bSwdenk * 18*c609719bSwdenk * You should have received a copy of the GNU General Public License 19*c609719bSwdenk * along with this program; if not, write to the Free Software 20*c609719bSwdenk * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*c609719bSwdenk * MA 02111-1307 USA 22*c609719bSwdenk */ 23*c609719bSwdenk 24*c609719bSwdenk #ifndef _ENVIRONMENT_H_ 25*c609719bSwdenk #define _ENVIRONMENT_H_ 1 26*c609719bSwdenk 27*c609719bSwdenk /************************************************************************** 28*c609719bSwdenk * 29*c609719bSwdenk * The "environment" is stored as a list of '\0' terminated 30*c609719bSwdenk * "name=value" strings. The end of the list is marked by a double 31*c609719bSwdenk * '\0'. New entries are always added at the end. Deleting an entry 32*c609719bSwdenk * shifts the remaining entries to the front. Replacing an entry is a 33*c609719bSwdenk * combination of deleting the old value and adding the new one. 34*c609719bSwdenk * 35*c609719bSwdenk * The environment is preceeded by a 32 bit CRC over the data part. 36*c609719bSwdenk * 37*c609719bSwdenk ************************************************************************** 38*c609719bSwdenk */ 39*c609719bSwdenk 40*c609719bSwdenk #if defined(CFG_ENV_IS_IN_FLASH) 41*c609719bSwdenk # ifndef CFG_ENV_ADDR 42*c609719bSwdenk # define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_ENV_OFFSET) 43*c609719bSwdenk # endif 44*c609719bSwdenk # ifndef CFG_ENV_OFFSET 45*c609719bSwdenk # define CFG_ENV_OFFSET (CFG_ENV_ADDR - CFG_FLASH_BASE) 46*c609719bSwdenk # endif 47*c609719bSwdenk # if !defined(CFG_ENV_ADDR_REDUND) && defined(CFG_ENV_OFFSET_REDUND) 48*c609719bSwdenk # define CFG_ENV_ADDR_REDUND (CFG_FLASH_BASE + CFG_ENV_OFFSET_REDUND) 49*c609719bSwdenk # endif 50*c609719bSwdenk # ifndef CFG_ENV_SIZE 51*c609719bSwdenk # define CFG_ENV_SIZE CFG_ENV_SECT_SIZE 52*c609719bSwdenk # endif 53*c609719bSwdenk # if defined(CFG_ENV_ADDR_REDUND) && !defined(CFG_ENV_SIZE_REDUND) 54*c609719bSwdenk # define CFG_ENV_SIZE_REDUND CFG_ENV_SIZE 55*c609719bSwdenk # endif 56*c609719bSwdenk # if (CFG_ENV_ADDR >= CFG_MONITOR_BASE) && \ 57*c609719bSwdenk (CFG_ENV_ADDR+CFG_ENV_SIZE) <= (CFG_MONITOR_BASE + CFG_MONITOR_LEN) 58*c609719bSwdenk # define ENV_IS_EMBEDDED 1 59*c609719bSwdenk # endif 60*c609719bSwdenk # if defined(CFG_ENV_ADDR_REDUND) || defined(CFG_ENV_OFFSET_REDUND) 61*c609719bSwdenk # define CFG_REDUNDAND_ENVIRONMENT 1 62*c609719bSwdenk # endif 63*c609719bSwdenk #endif /* CFG_ENV_IS_IN_FLASH */ 64*c609719bSwdenk 65*c609719bSwdenk 66*c609719bSwdenk #ifdef CFG_REDUNDAND_ENVIRONMENT 67*c609719bSwdenk # define ENV_HEADER_SIZE (sizeof(unsigned long) + 1) 68*c609719bSwdenk #else 69*c609719bSwdenk # define ENV_HEADER_SIZE (sizeof(unsigned long)) 70*c609719bSwdenk #endif 71*c609719bSwdenk 72*c609719bSwdenk 73*c609719bSwdenk #define ENV_SIZE (CFG_ENV_SIZE - ENV_HEADER_SIZE) 74*c609719bSwdenk 75*c609719bSwdenk typedef struct environment_s { 76*c609719bSwdenk unsigned long crc; /* CRC32 over data bytes */ 77*c609719bSwdenk #ifdef CFG_REDUNDAND_ENVIRONMENT 78*c609719bSwdenk unsigned char flags; /* active/obsolete flags */ 79*c609719bSwdenk #endif 80*c609719bSwdenk unsigned char data[ENV_SIZE]; /* Environment data */ 81*c609719bSwdenk } env_t; 82*c609719bSwdenk 83*c609719bSwdenk #endif /* _ENVIRONMENT_H_ */ 84