All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dtor_core-yWtbtysYrB+LZ21kGMrzwg@public.gmane.org>
To: acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: Len Brown <len.brow-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: [PATCH 2/4] event code fixes/cleanup
Date: Tue, 24 Aug 2004 01:36:43 -0500	[thread overview]
Message-ID: <200408240136.46113.dtor_core@ameritech.net> (raw)
In-Reply-To: <200408240134.16962.dtor_core-yWtbtysYrB+LZ21kGMrzwg@public.gmane.org>


===================================================================


ChangeSet@1.1843, 2004-08-24 01:11:02-05:00, dtor_core-yWtbtysYrB+LZ21kGMrzwg@public.gmane.org
  ACPI: Move event handling code from bus.c into event.c to cut down
        amount of exported implementation details. Also:
  
        - when closing /proc/acpi/event drop all events that have not
          been read yet so next time it is opened userspace is not fed
          old events;
        - do not reimplement wait_event_interruptible, just use it;
        - do not return -EIO if an event is 'stolen', 0 is proper return
          code;
        - tidy up read procedure (ensure that list is not empty before
          fetching next event)
  
  Signed-off-by: Dmitry Torokhov <dtor-JGs/UdohzUI@public.gmane.org>


 drivers/acpi/Makefile     |    4 -
 drivers/acpi/ac.c         |    4 -
 drivers/acpi/acpi_ksyms.c |    9 +-
 drivers/acpi/asus_acpi.c  |    5 -
 drivers/acpi/battery.c    |    3 
 drivers/acpi/bus.c        |   94 ----------------------------
 drivers/acpi/button.c     |    4 -
 drivers/acpi/event.c      |  152 ++++++++++++++++++++++++++++++++++------------
 drivers/acpi/processor.c  |    7 +-
 drivers/acpi/thermal.c    |    9 +-
 include/acpi/acpi_bus.h   |   16 ----
 include/acpi/acpi_event.h |   47 ++++++++++++++
 12 files changed, 190 insertions(+), 164 deletions(-)


===================================================================



diff -Nru a/drivers/acpi/Makefile b/drivers/acpi/Makefile
--- a/drivers/acpi/Makefile	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/Makefile	2004-08-24 01:16:54 -05:00
@@ -32,7 +32,7 @@
 # ACPI Bus and Device Drivers
 #
 obj-$(CONFIG_ACPI_BUS)		+= sleep/
-obj-$(CONFIG_ACPI_BUS)		+= bus.o
+obj-$(CONFIG_ACPI_BUS)		+= bus.o event.o
 obj-$(CONFIG_ACPI_AC) 		+= ac.o
 obj-$(CONFIG_ACPI_BATTERY)	+= battery.o
 obj-$(CONFIG_ACPI_BUTTON)	+= button.o
@@ -42,7 +42,7 @@
 obj-$(CONFIG_ACPI_POWER)	+= power.o
 obj-$(CONFIG_ACPI_PROCESSOR)	+= processor.o
 obj-$(CONFIG_ACPI_THERMAL)	+= thermal.o
-obj-$(CONFIG_ACPI_SYSTEM)	+= system.o event.o
+obj-$(CONFIG_ACPI_SYSTEM)	+= system.o
 obj-$(CONFIG_ACPI_DEBUG)	+= debug.o
 obj-$(CONFIG_ACPI_NUMA)		+= numa.o
 obj-$(CONFIG_ACPI_ASUS)		+= asus_acpi.o
diff -Nru a/drivers/acpi/ac.c b/drivers/acpi/ac.c
--- a/drivers/acpi/ac.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/ac.c	2004-08-24 01:16:54 -05:00
@@ -29,7 +29,9 @@
 #include <linux/types.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+
 #include <acpi/acpi_bus.h>
+#include <acpi/acpi_event.h>
 #include <acpi/acpi_drivers.h>
 
 
