acpiconf.c revision 66490
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: head/usr.sbin/acpi/acpiconf/acpiconf.c 66490 2000-09-30 20:13:57Z msmith $ 2865283Siwasaki */ 2965283Siwasaki 3065283Siwasaki#include <sys/param.h> 3165283Siwasaki 3265283Siwasaki#include <err.h> 3365283Siwasaki#include <fcntl.h> 3465283Siwasaki#include <stdio.h> 3566490Smsmith#include <sys/ioctl.h> 3665283Siwasaki#include <unistd.h> 3765283Siwasaki 3866490Smsmith#include <dev/acpi/acpiio.h> 3966490Smsmith#include <dev/acpi/acpireg.h> 4066490Smsmith 4165283Siwasaki#define ACPIDEV "/dev/acpi" 4265283Siwasaki 4365283Siwasakistatic int 4465283Siwasakiacpi_enable_disable(int enable) 4565283Siwasaki{ 4665283Siwasaki int fd; 4765283Siwasaki 4865283Siwasaki fd = open(ACPIDEV, O_RDWR); 4965283Siwasaki if (fd == -1) { 5065283Siwasaki err(1, NULL); 5165283Siwasaki } 5265283Siwasaki if (ioctl(fd, enable, NULL) == -1) { 5365283Siwasaki err(1, NULL); 5465283Siwasaki } 5565283Siwasaki close(fd); 5665283Siwasaki 5765283Siwasaki return (0); 5865283Siwasaki} 5965283Siwasaki 6065283Siwasakistatic int 6165283Siwasakiacpi_sleep(int sleep_type) 6265283Siwasaki{ 6365283Siwasaki int fd; 6465283Siwasaki 6565283Siwasaki fd = open(ACPIDEV, O_RDWR); 6665283Siwasaki if (fd == -1) { 6765283Siwasaki err(1, NULL); 6865283Siwasaki } 6965283Siwasaki if (ioctl(fd, ACPIIO_SETSLPSTATE, &sleep_type) == -1) { 7065283Siwasaki err(1, NULL); 7165283Siwasaki } 7265283Siwasaki close(fd); 7365283Siwasaki 7465283Siwasaki return (0); 7565283Siwasaki} 7665283Siwasaki 7765283Siwasakiint 7865283Siwasakimain(int argc, char *argv[]) 7965283Siwasaki{ 8065283Siwasaki char c; 8165283Siwasaki int sleep_type; 8265283Siwasaki 8365283Siwasaki sleep_type = -1; 8465283Siwasaki while ((c = getopt(argc, argv, "eds:")) != -1) { 8565283Siwasaki switch (c) { 8665283Siwasaki case 'e': 8765283Siwasaki acpi_enable_disable(ACPIIO_ENABLE); 8865283Siwasaki break; 8965283Siwasaki 9065283Siwasaki case 'd': 9165283Siwasaki acpi_enable_disable(ACPIIO_DISABLE); 9265283Siwasaki break; 9365283Siwasaki 9465283Siwasaki case 's': 9565283Siwasaki sleep_type = *optarg - '0'; 9665283Siwasaki if (sleep_type < ACPI_S_STATE_S0 || sleep_type > ACPI_S_STATE_S5) { 9765283Siwasaki fprintf(stderr, "%s: invalid sleep type (%d)\n", 9865283Siwasaki argv[0], sleep_type); 9965283Siwasaki return -1; 10065283Siwasaki } 10165283Siwasaki break; 10265283Siwasaki default: 10365283Siwasaki argc -= optind; 10465283Siwasaki argv += optind; 10565283Siwasaki } 10665283Siwasaki } 10765283Siwasaki 10865283Siwasaki if (sleep_type != -1) { 10965283Siwasaki sleep(1); /* wait 1 sec. for key-release event */ 11065283Siwasaki acpi_sleep(sleep_type); 11165283Siwasaki } 11265283Siwasaki return (0); 11365283Siwasaki} 114