1*86d7f5d3SJohn Marino /* 2*86d7f5d3SJohn Marino * Copyright (C) 2002-2004 3*86d7f5d3SJohn Marino * Hidetoshi Shimokawa. All rights reserved. 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 6*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 7*86d7f5d3SJohn Marino * are met: 8*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 10*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 11*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 12*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 13*86d7f5d3SJohn Marino * 3. All advertising materials mentioning features or use of this software 14*86d7f5d3SJohn Marino * must display the following acknowledgement: 15*86d7f5d3SJohn Marino * 16*86d7f5d3SJohn Marino * This product includes software developed by Hidetoshi Shimokawa. 17*86d7f5d3SJohn Marino * 18*86d7f5d3SJohn Marino * 4. Neither the name of the author nor the names of its contributors 19*86d7f5d3SJohn Marino * may be used to endorse or promote products derived from this software 20*86d7f5d3SJohn Marino * without specific prior written permission. 21*86d7f5d3SJohn Marino * 22*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23*86d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*86d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*86d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26*86d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27*86d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28*86d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29*86d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30*86d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31*86d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32*86d7f5d3SJohn Marino * SUCH DAMAGE. 33*86d7f5d3SJohn Marino * 34*86d7f5d3SJohn Marino * $Id: dcons.h,v 1.15 2003/10/23 15:05:31 simokawa Exp $ 35*86d7f5d3SJohn Marino * $FreeBSD: src/sys/dev/dcons/dcons.h,v 1.4 2004/10/22 15:03:22 simokawa Exp $ 36*86d7f5d3SJohn Marino * $DragonFly: src/sys/dev/misc/dcons/dcons.h,v 1.2 2004/10/25 13:53:26 simokawa Exp $ 37*86d7f5d3SJohn Marino */ 38*86d7f5d3SJohn Marino 39*86d7f5d3SJohn Marino #if defined(_KERNEL) || defined(_BOOT) 40*86d7f5d3SJohn Marino #define V volatile 41*86d7f5d3SJohn Marino #else 42*86d7f5d3SJohn Marino #define V 43*86d7f5d3SJohn Marino #endif 44*86d7f5d3SJohn Marino 45*86d7f5d3SJohn Marino #define DCONS_NPORT 2 46*86d7f5d3SJohn Marino #define DCONS_CON 0 47*86d7f5d3SJohn Marino #define DCONS_GDB 1 48*86d7f5d3SJohn Marino 49*86d7f5d3SJohn Marino struct dcons_buf { 50*86d7f5d3SJohn Marino #define DCONS_VERSION 2 51*86d7f5d3SJohn Marino V u_int32_t version; 52*86d7f5d3SJohn Marino V u_int32_t ooffset[DCONS_NPORT]; 53*86d7f5d3SJohn Marino V u_int32_t ioffset[DCONS_NPORT]; 54*86d7f5d3SJohn Marino V u_int32_t osize[DCONS_NPORT]; 55*86d7f5d3SJohn Marino V u_int32_t isize[DCONS_NPORT]; 56*86d7f5d3SJohn Marino #define DCONS_MAGIC 0x64636f6e /* "dcon" */ 57*86d7f5d3SJohn Marino V u_int32_t magic; 58*86d7f5d3SJohn Marino #define DCONS_GEN_SHIFT (24) 59*86d7f5d3SJohn Marino #define DCONS_GEN_MASK (0xff) 60*86d7f5d3SJohn Marino #define DCONS_POS_MASK ((1<< DCONS_GEN_SHIFT) - 1) 61*86d7f5d3SJohn Marino V u_int32_t optr[DCONS_NPORT]; 62*86d7f5d3SJohn Marino V u_int32_t iptr[DCONS_NPORT]; 63*86d7f5d3SJohn Marino V char buf[0]; 64*86d7f5d3SJohn Marino }; 65*86d7f5d3SJohn Marino 66*86d7f5d3SJohn Marino #define DCONS_CSR_VAL_VER 0x64636f /* "dco" */ 67*86d7f5d3SJohn Marino #define DCONS_CSR_KEY_HI 0x3a 68*86d7f5d3SJohn Marino #define DCONS_CSR_KEY_LO 0x3b 69*86d7f5d3SJohn Marino 70*86d7f5d3SJohn Marino #define DCONS_HEADER_SIZE sizeof(struct dcons_buf) 71*86d7f5d3SJohn Marino #define DCONS_MAKE_PTR(x) htonl(((x)->gen << DCONS_GEN_SHIFT) | (x)->pos) 72*86d7f5d3SJohn Marino #define DCONS_NEXT_GEN(x) (((x) + 1) & DCONS_GEN_MASK) 73*86d7f5d3SJohn Marino 74*86d7f5d3SJohn Marino struct dcons_ch { 75*86d7f5d3SJohn Marino u_int32_t size; 76*86d7f5d3SJohn Marino u_int32_t gen; 77*86d7f5d3SJohn Marino u_int32_t pos; 78*86d7f5d3SJohn Marino #if defined(_KERNEL) || defined(_BOOT) 79*86d7f5d3SJohn Marino V u_int32_t *ptr; 80*86d7f5d3SJohn Marino V char *buf; 81*86d7f5d3SJohn Marino #else 82*86d7f5d3SJohn Marino off_t buf; 83*86d7f5d3SJohn Marino #endif 84*86d7f5d3SJohn Marino }; 85*86d7f5d3SJohn Marino 86*86d7f5d3SJohn Marino #define KEY_CTRLB 2 /* ^B */ 87*86d7f5d3SJohn Marino #define KEY_CR 13 /* CR '\r' */ 88*86d7f5d3SJohn Marino #define KEY_TILDE 126 /* ~ */ 89*86d7f5d3SJohn Marino #define STATE0 0 90*86d7f5d3SJohn Marino #define STATE1 1 91*86d7f5d3SJohn Marino #define STATE2 2 92*86d7f5d3SJohn Marino 93*86d7f5d3SJohn Marino #if defined(_KERNEL) || defined(_BOOT) 94*86d7f5d3SJohn Marino struct dcons_softc { 95*86d7f5d3SJohn Marino struct dcons_ch o, i; 96*86d7f5d3SJohn Marino int brk_state; 97*86d7f5d3SJohn Marino #define DC_GDB 1 98*86d7f5d3SJohn Marino int flags; 99*86d7f5d3SJohn Marino void *dev; 100*86d7f5d3SJohn Marino }; 101*86d7f5d3SJohn Marino 102*86d7f5d3SJohn Marino int dcons_checkc(struct dcons_softc *); 103*86d7f5d3SJohn Marino int dcons_ischar(struct dcons_softc *); 104*86d7f5d3SJohn Marino void dcons_putc(struct dcons_softc *, int); 105*86d7f5d3SJohn Marino int dcons_load_buffer(struct dcons_buf *, int, struct dcons_softc *); 106*86d7f5d3SJohn Marino void dcons_init(struct dcons_buf *, int, struct dcons_softc *); 107*86d7f5d3SJohn Marino #endif 108