183364Sdfr/*- 283364Sdfr * Copyright (c) 2000 Doug Rabson 383364Sdfr * All rights reserved. 483364Sdfr * 583364Sdfr * Redistribution and use in source and binary forms, with or without 683364Sdfr * modification, are permitted provided that the following conditions 783364Sdfr * are met: 883364Sdfr * 1. Redistributions of source code must retain the above copyright 983364Sdfr * notice, this list of conditions and the following disclaimer. 1083364Sdfr * 2. Redistributions in binary form must reproduce the above copyright 1183364Sdfr * notice, this list of conditions and the following disclaimer in the 1283364Sdfr * documentation and/or other materials provided with the distribution. 1383364Sdfr * 1483364Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1583364Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1683364Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1783364Sdfr * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1883364Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1983364Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2083364Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2183364Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2283364Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2383364Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2483364Sdfr * SUCH DAMAGE. 2583364Sdfr */ 2683364Sdfr 27113038Sobrien#include <sys/cdefs.h> 28113038Sobrien__FBSDID("$FreeBSD$"); 2983364Sdfr 3083364Sdfr#include <stand.h> 3183364Sdfr 3283364Sdfr#include "bootstrap.h" 3383364Sdfr#include "libski.h" 3483364Sdfr 3583364Sdfrstatic void 3683364Sdfrski_cons_probe(struct console *cp) 3783364Sdfr{ 3883364Sdfr cp->c_flags |= C_PRESENTIN | C_PRESENTOUT; 3983364Sdfr} 4083364Sdfr 4183364Sdfrstatic int 4283364Sdfrski_cons_init(int arg) 4383364Sdfr{ 4483364Sdfr ssc(0, 0, 0, 0, SSC_CONSOLE_INIT); 4583364Sdfr return 0; 4683364Sdfr} 4783364Sdfr 4883364Sdfrvoid 4983364Sdfrski_cons_putchar(int c) 5083364Sdfr{ 5183364Sdfr ssc(c, 0, 0, 0, SSC_PUTCHAR); 5283364Sdfr} 5383364Sdfr 5483364Sdfrstatic int pollchar = -1; 5583364Sdfr 5683364Sdfrint 5783364Sdfrski_cons_getchar() 5883364Sdfr{ 5983364Sdfr int c; 6083364Sdfr 6183364Sdfr if (pollchar > 0) { 6283364Sdfr c = pollchar; 6383364Sdfr pollchar = -1; 6483364Sdfr return c; 6583364Sdfr } 6683364Sdfr 6783364Sdfr do { 6883364Sdfr c = ssc(0, 0, 0, 0, SSC_GETCHAR); 6983364Sdfr } while (c == 0); 7083364Sdfr 7183364Sdfr return c; 7283364Sdfr} 7383364Sdfr 7483364Sdfrint 7583364Sdfrski_cons_poll() 7683364Sdfr{ 7783364Sdfr int c; 7883364Sdfr if (pollchar > 0) 7983364Sdfr return 1; 8083364Sdfr c = ssc(0, 0, 0, 0, SSC_GETCHAR); 8183364Sdfr if (!c) 8283364Sdfr return 0; 8383364Sdfr pollchar = c; 8483364Sdfr return 1; 8583364Sdfr} 8683364Sdfr 8783364Sdfrstruct console ski_console = { 8883364Sdfr "ski", 8983364Sdfr "ia64 SKI console", 9083364Sdfr 0, 9183364Sdfr ski_cons_probe, 9283364Sdfr ski_cons_init, 9383364Sdfr ski_cons_putchar, 9483364Sdfr ski_cons_getchar, 9583364Sdfr ski_cons_poll 9683364Sdfr}; 97