acpiconf.c revision 65283
165283Siwasaki/*- 265283Siwasaki * Copyright (c) 1999 Mitsuru IWASAKI <iwasaki@FreeBSD.org> 365283Siwasaki * All rights reserved. 465283Siwasaki * 565283Siwasaki * Redistribution and use in source and binary forms, with or without 665283Siwasaki * modification, are permitted provided that the following conditions 765283Siwasaki * are met: 865283Siwasaki * 1. Redistributions of source code must retain the above copyright 965283Siwasaki * notice, this list of conditions and the following disclaimer. 1065283Siwasaki * 2. Redistributions in binary form must reproduce the above copyright 1165283Siwasaki * notice, this list of conditions and the following disclaimer in the 1265283Siwasaki * documentation and/or other materials provided with the distribution. 1365283Siwasaki * 1465283Siwasaki * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1565283Siwasaki * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1665283Siwasaki * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1765283Siwasaki * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1865283Siwasaki * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1965283Siwasaki * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2065283Siwasaki * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2165283Siwasaki * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2265283Siwasaki * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2365283Siwasaki * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2465283Siwasaki * SUCH DAMAGE. 2565283Siwasaki * 2665283Siwasaki * $Id: acpiconf.c,v 1.5 2000/08/08 14:12:19 iwasaki Exp $ 2765283Siwasaki * $FreeBSD: cvs2svn/branches/ACPI4FREEBSD/usr.sbin/acpi/acpiconf/acpiconf.c 65283 2000-08-31 14:41:23Z iwasaki $ 2865283Siwasaki */ 2965283Siwasaki 3065283Siwasaki#include <sys/param.h> 3165283Siwasaki#include <sys/acpi.h> 3265283Siwasaki 3365283Siwasaki#include <err.h> 3465283Siwasaki#include <fcntl.h> 3565283Siwasaki#include <stdio.h> 3665283Siwasaki#include <unistd.h> 3765283Siwasaki 3865283Siwasaki#define ACPIDEV "/dev/acpi" 3965283Siwasaki 4065283Siwasakistatic int 4165283Siwasakiacpi_enable_disable(int enable) 4265283Siwasaki{ 4365283Siwasaki int fd; 4465283Siwasaki 4565283Siwasaki fd = open(ACPIDEV, O_RDWR); 4665283Siwasaki if (fd == -1) { 4765283Siwasaki err(1, NULL); 4865283Siwasaki } 4965283Siwasaki if (ioctl(fd, enable, NULL) == -1) { 5065283Siwasaki err(1, NULL); 5165283Siwasaki } 5265283Siwasaki close(fd); 5365283Siwasaki 5465283Siwasaki return (0); 5565283Siwasaki} 5665283Siwasaki 5765283Siwasakistatic int 5865283Siwasakiacpi_sleep(int sleep_type) 5965283Siwasaki{ 6065283Siwasaki int fd; 6165283Siwasaki 6265283Siwasaki fd = open(ACPIDEV, O_RDWR); 6365283Siwasaki if (fd == -1) { 6465283Siwasaki err(1, NULL); 6565283Siwasaki } 6665283Siwasaki if (ioctl(fd, ACPIIO_SETSLPSTATE, &sleep_type) == -1) { 6765283Siwasaki err(1, NULL); 6865283Siwasaki } 6965283Siwasaki close(fd); 7065283Siwasaki 7165283Siwasaki return (0); 7265283Siwasaki} 7365283Siwasaki 7465283Siwasakiint 7565283Siwasakimain(int argc, char *argv[]) 7665283Siwasaki{ 7765283Siwasaki char c; 7865283Siwasaki int sleep_type; 7965283Siwasaki 8065283Siwasaki sleep_type = -1; 8165283Siwasaki while ((c = getopt(argc, argv, "eds:")) != -1) { 8265283Siwasaki switch (c) { 8365283Siwasaki case 'e': 8465283Siwasaki acpi_enable_disable(ACPIIO_ENABLE); 8565283Siwasaki break; 8665283Siwasaki 8765283Siwasaki case 'd': 8865283Siwasaki acpi_enable_disable(ACPIIO_DISABLE); 8965283Siwasaki break; 9065283Siwasaki 9165283Siwasaki case 's': 9265283Siwasaki sleep_type = *optarg - '0'; 9365283Siwasaki if (sleep_type < ACPI_S_STATE_S0 || sleep_type > ACPI_S_STATE_S5) { 9465283Siwasaki fprintf(stderr, "%s: invalid sleep type (%d)\n", 9565283Siwasaki argv[0], sleep_type); 9665283Siwasaki return -1; 9765283Siwasaki } 9865283Siwasaki break; 9965283Siwasaki default: 10065283Siwasaki argc -= optind; 10165283Siwasaki argv += optind; 10265283Siwasaki } 10365283Siwasaki } 10465283Siwasaki 10565283Siwasaki if (sleep_type != -1) { 10665283Siwasaki sleep(1); /* wait 1 sec. for key-release event */ 10765283Siwasaki acpi_sleep(sleep_type); 10865283Siwasaki } 10965283Siwasaki return (0); 11065283Siwasaki} 111