gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
terminal.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2001-2005 The Regents of The University of Michigan
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 are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * Authors: Nathan Binkert
29  * Ali Saidi
30  */
31 
32 /* @file
33  * User Terminal Interface
34  */
35 
36 #ifndef __DEV_TERMINAL_HH__
37 #define __DEV_TERMINAL_HH__
38 
39 #include <iostream>
40 
41 #include "base/callback.hh"
42 #include "base/circlebuf.hh"
43 #include "base/pollevent.hh"
44 #include "base/socket.hh"
45 #include "cpu/intr_control.hh"
46 #include "params/Terminal.hh"
47 #include "sim/sim_object.hh"
48 
49 class OutputStream;
50 class TerminalListener;
51 
52 class Terminal : public SimObject
53 {
54  public:
65 
66  protected:
69 
70  protected:
71  class ListenEvent : public PollEvent
72  {
73  protected:
75 
76  public:
77  ListenEvent(Terminal *t, int fd, int e);
78  void process(int revent);
79  };
80 
81  friend class ListenEvent;
83 
84  class DataEvent : public PollEvent
85  {
86  protected:
88 
89  public:
90  DataEvent(Terminal *t, int fd, int e);
91  void process(int revent);
92  };
93 
94  friend class DataEvent;
96 
97  protected:
98  int number;
99  int data_fd;
100 
101  public:
102  typedef TerminalParams Params;
103  Terminal(const Params *p);
104  ~Terminal();
105 
106  protected:
108 
109  void listen(int port);
110  void accept();
111 
112  protected:
116 #if TRACING_ON == 1
117  CircleBuf<char> linebuf;
118 #endif
119 
120  public:
122  // Terminal Interface
123 
124  void data();
125 
126  void read(uint8_t &c) { read(&c, 1); }
127  size_t read(uint8_t *buf, size_t len);
128  void write(uint8_t c) { write(&c, 1); }
129  size_t write(const uint8_t *buf, size_t len);
130  void detach();
131 
132  public:
134  // OS interface
135 
136  // Get a character from the terminal.
137  uint8_t in();
138 
139  // get a character from the terminal in the console specific format
140  // corresponds to GETC:
141  // retval<63:61>
142  // 000: success: character received
143  // 001: success: character received, more pending
144  // 100: failure: no character ready
145  // 110: failure: character received with error
146  // 111: failure: character received with error, more pending
147  // retval<31:0>
148  // character read from console
149  //
150  // Interrupts are cleared when the buffer is empty.
151  uint64_t console_in();
152 
153  // Send a character to the terminal
154  void out(char c);
155 
156  // Ask the terminal if data is available
157  bool dataAvailable() { return !rxbuf.empty(); }
158 };
159 
160 #endif // __DEV_TERMINAL_HH__
~Terminal()
Definition: terminal.cc:124
Terminal * term
Definition: terminal.hh:87
Generic callback class.
Definition: callback.hh:41
int number
Definition: terminal.hh:98
void accept()
Definition: terminal.cc:177
void regDataAvailCallback(Callback *c)
Register a data available callback into the transport layer.
Definition: terminal.cc:137
void listen(int port)
Definition: terminal.cc:152
bool empty() const
Is the buffer empty?
Definition: circlebuf.hh:78
ListenSocket listener
Definition: terminal.hh:107
DataEvent * dataEvent
Definition: terminal.hh:95
void process(int revent)
Definition: terminal.cc:93
int data_fd
Definition: terminal.hh:99
void read(uint8_t &c)
Definition: terminal.hh:126
void data()
Definition: terminal.cc:228
void detach()
Definition: terminal.cc:213
uint8_t in()
Definition: terminal.cc:285
Callback * termDataAvail
Currently registered transport layer callbacks.
Definition: terminal.hh:68
void out(char c)
Definition: terminal.cc:317
void write(uint8_t c)
Definition: terminal.hh:128
bool dataAvailable()
Definition: terminal.hh:157
Bitfield< 9 > e
Definition: miscregs.hh:1376
ListenEvent * listenEvent
Definition: terminal.hh:82
Bitfield< 29 > c
Definition: miscregs.hh:1365
ListenEvent(Terminal *t, int fd, int e)
Definition: terminal.cc:73
OutputStream * outfile
Definition: terminal.hh:115
Bitfield< 18, 16 > len
Definition: miscregs.hh:1626
CircleBuf< char > txbuf
Definition: terminal.hh:113
CircleBuf< char > rxbuf
Definition: terminal.hh:114
TerminalParams Params
Definition: terminal.hh:102
Bitfield< 5 > t
Definition: miscregs.hh:1382
uint64_t console_in()
Definition: terminal.cc:299
Bitfield< 14, 12 > fd
Definition: types.hh:155
Bitfield< 0 > p
Abstract superclass for simulation objects.
Definition: sim_object.hh:94
Terminal(const Params *p)
Definition: terminal.cc:109
DataEvent(Terminal *t, int fd, int e)
Definition: terminal.cc:87
void process(int revent)
Definition: terminal.cc:79

Generated on Fri Jun 9 2017 13:03:47 for gem5 by doxygen 1.8.6