• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/hwmon/

Lines Matching refs:data

150 	void (*update)(struct aem_data *data);
246 static void aem_remove_sensors(struct aem_data *data);
249 static int aem1_find_sensors(struct aem_data *data);
250 static int aem2_find_sensors(struct aem_data *data);
251 static void update_aem1_sensors(struct aem_data *data);
252 static void update_aem2_sensors(struct aem_data *data);
268 /* Initialize IPMI address, message buffers and user data */
269 static int aem_init_ipmi_data(struct aem_ipmi_data *data, int iface,
274 init_completion(&data->read_complete);
275 data->bmc_device = bmc;
278 data->address.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
279 data->address.channel = IPMI_BMC_CHANNEL;
280 data->address.data[0] = 0;
281 data->interface = iface;
284 data->tx_msgid = 0;
285 data->tx_message.netfn = AEM_NETFN;
288 err = ipmi_create_user(data->interface, &driver_data.ipmi_hndlrs,
289 data, &data->user);
292 "interface %d\n", data->interface);
300 static int aem_send_message(struct aem_ipmi_data *data)
304 err = ipmi_validate_addr(&data->address, sizeof(data->address));
308 data->tx_msgid++;
309 err = ipmi_request_settime(data->user, &data->address, data->tx_msgid,
310 &data->tx_message, data, 0, 0, 0);
316 dev_err(data->bmc_device, "request_settime=%x\n", err);
319 dev_err(data->bmc_device, "validate_addr=%x\n", err);
327 struct aem_ipmi_data *data = user_msg_data;
329 if (msg->msgid != data->tx_msgid) {
330 dev_err(data->bmc_device, "Mismatch between received msgid "
333 (int)data->tx_msgid);
338 data->rx_recv_type = msg->recv_type;
340 data->rx_result = msg->msg.data[0];
342 data->rx_result = IPMI_UNKNOWN_ERR_COMPLETION_CODE;
346 if (data->rx_msg_len < rx_len)
347 rx_len = data->rx_msg_len;
348 data->rx_msg_len = rx_len;
349 memcpy(data->rx_msg_data, msg->msg.data + 1, data->rx_msg_len);
351 data->rx_msg_len = 0;
354 complete(&data->read_complete);
392 static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg,
398 struct aem_ipmi_data *ipmi = &data->ipmi;
412 rs_req.module_handle = data->module_handle;
419 ipmi->tx_message.data = (char *)&rs_req;
469 static void update_aem_energy_one(struct aem_data *data, int which)
471 aem_read_sensor(data, AEM_ENERGY_ELEMENT, which,
472 &data->energy[which], 8);
475 static void update_aem_energy(struct aem_data *data)
477 update_aem_energy_one(data, 0);
478 if (data->ver_major < 2)
480 update_aem_energy_one(data, 1);
484 static void update_aem1_sensors(struct aem_data *data)
486 mutex_lock(&data->lock);
487 if (time_before(jiffies, data->last_updated + REFRESH_INTERVAL) &&
488 data->valid)
491 update_aem_energy(data);
493 mutex_unlock(&data->lock);
497 static void update_aem2_sensors(struct aem_data *data)
501 mutex_lock(&data->lock);
502 if (time_before(jiffies, data->last_updated + REFRESH_INTERVAL) &&
503 data->valid)
506 update_aem_energy(data);
507 aem_read_sensor(data, AEM_EXHAUST_ELEMENT, 0, &data->temp[0], 1);
508 aem_read_sensor(data, AEM_EXHAUST_ELEMENT, 1, &data->temp[1], 1);
511 aem_read_sensor(data, AEM_POWER_CAP_ELEMENT, i,
512 &data->pcap[i], 2);
514 mutex_unlock(&data->lock);
518 static void aem_delete(struct aem_data *data)
520 list_del(&data->list);
521 aem_remove_sensors(data);
522 hwmon_device_unregister(data->hwmon_dev);
523 ipmi_destroy_user(data->ipmi.user);
524 dev_set_drvdata(&data->pdev->dev, NULL);
525 platform_device_unregister(data->pdev);
526 aem_idr_put(data->id);
527 kfree(data);
533 static int aem_find_aem1_count(struct aem_ipmi_data *data)
543 data->tx_message.cmd = AEM_FIND_FW_CMD;
544 data->tx_message.data = (char *)&ff_req;
545 data->tx_message.data_len = sizeof(ff_req);
547 data->rx_msg_data = &ff_resp;
548 data->rx_msg_len = sizeof(ff_resp);
550 aem_send_message(data);
552 res = wait_for_completion_timeout(&data->read_complete, IPMI_TIMEOUT);
556 if (data->rx_result || data->rx_msg_len != sizeof(ff_resp) ||
566 struct aem_data *data;
570 data = kzalloc(sizeof(*data), GFP_KERNEL);
571 if (!data)
573 mutex_init(&data->lock);
575 /* Copy instance data */
576 data->ver_major = 1;
577 data->ver_minor = 0;
578 data->module_handle = module_handle;
580 data->power_period[i] = AEM_DEFAULT_POWER_INTERVAL;
583 if (aem_idr_get(&data->id))
586 data->pdev = platform_device_alloc(DRVNAME, data->id);
587 if (!data->pdev)
589 data->pdev->dev.driver = &aem_driver.driver;
591 res = platform_device_add(data->pdev);
595 dev_set_drvdata(&data->pdev->dev, data);
598 if (aem_init_ipmi_data(&data->ipmi, probe->interface,
603 data->hwmon_dev = hwmon_device_register(&data->pdev->dev);
605 if (IS_ERR(data->hwmon_dev)) {
606 dev_err(&data->pdev->dev, "Unable to register hwmon "
612 data->update = update_aem1_sensors;
615 if (aem1_find_sensors(data))
619 list_add_tail(&data->list, &driver_data.aem_devices);
621 dev_info(data->ipmi.bmc_device, "Found AEM v%d.%d at 0x%X\n",
622 data->ver_major, data->ver_minor,
623 data->module_handle);
627 hwmon_device_unregister(data->hwmon_dev);
629 ipmi_destroy_user(data->ipmi.user);
631 dev_set_drvdata(&data->pdev->dev, NULL);
632 platform_device_unregister(data->pdev);
634 aem_idr_put(data->id);
636 kfree(data);
663 static int aem_find_aem2(struct aem_ipmi_data *data,
674 data->tx_message.cmd = AEM_FW_INSTANCE_CMD;
675 data->tx_message.data = (char *)&fi_req;
676 data->tx_message.data_len = sizeof(fi_req);
678 data->rx_msg_data = fi_resp;
679 data->rx_msg_len = sizeof(*fi_resp);
681 aem_send_message(data);
683 res = wait_for_completion_timeout(&data->read_complete, IPMI_TIMEOUT);
687 if (data->rx_result || data->rx_msg_len != sizeof(*fi_resp) ||
699 struct aem_data *data;
703 data = kzalloc(sizeof(*data), GFP_KERNEL);
704 if (!data)
706 mutex_init(&data->lock);
708 /* Copy instance data */
709 data->ver_major = fi_resp->major;
710 data->ver_minor = fi_resp->minor;
711 data->module_handle = fi_resp->module_handle;
713 data->power_period[i] = AEM_DEFAULT_POWER_INTERVAL;
716 if (aem_idr_get(&data->id))
719 data->pdev = platform_device_alloc(DRVNAME, data->id);
720 if (!data->pdev)
722 data->pdev->dev.driver = &aem_driver.driver;
724 res = platform_device_add(data->pdev);
728 dev_set_drvdata(&data->pdev->dev, data);
731 if (aem_init_ipmi_data(&data->ipmi, probe->interface,
736 data->hwmon_dev = hwmon_device_register(&data->pdev->dev);
738 if (IS_ERR(data->hwmon_dev)) {
739 dev_err(&data->pdev->dev, "Unable to register hwmon "
745 data->update = update_aem2_sensors;
748 if (aem2_find_sensors(data))
752 list_add_tail(&data->list, &driver_data.aem_devices);
754 dev_info(data->ipmi.bmc_device, "Found AEM v%d.%d at 0x%X\n",
755 data->ver_major, data->ver_minor,
756 data->module_handle);
760 hwmon_device_unregister(data->hwmon_dev);
762 ipmi_destroy_user(data->ipmi.user);
764 dev_set_drvdata(&data->pdev->dev, NULL);
765 platform_device_unregister(data->pdev);
767 aem_idr_put(data->id);
769 kfree(data);
833 struct aem_data *data = dev_get_drvdata(dev);
835 return sprintf(buf, "%s%d\n", DRVNAME, data->ver_major);
844 struct aem_data *data = dev_get_drvdata(dev);
846 return sprintf(buf, "%d.%d\n", data->ver_major, data->ver_minor);
856 struct aem_data *data = dev_get_drvdata(dev);
861 mutex_lock(&data->lock);
862 update_aem_energy_one(data, attr->index);
864 before = data->energy[attr->index];
867 msecs_to_jiffies(data->power_period[attr->index])
870 mutex_unlock(&data->lock);
874 update_aem_energy_one(data, attr->index);
876 after = data->energy[attr->index];
877 mutex_unlock(&data->lock);
938 static int aem_register_sensors(struct aem_data *data,
942 struct device *dev = &data->pdev->dev;
943 struct sensor_device_attribute *sensors = data->sensors;
986 aem_remove_sensors(data);
1017 static void aem_remove_sensors(struct aem_data *data)
1022 if (!data->sensors[i].dev_attr.attr.name)
1024 device_remove_file(&data->pdev->dev,
1025 &data->sensors[i].dev_attr);
1028 device_remove_file(&data->pdev->dev,
1030 device_remove_file(&data->pdev->dev,
1074 static int aem1_find_sensors(struct aem_data *data)
1076 return aem_register_sensors(data, aem1_ro_sensors, aem1_rw_sensors);
1080 static int aem2_find_sensors(struct aem_data *data)
1082 return aem_register_sensors(data, aem2_ro_sensors, aem2_rw_sensors);