Lines Matching refs:data

139 	void (*update)(struct aem_data *data);
236 static void aem_remove_sensors(struct aem_data *data);
237 static int aem1_find_sensors(struct aem_data *data);
238 static int aem2_find_sensors(struct aem_data *data);
239 static void update_aem1_sensors(struct aem_data *data);
240 static void update_aem2_sensors(struct aem_data *data);
256 /* Initialize IPMI address, message buffers and user data */
257 static int aem_init_ipmi_data(struct aem_ipmi_data *data, int iface,
262 init_completion(&data->read_complete);
263 data->bmc_device = bmc;
266 data->address.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
267 data->address.channel = IPMI_BMC_CHANNEL;
268 data->address.data[0] = 0;
269 data->interface = iface;
272 data->tx_msgid = 0;
273 data->tx_message.netfn = AEM_NETFN;
276 err = ipmi_create_user(data->interface, &driver_data.ipmi_hndlrs,
277 data, &data->user);
281 data->interface);
289 static int aem_send_message(struct aem_ipmi_data *data)
293 err = ipmi_validate_addr(&data->address, sizeof(data->address));
297 data->tx_msgid++;
298 err = ipmi_request_settime(data->user, &data->address, data->tx_msgid,
299 &data->tx_message, data, 0, 0, 0);
305 dev_err(data->bmc_device, "request_settime=%x\n", err);
308 dev_err(data->bmc_device, "validate_addr=%x\n", err);
316 struct aem_ipmi_data *data = user_msg_data;
318 if (msg->msgid != data->tx_msgid) {
319 dev_err(data->bmc_device,
322 (int)data->tx_msgid);
327 data->rx_recv_type = msg->recv_type;
329 data->rx_result = msg->msg.data[0];
331 data->rx_result = IPMI_UNKNOWN_ERR_COMPLETION_CODE;
335 if (data->rx_msg_len < rx_len)
336 rx_len = data->rx_msg_len;
337 data->rx_msg_len = rx_len;
338 memcpy(data->rx_msg_data, msg->msg.data + 1, data->rx_msg_len);
340 data->rx_msg_len = 0;
343 complete(&data->read_complete);
348 /* Read a sensor value; must be called with data->lock held */
349 static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg,
355 struct aem_read_sensor_resp *rs_resp = data->rs_resp;
356 struct aem_ipmi_data *ipmi = &data->ipmi;
370 rs_req.module_handle = data->module_handle;
377 ipmi->tx_message.data = (char *)&rs_req;
427 static void update_aem_energy_one(struct aem_data *data, int which)
429 aem_read_sensor(data, AEM_ENERGY_ELEMENT, which,
430 &data->energy[which], 8);
433 static void update_aem_energy(struct aem_data *data)
435 update_aem_energy_one(data, 0);
436 if (data->ver_major < 2)
438 update_aem_energy_one(data, 1);
442 static void update_aem1_sensors(struct aem_data *data)
444 mutex_lock(&data->lock);
445 if (time_before(jiffies, data->last_updated + REFRESH_INTERVAL) &&
446 data->valid)
449 update_aem_energy(data);
451 mutex_unlock(&data->lock);
455 static void update_aem2_sensors(struct aem_data *data)
459 mutex_lock(&data->lock);
460 if (time_before(jiffies, data->last_updated + REFRESH_INTERVAL) &&
461 data->valid)
464 update_aem_energy(data);
465 aem_read_sensor(data, AEM_EXHAUST_ELEMENT, 0, &data->temp[0], 1);
466 aem_read_sensor(data, AEM_EXHAUST_ELEMENT, 1, &data->temp[1], 1);
469 aem_read_sensor(data, AEM_POWER_CAP_ELEMENT, i,
470 &data->pcap[i], 2);
472 mutex_unlock(&data->lock);
476 static void aem_delete(struct aem_data *data)
478 list_del(&data->list);
479 aem_remove_sensors(data);
480 kfree(data->rs_resp);
481 hwmon_device_unregister(data->hwmon_dev);
482 ipmi_destroy_user(data->ipmi.user);
483 platform_set_drvdata(data->pdev, NULL);
484 platform_device_unregister(data->pdev);
485 ida_simple_remove(&aem_ida, data->id);
486 kfree(data);
492 static int aem_find_aem1_count(struct aem_ipmi_data *data)
502 data->tx_message.cmd = AEM_FIND_FW_CMD;
503 data->tx_message.data = (char *)&ff_req;
504 data->tx_message.data_len = sizeof(ff_req);
506 data->rx_msg_data = &ff_resp;
507 data->rx_msg_len = sizeof(ff_resp);
509 aem_send_message(data);
511 res = wait_for_completion_timeout(&data->read_complete, IPMI_TIMEOUT);
515 if (data->rx_result || data->rx_msg_len != sizeof(ff_resp) ||
525 struct aem_data *data;
529 data = kzalloc(sizeof(*data), GFP_KERNEL);
530 if (!data)
532 mutex_init(&data->lock);
534 /* Copy instance data */
535 data->ver_major = 1;
536 data->ver_minor = 0;
537 data->module_handle = module_handle;
539 data->power_period[i] = AEM_DEFAULT_POWER_INTERVAL;
542 data->id = ida_simple_get(&aem_ida, 0, 0, GFP_KERNEL);
543 if (data->id < 0)
546 data->pdev = platform_device_alloc(DRVNAME, data->id);
547 if (!data->pdev)
549 data->pdev->dev.driver = &aem_driver.driver;
551 res = platform_device_add(data->pdev);
555 platform_set_drvdata(data->pdev, data);
558 res = aem_init_ipmi_data(&data->ipmi, probe->interface,
564 data->hwmon_dev = hwmon_device_register(&data->pdev->dev);
565 if (IS_ERR(data->hwmon_dev)) {
566 dev_err(&data->pdev->dev,
569 res = PTR_ERR(data->hwmon_dev);
573 data->update = update_aem1_sensors;
574 data->rs_resp = kzalloc(sizeof(*(data->rs_resp)) + 8, GFP_KERNEL);
575 if (!data->rs_resp) {
581 res = aem1_find_sensors(data);
586 list_add_tail(&data->list, &driver_data.aem_devices);
588 dev_info(data->ipmi.bmc_device, "Found AEM v%d.%d at 0x%X\n",
589 data->ver_major, data->ver_minor,
590 data->module_handle);
594 kfree(data->rs_resp);
596 hwmon_device_unregister(data->hwmon_dev);
598 ipmi_destroy_user(data->ipmi.user);
600 platform_set_drvdata(data->pdev, NULL);
601 platform_device_del(data->pdev);
603 platform_device_put(data->pdev);
605 ida_simple_remove(&aem_ida, data->id);
607 kfree(data);
631 static int aem_find_aem2(struct aem_ipmi_data *data,
642 data->tx_message.cmd = AEM_FW_INSTANCE_CMD;
643 data->tx_message.data = (char *)&fi_req;
644 data->tx_message.data_len = sizeof(fi_req);
646 data->rx_msg_data = fi_resp;
647 data->rx_msg_len = sizeof(*fi_resp);
649 aem_send_message(data);
651 res = wait_for_completion_timeout(&data->read_complete, IPMI_TIMEOUT);
655 if (data->rx_result || data->rx_msg_len != sizeof(*fi_resp) ||
667 struct aem_data *data;
671 data = kzalloc(sizeof(*data), GFP_KERNEL);
672 if (!data)
674 mutex_init(&data->lock);
676 /* Copy instance data */
677 data->ver_major = fi_resp->major;
678 data->ver_minor = fi_resp->minor;
679 data->module_handle = fi_resp->module_handle;
681 data->power_period[i] = AEM_DEFAULT_POWER_INTERVAL;
684 data->id = ida_simple_get(&aem_ida, 0, 0, GFP_KERNEL);
685 if (data->id < 0)
688 data->pdev = platform_device_alloc(DRVNAME, data->id);
689 if (!data->pdev)
691 data->pdev->dev.driver = &aem_driver.driver;
693 res = platform_device_add(data->pdev);
697 platform_set_drvdata(data->pdev, data);
700 res = aem_init_ipmi_data(&data->ipmi, probe->interface,
706 data->hwmon_dev = hwmon_device_register(&data->pdev->dev);
707 if (IS_ERR(data->hwmon_dev)) {
708 dev_err(&data->pdev->dev,
711 res = PTR_ERR(data->hwmon_dev);
715 data->update = update_aem2_sensors;
716 data->rs_resp = kzalloc(sizeof(*(data->rs_resp)) + 8, GFP_KERNEL);
717 if (!data->rs_resp) {
723 res = aem2_find_sensors(data);
728 list_add_tail(&data->list, &driver_data.aem_devices);
730 dev_info(data->ipmi.bmc_device, "Found AEM v%d.%d at 0x%X\n",
731 data->ver_major, data->ver_minor,
732 data->module_handle);
736 kfree(data->rs_resp);
738 hwmon_device_unregister(data->hwmon_dev);
740 ipmi_destroy_user(data->ipmi.user);
742 platform_set_drvdata(data->pdev, NULL);
743 platform_device_del(data->pdev);
745 platform_device_put(data->pdev);
747 ida_simple_remove(&aem_ida, data->id);
749 kfree(data);
810 struct aem_data *data = dev_get_drvdata(dev);
812 return sprintf(buf, "%s%d\n", DRVNAME, data->ver_major);
820 struct aem_data *data = dev_get_drvdata(dev);
822 return sprintf(buf, "%d.%d\n", data->ver_major, data->ver_minor);
832 struct aem_data *data = dev_get_drvdata(dev);
836 mutex_lock(&data->lock);
837 update_aem_energy_one(data, attr->index);
839 before = data->energy[attr->index];
842 msecs_to_jiffies(data->power_period[attr->index])
845 mutex_unlock(&data->lock);
849 update_aem_energy_one(data, attr->index);
851 after = data->energy[attr->index];
852 mutex_unlock(&data->lock);
912 static int aem_register_sensors(struct aem_data *data,
916 struct device *dev = &data->pdev->dev;
917 struct sensor_device_attribute *sensors = data->sensors;
962 aem_remove_sensors(data);
993 static void aem_remove_sensors(struct aem_data *data)
998 if (!data->sensors[i].dev_attr.attr.name)
1000 device_remove_file(&data->pdev->dev,
1001 &data->sensors[i].dev_attr);
1004 device_remove_file(&data->pdev->dev,
1006 device_remove_file(&data->pdev->dev,
1050 static int aem1_find_sensors(struct aem_data *data)
1052 return aem_register_sensors(data, aem1_ro_sensors, aem1_rw_sensors);
1056 static int aem2_find_sensors(struct aem_data *data)
1058 return aem_register_sensors(data, aem2_ro_sensors, aem2_rw_sensors);