1 #include <linux/kernel.h>
2 #include <linux/string.h>
3 #include <linux/errno.h>
4 #include <linux/init.h>
6 #include <video/edid.h>
7 #include <xen/interface/platform.h>
8 #include <asm/hypervisor.h>
10 #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
11 void __init copy_edd(void)
14 struct xen_platform_op op;
16 if (!is_initial_xendomain())
19 op.cmd = XENPF_firmware_info;
21 op.u.firmware_info.type = XEN_FW_DISK_INFO;
22 for (op.u.firmware_info.index = 0;
23 edd.edd_info_nr < EDDMAXNR;
24 op.u.firmware_info.index++) {
25 struct edd_info *info = edd.edd_info + edd.edd_info_nr;
27 info->params.length = sizeof(info->params);
28 set_xen_guest_handle(op.u.firmware_info.u.disk_info.edd_params,
30 ret = HYPERVISOR_platform_op(&op);
34 #define C(x) info->x = op.u.firmware_info.u.disk_info.x
38 C(legacy_max_cylinder);
40 C(legacy_sectors_per_track);
46 op.u.firmware_info.type = XEN_FW_DISK_MBR_SIGNATURE;
47 for (op.u.firmware_info.index = 0;
48 edd.mbr_signature_nr < EDD_MBR_SIG_MAX;
49 op.u.firmware_info.index++) {
50 ret = HYPERVISOR_platform_op(&op);
53 edd.mbr_signature[edd.mbr_signature_nr++] =
54 op.u.firmware_info.u.disk_mbr_signature.mbr_signature;
59 void __init copy_edid(void)
61 #if defined(CONFIG_FIRMWARE_EDID) && defined(CONFIG_X86)
62 struct xen_platform_op op;
64 if (!is_initial_xendomain())
67 op.cmd = XENPF_firmware_info;
68 op.u.firmware_info.index = 0;
69 op.u.firmware_info.type = XEN_FW_VBEDDC_INFO;
70 set_xen_guest_handle(op.u.firmware_info.u.vbeddc_info.edid,
72 if (HYPERVISOR_platform_op(&op) != 0)
73 memset(edid_info.dummy, 0x13, sizeof(edid_info.dummy));