Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / cpus / vonk / ss / dev / serial / src / SS_Serial.h
/*
* ========== Copyright Header Begin ==========================================
*
* OpenSPARC T2 Processor File: SS_Serial.h
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
*
* The above named program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* The above named program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*
* ========== Copyright Header End ============================================
*/
#ifndef __SS_Serial_h__
#define __SS_Serial_h__
#include "SS_AddressMap.h"
class SS_Serial
{
public:
SS_Serial( SS_AddressMap* map, SS_Paddr lo, SS_Paddr hi );
~SS_Serial();
// connect() returns 0 when the serial port opened a socket and
// the term string command connected to the socket. The term string
// can contain a %s which gets replaced by the hostname and %d
// which gets substituted with the port number. A typical term string
// is "xterm -e telnet %s %d &" to launch and xterm with telnet session.
int connect( const char* term );
int file_io( const char* input, const char* output );
protected:
enum AddressMap
{
INPUT = 0x0, /* RO */
OUTPUT = 0x0, /* WO */
INT_ENABLE = 0x1,
INT_IDENT = 0x2, /* RO */
FIFO_CTRL = 0x2, /* WO */
LINE_CTRL = 0x3,
MODEM_CTRL = 0x4,
LINE_STATUS = 0x5,
MODEM_STATUS = 0x6,
SCRATCH = 0x7,
DIV_LO = 0x8,
DIV_HI = 0x9
};
enum LineStatus
{
LINE_DATA_READY = 0x01,
LINE_OVERRUN = 0x02,
LINE_PARTIY_ERR = 0x04,
LINE_FRAMING_ERR = 0x08,
LINE_BREAK = 0x10,
LINE_TX_HOLD = 0x20,
LINE_TX_EMPTY = 0x40,
LINE_RCV_ERR = 0x80
};
static void access( void* obj, uint_t sid, SS_Access::Type, SS_Paddr pa, uint_t size, uint64_t* data );
enum
{
BUFFER_SIZE = 256
};
uint8_t line_status;
uint8_t buffer[BUFFER_SIZE];
int buffer_len;
int buffer_ptr;
int serial_rd;
int serial_wr;
};
#endif