Commit a37af2891ba7c81d1fc60deb7167b24f26006ef8
1 parent
044ef8ea
Remove some uses of phys_ram_base (initial patch by Ian Jackson)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4455 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
23 additions
and
23 deletions
hw/pc.c
| @@ -507,7 +507,7 @@ static void load_linux(const char *kernel_filename, | @@ -507,7 +507,7 @@ static void load_linux(const char *kernel_filename, | ||
| 507 | int setup_size, kernel_size, initrd_size, cmdline_size; | 507 | int setup_size, kernel_size, initrd_size, cmdline_size; |
| 508 | uint32_t initrd_max; | 508 | uint32_t initrd_max; |
| 509 | uint8_t header[1024]; | 509 | uint8_t header[1024]; |
| 510 | - uint8_t *real_addr, *prot_addr, *cmdline_addr, *initrd_addr; | 510 | + target_phys_addr_t real_addr, prot_addr, cmdline_addr, initrd_addr; |
| 511 | FILE *f, *fi; | 511 | FILE *f, *fi; |
| 512 | 512 | ||
| 513 | /* Align to 16 bytes as a paranoia measure */ | 513 | /* Align to 16 bytes as a paranoia measure */ |
| @@ -533,19 +533,19 @@ static void load_linux(const char *kernel_filename, | @@ -533,19 +533,19 @@ static void load_linux(const char *kernel_filename, | ||
| 533 | 533 | ||
| 534 | if (protocol < 0x200 || !(header[0x211] & 0x01)) { | 534 | if (protocol < 0x200 || !(header[0x211] & 0x01)) { |
| 535 | /* Low kernel */ | 535 | /* Low kernel */ |
| 536 | - real_addr = phys_ram_base + 0x90000; | ||
| 537 | - cmdline_addr = phys_ram_base + 0x9a000 - cmdline_size; | ||
| 538 | - prot_addr = phys_ram_base + 0x10000; | 536 | + real_addr = 0x90000; |
| 537 | + cmdline_addr = 0x9a000 - cmdline_size; | ||
| 538 | + prot_addr = 0x10000; | ||
| 539 | } else if (protocol < 0x202) { | 539 | } else if (protocol < 0x202) { |
| 540 | /* High but ancient kernel */ | 540 | /* High but ancient kernel */ |
| 541 | - real_addr = phys_ram_base + 0x90000; | ||
| 542 | - cmdline_addr = phys_ram_base + 0x9a000 - cmdline_size; | ||
| 543 | - prot_addr = phys_ram_base + 0x100000; | 541 | + real_addr = 0x90000; |
| 542 | + cmdline_addr = 0x9a000 - cmdline_size; | ||
| 543 | + prot_addr = 0x100000; | ||
| 544 | } else { | 544 | } else { |
| 545 | /* High and recent kernel */ | 545 | /* High and recent kernel */ |
| 546 | - real_addr = phys_ram_base + 0x10000; | ||
| 547 | - cmdline_addr = phys_ram_base + 0x20000; | ||
| 548 | - prot_addr = phys_ram_base + 0x100000; | 546 | + real_addr = 0x10000; |
| 547 | + cmdline_addr = 0x20000; | ||
| 548 | + prot_addr = 0x100000; | ||
| 549 | } | 549 | } |
| 550 | 550 | ||
| 551 | #if 0 | 551 | #if 0 |
| @@ -553,9 +553,9 @@ static void load_linux(const char *kernel_filename, | @@ -553,9 +553,9 @@ static void load_linux(const char *kernel_filename, | ||
| 553 | "qemu: real_addr = %#zx\n" | 553 | "qemu: real_addr = %#zx\n" |
| 554 | "qemu: cmdline_addr = %#zx\n" | 554 | "qemu: cmdline_addr = %#zx\n" |
| 555 | "qemu: prot_addr = %#zx\n", | 555 | "qemu: prot_addr = %#zx\n", |
| 556 | - real_addr-phys_ram_base, | ||
| 557 | - cmdline_addr-phys_ram_base, | ||
| 558 | - prot_addr-phys_ram_base); | 556 | + real_addr, |
| 557 | + cmdline_addr, | ||
| 558 | + prot_addr); | ||
| 559 | #endif | 559 | #endif |
| 560 | 560 | ||
| 561 | /* highest address for loading the initrd */ | 561 | /* highest address for loading the initrd */ |
| @@ -568,10 +568,10 @@ static void load_linux(const char *kernel_filename, | @@ -568,10 +568,10 @@ static void load_linux(const char *kernel_filename, | ||
| 568 | initrd_max = ram_size-ACPI_DATA_SIZE-1; | 568 | initrd_max = ram_size-ACPI_DATA_SIZE-1; |
| 569 | 569 | ||
| 570 | /* kernel command line */ | 570 | /* kernel command line */ |
| 571 | - pstrcpy((char*)cmdline_addr, 4096, kernel_cmdline); | 571 | + pstrcpy_targphys(cmdline_addr, 4096, kernel_cmdline); |
| 572 | 572 | ||
| 573 | if (protocol >= 0x202) { | 573 | if (protocol >= 0x202) { |
| 574 | - stl_p(header+0x228, cmdline_addr-phys_ram_base); | 574 | + stl_p(header+0x228, cmdline_addr); |
| 575 | } else { | 575 | } else { |
| 576 | stw_p(header+0x20, 0xA33F); | 576 | stw_p(header+0x20, 0xA33F); |
| 577 | stw_p(header+0x22, cmdline_addr-real_addr); | 577 | stw_p(header+0x22, cmdline_addr-real_addr); |
| @@ -605,24 +605,24 @@ static void load_linux(const char *kernel_filename, | @@ -605,24 +605,24 @@ static void load_linux(const char *kernel_filename, | ||
| 605 | } | 605 | } |
| 606 | 606 | ||
| 607 | initrd_size = get_file_size(fi); | 607 | initrd_size = get_file_size(fi); |
| 608 | - initrd_addr = phys_ram_base + ((initrd_max-initrd_size) & ~4095); | 608 | + initrd_addr = (initrd_max-initrd_size) & ~4095; |
| 609 | 609 | ||
| 610 | fprintf(stderr, "qemu: loading initrd (%#x bytes) at %#zx\n", | 610 | fprintf(stderr, "qemu: loading initrd (%#x bytes) at %#zx\n", |
| 611 | - initrd_size, initrd_addr-phys_ram_base); | 611 | + initrd_size, initrd_addr); |
| 612 | 612 | ||
| 613 | - if (fread(initrd_addr, 1, initrd_size, fi) != initrd_size) { | 613 | + if (!fread_targphys_ok(initrd_addr, initrd_size, fi)) { |
| 614 | fprintf(stderr, "qemu: read error on initial ram disk '%s'\n", | 614 | fprintf(stderr, "qemu: read error on initial ram disk '%s'\n", |
| 615 | initrd_filename); | 615 | initrd_filename); |
| 616 | exit(1); | 616 | exit(1); |
| 617 | } | 617 | } |
| 618 | fclose(fi); | 618 | fclose(fi); |
| 619 | 619 | ||
| 620 | - stl_p(header+0x218, initrd_addr-phys_ram_base); | 620 | + stl_p(header+0x218, initrd_addr); |
| 621 | stl_p(header+0x21c, initrd_size); | 621 | stl_p(header+0x21c, initrd_size); |
| 622 | } | 622 | } |
| 623 | 623 | ||
| 624 | /* store the finalized header and load the rest of the kernel */ | 624 | /* store the finalized header and load the rest of the kernel */ |
| 625 | - memcpy(real_addr, header, 1024); | 625 | + cpu_physical_memory_write(real_addr, header, 1024); |
| 626 | 626 | ||
| 627 | setup_size = header[0x1f1]; | 627 | setup_size = header[0x1f1]; |
| 628 | if (setup_size == 0) | 628 | if (setup_size == 0) |
| @@ -631,8 +631,8 @@ static void load_linux(const char *kernel_filename, | @@ -631,8 +631,8 @@ static void load_linux(const char *kernel_filename, | ||
| 631 | setup_size = (setup_size+1)*512; | 631 | setup_size = (setup_size+1)*512; |
| 632 | kernel_size -= setup_size; /* Size of protected-mode code */ | 632 | kernel_size -= setup_size; /* Size of protected-mode code */ |
| 633 | 633 | ||
| 634 | - if (fread(real_addr+1024, 1, setup_size-1024, f) != setup_size-1024 || | ||
| 635 | - fread(prot_addr, 1, kernel_size, f) != kernel_size) { | 634 | + if (!fread_targphys_ok(real_addr+1024, setup_size-1024, f) || |
| 635 | + !fread_targphys_ok(prot_addr, kernel_size, f)) { | ||
| 636 | fprintf(stderr, "qemu: read error on kernel '%s'\n", | 636 | fprintf(stderr, "qemu: read error on kernel '%s'\n", |
| 637 | kernel_filename); | 637 | kernel_filename); |
| 638 | exit(1); | 638 | exit(1); |
| @@ -640,7 +640,7 @@ static void load_linux(const char *kernel_filename, | @@ -640,7 +640,7 @@ static void load_linux(const char *kernel_filename, | ||
| 640 | fclose(f); | 640 | fclose(f); |
| 641 | 641 | ||
| 642 | /* generate bootsector to set up the initial register state */ | 642 | /* generate bootsector to set up the initial register state */ |
| 643 | - real_seg = (real_addr-phys_ram_base) >> 4; | 643 | + real_seg = real_addr >> 4; |
| 644 | seg[0] = seg[2] = seg[3] = seg[4] = seg[4] = real_seg; | 644 | seg[0] = seg[2] = seg[3] = seg[4] = seg[4] = real_seg; |
| 645 | seg[1] = real_seg+0x20; /* CS */ | 645 | seg[1] = real_seg+0x20; /* CS */ |
| 646 | memset(gpr, 0, sizeof gpr); | 646 | memset(gpr, 0, sizeof gpr); |