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