diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2016-08-04 17:06:11 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2017-01-24 15:25:14 +0100 |
commit | 8fabbb008c1a31c809a3d97f22351f141a2bd02d (patch) | |
tree | 6e16386a7348197920a5ce1d99f623d0e10b6c3c /utils/hwstub/include/hwstub.hpp | |
parent | d91d9f6851bba401650912c5cabcfe4c5f1150df (diff) | |
download | rockbox-8fabbb008c1a31c809a3d97f22351f141a2bd02d.tar.gz rockbox-8fabbb008c1a31c809a3d97f22351f141a2bd02d.zip |
hwstub: add support for coprocessor operations
At the moment the stub only implement them for MIPS.
Change-Id: Ica835a0e9c70fa5675c3d655eae986e812a47de8
Diffstat (limited to 'utils/hwstub/include/hwstub.hpp')
-rw-r--r-- | utils/hwstub/include/hwstub.hpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/utils/hwstub/include/hwstub.hpp b/utils/hwstub/include/hwstub.hpp index deac976240..e403857200 100644 --- a/utils/hwstub/include/hwstub.hpp +++ b/utils/hwstub/include/hwstub.hpp | |||
@@ -62,6 +62,8 @@ enum class error | |||
62 | NET_ERROR, /** Network error */ | 62 | NET_ERROR, /** Network error */ |
63 | TIMEOUT, /** Operation timed out */ | 63 | TIMEOUT, /** Operation timed out */ |
64 | OVERFLW, /** Operation stopped to prevent buffer overflow */ | 64 | OVERFLW, /** Operation stopped to prevent buffer overflow */ |
65 | UNIMPLEMENTED, /** Operation has not been implemented */ | ||
66 | UNSUPPORTED, /** Operation is not supported by device/protocol */ | ||
65 | }; | 67 | }; |
66 | 68 | ||
67 | /** Return a string explaining the error */ | 69 | /** Return a string explaining the error */ |
@@ -266,6 +268,15 @@ public: | |||
266 | * according to the buffer size and call read_dev() and write_dev() */ | 268 | * according to the buffer size and call read_dev() and write_dev() */ |
267 | error read(uint32_t addr, void *buf, size_t& sz, bool atomic); | 269 | error read(uint32_t addr, void *buf, size_t& sz, bool atomic); |
268 | error write(uint32_t addr, const void *buf, size_t& sz, bool atomic); | 270 | error write(uint32_t addr, const void *buf, size_t& sz, bool atomic); |
271 | /** Execute a general cop operation: if out_data is not null, data is appended to header, | ||
272 | * if in_data is not null, a read operation follows to retrieve some data. | ||
273 | * The in_data parameters is updated to reflect the number of transfered bytes */ | ||
274 | error cop_op(uint8_t op, uint8_t args[HWSTUB_COP_ARGS], const void *out_data, | ||
275 | size_t out_size, void *in_data, size_t *in_size); | ||
276 | /** Execute a coprocessor read operation */ | ||
277 | error read32_cop(uint8_t args[HWSTUB_COP_ARGS], uint32_t& value); | ||
278 | /** Execute a coprocessor write operation */ | ||
279 | error write32_cop(uint8_t args[HWSTUB_COP_ARGS], uint32_t value); | ||
269 | /** Get device buffer size: any read() or write() greater than this size | 280 | /** Get device buffer size: any read() or write() greater than this size |
270 | * will be split into several transaction to avoid overflowing device | 281 | * will be split into several transaction to avoid overflowing device |
271 | * buffer. */ | 282 | * buffer. */ |
@@ -303,6 +314,11 @@ protected: | |||
303 | virtual error get_dev_desc(uint16_t desc, void *buf, size_t& buf_sz) = 0; | 314 | virtual error get_dev_desc(uint16_t desc, void *buf, size_t& buf_sz) = 0; |
304 | virtual error get_dev_log(void *buf, size_t& buf_sz) = 0; | 315 | virtual error get_dev_log(void *buf, size_t& buf_sz) = 0; |
305 | virtual error exec_dev(uint32_t addr, uint16_t flags) = 0; | 316 | virtual error exec_dev(uint32_t addr, uint16_t flags) = 0; |
317 | /* cop operation: if out_data is not null, data is appended to header, if | ||
318 | * in_data is not null, a READ2 operation follows to retrieve some data | ||
319 | * The in_data parameters is updated to reflect the number of transfered bytes*/ | ||
320 | virtual error cop_dev(uint8_t op, uint8_t args[HWSTUB_COP_ARGS], const void *out_data, | ||
321 | size_t out_size, void *in_data, size_t *in_size) = 0; | ||
306 | 322 | ||
307 | std::shared_ptr<device> m_dev; /* pointer to device */ | 323 | std::shared_ptr<device> m_dev; /* pointer to device */ |
308 | std::atomic<int> m_refcnt; /* reference count */ | 324 | std::atomic<int> m_refcnt; /* reference count */ |
@@ -338,6 +354,8 @@ protected: | |||
338 | virtual error get_dev_desc(uint16_t desc, void *buf, size_t& buf_sz); | 354 | virtual error get_dev_desc(uint16_t desc, void *buf, size_t& buf_sz); |
339 | virtual error get_dev_log(void *buf, size_t& buf_sz); | 355 | virtual error get_dev_log(void *buf, size_t& buf_sz); |
340 | virtual error exec_dev(uint32_t addr, uint16_t flags); | 356 | virtual error exec_dev(uint32_t addr, uint16_t flags); |
357 | virtual error cop_dev(uint8_t op, uint8_t args[HWSTUB_COP_ARGS], const void *out_data, | ||
358 | size_t out_size, void *in_data, size_t *in_size); | ||
341 | virtual error status() const; | 359 | virtual error status() const; |
342 | virtual size_t get_buffer_size(); | 360 | virtual size_t get_buffer_size(); |
343 | 361 | ||