From 68af2b9ccf556f42d7697c73406abdcc31093d1b Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 17 Nov 2010 17:12:01 -0800 Subject: usrp2: implement routing mode calls, and prefix pkt ctrl calls --- firmware/microblaze/lib/net_common.c | 4 ++-- firmware/microblaze/lib/pkt_ctrl.c | 19 +++++++++++++++---- firmware/microblaze/lib/pkt_ctrl.h | 16 ++++++++++++---- 3 files changed, 29 insertions(+), 10 deletions(-) (limited to 'firmware/microblaze/lib') diff --git a/firmware/microblaze/lib/net_common.c b/firmware/microblaze/lib/net_common.c index cc08997a0..486a34252 100644 --- a/firmware/microblaze/lib/net_common.c +++ b/firmware/microblaze/lib/net_common.c @@ -128,7 +128,7 @@ send_pkt(eth_mac_addr_t dst, int ethertype, ehdr.src = _local_mac_addr; ehdr.ethertype = ethertype; - uint32_t *buff = (uint32_t *)claim_outgoing_buffer(); + uint32_t *buff = (uint32_t *)pkt_ctrl_claim_outgoing_buffer(); // Copy the pieces into the buffer uint32_t *p = buff; @@ -165,7 +165,7 @@ send_pkt(eth_mac_addr_t dst, int ethertype, if (total_len < 60) // ensure that we don't try to send a short packet total_len = 60; - commit_outgoing_buffer(total_len/4); + pkt_ctrl_commit_outgoing_buffer(total_len/4); } unsigned int diff --git a/firmware/microblaze/lib/pkt_ctrl.c b/firmware/microblaze/lib/pkt_ctrl.c index 235a09459..f7f808cfc 100644 --- a/firmware/microblaze/lib/pkt_ctrl.c +++ b/firmware/microblaze/lib/pkt_ctrl.c @@ -30,24 +30,35 @@ static void set_control(uint32_t value, uint32_t mask){ buffer_pool_ctrl->ctrl = ctrl_shadow; } -void *claim_incoming_buffer(size_t *num_lines){ +void pkt_ctrl_set_routing_mode(pkt_ctrl_routing_mode_t mode){ + switch(mode){ + case PKT_CTRL_ROUTING_MODE_SLAVE: + set_control(0x0, 0x4); + break; + case PKT_CTRL_ROUTING_MODE_MASTER: + set_control(0x4, 0x4); + break; + } +} + +void *pkt_ctrl_claim_incoming_buffer(size_t *num_lines){ if ((buffer_pool_status->status & 0x1) != 1) return NULL; *num_lines = (buffer_pool_status->status >> 16) & 0xffff; set_control(0x1, 0x1); return buffer_ram(0); } -void release_incoming_buffer(void){ +void pkt_ctrl_release_incoming_buffer(void){ set_control(0x0, 0x1); while ((buffer_pool_status->status & 0x1) != 0){} } -void *claim_outgoing_buffer(void){ +void *pkt_ctrl_claim_outgoing_buffer(void){ while ((buffer_pool_status->status & 0x2) != 0x2){} return buffer_ram(1); } -void commit_outgoing_buffer(size_t num_lines){ +void pkt_ctrl_commit_outgoing_buffer(size_t num_lines){ set_control(0x2 | (num_lines << 16), 0x2 | (0xffff << 16)); while ((buffer_pool_status->status & 0x2) != 0x0){} set_control(0x0, 0x2); diff --git a/firmware/microblaze/lib/pkt_ctrl.h b/firmware/microblaze/lib/pkt_ctrl.h index 156fc06dc..86fb46d32 100644 --- a/firmware/microblaze/lib/pkt_ctrl.h +++ b/firmware/microblaze/lib/pkt_ctrl.h @@ -20,28 +20,36 @@ #include +typedef enum { + PKT_CTRL_ROUTING_MODE_SLAVE, + PKT_CTRL_ROUTING_MODE_MASTER, +} pkt_ctrl_routing_mode_t; + +//! Set the routing mode for this device +void pkt_ctrl_set_routing_mode(pkt_ctrl_routing_mode_t mode); + /*! * Try to claim an incomming buffer. * \param num_lines filled with the buffer size * \return a pointer to the buffer memory or NULL */ -void *claim_incoming_buffer(size_t *num_lines); +void *pkt_ctrl_claim_incoming_buffer(size_t *num_lines); /*! * Release the incoming buffer. Call when done. */ -void release_incoming_buffer(void); +void pkt_ctrl_release_incoming_buffer(void); /*! * Claim an outgoing buffer. * \return a pointer to the buffer */ -void *claim_outgoing_buffer(void); +void *pkt_ctrl_claim_outgoing_buffer(void); /*! * Commit the outgoing buffer. * \param num_lines how many lines written. */ -void commit_outgoing_buffer(size_t num_lines); +void pkt_ctrl_commit_outgoing_buffer(size_t num_lines); #endif /* INCLUDED_PKT_CTRL_H */ -- cgit v1.2.3