@@ -220,7 +222,7 @@
 	switch (event) {
 	case ACPI_AC_NOTIFY_STATUS:
 		acpi_ac_get_state(ac);
-		acpi_bus_generate_event(device, event, (u32) ac->state);
+		acpi_generate_event(device, event, (u32) ac->state);
 		break;
 	default:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
diff -Nru a/drivers/acpi/acpi_ksyms.c b/drivers/acpi/acpi_ksyms.c
--- a/drivers/acpi/acpi_ksyms.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/acpi_ksyms.c	2004-08-24 01:16:54 -05:00
@@ -27,6 +27,7 @@
 #include <linux/acpi.h>
 #include <acpi/acpi.h>
 #include <acpi/acpi_bus.h>
+#include <acpi/acpi_event.h>
 
 
 #ifdef CONFIG_ACPI_INTERPRETER
@@ -120,10 +121,11 @@
 #endif /*CONFIG_ACPI_INTERPRETER*/
 
 
-/* ACPI Bus Driver (acpi_bus.c) */
+/* ACPI Bus Driver */
 
 #ifdef CONFIG_ACPI_BUS
 
+/* bus.c */
 EXPORT_SYMBOL(acpi_fadt);
 EXPORT_SYMBOL(acpi_walk_namespace);
 EXPORT_SYMBOL(acpi_root_dir);
@@ -131,10 +133,11 @@
 EXPORT_SYMBOL(acpi_bus_get_status);
 EXPORT_SYMBOL(acpi_bus_get_power);
 EXPORT_SYMBOL(acpi_bus_set_power);
-EXPORT_SYMBOL(acpi_bus_generate_event);
-EXPORT_SYMBOL(acpi_bus_receive_event);
 EXPORT_SYMBOL(acpi_bus_register_driver);
 EXPORT_SYMBOL(acpi_bus_unregister_driver);
+
+/* event.c */
+EXPORT_SYMBOL(acpi_generate_event);
 
 #endif /*CONFIG_ACPI_BUS*/
 
diff -Nru a/drivers/acpi/asus_acpi.c b/drivers/acpi/asus_acpi.c
--- a/drivers/acpi/asus_acpi.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/asus_acpi.c	2004-08-24 01:16:54 -05:00
@@ -40,6 +40,7 @@
 #include <linux/proc_fs.h>
 #include <acpi/acpi_drivers.h>
 #include <acpi/acpi_bus.h>
+#include <acpi/acpi_event.h>
 #include <asm/uaccess.h>
 
 #define ASUS_ACPI_VERSION "0.28"
@@ -949,8 +950,8 @@
 		hotk->brightness = (event & ~((u32) BR_DOWN));
 	}
 
-	acpi_bus_generate_event(hotk->device, event,
-				hotk->event_count[event % 128]++);
+	acpi_generate_event(hotk->device, event,
+			    hotk->event_count[event % 128]++);
 
 	return;
 }
diff -Nru a/drivers/acpi/battery.c b/drivers/acpi/battery.c
--- a/drivers/acpi/battery.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/battery.c	2004-08-24 01:16:54 -05:00
@@ -31,6 +31,7 @@
 #include <asm/uaccess.h>
 
 #include <acpi/acpi_bus.h>
+#include <acpi/acpi_event.h>
 #include <acpi/acpi_drivers.h>
 
 
@@ -719,7 +720,7 @@
 	case ACPI_BATTERY_NOTIFY_STATUS:
 	case ACPI_BATTERY_NOTIFY_INFO:
 		acpi_battery_check(battery);
-		acpi_bus_generate_event(device, event, battery->flags.present);
+		acpi_generate_event(device, event, battery->flags.present);
 		break;
 	default:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
diff -Nru a/drivers/acpi/bus.c b/drivers/acpi/bus.c
--- a/drivers/acpi/bus.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/bus.c	2004-08-24 01:16:54 -05:00
@@ -272,100 +272,6 @@
 }
 
 
