void nvkm_bar_ctor(const struct nvkm_bar_func *func, struct nvkm_device *device, int index, struct nvkm_bar *bar) { nvkm_subdev_ctor(&nvkm_bar, device, index, 0, &bar->subdev); bar->func = func; spin_lock_init(&bar->lock); }
void nvkm_fb_ctor(const struct nvkm_fb_func *func, struct nvkm_device *device, int index, struct nvkm_fb *fb) { nvkm_subdev_ctor(&nvkm_fb, device, index, 0, &fb->subdev); fb->func = func; fb->tile.regions = fb->func->tile.regions; }
int gf100_ibus_new(struct nvkm_device *device, int index, struct nvkm_subdev **pibus) { struct nvkm_subdev *ibus; if (!(ibus = *pibus = kzalloc(sizeof(*ibus), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&gf100_ibus, device, index, ibus); return 0; }
int nvkm_bus_new_(const struct nvkm_bus_func *func, struct nvkm_device *device, int index, struct nvkm_bus **pbus) { struct nvkm_bus *bus; if (!(bus = *pbus = kzalloc(sizeof(*bus), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_bus, device, index, 0, &bus->subdev); bus->func = func; return 0; }
int nvkm_fuse_new_(const struct nvkm_fuse_func *func, struct nvkm_device *device, int index, struct nvkm_fuse **pfuse) { struct nvkm_fuse *fuse; if (!(fuse = *pfuse = kzalloc(sizeof(*fuse), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_fuse, device, index, 0, &fuse->subdev); fuse->func = func; spin_lock_init(&fuse->lock); return 0; }
int nvkm_fault_new_(const struct nvkm_fault_func *func, struct nvkm_device *device, int index, struct nvkm_fault **pfault) { struct nvkm_fault *fault; if (!(fault = *pfault = kzalloc(sizeof(*fault), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_fault, device, index, &fault->subdev); fault->func = func; fault->user.ctor = nvkm_ufault_new; fault->user.base = func->user.base; return 0; }
int nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device, int index, struct nvkm_pci **ppci) { struct nvkm_pci *pci; if (!(pci = *ppci = kzalloc(sizeof(**ppci), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_pci_func, device, index, &pci->subdev); pci->func = func; pci->pdev = device->func->pci(device)->pdev; pci->irq = -1; pci->pcie.speed = -1; pci->pcie.width = -1; if (device->type == NVKM_DEVICE_AGP) nvkm_agp_ctor(pci); switch (pci->pdev->device & 0x0ff0) { case 0x00f0: case 0x02e0: /* BR02? NFI how these would be handled yet exactly */ break; default: switch (device->chipset) { case 0xaa: /* reported broken, nv also disable it */ break; default: pci->msi = true; break; } } #ifdef __BIG_ENDIAN pci->msi = false; #endif pci->msi = nvkm_boolopt(device->cfgopt, "NvMSI", pci->msi); if (pci->msi && func->msi_rearm) { pci->msi = pci_enable_msi(pci->pdev) == 0; if (pci->msi) nvkm_debug(&pci->subdev, "MSI enabled\n"); } else { pci->msi = false; } return 0; }
int nvkm_gpio_new_(const struct nvkm_gpio_func *func, struct nvkm_device *device, int index, struct nvkm_gpio **pgpio) { struct nvkm_gpio *gpio; if (!(gpio = *pgpio = kzalloc(sizeof(*gpio), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_gpio, device, index, &gpio->subdev); gpio->func = func; return nvkm_event_init(&nvkm_gpio_intr_func, 2, func->lines, &gpio->event); }
int nvkm_ltc_new_(const struct nvkm_ltc_func *func, struct nvkm_device *device, int index, struct nvkm_ltc **pltc) { struct nvkm_ltc *ltc; if (!(ltc = *pltc = kzalloc(sizeof(*ltc), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_ltc, device, index, <c->subdev); ltc->func = func; ltc->zbc_min = 1; /* reserve 0 for disabled */ ltc->zbc_max = min(func->zbc, NVKM_LTC_MAX_ZBC_CNT) - 1; return 0; }
int nvkm_engine_ctor(const struct nvkm_engine_func *func, struct nvkm_device *device, int index, u32 pmc_enable, bool enable, struct nvkm_engine *engine) { nvkm_subdev_ctor(&nvkm_engine_func, device, index, pmc_enable, &engine->subdev); engine->func = func; if (!nvkm_boolopt(device->cfgopt, nvkm_subdev_name[index], enable)) { nvkm_debug(&engine->subdev, "disabled\n"); return -ENODEV; } spin_lock_init(&engine->lock); return 0; }
int nvkm_therm_new_(const struct nvkm_therm_func *func, struct nvkm_device *device, int index, struct nvkm_therm **ptherm) { struct nvkm_therm *therm; if (!(therm = *ptherm = kzalloc(sizeof(*therm), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_therm, device, index, 0, &therm->subdev); therm->func = func; nvkm_alarm_init(&therm->alarm, nvkm_therm_alarm); spin_lock_init(&therm->lock); spin_lock_init(&therm->sensor.alarm_program_lock); therm->fan_get = nvkm_therm_fan_user_get; therm->fan_set = nvkm_therm_fan_user_set; therm->attr_get = nvkm_therm_attr_get; therm->attr_set = nvkm_therm_attr_set; therm->mode = therm->suspend = -1; /* undefined */ return 0; }
int nvkm_bios_new(struct nvkm_device *device, int index, struct nvkm_bios **pbios) { struct nvkm_bios *bios; struct bit_entry bit_i; int ret; if (!(bios = *pbios = kzalloc(sizeof(*bios), GFP_KERNEL))) return -ENOMEM; nvkm_subdev_ctor(&nvkm_bios, device, index, &bios->subdev); ret = nvbios_shadow(bios); if (ret) return ret; /* detect type of vbios we're dealing with */ bios->bmp_offset = nvbios_findstr(bios->data, bios->size, "\xff\x7f""NV\0", 5); if (bios->bmp_offset) { nvkm_debug(&bios->subdev, "BMP version %x.%x\n", bmp_version(bios) >> 8, bmp_version(bios) & 0xff); }
void nvkm_iccsense_ctor(struct nvkm_device *device, int index, struct nvkm_iccsense *iccsense) { nvkm_subdev_ctor(&iccsense_func, device, index, 0, &iccsense->subdev); }