static void * acpi_init(struct nvkm_bios *bios, const char *name) { if (!nouveau_acpi_rom_supported(nv_device(bios)->pdev)) return ERR_PTR(-ENODEV); return NULL; }
static void nouveau_bios_shadow_acpi(struct nouveau_bios *bios) { struct pci_dev *pdev = nv_device(bios)->pdev; int ret, cnt, i; if (!nouveau_acpi_rom_supported(pdev)) { bios->data = NULL; return; } bios->size = 0; bios->data = kmalloc(4096, GFP_KERNEL); if (bios->data) { if (nouveau_acpi_get_bios_chunk(bios->data, 0, 4096) == 4096) bios->size = bios->data[2] * 512; kfree(bios->data); } if (!bios->size) return; bios->data = kmalloc(bios->size, GFP_KERNEL); if (bios->data) { /* disobey the acpi spec - much faster on at least w530 ... */ ret = nouveau_acpi_get_bios_chunk(bios->data, 0, bios->size); if (ret != bios->size || nvbios_checksum(bios->data, bios->size)) { /* ... that didn't work, ok, i'll be good now */ for (i = 0; i < bios->size; i += cnt) { cnt = min((bios->size - i), (u32)4096); ret = nouveau_acpi_get_bios_chunk(bios->data, i, cnt); if (ret != cnt) break; } } } }