-
-/* --------------------------------------------------------------------------
-                                Event Management
-   -------------------------------------------------------------------------- */
-
-static spinlock_t		acpi_bus_event_lock = SPIN_LOCK_UNLOCKED;
-
-LIST_HEAD(acpi_bus_event_list);
-DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
-
-extern int			event_is_open;
-
-int
-acpi_bus_generate_event (
-	struct acpi_device	*device,
-	u8			type,
-	int			data)
-{
-	struct acpi_bus_event	*event = NULL;
-	unsigned long		flags = 0;
-
-	ACPI_FUNCTION_TRACE("acpi_bus_generate_event");
-
-	if (!device)
-		return_VALUE(-EINVAL);
-
-	/* drop event on the floor if no one's listening */
-	if (!event_is_open)
-		return_VALUE(0);
-
-	event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
-	if (!event)
-		return_VALUE(-ENOMEM);
-
-	strcpy(event->device_class, device->pnp.device_class);
-	strcpy(event->bus_id, device->pnp.bus_id);
-	event->type = type;
-	event->data = data;
-
-	spin_lock_irqsave(&acpi_bus_event_lock, flags);
-	list_add_tail(&event->node, &acpi_bus_event_list);
-	spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
-
-	wake_up_interruptible(&acpi_bus_event_queue);
-
-	return_VALUE(0);
-}
-
-int
-acpi_bus_receive_event (
-	struct acpi_bus_event	*event)
-{
-	unsigned long		flags = 0;
-	struct acpi_bus_event	*entry = NULL;
-
-	DECLARE_WAITQUEUE(wait, current);
-
-	ACPI_FUNCTION_TRACE("acpi_bus_receive_event");
-
-	if (!event)
-		return -EINVAL;
-
-	if (list_empty(&acpi_bus_event_list)) {
-
-		set_current_state(TASK_INTERRUPTIBLE);
-		add_wait_queue(&acpi_bus_event_queue, &wait);
-
-		if (list_empty(&acpi_bus_event_list))
-			schedule();
-
-		remove_wait_queue(&acpi_bus_event_queue, &wait);
-		set_current_state(TASK_RUNNING);
-
-		if (signal_pending(current))
-			return_VALUE(-ERESTARTSYS);
-	}
-
-	spin_lock_irqsave(&acpi_bus_event_lock, flags);
-	entry = list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
-	if (entry)
-		list_del(&entry->node);
-	spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
-
-	if (!entry)
-		return_VALUE(-ENODEV);
-
-	memcpy(event, entry, sizeof(struct acpi_bus_event));
-
-	kfree(entry);
-
-	return_VALUE(0);
-}
-
-
 /* --------------------------------------------------------------------------
                              Notification Handling
    -------------------------------------------------------------------------- */
diff -Nru a/drivers/acpi/button.c b/drivers/acpi/button.c
--- a/drivers/acpi/button.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/button.c	2004-08-24 01:16:54 -05:00
@@ -29,7 +29,9 @@
 #include <linux/types.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+
 #include <acpi/acpi_bus.h>
+#include <acpi/acpi_event.h>
 #include <acpi/acpi_drivers.h>
 
 
