acpiconf.c revision 87121
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 87121 2001-11-30 11:35:01Z cjc $ 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> 3687121Scjc#include <sysexits.h> 3765283Siwasaki#include <unistd.h> 3865283Siwasaki 3968475Siwasaki#include <dev/acpica/acpiio.h> 4066490Smsmith 4177449Smsmith#include <contrib/dev/acpica/acgcc.h> 4277633Sobrien#include <contrib/dev/acpica/actypes.h> 4368475Siwasaki 4465283Siwasaki#define ACPIDEV "/dev/acpi" 4565283Siwasaki 4665283Siwasakistatic int 4765283Siwasakiacpi_enable_disable(int enable) 4865283Siwasaki{ 4965283Siwasaki int fd; 5065283Siwasaki 5165283Siwasaki fd = open(ACPIDEV, O_RDWR); 5265283Siwasaki if (fd == -1) { 5387121Scjc err(EX_OSFILE, ACPIDEV); 5465283Siwasaki } 5565283Siwasaki if (ioctl(fd, enable, NULL) == -1) { 5687121Scjc if (enable == ACPIIO_ENABLE) 5787121Scjc err(EX_IOERR, "enable failed"); 5887121Scjc else 5987121Scjc err(EX_IOERR, "disable failed"); 6065283Siwasaki } 6165283Siwasaki close(fd); 6265283Siwasaki 6365283Siwasaki return (0); 6465283Siwasaki} 6565283Siwasaki 6665283Siwasakistatic int 6765283Siwasakiacpi_sleep(int sleep_type) 6865283Siwasaki{ 6965283Siwasaki int fd; 7065283Siwasaki 7165283Siwasaki fd = open(ACPIDEV, O_RDWR); 7265283Siwasaki if (fd == -1) { 7387121Scjc err(EX_OSFILE, ACPIDEV); 7465283Siwasaki } 7565283Siwasaki if (ioctl(fd, ACPIIO_SETSLPSTATE, &sleep_type) == -1) { 7687121Scjc err(EX_IOERR, "sleep type (%d) failed", sleep_type); 7765283Siwasaki } 7865283Siwasaki close(fd); 7965283Siwasaki 8065283Siwasaki return (0); 8165283Siwasaki} 8265283Siwasaki 8368475Siwasakistatic void 8468475Siwasakiusage(const char* prog) 8568475Siwasaki{ 8668475Siwasaki printf("usage: %s [-deh] [-s [1|2|3|4|4b|5]]\n", prog); 8768475Siwasaki exit(0); 8868475Siwasaki} 8968475Siwasaki 9065283Siwasakiint 9165283Siwasakimain(int argc, char *argv[]) 9265283Siwasaki{ 9368475Siwasaki char c, *prog; 9465283Siwasaki int sleep_type; 9565283Siwasaki 9668475Siwasaki prog = argv[0]; 9765283Siwasaki sleep_type = -1; 9868475Siwasaki while ((c = getopt(argc, argv, "dehs:")) != -1) { 9965283Siwasaki switch (c) { 10068475Siwasaki case 'd': 10168475Siwasaki acpi_enable_disable(ACPIIO_DISABLE); 10268475Siwasaki break; 10368475Siwasaki 10465283Siwasaki case 'e': 10565283Siwasaki acpi_enable_disable(ACPIIO_ENABLE); 10665283Siwasaki break; 10765283Siwasaki 10868475Siwasaki case 'h': 10968475Siwasaki usage(prog); 11065283Siwasaki break; 11165283Siwasaki 11265283Siwasaki case 's': 11368475Siwasaki sleep_type = optarg[0] - '0'; 11487121Scjc if (sleep_type < 0 || sleep_type > 5) 11587121Scjc errx(EX_USAGE, "invalid sleep type (%d)", 11687121Scjc sleep_type); 11765283Siwasaki break; 11865283Siwasaki default: 11965283Siwasaki argc -= optind; 12065283Siwasaki argv += optind; 12165283Siwasaki } 12265283Siwasaki } 12365283Siwasaki 12465283Siwasaki if (sleep_type != -1) { 12565283Siwasaki sleep(1); /* wait 1 sec. for key-release event */ 12665283Siwasaki acpi_sleep(sleep_type); 12765283Siwasaki } 12865283Siwasaki return (0); 12965283Siwasaki} 130