forked from Imagelibrary/rtems
Patch from Eric Valette <valette@crf.canon.fr> and Emmanuel Raguet
<raguet@crf.canon.fr> to make their patches work together.
This commit is contained in:
@@ -11,7 +11,11 @@ PROJECT_ROOT = @PROJECT_ROOT@
|
||||
include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
|
||||
include $(RTEMS_ROOT)/make/directory.cfg
|
||||
|
||||
# We only build the Network library if HAS_KA9Q was defined
|
||||
NETWORK_yes_V = network
|
||||
NETWORK = $(NETWORK_$(HAS_KA9Q)_V)
|
||||
|
||||
# wrapup is the one that actually builds and installs the library
|
||||
# from the individual .rel files built in other directories
|
||||
SUB_DIRS=include tools start startup clock console timer pc386dev network \
|
||||
SUB_DIRS=include tools start startup clock console timer pc386dev $(NETWORK) \
|
||||
wrapup
|
||||
|
||||
@@ -8,8 +8,13 @@ VPATH = @srcdir@
|
||||
RTEMS_ROOT = @top_srcdir@
|
||||
PROJECT_ROOT = @PROJECT_ROOT@
|
||||
|
||||
# We only install wd80x3.h if HAS_KA9Q was defined
|
||||
WD80X3_yes_V = $(srcdir)/wd80x3.h
|
||||
WD80X3 = $(WD80X3_$(HAS_KA9Q)_V)
|
||||
|
||||
H_FILES = $(srcdir)/bsp.h $(srcdir)/coverhd.h $(srcdir)/crt.h \
|
||||
$(srcdir)/pc386uart.h $(srcdir)/pcibios.h $(srcdir)/wd80x3.h
|
||||
$(srcdir)/pc386uart.h $(srcdir)/pcibios.h \
|
||||
$(WD80X3)
|
||||
|
||||
#
|
||||
# Equate files are for including from assembly preprocessed by
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <ka9q/trace.h>
|
||||
#include <ka9q/commands.h>
|
||||
#include <ka9q/domain.h>
|
||||
#include "irq.h"
|
||||
#include <irq.h>
|
||||
|
||||
#define ET_MINLEN 60 /* minimum message length */
|
||||
|
||||
@@ -49,41 +49,41 @@
|
||||
* Hardware-specific storage
|
||||
*/
|
||||
typedef struct {
|
||||
struct mbuf **rxMbuf;
|
||||
struct mbuf **txMbuf;
|
||||
unsigned int port;
|
||||
char *base;
|
||||
unsigned long bpar;
|
||||
unsigned int irno;
|
||||
int rxBdCount;
|
||||
int txBdCount;
|
||||
int txBdHead;
|
||||
int txBdTail;
|
||||
int txBdActiveCount;
|
||||
struct iface *iface;
|
||||
rtems_id txWaitTid;
|
||||
rtems_irq_connect_data irqInfo;
|
||||
struct mbuf **rxMbuf;
|
||||
struct mbuf **txMbuf;
|
||||
unsigned int port;
|
||||
unsigned char *base;
|
||||
unsigned long bpar;
|
||||
int rxBdCount;
|
||||
int txBdCount;
|
||||
int txBdHead;
|
||||
int txBdTail;
|
||||
int txBdActiveCount;
|
||||
struct iface *iface;
|
||||
rtems_id txWaitTid;
|
||||
|
||||
/*
|
||||
* Statistics
|
||||
*/
|
||||
unsigned long rxInterrupts;
|
||||
unsigned long rxNotFirst;
|
||||
unsigned long rxNotLast;
|
||||
unsigned long rxGiant;
|
||||
unsigned long rxNonOctet;
|
||||
unsigned long rxRunt;
|
||||
unsigned long rxBadCRC;
|
||||
unsigned long rxOverrun;
|
||||
unsigned long rxCollision;
|
||||
unsigned long rxInterrupts;
|
||||
unsigned long rxNotFirst;
|
||||
unsigned long rxNotLast;
|
||||
unsigned long rxGiant;
|
||||
unsigned long rxNonOctet;
|
||||
unsigned long rxRunt;
|
||||
unsigned long rxBadCRC;
|
||||
unsigned long rxOverrun;
|
||||
unsigned long rxCollision;
|
||||
|
||||
unsigned long txInterrupts;
|
||||
unsigned long txDeferred;
|
||||
unsigned long txHeartbeat;
|
||||
unsigned long txLateCollision;
|
||||
unsigned long txRetryLimit;
|
||||
unsigned long txUnderrun;
|
||||
unsigned long txLostCarrier;
|
||||
unsigned long txRawWait;
|
||||
unsigned long txInterrupts;
|
||||
unsigned long txDeferred;
|
||||
unsigned long txHeartbeat;
|
||||
unsigned long txLateCollision;
|
||||
unsigned long txRetryLimit;
|
||||
unsigned long txUnderrun;
|
||||
unsigned long txLostCarrier;
|
||||
unsigned long txRawWait;
|
||||
}wd80x3EnetDriver;
|
||||
|
||||
#define RO 0x10
|
||||
@@ -98,10 +98,12 @@ static unsigned long loopc;
|
||||
static wd80x3EnetDriver wd8003EnetDriver[NSCCDRIVER];
|
||||
|
||||
/*
|
||||
* WD8003 interrupt handler
|
||||
* WD8003 interrupt handler. The code as it is cleraly showes that
|
||||
* only one driver is connected. In order to change this a table
|
||||
* making the correspondance between the current irq number and
|
||||
* the corresponding wd8003EnetDriver structure could be used...
|
||||
*/
|
||||
static rtems_isr
|
||||
wd8003Enet_interrupt_handler (rtems_vector_number v)
|
||||
static void wd8003Enet_interrupt_handler ()
|
||||
{
|
||||
unsigned int tport, nowTicks, bootTicks;
|
||||
unsigned char status, status2;
|
||||
@@ -116,10 +118,6 @@ wd8003Enet_interrupt_handler (rtems_vector_number v)
|
||||
|
||||
tport = wd8003EnetDriver[0].port ;
|
||||
|
||||
PC386_disableIrq(wd8003EnetDriver[0].irno);
|
||||
PC386_ackIrq(wd8003EnetDriver[0].irno);
|
||||
asm volatile("sti");
|
||||
|
||||
/*
|
||||
* Drop chips interrupt
|
||||
*/
|
||||
@@ -195,9 +193,19 @@ wd8003Enet_interrupt_handler (rtems_vector_number v)
|
||||
* Enable chip interrupts
|
||||
*/
|
||||
outport_byte(tport+IMR, 0x15);
|
||||
asm volatile("cli");
|
||||
PC386_enableIrq(wd8003EnetDriver[0].irno);
|
||||
|
||||
}
|
||||
|
||||
static void nopOn(const rtems_irq_connect_data* notUsed)
|
||||
{
|
||||
/*
|
||||
* code should be moved from wd8003Enet_initialize_hardware
|
||||
* to this location
|
||||
*/
|
||||
}
|
||||
|
||||
static int wdIsOn(const rtems_irq_connect_data* irq)
|
||||
{
|
||||
return pc386_irq_enabled_at_i8259s (irq->name);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -273,10 +281,15 @@ wd8003Enet_initialize_hardware (wd80x3EnetDriver *dp, int broadcastFlag)
|
||||
/*
|
||||
* Set up interrupts
|
||||
*/
|
||||
sc = PC386_installRtemsIrqHandler(dp->irno, wd8003Enet_interrupt_handler);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
rtems_panic ("Can't attach interrupt handler: %s\n",
|
||||
rtems_status_text (sc));
|
||||
dp->irqInfo.hdl = wd8003Enet_interrupt_handler;
|
||||
dp->irqInfo.on = nopOn;
|
||||
dp->irqInfo.off = nopOn;
|
||||
dp->irqInfo.isOn = wdIsOn;
|
||||
|
||||
sc = pc386_install_rtems_irq_handler (&dp->irqInfo);
|
||||
if (!sc)
|
||||
rtems_panic ("Can't attach WD interrupt handler for irq %d\n",
|
||||
dp->irqInfo.name);
|
||||
}
|
||||
|
||||
|
||||
@@ -458,9 +471,9 @@ rtems_ka9q_driver_attach (int argc, char *argv[], void *p)
|
||||
dp->txWaitTid = 0;
|
||||
dp->rxBdCount = RX_BUF_COUNT;
|
||||
dp->txBdCount = TX_BUF_COUNT * TX_BD_PER_BUF;
|
||||
dp->irno = 5;
|
||||
dp->irqInfo.name = (rtems_irq_symbolic_name) 5;
|
||||
dp->port = 0x240;
|
||||
dp->base = 0xD0000;
|
||||
dp->base = (unsigned char*) 0xD0000;
|
||||
dp->bpar = 0xD0000;
|
||||
iface->mtu = 1500;
|
||||
iface->addr = Ip_addr;
|
||||
@@ -492,14 +505,14 @@ rtems_ka9q_driver_attach (int argc, char *argv[], void *p)
|
||||
gether (iface->hwaddr, argv[argIndex]);
|
||||
}
|
||||
else if (strcmp ("irno", argv[argIndex]) == 0) {
|
||||
dp->irno = atoi (argv[++argIndex]);
|
||||
dp->irqInfo.name = (rtems_irq_symbolic_name) atoi (argv[++argIndex]);
|
||||
}
|
||||
else if (strcmp ("port", argv[argIndex]) == 0) {
|
||||
sscanf(argv[++argIndex], "%x", &(dp->port));
|
||||
}
|
||||
else if (strcmp ("bpar", argv[argIndex]) == 0) {
|
||||
sscanf(argv[++argIndex], "%x", &(dp->bpar));
|
||||
dp->base = (char *)(dp->bpar);
|
||||
sscanf(argv[++argIndex], "%x", (unsigned) &(dp->bpar));
|
||||
dp->base = (unsigned char *)(dp->bpar);
|
||||
}
|
||||
else {
|
||||
printf ("Argument %d (%s) is invalid.\n", argIndex, argv[argIndex]);
|
||||
@@ -508,8 +521,8 @@ rtems_ka9q_driver_attach (int argc, char *argv[], void *p)
|
||||
}
|
||||
printf ("Ethernet address: %s\n", pether (cbuf, iface->hwaddr));
|
||||
printf ("Internet address: %s\n", inet_ntoa(iface->addr));
|
||||
printf ("Irno: %X, port: %X, bpar: %X, base: %X\n",dp->irno, dp->port,
|
||||
dp->bpar, dp->base);
|
||||
printf ("Irno: %X, port: %X, bpar: %X, base: %X\n",dp->irqInfo.name, dp->port,
|
||||
(unsigned) dp->bpar, (unsigned) dp->base);
|
||||
fflush(stdout);
|
||||
/*
|
||||
* Fill in remainder of interface configuration
|
||||
|
||||
@@ -64,7 +64,7 @@ ${ARCH}/start16.o: start16.s
|
||||
$(AS) $(ASFLAGS) -o $@ $*.i
|
||||
|
||||
${ARCH}/start16.bin: ${ARCH}/start16.o
|
||||
$(LD) -N -T $(LINKCMDS) -Ttext $(START16ADDR) -e start16 -nostdlib \
|
||||
- $(LD) -N -T $(LINKCMDS) -Ttext $(START16ADDR) -e start16 -nostdlib \
|
||||
--oformat=elf32-i386 -o $(basename $@).obj $(basename $@).o
|
||||
$(OBJCOPY) -O binary $(basename $@).obj $@
|
||||
|
||||
- $(OBJCOPY) -O binary $(basename $@).obj $@
|
||||
cp $(basename $@).o $(basename $@).bin
|
||||
|
||||
@@ -10,6 +10,9 @@ PROJECT_ROOT = @PROJECT_ROOT@
|
||||
|
||||
PGM=${ARCH}/startup.rel
|
||||
|
||||
IMPORT_SRC=$(srcdir)/../../shared/irq/irq.c \
|
||||
$(srcdir)/../../shared/irq/irq_init.c $(srcdir)/../../shared/irq/irq_asm.s
|
||||
|
||||
# C source names, if any, go here -- minus the .c
|
||||
C_PIECES=bspclean bsplibc bsppost bspstart exit irq irq_init main sbrk
|
||||
C_FILES=$(C_PIECES:%=%.c)
|
||||
@@ -50,9 +53,6 @@ LDFLAGS +=
|
||||
CLEAN_ADDITIONS +=
|
||||
CLOBBER_ADDITIONS +=
|
||||
|
||||
IMPORT_SRC=$(srcdir)/../../shared/irq/irq.c \
|
||||
$(srcdir)/../../shared/irq/irq_init.c $(srcdir)/../../shared/irq/irq_asm.s
|
||||
|
||||
preinstall:
|
||||
${CP} ${IMPORT_SRC} .
|
||||
|
||||
|
||||
@@ -177,7 +177,9 @@ void rtems_irq_mngt_init()
|
||||
while (1);
|
||||
}
|
||||
|
||||
#define DEBUG
|
||||
/*
|
||||
* #define DEBUG
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
{
|
||||
/*
|
||||
|
||||
@@ -16,7 +16,6 @@ include $(RTEMS_ROOT)/make/lib.cfg
|
||||
LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a
|
||||
|
||||
SRCS=$(wildcard $(PROJECT_RELEASE)/lib/libbsp$(LIB_VARIANT).a) \
|
||||
$(PROJECT_RELEASE)/lib/libcpu$(LIB_VARIANT).a \
|
||||
$(PROJECT_RELEASE)/lib/librtems$(LIB_VARIANT).a \
|
||||
$(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \
|
||||
$(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \
|
||||
|
||||
@@ -17,6 +17,13 @@ include $(RTEMS_ROOT)/make/directory.cfg
|
||||
CPLUSPLUS_TESTS_yes_V = cdtest
|
||||
CPLUSPLUS_TESTS = $(CPLUSPLUS_TESTS_$(HAS_CPLUSPLUS)_V)
|
||||
|
||||
# We only build the sockets tests if HAS_KA9Q was defined
|
||||
SOCKET_yes_V = socket
|
||||
SOCKET = $(SOCKET_$(HAS_KA9Q)_V)
|
||||
|
||||
HOSTSOCKET_yes_V = socket/pgmHost
|
||||
HOSTSOCKET = $(HOSTSOCKET_$(HAS_KA9Q)_V)
|
||||
|
||||
# base_mp is a sample multiprocessing test
|
||||
# We only build it if HAS_MP was defined
|
||||
|
||||
@@ -25,6 +32,8 @@ MP_TESTS = $(MP_TESTS_$(HAS_MP)_V)
|
||||
|
||||
FP_TESTS = paranoia
|
||||
|
||||
# socket socket/pgmHost
|
||||
SUB_DIRS=hello ticker base_sp
|
||||
SUB_DIRS=hello ticker base_sp $(HOSTSOCKET) $(SOCKET) \
|
||||
$(MP_TESTS) $(CPLUSPLUS_TESTS) $(FP_TESTS)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ include $(RTEMS_ROOT)/make/lib.cfg
|
||||
LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a
|
||||
|
||||
SRCS=$(wildcard $(PROJECT_RELEASE)/lib/libbsp$(LIB_VARIANT).a) \
|
||||
$(PROJECT_RELEASE)/lib/libcpu$(LIB_VARIANT).a \
|
||||
$(PROJECT_RELEASE)/lib/librtems$(LIB_VARIANT).a \
|
||||
$(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \
|
||||
$(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \
|
||||
|
||||
@@ -118,7 +118,7 @@ get: $(SRCS) $(GET_ADDITIONS)
|
||||
clean:
|
||||
$(RM) -r a.out core mon.out gmon.out $(CLEAN_OS) $(CLEAN_CC)
|
||||
$(RM) -r $(CLEAN_PROTO) $(CLEAN_DEPEND) a.out
|
||||
$(RM) -r $(VARIANTS) $(CLEAN_ADDITIONS)
|
||||
$(RM) -r $(VARIANTS) $(CLEAN_ADDITIONS) $(IMPORT_SOURCE)
|
||||
|
||||
clobber: clean
|
||||
-$(RCS_CLEAN)
|
||||
|
||||
Reference in New Issue
Block a user