Merge mainline int sparc-mkimage-unify
This commit is contained in:
commit
0b4ab8e54a
13 changed files with 174 additions and 105 deletions
|
@ -284,8 +284,8 @@ grub_ieee1275_read (grub_ieee1275_ihandle_t ihandle, void *buffer,
|
|||
}
|
||||
|
||||
int
|
||||
grub_ieee1275_seek (grub_ieee1275_ihandle_t ihandle, int pos_hi,
|
||||
int pos_lo, grub_ssize_t *result)
|
||||
grub_ieee1275_seek (grub_ieee1275_ihandle_t ihandle, grub_disk_addr_t pos,
|
||||
grub_ssize_t *result)
|
||||
{
|
||||
struct write_args
|
||||
{
|
||||
|
@ -299,8 +299,15 @@ grub_ieee1275_seek (grub_ieee1275_ihandle_t ihandle, int pos_hi,
|
|||
|
||||
INIT_IEEE1275_COMMON (&args.common, "seek", 3, 1);
|
||||
args.ihandle = ihandle;
|
||||
args.pos_hi = (grub_ieee1275_cell_t) pos_hi;
|
||||
args.pos_lo = (grub_ieee1275_cell_t) pos_lo;
|
||||
/* To prevent stupid gcc warning. */
|
||||
#if GRUB_IEEE1275_CELL_SIZEOF >= 8
|
||||
args.pos_hi = 0;
|
||||
args.pos_lo = pos;
|
||||
#else
|
||||
args.pos_hi = (grub_ieee1275_cell_t) (pos >> (8 * GRUB_IEEE1275_CELL_SIZEOF));
|
||||
args.pos_lo = (grub_ieee1275_cell_t)
|
||||
(pos & ((1ULL << (8 * GRUB_IEEE1275_CELL_SIZEOF)) - 1));
|
||||
#endif
|
||||
|
||||
if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
|
||||
return -1;
|
||||
|
|
|
@ -199,9 +199,9 @@ nextprop:
|
|||
}
|
||||
|
||||
/* Call the "map" method of /chosen/mmu. */
|
||||
static int
|
||||
grub_map (grub_addr_t phys, grub_addr_t virt, grub_uint32_t size,
|
||||
grub_uint8_t mode)
|
||||
int
|
||||
grub_ieee1275_map (grub_addr_t phys, grub_addr_t virt, grub_size_t size,
|
||||
grub_uint32_t mode)
|
||||
{
|
||||
struct map_args {
|
||||
struct grub_ieee1275_common_hdr common;
|
||||
|
@ -210,17 +210,30 @@ grub_map (grub_addr_t phys, grub_addr_t virt, grub_uint32_t size,
|
|||
grub_ieee1275_cell_t mode;
|
||||
grub_ieee1275_cell_t size;
|
||||
grub_ieee1275_cell_t virt;
|
||||
grub_ieee1275_cell_t phys;
|
||||
#ifdef GRUB_MACHINE_SPARC64
|
||||
grub_ieee1275_cell_t phys_high;
|
||||
#endif
|
||||
grub_ieee1275_cell_t phys_low;
|
||||
grub_ieee1275_cell_t catch_result;
|
||||
} args;
|
||||
|
||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 6, 1);
|
||||
INIT_IEEE1275_COMMON (&args.common, "call-method",
|
||||
#ifdef GRUB_MACHINE_SPARC64
|
||||
7,
|
||||
#else
|
||||
6,
|
||||
#endif
|
||||
1);
|
||||
args.method = (grub_ieee1275_cell_t) "map";
|
||||
args.ihandle = grub_ieee1275_mmu;
|
||||
args.phys = phys;
|
||||
#ifdef GRUB_MACHINE_SPARC64
|
||||
args.phys_high = 0;
|
||||
#endif
|
||||
args.phys_low = phys;
|
||||
args.virt = virt;
|
||||
args.size = size;
|
||||
args.mode = mode; /* Format is WIMG0PP. */
|
||||
args.catch_result = (grub_ieee1275_cell_t) -1;
|
||||
|
||||
if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
|
||||
return -1;
|
||||
|
@ -235,7 +248,7 @@ grub_claimmap (grub_addr_t addr, grub_size_t size)
|
|||
return -1;
|
||||
|
||||
if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_REAL_MODE)
|
||||
&& grub_map (addr, addr, size, 0x00))
|
||||
&& grub_ieee1275_map (addr, addr, size, 0x00))
|
||||
{
|
||||
grub_printf ("map failed: address 0x%llx, size 0x%llx\n",
|
||||
(long long) addr, (long long) size);
|
||||
|
|
|
@ -53,12 +53,16 @@ codestart:
|
|||
or %o3, %lo(_end), %o3
|
||||
sethi %hi(grub_total_module_size), %o4
|
||||
lduw [%o4 + %lo(grub_total_module_size)], %o4
|
||||
add %o2, %o4, %o2
|
||||
add %o3, %o4, %o3
|
||||
sub %o2, 4, %o2
|
||||
sub %o3, 4, %o3
|
||||
1: lduw [%o2], %o5
|
||||
stw %o5, [%o3]
|
||||
subcc %o4, 4, %o4
|
||||
add %o2, 4, %o2
|
||||
sub %o2, 4, %o2
|
||||
bne,pt %icc, 1b
|
||||
add %o3, 4, %o3
|
||||
sub %o3, 4, %o3
|
||||
|
||||
/* Now it's safe to clear out the BSS. */
|
||||
sethi %hi(__bss_start), %o2
|
||||
|
|
|
@ -21,39 +21,6 @@
|
|||
|
||||
/* Sun specific ieee1275 interfaces used by GRUB. */
|
||||
|
||||
int
|
||||
grub_ieee1275_map_physical (grub_addr_t paddr, grub_addr_t vaddr,
|
||||
grub_size_t size, grub_uint32_t mode)
|
||||
{
|
||||
struct map_physical_args
|
||||
{
|
||||
struct grub_ieee1275_common_hdr common;
|
||||
grub_ieee1275_cell_t method;
|
||||
grub_ieee1275_cell_t ihandle;
|
||||
grub_ieee1275_cell_t mode;
|
||||
grub_ieee1275_cell_t size;
|
||||
grub_ieee1275_cell_t virt;
|
||||
grub_ieee1275_cell_t phys_high;
|
||||
grub_ieee1275_cell_t phys_low;
|
||||
grub_ieee1275_cell_t catch_result;
|
||||
}
|
||||
args;
|
||||
|
||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 7, 1);
|
||||
args.method = (grub_ieee1275_cell_t) "map";
|
||||
args.ihandle = grub_ieee1275_mmu;
|
||||
args.mode = mode;
|
||||
args.size = size;
|
||||
args.virt = vaddr;
|
||||
args.phys_high = 0;
|
||||
args.phys_low = paddr;
|
||||
args.catch_result = (grub_ieee1275_cell_t) -1;
|
||||
|
||||
if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
|
||||
return -1;
|
||||
return args.catch_result;
|
||||
}
|
||||
|
||||
int
|
||||
grub_ieee1275_claim_vaddr (grub_addr_t vaddr, grub_size_t size)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue