X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=glue_netfs.c;h=e47bcc8414747566fac0f3ed87a35d7012b07f03;hb=aaccd566c8920f39c752a07aea130f710b9fca3c;hp=757fc8b8f3ba2b0f39b5d22e7831f822a2279e1a;hpb=054761502f884ae2cb147c75bd17a660fe63b071;p=debian%2Felilo diff --git a/glue_netfs.c b/glue_netfs.c index 757fc8b..e47bcc8 100644 --- a/glue_netfs.c +++ b/glue_netfs.c @@ -1,6 +1,10 @@ /* * Copyright (C) 2001-2003 Hewlett-Packard Co. * Contributed by Stephane Eranian + * Copyright (C) 2006-2009 Intel Corporation + * Contributed by Fenghua Yu + * Contributed by Bibo Mao + * Contributed by Chandramouli Narayanan * * This file is part of the ELILO, the EFI Linux boot loader. * @@ -117,7 +121,7 @@ netfs_set_default_path(netfs_interface_t *netfs, netfs_info_t *info) } static EFI_STATUS -netfs_setdefaults(VOID *intf, CHAR16 *config, CHAR16 *kname, UINTN maxlen, CHAR16 *devpath) +netfs_setdefaults(VOID *intf, config_file_t *config, CHAR16 *kname, UINTN maxlen, CHAR16 *devpath) { netfs_interface_t *netfs = (netfs_interface_t *)intf; netfs_info_t info; @@ -149,10 +153,10 @@ netfs_setdefaults(VOID *intf, CHAR16 *config, CHAR16 *kname, UINTN maxlen, CHAR1 set_var(VAR_NETFS_DOMAINAME, info.domainame); if (info.using_pxe) { - status = netfs->netfs_query_layer(netfs, 0, NETFS_CONFIG_LAYER, maxlen, config); + status = netfs->netfs_query_layer(netfs, 0, NETFS_CONFIG_LAYER, maxlen, config[0].fname); if (EFI_ERROR(status)) { - StrnCpy(config, NETFS_DEFAULT_CONFIG, maxlen-1); - config[maxlen-1] = CHAR_NULL; + StrnCpy(config[0].fname, NETFS_DEFAULT_CONFIG, maxlen-1); + config[0].fname[maxlen-1] = CHAR_NULL; } status = netfs->netfs_query_layer(netfs, 0, NETFS_KERNEL_LAYER, maxlen, kname); @@ -162,21 +166,49 @@ netfs_setdefaults(VOID *intf, CHAR16 *config, CHAR16 *kname, UINTN maxlen, CHAR1 } } else { #ifdef ENABLE_MACHINE_SPECIFIC_NETCONFIG + +# if defined(CONFIG_ia64) +# define CONFIG_ARCH_EXTENSION L"-ia64.conf\0" +# define EXTENSION_LENGTH 11 +# elif defined (CONFIG_ia32) +# define CONFIG_ARCH_EXTENSION L"-ia32.conf\0" +# define EXTENSION_LENGTH 11 +# elif defined (CONFIG_x86_64) +# define CONFIG_ARCH_EXTENSION L"-x86_64.conf\0" +# define EXTENSION_LENGTH 13 +# else +# error "You need to specfy your default arch config file" +# endif + +# define CONFIG_EXTENSION L".conf\0" /* - * will try a machine specific file first. - * the file is constructed based on the IP(v4) address + * will try machine/subnet specific files first. + * the filenames are constructed based on the IP(v4) address */ - convert_ip2hex(ipaddr, m, config); - - config[8] = L'.'; - config[9] = L'c'; - config[10] = L'o'; - config[11] = L'n'; - config[12] = L'f'; - config[13] = CHAR_NULL; + convert_ip2hex(ipaddr, m, str); + StrnCpy(config[0].fname, str, maxlen-1); + StrnCpy(config[0].fname+8, CONFIG_EXTENSION, 6); + + StrnCpy(config[1].fname, str, maxlen-1); + StrnCpy(config[1].fname+6, CONFIG_ARCH_EXTENSION, EXTENSION_LENGTH); + + StrnCpy(config[2].fname, str, maxlen-1); + StrnCpy(config[2].fname+6, CONFIG_EXTENSION, 6); + + StrnCpy(config[3].fname, str, maxlen-1); + StrnCpy(config[3].fname+4, CONFIG_ARCH_EXTENSION, EXTENSION_LENGTH); + + StrnCpy(config[4].fname, str, maxlen-1); + StrnCpy(config[4].fname+4, CONFIG_EXTENSION, 6); + + StrnCpy(config[5].fname, str, maxlen-1); + StrnCpy(config[5].fname+2, CONFIG_ARCH_EXTENSION, EXTENSION_LENGTH); + + StrnCpy(config[6].fname, str, maxlen-1); + StrnCpy(config[6].fname+2, CONFIG_EXTENSION, 6); #else - StrnCpy(config, NETFS_DEFAULT_CONFIG, maxlen-1); - config[maxlen-1] = CHAR_NULL; + StrnCpy(config[0].fname, NETFS_DEFAULT_CONFIG, maxlen-1); + config[0].fname[maxlen-1] = CHAR_NULL; #endif StrnCpy(kname, NETFS_DEFAULT_KERNEL, maxlen-1); kname[maxlen-1] = CHAR_NULL;