open-iscsi/open-iscsi-ibft-scan-memory-area

49 lines
1.5 KiB
Plaintext

commit a58c90313743e5e1614aa8a0522d6a441dc79ed3
Author: Hannes Reinecke <hare@suse.de>
Date: Mon Apr 21 11:28:25 2008 +0200
Scan Memory area for iBFT correctly
The iBFT might be constructed in the main memory area, too.
For this we don't have a ROM header, so we have to skip the
checks for this, too.
Signed-off-by: Hannes Reinecke <hare@suse.de>
diff --git a/utils/fwparam_ibft/fwparam_ibft.c b/utils/fwparam_ibft/fwparam_ibft.c
index dc0fc6b..84502bb 100644
--- a/utils/fwparam_ibft/fwparam_ibft.c
+++ b/utils/fwparam_ibft/fwparam_ibft.c
@@ -502,18 +502,24 @@ char *search_ibft(unsigned char *start, int start_addr, int length)
{
unsigned char *cur_ptr, *rom_end;
struct ibft_table_hdr *ibft_hdr;
- unsigned char check_sum, rom_size;
+ unsigned char check_sum;
+ short rom_size = -1;
uint32_t i;
cur_ptr = (unsigned char *)start;
while (cur_ptr < (start + length)) {
- if (memcmp(cur_ptr, ID_ROMEXT, strlen(ID_ROMEXT)) != 0) {
- /* Skip this block */
- cur_ptr += 512;
- continue;
+ if (rom_size < 0) {
+ /* Scan the upper memory area */
+ rom_size = 256;
+ } else {
+ /* Scan extenions in the ROM area */
+ if (memcmp(cur_ptr, ID_ROMEXT, strlen(ID_ROMEXT)) != 0) {
+ /* Skip this block */
+ cur_ptr += 512;
+ continue;
+ }
+ memcpy(&rom_size, cur_ptr + 2, 1);
}
- memcpy(&rom_size, cur_ptr + 2, 1);
-
if (debug > 1)
fprintf(stderr, "Found rom at %x of size %d\n",
((int)(cur_ptr - start) + start_addr),