41#include "debug/Checkpoint.hh"
60 i2cAddr(0x00), message(0x00)
64 for (
auto d :
p.devices) {
110 d.second->i2cStart();
167 panic(
"Invalid state on posedge of clock in I2CBus::write.\n");
178 uint8_t msg = pkt->
getRaw<uint8_t>();
183 scl = (msg & 1) ? 1 :
scl;
184 sda = (msg & 2) ? 1 :
sda;
187 scl = (msg & 1) ? 0 :
scl;
188 sda = (msg & 2) ? 0 :
sda;
198 uint8_t msg = pkt->
getRaw<uint8_t>();
206 uint8_t msg = pkt->
getRaw<uint8_t>();
214 uint8_t msg = pkt->
getRaw<uint8_t>();
221 DPRINTF(Checkpoint,
"Serializing I2C bus.\n");
233 DPRINTF(Checkpoint,
"Unserializing I2C bus.\n");
Implementiation of an i2c bus.
Addr pioAddr
Address that the device listens to.
Tick pioDelay
Delay that the device experinces on an access.
int currBit
Order of the bit of the current message that is being sent or received (0 - 7).
bool isClockSet(PacketPtr pkt) const
Clock set check.
std::map< uint8_t, I2CDevice * > devices
All the slave i2c devices that are connected to this bus.
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Tick write(PacketPtr pkt) override
The default i2c bus driver used by the realview pbx board writes to this device one bit at a time.
I2CBus(const I2CBusParams &p)
4KB - see e.g.
uint8_t sda
I2C data wire (0, 1)
uint8_t i2cAddr
Key used to access a device in the slave devices map.
void updateSignals(PacketPtr pkt)
Update data (sda) and clock (scl) to match any transitions specified by pkt.
bool isStart(PacketPtr pkt) const
i2c start signal check
bool isEnd(PacketPtr pkt) const
i2c end signal check
void serialize(CheckpointOut &cp) const override
Serialize an object.
Tick read(PacketPtr pkt) override
Reads will always be to SB_CONTROLS.
static const int SB_CONTROLC
Clear control bits.
static const int SB_CONTROLS
Read [and Set] serial control bits: Bit [0] is SCL Bit [1] is SDA.
enum I2CState state
State used by I2CBus::write to determine what stage of an i2c transmission it is currently in.
uint8_t message
8-bit buffer used to send and receive messages bit by bit.
uint8_t scl
I2C clock wire (0, 1).
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
void setRaw(T v)
Set the value in the data pointer to v without byte swapping.
T getRaw() const
Get the data in the packet without byte swapping.
void makeAtomicResponse()
All i2c devices should derive from this class.
#define panic(...)
This implements a cprintf based panic() function.
#define SERIALIZE_ENUM(scalar)
#define UNSERIALIZE_ENUM(scalar)
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
std::ostream CheckpointOut
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t Tick
Tick count type.
#define UNSERIALIZE_SCALAR(scalar)
#define SERIALIZE_SCALAR(scalar)