2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu/*
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * CDDL HEADER START
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu *
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * The contents of this file are subject to the terms of the
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * Common Development and Distribution License (the "License").
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * You may not use this file except in compliance with the License.
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu *
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * or http://www.opensolaris.org/os/licensing.
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * See the License for the specific language governing permissions
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * and limitations under the License.
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu *
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * When distributing Covered Code, include this CDDL HEADER in each
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * If applicable, add the following below this CDDL HEADER, with the
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * fields enclosed by brackets "[]" replaced with your own identifying
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * information: Portions Copyright [yyyy] [name of copyright owner]
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu *
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * CDDL HEADER END
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu/*
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * Use is subject to license terms.
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#ifndef _HOTKEY_DRV_H
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define _HOTKEY_DRV_H
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#ifdef __cplusplus
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuextern "C" {
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#endif
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/types.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/conf.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/stat.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/note.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/modctl.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/ddi.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/sunddi.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/acpi/acpi.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/acpica.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/sysevent/eventdefs.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#include <sys/acpi_drv.h>
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define ID_LEN 9
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shustruct acpi_drv_dev {
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu ACPI_HANDLE hdl;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu char hid[ID_LEN]; /* ACPI HardwareId */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu char uid[ID_LEN]; /* ACPI UniqueId */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu ACPI_INTEGER adr; /* Bus device Id */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int valid; /* the device state is valid */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu /*
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * Unlike most other devices, when a battery is inserted or
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * removed from the system, the device itself(the battery bay)
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * is still considered to be present in the system.
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu *
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * Value:
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * 0 -- Off-line
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * 1 -- On-line
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * -1 -- Unknown
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int present;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu enum acpi_drv_type type;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int index; /* device index */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int minor;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu};
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu/*
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * hotkey driver soft-state structure
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shutypedef struct hotkey_drv {
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu struct acpi_drv_dev dev;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu dev_info_t *dip;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu void *private; /* Vendor specific structure */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu kmutex_t *hotkey_lock;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int hotkey_method;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int modid;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int (*vendor_ioctl)(struct hotkey_drv *,
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int cmd, intptr_t arg, int mode,
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu cred_t *cr, int *rval);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int (*vendor_fini)(struct hotkey_drv *);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu boolean_t check_acpi_video;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu void *acpi_video;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu} hotkey_drv_t;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu/*
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * Collection of vendor specific hotkey support
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shustruct vendor_hotkey_drv {
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu const char *vid;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu const char *module;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu boolean_t enable;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu};
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_DRV_OK 0
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_DRV_ERR -1
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_DBG_NOTICE 0x8000
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_DBG_WARN 0x0001
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_METHOD_NONE 0x0
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_METHOD_VENDOR 0x1
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_METHOD_ACPI_VIDEO 0x2
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#define HOTKEY_METHOD_MISC (HOTKEY_METHOD_VENDOR | \
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu HOTKEY_METHOD_ACPI_VIDEO)
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu/*
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu * Inter-source-file linkage ...
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu */
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuextern struct hotkey_drv acpi_hotkey;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuextern int hotkey_drv_debug;
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint acpi_drv_set_int(ACPI_HANDLE dev, char *method, uint32_t aint);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuvoid acpi_drv_gen_sysevent(struct acpi_drv_dev *devp, char *ev, uint32_t val);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint acpi_drv_dev_init(struct acpi_drv_dev *p);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint hotkey_init(hotkey_drv_t *htkp);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint hotkey_fini(hotkey_drv_t *htkp);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint acpi_drv_hotkey_ioctl(int cmd, intptr_t arg, int mode, cred_t *cr,
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int *rval);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint acpi_video_ioctl(void *vidp, int cmd, intptr_t arg, int mode, cred_t *cr,
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu int *rval);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint hotkey_brightness_inc(hotkey_drv_t *htkp);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuint hotkey_brightness_dec(hotkey_drv_t *htkp);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shuvoid hotkey_drv_gen_sysevent(dev_info_t *, char *);
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#ifdef __cplusplus
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu}
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#endif
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu
2d6b5ea734bb47d251c82670646fde46af15fd69Guoli Shu#endif /* _HOTKEY_DRV_H */