Some small cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33632 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -6,19 +6,19 @@
|
|||||||
* Clemens Zeidler, [email protected]
|
* Clemens Zeidler, [email protected]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <KernelExport.h>
|
#include "acpi_battery.h"
|
||||||
#include <Drivers.h>
|
|
||||||
#include <Errors.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <kernel/arch/x86/arch_cpu.h>
|
#include <Drivers.h>
|
||||||
|
#include <Errors.h>
|
||||||
|
#include <KernelExport.h>
|
||||||
|
|
||||||
#include <ACPI.h>
|
#include <ACPI.h>
|
||||||
#include "acpi_battery.h"
|
|
||||||
#include <condition_variable.h>
|
#include <condition_variable.h>
|
||||||
|
#include <kernel/arch/x86/arch_cpu.h>
|
||||||
|
|
||||||
#define ACPI_BATTERY_DRIVER_NAME "drivers/power/acpi_battery/driver_v1"
|
#define ACPI_BATTERY_DRIVER_NAME "drivers/power/acpi_battery/driver_v1"
|
||||||
#define ACPI_BATTERY_DEVICE_NAME "drivers/power/acpi_battery/device_v1"
|
#define ACPI_BATTERY_DEVICE_NAME "drivers/power/acpi_battery/device_v1"
|
||||||
@@ -37,40 +37,40 @@ status_t
|
|||||||
ReadBatteryStatus(battery_driver_cookie* cookie, acpi_battery_info* batteryStatus)
|
ReadBatteryStatus(battery_driver_cookie* cookie, acpi_battery_info* batteryStatus)
|
||||||
{
|
{
|
||||||
status_t status = B_ERROR;
|
status_t status = B_ERROR;
|
||||||
|
|
||||||
acpi_data buffer;
|
acpi_data buffer;
|
||||||
buffer.pointer = NULL;
|
buffer.pointer = NULL;
|
||||||
buffer.length = ACPI_ALLOCATE_BUFFER;
|
buffer.length = ACPI_ALLOCATE_BUFFER;
|
||||||
|
|
||||||
acpi_object_type* object;
|
acpi_object_type* object;
|
||||||
acpi_object_type* pointer;
|
acpi_object_type* pointer;
|
||||||
|
|
||||||
status = cookie->acpi->evaluate_method(cookie->acpi_cookie, "_BST", NULL,
|
status = cookie->acpi->evaluate_method(cookie->acpi_cookie, "_BST", NULL,
|
||||||
&buffer);
|
&buffer);
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
object = (acpi_object_type*)buffer.pointer;
|
object = (acpi_object_type*)buffer.pointer;
|
||||||
if (object->object_type != ACPI_TYPE_PACKAGE
|
if (object->object_type != ACPI_TYPE_PACKAGE
|
||||||
|| object->data.package.count < 4) {
|
|| object->data.package.count < 4) {
|
||||||
status = B_ERROR;
|
status = B_ERROR;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer = object->data.package.objects;
|
pointer = object->data.package.objects;
|
||||||
batteryStatus->state = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryStatus->state = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
|
||||||
|
|
||||||
pointer++;
|
|
||||||
batteryStatus->current_rate = (pointer->object_type == ACPI_TYPE_INTEGER)
|
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryStatus->capacity = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryStatus->current_rate = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryStatus->voltage = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryStatus->capacity = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
|
pointer++;
|
||||||
|
batteryStatus->voltage = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
@@ -83,84 +83,84 @@ ReadBatteryInfo(battery_driver_cookie* cookie,
|
|||||||
acpi_extended_battery_info* batteryInfo)
|
acpi_extended_battery_info* batteryInfo)
|
||||||
{
|
{
|
||||||
status_t status = B_ERROR;
|
status_t status = B_ERROR;
|
||||||
|
|
||||||
acpi_data buffer;
|
acpi_data buffer;
|
||||||
buffer.pointer = NULL;
|
buffer.pointer = NULL;
|
||||||
buffer.length = ACPI_ALLOCATE_BUFFER;
|
buffer.length = ACPI_ALLOCATE_BUFFER;
|
||||||
|
|
||||||
acpi_object_type* object;
|
acpi_object_type* object;
|
||||||
acpi_object_type* pointer;
|
acpi_object_type* pointer;
|
||||||
|
|
||||||
status = cookie->acpi->evaluate_method(cookie->acpi_cookie, "_BIF", NULL,
|
status = cookie->acpi->evaluate_method(cookie->acpi_cookie, "_BIF", NULL,
|
||||||
&buffer);
|
&buffer);
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
object = (acpi_object_type*)buffer.pointer;
|
object = (acpi_object_type*)buffer.pointer;
|
||||||
if (object->object_type != ACPI_TYPE_PACKAGE
|
if (object->object_type != ACPI_TYPE_PACKAGE
|
||||||
|| object->data.package.count < 13) {
|
|| object->data.package.count < 13) {
|
||||||
status = B_ERROR;
|
status = B_ERROR;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer = object->data.package.objects;
|
pointer = object->data.package.objects;
|
||||||
batteryInfo->power_unit = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryInfo->power_unit = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->design_capacity = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryInfo->design_capacity = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->last_full_charge = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryInfo->last_full_charge = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->technology = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryInfo->technology = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->design_voltage = (pointer->object_type == ACPI_TYPE_INTEGER)
|
batteryInfo->design_voltage = (pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->design_capacity_warning =
|
batteryInfo->design_capacity_warning =
|
||||||
(pointer->object_type == ACPI_TYPE_INTEGER)
|
(pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->design_capacity_low =
|
batteryInfo->design_capacity_low =
|
||||||
(pointer->object_type == ACPI_TYPE_INTEGER)
|
(pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->capacity_granularity_1 =
|
batteryInfo->capacity_granularity_1 =
|
||||||
(pointer->object_type == ACPI_TYPE_INTEGER)
|
(pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
batteryInfo->capacity_granularity_2 =
|
batteryInfo->capacity_granularity_2 =
|
||||||
(pointer->object_type == ACPI_TYPE_INTEGER)
|
(pointer->object_type == ACPI_TYPE_INTEGER)
|
||||||
? pointer->data.integer : -1;
|
? pointer->data.integer : -1;
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
strlcpy(batteryInfo->model_number,
|
strlcpy(batteryInfo->model_number,
|
||||||
(pointer->object_type == ACPI_TYPE_STRING)
|
(pointer->object_type == ACPI_TYPE_STRING)
|
||||||
? pointer->data.string.string : "", sizeof(batteryInfo->model_number));
|
? pointer->data.string.string : "", sizeof(batteryInfo->model_number));
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
strlcpy(batteryInfo->serial_number,
|
strlcpy(batteryInfo->serial_number,
|
||||||
(pointer->object_type == ACPI_TYPE_STRING)
|
(pointer->object_type == ACPI_TYPE_STRING)
|
||||||
? pointer->data.string.string : "", sizeof(batteryInfo->serial_number));
|
? pointer->data.string.string : "", sizeof(batteryInfo->serial_number));
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
strlcpy(batteryInfo->type, (pointer->object_type == ACPI_TYPE_STRING)
|
strlcpy(batteryInfo->type, (pointer->object_type == ACPI_TYPE_STRING)
|
||||||
? pointer->data.string.string : "", sizeof(batteryInfo->type));
|
? pointer->data.string.string : "", sizeof(batteryInfo->type));
|
||||||
|
|
||||||
pointer++;
|
pointer++;
|
||||||
strlcpy(batteryInfo->oem_info, (pointer->object_type == ACPI_TYPE_STRING)
|
strlcpy(batteryInfo->oem_info, (pointer->object_type == ACPI_TYPE_STRING)
|
||||||
? pointer->data.string.string : "", sizeof(batteryInfo->oem_info));
|
? pointer->data.string.string : "", sizeof(batteryInfo->oem_info));
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
free(buffer.pointer);
|
free(buffer.pointer);
|
||||||
return status;
|
return status;
|
||||||
@@ -171,33 +171,33 @@ int
|
|||||||
EstimatedRuntime(battery_driver_cookie* cookie, acpi_battery_info* info)
|
EstimatedRuntime(battery_driver_cookie* cookie, acpi_battery_info* info)
|
||||||
{
|
{
|
||||||
status_t status = B_ERROR;
|
status_t status = B_ERROR;
|
||||||
|
|
||||||
acpi_object_type argument;
|
acpi_object_type argument;
|
||||||
argument.object_type = ACPI_TYPE_INTEGER;
|
argument.object_type = ACPI_TYPE_INTEGER;
|
||||||
argument.data.integer = info->current_rate;
|
argument.data.integer = info->current_rate;
|
||||||
|
|
||||||
acpi_objects arguments;
|
acpi_objects arguments;
|
||||||
arguments.count = 1;
|
arguments.count = 1;
|
||||||
arguments.pointer = &argument;
|
arguments.pointer = &argument;
|
||||||
|
|
||||||
acpi_object_type object;
|
acpi_object_type object;
|
||||||
|
|
||||||
acpi_data buffer;
|
acpi_data buffer;
|
||||||
buffer.pointer = &object;
|
buffer.pointer = &object;
|
||||||
buffer.length = sizeof(object);
|
buffer.length = sizeof(object);
|
||||||
|
|
||||||
acpi_object_type* returnObject;
|
acpi_object_type* returnObject;
|
||||||
|
|
||||||
status = cookie->acpi->evaluate_method(cookie->acpi_cookie, "_BTM",
|
status = cookie->acpi->evaluate_method(cookie->acpi_cookie, "_BTM",
|
||||||
&arguments, &buffer);
|
&arguments, &buffer);
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
returnObject = (acpi_object_type*)buffer.pointer;
|
returnObject = (acpi_object_type*)buffer.pointer;
|
||||||
|
|
||||||
if (returnObject->object_type != ACPI_TYPE_INTEGER)
|
if (returnObject->object_type != ACPI_TYPE_INTEGER)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
int result = returnObject->data.integer;
|
int result = returnObject->data.integer;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -238,12 +238,12 @@ acpi_battery_open(void *initCookie, const char *path, int flags, void** cookie)
|
|||||||
device = (battery_device_cookie*)calloc(1, sizeof(battery_device_cookie));
|
device = (battery_device_cookie*)calloc(1, sizeof(battery_device_cookie));
|
||||||
if (device == NULL)
|
if (device == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
device->driver_cookie = (battery_driver_cookie*)initCookie;
|
device->driver_cookie = (battery_driver_cookie*)initCookie;
|
||||||
device->stop_watching = 0;
|
device->stop_watching = 0;
|
||||||
|
|
||||||
*cookie = device;
|
*cookie = device;
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,10 +268,10 @@ acpi_battery_read(void* _cookie, off_t position, void *buffer, size_t* numBytes)
|
|||||||
|
|
||||||
acpi_battery_info batteryStatus;
|
acpi_battery_info batteryStatus;
|
||||||
ReadBatteryStatus(device->driver_cookie, &batteryStatus);
|
ReadBatteryStatus(device->driver_cookie, &batteryStatus);
|
||||||
|
|
||||||
acpi_extended_battery_info batteryInfo;
|
acpi_extended_battery_info batteryInfo;
|
||||||
ReadBatteryInfo(device->driver_cookie, &batteryInfo);
|
ReadBatteryInfo(device->driver_cookie, &batteryInfo);
|
||||||
|
|
||||||
if (position == 0) {
|
if (position == 0) {
|
||||||
size_t max_len = *numBytes;
|
size_t max_len = *numBytes;
|
||||||
char *str = (char *)buffer;
|
char *str = (char *)buffer;
|
||||||
@@ -285,7 +285,7 @@ acpi_battery_read(void* _cookie, off_t position, void *buffer, size_t* numBytes)
|
|||||||
batteryStatus.capacity, batteryStatus.voltage);
|
batteryStatus.capacity, batteryStatus.voltage);
|
||||||
max_len-= strlen(str);
|
max_len-= strlen(str);
|
||||||
str += strlen(str);
|
str += strlen(str);
|
||||||
|
|
||||||
snprintf(str, max_len, "\nBattery Info:\n");
|
snprintf(str, max_len, "\nBattery Info:\n");
|
||||||
max_len-= strlen(str);
|
max_len-= strlen(str);
|
||||||
str += strlen(str);
|
str += strlen(str);
|
||||||
@@ -338,7 +338,7 @@ acpi_battery_control(void* _cookie, uint32 op, void* arg, size_t len)
|
|||||||
uint32 magicId = kMagicACPIBatteryID;
|
uint32 magicId = kMagicACPIBatteryID;
|
||||||
return user_memcpy(arg, &magicId, sizeof(magicId));
|
return user_memcpy(arg, &magicId, sizeof(magicId));
|
||||||
}
|
}
|
||||||
|
|
||||||
case GET_BATTERY_INFO: {
|
case GET_BATTERY_INFO: {
|
||||||
if (len < sizeof(acpi_battery_info))
|
if (len < sizeof(acpi_battery_info))
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -347,20 +347,20 @@ acpi_battery_control(void* _cookie, uint32 op, void* arg, size_t len)
|
|||||||
err = ReadBatteryStatus(device->driver_cookie, &batteryInfo);
|
err = ReadBatteryStatus(device->driver_cookie, &batteryInfo);
|
||||||
if (err != B_OK)
|
if (err != B_OK)
|
||||||
return err;
|
return err;
|
||||||
return user_memcpy(arg, &batteryInfo, sizeof(batteryInfo));
|
return user_memcpy(arg, &batteryInfo, sizeof(batteryInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
case GET_EXTENDED_BATTERY_INFO: {
|
case GET_EXTENDED_BATTERY_INFO: {
|
||||||
if (len < sizeof(acpi_extended_battery_info))
|
if (len < sizeof(acpi_extended_battery_info))
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
acpi_extended_battery_info extBatteryInfo;
|
acpi_extended_battery_info extBatteryInfo;
|
||||||
err = ReadBatteryInfo(device->driver_cookie, &extBatteryInfo);
|
err = ReadBatteryInfo(device->driver_cookie, &extBatteryInfo);
|
||||||
if (err != B_OK)
|
if (err != B_OK)
|
||||||
return err;
|
return err;
|
||||||
return user_memcpy(arg, &extBatteryInfo, sizeof(extBatteryInfo));
|
return user_memcpy(arg, &extBatteryInfo, sizeof(extBatteryInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
case WATCH_BATTERY:
|
case WATCH_BATTERY:
|
||||||
sBatteryCondition.Wait();
|
sBatteryCondition.Wait();
|
||||||
if (atomic_get(&(device->stop_watching))) {
|
if (atomic_get(&(device->stop_watching))) {
|
||||||
@@ -368,7 +368,7 @@ acpi_battery_control(void* _cookie, uint32 op, void* arg, size_t len)
|
|||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
|
||||||
case STOP_WATCHING_BATTERY:
|
case STOP_WATCHING_BATTERY:
|
||||||
atomic_set(&(device->stop_watching), 1);
|
atomic_set(&(device->stop_watching), 1);
|
||||||
sBatteryCondition.NotifyAll();
|
sBatteryCondition.NotifyAll();
|
||||||
@@ -396,7 +396,7 @@ acpi_battery_support(device_node *parent)
|
|||||||
const char *bus;
|
const char *bus;
|
||||||
uint32 device_type;
|
uint32 device_type;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
if (sDeviceManager->get_attr_string(parent, B_DEVICE_BUS, &bus, false))
|
if (sDeviceManager->get_attr_string(parent, B_DEVICE_BUS, &bus, false))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -409,12 +409,12 @@ acpi_battery_support(device_node *parent)
|
|||||||
|| device_type != ACPI_TYPE_DEVICE) {
|
|| device_type != ACPI_TYPE_DEVICE) {
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check whether it's a battery device
|
// check whether it's a battery device
|
||||||
if (sDeviceManager->get_attr_string(parent, ACPI_DEVICE_HID_ITEM, &name,
|
if (sDeviceManager->get_attr_string(parent, ACPI_DEVICE_HID_ITEM, &name,
|
||||||
false) != B_OK || strcmp(name, ACPI_NAME_BATTERY))
|
false) != B_OK || strcmp(name, ACPI_NAME_BATTERY))
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
return 0.6;
|
return 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -444,7 +444,7 @@ acpi_battery_init_driver(device_node *node, void **driverCookie)
|
|||||||
*driverCookie = device;
|
*driverCookie = device;
|
||||||
|
|
||||||
device->node = node;
|
device->node = node;
|
||||||
|
|
||||||
device_node *parent;
|
device_node *parent;
|
||||||
parent = sDeviceManager->get_parent_node(node);
|
parent = sDeviceManager->get_parent_node(node);
|
||||||
sDeviceManager->get_driver(parent, (driver_module_info **)&device->acpi,
|
sDeviceManager->get_driver(parent, (driver_module_info **)&device->acpi,
|
||||||
@@ -464,7 +464,7 @@ acpi_battery_uninit_driver(void *driverCookie)
|
|||||||
{
|
{
|
||||||
TRACE("acpi_battery_uninit_driver\n");
|
TRACE("acpi_battery_uninit_driver\n");
|
||||||
battery_driver_cookie *device = (battery_driver_cookie*)driverCookie;
|
battery_driver_cookie *device = (battery_driver_cookie*)driverCookie;
|
||||||
|
|
||||||
device->acpi->remove_notify_handler(device->acpi_cookie,
|
device->acpi->remove_notify_handler(device->acpi_cookie,
|
||||||
ACPI_ALL_NOTIFY, battery_notify_handler);
|
ACPI_ALL_NOTIFY, battery_notify_handler);
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* Authors:
|
* Authors:
|
||||||
* Clemens Zeidler, [email protected]
|
* Clemens Zeidler, [email protected]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ACPI_BATTERY_H
|
#ifndef ACPI_BATTERY_H
|
||||||
#define ACPI_BATTERY_H
|
#define ACPI_BATTERY_H
|
||||||
|
|
||||||
@@ -47,4 +47,4 @@ struct battery_device_cookie {
|
|||||||
|
|
||||||
void battery_notify_handler(acpi_handle device, uint32 value, void *context);
|
void battery_notify_handler(acpi_handle device, uint32 value, void *context);
|
||||||
|
|
||||||
#endif /* _EST_H */
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user