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:
Joel Sherrill
1998-07-24 16:09:51 +00:00
parent 1501809c67
commit dbab462feb
10 changed files with 97 additions and 66 deletions

View File

@@ -11,7 +11,11 @@ PROJECT_ROOT = @PROJECT_ROOT@
include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
include $(RTEMS_ROOT)/make/directory.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 # wrapup is the one that actually builds and installs the library
# from the individual .rel files built in other directories # 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 wrapup

View File

@@ -8,8 +8,13 @@ VPATH = @srcdir@
RTEMS_ROOT = @top_srcdir@ RTEMS_ROOT = @top_srcdir@
PROJECT_ROOT = @PROJECT_ROOT@ 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 \ 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 # Equate files are for including from assembly preprocessed by

View File

@@ -15,7 +15,7 @@
#include <ka9q/trace.h> #include <ka9q/trace.h>
#include <ka9q/commands.h> #include <ka9q/commands.h>
#include <ka9q/domain.h> #include <ka9q/domain.h>
#include "irq.h" #include <irq.h>
#define ET_MINLEN 60 /* minimum message length */ #define ET_MINLEN 60 /* minimum message length */
@@ -49,41 +49,41 @@
* Hardware-specific storage * Hardware-specific storage
*/ */
typedef struct { typedef struct {
struct mbuf **rxMbuf; rtems_irq_connect_data irqInfo;
struct mbuf **txMbuf; struct mbuf **rxMbuf;
unsigned int port; struct mbuf **txMbuf;
char *base; unsigned int port;
unsigned long bpar; unsigned char *base;
unsigned int irno; unsigned long bpar;
int rxBdCount; int rxBdCount;
int txBdCount; int txBdCount;
int txBdHead; int txBdHead;
int txBdTail; int txBdTail;
int txBdActiveCount; int txBdActiveCount;
struct iface *iface; struct iface *iface;
rtems_id txWaitTid; rtems_id txWaitTid;
/* /*
* Statistics * Statistics
*/ */
unsigned long rxInterrupts; unsigned long rxInterrupts;
unsigned long rxNotFirst; unsigned long rxNotFirst;
unsigned long rxNotLast; unsigned long rxNotLast;
unsigned long rxGiant; unsigned long rxGiant;
unsigned long rxNonOctet; unsigned long rxNonOctet;
unsigned long rxRunt; unsigned long rxRunt;
unsigned long rxBadCRC; unsigned long rxBadCRC;
unsigned long rxOverrun; unsigned long rxOverrun;
unsigned long rxCollision; unsigned long rxCollision;
unsigned long txInterrupts; unsigned long txInterrupts;
unsigned long txDeferred; unsigned long txDeferred;
unsigned long txHeartbeat; unsigned long txHeartbeat;
unsigned long txLateCollision; unsigned long txLateCollision;
unsigned long txRetryLimit; unsigned long txRetryLimit;
unsigned long txUnderrun; unsigned long txUnderrun;
unsigned long txLostCarrier; unsigned long txLostCarrier;
unsigned long txRawWait; unsigned long txRawWait;
}wd80x3EnetDriver; }wd80x3EnetDriver;
#define RO 0x10 #define RO 0x10
@@ -98,10 +98,12 @@ static unsigned long loopc;
static wd80x3EnetDriver wd8003EnetDriver[NSCCDRIVER]; 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 static void wd8003Enet_interrupt_handler ()
wd8003Enet_interrupt_handler (rtems_vector_number v)
{ {
unsigned int tport, nowTicks, bootTicks; unsigned int tport, nowTicks, bootTicks;
unsigned char status, status2; unsigned char status, status2;
@@ -116,10 +118,6 @@ wd8003Enet_interrupt_handler (rtems_vector_number v)
tport = wd8003EnetDriver[0].port ; tport = wd8003EnetDriver[0].port ;
PC386_disableIrq(wd8003EnetDriver[0].irno);
PC386_ackIrq(wd8003EnetDriver[0].irno);
asm volatile("sti");
/* /*
* Drop chips interrupt * Drop chips interrupt
*/ */
@@ -195,9 +193,19 @@ wd8003Enet_interrupt_handler (rtems_vector_number v)
* Enable chip interrupts * Enable chip interrupts
*/ */
outport_byte(tport+IMR, 0x15); 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 * Set up interrupts
*/ */
sc = PC386_installRtemsIrqHandler(dp->irno, wd8003Enet_interrupt_handler); dp->irqInfo.hdl = wd8003Enet_interrupt_handler;
if (sc != RTEMS_SUCCESSFUL) dp->irqInfo.on = nopOn;
rtems_panic ("Can't attach interrupt handler: %s\n", dp->irqInfo.off = nopOn;
rtems_status_text (sc)); 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->txWaitTid = 0;
dp->rxBdCount = RX_BUF_COUNT; dp->rxBdCount = RX_BUF_COUNT;
dp->txBdCount = TX_BUF_COUNT * TX_BD_PER_BUF; dp->txBdCount = TX_BUF_COUNT * TX_BD_PER_BUF;
dp->irno = 5; dp->irqInfo.name = (rtems_irq_symbolic_name) 5;
dp->port = 0x240; dp->port = 0x240;
dp->base = 0xD0000; dp->base = (unsigned char*) 0xD0000;
dp->bpar = 0xD0000; dp->bpar = 0xD0000;
iface->mtu = 1500; iface->mtu = 1500;
iface->addr = Ip_addr; iface->addr = Ip_addr;
@@ -492,14 +505,14 @@ rtems_ka9q_driver_attach (int argc, char *argv[], void *p)
gether (iface->hwaddr, argv[argIndex]); gether (iface->hwaddr, argv[argIndex]);
} }
else if (strcmp ("irno", argv[argIndex]) == 0) { 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) { else if (strcmp ("port", argv[argIndex]) == 0) {
sscanf(argv[++argIndex], "%x", &(dp->port)); sscanf(argv[++argIndex], "%x", &(dp->port));
} }
else if (strcmp ("bpar", argv[argIndex]) == 0) { else if (strcmp ("bpar", argv[argIndex]) == 0) {
sscanf(argv[++argIndex], "%x", &(dp->bpar)); sscanf(argv[++argIndex], "%x", (unsigned) &(dp->bpar));
dp->base = (char *)(dp->bpar); dp->base = (unsigned char *)(dp->bpar);
} }
else { else {
printf ("Argument %d (%s) is invalid.\n", argIndex, argv[argIndex]); 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 ("Ethernet address: %s\n", pether (cbuf, iface->hwaddr));
printf ("Internet address: %s\n", inet_ntoa(iface->addr)); printf ("Internet address: %s\n", inet_ntoa(iface->addr));
printf ("Irno: %X, port: %X, bpar: %X, base: %X\n",dp->irno, dp->port, printf ("Irno: %X, port: %X, bpar: %X, base: %X\n",dp->irqInfo.name, dp->port,
dp->bpar, dp->base); (unsigned) dp->bpar, (unsigned) dp->base);
fflush(stdout); fflush(stdout);
/* /*
* Fill in remainder of interface configuration * Fill in remainder of interface configuration

View File

@@ -64,7 +64,7 @@ ${ARCH}/start16.o: start16.s
$(AS) $(ASFLAGS) -o $@ $*.i $(AS) $(ASFLAGS) -o $@ $*.i
${ARCH}/start16.bin: ${ARCH}/start16.o ${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 --oformat=elf32-i386 -o $(basename $@).obj $(basename $@).o
$(OBJCOPY) -O binary $(basename $@).obj $@ - $(OBJCOPY) -O binary $(basename $@).obj $@
cp $(basename $@).o $(basename $@).bin

View File

@@ -10,6 +10,9 @@ PROJECT_ROOT = @PROJECT_ROOT@
PGM=${ARCH}/startup.rel 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 source names, if any, go here -- minus the .c
C_PIECES=bspclean bsplibc bsppost bspstart exit irq irq_init main sbrk C_PIECES=bspclean bsplibc bsppost bspstart exit irq irq_init main sbrk
C_FILES=$(C_PIECES:%=%.c) C_FILES=$(C_PIECES:%=%.c)
@@ -50,9 +53,6 @@ LDFLAGS +=
CLEAN_ADDITIONS += CLEAN_ADDITIONS +=
CLOBBER_ADDITIONS += CLOBBER_ADDITIONS +=
IMPORT_SRC=$(srcdir)/../../shared/irq/irq.c \
$(srcdir)/../../shared/irq/irq_init.c $(srcdir)/../../shared/irq/irq_asm.s
preinstall: preinstall:
${CP} ${IMPORT_SRC} . ${CP} ${IMPORT_SRC} .

View File

@@ -177,7 +177,9 @@ void rtems_irq_mngt_init()
while (1); while (1);
} }
#define DEBUG /*
* #define DEBUG
*/
#ifdef DEBUG #ifdef DEBUG
{ {
/* /*

View File

@@ -16,7 +16,6 @@ include $(RTEMS_ROOT)/make/lib.cfg
LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a
SRCS=$(wildcard $(PROJECT_RELEASE)/lib/libbsp$(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 \ $(PROJECT_RELEASE)/lib/librtems$(LIB_VARIANT).a \
$(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \ $(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \
$(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \ $(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \

View File

@@ -17,6 +17,13 @@ include $(RTEMS_ROOT)/make/directory.cfg
CPLUSPLUS_TESTS_yes_V = cdtest CPLUSPLUS_TESTS_yes_V = cdtest
CPLUSPLUS_TESTS = $(CPLUSPLUS_TESTS_$(HAS_CPLUSPLUS)_V) 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 # base_mp is a sample multiprocessing test
# We only build it if HAS_MP was defined # We only build it if HAS_MP was defined
@@ -25,6 +32,8 @@ MP_TESTS = $(MP_TESTS_$(HAS_MP)_V)
FP_TESTS = paranoia FP_TESTS = paranoia
# socket socket/pgmHost SUB_DIRS=hello ticker base_sp $(HOSTSOCKET) $(SOCKET) \
SUB_DIRS=hello ticker base_sp
$(MP_TESTS) $(CPLUSPLUS_TESTS) $(FP_TESTS) $(MP_TESTS) $(CPLUSPLUS_TESTS) $(FP_TESTS)

View File

@@ -16,7 +16,6 @@ include $(RTEMS_ROOT)/make/lib.cfg
LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a
SRCS=$(wildcard $(PROJECT_RELEASE)/lib/libbsp$(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 \ $(PROJECT_RELEASE)/lib/librtems$(LIB_VARIANT).a \
$(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \ $(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \
$(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \ $(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \

View File

@@ -118,7 +118,7 @@ get: $(SRCS) $(GET_ADDITIONS)
clean: clean:
$(RM) -r a.out core mon.out gmon.out $(CLEAN_OS) $(CLEAN_CC) $(RM) -r a.out core mon.out gmon.out $(CLEAN_OS) $(CLEAN_CC)
$(RM) -r $(CLEAN_PROTO) $(CLEAN_DEPEND) a.out $(RM) -r $(CLEAN_PROTO) $(CLEAN_DEPEND) a.out
$(RM) -r $(VARIANTS) $(CLEAN_ADDITIONS) $(RM) -r $(VARIANTS) $(CLEAN_ADDITIONS) $(IMPORT_SOURCE)
clobber: clean clobber: clean
-$(RCS_CLEAN) -$(RCS_CLEAN)