diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-09-08 11:12:54 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-09-08 11:12:54 +0200 |
commit | 847106cdb20a0297dc9a10f212f0e3c8e6f3d58c (patch) | |
tree | a7ed541f10c7469c6f30790140cc848e12fb119c /utils/hwstub/lib/hwstub.c | |
parent | d815c26e8fad1562e7c4d175bc4dec2567f0fe88 (diff) | |
download | rockbox-847106cdb20a0297dc9a10f212f0e3c8e6f3d58c.tar.gz rockbox-847106cdb20a0297dc9a10f212f0e3c8e6f3d58c.zip |
hwstub: add support for jump/call in library
Change-Id: Ia57ca613609a5e89e41ff927d7fc137c6841046a
Diffstat (limited to 'utils/hwstub/lib/hwstub.c')
-rw-r--r-- | utils/hwstub/lib/hwstub.c | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/utils/hwstub/lib/hwstub.c b/utils/hwstub/lib/hwstub.c index a2af2f26d4..6ae0400a66 100644 --- a/utils/hwstub/lib/hwstub.c +++ b/utils/hwstub/lib/hwstub.c | |||
@@ -207,30 +207,25 @@ int hwstub_rw_mem(struct hwstub_device_t *dev, int read, uint32_t addr, void *bu | |||
207 | return read ? hwstub_read(dev, addr, buf, sz) : hwstub_write(dev, addr, buf, sz); | 207 | return read ? hwstub_read(dev, addr, buf, sz) : hwstub_write(dev, addr, buf, sz); |
208 | } | 208 | } |
209 | 209 | ||
210 | int hwstub_exec(struct hwstub_device_t *dev, uint32_t addr, uint16_t flags) | ||
211 | { | ||
212 | struct hwstub_exec_req_t exec; | ||
213 | exec.dAddress = addr; | ||
214 | exec.bmFlags = flags; | ||
215 | int size = libusb_control_transfer(dev->handle, | ||
216 | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT, | ||
217 | HWSTUB_EXEC, dev->id, dev->intf, (void *)&exec, sizeof(exec), 1000); | ||
218 | if(size != (int)sizeof(exec)) | ||
219 | return -1; | ||
220 | return 0; | ||
221 | } | ||
222 | |||
210 | int hwstub_call(struct hwstub_device_t *dev, uint32_t addr) | 223 | int hwstub_call(struct hwstub_device_t *dev, uint32_t addr) |
211 | { | 224 | { |
212 | #if 0 | 225 | return hwstub_exec(dev, addr, HWSTUB_EXEC_CALL); |
213 | return libusb_control_transfer(dev->handle, | ||
214 | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_DEVICE | | ||
215 | LIBUSB_ENDPOINT_OUT, HWSTUB_CALL, addr & 0xffff, addr >> 16, NULL, 0, | ||
216 | 1000); | ||
217 | #else | ||
218 | (void) dev; | ||
219 | (void) addr; | ||
220 | return -1; | ||
221 | #endif | ||
222 | } | 226 | } |
223 | 227 | ||
224 | int hwstub_jump(struct hwstub_device_t *dev, uint32_t addr) | 228 | int hwstub_jump(struct hwstub_device_t *dev, uint32_t addr) |
225 | { | 229 | { |
226 | #if 0 | 230 | return hwstub_exec(dev, addr, HWSTUB_EXEC_JUMP); |
227 | return libusb_control_transfer(dev->handle, | ||
228 | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_DEVICE | | ||
229 | LIBUSB_ENDPOINT_OUT, HWSTUB_JUMP, addr & 0xffff, addr >> 16, NULL, 0, | ||
230 | 1000); | ||
231 | #else | ||
232 | (void) dev; | ||
233 | (void) addr; | ||
234 | return -1; | ||
235 | #endif | ||
236 | } | 231 | } |