@@ -290,7 +292,7 @@
 
 	switch (event) {
 	case ACPI_BUTTON_NOTIFY_STATUS:
-		acpi_bus_generate_event(button->device, event, ++button->pushed);
+		acpi_generate_event(button->device, event, ++button->pushed);
 		break;
 	default:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
diff -Nru a/drivers/acpi/event.c b/drivers/acpi/event.c
--- a/drivers/acpi/event.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/event.c	2004-08-24 01:16:54 -05:00
@@ -10,73 +10,141 @@
 #include <linux/proc_fs.h>
 #include <linux/init.h>
 #include <linux/poll.h>
+#include <acpi/acpi_event.h>
 #include <acpi/acpi_drivers.h>
 
 #define _COMPONENT		ACPI_SYSTEM_COMPONENT
 ACPI_MODULE_NAME		("event")
 
-/* Global vars for handling event proc entry */
-static spinlock_t		acpi_system_event_lock = SPIN_LOCK_UNLOCKED;
-int				event_is_open = 0;
-extern struct list_head		acpi_bus_event_list;
-extern wait_queue_head_t	acpi_bus_event_queue;
+DECLARE_WAIT_QUEUE_HEAD(acpi_event_queue);
+LIST_HEAD(acpi_event_list);
+static spinlock_t	acpi_event_lock = SPIN_LOCK_UNLOCKED;
+static int		event_is_open;
+
+int
+acpi_generate_event(
+	struct acpi_device	*device,
+	u8			type,
+	int			data)
+{
+	struct acpi_bus_event	*event;
+	unsigned long		flags;
+	int			result = 0;
+
+	ACPI_FUNCTION_TRACE("acpi_generate_event");
+
+	if (!device)
+		return_VALUE(-EINVAL);
+
+	spin_lock_irqsave(&acpi_event_lock, flags);
+
+	/* drop event on the floor if no one's listening */
+	if (!event_is_open)
+		goto out;
+
+	event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
+	if (!event) {
+		result = -ENOMEM;
+		goto out;
+	}
+
+	strcpy(event->device_class, device->pnp.device_class);
+	strcpy(event->bus_id, device->pnp.bus_id);
+	event->type = type;
+	event->data = data;
+
+	list_add_tail(&event->node, &acpi_event_list);
+	wake_up_interruptible(&acpi_event_queue);
+
+out:
+	spin_unlock_irqrestore(&acpi_event_lock, flags);
+	return_VALUE(result);
+}
+
+static struct acpi_bus_event *acpi_fetch_event(void)
+{
+	struct acpi_bus_event	*event = NULL;
+	unsigned long		flags;
+
+	ACPI_FUNCTION_TRACE("acpi_fetch_event");
+
+	spin_lock_irqsave(&acpi_event_lock, flags);
+
+	if (!list_empty(&acpi_event_list)) {
+		event = list_entry(acpi_event_list.next,
+				   struct acpi_bus_event, node);
+		list_del(&event->node);
+	}
+
+	spin_unlock_irqrestore(&acpi_event_lock, flags);
+
+	return_PTR(event);
+}
 
 static int
 acpi_system_open_event(struct inode *inode, struct file *file)
 {
-	spin_lock_irq (&acpi_system_event_lock);
+	int rc = 0;
 
-	if(event_is_open)
-		goto out_busy;
+	spin_lock_irq(&acpi_event_lock);
+
+	if (event_is_open) {
+		rc = -EBUSY;
+		goto out;
+	}
 
 	event_is_open = 1;
 
-	spin_unlock_irq (&acpi_system_event_lock);
-	return 0;
+out:
+	spin_unlock_irq(&acpi_event_lock);
+	return rc;
+}
 
-out_busy:
-	spin_unlock_irq (&acpi_system_event_lock);
-	return -EBUSY;
+static inline int
+event_to_string(struct acpi_bus_event *event, char *buffer)
+{
+	return sprintf(buffer, "%s %s %08x %08x\n",
+		       event->device_class ? event->device_class : "<unknown>",
+		       event->bus_id ? event->bus_id : "<unknown>",
+		       event->type, event->data);
 }
 
 static ssize_t
-acpi_system_read_event (
+acpi_system_read_event(
 	struct file		*file,
 	char			__user *buffer,
 	size_t			count,
 	loff_t			*ppos)
 {
-	int			result = 0;
-	struct acpi_bus_event	event;
+	int			result;
+	struct acpi_bus_event	*event;
 	static char		str[ACPI_MAX_STRING];
-	static int		chars_remaining = 0;
+	static int		chars_remaining;
 	static char		*ptr;
 
 
 	ACPI_FUNCTION_TRACE("acpi_system_read_event");
 
 	if (!chars_remaining) {
-		memset(&event, 0, sizeof(struct acpi_bus_event));
-
-		if ((file->f_flags & O_NONBLOCK)
-		    && (list_empty(&acpi_bus_event_list)))
+		if (list_empty(&acpi_event_list) &&
+		    (file->f_flags & O_NONBLOCK))
 			return_VALUE(-EAGAIN);
 
-		result = acpi_bus_receive_event(&event);
-		if (result) {
-			return_VALUE(-EIO);
-		}
-
-		chars_remaining = sprintf(str, "%s %s %08x %08x\n", 
-			event.device_class?event.device_class:"<unknown>",
-			event.bus_id?event.bus_id:"<unknown>", 
-			event.type, event.data);
+		result = wait_event_interruptible(acpi_event_queue,
+					!list_empty(&acpi_event_list));
+		if (result)
+			return_VALUE(result);
+
+		if ((event = acpi_fetch_event()) == NULL)
+			return_VALUE(0);
+
+		chars_remaining = event_to_string(event, str);
 		ptr = str;
+		kfree(event);
 	}
 
-	if (chars_remaining < count) {
+	if (chars_remaining < count)
 		count = chars_remaining;
-	}
 
 	if (copy_to_user(buffer, ptr, count))
 		return_VALUE(-EFAULT);
@@ -91,9 +159,19 @@
 static int
 acpi_system_close_event(struct inode *inode, struct file *file)
 {
-	spin_lock_irq (&acpi_system_event_lock);
+	struct acpi_bus_event *event, *next;
+
+	spin_lock_irq(&acpi_event_lock);
+
+	/* We won't be interested in old events, will we? */
+	list_for_each_entry_safe(event, next, &acpi_event_list, node) {
+		list_del(&event->node);
+		kfree(event);
+	}
+
 	event_is_open = 0;
-	spin_unlock_irq (&acpi_system_event_lock);
+
+	spin_unlock_irq(&acpi_event_lock);
 	return 0;
 }
 
@@ -102,8 +180,8 @@
 	struct file		*file,
 	poll_table		*wait)
 {
-	poll_wait(file, &acpi_bus_event_queue, wait);
-	if (!list_empty(&acpi_bus_event_list))
+	poll_wait(file, &acpi_event_queue, wait);
+	if (!list_empty(&acpi_event_list))
 		return POLLIN | POLLRDNORM;
 	return 0;
 }
@@ -130,7 +208,7 @@
 	if (entry)
 		entry->proc_fops = &acpi_system_event_ops;
 	else {
-		ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
+		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
 				  "Unable to create '%s' proc fs entry\n","event" ));
 		error = -EFAULT;
 	}
