From: H. Peter Anvin Date: Sun, 23 Mar 2008 00:25:31 +0000 (-0700) Subject: Merge commit 'origin/nolen' into gpxe-support X-Git-Tag: syslinux-3.70-pre6~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=51455f8e30fbf4ec689de70e14fe607284d8c6ec;p=profile%2Fivi%2Fsyslinux.git Merge commit 'origin/nolen' into gpxe-support Conflicts: NEWS dnsresolv.inc pxelinux.asm --- 51455f8e30fbf4ec689de70e14fe607284d8c6ec diff --cc NEWS index 73f6453,7b444fe..46ae111 --- a/NEWS +++ b/NEWS @@@ -3,11 -3,44 +3,49 @@@ apply to that specific program only; ot them. Changes in 3.70: + * PXELINUX: Support enhanced capabilities when running on top + of gPXE (http://www.etherboot.org/). In particular, support + URL-style syntax for filenames, and any protocol that gPXE + supports (except, currently, iSCSI and AoE.) This feature + is currently highly experimental. + * Substantial infrastructure changes to support files whose + length aren't known at open time (typically network + connections.) Please note that the semantics of some of the + comboot APIs have changed slightly; please see doc/comboot.doc. + * PXELINUX: We no longer require a TFTP server which supports + the tsize option for all transfers. + + Changes in 3.62: + * Clean up garbage after "aborted." message. + * Clean up memdump.com filenames. + * Support SHA256 and SHA512 encrypted passwords. + * The shuffle library now can generate chained descriptors, + thus allowing pretty much arbitrarily complex memory maps. + * Handle command lines up to 2047 characters, the current + Linux kernel limit. + * vesamenu: support systems without linear framebuffer support + (sigh, what is this, 1993?) and 15-bit RGB modes. + * Move the label storage (for the command-line interface) to + high memory, removing the size limit and freeing up 64K of + low memory. + * Get rid of 4096-entry limit in the simple menu system. + * New hierarchial submenu support: see MENU BEGIN, MENU END, + MENU GOTO in doc/menu.txt. + * MENU QUIT allows creating a menu entry for returning to the + command line. + * ISOLINUX: Work around bug in certain Adaptec BIOSes, + patch by Bruce Robson. + * pngtopnm dependency removed from samples/ directory. + * Text documentation files (in doc/) renamed *.doc -> *.txt. + + Changes in 3.61: + * EXTLINUX: fix crash when accessing an empty file. + * elf.c32: If a PHDR segment is present, load it. + * Fix SHA-1 and MD5 passwords. + * ISOLINUX: fix booting when mastered without + mkisofs -boot-info-table (broken since 3.50, sigh...) + * Handle BIOSes which emit multiple contiguous valid + memory regions in the e820 map. Changes in 3.60: * Support for "auxilliary data vector", a small amount of diff --cc pxelinux.asm index 4ff4d40,ba9c6e1..9154dfa --- a/pxelinux.asm +++ b/pxelinux.asm @@@ -1289,16 -1267,9 +1278,8 @@@ searchdir pop si ; We want the packet ptr in SI mov eax,[si+tftp_filesize] - cmp eax,-1 - jz .no_tsize - pop bp ; Junk - pop bp ; Junk (retry counter) - +.got_file: ; SI->socket structure, EAX = size - mov edx,eax - shr edx,16 ; DX:AX == EAX - and eax,eax ; Set ZF depending on file size - pop bp ; Junk - pop bp ; Junk (retry counter) jz .error_si ; ZF = 1 need to free the socket .ret: pop bp @@@ -1739,77 -1707,13 +1784,83 @@@ fill_buffer mov ax,ds mov es,ax - mov si,bx + ; Note: getting the EOF packet is not the same thing + ; as tftp_filepos == tftp_filesize; if the EOF packet + ; is empty the latter condition can be true without + ; having gotten the official EOF. + cmp byte [si+tftp_goteof],0 - jne .ret ; Alread EOF ++ jne .gotten ; Alread EOF ++ +%if GPXE + cmp word [si+tftp_localport], -1 + jne .get_packet_tftp + call get_packet_gpxe + jmp .gotten +.get_packet_tftp: +%endif ; GPXE + call get_packet +.gotten: + pop es + popad - - jmp .need_more ++ ret + +%if GPXE +; +; Get a fresh packet from a gPXE socket; expects fs -> pktbuf_seg +; and ds:si -> socket structure +; +; Assumes CS == DS == ES. +; +get_packet_gpxe: + mov di,gpxe_file_read + mov ax,[si+tftp_remoteport] ; gPXE filehandle + mov [di+2],ax + mov word [di+4],PKTBUF_SIZE + mov ax,[si+tftp_pktbuf] + mov [di+6],ax + mov [si+tftp_dataptr],ax + mov [di+8],fs + +.again: + mov bx,PXENV_FILE_READ + call pxenv + ; XXX: FIX THIS: Need to be able to distinguish + ; error, EOF, and no data + jc .again + + movzx eax,word [di+4] ; Bytes read + mov [si+tftp_bytesleft],ax ; Bytes in buffer + add [si+tftp_filepos],eax ; Position in file + + and ax,ax + jnz .got_stuff + + ; We got EOF here, make sure the upper layers know ++ mov byte [si+tftp_goteof],1 + mov eax,[si+tftp_filepos] + mov [si+tftp_filesize],eax + +.got_stuff: + ; If we're done here, close the file + mov eax,[si+tftp_filepos] + cmp [si+tftp_filesize],eax + ja .done + + ; Reuse the previous [es:di] structure since the + ; relevant fields are all the same + mov bx,PXENV_FILE_CLOSE + call pxenv + ; Ignore return... +.done: + ret +%endif ; GPXE +; +; Get a fresh packet; expects fs -> pktbuf_seg and ds:si -> socket structure +; +; Assumes CS == DS == ES. +; +get_packet: .packet_loop: ; Start by ACKing the previous packet; this should cause the ; next packet to be sent.