software: add uip (contiki) port (tested on lm32 and mor1kx)
This commit is contained in:
parent
0688532619
commit
2b84ec066a
|
@ -0,0 +1,76 @@
|
||||||
|
# XXX remove this
|
||||||
|
MSCDIR=../../../../misoc
|
||||||
|
include $(MSCDIR)/software/common.mak
|
||||||
|
|
||||||
|
UIPDIR=../uip
|
||||||
|
LIBUIPDIR=../libuip
|
||||||
|
|
||||||
|
CFLAGS += $(CPPFLAGS) -I. \
|
||||||
|
-I$(UIPDIR) \
|
||||||
|
-I$(UIPDIR)/net \
|
||||||
|
-I$(UIPDIR)/net\ip \
|
||||||
|
-I$(UIPDIR)/net\ipv4 \
|
||||||
|
-Wno-char-subscripts \
|
||||||
|
-fno-strict-aliasing -fpack-struct
|
||||||
|
|
||||||
|
#See here for-fno-strict-aliasing -fpack-struct:
|
||||||
|
#http://sourceforge.net/p/contiki/mailman/message/28002063/
|
||||||
|
|
||||||
|
CCDEP=$(CC)
|
||||||
|
|
||||||
|
UIPCOREOBJS=$(UIPDIR)/net/ip/dhcpc.o \
|
||||||
|
$(UIPDIR)/net/ip/psock.o \
|
||||||
|
$(UIPDIR)/net/ip/resolv.o \
|
||||||
|
$(UIPDIR)/net/ip/simple-udp.o \
|
||||||
|
$(UIPDIR)/net/ip/slipdev.o \
|
||||||
|
$(UIPDIR)/net/ip/tcpip.o \
|
||||||
|
$(UIPDIR)/net/ip/tcp-socket.o \
|
||||||
|
$(UIPDIR)/net/ip/udp-socket.o \
|
||||||
|
$(UIPDIR)/net/ip/uip-debug.o \
|
||||||
|
$(UIPDIR)/net/ip/uiplib.o \
|
||||||
|
$(UIPDIR)/net/ip/uip-packetqueue.o \
|
||||||
|
$(UIPDIR)/net/ip/uip-split.o \
|
||||||
|
$(UIPDIR)/net/ip/uip-udp-packet.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uaodv.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uaodv-rt.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uip.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uip_arp.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uip-fw.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uip-fw-drv.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uip-neighbor.o \
|
||||||
|
$(UIPDIR)/net/ipv4/uip-over-mesh.o \
|
||||||
|
$(UIPDIR)/net/linkaddr.o \
|
||||||
|
$(UIPDIR)/net/nbr-table.o \
|
||||||
|
$(UIPDIR)/net/netstack.o \
|
||||||
|
$(UIPDIR)/net/packetbuf.o \
|
||||||
|
$(UIPDIR)/net/queuebuf.o \
|
||||||
|
$(UIPDIR)/sys/process.o \
|
||||||
|
$(UIPDIR)/sys/etimer.o \
|
||||||
|
$(UIPDIR)/sys/timer.o \
|
||||||
|
$(UIPDIR)/lib/list.o
|
||||||
|
|
||||||
|
UIPARCHOBJS=clock-arch.o \
|
||||||
|
rtimer-arch.o \
|
||||||
|
liteethmac-drv.o
|
||||||
|
|
||||||
|
UIPOBJS=$(UIPCOREOBJS) $(UIPARCHOBJS)
|
||||||
|
OBJS_LIB+=$(UIPOBJS)
|
||||||
|
|
||||||
|
UIPLIB=libuip.a
|
||||||
|
|
||||||
|
all: $(UIPLIB)
|
||||||
|
|
||||||
|
.PHONY: all compile clean
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(compile-dep)
|
||||||
|
|
||||||
|
%.o: %.S
|
||||||
|
$(assemble)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(UIPOBJS) $(UIPOBJS:.o=.d) libuip.a
|
||||||
|
|
||||||
|
libuip.a: $(UIPOBJS)
|
||||||
|
$(AR) clr libuip.a $(UIPOBJS)
|
||||||
|
$(RANLIB) libuip.a
|
|
@ -0,0 +1,29 @@
|
||||||
|
// This file is Copyright (c) 2015 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||||
|
// License: BSD
|
||||||
|
|
||||||
|
#include "contiki-conf.h"
|
||||||
|
#include "clock-arch.h"
|
||||||
|
#include <generated/csr.h>
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
void clock_init(void)
|
||||||
|
{
|
||||||
|
timer0_en_write(0);
|
||||||
|
timer0_load_write(0xffffffff);
|
||||||
|
timer0_reload_write(0xffffffff);
|
||||||
|
timer0_en_write(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
clock_time_t clock_time(void)
|
||||||
|
{
|
||||||
|
unsigned int freq;
|
||||||
|
unsigned int prescaler;
|
||||||
|
clock_time_t ticks;
|
||||||
|
|
||||||
|
freq = identifier_frequency_read();
|
||||||
|
prescaler = freq/CLOCK_CONF_SECOND;
|
||||||
|
timer0_update_value_write(1);
|
||||||
|
ticks = (0xffffffff - timer0_value_read())/prescaler;
|
||||||
|
return ticks;
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
// This file is Copyright (c) 2015 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||||
|
// License: BSD
|
||||||
|
|
||||||
|
#ifndef __CLOCK_ARCH_H__
|
||||||
|
#define __CLOCK_ARCH_H__
|
||||||
|
|
||||||
|
void clock_init(void);
|
||||||
|
clock_time_t clock_time(void);
|
||||||
|
|
||||||
|
#endif /* __CLOCK_ARCH_H__ */
|
|
@ -0,0 +1,38 @@
|
||||||
|
#ifndef CONTIKI_CONF_H__
|
||||||
|
#define CONTIKI_CONF_H__
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define CCIF
|
||||||
|
#define CLIF
|
||||||
|
|
||||||
|
#define NETSTACK_CONF_WITH_IPV4 1
|
||||||
|
#define WITH_ASCII 1
|
||||||
|
|
||||||
|
#define CLOCK_CONF_SECOND 128
|
||||||
|
|
||||||
|
typedef unsigned char u8_t;
|
||||||
|
typedef unsigned short u16_t;
|
||||||
|
typedef unsigned int u32_t;
|
||||||
|
typedef char s8_t;
|
||||||
|
typedef short s16_t;
|
||||||
|
typedef int s32_t;
|
||||||
|
|
||||||
|
typedef unsigned int clock_time_t;
|
||||||
|
typedef unsigned int uip_stats_t;
|
||||||
|
|
||||||
|
#ifndef BV
|
||||||
|
#define BV(x) (1<<(x))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* uIP configuration */
|
||||||
|
#define UIP_CONF_BYTE_ORDER UIP_BIG_ENDIAN
|
||||||
|
#define UIP_CONF_LLH_LEN 14
|
||||||
|
#define UIP_CONF_BROADCAST 1
|
||||||
|
#define UIP_CONF_LOGGING 1
|
||||||
|
#define UIP_CONF_BUFFER_SIZE 116
|
||||||
|
|
||||||
|
#define UIP_CONF_TCP_FORWARD 1
|
||||||
|
|
||||||
|
#endif /* CONTIKI_CONF_H__ */
|
|
@ -0,0 +1,90 @@
|
||||||
|
// This file is Copyright (c) 2015 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||||
|
// License: BSD
|
||||||
|
|
||||||
|
#include "net/ip/uip.h"
|
||||||
|
#include "net/ip/uipopt.h"
|
||||||
|
#include "liteethmac-drv.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <system.h>
|
||||||
|
#include <hw/flags.h>
|
||||||
|
#include <hw/ethmac_mem.h>
|
||||||
|
#include <console.h>
|
||||||
|
#include <generated/csr.h>
|
||||||
|
|
||||||
|
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||||
|
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
unsigned char raw[1514];
|
||||||
|
} ethernet_buffer;
|
||||||
|
|
||||||
|
static unsigned int rxslot;
|
||||||
|
static unsigned int rxlen;
|
||||||
|
static ethernet_buffer *rxbuffer;
|
||||||
|
static ethernet_buffer *rxbuffer0;
|
||||||
|
static ethernet_buffer *rxbuffer1;
|
||||||
|
static unsigned int txslot;
|
||||||
|
static unsigned int txlen;
|
||||||
|
static ethernet_buffer *txbuffer;
|
||||||
|
static ethernet_buffer *txbuffer0;
|
||||||
|
static ethernet_buffer *txbuffer1;
|
||||||
|
|
||||||
|
void liteethmac_init(void)
|
||||||
|
{
|
||||||
|
ethmac_sram_reader_ev_pending_write(ETHMAC_EV_SRAM_READER);
|
||||||
|
ethmac_sram_writer_ev_pending_write(ETHMAC_EV_SRAM_WRITER);
|
||||||
|
|
||||||
|
rxbuffer0 = (ethernet_buffer *)ETHMAC_RX0_BASE;
|
||||||
|
rxbuffer1 = (ethernet_buffer *)ETHMAC_RX1_BASE;
|
||||||
|
txbuffer0 = (ethernet_buffer *)ETHMAC_TX0_BASE;
|
||||||
|
txbuffer1 = (ethernet_buffer *)ETHMAC_TX1_BASE;
|
||||||
|
|
||||||
|
rxslot = 0;
|
||||||
|
txslot = 0;
|
||||||
|
|
||||||
|
rxbuffer = rxbuffer0;
|
||||||
|
txbuffer = txbuffer0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t liteethmac_poll(void)
|
||||||
|
{
|
||||||
|
if(ethmac_sram_writer_ev_pending_read() & ETHMAC_EV_SRAM_WRITER) {
|
||||||
|
rxslot = ethmac_sram_writer_slot_read();
|
||||||
|
rxlen = ethmac_sram_writer_length_read();
|
||||||
|
if (rxslot)
|
||||||
|
rxbuffer = rxbuffer1;
|
||||||
|
else
|
||||||
|
rxbuffer = rxbuffer0;
|
||||||
|
memcpy(uip_buf, rxbuffer, rxlen);
|
||||||
|
uip_len = rxlen;
|
||||||
|
ethmac_sram_writer_ev_pending_write(ETHMAC_EV_SRAM_WRITER);
|
||||||
|
return rxlen;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void liteethmac_send(void)
|
||||||
|
{
|
||||||
|
txlen = uip_len;
|
||||||
|
memset(txbuffer, 0, 60);
|
||||||
|
txlen = MIN(txlen, 1514);
|
||||||
|
memcpy(txbuffer, uip_buf, txlen);
|
||||||
|
txlen = MAX(txlen, 60);
|
||||||
|
ethmac_sram_reader_slot_write(txslot);
|
||||||
|
ethmac_sram_reader_length_write(txlen);
|
||||||
|
while(!(ethmac_sram_reader_ready_read()));
|
||||||
|
ethmac_sram_reader_start_write(1);
|
||||||
|
|
||||||
|
txslot = (txslot+1)%2;
|
||||||
|
if (txslot)
|
||||||
|
txbuffer = txbuffer1;
|
||||||
|
else
|
||||||
|
txbuffer = txbuffer0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void liteethmac_exit(void)
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// This file is Copyright (c) 2015 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||||
|
// License: BSD
|
||||||
|
#ifndef __LITEETHMAC_H__
|
||||||
|
#define __LITEETHMAC_H__
|
||||||
|
|
||||||
|
void liteethmac_init(void);
|
||||||
|
uint16_t liteethmac_poll(void);
|
||||||
|
void liteethmac_send(void);
|
||||||
|
void liteethmac_exit(void);
|
||||||
|
|
||||||
|
#endif /* __LITEETHMAC_H__ */
|
|
@ -0,0 +1,38 @@
|
||||||
|
#include "contiki.h"
|
||||||
|
|
||||||
|
#include <sys/rtimer.h>
|
||||||
|
#include <sys/clock.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define RTIMER_DEBUG
|
||||||
|
|
||||||
|
void rtimer_callback(void)
|
||||||
|
{
|
||||||
|
#ifdef RTIMER_DEBUG
|
||||||
|
printf("XXX rtimer_callback");
|
||||||
|
#endif
|
||||||
|
rtimer_run_next();
|
||||||
|
}
|
||||||
|
|
||||||
|
void rtimer_arch_init(void)
|
||||||
|
{
|
||||||
|
#ifdef RTIMER_DEBUG
|
||||||
|
printf("XXX rtimer_arch_init");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
rtimer_clock_t rtimer_arch_now(void)
|
||||||
|
{
|
||||||
|
#ifdef RTIMER_DEBUG
|
||||||
|
printf("XXX rtimer_arch_now");
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rtimer_arch_schedule(rtimer_clock_t t)
|
||||||
|
{
|
||||||
|
#ifdef RTIMER_DEBUG
|
||||||
|
printf("XXX rtimer_arch_schedule");
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef RTIMER_ARCH_H_
|
||||||
|
#define RTIMER_ARCH_H_
|
||||||
|
|
||||||
|
#include "contiki-conf.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void rtimer_callback(void);
|
||||||
|
void rtimer_arch_init(void);
|
||||||
|
rtimer_clock_t rtimer_arch_now(void);
|
||||||
|
void rtimer_arch_schedule(rtimer_clock_t t);
|
||||||
|
#define RTIMER_ARCH_SECOND 312500
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @} */
|
Loading…
Reference in New Issue