diff -Nru a/drivers/acpi/processor.c b/drivers/acpi/processor.c
--- a/drivers/acpi/processor.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/processor.c	2004-08-24 01:16:54 -05:00
@@ -50,6 +50,7 @@
 
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
+#include <acpi/acpi_event.h>
 #include <acpi/processor.h>
 
 
@@ -2312,12 +2313,12 @@
 	switch (event) {
 	case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
 		acpi_processor_ppc_has_changed(pr);
-		acpi_bus_generate_event(device, event, 
-			pr->performance_platform_limit);
+		acpi_generate_event(device, event,
+				    pr->performance_platform_limit);
 		break;
 	case ACPI_PROCESSOR_NOTIFY_POWER:
 		/* TBD */
-		acpi_bus_generate_event(device, event, 0);
+		acpi_generate_event(device, event, 0);
 		break;
 	default:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
diff -Nru a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
--- a/drivers/acpi/thermal.c	2004-08-24 01:16:54 -05:00
+++ b/drivers/acpi/thermal.c	2004-08-24 01:16:54 -05:00
@@ -42,6 +42,7 @@
 #include <asm/uaccess.h>
 
 #include <acpi/acpi_bus.h>
+#include <acpi/acpi_event.h>
 #include <acpi/acpi_drivers.h>
 
 #define ACPI_THERMAL_COMPONENT		0x04000000
@@ -469,7 +470,7 @@
 		return_VALUE(result);
 
 	printk(KERN_EMERG "Critical temperature reached (%ld C), shutting down.\n", KELVIN_TO_CELSIUS(tz->temperature));
-	acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_CRITICAL, tz->trips.critical.flags.enabled);
+	acpi_generate_event(device, ACPI_THERMAL_NOTIFY_CRITICAL, tz->trips.critical.flags.enabled);
 
 	acpi_thermal_call_usermode(ACPI_THERMAL_PATH_POWEROFF);
 
@@ -500,7 +501,7 @@
 	if (result)
 		return_VALUE(result);
 
-	acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_HOT, tz->trips.hot.flags.enabled);
+	acpi_generate_event(device, ACPI_THERMAL_NOTIFY_HOT, tz->trips.hot.flags.enabled);
 
 	/* TBD: Call user-mode "sleep(S4)" function */
 
