uint32_t domid,
struct e820entry *entry)
{
+#define ACPI_NVS_BASE_ADDRESS 0xfec80000
FILE *fd;
char line[256];
char *s;
uint64_t begin_addr, end_addr, size;
-
- if ((fd = fopen("/proc/iomem", "r")))
+ if (!(fd = fopen("/proc/iomem", "r")))
return 0;
while ((fgets(line, 256, fd)))
if (strstr(line, "ACPI Non-volatile Storage"))
{
- begin_addr = strtol(line, &s, 16);
- end_addr = strtol(s + 1, NULL, 16);
+ begin_addr = strtoll(line, &s, 16);
+ end_addr = strtoll(s + 1, NULL, 16);
size = end_addr - begin_addr + 1;
- entry->addr = begin_addr;
- entry->size = size;
- entry->type = E820_NVS;
-
- xc_domain_memory_mapping(xc_handle, domid,
- begin_addr >> XC_PAGE_SHIFT,
- begin_addr >> XC_PAGE_SHIFT,
- size >> XC_PAGE_SHIFT,
- 1);
+
+ if (xc_domain_memory_mapping(xc_handle, domid,
+ ACPI_NVS_BASE_ADDRESS >> XC_PAGE_SHIFT,
+ begin_addr >> XC_PAGE_SHIFT,
+ size >> XC_PAGE_SHIFT,
+ 1) == 0)
+ {
+ entry->addr = ACPI_NVS_BASE_ADDRESS;
+ entry->size = size;
+ entry->type = E820_NVS;
+ }
+
fclose(fd);
return 1;
}