Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 1 | /* |
Heiko Schocher | 8ce3dd5 | 2011-03-15 16:52:29 +0100 | [diff] [blame] | 2 | * (C) Copyright 2008-2011 |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 3 | * Heiko Schocher, DENX Software Engineering, hs@denx.de. |
| 4 | * |
Wolfgang Denk | bd8ec7e | 2013-10-07 13:07:26 +0200 | [diff] [blame] | 5 | * SPDX-License-Identifier: GPL-2.0+ |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 6 | */ |
| 7 | |
| 8 | #ifndef __CONFIG_KEYMILE_H |
| 9 | #define __CONFIG_KEYMILE_H |
| 10 | |
Heiko Schocher | 8ce3dd5 | 2011-03-15 16:52:29 +0100 | [diff] [blame] | 11 | #undef CONFIG_WATCHDOG /* disable platform specific watchdog */ |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 12 | |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 13 | /* |
| 14 | * Miscellaneous configurable options |
| 15 | */ |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 16 | #if defined(CONFIG_CMD_KGDB) |
Heiko Schocher | 8ce3dd5 | 2011-03-15 16:52:29 +0100 | [diff] [blame] | 17 | #define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */ |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 18 | #else |
Holger Brunck | 0bd8202 | 2011-03-14 15:49:05 +0100 | [diff] [blame] | 19 | #define CONFIG_SYS_CBSIZE 512 /* Console I/O Buffer Size */ |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 20 | #endif |
Holger Brunck | 0bd8202 | 2011-03-14 15:49:05 +0100 | [diff] [blame] | 21 | #define CONFIG_SYS_MAXARGS 32 /* max number of command args */ |
Heiko Schocher | 8ce3dd5 | 2011-03-15 16:52:29 +0100 | [diff] [blame] | 22 | #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 23 | |
Heiko Schocher | 8ce3dd5 | 2011-03-15 16:52:29 +0100 | [diff] [blame] | 24 | #define CONFIG_HUSH_INIT_VAR |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 25 | |
Holger Brunck | 4559d1f | 2011-04-08 02:47:46 +0000 | [diff] [blame] | 26 | #define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, 230400 } |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 27 | |
Heiko Schocher | 8ce3dd5 | 2011-03-15 16:52:29 +0100 | [diff] [blame] | 28 | #define CONFIG_LOADS_ECHO |
| 29 | #define CONFIG_SYS_LOADS_BAUD_CHANGE |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 30 | |
Holger Brunck | 6c3dd06 | 2015-11-13 16:15:19 +0100 | [diff] [blame] | 31 | |
Heiko Schocher | a8d5189 | 2009-03-12 07:37:18 +0100 | [diff] [blame] | 32 | /* Support the IVM EEprom */ |
| 33 | #define CONFIG_SYS_IVM_EEPROM_ADR 0x50 |
| 34 | #define CONFIG_SYS_IVM_EEPROM_MAX_LEN 0x400 |
| 35 | #define CONFIG_SYS_IVM_EEPROM_PAGE_LEN 0x100 |
| 36 | |
Heiko Schocher | 8ce3dd5 | 2011-03-15 16:52:29 +0100 | [diff] [blame] | 37 | #define CONFIG_SYS_FLASH_PROTECTION |
Heiko Schocher | a8d5189 | 2009-03-12 07:37:18 +0100 | [diff] [blame] | 38 | |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 39 | /* |
| 40 | * BOOTP options |
| 41 | */ |
| 42 | #define CONFIG_BOOTP_BOOTFILESIZE |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 43 | |
Heiko Schocher | 875f4728 | 2009-07-09 12:04:18 +0200 | [diff] [blame] | 44 | /* UBI Support for all Keymile boards */ |
Heiko Schocher | 875f4728 | 2009-07-09 12:04:18 +0200 | [diff] [blame] | 45 | #define CONFIG_MTD_PARTITIONS |
Heiko Schocher | 875f4728 | 2009-07-09 12:04:18 +0200 | [diff] [blame] | 46 | #define CONFIG_MTD_DEVICE |
| 47 | #define CONFIG_MTD_CONCAT |
| 48 | |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 49 | #ifndef CONFIG_KM_DEF_ENV_BOOTPARAMS |
| 50 | #define CONFIG_KM_DEF_ENV_BOOTPARAMS \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 51 | "actual_bank=0\0" |
Heiko Schocher | a8d5189 | 2009-03-12 07:37:18 +0100 | [diff] [blame] | 52 | #endif |
| 53 | |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 54 | #ifndef CONFIG_KM_DEF_NETDEV |
| 55 | #define CONFIG_KM_DEF_NETDEV \ |
| 56 | "netdev=eth0\0" |
| 57 | #endif |
| 58 | |
Andreas Huber | a81548a | 2012-05-04 10:30:16 +0200 | [diff] [blame] | 59 | #ifndef CONFIG_KM_UBI_PARTITION_NAME_BOOT |
| 60 | #define CONFIG_KM_UBI_PARTITION_NAME_BOOT "ubi0" |
| 61 | #endif /* CONFIG_KM_UBI_PARTITION_NAME_BOOT */ |
| 62 | |
Valentin Longchamp | e6d848f | 2014-01-27 11:49:10 +0100 | [diff] [blame] | 63 | #ifndef CONFIG_KM_UBI_PART_BOOT_OPTS |
| 64 | #define CONFIG_KM_UBI_PART_BOOT_OPTS "" |
| 65 | #endif /* CONFIG_KM_UBI_PART_BOOT_OPTS */ |
| 66 | |
Andreas Huber | a81548a | 2012-05-04 10:30:16 +0200 | [diff] [blame] | 67 | #ifndef CONFIG_KM_UBI_PARTITION_NAME_APP |
| 68 | /* one flash chip only called boot */ |
| 69 | /* boot: CONFIG_KM_UBI_PARTITION_NAME_BOOT */ |
| 70 | # define CONFIG_KM_UBI_LINUX_MTD \ |
Valentin Longchamp | e6d848f | 2014-01-27 11:49:10 +0100 | [diff] [blame] | 71 | "ubi.mtd=" CONFIG_KM_UBI_PARTITION_NAME_BOOT \ |
| 72 | CONFIG_KM_UBI_PART_BOOT_OPTS |
Andreas Huber | a81548a | 2012-05-04 10:30:16 +0200 | [diff] [blame] | 73 | # define CONFIG_KM_DEV_ENV_FLASH_BOOT_UBI \ |
| 74 | "ubiattach=ubi part " CONFIG_KM_UBI_PARTITION_NAME_BOOT "\0" |
| 75 | #else /* CONFIG_KM_UBI_PARTITION_NAME_APP */ |
| 76 | /* two flash chips called boot and app */ |
| 77 | /* boot: CONFIG_KM_UBI_PARTITION_NAME_BOOT */ |
| 78 | /* app: CONFIG_KM_UBI_PARTITION_NAME_APP */ |
| 79 | # define CONFIG_KM_UBI_LINUX_MTD \ |
Valentin Longchamp | e6d848f | 2014-01-27 11:49:10 +0100 | [diff] [blame] | 80 | "ubi.mtd=" CONFIG_KM_UBI_PARTITION_NAME_BOOT \ |
| 81 | CONFIG_KM_UBI_PART_BOOT_OPTS " " \ |
Andreas Huber | a81548a | 2012-05-04 10:30:16 +0200 | [diff] [blame] | 82 | "ubi.mtd=" CONFIG_KM_UBI_PARTITION_NAME_APP |
| 83 | # define CONFIG_KM_DEV_ENV_FLASH_BOOT_UBI \ |
| 84 | "ubiattach=if test ${boot_bank} -eq 0; then; " \ |
| 85 | "ubi part " CONFIG_KM_UBI_PARTITION_NAME_BOOT "; else; " \ |
| 86 | "ubi part " CONFIG_KM_UBI_PARTITION_NAME_APP "; fi\0" |
| 87 | #endif /* CONFIG_KM_UBI_PARTITION_NAME_APP */ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 88 | |
Andreas Huber | c31a757 | 2013-01-21 03:55:20 +0000 | [diff] [blame] | 89 | #ifdef CONFIG_NAND_ECC_BCH |
| 90 | #define CONFIG_KM_UIMAGE_NAME "ecc_bch_uImage\0" |
Holger Brunck | ffcbb93 | 2013-01-21 03:55:24 +0000 | [diff] [blame] | 91 | #define CONFIG_KM_ECC_MODE " eccmode=bch" |
Andreas Huber | c31a757 | 2013-01-21 03:55:20 +0000 | [diff] [blame] | 92 | #else |
| 93 | #define CONFIG_KM_UIMAGE_NAME "uImage\0" |
Holger Brunck | ffcbb93 | 2013-01-21 03:55:24 +0000 | [diff] [blame] | 94 | #define CONFIG_KM_ECC_MODE |
Andreas Huber | c31a757 | 2013-01-21 03:55:20 +0000 | [diff] [blame] | 95 | #endif |
| 96 | |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 97 | /* |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 98 | * boottargets |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 99 | * - set 'subbootcmds' |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 100 | * - set 'bootcmd' and 'altbootcmd' |
| 101 | * available targets: |
| 102 | * - 'release': for a standalone system kernel/rootfs from flash |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 103 | */ |
| 104 | #define CONFIG_KM_DEF_ENV_BOOTTARGETS \ |
Valentin Longchamp | 15e79cc | 2015-11-13 16:15:20 +0100 | [diff] [blame] | 105 | "subbootcmds=ubiattach ubicopy checkfdt cramfsloadfdt " \ |
| 106 | "set_fdthigh cramfsloadkernel flashargs add_default " \ |
| 107 | "addpanic boot\0" \ |
Holger Brunck | e7bec9b | 2011-07-04 21:52:52 +0000 | [diff] [blame] | 108 | "develop=" \ |
| 109 | "tftp 200000 scripts/develop-${arch}.txt && " \ |
| 110 | "env import -t 200000 ${filesize} && " \ |
| 111 | "run setup_debug_env\0" \ |
| 112 | "ramfs=" \ |
| 113 | "tftp 200000 scripts/ramfs-${arch}.txt && " \ |
Holger Brunck | 0b53902 | 2011-05-04 01:47:34 +0000 | [diff] [blame] | 114 | "env import -t 200000 ${filesize} && " \ |
Holger Brunck | e7bec9b | 2011-07-04 21:52:52 +0000 | [diff] [blame] | 115 | "run setup_debug_env\0" \ |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 116 | "" |
| 117 | |
| 118 | /* |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 119 | * bootargs |
| 120 | * - modify 'bootargs' |
| 121 | * |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 122 | * - 'add_default': default bootargs common for all arm/ppc boards |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 123 | * - 'addpanic': add kernel panic options |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 124 | * - 'flashargs': defaults arguments for flash base boot |
| 125 | * |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 126 | */ |
| 127 | #define CONFIG_KM_DEF_ENV_BOOTARGS \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 128 | "add_default=" \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 129 | "setenv bootargs ${bootargs} " \ |
| 130 | "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ |
Valentin Longchamp | 1d39959 | 2013-10-18 11:47:16 +0200 | [diff] [blame] | 131 | ":${hostname}:${netdev}:off:" \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 132 | " console=" CONFIG_KM_CONSOLE_TTY ",${baudrate}" \ |
Andreas Huber | 28c63c7 | 2011-09-13 23:06:11 +0000 | [diff] [blame] | 133 | " mem=${kernelmem} init=${init}" \ |
Holger Brunck | ffcbb93 | 2013-01-21 03:55:24 +0000 | [diff] [blame] | 134 | CONFIG_KM_ECC_MODE \ |
Marek Vasut | fd5ba89 | 2012-09-23 17:41:23 +0200 | [diff] [blame] | 135 | " phram.phram=phvar,${varaddr}," __stringify(CONFIG_KM_PHRAM)\ |
Andreas Huber | a81548a | 2012-05-04 10:30:16 +0200 | [diff] [blame] | 136 | " " CONFIG_KM_UBI_LINUX_MTD " " \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 137 | CONFIG_KM_DEF_BOOT_ARGS_CPU \ |
| 138 | "\0" \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 139 | "addpanic=" \ |
Holger Brunck | 0b53902 | 2011-05-04 01:47:34 +0000 | [diff] [blame] | 140 | "setenv bootargs ${bootargs} panic=1 panic_on_oops=1\0" \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 141 | "flashargs=" \ |
| 142 | "setenv bootargs " \ |
Thomas Herzmann | 1d253c1 | 2011-04-08 02:47:41 +0000 | [diff] [blame] | 143 | "root=mtdblock:rootfs${boot_bank} " \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 144 | "rootfstype=squashfs ro\0" \ |
| 145 | "" |
| 146 | |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 147 | /* |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 148 | * flash_boot |
| 149 | * - commands for booting from flash |
| 150 | * |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 151 | * - 'cramfsloadkernel': copy kernel from a cramfs to ram |
| 152 | * - 'ubiattach': attach ubi partition |
| 153 | * - 'ubicopy': copy ubi volume to ram |
| 154 | * - volume names: bootfs0, bootfs1, bootfs2, ... |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 155 | * |
| 156 | * processor specific settings |
| 157 | * - 'cramfsloadfdt': copy fdt from a cramfs to ram |
| 158 | */ |
| 159 | #define CONFIG_KM_DEF_ENV_FLASH_BOOT \ |
Marek Vasut | fd5ba89 | 2012-09-23 17:41:23 +0200 | [diff] [blame] | 160 | "cramfsaddr=" __stringify(CONFIG_KM_CRAMFS_ADDR) "\0" \ |
Andreas Huber | c31a757 | 2013-01-21 03:55:20 +0000 | [diff] [blame] | 161 | "cramfsloadkernel=cramfsload ${load_addr_r} ${uimage}\0" \ |
Marek Vasut | fd5ba89 | 2012-09-23 17:41:23 +0200 | [diff] [blame] | 162 | "ubicopy=ubi read "__stringify(CONFIG_KM_CRAMFS_ADDR) \ |
Holger Brunck | 0b53902 | 2011-05-04 01:47:34 +0000 | [diff] [blame] | 163 | " bootfs${boot_bank}\0" \ |
Andreas Huber | c31a757 | 2013-01-21 03:55:20 +0000 | [diff] [blame] | 164 | "uimage=" CONFIG_KM_UIMAGE_NAME \ |
Andreas Huber | a81548a | 2012-05-04 10:30:16 +0200 | [diff] [blame] | 165 | CONFIG_KM_DEV_ENV_FLASH_BOOT_UBI |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 166 | |
| 167 | /* |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 168 | * constants |
| 169 | * - KM specific constants and commands |
| 170 | * |
| 171 | * - 'default': setup default environment |
| 172 | */ |
| 173 | #define CONFIG_KM_DEF_ENV_CONSTANTS \ |
Thomas Herzmann | 1d253c1 | 2011-04-08 02:47:41 +0000 | [diff] [blame] | 174 | "backup_bank=0\0" \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 175 | "release=run newenv; reset\0" \ |
Marek Vasut | fd5ba89 | 2012-09-23 17:41:23 +0200 | [diff] [blame] | 176 | "pnvramsize=" __stringify(CONFIG_KM_PNVRAM) "\0" \ |
Thomas Herzmann | 80d5c9e | 2011-06-05 22:22:13 +0000 | [diff] [blame] | 177 | "testbootcmd=setenv boot_bank ${test_bank}; " \ |
| 178 | "run ${subbootcmds}; reset\0" \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 179 | "" |
| 180 | |
Heiko Schocher | a8d5189 | 2009-03-12 07:37:18 +0100 | [diff] [blame] | 181 | #ifndef CONFIG_KM_DEF_ENV |
| 182 | #define CONFIG_KM_DEF_ENV \ |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 183 | CONFIG_KM_DEF_ENV_BOOTPARAMS \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 184 | CONFIG_KM_DEF_NETDEV \ |
| 185 | CONFIG_KM_DEF_ENV_CPU \ |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 186 | CONFIG_KM_DEF_ENV_BOOTTARGETS \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 187 | CONFIG_KM_DEF_ENV_BOOTARGS \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 188 | CONFIG_KM_DEF_ENV_FLASH_BOOT \ |
Holger Brunck | e7c1fdc | 2011-03-04 14:56:27 +0100 | [diff] [blame] | 189 | CONFIG_KM_DEF_ENV_CONSTANTS \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 190 | "altbootcmd=run bootcmd\0" \ |
Gerlando Falauto | ae2adaf | 2014-01-27 16:58:27 +0100 | [diff] [blame] | 191 | "boot=bootm ${load_addr_r} - ${fdt_addr_r}\0" \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 192 | "bootcmd=km_checkbidhwk && " \ |
Thomas Herzmann | b2c3160 | 2012-05-04 10:55:58 +0200 | [diff] [blame] | 193 | "setenv bootcmd \'if km_checktestboot; then; " \ |
| 194 | "setenv boot_bank ${test_bank}; else; " \ |
| 195 | "setenv boot_bank ${actual_bank}; fi;" \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 196 | "run ${subbootcmds}; reset\' && " \ |
| 197 | "setenv altbootcmd \'setenv boot_bank ${backup_bank}; " \ |
| 198 | "run ${subbootcmds}; reset\' && " \ |
| 199 | "saveenv && saveenv && boot\0" \ |
Holger Brunck | ca907c9 | 2012-05-04 10:55:54 +0200 | [diff] [blame] | 200 | "bootlimit=3\0" \ |
Gerlando Falauto | ae2adaf | 2014-01-27 16:58:27 +0100 | [diff] [blame] | 201 | "cramfsloadfdt=" \ |
| 202 | "cramfsload ${fdt_addr_r} " \ |
| 203 | "fdt_0x${IVM_BoardId}_0x${IVM_HWKey}.dtb\0" \ |
| 204 | "fdt_addr_r="__stringify(CONFIG_KM_FDT_ADDR) "\0" \ |
Holger Brunck | 752ba31 | 2011-03-14 16:01:04 +0100 | [diff] [blame] | 205 | "init=/sbin/init-overlay.sh\0" \ |
Marek Vasut | fd5ba89 | 2012-09-23 17:41:23 +0200 | [diff] [blame] | 206 | "load_addr_r="__stringify(CONFIG_KM_KERNEL_ADDR) "\0" \ |
Holger Brunck | 2ff59ee | 2011-07-04 21:27:16 +0000 | [diff] [blame] | 207 | "load=tftpboot ${load_addr_r} ${u-boot}\0" \ |
Tom Rini | 5ad8e11 | 2017-10-22 17:55:07 -0400 | [diff] [blame] | 208 | "mtdids=" CONFIG_MTDIDS_DEFAULT "\0" \ |
| 209 | "mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \ |
Heiko Schocher | a8d5189 | 2009-03-12 07:37:18 +0100 | [diff] [blame] | 210 | "" |
| 211 | #endif /* CONFIG_KM_DEF_ENV */ |
| 212 | |
Heiko Schocher | 7937e4f | 2008-11-20 09:59:09 +0100 | [diff] [blame] | 213 | #endif /* __CONFIG_KEYMILE_H */ |