kmi.hh (12086:069c529a76fd) kmi.hh (12659:3b44e9f66aac)
1/*
1/*
2 * Copyright (c) 2010, 2017 ARM Limited
2 * Copyright (c) 2010, 2017-2018 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 38 unchanged lines hidden (view full) ---

49#define __DEV_ARM_PL050_HH__
50
51#include <list>
52
53#include "base/vnc/vncinput.hh"
54#include "dev/arm/amba_device.hh"
55#include "params/Pl050.hh"
56
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 38 unchanged lines hidden (view full) ---

49#define __DEV_ARM_PL050_HH__
50
51#include <list>
52
53#include "base/vnc/vncinput.hh"
54#include "dev/arm/amba_device.hh"
55#include "params/Pl050.hh"
56
57class Pl050 : public AmbaIntDevice, public VncKeyboard, public VncMouse
57class PS2Device;
58
59class Pl050 : public AmbaIntDevice
58{
59 protected:
60 static const int kmiCr = 0x000;
61 static const int kmiStat = 0x004;
62 static const int kmiData = 0x008;
63 static const int kmiClkDiv = 0x00C;
64 static const int kmiISR = 0x010;
65

--- 33 unchanged lines hidden (view full) ---

99 BitUnion8(InterruptReg)
100 Bitfield<0> rx;
101 Bitfield<1> tx;
102 EndBitUnion(InterruptReg)
103
104 /** raw interrupt register (unmasked) */
105 InterruptReg rawInterrupts;
106
60{
61 protected:
62 static const int kmiCr = 0x000;
63 static const int kmiStat = 0x004;
64 static const int kmiData = 0x008;
65 static const int kmiClkDiv = 0x00C;
66 static const int kmiISR = 0x010;
67

--- 33 unchanged lines hidden (view full) ---

101 BitUnion8(InterruptReg)
102 Bitfield<0> rx;
103 Bitfield<1> tx;
104 EndBitUnion(InterruptReg)
105
106 /** raw interrupt register (unmasked) */
107 InterruptReg rawInterrupts;
108
107 /** If the controller should ignore the next data byte and acknowledge it.
108 * The driver is attempting to setup some feature we don't care about
109 */
110 int ackNext;
111
112 /** is the shift key currently down */
113 bool shiftDown;
114
115 /** The vnc server we're connected to (if any) */
116 VncInput *vnc;
117
118 /** If the linux driver has initialized the device yet and thus can we send
119 * mouse data */
120 bool driverInitialized;
121
122 /** Update the status of the interrupt registers and schedule an interrupt
123 * if required */
124 void updateIntStatus();
125
126 /** Function to generate interrupt */
127 void generateInterrupt();
128
129 /** Get interrupt value */
109 /** Update the status of the interrupt registers and schedule an interrupt
110 * if required */
111 void updateIntStatus();
112
113 /** Function to generate interrupt */
114 void generateInterrupt();
115
116 /** Get interrupt value */
130 InterruptReg getInterrupt() const {
131 InterruptReg tmp_interrupt(0);
132 tmp_interrupt.tx = rawInterrupts.tx & control.txint_enable;
133 tmp_interrupt.rx = rawInterrupts.rx & control.rxint_enable;
134 return tmp_interrupt;
135 }
117 InterruptReg getInterrupt() const;
118
136 /** Wrapper to create an event out of the thing */
137 EventFunctionWrapper intEvent;
138
119 /** Wrapper to create an event out of the thing */
120 EventFunctionWrapper intEvent;
121
139 /** Receive queue. This list contains all the pending commands that
140 * need to be sent to the driver
141 */
142 std::list<uint8_t> rxQueue;
122 /** PS2 device connected to this KMI interface */
123 PS2Device *ps2;
143
124
144 /** Handle a command sent to the kmi and respond appropriately
145 */
146 void processCommand(uint8_t byte);
147
148 public:
125 public:
149 typedef Pl050Params Params;
150 const Params *
151 params() const
152 {
153 return dynamic_cast<const Params *>(_params);
154 }
126 Pl050(const Pl050Params *p);
155
127
156 Pl050(const Params *p);
157
158 Tick read(PacketPtr pkt) override;
159 Tick write(PacketPtr pkt) override;
160
128 Tick read(PacketPtr pkt) override;
129 Tick write(PacketPtr pkt) override;
130
161 void mouseAt(uint16_t x, uint16_t y, uint8_t buttons) override;
162 void keyPress(uint32_t key, bool down) override;
163
164 void serialize(CheckpointOut &cp) const override;
165 void unserialize(CheckpointIn &cp) override;
166};
167
168#endif // __DEV_ARM_PL050_HH__
131 void serialize(CheckpointOut &cp) const override;
132 void unserialize(CheckpointIn &cp) override;
133};
134
135#endif // __DEV_ARM_PL050_HH__