diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-06-04 10:36:01 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-06-04 10:36:01 +0100 |
commit | 39c0fe04033bfef6cffec217bf3399a1718f2b8d (patch) | |
tree | 5c3733948888d26230fa30d16817c93aa190c1c0 /tools/firmware/rombios | |
parent | 83fd7b933efd4264a3e5de03b793e8f412c21e05 (diff) | |
download | xen-39c0fe04033bfef6cffec217bf3399a1718f2b8d.tar.gz xen-39c0fe04033bfef6cffec217bf3399a1718f2b8d.tar.bz2 xen-39c0fe04033bfef6cffec217bf3399a1718f2b8d.zip |
rombios: compute checksum for roms bigger than a segment
From: Glauber Costa <glommer@redhat.com>
From: "Sebastian Herbszt" <herbszt@gmx.de>
Ported by: Akio Takebe <takebe_akio@jp.fujitsu.com>
Diffstat (limited to 'tools/firmware/rombios')
-rw-r--r-- | tools/firmware/rombios/rombios.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/tools/firmware/rombios/rombios.c b/tools/firmware/rombios/rombios.c index 94f9a9b521..2d97a401d5 100644 --- a/tools/firmware/rombios/rombios.c +++ b/tools/firmware/rombios/rombios.c @@ -10439,22 +10439,44 @@ 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 + jz checksum_loop + xchg dx, cx + dec cx + checksum_loop: add al, [bx] inc bx loop checksum_loop + + test dx, dx + je checksum_out + + add al, [bx] + mov cx, dx + mov dx, ds + 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 |