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