diff options
-rw-r--r-- | firmware/microblaze/apps/txrx_uhd.c | 1 | ||||
-rw-r--r-- | firmware/microblaze/lib/net_common.c | 8 | ||||
-rw-r--r-- | firmware/microblaze/lib/net_common.h | 2 | ||||
-rw-r--r-- | firmware/microblaze/lib/pic.c | 18 | ||||
-rw-r--r-- | firmware/microblaze/lib/pic.h | 2 | ||||
-rw-r--r-- | firmware/microblaze/lib/pkt_ctrl.c | 2 |
6 files changed, 19 insertions, 14 deletions
diff --git a/firmware/microblaze/apps/txrx_uhd.c b/firmware/microblaze/apps/txrx_uhd.c index 7dc44f09f..ea74f032e 100644 --- a/firmware/microblaze/apps/txrx_uhd.c +++ b/firmware/microblaze/apps/txrx_uhd.c @@ -363,6 +363,7 @@ main(void) pkt_ctrl_program_inspector(get_ip_addr(), USRP2_UDP_CTRL_PORT, USRP2_UDP_DATA_PORT); //2) register callbacks for udp ports we service + init_udp_listeners(); register_udp_listener(USRP2_UDP_CTRL_PORT, handle_udp_ctrl_packet); register_udp_listener(USRP2_UDP_DATA_PORT, handle_udp_data_packet); register_udp_listener(USRP2_UDP_ERR0_PORT, handle_udp_err0_packet); diff --git a/firmware/microblaze/lib/net_common.c b/firmware/microblaze/lib/net_common.c index a34ca615b..c1ca280d9 100644 --- a/firmware/microblaze/lib/net_common.c +++ b/firmware/microblaze/lib/net_common.c @@ -64,6 +64,12 @@ struct listener_entry { static struct listener_entry listeners[MAX_UDP_LISTENERS]; +void init_udp_listeners(void){ + for (int i = 0; i < MAX_UDP_LISTENERS; i++){ + listeners[i].rcvr = NULL; + } +} + static struct listener_entry * find_listener_by_port(unsigned short port) { @@ -78,7 +84,7 @@ static struct listener_entry * find_free_listener(void) { for (int i = 0; i < MAX_UDP_LISTENERS; i++){ - if (listeners[i].rcvr == 0) + if (listeners[i].rcvr == NULL) return &listeners[i]; } abort(); diff --git a/firmware/microblaze/lib/net_common.h b/firmware/microblaze/lib/net_common.h index 4004ca6e6..409022352 100644 --- a/firmware/microblaze/lib/net_common.h +++ b/firmware/microblaze/lib/net_common.h @@ -33,6 +33,8 @@ unsigned int CHKSUM(unsigned int x, unsigned int *chksum); typedef void (*udp_receiver_t)(struct socket_address src, struct socket_address dst, unsigned char *payload, int payload_len); +void init_udp_listeners(void); + void register_addrs(const eth_mac_addr_t *mac_addr, const struct ip_addr *ip_addr); void register_udp_listener(int port, udp_receiver_t rcvr); diff --git a/firmware/microblaze/lib/pic.c b/firmware/microblaze/lib/pic.c index b8beda311..bd627ce6b 100644 --- a/firmware/microblaze/lib/pic.c +++ b/firmware/microblaze/lib/pic.c @@ -26,17 +26,7 @@ /* * Our secondary interrupt vector. */ -irq_handler_t pic_vector[NVECTORS] = { - nop_handler, - nop_handler, - nop_handler, - nop_handler, - nop_handler, - nop_handler, - nop_handler, - nop_handler -}; - +irq_handler_t pic_vector[NVECTORS]; void pic_init(void) @@ -47,6 +37,10 @@ pic_init(void) pic_regs->edge_enable = PIC_ONETIME_INT | PIC_UNDERRUN_INT | PIC_OVERRUN_INT | PIC_PPS_INT; pic_regs->polarity = ~0 & ~PIC_PHY_INT; // rising edge pic_regs->pending = ~0; // clear all pending ints + + for (int i = 0; i < NVECTORS; i++){ + pic_vector[i] = pic_nop_handler; + } } /* @@ -89,7 +83,7 @@ pic_register_handler(unsigned irq, irq_handler_t handler) } void -nop_handler(unsigned irq) +pic_nop_handler(unsigned irq) { // nop } diff --git a/firmware/microblaze/lib/pic.h b/firmware/microblaze/lib/pic.h index 6cbffb441..cfdf721f4 100644 --- a/firmware/microblaze/lib/pic.h +++ b/firmware/microblaze/lib/pic.h @@ -24,7 +24,7 @@ typedef void (*irq_handler_t)(unsigned irq); void pic_init(void); void pic_register_handler(unsigned irq, irq_handler_t handler); -void nop_handler(unsigned irq); // default handler does nothing +void pic_nop_handler(unsigned irq); // default handler does nothing // FIXME inline assembler int pic_disable_interrupts(); diff --git a/firmware/microblaze/lib/pkt_ctrl.c b/firmware/microblaze/lib/pkt_ctrl.c index 7e095ec00..a5659eb33 100644 --- a/firmware/microblaze/lib/pkt_ctrl.c +++ b/firmware/microblaze/lib/pkt_ctrl.c @@ -46,6 +46,7 @@ static inline bool is_status_bit_set(int bit){ #define CPU_INP_HS_BIT 1 //from CPU to packet router void *pkt_ctrl_claim_incoming_buffer(size_t *num_lines){ + buffer_pool_ctrl->cpu_out_ctrl = 0; if (!is_status_bit_set(CPU_OUT_HS_BIT)) return NULL; *num_lines = (buffer_pool_status->status >> 16) & 0xffff; return buffer_ram(0); @@ -58,6 +59,7 @@ void pkt_ctrl_release_incoming_buffer(void){ } void *pkt_ctrl_claim_outgoing_buffer(void){ + buffer_pool_ctrl->cpu_inp_ctrl = 0; while (!is_status_bit_set(CPU_INP_HS_BIT)){} return buffer_ram(1); } |