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