static int pci_add_option_rom(PCIDevice *pdev)

{

    int size;

    char *path;

    void *ptr;

    char name[32];



    if (!pdev->romfile)

        return 0;

    if (strlen(pdev->romfile) == 0)

        return 0;



    if (!pdev->rom_bar) {

        /*

         * Load rom via fw_cfg instead of creating a rom bar,

         * for 0.11 compatibility.

         */

        int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE);

        if (class == 0x0300) {

            rom_add_vga(pdev->romfile);

        } else {

            rom_add_option(pdev->romfile);

        }

        return 0;

    }



    path = qemu_find_file(QEMU_FILE_TYPE_BIOS, pdev->romfile);

    if (path == NULL) {

        path = qemu_strdup(pdev->romfile);

    }



    size = get_image_size(path);

    if (size < 0) {

        error_report("%s: failed to find romfile \"%s\"",

                     __FUNCTION__, pdev->romfile);

        return -1;

    }

    if (size & (size - 1)) {

        size = 1 << qemu_fls(size);

    }



    if (pdev->qdev.info->vmsd)

        snprintf(name, sizeof(name), "%s.rom", pdev->qdev.info->vmsd->name);

    else

        snprintf(name, sizeof(name), "%s.rom", pdev->qdev.info->name);

    pdev->rom_offset = qemu_ram_alloc(&pdev->qdev, name, size);



    ptr = qemu_get_ram_ptr(pdev->rom_offset);

    load_image(path, ptr);

    qemu_free(path);



    pci_register_bar(pdev, PCI_ROM_SLOT, size,

                     0, pci_map_option_rom);



    return 0;

}

static int pci_add_option_rom(PCIDevice *pdev)

{

    int size;

    char *path;

    void *ptr;

    char name[32];



    if (!pdev->romfile)

        return 0;

    if (strlen(pdev->romfile) == 0)

        return 0;



    if (!pdev->rom_bar) {

        







        int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE);

        if (class == 0x0300) {

            rom_add_vga(pdev->romfile);

        } else {

            rom_add_option(pdev->romfile);

        }

        return 0;

    }



    path = qemu_find_file(QEMU_FILE_TYPE_BIOS, pdev->romfile);

    if (path == NULL) {

        path = qemu_strdup(pdev->romfile);

    }



    size = get_image_size(path);

    if (size < 0) {

        error_report("%s: failed to find romfile \"%s\"",

                     __FUNCTION__, pdev->romfile);

        return -1;

    }

    if (size & (size - 1)) {

        size = 1 << qemu_fls(size);

    }



    if (pdev->qdev.info->vmsd)

        snprintf(name, sizeof(name), "%s.rom", pdev->qdev.info->vmsd->name);

    else

        snprintf(name, sizeof(name), "%s.rom", pdev->qdev.info->name);

    pdev->rom_offset = qemu_ram_alloc(&pdev->qdev, name, size);



    ptr = qemu_get_ram_ptr(pdev->rom_offset);

    load_image(path, ptr);

    qemu_free(path);



    pci_register_bar(pdev, PCI_ROM_SLOT, size,

                     0, pci_map_option_rom);



    return 0;

}

static int pci_add_option_rom(PCIDevice *pdev)
static int FUNC_0(PCIDevice *VAR_0)

{

    int VAR_1;

    char *VAR_2;

    void *VAR_3;

    char VAR_4[32];



    if (!VAR_0->romfile)

        return 0;

    if (strlen(VAR_0->romfile) == 0)

        return 0;



    if (!VAR_0->rom_bar) {

        







        int VAR_5 = pci_get_word(VAR_0->config + PCI_CLASS_DEVICE);

        if (VAR_5 == 0x0300) {

            rom_add_vga(VAR_0->romfile);

        } else {

            rom_add_option(VAR_0->romfile);

        }

        return 0;

    }



    VAR_2 = qemu_find_file(QEMU_FILE_TYPE_BIOS, VAR_0->romfile);

    if (VAR_2 == NULL) {

        VAR_2 = qemu_strdup(VAR_0->romfile);

    }



    VAR_1 = get_image_size(VAR_2);

    if (VAR_1 < 0) {

        error_report("%s: failed to find romfile \"%s\"",

                     __FUNCTION__, VAR_0->romfile);

        return -1;

    }

    if (VAR_1 & (VAR_1 - 1)) {

        VAR_1 = 1 << qemu_fls(VAR_1);

    }



    if (VAR_0->qdev.info->vmsd)

        snprintf(VAR_4, sizeof(VAR_4), "%s.rom", VAR_0->qdev.info->vmsd->VAR_4);

    else

        snprintf(VAR_4, sizeof(VAR_4), "%s.rom", VAR_0->qdev.info->VAR_4);

    VAR_0->rom_offset = qemu_ram_alloc(&VAR_0->qdev, VAR_4, VAR_1);



    VAR_3 = qemu_get_ram_ptr(VAR_0->rom_offset);

    load_image(VAR_2, VAR_3);

    qemu_free(VAR_2);



    pci_register_bar(VAR_0, PCI_ROM_SLOT, VAR_1,

                     0, pci_map_option_rom);



    return 0;

}

static int FUNC_0(PCIDevice *VAR_0)
{ int VAR_1; char *VAR_2; void *VAR_3; char VAR_4[32]; if (!VAR_0->romfile)
return 0; if (strlen(VAR_0->romfile) == 0)
return 0; if (!VAR_0->rom_bar) { int VAR_5 = pci_get_word(VAR_0->config + PCI_CLASS_DEVICE); if (VAR_5 == 0x0300) { rom_add_vga(VAR_0->romfile); } else { rom_add_option(VAR_0->romfile); } return 0; } VAR_2 = qemu_find_file(QEMU_FILE_TYPE_BIOS, VAR_0->romfile); if (VAR_2 == NULL) { VAR_2 = qemu_strdup(VAR_0->romfile); } VAR_1 = get_image_size(VAR_2); if (VAR_1 < 0) { error_report("%s: failed to find romfile \"%s\"",
__FUNCTION__, VAR_0->romfile); return -1; } if (VAR_1 & (VAR_1 - 1)) { VAR_1 = 1 << qemu_fls(VAR_1); } if (VAR_0->qdev.info->vmsd)
snprintf(VAR_4, sizeof(VAR_4), "%s.rom", VAR_0->qdev.info->vmsd->VAR_4); else
snprintf(VAR_4, sizeof(VAR_4), "%s.rom", VAR_0->qdev.info->VAR_4); VAR_0->rom_offset = qemu_ram_alloc(&VAR_0->qdev, VAR_4, VAR_1); VAR_3 = qemu_get_ram_ptr(VAR_0->rom_offset); load_image(VAR_2, VAR_3); qemu_free(VAR_2); pci_register_bar(VAR_0, PCI_ROM_SLOT, VAR_1,
0, pci_map_option_rom); return 0; }