Linux Audio

Check our new training course

Loading...
#ifndef __LINUX_PM_H
#define __LINUX_PM_H


typedef int pm_request_t;

struct pm_dev {
	void *data;
	struct pm_dev *next;
	int (*event)(struct pm_dev *, pm_request_t, void *);
};

#define PM_SUSPEND	1
#define PM_RESUME	2

#ifdef CONFIG_APM

#include <linux/apm_bios.h>

#define PM_PCI_DEV	0
#define PM_PCI_ID(a)	a

static struct pm_dev *pm_dev = NULL;

static int handle_apm_event(apm_event_t apm_event)
{
	struct pm_dev *list = pm_dev;
	pm_request_t action;

	switch (apm_event) {

		case APM_SYS_SUSPEND:
		case APM_CRITICAL_SUSPEND:
		case APM_USER_SUSPEND:
			action = PM_SUSPEND;
			break;
		case APM_NORMAL_RESUME:
		case APM_CRITICAL_RESUME:
		case APM_STANDBY_RESUME:
			action = PM_RESUME;
			break;
		default:
			return 0;
	}

	while (list) {
		list->event(list, action, list->data);
		list = list->next;
	}

	return 0;
}

static struct pm_dev *pm_register(int a, void *b, int (*event)(struct pm_dev *, pm_request_t, void *))
{
	struct pm_dev *list;
	
	list = kmalloc(sizeof(struct pm_dev), GFP_KERNEL);
	list->event = event;
	list->next = pm_dev;
	pm_dev = list;

	apm_register_callback(handle_apm_event);

	return list;
}

static void pm_unregister_all(int (*event)(struct pm_dev *, pm_request_t, void *))
{
	struct pm_dev *list;

	while (pm_dev) {
		list = pm_dev;
		pm_dev = pm_dev->next;
		kfree(list);
	}

	apm_unregister_callback(handle_apm_event);
}

#else

#define pm_register(a,b,c)	0
#define pm_unregister_all(a)	do {} while (0)

#endif

#endif
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy