int __init xsm_dt_policy_init(void **policy_buffer, size_t *policy_size) { struct bootmodule *mod = boot_module_find_by_kind(BOOTMOD_XSM); paddr_t paddr, len; if ( !mod || !mod->size ) return 0; paddr = mod->start; len = mod->size; if ( !has_xsm_magic(paddr) ) { printk(XENLOG_ERR "xsm: Invalid magic for XSM blob\n"); return -EINVAL; } printk("xsm: Policy len = 0x%"PRIpaddr" start at 0x%"PRIpaddr"\n", len, paddr); *policy_buffer = xmalloc_bytes(len); if ( !*policy_buffer ) return -ENOMEM; copy_from_paddr(*policy_buffer, paddr, len); *policy_size = len; return 0; }
const char *boot_fdt_cmdline(const void *fdt) { int node; const struct fdt_property *prop; node = fdt_path_offset(fdt, "/chosen"); if ( node < 0 ) return NULL; prop = fdt_get_property(fdt, node, "xen,xen-bootargs", NULL); if ( prop == NULL ) { struct bootmodule *dom0_mod = boot_module_find_by_kind(BOOTMOD_KERNEL); if (fdt_get_property(fdt, node, "xen,dom0-bootargs", NULL) || ( dom0_mod && dom0_mod->cmdline[0] ) ) prop = fdt_get_property(fdt, node, "bootargs", NULL); } if ( prop == NULL ) return NULL; return prop->data; }