quic/qbox
Loading...
Searching...
No Matches
dma.h
1/*
2 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
3 * Author: GreenSocs 2022
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#pragma once
9#include <tlm_sockets_buswidth.h>
10#include <module_factory_registery.h>
11
12class dma : public sc_core::sc_module
13{
14public:
15 tlm_utils::simple_initiator_socket<dma, DEFAULT_TLM_BUSWIDTH> socket;
16
17 tlm::tlm_dmi dmi_data;
18 bool dmi_valid;
19
20 dma(const sc_core::sc_module_name& name): sc_core::sc_module(name), socket("socket") { dmi_valid = false; }
21
22 ~dma() {}
23
24 void bus_do(uint64_t addr, uint8_t* data, uint32_t size, bool is_write)
25 {
26 tlm::tlm_generic_payload trans;
27
28 if (dmi_valid && addr >= dmi_data.get_start_address() && (addr + size) < dmi_data.get_end_address()) {
29 if (is_write && dmi_data.is_write_allowed()) {
30 uint64_t off = addr - dmi_data.get_start_address();
31 unsigned char* ptr = dmi_data.get_dmi_ptr();
32 memcpy(ptr + off, data, size);
33 return;
34 } else if (!is_write && dmi_data.is_read_allowed()) {
35 uint64_t off = addr - dmi_data.get_start_address();
36 unsigned char* ptr = dmi_data.get_dmi_ptr();
37 memcpy(data, ptr + off, size);
38 return;
39 }
40 }
41
42 trans.set_command(is_write ? tlm::TLM_WRITE_COMMAND : tlm::TLM_READ_COMMAND);
43 trans.set_address(addr);
44 trans.set_data_ptr(reinterpret_cast<unsigned char*>(data));
45 trans.set_data_length(size);
46 trans.set_streaming_width(size);
47 trans.set_byte_enable_length(0);
48 trans.set_dmi_allowed(false);
49 trans.set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
50
51 sc_core::sc_time delay(sc_core::SC_ZERO_TIME);
52 socket->b_transport(trans, delay);
53
54 if (trans.is_dmi_allowed()) {
55 dmi_valid = socket->get_direct_mem_ptr(trans, dmi_data);
56 }
57 }
58
59 void bus_write(uint64_t addr, uint8_t* data, uint32_t size) { bus_do(addr, data, size, 1); }
60
61 void bus_read(uint64_t addr, uint8_t* data, uint32_t size) { bus_do(addr, data, size, 0); }
62};
Definition target.h:160
Definition dma.h:13