summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'utils/regtools/qeditor/backend.h')
-rw-r--r--utils/regtools/qeditor/backend.h113
1 files changed, 108 insertions, 5 deletions
diff --git a/utils/regtools/qeditor/backend.h b/utils/regtools/qeditor/backend.h
index 536eb8cec5..55f31cce52 100644
--- a/utils/regtools/qeditor/backend.h
+++ b/utils/regtools/qeditor/backend.h
@@ -4,16 +4,29 @@
4#include <QObject> 4#include <QObject>
5#include <QStringList> 5#include <QStringList>
6#include <QMap> 6#include <QMap>
7#include <QVector>
7#include "soc_desc.hpp" 8#include "soc_desc.hpp"
9#ifdef HAVE_HWSTUB
10#include "hwstub.h"
11#endif
8 12
9class IoBackend : public QObject 13class IoBackend : public QObject
10{ 14{
11 Q_OBJECT 15 Q_OBJECT
12public: 16public:
13 IoBackend(); 17 IoBackend() {}
18 virtual ~IoBackend() {}
14 19
20 enum AccessType
21 {
22 ByName,
23 ByAddress,
24 };
25
26 virtual bool SupportAccess(AccessType type) = 0;
15 virtual QString GetSocName() = 0; 27 virtual QString GetSocName() = 0;
16 virtual bool ReadRegister(const QString& name, soc_word_t& value) = 0; 28 virtual bool ReadRegister(const QString& name, soc_word_t& value) = 0;
29 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) = 0;
17 virtual bool Reload() = 0; 30 virtual bool Reload() = 0;
18}; 31};
19 32
@@ -21,11 +34,15 @@ class DummyIoBackend : public IoBackend
21{ 34{
22 Q_OBJECT 35 Q_OBJECT
23public: 36public:
24 DummyIoBackend(); 37 DummyIoBackend() {}
25 38
26 virtual QString GetSocName(); 39 virtual bool SupportAccess(AccessType type) { (void) type; return false; }
27 virtual bool ReadRegister(const QString& name, soc_word_t& value); 40 virtual QString GetSocName() { return ""; }
28 virtual bool Reload(); 41 virtual bool ReadRegister(const QString& name, soc_word_t& value)
42 { (void) name; (void) value; return false; }
43 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value)
44 { (void) addr; (void) value; return false; }
45 virtual bool Reload() { return false; }
29}; 46};
30 47
31class FileIoBackend : public IoBackend 48class FileIoBackend : public IoBackend
@@ -34,8 +51,11 @@ class FileIoBackend : public IoBackend
34public: 51public:
35 FileIoBackend(const QString& filename); 52 FileIoBackend(const QString& filename);
36 53
54 virtual bool SupportAccess(AccessType type) { return type == ByName; }
37 virtual QString GetSocName(); 55 virtual QString GetSocName();
38 virtual bool ReadRegister(const QString& name, soc_word_t& value); 56 virtual bool ReadRegister(const QString& name, soc_word_t& value);
57 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value)
58 { (void) addr; (void) value; return false; }
39 virtual bool Reload(); 59 virtual bool Reload();
40 60
41protected: 61protected:
@@ -44,6 +64,82 @@ protected:
44 QMap< QString, soc_word_t > m_map; 64 QMap< QString, soc_word_t > m_map;
45}; 65};
46 66
67#ifdef HAVE_HWSTUB
68class HWStubDevice
69{
70public:
71 HWStubDevice(struct libusb_device *dev);
72 ~HWStubDevice();
73 bool IsValid();
74 bool Open();
75 void Close();
76 int GetBusNumber();
77 int GetDevAddress();
78 /* Calls below are cached and do not require the device to be opened */
79 inline struct hwstub_version_desc_t GetVersionInfo() { return m_hwdev_ver; }
80 inline struct hwstub_target_desc_t GetTargetInfo() { return m_hwdev_target; }
81 inline struct hwstub_stmp_desc_t GetSTMPInfo() { return m_hwdev_stmp; }
82 /* Calls below require the device to be opened */
83 bool ReadMem(soc_addr_t addr, size_t length, void *buffer);
84
85protected:
86 bool Probe();
87
88 bool m_valid;
89 struct libusb_device *m_dev;
90 libusb_device_handle *m_handle;
91 struct hwstub_device_t *m_hwdev;
92 struct hwstub_version_desc_t m_hwdev_ver;
93 struct hwstub_target_desc_t m_hwdev_target;
94 struct hwstub_stmp_desc_t m_hwdev_stmp;
95};
96
97class HWStubIoBackend : public IoBackend
98{
99 Q_OBJECT
100public:
101 HWStubIoBackend(HWStubDevice *dev);
102 virtual ~HWStubIoBackend();
103
104 virtual bool SupportAccess(AccessType type) { return type == ByAddress; }
105 virtual QString GetSocName();
106 virtual bool ReadRegister(const QString& name, soc_word_t& value)
107 { (void) name; (void) value; return false; }
108 virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value);
109 virtual bool Reload();
110
111protected:
112 QString m_soc;
113 HWStubDevice *m_dev;
114};
115
116#if LIBUSB_API_VERSION < 0x01000102
117#define LIBUSB_NO_HOTPLUG
118#endif
119
120class HWStubBackendHelper : public QObject
121{
122 Q_OBJECT
123public:
124 HWStubBackendHelper();
125 ~HWStubBackendHelper();
126 bool HasHotPlugSupport();
127 QList< HWStubDevice* > GetDevList();
128
129signals:
130 void OnDevListChanged(bool arrived, struct libusb_device *dev);
131
132protected:
133#ifndef LIBUSB_NO_HOTPLUG
134 void OnHotPlug(bool arrived, struct libusb_device *dev);
135 static int HotPlugCallback(struct libusb_context *ctx, struct libusb_device *dev,
136 libusb_hotplug_event event, void *user_data);
137 libusb_hotplug_callback_handle m_hotplug_handle;
138#endif
139 bool m_hotplug;
140};
141#endif
142
47class Backend : public QObject 143class Backend : public QObject
48{ 144{
49 Q_OBJECT 145 Q_OBJECT
@@ -55,6 +151,9 @@ public:
55 bool GetSocByName(const QString& name, soc_t& s); 151 bool GetSocByName(const QString& name, soc_t& s);
56 IoBackend *CreateDummyIoBackend(); 152 IoBackend *CreateDummyIoBackend();
57 IoBackend *CreateFileIoBackend(const QString& filename); 153 IoBackend *CreateFileIoBackend(const QString& filename);
154#ifdef HAVE_HWSTUB
155 IoBackend *CreateHWStubIoBackend(HWStubDevice *dev);
156#endif
58 157
59signals: 158signals:
60 void OnSocListChanged(); 159 void OnSocListChanged();
@@ -69,6 +168,10 @@ public:
69 bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v); 168 bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v);
70 bool ReadRegisterField(const QString& dev, const QString& reg, 169 bool ReadRegisterField(const QString& dev, const QString& reg,
71 const QString& field, soc_word_t& v); 170 const QString& field, soc_word_t& v);
171 bool GetDeviceDesc(const QString& dev, soc_dev_t& dev_desc, size_t& index);
172 bool GetRegisterDesc(const soc_dev_t& dev, const QString& reg, soc_reg_t& reg_desc, size_t& index);
173 bool GetFieldDesc(const soc_reg_t& reg_desc, const QString& field, soc_reg_field_t& field_desc);
174 bool GetRegisterAddress(const QString& dev, const QString& reg, soc_addr_t& addr);
72private: 175private:
73 IoBackend *m_io_backend; 176 IoBackend *m_io_backend;
74 soc_t m_soc; 177 soc_t m_soc;