[BACK]Return to gdb_glue.c CVS log [TXT][DIR] Up to [local] / prex-old / sys / arch / i386 / pc

Annotation of prex-old/sys/arch/i386/pc/gdb_glue.c, Revision 1.1

1.1     ! nbrk        1: /*-
        !             2:  * Copyright (c) 2005, Kohsuke Ohtani
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms, with or without
        !             6:  * modification, are permitted provided that the following conditions
        !             7:  * are met:
        !             8:  * 1. Redistributions of source code must retain the above copyright
        !             9:  *    notice, this list of conditions and the following disclaimer.
        !            10:  * 2. Redistributions in binary form must reproduce the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer in the
        !            12:  *    documentation and/or other materials provided with the distribution.
        !            13:  * 3. Neither the name of the author nor the names of any co-contributors
        !            14:  *    may be used to endorse or promote products derived from this software
        !            15:  *    without specific prior written permission.
        !            16:  *
        !            17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            27:  * SUCH DAMAGE.
        !            28:  */
        !            29:
        !            30: /*
        !            31:  * gdb_blue.c - serial data transter routine for gdb stub
        !            32:  */
        !            33:
        !            34: #include <kernel.h>
        !            35: #include <cpu.h>
        !            36:
        !            37: #ifdef CONFIG_GDB
        !            38:
        !            39: /* Serial port registers */
        !            40: #define COM_PORT  0x3F8
        !            41: #define RBR    0               /* 3F8 Receive buffer register. */
        !            42: #define THR    0               /* 3F8 Transmit holding register. */
        !            43: #define IER    1               /* 3F9 Interrupt enable register. */
        !            44: #define FCR    2               /* 3FA FIFO control register. */
        !            45: #define IIR    2               /* 3FA Interrupt identification register. */
        !            46: #define LCR    3               /* 3FB Line control register. */
        !            47: #define MCR    4               /* 3FC Modem control register. */
        !            48: #define LSR    5               /* 3FD Line status register. */
        !            49: #define MSR    6               /* 3FE Modem status register. */
        !            50:
        !            51: #define DLL    0               /* 3F8 Divisor latch LSB (LCR[7] = 1). */
        !            52: #define DLM    1               /* 3F9 Divisor latch MSB (LCR[7] = 1). */
        !            53:
        !            54: int
        !            55: serial_getchar(void)
        !            56: {
        !            57:
        !            58:        while (!(inb(COM_PORT + LSR) & 0x01));
        !            59:        return inb(COM_PORT + RBR);
        !            60: }
        !            61:
        !            62: void
        !            63: serial_putchar(int ch)
        !            64: {
        !            65:
        !            66:        while (!(inb(COM_PORT + LSR) & 0x20));
        !            67:        outb((char)ch, COM_PORT + THR);
        !            68: }
        !            69:
        !            70: int
        !            71: serial_init(void)
        !            72: {
        !            73:
        !            74:        if (inb(COM_PORT + LSR) == 0xFF)
        !            75:                return -1;      /* Serial port is disabled */
        !            76:
        !            77:        outb(0x00, COM_PORT + IER);     /* Disable all interrupt */
        !            78:        outb(0x80, COM_PORT + LCR);     /* Access baud rate */
        !            79:        outb(0x01, COM_PORT + DLL);     /* Baud rate = 115200 */
        !            80:        outb(0x00, COM_PORT + DLM);
        !            81:        outb(0x03, COM_PORT + LCR);     /* N, 8, 1 */
        !            82:        outb(0x03, COM_PORT + MCR);     /* Ready */
        !            83:        outb(0x00, COM_PORT + FCR);     /* Disable FIFO */
        !            84:        inb(COM_PORT);
        !            85:        inb(COM_PORT);
        !            86:        return 0;
        !            87: }
        !            88:
        !            89: #endif /* CONFIG_GDB */

CVSweb