quic/qbox
Loading...
Searching...
No Matches
systemc-components
common
include
backends
legacy-char-backend.h
1
/*
2
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
3
*
4
* SPDX-License-Identifier: BSD-3-Clause
5
*/
6
7
#include <systemc>
8
#include <cci_configuration>
9
#include <scp/report.h>
10
#include <ports/biflow-socket.h>
11
12
#pragma once
13
14
class
LegacyCharBackend
:
public
sc_core::sc_module
15
{
16
protected
:
17
void
* m_opaque;
18
void
(*m_receive)(
void
*
opaque
,
const
uint8_t
*
buf
,
int
size);
19
int
(*m_can_receive)(
void
*
opaque
);
20
21
gs::biflow_socket<LegacyCharBackend>
socket;
22
23
public
:
24
SCP_LOGGER();
25
static
void
recieve(
void
*
opaque
,
const
uint8_t
*
buf
,
int
size)
26
{
27
LegacyCharBackend
*
t
= (
LegacyCharBackend
*)
opaque
;
28
for
(
int
i
= 0;
i
< size;
i
++) {
29
t
->socket.enqueue(
buf
[
i
]);
30
}
31
}
32
33
void
b_transport(tlm::tlm_generic_payload&
txn
, sc_core::sc_time&
t
)
34
{
35
uint8_t
* data =
txn
.get_data_ptr();
36
for
(
int
i
= 0;
i
<
txn
.get_streaming_width();
i
++) {
37
write(data[
i
]);
38
}
39
}
40
LegacyCharBackend
(): socket(
"biflow_socket"
)
41
{
42
SCP_DEBUG
(
"LegacyCharBackend"
) <<
"LegacyCharBackend constructor"
;
43
m_opaque =
this
;
44
m_receive = recieve;
45
m_can_receive = can_receive;
46
socket.
register_b_transport
(
this
, &LegacyCharBackend::b_transport);
47
}
48
49
void
start_of_simulation() { socket.
can_receive_any
(); }
50
51
virtual
void
write(
unsigned
char
c
) = 0;
52
53
static
int
can_receive(
void
*
opaque
) {
return
1; }
54
55
void
register_receive(
void
*
opaque
,
void
(*receive)(
void
*
opaque
,
const
uint8_t
*
buf
,
int
size),
56
int
(*can_receive)(
void
*
opaque
))
57
{
58
SCP_FATAL
(())(
"Deprecated!!!!"
);
59
m_opaque =
opaque
;
60
m_receive = receive;
61
m_can_receive = can_receive;
62
}
63
};
LegacyCharBackend
Definition
legacy-char-backend.h:15
QemuTargetSocket
Definition
target.h:160
gs::biflow_socket
Definition
biflow-socket.h:73
gs::biflow_socket::can_receive_any
void can_receive_any()
can_receive_any Allow unlimited items to arrive.
Definition
biflow-socket.h:264
gs::biflow_socket::register_b_transport
void register_b_transport(MODULE *mod, void(MODULE::*cb)(tlm::tlm_generic_payload &, sc_core::sc_time &))
Register b_transport to be called whenever data is received from the socket.
Definition
biflow-socket.h:227
Generated by
1.9.8