[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] compute checksum for roms bigger than a segment
From: |
malc |
Subject: |
Re: [Qemu-devel] [PATCH] compute checksum for roms bigger than a segment |
Date: |
Tue, 24 Mar 2009 03:48:29 +0300 (MSK) |
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
> +
> checksum_loop:
> add al, [bx]
> inc bx
> loop checksum_loop
> +
> + cmp dx, #0
test dx, dx
> + je checksum_out
> +
> + add al, [bx]
DS:[0] is added twice, intended?
> + mov cx, dx
> + mov dx, ds
> + add dx, #0x1000
add dh, #0x10
> + mov ds, dx
> + xor dx, dx
> + xor bx, bx
> +
> + jmp checksum_loop
> +
> +checksum_out:
> and al, #0xff
> - pop cx
> - pop bx
> - pop ax
> + pop ds
> + popa
> ret
>
>
>
--
mailto:address@hidden
[Qemu-devel] [PATCH] compute checksum for roms bigger than a segment, Glauber Costa, 2009/03/25