Developer Application Interface (ARC API) v3.6.2
ARC, Inc. GenII/III Application Interface
CArcPCIBase.h
Go to the documentation of this file.
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: CArcPCIBase.h |
3// +------------------------------------------------------------------------------------------------------------------+
4// | PURPOSE: This file defines the PCI/PCIe device base class. |
5// | |
6// | AUTHOR: Scott Streit DATE: ? |
7// | |
8// | Copyright Astronomical Research Cameras, Inc. All rights reserved. |
9// +------------------------------------------------------------------------------------------------------------------+
12#pragma once
13
14
15#ifdef _WINDOWS
16 #pragma warning( disable: 4251 )
17#endif
18
19#include <iostream>
20#include <vector>
21#include <string>
22#include <memory>
23
24#include <CArcDeviceDllMain.h>
25#include <CArcStringList.h>
26#include <CArcDevice.h>
27#include <CArcBase.h>
28
29
30
31namespace arc
32{
33 namespace gen3
34 {
35
38 using pCStrList_t = std::unique_ptr<arc::gen3::CArcStringList>;
39
44 {
46 std::string sName;
47 std::uint32_t uiValue;
48 std::uint32_t uiAddr;
49 };
50
53 using pPCIRegData_t = std::shared_ptr<PCIRegData>;
54
57 using PCIRegList_t = std::vector<pPCIRegData_t>;
58
59
60 // +-------------------------------------------------------------------+
61 // | PCI configuration space register bar item ( used to name and |
62 // | contain a set of local gen3 configuration registers; if they |
63 // | exist ) |
64 // +-------------------------------------------------------------------+
65
68 using pPCIRegList_t = std::unique_ptr<PCIRegList_t>;
69
74 {
75 std::string sName;
77 };
78
81 using pPCIBarData_t = std::shared_ptr<PCIBarData>;
82
85 using PCIBarList_t = std::vector<pPCIBarData_t>;
86
87
94 class GEN3_CARCDEVICE_API CArcPCIBase : public CArcDevice
95 {
96 public:
97
100 CArcPCIBase( void ) = default;
101
104 virtual ~CArcPCIBase( void );
105
111 virtual std::uint32_t getCfgSpByte( const std::uint32_t uiOffset ) = 0;
112
118 virtual std::uint32_t getCfgSpWord( const std::uint32_t uiOffset ) = 0;
119
125 virtual std::uint32_t getCfgSpDWord( const std::uint32_t uiOffset ) = 0;
126
132 virtual void setCfgSpByte( const std::uint32_t uiOffset, const std::uint32_t uiValue ) = 0;
133
139 virtual void setCfgSpWord( const std::uint32_t uiOffset, const std::uint32_t uiValue ) = 0;
140
146 virtual void setCfgSpDWord( const std::uint32_t uiOffset, const std::uint32_t uiValue ) = 0;
147
153 virtual void getCfgSp( void );
154
161 virtual void getBarSp( void );
162
167 std::uint32_t getCfgSpCount( void );
168
175 std::uint32_t getCfgSpAddr( const std::uint32_t uiIndex );
176
183 std::uint32_t getCfgSpValue( const std::uint32_t uiIndex );
184
191 const std::string getCfgSpName( const std::uint32_t uiIndex );
192
199 const std::string* getCfgSpBitList( const std::uint32_t uiIndex, std::uint32_t& pCount );
200
205 std::uint32_t getBarCount( void );
206
211 const std::string getBarName( const std::uint32_t dIndex );
212
218 std::uint32_t getBarRegCount( const std::uint32_t dIndex );
219
225 std::uint32_t getBarRegAddr( const std::uint32_t dIndex, const std::uint32_t dRegIndex );
226
232 std::uint32_t getBarRegValue( const std::uint32_t dIndex, const std::uint32_t dRegIndex );
233
239 const std::string getBarRegName( const std::uint32_t dIndex, const std::uint32_t dRegIndex );
240
246 std::uint32_t getBarRegBitListCount( const std::uint32_t dIndex, const std::uint32_t dRegIndex );
247
253 const std::string getBarRegBitListDef( const std::uint32_t dIndex, const std::uint32_t dRegIndex, const std::uint32_t dBitListIndex );
254
259 void printCfgSp( std::ostream& os = std::cout );
260
265 void printBars( std::ostream& os = std::cout );
266
267 protected:
268
277 void addRegItem( arc::gen3::PCIRegList_t* pvDataList, const std::uint32_t uiAddr, const std::string& sName, const std::uint32_t uiValue, arc::gen3::CArcStringList* pBitList = nullptr );
278
284 void addBarItem( const std::string& sName, PCIRegList_t* pList );
285
291 std::unique_ptr<arc::gen3::CArcStringList> getDevVenBitList( const std::uint32_t uiData, bool bDrawSeparator = false );
292
298 std::unique_ptr<arc::gen3::CArcStringList> getCommandBitList( const std::uint32_t uiData, bool bDrawSeparator = false );
299
305 std::unique_ptr<arc::gen3::CArcStringList> getStatusBitList( const std::uint32_t uiData, bool bDrawSeparator = false );
306
312 std::unique_ptr<arc::gen3::CArcStringList> getClassRevBitList( const std::uint32_t uiData, bool bDrawSeparator = false );
313
319 std::unique_ptr<arc::gen3::CArcStringList> getBistHeaderLatencyCache( const std::uint32_t uiData, bool bDrawSeparator = false );
320
326 std::unique_ptr<arc::gen3::CArcStringList> getBaseAddressBitList( const std::uint32_t uiData, bool bDrawSeparator = false );
327
333 std::unique_ptr<arc::gen3::CArcStringList> getSubSysBitList( const std::uint32_t uiData, bool bDrawSeparator = false );
334
340 std::unique_ptr<arc::gen3::CArcStringList> getMaxLatGntIntBitList( const std::uint32_t uiData, bool bDrawSeparator = false );
341
346 {
350 void operator()( PCIRegList_t* p ) const
351 {
352 if ( p != nullptr )
353 {
354 p->clear();
355
356 delete p;
357 }
358 }
359 };
360
363 std::shared_ptr<PCIRegList_t> m_pCfgSpList;
364
367 std::shared_ptr<PCIBarList_t> m_pBarList;
368
371 std::shared_ptr<std::string> m_pTmpCfgBitList;
372
375 std::shared_ptr<std::string> m_pTmpBarBitList;
376 };
377
378 } // end gen3 namespace
379} // end arc namespace
std::unique_ptr< PCIRegList_t > pPCIRegList_t
Definition: CArcPCIBase.h:68
std::vector< pPCIBarData_t > PCIBarList_t
Definition: CArcPCIBase.h:85
std::shared_ptr< PCIBarData > pPCIBarData_t
Definition: CArcPCIBase.h:81
std::unique_ptr< arc::gen3::CArcStringList > pCStrList_t
Definition: CArcPCIBase.h:38
std::shared_ptr< PCIRegData > pPCIRegData_t
Definition: CArcPCIBase.h:53
std::vector< pPCIRegData_t > PCIRegList_t
Definition: CArcPCIBase.h:57
Definition: CArcDevice.h:59
Definition: CArcPCIBase.h:95
virtual std::uint32_t getCfgSpDWord(const std::uint32_t uiOffset)=0
virtual std::uint32_t getCfgSpByte(const std::uint32_t uiOffset)=0
virtual std::uint32_t getCfgSpWord(const std::uint32_t uiOffset)=0
CArcPCIBase(void)=default
std::shared_ptr< std::string > m_pTmpBarBitList
Definition: CArcPCIBase.h:375
std::shared_ptr< PCIRegList_t > m_pCfgSpList
Definition: CArcPCIBase.h:363
std::shared_ptr< std::string > m_pTmpCfgBitList
Definition: CArcPCIBase.h:371
virtual void setCfgSpDWord(const std::uint32_t uiOffset, const std::uint32_t uiValue)=0
virtual void setCfgSpByte(const std::uint32_t uiOffset, const std::uint32_t uiValue)=0
virtual void setCfgSpWord(const std::uint32_t uiOffset, const std::uint32_t uiValue)=0
std::shared_ptr< PCIBarList_t > m_pBarList
Definition: CArcPCIBase.h:367
Definition: CArcStringList.h:40
Definition: CArcPCIBase.h:346
void operator()(PCIRegList_t *p) const
Definition: CArcPCIBase.h:350
Definition: CArcPCIBase.h:74
std::string sName
Definition: CArcPCIBase.h:75
pPCIRegList_t pList
Definition: CArcPCIBase.h:76
Definition: CArcPCIBase.h:44
pCStrList_t pBitList
Definition: CArcPCIBase.h:45
std::uint32_t uiValue
Definition: CArcPCIBase.h:47
std::uint32_t uiAddr
Definition: CArcPCIBase.h:48
std::string sName
Definition: CArcPCIBase.h:46