green_saver.c revision 40885
133965Sjdp/*- 2130561Sobrien * Copyright (c) 1995-1998 S�ren Schmidt 333965Sjdp * All rights reserved. 433965Sjdp * 533965Sjdp * Redistribution and use in source and binary forms, with or without 633965Sjdp * modification, are permitted provided that the following conditions 733965Sjdp * are met: 833965Sjdp * 1. Redistributions of source code must retain the above copyright 933965Sjdp * notice, this list of conditions and the following disclaimer, 1033965Sjdp * without modification, immediately at the beginning of the file. 1133965Sjdp * 2. Redistributions in binary form must reproduce the above copyright 1233965Sjdp * notice, this list of conditions and the following disclaimer in the 1333965Sjdp * documentation and/or other materials provided with the distribution. 1433965Sjdp * 3. The name of the author may not be used to endorse or promote products 1533965Sjdp * derived from this software without specific prior written permission. 1633965Sjdp * 1733965Sjdp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1833965Sjdp * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19218822Sdim * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20218822Sdim * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2133965Sjdp * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2233965Sjdp * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2333965Sjdp * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2433965Sjdp * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2533965Sjdp * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2633965Sjdp * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2733965Sjdp * 28130561Sobrien * $Id: green_saver.c,v 1.13 1998/09/17 19:40:30 sos Exp $ 2933965Sjdp */ 3033965Sjdp 3133965Sjdp#include <sys/param.h> 3233965Sjdp#include <sys/systm.h> 3333965Sjdp#include <sys/kernel.h> 3433965Sjdp#include <sys/module.h> 3533965Sjdp 3633965Sjdp#include <i386/isa/isa.h> 3733965Sjdp 3833965Sjdp#include <saver.h> 3933965Sjdp 4033965Sjdpstatic void 4133965Sjdpgreen_saver(int blank) 4233965Sjdp{ 4333965Sjdp u_char val; 4433965Sjdp if (blank) { 4533965Sjdp scrn_blanked = 1; 4633965Sjdp cur_console->status |= SAVER_RUNNING; 4733965Sjdp switch (crtc_type) { 4833965Sjdp case KD_VGA: 4933965Sjdp outb(TSIDX, 0x01); val = inb(TSREG); 5033965Sjdp outb(TSIDX, 0x01); outb(TSREG, val | 0x20); 5133965Sjdp outb(crtc_addr, 0x17); val = inb(crtc_addr + 1); 5233965Sjdp outb(crtc_addr + 1, val & ~0x80); 5333965Sjdp break; 5433965Sjdp case KD_EGA: 5533965Sjdp /* not yet done XXX */ 5633965Sjdp break; 5733965Sjdp case KD_CGA: 5833965Sjdp outb(crtc_addr + 4, 0x25); 5933965Sjdp break; 6033965Sjdp case KD_MONO: 6133965Sjdp case KD_HERCULES: 6233965Sjdp outb(crtc_addr + 4, 0x21); 6333965Sjdp break; 6433965Sjdp default: 6533965Sjdp break; 6633965Sjdp } 6733965Sjdp } 6833965Sjdp else { 6933965Sjdp switch (crtc_type) { 7033965Sjdp case KD_VGA: 7133965Sjdp outb(TSIDX, 0x01); val = inb(TSREG); 7233965Sjdp outb(TSIDX, 0x01); outb(TSREG, val & 0xDF); 7333965Sjdp outb(crtc_addr, 0x17); val = inb(crtc_addr + 1); 7433965Sjdp outb(crtc_addr + 1, val | 0x80); 7533965Sjdp break; 7633965Sjdp case KD_EGA: 7733965Sjdp /* not yet done XXX */ 7833965Sjdp break; 7933965Sjdp case KD_CGA: 8033965Sjdp outb(crtc_addr + 4, 0x2d); 8133965Sjdp break; 8233965Sjdp case KD_MONO: 8333965Sjdp case KD_HERCULES: 8433965Sjdp outb(crtc_addr + 4, 0x29); 8533965Sjdp break; 8633965Sjdp default: 8733965Sjdp break; 8833965Sjdp } 8933965Sjdp cur_console->status &= ~SAVER_RUNNING; 9033965Sjdp scrn_blanked = 0; 9133965Sjdp } 9233965Sjdp} 9333965Sjdp 9433965Sjdpstatic int 9533965Sjdpgreen_saver_load(void) 9633965Sjdp{ 9733965Sjdp switch (crtc_type) { 9833965Sjdp case KD_MONO: 9933965Sjdp case KD_HERCULES: 10033965Sjdp case KD_CGA: 10133965Sjdp /* 10233965Sjdp * `green' saver is not fully implemented for MDA and CGA. 10333965Sjdp * It simply blanks the display instead. 10433965Sjdp */ 10533965Sjdp case KD_VGA: 10633965Sjdp break; 10733965Sjdp case KD_EGA: 10833965Sjdp /* EGA is yet to be supported */ 10933965Sjdp default: 11033965Sjdp return ENODEV; 11133965Sjdp } 11233965Sjdp return add_scrn_saver(green_saver); 11333965Sjdp} 11433965Sjdp 11533965Sjdpstatic int 11633965Sjdpgreen_saver_unload(void) 11733965Sjdp{ 11833965Sjdp return remove_scrn_saver(green_saver); 11933965Sjdp} 12033965Sjdp 12133965SjdpSAVER_MODULE(green_saver); 12233965Sjdp