qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] compute checksum for roms bigger than a segmen


From: malc
Subject: Re: [Qemu-devel] [PATCH] compute checksum for roms bigger than a segment
Date: Tue, 24 Mar 2009 06:14:39 +0300 (MSK)

On Mon, 23 Mar 2009, Glauber Costa wrote:

> On Mon, Mar 23, 2009 at 9:48 PM, malc <address@hidden> wrote:
> > On Mon, 23 Mar 2009, Glauber Costa wrote:
> >
> >> Some option roms (e1000 provided by gpxe project as an example)
> >> are bigger than a segment. The current algorithm to compute the
> >> checksum fails in such case. To proper compute the checksum, this
> >> patch deals with the possibility of the rom's size crossing a
> >> segment border.
> >>
> >> We don't need to worry about it crossing more than one segment
> >> border, since the option roms format only save one byte to store
> >> the image size (thus, maximum size = 0xff = 128k = 2 segments)
> >>
> >> Signed-off-by: Glauber Costa <address@hidden>
> >> ---
> >>  bios/rombios.c |   33 +++++++++++++++++++++++++++------
> >>  1 files changed, 27 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/bios/rombios.c b/bios/rombios.c
> >> index bc43251..6fede17 100644
> >> --- a/bios/rombios.c
> >> +++ b/bios/rombios.c
> >> @@ -10162,22 +10162,43 @@ no_serial:
> >>    ret
> >>
> >>  rom_checksum:
> >> -  push ax
> >> -  push bx
> >> -  push cx
> >> +  pusha
> >> +  push ds
> >> +
> >>    xor  ax, ax
> >>    xor  bx, bx
> >>    xor  cx, cx
> >> +  xor  dx, dx
> >> +
> >>    mov  ch, [2]
> >>    shl  cx, #1
> >> +
> >> +  jnc checksum_loop
> >> +  mov  dx, cx
> >> +  mov  cx, #0xffff
> >
> >     xchg dx, cx
> >     dec  cx
> I actually skipped this one.
> 
> Ok for xchg, but cx at this time holds the remaining bytes, so dec cx won't
> have the effect you think it will.

Initially DX = 0, CX = remaining bytes
XCHG      CX = 0, DX = remaining bytes
DEC       CX = 0FFFFh

Unless i'm really missing something, this yields identical results with
the original code.

-- 
mailto:address@hidden

reply via email to

[Prev in Thread] Current Thread [Next in Thread]