int itherm_activate(struct device *self, int act) { struct itherm_softc *sc = (struct itherm_softc *)self; switch (act) { case DVACT_RESUME: itherm_enable(sc); } return (0); }
void itherm_attach(struct device *parent, struct device *self, void *aux) { struct itherm_softc *sc = (struct itherm_softc *)self; struct pci_attach_args *pa = aux; int i; pcireg_t v; v = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_MAPREG_START); v &= PCI_MAPREG_TYPE_MASK | PCI_MAPREG_MEM_TYPE_MASK; if (pci_mapreg_map(pa, PCI_MAPREG_START, v, 0, &sc->iot, &sc->ioh, NULL, &sc->size, 0)) { printf(": can't map mem space\n"); return; } sc->sensors[ITHERM_SENSOR_THERMOMETER].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_CORETEMP1].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_CORETEMP2].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_COREENERGY].type = SENSOR_WATTS; sc->sensors[ITHERM_SENSOR_GPUTEMP].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_MAXPROCTEMP].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_DIMMTEMP1].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_DIMMTEMP2].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_DIMMTEMP3].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_DIMMTEMP4].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_GPUTEMP_ABSOLUTE].type = SENSOR_TEMP; sc->sensors[ITHERM_SENSOR_PCHTEMP_ABSOLUTE].type = SENSOR_TEMP; strlcpy(sc->sensors[ITHERM_SENSOR_THERMOMETER].desc, "Thermometer", sizeof(sc->sensors[ITHERM_SENSOR_THERMOMETER].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_CORETEMP1].desc, "Core 1", sizeof(sc->sensors[ITHERM_SENSOR_CORETEMP1].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_CORETEMP2].desc, "Core 2", sizeof(sc->sensors[ITHERM_SENSOR_CORETEMP2].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_COREENERGY].desc, "CPU power consumption", sizeof(sc->sensors[ITHERM_SENSOR_COREENERGY].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_GPUTEMP].desc, "GPU/Memory Controller Temp", sizeof(sc->sensors[ITHERM_SENSOR_GPUTEMP].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_MAXPROCTEMP].desc, "CPU/GPU Max temp", sizeof(sc->sensors[ITHERM_SENSOR_MAXPROCTEMP].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_DIMMTEMP1].desc, "DIMM 1", sizeof(sc->sensors[ITHERM_SENSOR_DIMMTEMP1].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_DIMMTEMP2].desc, "DIMM 2", sizeof(sc->sensors[ITHERM_SENSOR_DIMMTEMP2].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_DIMMTEMP3].desc, "DIMM 3", sizeof(sc->sensors[ITHERM_SENSOR_DIMMTEMP3].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_DIMMTEMP4].desc, "DIMM 4", sizeof(sc->sensors[ITHERM_SENSOR_DIMMTEMP4].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_GPUTEMP_ABSOLUTE].desc, "GPU/Memory controller abs.", sizeof(sc->sensors[ITHERM_SENSOR_GPUTEMP_ABSOLUTE].desc)); strlcpy(sc->sensors[ITHERM_SENSOR_PCHTEMP_ABSOLUTE].desc, "PCH abs.", sizeof(sc->sensors[ITHERM_SENSOR_PCHTEMP_ABSOLUTE].desc)); strlcpy(sc->sensordev.xname, sc->sc_dev.dv_xname, sizeof(sc->sensordev.xname)); itherm_enable(sc); for (i = 0; i < ITHERM_NUM_SENSORS; i++) sensor_attach(&sc->sensordev, &sc->sensors[i]); sensordev_install(&sc->sensordev); sensor_task_register(sc, itherm_refresh, ITHERM_REFRESH_INTERVAL); printf("\n"); return; }