forked from M-Labs/artiq
1
0
Fork 0

runtime: link against lwip, cleanups

This commit is contained in:
Sebastien Bourdeauducq 2015-04-17 16:38:46 +08:00
parent 91cd79a8a3
commit 4c6387929b
3 changed files with 69 additions and 69 deletions

View File

@ -40,7 +40,8 @@ runtime.elf: $(OBJECTS) libs
$(OBJECTS) \ $(OBJECTS) \
-L$(MSCDIR)/software/libbase \ -L$(MSCDIR)/software/libbase \
-L$(MSCDIR)/software/libcompiler-rt \ -L$(MSCDIR)/software/libcompiler-rt \
-lbase -lcompiler-rt -Lliblwip \
-lbase -lcompiler-rt -llwip
@chmod -x $@ @chmod -x $@
ksupport.elf: $(OBJECTS_KSUPPORT) ksupport.elf: $(OBJECTS_KSUPPORT)
@ -71,8 +72,10 @@ main.o: main.c
libs: libs:
$(MAKE) -C $(MSCDIR)/software/libcompiler-rt $(MAKE) -C $(MSCDIR)/software/libcompiler-rt
$(MAKE) -C $(MSCDIR)/software/libbase $(MAKE) -C $(MSCDIR)/software/libbase
$(MAKE) -C liblwip
clean: clean:
$(MAKE) -C liblwip clean
$(RM) $(OBJECTS) $(OBJECTS:.o=.d) $(OBJECTS_KSUPPORT) $(OBJECTS_KSUPPORT:.o=.d) $(RM) $(OBJECTS) $(OBJECTS:.o=.d) $(OBJECTS_KSUPPORT) $(OBJECTS_KSUPPORT:.o=.d)
$(RM) runtime.elf runtime.bin runtime.fbi .*~ *~ $(RM) runtime.elf runtime.bin runtime.fbi .*~ *~
$(RM) service_table.h ksupport.elf ksupport.bin $(RM) service_table.h ksupport.elf ksupport.bin

View File

@ -32,7 +32,7 @@ CORE4OBJS=$(LWIPDIR)/core/ipv4/icmp.o \
NETIFOBJS=$(LWIPDIR)/netif/etharp.o \ NETIFOBJS=$(LWIPDIR)/netif/etharp.o \
netif/liteethif.o netif/liteethif.o
# NETIFOBJS: All the above. # LWIPOBJS: All the above.
LWIPOBJS=$(COREOBJS) $(CORE4OBJS) $(NETIFOBJS) LWIPOBJS=$(COREOBJS) $(CORE4OBJS) $(NETIFOBJS)
OBJS_LIB+=$(LWIPOBJS) OBJS_LIB+=$(LWIPOBJS)

View File

