NSUKit 1.4.0
板卡级统一交互接口
载入中...
搜索中...
未找到
pcie_interface.h
浏览该文件的文档.
1//
2// Created by 56585 on 2023/8/15.
3//
4
5#ifndef NSUKIT_PCIE_INTERFACE_H
6#define NSUKIT_PCIE_INTERFACE_H
7
8#include "base_itf.h"
9#include "xdma_api.h"
10
11
12namespace nsukit {
14 protected:
15 std::map<int, int> openedBoard = {};
16 std::mutex OpLock{};
17
18 public:
25
32 };
33
34
36 protected:
37 static unsigned int irqNum;
38
39 nsuBoardNum_t pciBoard = 0;
40 nsuRegAddr_t sentBase = 0;
41 nsuRegAddr_t recvBase = 0;
42 nsuRegAddr_t irqBase = 0;
43 nsuRegAddr_t sentDownBase = 0;
44 int pciTimeout = 0;
45
46 double onceTimeout = 0;
47 std::mutex OpLock{};
48
53 nsukitStatus_t reset_irq();
54
59 nsukitStatus_t per_recv();
60
61 public:
65 PCIECmdUItf() { mixin_ = new Mixin_NativeRegCmd(this); };
66
67 ~PCIECmdUItf() override { delete mixin_; };
68
76 nsukitStatus_t accept(nsuInitParam_t *param) override;
77
82 nsukitStatus_t close() override;
83
89 nsukitStatus_t set_timeout(float s) override;
90
97 nsukitStatus_t write(nsuRegAddr_t addr, nsuRegValue_t value) override;
98
105 nsukitStatus_t read(nsuRegAddr_t addr, nsuRegValue_t *buf) override;
106
112 nsukitStatus_t send_bytes(nsuBytes_t &bytes) override;
113
119 nsukitStatus_t send_bytes(nsuCharBuf_p bytes, nsuSize_t length) override;
120
127 nsukitStatus_t recv_bytes(nsuSize_t size, nsuCharBuf_p buf) override;
128 };
129
130
132 private:
133 const uint8_t byteWidth = 4;
134 const uint8_t maxChnl = 4;
135 protected:
137 nsuStreamLen_t current = 0;
138 nsuStreamLen_t total = 0;
139 };
140
141 nsuBoardNum_t pciBoard = 0;
142
143 std::map<nsuMemory_p, StreamProcess> uploadProcess{};
144
145 std::map<nsuMemory_p, StreamProcess> downloadProcess{};
146 public:
151
152 ~PCIEStreamUItf() override = default;
153
159 nsukitStatus_t accept(nsuInitParam_t *param) override;
160
165 nsukitStatus_t close() override;
166
172 nsukitStatus_t set_timeout(float s) override;
173
180 nsuMemory_p alloc_buffer(nsuStreamLen_t length, nsuVoidBuf_p buf = nullptr) override;
181
187 nsukitStatus_t free_buffer(nsuMemory_p fd) override;
188
195 nsuVoidBuf_p get_buffer(nsuMemory_p fd, nsuStreamLen_t length) override;
196
206 open_send(nsuChnlNum_t chnl, nsuMemory_p fd, nsuStreamLen_t length, nsuStreamLen_t offset = 0) override;
207
217 open_recv(nsuChnlNum_t chnl, nsuMemory_p fd, nsuStreamLen_t length, nsuStreamLen_t offset = 0) override;
218
225 nsukitStatus_t wait_stream(nsuMemory_p fd, float timeout = 1.) override;
226
232 nsukitStatus_t break_stream(nsuMemory_p fd) override;
233
246 stream_recv(nsuChnlNum_t chnl, nsuMemory_p fd, nsuStreamLen_t length, nsuStreamLen_t offset = 0,
247 bool(*stop_event) () = nullptr, float timeout = 5., int flag = 1) override;
248
261 stream_send(nsuChnlNum_t chnl, nsuMemory_p fd, nsuStreamLen_t length, nsuStreamLen_t offset = 0,
262 bool(*stop_event) () = nullptr, float timeout = 5., int flag = 1) override;
263 };
264
265
267 private:
268 const uint8_t byteWidth = 4;
269 const uint8_t maxChnl = 4;
270 std::map<nsuChnlNum_t, nsuSize_t> ring_chnl_size= {
271 {0, 512 * 1024 * 1024},
272 {1, 512 * 1024 * 1024},
273 {2, 512 * 1024 * 1024},
274 {3, 512 * 1024 * 1024},
275 };
276 protected:
277 struct Memory {
279 std::string error_msg{};
281 unsigned int idx;
283 HANDLE ring = nullptr;
285 std::mutex mtx;
286 };
287 std::map<unsigned int, Memory *> memory_dict{};
288 unsigned int memory_index = 0;
289
290 std::map<uint32_t, HANDLE> ringCache{
291 {0, nullptr},
292 {1, nullptr},
293 {2, nullptr},
294 {3, nullptr}
295 };
296 public:
301
302 ~PCIERingUItf() override = default;
303
304 nsukitStatus_t accept(nsuInitParam_t *param) override;
305
306 nsukitStatus_t close() override;
307
314 nsuMemory_p alloc_buffer(nsuStreamLen_t length, nsuVoidBuf_p buf = nullptr) override;
315
321 nsukitStatus_t free_buffer(nsuMemory_p fd) override;
322
329 nsuVoidBuf_p get_buffer(nsuMemory_p fd, nsuStreamLen_t length) override;
330
340 open_recv(nsuChnlNum_t chnl, nsuMemory_p fd, nsuStreamLen_t length, nsuStreamLen_t offset = 0) override;
341
348 nsukitStatus_t wait_stream(nsuMemory_p fd, float timeout = 1.) override;
349
355 nsukitStatus_t break_stream(nsuMemory_p fd) override;
356 };
357}
358#endif //NSUKIT_PCIE_INTERFACE_H
static unsigned int irqNum
~PCIECmdUItf() override
~PCIERingUItf() override=default
~PCIEStreamUItf() override=default
nsukitStatus_t close_xdma_board(int board)
nsukitStatus_t open_xdma_board(int board)
std::map< int, int > openedBoard
DLLEXTERN typedef nsuSize_t nsuStreamLen_t
Definition: type.h:88
nsukitStatus_t
Definition: type.h:53
DLLEXTERN typedef size_t nsuSize_t
Definition: type.h:87
DLLEXTERN typedef void * nsuVoidBuf_p
Definition: type.h:83
#define NSU_DLLEXPORT
Definition: type.h:18
DLLEXTERN typedef void * nsuMemory_p
Definition: type.h:86
DLLEXTERN typedef char * nsuCharBuf_p
Definition: type.h:82
DLLEXTERN typedef std::vector< char > nsuBytes_t
Definition: type.h:81
DLLEXTERN typedef uint32_t nsuRegValue_t
Definition: type.h:90
DLLEXTERN typedef uint8_t nsuChnlNum_t
Definition: type.h:85
DLLEXTERN typedef uint32_t nsuRegAddr_t
Definition: type.h:89
DLLEXTERN typedef uint8_t nsuBoardNum_t
Definition: type.h:84
void * HANDLE
Definition: xdma_api.h:65