1 /* ----------------------------------------------------------------------- * 2 * 3 * Copyright 2007-2009 H. Peter Anvin - All Rights Reserved 4 * Copyright 2009 Intel Corporation; author: H. Peter Anvin 5 * 6 * Permission is hereby granted, free of charge, to any person 7 * obtaining a copy of this software and associated documentation 8 * files (the "Software"), to deal in the Software without 9 * restriction, including without limitation the rights to use, 10 * copy, modify, merge, publish, distribute, sublicense, and/or 11 * sell copies of the Software, and to permit persons to whom 12 * the Software is furnished to do so, subject to the following 13 * conditions: 14 * 15 * The above copyright notice and this permission notice shall 16 * be included in all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 * OTHER DEALINGS IN THE SOFTWARE. 26 * 27 * ----------------------------------------------------------------------- */ 28 29 /* 30 * syslinux/config.h 31 * 32 * Query syslinux configuration information. 33 */ 34 35 #ifndef _SYSLINUX_CONFIG_H 36 #define _SYSLINUX_CONFIG_H 37 38 #include <stdint.h> 39 #include <com32.h> 40 41 enum syslinux_filesystem { 42 SYSLINUX_FS_UNKNOWN = 0x30, 43 SYSLINUX_FS_SYSLINUX = 0x31, 44 SYSLINUX_FS_PXELINUX = 0x32, 45 SYSLINUX_FS_ISOLINUX = 0x33, 46 SYSLINUX_FS_EXTLINUX = 0x34, 47 }; 48 49 struct syslinux_version { 50 uint16_t version; /* (major << 8)+minor */ 51 uint16_t max_api; 52 enum syslinux_filesystem filesystem; 53 const char *version_string; 54 const char *copyright_string; 55 }; 56 57 struct syslinux_ipinfo { 58 uint32_t ipver; 59 uint32_t myip; 60 uint32_t serverip; 61 uint32_t gateway; 62 uint32_t netmask; 63 }; 64 65 extern __nocommon struct syslinux_version __syslinux_version; 66 static inline const struct syslinux_version *syslinux_version(void) 67 { 68 return &__syslinux_version; 69 } 70 71 union syslinux_derivative_info { 72 struct { 73 com32sys_t r; 74 const void *esbx; 75 const void *fssi; 76 const void *gsdi; 77 } rr; /* real raw */ 78 struct { 79 uint16_t _pad1[4]; 80 uint32_t _pad2[7]; 81 uint8_t filesystem; 82 uint8_t ah; 83 uint16_t axh; 84 } c; /* common */ 85 struct { 86 uint16_t gs; 87 uint16_t fs; 88 uint16_t es; 89 uint16_t ds; 90 uint16_t di, dih; 91 uint16_t si, sih; 92 uint16_t bp, bph; 93 uint16_t sp, sph; 94 uint16_t bx, bxh; 95 uint16_t dx, dxh; 96 uint16_t cx, cxh; 97 uint16_t ax, axh; 98 uint32_t eflags; 99 const void *esbx; 100 const void *fssi; 101 const void *gsdi; 102 } r; /* raw */ 103 struct { 104 uint16_t _gs, _fs, _es, _ds; 105 uint32_t _edi, _esi, _ebp, _esp, _ebx; 106 uint8_t drive_number, dh; 107 uint16_t _dxh; 108 uint8_t sector_shift, ch; 109 uint16_t _cxh; 110 uint8_t filesystem, ah; 111 uint16_t _axh; 112 uint32_t _eflags; 113 const void *ptab_ptr; 114 const uint32_t *esdi_ptr; 115 const uint64_t *partoffset; 116 } disk; /* syslinux/extlinux */ 117 struct { 118 uint16_t _gs, stack_seg, pxenv_seg, _ds; 119 uint32_t _edi, stack_offs, _ebp, _esp, pxenv_offs; 120 uint16_t apiver; 121 uint16_t _dxh; 122 uint32_t myip; 123 uint8_t filesystem, ah; 124 uint16_t _axh; 125 uint32_t _eflags; 126 const void *pxenvptr; 127 const void *stack; 128 const struct syslinux_ipinfo *ipinfo; 129 } pxe; /* pxelinux */ 130 struct { 131 uint16_t _gs, _fs, _es, _ds; 132 uint32_t _edi, _esi, _ebp, _esp, _ebx; 133 uint8_t drive_number, dh; 134 uint16_t _dxh; 135 uint8_t sector_shift, cd_mode; 136 uint16_t _cxh; 137 uint8_t filesystem, ah; 138 uint16_t _axh; 139 uint32_t _eflags; 140 const void *spec_packet; 141 const uint32_t *esdi_ptr; 142 const uint64_t *partoffset; 143 } iso; /* isolinux */ 144 }; 145 146 extern __nocommon union syslinux_derivative_info __syslinux_derivative_info; 147 static inline const union syslinux_derivative_info 148 *syslinux_derivative_info(void) 149 { 150 return &__syslinux_derivative_info; 151 } 152 153 struct syslinux_serial_console_info { 154 uint16_t iobase; 155 uint16_t divisor; 156 uint16_t flowctl; 157 }; 158 159 extern void __syslinux_set_serial_console_info(void); 160 161 extern __nocommon struct syslinux_serial_console_info 162 __syslinux_serial_console_info; 163 static inline const struct syslinux_serial_console_info 164 *syslinux_serial_console_info(void) 165 { 166 return &__syslinux_serial_console_info; 167 } 168 169 extern char ConfigName[]; 170 static inline const char *syslinux_config_file(void) 171 { 172 return ConfigName; 173 } 174 175 struct syslinux_ipappend_strings { 176 int count; 177 const char *const *ptr; 178 }; 179 extern __nocommon struct syslinux_ipappend_strings __syslinux_ipappend_strings; 180 static inline const struct syslinux_ipappend_strings 181 *syslinux_ipappend_strings(void) 182 { 183 return &__syslinux_ipappend_strings; 184 } 185 186 static inline enum syslinux_filesystem syslinux_filesystem(void) 187 { 188 return syslinux_derivative_info()->c.filesystem; 189 } 190 191 extern void get_derivative_info(union syslinux_derivative_info *di); 192 193 #endif /* _SYSLINUX_CONFIG_H */ 194