提交 2024c014 编写于 作者: T Thomas Huth 提交者: David Gibson

sparc: Use the new common NVRAM functions for system and free space partition

The system and free space NVRAM partitions (for OpenBIOS) are created
in exactly the same way as the Mac-style CHRP NVRAM partitions, so we
can use the new common helper functions to do this job here, too.
Signed-off-by: NThomas Huth <thuth@redhat.com>
Tested-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
上级 55d9950a
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include "hw/scsi/esp.h" #include "hw/scsi/esp.h"
#include "hw/i386/pc.h" #include "hw/i386/pc.h"
#include "hw/isa/isa.h" #include "hw/isa/isa.h"
#include "hw/nvram/chrp_nvram.h"
#include "hw/nvram/fw_cfg.h" #include "hw/nvram/fw_cfg.h"
#include "hw/char/escc.h" #include "hw/char/escc.h"
#include "hw/empty_slot.h" #include "hw/empty_slot.h"
...@@ -117,39 +118,17 @@ static void nvram_init(Nvram *nvram, uint8_t *macaddr, ...@@ -117,39 +118,17 @@ static void nvram_init(Nvram *nvram, uint8_t *macaddr,
int nvram_machine_id, const char *arch) int nvram_machine_id, const char *arch)
{ {
unsigned int i; unsigned int i;
uint32_t start, end; int sysp_end;
uint8_t image[0x1ff0]; uint8_t image[0x1ff0];
struct OpenBIOS_nvpart_v1 *part_header;
NvramClass *k = NVRAM_GET_CLASS(nvram); NvramClass *k = NVRAM_GET_CLASS(nvram);
memset(image, '\0', sizeof(image)); memset(image, '\0', sizeof(image));
start = 0; /* OpenBIOS nvram variables partition */
sysp_end = chrp_nvram_create_system_partition(image, 0);
// OpenBIOS nvram variables /* Free space partition */
// Variable partition chrp_nvram_create_free_partition(&image[sysp_end], 0x1fd0 - sysp_end);
part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
part_header->signature = OPENBIOS_PART_SYSTEM;
pstrcpy(part_header->name, sizeof(part_header->name), "system");
end = start + sizeof(struct OpenBIOS_nvpart_v1);
for (i = 0; i < nb_prom_envs; i++)
end = OpenBIOS_set_var(image, end, prom_envs[i]);
// End marker
image[end++] = '\0';
end = start + ((end - start + 15) & ~15);
OpenBIOS_finish_partition(part_header, end - start);
// free partition
start = end;
part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
part_header->signature = OPENBIOS_PART_FREE;
pstrcpy(part_header->name, sizeof(part_header->name), "free");
end = 0x1fd0;
OpenBIOS_finish_partition(part_header, end - start);
Sun_init_header((struct Sun_nvram *)&image[0x1fd8], macaddr, Sun_init_header((struct Sun_nvram *)&image[0x1fd8], macaddr,
nvram_machine_id); nvram_machine_id);
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "sysemu/sysemu.h" #include "sysemu/sysemu.h"
#include "hw/boards.h" #include "hw/boards.h"
#include "hw/nvram/openbios_firmware_abi.h" #include "hw/nvram/openbios_firmware_abi.h"
#include "hw/nvram/chrp_nvram.h"
#include "hw/nvram/fw_cfg.h" #include "hw/nvram/fw_cfg.h"
#include "hw/sysbus.h" #include "hw/sysbus.h"
#include "hw/ide.h" #include "hw/ide.h"
...@@ -124,39 +125,17 @@ static int sun4u_NVRAM_set_params(Nvram *nvram, uint16_t NVRAM_size, ...@@ -124,39 +125,17 @@ static int sun4u_NVRAM_set_params(Nvram *nvram, uint16_t NVRAM_size,
const uint8_t *macaddr) const uint8_t *macaddr)
{ {
unsigned int i; unsigned int i;
uint32_t start, end; int sysp_end;
uint8_t image[0x1ff0]; uint8_t image[0x1ff0];
struct OpenBIOS_nvpart_v1 *part_header;
NvramClass *k = NVRAM_GET_CLASS(nvram); NvramClass *k = NVRAM_GET_CLASS(nvram);
memset(image, '\0', sizeof(image)); memset(image, '\0', sizeof(image));
start = 0; /* OpenBIOS nvram variables partition */
sysp_end = chrp_nvram_create_system_partition(image, 0);
// OpenBIOS nvram variables /* Free space partition */
// Variable partition chrp_nvram_create_free_partition(&image[sysp_end], 0x1fd0 - sysp_end);
part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
part_header->signature = OPENBIOS_PART_SYSTEM;
pstrcpy(part_header->name, sizeof(part_header->name), "system");
end = start + sizeof(struct OpenBIOS_nvpart_v1);
for (i = 0; i < nb_prom_envs; i++)
end = OpenBIOS_set_var(image, end, prom_envs[i]);
// End marker
image[end++] = '\0';
end = start + ((end - start + 15) & ~15);
OpenBIOS_finish_partition(part_header, end - start);
// free partition
start = end;
part_header = (struct OpenBIOS_nvpart_v1 *)&image[start];
part_header->signature = OPENBIOS_PART_FREE;
pstrcpy(part_header->name, sizeof(part_header->name), "free");
end = 0x1fd0;
OpenBIOS_finish_partition(part_header, end - start);
Sun_init_header((struct Sun_nvram *)&image[0x1fd8], macaddr, 0x80); Sun_init_header((struct Sun_nvram *)&image[0x1fd8], macaddr, 0x80);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册