diff options
Diffstat (limited to 'usrp2/firmware')
-rw-r--r-- | usrp2/firmware/apps/app_common_v2.c | 20 | ||||
-rw-r--r-- | usrp2/firmware/include/usrp2_eth_packet.h | 15 |
2 files changed, 34 insertions, 1 deletions
diff --git a/usrp2/firmware/apps/app_common_v2.c b/usrp2/firmware/apps/app_common_v2.c index b51c3b23c..0a51110a9 100644 --- a/usrp2/firmware/apps/app_common_v2.c +++ b/usrp2/firmware/apps/app_common_v2.c @@ -350,11 +350,24 @@ peek_cmd(const op_peek_t *p, r->rid = p->rid; r->ok = true; - memcpy_wa(reply_payload+sizeof(*r), p->addr, p->bytes); + memcpy_wa(reply_payload+sizeof(*r), (void *)p->addr, p->bytes); return r->len; } +static bool +poke_cmd(const op_poke_t *p) +{ + int bytes = p->len - sizeof(*p); + putstr("poke: addr="); puthex32(p->addr); + printf(" bytes=%u\n", bytes); + + uint8_t *src = (uint8_t *)p + sizeof(*p); + memcpy_wa((void *)p->addr, src, bytes); + + return true; +} + static size_t generic_reply(const op_generic_t *p, void *reply_payload, size_t reply_payload_space, @@ -463,6 +476,11 @@ handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len) subpktlen = peek_cmd((op_peek_t *)payload, reply_payload, reply_payload_space); break; + case OP_POKE: + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, + poke_cmd((op_poke_t *)payload)); + break; + default: printf("app_common_v2: unhandled opcode = %d\n", gp->opcode); break; diff --git a/usrp2/firmware/include/usrp2_eth_packet.h b/usrp2/firmware/include/usrp2_eth_packet.h index 8a9994f17..515394fab 100644 --- a/usrp2/firmware/include/usrp2_eth_packet.h +++ b/usrp2/firmware/include/usrp2_eth_packet.h @@ -187,6 +187,8 @@ typedef struct { #define OP_SYNC_TO_PPS_REPLY (OP_SYNC_TO_PPS | OP_REPLY_BIT) #define OP_PEEK 11 #define OP_PEEK_REPLY (OP_PEEK | OP_REPLY_BIT) +#define OP_POKE 12 +#define OP_POKE_REPLY (OP_POKE | OP_REPLY_BIT) /* * All subpackets are a multiple of 4 bytes long. @@ -388,6 +390,18 @@ typedef struct { uint32_t bytes; } _AL4 op_peek_t; +/*! + * \brief Write to Wishbone memory + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + uint32_t addr; + // Words follow here +} _AL4 op_poke_t; + /* * ================================================================ * union of all of subpacket types @@ -406,6 +420,7 @@ typedef union { op_config_tx_reply_v2_t op_config_tx_reply_v2; op_config_mimo_t op_config_mimo; op_peek_t op_peek; + op_poke_t op_poke; } u2_subpkt_t; |