software/bios: rename libnet to libliteeth and move all ethernet files to it.

This commit is contained in:
Florent Kermarrec 2020-05-18 21:04:54 +02:00
parent 56b8723b72
commit 70a67ce7ed
11 changed files with 76 additions and 71 deletions

View File

@ -25,7 +25,7 @@ __all__ = ["soc_software_packages", "soc_directory",
soc_software_packages = [ soc_software_packages = [
"libcompiler_rt", "libcompiler_rt",
"libbase", "libbase",
"libnet", "libliteeth",
"bios" "bios"
] ]

View File

@ -59,15 +59,15 @@ endif
bios.elf: $(BIOS_DIRECTORY)/linker.ld $(OBJECTS) bios.elf: $(BIOS_DIRECTORY)/linker.ld $(OBJECTS)
%.elf: ../libbase/crt0-ctr.o ../libnet/libnet.a ../libbase/libbase-nofloat.a ../libcompiler_rt/libcompiler_rt.a %.elf: ../libbase/crt0-ctr.o ../libliteeth/libliteeth.a ../libbase/libbase-nofloat.a ../libcompiler_rt/libcompiler_rt.a
$(LD) $(LDFLAGS) -T $(BIOS_DIRECTORY)/linker.ld -N -o $@ \ $(LD) $(LDFLAGS) -T $(BIOS_DIRECTORY)/linker.ld -N -o $@ \
../libbase/crt0-ctr.o \ ../libbase/crt0-ctr.o \
$(OBJECTS) \ $(OBJECTS) \
-L../libnet \ -L../libliteeth \
-L../libbase \ -L../libbase \
-L../libcompiler_rt \ -L../libcompiler_rt \
$(BP_LIBS) \ $(BP_LIBS) \
-lnet -lbase-nofloat -lcompiler_rt \ -lliteeth -lbase-nofloat -lcompiler_rt \
$(BP_FLAGS) $(BP_FLAGS)
ifneq ($(OS),Windows_NT) ifneq ($(OS),Windows_NT)

View File

@ -21,8 +21,8 @@
#include <generated/soc.h> #include <generated/soc.h>
#ifdef CSR_ETHMAC_BASE #ifdef CSR_ETHMAC_BASE
#include <net/microudp.h> #include <udp.h>
#include <net/tftp.h> #include <tftp.h>
#endif #endif
#ifdef CSR_SPIFLASH_BASE #ifdef CSR_SPIFLASH_BASE
@ -340,7 +340,7 @@ void netboot(void)
ip = IPTOINT(REMOTEIP1, REMOTEIP2, REMOTEIP3, REMOTEIP4); ip = IPTOINT(REMOTEIP1, REMOTEIP2, REMOTEIP3, REMOTEIP4);
microudp_start(macadr, IPTOINT(LOCALIP1, LOCALIP2, LOCALIP3, LOCALIP4)); udp_start(macadr, IPTOINT(LOCALIP1, LOCALIP2, LOCALIP3, LOCALIP4));
tftp_port = TFTP_SERVER_PORT; tftp_port = TFTP_SERVER_PORT;
printf("Fetching from: UDP/%d\n", tftp_port); printf("Fetching from: UDP/%d\n", tftp_port);

View File

@ -30,7 +30,7 @@
#include <generated/git.h> #include <generated/git.h>
#ifdef CSR_ETHMAC_BASE #ifdef CSR_ETHMAC_BASE
#include <net/microudp.h> #include "udp.h"
#endif #endif
#ifdef CSR_SPIFLASH_BASE #ifdef CSR_SPIFLASH_BASE

View File

@ -45,7 +45,12 @@ DEPFLAGS += -MD -MP
# Toolchain options # Toolchain options
# #
INCLUDES = -I$(SOC_DIRECTORY)/software/include/base -I$(SOC_DIRECTORY)/software/include -I$(SOC_DIRECTORY)/common -I$(BUILDINC_DIRECTORY) -I$(CPU_DIRECTORY) INCLUDES = -I$(SOC_DIRECTORY)/software/include/base \
-I$(SOC_DIRECTORY)/software/include \
-I$(SOC_DIRECTORY)/common \
-I$(BUILDINC_DIRECTORY) \
-I$(CPU_DIRECTORY) \
-I$(SOC_DIRECTORY)/software/libliteeth
COMMONFLAGS = $(DEPFLAGS) -Os $(CPUFLAGS) -g3 -fomit-frame-pointer -Wall -fno-builtin -nostdinc $(INCLUDES) COMMONFLAGS = $(DEPFLAGS) -Os $(CPUFLAGS) -g3 -fomit-frame-pointer -Wall -fno-builtin -nostdinc $(INCLUDES)
CFLAGS = $(COMMONFLAGS) -fexceptions -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes CFLAGS = $(COMMONFLAGS) -fexceptions -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes
CXXFLAGS = $(COMMONFLAGS) -std=c++11 -I$(SOC_DIRECTORY)/software/include/basec++ -fexceptions -fno-rtti -ffreestanding CXXFLAGS = $(COMMONFLAGS) -std=c++11 -I$(SOC_DIRECTORY)/software/include/basec++ -fexceptions -fno-rtti -ffreestanding

View File

@ -1,20 +0,0 @@
#ifndef __MICROUDP_H
#define __MICROUDP_H
#define IPTOINT(a, b, c, d) ((a << 24)|(b << 16)|(c << 8)|d)
#define MICROUDP_BUFSIZE (5*1532)
typedef void (*udp_callback)(unsigned int src_ip, unsigned short src_port, unsigned short dst_port, void *data, unsigned int length);
void microudp_start(const unsigned char *macaddr, unsigned int ip);
int microudp_arp_resolve(unsigned int ip);
void *microudp_get_tx_buffer(void);
int microudp_send(unsigned short src_port, unsigned short dst_port, unsigned int length);
void microudp_set_callback(udp_callback callback);
void microudp_service(void);
void eth_init(void);
void eth_mode(void);
#endif /* __MICROUDP_H */

View File

@ -1,17 +1,17 @@
include ../include/generated/variables.mak include ../include/generated/variables.mak
include $(SOC_DIRECTORY)/software/common.mak include $(SOC_DIRECTORY)/software/common.mak
OBJECTS=microudp.o tftp.o OBJECTS=udp.o tftp.o
all: libnet.a all: libliteeth.a
libnet.a: $(OBJECTS) libliteeth.a: $(OBJECTS)
$(AR) crs libnet.a $(OBJECTS) $(AR) crs libliteeth.a $(OBJECTS)
# pull in dependency info for *existing* .o files # pull in dependency info for *existing* .o files
-include $(OBJECTS:.o=.d) -include $(OBJECTS:.o=.d)
%.o: $(LIBNET_DIRECTORY)/%.c %.o: $(LIBLITEETH_DIRECTORY)/%.c
$(compile) $(compile)
%.o: %.S %.o: %.S
@ -20,4 +20,4 @@ libnet.a: $(OBJECTS)
.PHONY: all clean .PHONY: all clean
clean: clean:
$(RM) $(OBJECTS) libnet.a .*~ *~ $(RM) $(OBJECTS) libliteeth.a .*~ *~

View File

@ -10,8 +10,8 @@
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include <net/microudp.h> #include "udp.h"
#include <net/tftp.h> #include "tftp.h"
/* Local TFTP client port (arbitrary) */ /* Local TFTP client port (arbitrary) */
#define PORT_IN 7642 #define PORT_IN 7642
@ -99,9 +99,9 @@ static void rx_callback(uint32_t src_ip, uint16_t src_port,
if(length < BLOCK_SIZE) if(length < BLOCK_SIZE)
transfer_finished = 1; transfer_finished = 1;
packet_data = microudp_get_tx_buffer(); packet_data = udp_get_tx_buffer();
length = format_ack(packet_data, block); length = format_ack(packet_data, block);
microudp_send(PORT_IN, src_port, length); udp_send(PORT_IN, src_port, length);
} }
if(opcode == TFTP_ERROR) { /* Error */ if(opcode == TFTP_ERROR) { /* Error */
total_length = -1; total_length = -1;
@ -118,10 +118,10 @@ int tftp_get(uint32_t ip, uint16_t server_port, const char *filename,
int length_before; int length_before;
int spin = 0; int spin = 0;
if(!microudp_arp_resolve(ip)) if(!udp_arp_resolve(ip))
return -1; return -1;
microudp_set_callback(rx_callback); udp_set_callback(rx_callback);
dst_buffer = buffer; dst_buffer = buffer;
@ -129,17 +129,17 @@ int tftp_get(uint32_t ip, uint16_t server_port, const char *filename,
transfer_finished = 0; transfer_finished = 0;
tries = 5; tries = 5;
while(1) { while(1) {
packet_data = microudp_get_tx_buffer(); packet_data = udp_get_tx_buffer();
len = format_request(packet_data, TFTP_RRQ, filename); len = format_request(packet_data, TFTP_RRQ, filename);
microudp_send(PORT_IN, server_port, len); udp_send(PORT_IN, server_port, len);
for(i=0;i<2000000;i++) { for(i=0;i<2000000;i++) {
microudp_service(); udp_service();
if((total_length > 0) || transfer_finished) break; if((total_length > 0) || transfer_finished) break;
} }
if((total_length > 0) || transfer_finished) break; if((total_length > 0) || transfer_finished) break;
tries--; tries--;
if(tries == 0) { if(tries == 0) {
microudp_set_callback(NULL); udp_set_callback(NULL);
return -1; return -1;
} }
} }
@ -156,13 +156,13 @@ int tftp_get(uint32_t ip, uint16_t server_port, const char *filename,
} }
} }
if(i-- == 0) { if(i-- == 0) {
microudp_set_callback(NULL); udp_set_callback(NULL);
return -1; return -1;
} }
microudp_service(); udp_service();
} }
microudp_set_callback(NULL); udp_set_callback(NULL);
return total_length; return total_length;
} }
@ -175,23 +175,23 @@ int tftp_put(uint32_t ip, uint16_t server_port, const char *filename,
int i; int i;
int block = 0, sent = 0; int block = 0, sent = 0;
if(!microudp_arp_resolve(ip)) if(!udp_arp_resolve(ip))
return -1; return -1;
microudp_set_callback(rx_callback); udp_set_callback(rx_callback);
packet_data = microudp_get_tx_buffer(); packet_data = udp_get_tx_buffer();
total_length = 0; total_length = 0;
transfer_finished = 0; transfer_finished = 0;
tries = 5; tries = 5;
while(1) { while(1) {
packet_data = microudp_get_tx_buffer(); packet_data = udp_get_tx_buffer();
len = format_request(packet_data, TFTP_WRQ, filename); len = format_request(packet_data, TFTP_WRQ, filename);
microudp_send(PORT_IN, server_port, len); udp_send(PORT_IN, server_port, len);
for(i=0;i<2000000;i++) { for(i=0;i<2000000;i++) {
last_ack = -1; last_ack = -1;
microudp_service(); udp_service();
if(last_ack == block) if(last_ack == block)
goto send_data; goto send_data;
if(transfer_finished) if(transfer_finished)
@ -208,11 +208,11 @@ send_data:
send = sent+BLOCK_SIZE > size ? size-sent : BLOCK_SIZE; send = sent+BLOCK_SIZE > size ? size-sent : BLOCK_SIZE;
tries = 5; tries = 5;
while(1) { while(1) {
packet_data = microudp_get_tx_buffer(); packet_data = udp_get_tx_buffer();
len = format_data(packet_data, block, buffer, send); len = format_data(packet_data, block, buffer, send);
microudp_send(PORT_IN, data_port, len); udp_send(PORT_IN, data_port, len);
for(i=0;i<12000000;i++) { for(i=0;i<12000000;i++) {
microudp_service(); udp_service();
if(transfer_finished) if(transfer_finished)
goto fail; goto fail;
if(last_ack == block) if(last_ack == block)
@ -226,11 +226,11 @@ next:
buffer += send; buffer += send;
} while (send == BLOCK_SIZE); } while (send == BLOCK_SIZE);
microudp_set_callback(NULL); udp_set_callback(NULL);
return sent; return sent;
fail: fail:
microudp_set_callback(NULL); udp_set_callback(NULL);
return -1; return -1;
} }

View File

@ -16,10 +16,10 @@
#include <crc.h> #include <crc.h>
#include <hw/flags.h> #include <hw/flags.h>
#include <net/microudp.h> #include "udp.h"
//#define DEBUG_MICROUDP_TX //#define DEBUG_UDP_TX
//#define DEBUG_MICROUDP_RX //#define DEBUG_UDP_RX
#define ETHERTYPE_ARP 0x0806 #define ETHERTYPE_ARP 0x0806
#define ETHERTYPE_IP 0x0800 #define ETHERTYPE_IP 0x0800
@ -145,7 +145,7 @@ static void send_packet(void)
txlen += 4; txlen += 4;
#endif #endif
#ifdef DEBUG_MICROUDP_TX #ifdef DEBUG_LITEETH_UDP_TX
int j; int j;
printf(">>>> txlen : %d\n", txlen); printf(">>>> txlen : %d\n", txlen);
for(j=0;j<txlen;j++) for(j=0;j<txlen;j++)
@ -217,7 +217,7 @@ static void process_arp(void)
static const unsigned char broadcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static const unsigned char broadcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
int microudp_arp_resolve(unsigned int ip) int udp_arp_resolve(unsigned int ip)
{ {
struct arp_frame *arp; struct arp_frame *arp;
int i; int i;
@ -256,7 +256,7 @@ int microudp_arp_resolve(unsigned int ip)
/* Do we get a reply ? */ /* Do we get a reply ? */
for(timeout=0;timeout<100000;timeout++) { for(timeout=0;timeout<100000;timeout++) {
microudp_service(); udp_service();
for(i=0;i<6;i++) for(i=0;i<6;i++)
if(cached_mac[i]) return 1; if(cached_mac[i]) return 1;
} }
@ -288,7 +288,7 @@ static unsigned short ip_checksum(unsigned int r, void *buffer, unsigned int len
return r; return r;
} }
void *microudp_get_tx_buffer(void) void *udp_get_tx_buffer(void)
{ {
return txbuffer->frame.contents.udp.payload; return txbuffer->frame.contents.udp.payload;
} }
@ -301,7 +301,7 @@ struct pseudo_header {
unsigned short length; unsigned short length;
} __attribute__((packed)); } __attribute__((packed));
int microudp_send(unsigned short src_port, unsigned short dst_port, unsigned int length) int udp_send(unsigned short src_port, unsigned short dst_port, unsigned int length)
{ {
struct pseudo_header h; struct pseudo_header h;
unsigned int r; unsigned int r;
@ -373,7 +373,7 @@ static void process_ip(void)
udp_ip->payload, ntohs(udp_ip->udp.length)-sizeof(struct udp_header)); udp_ip->payload, ntohs(udp_ip->udp.length)-sizeof(struct udp_header));
} }
void microudp_set_callback(udp_callback callback) void udp_set_callback(udp_callback callback)
{ {
rx_callback = callback; rx_callback = callback;
} }
@ -382,7 +382,7 @@ static void process_frame(void)
{ {
flush_cpu_dcache(); flush_cpu_dcache();
#ifdef DEBUG_MICROUDP_RX #ifdef DEBUG_LITEETH_UDP_RX
int j; int j;
printf("<<< rxlen : %d\n", rxlen); printf("<<< rxlen : %d\n", rxlen);
for(j=0;j<rxlen;j++) for(j=0;j<rxlen;j++)
@ -414,7 +414,7 @@ static void process_frame(void)
else if(ntohs(rxbuffer->frame.eth_header.ethertype) == ETHERTYPE_IP) process_ip(); else if(ntohs(rxbuffer->frame.eth_header.ethertype) == ETHERTYPE_IP) process_ip();
} }
void microudp_start(const unsigned char *macaddr, unsigned int ip) void udp_start(const unsigned char *macaddr, unsigned int ip)
{ {
int i; int i;
ethmac_sram_reader_ev_pending_write(ETHMAC_EV_SRAM_READER); ethmac_sram_reader_ev_pending_write(ETHMAC_EV_SRAM_READER);
@ -437,7 +437,7 @@ void microudp_start(const unsigned char *macaddr, unsigned int ip)
rx_callback = (udp_callback)0; rx_callback = (udp_callback)0;
} }
void microudp_service(void) void udp_service(void)
{ {
if(ethmac_sram_writer_ev_pending_read() & ETHMAC_EV_SRAM_WRITER) { if(ethmac_sram_writer_ev_pending_read() & ETHMAC_EV_SRAM_WRITER) {
rxslot = ethmac_sram_writer_slot_read(); rxslot = ethmac_sram_writer_slot_read();

View File

@ -0,0 +1,20 @@
#ifndef __UDP_H
#define __UDP_H
#define IPTOINT(a, b, c, d) ((a << 24)|(b << 16)|(c << 8)|d)
#define UDP_BUFSIZE (5*1532)
typedef void (*udp_callback)(unsigned int src_ip, unsigned short src_port, unsigned short dst_port, void *data, unsigned int length);
void udp_start(const unsigned char *macaddr, unsigned int ip);
int udp_arp_resolve(unsigned int ip);
void *udp_get_tx_buffer(void);
int udp_send(unsigned short src_port, unsigned short dst_port, unsigned int length);
void udp_set_callback(udp_callback callback);
void udp_service(void);
void eth_init(void);
void eth_mode(void);
#endif /* __UDP_H */