@@ -1199,12 +1200,12 @@
 	case ACPI_THERMAL_NOTIFY_THRESHOLDS:
 		acpi_thermal_get_trip_points(tz);
 		acpi_thermal_check(tz);
-		acpi_bus_generate_event(device, event, 0);
+		acpi_generate_event(device, event, 0);
 		break;
 	case ACPI_THERMAL_NOTIFY_DEVICES:
 		if (tz->flags.devices)
 			acpi_thermal_get_devices(tz);
-		acpi_bus_generate_event(device, event, 0);
+		acpi_generate_event(device, event, 0);
 		break;
 	default:
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
diff -Nru a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
--- a/include/acpi/acpi_bus.h	2004-08-24 01:16:54 -05:00
+++ b/include/acpi/acpi_bus.h	2004-08-24 01:16:54 -05:00
@@ -293,20 +293,6 @@
 
 #define acpi_driver_data(d)	((d)->driver_data)
 
-
-/*
- * Events
- * ------
- */
-
-struct acpi_bus_event {
-	struct list_head	node;
-	acpi_device_class	device_class;
-	acpi_bus_id		bus_id;
-	u32			type;
-	u32			data;
-};
-
 extern struct subsystem acpi_subsys;
 
 /*
@@ -317,8 +303,6 @@
 int acpi_bus_get_status (struct acpi_device *device);
 int acpi_bus_get_power (acpi_handle handle, int *state);
 int acpi_bus_set_power (acpi_handle handle, int state);
-int acpi_bus_generate_event (struct acpi_device *device, u8 type, int data);
-int acpi_bus_receive_event (struct acpi_bus_event *event);
 int acpi_bus_register_driver (struct acpi_driver *driver);
 int acpi_bus_unregister_driver (struct acpi_driver *driver);
 
diff -Nru a/include/acpi/acpi_event.h b/include/acpi/acpi_event.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/include/acpi/acpi_event.h	2004-08-24 01:16:54 -05:00
@@ -0,0 +1,47 @@
+/*
+ *  acpi_event.h - ACPI events to user space
+ *
+ *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
+ *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or (at
+ *  your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+#ifndef __ACPI_EVENT_H__
+#define __ACPI_EVENT_H__
+
+#include <linux/kobject.h>
+
+#include <acpi/acpi_bus.h>
+
+struct acpi_bus_event {
+	struct list_head	node;
+	acpi_device_class	device_class;
+	acpi_bus_id		bus_id;
+	u32			type;
+	u32			data;
+};
+
+/*
+ * External Functions
+ */
+
+int acpi_generate_event(struct acpi_device *device, u8 type, int data);
+
+#endif /*__ACPI_EVENT_H__*/


-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285

  parent reply	other threads:[~2004-08-24  6:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-24  6:34 [PATCH 1/4] properly create kobjects in acpi/scan.c Dmitry Torokhov
     [not found] ` <200408240134.16962.dtor_core-yWtbtysYrB+LZ21kGMrzwg@public.gmane.org>
2004-08-24  6:36   ` Dmitry Torokhov [this message]
     [not found]     ` <200408240136.46113.dtor_core-yWtbtysYrB+LZ21kGMrzwg@public.gmane.org>
2004-08-24  6:37       ` [PATCH 3/4] use acpi_subsys.rwsem " Dmitry Torokhov
     [not found]         ` <200408240137.55691.dtor_core-yWtbtysYrB+LZ21kGMrzwg@public.gmane.org>
2004-08-24  6:39           ` [PATCH 4/4] allow multiple /proc/acpi/event readers Dmitry Torokhov
2004-08-24 15:23   ` [PATCH 1/4] properly create kobjects in acpi/scan.c Hiroshi Miura
     [not found]     ` <87zn4ky2zr.wl%miura-yiisDzvROlQdnm+yROfE0A@public.gmane.org>
2004-08-24 16:15       ` Mattia Dongili
2004-08-24 17:03       ` Dmitry Torokhov
2004-08-24 19:50   ` Len Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200408240136.46113.dtor_core@ameritech.net \
    --to=dtor_core-ywtbtysyrb+lz21kgmrzwg@public.gmane.org \
    --cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=len.brow-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.