acpi_battery: code cleanup
* merged acpi_battery.h with the cpp. * no functional change except the cookie deallocation is now made in acpi_battery_free() instead of acpi_battery_close().
This commit is contained in:
parent
c1da0e750b
commit
c9cff42225
@ -7,19 +7,31 @@
|
|||||||
* Alexander von Gluck, kallisti5@unixzen.com
|
* Alexander von Gluck, kallisti5@unixzen.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "acpi_battery.h"
|
|
||||||
|
#include <ACPI.h>
|
||||||
|
#include <condition_variable.h>
|
||||||
|
#include <Drivers.h>
|
||||||
|
#include <Errors.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <Drivers.h>
|
#include "device/power_managment.h"
|
||||||
#include <Errors.h>
|
|
||||||
#include <KernelExport.h>
|
|
||||||
|
struct battery_driver_cookie {
|
||||||
|
device_node* node;
|
||||||
|
acpi_device_module_info* acpi;
|
||||||
|
acpi_device acpi_cookie;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct battery_device_cookie {
|
||||||
|
battery_driver_cookie* driver_cookie;
|
||||||
|
vint32 stop_watching;
|
||||||
|
};
|
||||||
|
|
||||||
#include <ACPI.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"
|
||||||
@ -30,12 +42,23 @@
|
|||||||
// name of pnp generator of path ids
|
// name of pnp generator of path ids
|
||||||
#define ACPI_BATTERY_PATHID_GENERATOR "acpi_battery/path_id"
|
#define ACPI_BATTERY_PATHID_GENERATOR "acpi_battery/path_id"
|
||||||
|
|
||||||
|
#define ACPI_NAME_BATTERY "PNP0C0A"
|
||||||
|
|
||||||
|
//#define TRACE_BATTERY
|
||||||
|
#ifdef TRACE_BATTERY
|
||||||
|
# define TRACE(x...) dprintf("acpi_battery: "x)
|
||||||
|
#else
|
||||||
|
# define TRACE(x...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static device_manager_info *sDeviceManager;
|
static device_manager_info *sDeviceManager;
|
||||||
static ConditionVariable sBatteryCondition;
|
static ConditionVariable sBatteryCondition;
|
||||||
|
|
||||||
|
|
||||||
status_t
|
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;
|
||||||
|
|
||||||
@ -94,8 +117,6 @@ status_t
|
|||||||
ReadBatteryInfo(battery_driver_cookie* cookie,
|
ReadBatteryInfo(battery_driver_cookie* cookie,
|
||||||
acpi_extended_battery_info* batteryInfo)
|
acpi_extended_battery_info* batteryInfo)
|
||||||
{
|
{
|
||||||
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;
|
||||||
@ -103,8 +124,8 @@ ReadBatteryInfo(battery_driver_cookie* cookie,
|
|||||||
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_t status = cookie->acpi->evaluate_method(cookie->acpi_cookie,
|
||||||
&buffer);
|
"_BIF", NULL, &buffer);
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
@ -243,6 +264,24 @@ TraceBatteryInfo(acpi_extended_battery_info* batteryInfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark - device module API
|
||||||
|
|
||||||
|
|
||||||
|
static status_t
|
||||||
|
acpi_battery_init_device(void *driverCookie, void **cookie)
|
||||||
|
{
|
||||||
|
*cookie = driverCookie;
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
acpi_battery_uninit_device(void *_cookie)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static status_t
|
||||||
acpi_battery_open(void *initCookie, const char *path, int flags, void** cookie)
|
acpi_battery_open(void *initCookie, const char *path, int flags, void** cookie)
|
||||||
{
|
{
|
||||||
@ -263,9 +302,6 @@ acpi_battery_open(void *initCookie, const char *path, int flags, void** cookie)
|
|||||||
static status_t
|
static status_t
|
||||||
acpi_battery_close(void* cookie)
|
acpi_battery_close(void* cookie)
|
||||||
{
|
{
|
||||||
battery_device_cookie* device = (battery_device_cookie*)cookie;
|
|
||||||
free(device);
|
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,7 +372,7 @@ acpi_battery_write(void* cookie, off_t position, const void* buffer, size_t* num
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
static status_t
|
||||||
acpi_battery_control(void* _cookie, uint32 op, void* arg, size_t len)
|
acpi_battery_control(void* _cookie, uint32 op, void* arg, size_t len)
|
||||||
{
|
{
|
||||||
battery_device_cookie* device = (battery_device_cookie*)_cookie;
|
battery_device_cookie* device = (battery_device_cookie*)_cookie;
|
||||||
@ -394,6 +430,8 @@ acpi_battery_control(void* _cookie, uint32 op, void* arg, size_t len)
|
|||||||
static status_t
|
static status_t
|
||||||
acpi_battery_free(void* cookie)
|
acpi_battery_free(void* cookie)
|
||||||
{
|
{
|
||||||
|
battery_device_cookie* device = (battery_device_cookie*)cookie;
|
||||||
|
free(device);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,9 +444,6 @@ acpi_battery_support(device_node *parent)
|
|||||||
{
|
{
|
||||||
// make sure parent is really the ACPI bus manager
|
// make sure parent is really the ACPI bus manager
|
||||||
const char *bus;
|
const char *bus;
|
||||||
uint32 device_type;
|
|
||||||
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;
|
||||||
|
|
||||||
@ -416,6 +451,7 @@ acpi_battery_support(device_node *parent)
|
|||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
// check whether it's really a device
|
// check whether it's really a device
|
||||||
|
uint32 device_type;
|
||||||
if (sDeviceManager->get_attr_uint32(parent, ACPI_DEVICE_TYPE_ITEM,
|
if (sDeviceManager->get_attr_uint32(parent, ACPI_DEVICE_TYPE_ITEM,
|
||||||
&device_type, false) != B_OK
|
&device_type, false) != B_OK
|
||||||
|| device_type != ACPI_TYPE_DEVICE) {
|
|| device_type != ACPI_TYPE_DEVICE) {
|
||||||
@ -423,9 +459,11 @@ acpi_battery_support(device_node *parent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check whether it's a battery device
|
// check whether it's a battery device
|
||||||
|
const char *name;
|
||||||
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;
|
||||||
}
|
}
|
||||||
@ -435,8 +473,7 @@ static status_t
|
|||||||
acpi_battery_register_device(device_node *node)
|
acpi_battery_register_device(device_node *node)
|
||||||
{
|
{
|
||||||
device_attr attrs[] = {
|
device_attr attrs[] = {
|
||||||
{ B_DEVICE_PRETTY_NAME, B_STRING_TYPE,
|
{ B_DEVICE_PRETTY_NAME, B_STRING_TYPE, { string: "ACPI Battery" }},
|
||||||
{ string: "ACPI Battery" }},
|
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -503,20 +540,8 @@ acpi_battery_register_child_devices(void *cookie)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
|
||||||
acpi_battery_init_device(void *driverCookie, void **cookie)
|
|
||||||
{
|
|
||||||
*cookie = driverCookie;
|
|
||||||
return B_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
acpi_battery_uninit_device(void *_cookie)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module_dependency module_dependencies[] = {
|
module_dependency module_dependencies[] = {
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2009, Haiku, Inc. All Rights Reserved.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Clemens Zeidler, haiku@clemens-zeidler.de
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ACPI_BATTERY_H
|
|
||||||
#define ACPI_BATTERY_H
|
|
||||||
|
|
||||||
#include <KernelExport.h>
|
|
||||||
#include <ACPI.h>
|
|
||||||
|
|
||||||
#include "device/power_managment.h"
|
|
||||||
|
|
||||||
//#define TRACE_BATTERY
|
|
||||||
#ifdef TRACE_BATTERY
|
|
||||||
# define TRACE(x...) dprintf("acpi_battery: "x)
|
|
||||||
#else
|
|
||||||
# define TRACE(x...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define ACPI_NAME_BATTERY "PNP0C0A"
|
|
||||||
|
|
||||||
struct battery_driver_cookie {
|
|
||||||
device_node* node;
|
|
||||||
acpi_device_module_info* acpi;
|
|
||||||
acpi_device acpi_cookie;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct battery_device_cookie {
|
|
||||||
battery_driver_cookie* driver_cookie;
|
|
||||||
vint32 stop_watching;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void battery_notify_handler(acpi_handle device, uint32 value, void *context);
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue
Block a user