pxe: allow TFTP server IP to be empty when not using TFTP
[profile/ivi/syslinux.git] / core / layout.inc
1 ; -----------------------------------------------------------------------
2 ;
3 ;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
4 ;   Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
5 ;
6 ;   This program is free software; you can redistribute it and/or modify
7 ;   it under the terms of the GNU General Public License as published by
8 ;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
9 ;   Bostom MA 02111-1307, USA; either version 2 of the License, or
10 ;   (at your option) any later version; incorporated herein by reference.
11 ;
12 ; -----------------------------------------------------------------------
13
14 ;
15 ; layout.inc
16 ;
17 ; Memory layout of segments
18 ;
19
20                 ; Default to 16-bit code
21                 bits 16
22
23 ; Memory below 0800h is reserved for the BIOS and the MBR.
24 BSS_START       equ 0800h
25
26 ; Text starts at the load address of 07C00h.
27 TEXT_START      equ 7C00h
28
29 ;
30 ; 16-bit stack layout
31 ;
32 ; PXELINUX: There are apparently some AMI BIOSes in the field which
33 ; put their BEV stack somewhere below 7C00h (and therefore don't
34 ; handle localboot properly), so avoid that immediate memory region.
35 ; The range that is known to be bad is approximately 75E8..7C00; the
36 ; lower bound is tight.
37
38                 global STACK_LEN, STACK_TOP, STACK_BASE
39 STACK_LEN       equ 4096
40 %if IS_PXELINUX
41 STACK_TOP       equ 7000h
42 %else
43 STACK_TOP       equ 7c00h
44 %endif
45 STACK_BASE      equ STACK_TOP - STACK_LEN
46
47 ; The secondary BSS section, above the text; we really wish we could
48 ; just make it follow .bcopy32 or hang off the end,
49 ; but it doesn't seem to work that way.
50 LATEBSS_START   equ 0B800h
51
52 ;
53 ; 32-bit stack layout
54 ;
55                 global STACK32_LEN
56 STACK32_LEN     equ 64*1024
57
58                 section .stack          nobits write align=4096
59                 resb STACK32_LEN
60
61 ;
62 ; The various sections and their relationship
63 ;
64                 ; Use .earlybss for things that MUST be in low memory.
65                 section .earlybss       nobits write
66                 section .config         write progbits align=4
67                 section .replacestub    exec write progbits align=16
68                 section .gentextnr      exec write nobits align=16
69
70                 ; Use .bss16 for things that doesn't have to be in low memory;
71                 ; .earlybss should be used for things that absolutely have
72                 ; to be below 0x7c00.
73                 section .bss16          write nobits align=16
74
75 %if 0 ; IS_PXELINUX
76                 ; Warning here: RBFG build 22 randomly overwrites
77                 ; memory location [0x5680,0x576c), possibly more.  It
78                 ; seems that it gets confused and screws up the
79                 ; pointer to its own internal packet buffer and starts
80                 ; writing a received ARP packet into low memory.
81                 section .rbfg           write nobits
82 RBFG_brainfuck: resb 2048               ; Bigger than an Ethernet packet...
83 %endif
84
85                 section .init           exec write progbits align=1
86                 section .text16         exec write progbits align=1
87                 section .textnr         exec nowrite progbits align=1
88                 section .bcopyxx.text   exec nowrite progbits align=16
89                 section .bcopyxx.data   noexec write progbits align=16
90                 section .data16         noexec write progbits align=16
91
92                 section .adv            write nobits align=512
93
94                 ; .uibss contains bss data which is guaranteed to be
95                 ; safe to clobber during the loading of the image.  This
96                 ; is because while loading the primary image we will clobber
97                 ; the spillover from the last fractional sector load.
98                 section .uibss          write nobits align=16
99
100                 ; Symbols from linker script
101 %macro SECINFO 1
102                 extern __%1_start, __%1_lma, __%1_end
103                 extern __%1_len, __%1_dwords
104 %endmacro
105                 SECINFO bss16
106                 SECINFO uibss
107                 SECINFO config
108                 SECINFO replacestub
109                 SECINFO bcopyxx
110
111                 SECINFO pm_code
112                 SECINFO high_clear
113
114                 SECINFO bss
115
116                 extern free_high_memory
117
118                 global _start
119
120                 section .text16
121
122 ;
123 ; Segment assignments in the bottom 640K
124 ; Keep the low-memory footprint as small as possible... overrun is a hard
125 ; failure!
126 ;
127
128 serial_buf_size equ 4096                ; Should be a power of 2
129
130 ;
131 ; Contents of aux_seg
132 ;
133                 extern aux_seg          ; Actual segment assigned by linker
134
135                 struc aux
136 .fontbuf        resb 8192
137 .serial         resb serial_buf_size
138
139                 alignb 4096             ; Align the next segment to 4K
140                 endstruc
141
142                 section .auxseg         write nobits align=16
143 auxseg          resb aux_size
144
145 ;
146 ; Transfer buffer segment: guaranteed to be aligned 64K, used for disk I/O
147 ; One symbol for the segment number, one for the absolute address
148 ;
149                 extern  xfer_buf_seg
150                 section .xfer_buf       write nobits align=65536
151                 global  core_xfer_buf
152 core_xfer_buf   resb 65536
153
154 ;
155 ; Segment for the real mode code (needed as long as we have a in-kernel
156 ; loader and/or COM16 support.
157 ; One symbol for the segment number, one for the absolute address
158 ;
159                 extern  real_mode_seg
160                 section .real_mode      write nobits align=65536
161                 global  core_real_mode
162 core_real_mode  resb 65536
163 comboot_seg     equ real_mode_seg       ; COMBOOT image loading zone
164
165 ;
166 ; At the very end, the lowmem heap
167 ;
168                 extern __lowmem_heap
169 min_lowmem_heap equ 65536
170
171                 section .text16