@ -13,7 +13,7 @@
#include <hw/ethmac_mem.h> #include <hw/ethmac_mem.h>
typedef union { typedef union {
unsigned char raw[1514]; unsigned char raw[1514];
} ethernet_buffer; } ethernet_buffer;
static unsigned int rxslot; static unsigned int rxslot;
@ -32,106 +32,103 @@ static ethernet_buffer *txbuffer1;
static void liteeth_low_level_init(struct netif *netif) static void liteeth_low_level_init(struct netif *netif)
{ {
int i; int i;
netif->hwaddr_len = 6; netif->hwaddr_len = 6;
for(i=0;i<netif->hwaddr_len;i++) for(i=0;i<netif->hwaddr_len;i++)
netif->hwaddr[i] = macadr[i]; netif->hwaddr[i] = macadr[i];
netif->mtu = 1514; netif->mtu = 1514;
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
ethmac_sram_reader_ev_pending_write(ETHMAC_EV_SRAM_READER); ethmac_sram_reader_ev_pending_write(ETHMAC_EV_SRAM_READER);
ethmac_sram_writer_ev_pending_write(ETHMAC_EV_SRAM_WRITER); ethmac_sram_writer_ev_pending_write(ETHMAC_EV_SRAM_WRITER);
rxbuffer0 = (ethernet_buffer *)ETHMAC_RX0_BASE; rxbuffer0 = (ethernet_buffer *)ETHMAC_RX0_BASE;
rxbuffer1 = (ethernet_buffer *)ETHMAC_RX1_BASE; rxbuffer1 = (ethernet_buffer *)ETHMAC_RX1_BASE;
txbuffer0 = (ethernet_buffer *)ETHMAC_TX0_BASE; txbuffer0 = (ethernet_buffer *)ETHMAC_TX0_BASE;
txbuffer1 = (ethernet_buffer *)ETHMAC_TX1_BASE; txbuffer1 = (ethernet_buffer *)ETHMAC_TX1_BASE;
rxslot = 0; rxslot = 0;
txslot = 0; txslot = 0;
rxbuffer = rxbuffer0; rxbuffer = rxbuffer0;
txbuffer = txbuffer0; txbuffer = txbuffer0;
return;
} }
static err_t liteeth_low_level_output(struct netif *netif, struct pbuf *p) static err_t liteeth_low_level_output(struct netif *netif, struct pbuf *p)
{ {
struct pbuf *q; struct pbuf *q;
txlen = 0; txlen = 0;
for(q = p; q != NULL; q = q->next) { for(q = p; q != NULL; q = q->next) {
memcpy(txbuffer->raw, q->payload, q->len); memcpy(txbuffer->raw, q->payload, q->len);
txbuffer += q->len; txbuffer += q->len;
txlen += q->len; txlen += q->len;
} }
ethmac_sram_reader_slot_write(txslot); ethmac_sram_reader_slot_write(txslot);
ethmac_sram_reader_length_write(txlen); ethmac_sram_reader_length_write(txlen);
while(!(ethmac_sram_reader_ready_read())); while(!ethmac_sram_reader_ready_read());
ethmac_sram_reader_start_write(1); ethmac_sram_reader_start_write(1);
txslot = (txslot+1)%2; txslot = (txslot + 1) % 2;
if (txslot) if(txslot)
txbuffer = txbuffer1; txbuffer = txbuffer1;
else else
txbuffer = txbuffer0; txbuffer = txbuffer0;
return ERR_OK; return ERR_OK;
} }
static struct pbuf * liteeth_low_level_input(struct netif *netif) static struct pbuf *liteeth_low_level_input(struct netif *netif)
{ {
struct pbuf *p, *q; struct pbuf *p, *q;
rxslot = ethmac_sram_writer_slot_read(); rxslot = ethmac_sram_writer_slot_read();
rxlen = ethmac_sram_writer_length_read(); rxlen = ethmac_sram_writer_length_read();
if (rxslot) if(rxslot)
rxbuffer = rxbuffer1; rxbuffer = rxbuffer1;
else else
rxbuffer = rxbuffer0; rxbuffer = rxbuffer0;
p = pbuf_alloc(PBUF_RAW, rxlen, PBUF_POOL); p = pbuf_alloc(PBUF_RAW, rxlen, PBUF_POOL);
if (p != NULL) { if(p != NULL) {
for(q = p; q != NULL; q = q->next) { for(q = p; q != NULL; q = q->next) {
memcpy(q->payload, rxbuffer->raw, q->len); memcpy(q->payload, rxbuffer->raw, q->len);
rxbuffer += q->len; rxbuffer += q->len;
}
} }
}
return p; return p;
} }
void liteeth_input(struct netif *netif) void liteeth_input(struct netif *netif)
{ {
struct pbuf *p; struct pbuf *p;
p = liteeth_low_level_input(netif); p = liteeth_low_level_input(netif);
if (p != NULL) { if(p != NULL)
netif->input(p, netif); netif->input(p, netif);
}
} }
err_t liteeth_init(struct netif *netif) err_t liteeth_init(struct netif *netif)
{ {
struct liteethif *liteethif; struct liteethif *liteethif;
liteethif = mem_malloc(sizeof(struct liteethif)); liteethif = mem_malloc(sizeof(struct liteethif));
if (liteethif == NULL) if(liteethif == NULL)
return ERR_MEM; return ERR_MEM;
netif->state = liteethif; netif->state = liteethif;
netif->hwaddr_len = 6; netif->hwaddr_len = 6;
netif->name[0] = IFNAME0; netif->name[0] = IFNAME0;
netif->name[1] = IFNAME1; netif->name[1] = IFNAME1;
netif->output = etharp_output; netif->output = etharp_output;
netif->linkoutput = liteeth_low_level_output; netif->linkoutput = liteeth_low_level_output;
netif->mtu = 1514; netif->mtu = 1514;
liteethif->ethaddr = (struct eth_addr *)&(netif->hwaddr[0]); liteethif->ethaddr = (struct eth_addr *)&(netif->hwaddr[0]);
liteeth_low_level_init(netif); liteeth_low_level_init(netif);
return ERR_OK; return ERR_OK;
} }