add network support, various corrections

This commit is contained in:
Thomas Doerfler
2009-10-15 14:05:34 +00:00
parent 6229b2a7e7
commit 045821e174
7 changed files with 1898 additions and 37 deletions
@@ -1,3 +1,9 @@
2009-10-15 Thomas Doerfler <Thomas.Doerfler@embedded-brains.de>
* Makefile.am, include/bsp.h, network/network.c: add network support
* console/console.c, clock/clock.c, startup/init548x.c:
various corrections
2009-10-15 Ralf Corsépius <ralf.corsepius@rtems.org>
* make/custom/genmcf548x.cfg: New (relocated from /make/custom).
+3 -1
View File
@@ -53,7 +53,9 @@ network_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
endif
libbsp_a_LIBADD = ../../../libcpu/@RTEMS_CPU@/shared/cache.rel \
../../../libcpu/@RTEMS_CPU@/shared/misc.rel
../../../libcpu/@RTEMS_CPU@/shared/misc.rel \
../../../libcpu/@RTEMS_CPU@/mcf548x/mcdma.rel
if HAS_NETWORKING
libbsp_a_LIBADD += network.rel
endif
+11 -12
View File
@@ -87,18 +87,17 @@
* We need to have 1 interrupt every 10,000 microseconds
* XLB clock 100 MHz / MCF548X_SLT_SLTCNT0 = XLB clock/100
*/
#define Clock_driver_support_initialize_hardware() \
do { \
int level; \
MCF548X_INTC_ICR54 = MCF548X_INTC_ICRn_IL(SLT0_IRQ_LEVEL) | \
MCF548X_INTC_ICRn_IP(SLT0_IRQ_PRIORITY); \
rtems_interrupt_disable( level ); \
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK54 | \
MCF548X_INTC_IMRL_MASKALL); \
rtems_interrupt_enable( level ); \
MCF548X_SLT_SLTCNT0 = get_CPU_clock_speed()/100; \
MCF548X_SLT_SCR0 |= (MCF548X_SLT_SCR_TEN | MCF548X_SLT_SCR_RUN | MCF548X_SLT_SCR_IEN); \
} while (0)
#define Clock_driver_support_initialize_hardware() \
do { \
int level; \
MCF548X_INTC_ICR54 = MCF548X_INTC_ICRn_IL(SLT0_IRQ_LEVEL) | \
MCF548X_INTC_ICRn_IP(SLT0_IRQ_PRIORITY); \
rtems_interrupt_disable( level ); \
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK54); \
rtems_interrupt_enable( level ); \
MCF548X_SLT_SLTCNT0 = get_CPU_clock_speed()/100; \
MCF548X_SLT_SCR0 |= (MCF548X_SLT_SCR_TEN | MCF548X_SLT_SCR_RUN | MCF548X_SLT_SCR_IEN); \
} while (0)
#include "../../../shared/clockdrv_shell.h"
@@ -485,29 +485,25 @@ IntUartInitialize(void)
case 0:
MCF548X_INTC_ICR35 = MCF548X_INTC_ICRn_IL(PSC0_IRQ_LEVEL) |
MCF548X_INTC_ICRn_IP(PSC0_IRQ_PRIORITY);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK35 |
MCF548X_INTC_IMRL_MASKALL);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK35);
break;
case 1:
MCF548X_INTC_ICR34 = MCF548X_INTC_ICRn_IL(PSC1_IRQ_LEVEL) |
MCF548X_INTC_ICRn_IP(PSC1_IRQ_PRIORITY);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK34 |
MCF548X_INTC_IMRL_MASKALL);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK34);
break;
case 2:
MCF548X_INTC_ICR33 = MCF548X_INTC_ICRn_IL(PSC2_IRQ_LEVEL) |
MCF548X_INTC_ICRn_IP(PSC2_IRQ_PRIORITY);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK33 |
MCF548X_INTC_IMRL_MASKALL);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK33);
break;
case 3:
MCF548X_INTC_ICR32 = MCF548X_INTC_ICRn_IL(PSC3_IRQ_LEVEL) |
MCF548X_INTC_ICRn_IP(PSC3_IRQ_PRIORITY);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK32 |
MCF548X_INTC_IMRL_MASKALL);
MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK32);
break;
}
rtems_interrupt_enable(level);
+13 -4
View File
@@ -91,10 +91,6 @@ m68k_isr_entry set_vector(
* Interrupt assignments
* Highest-priority listed first
*/
#define FEC_IRQ_LEVEL 4
#define FEC_IRQ_RX_PRIORITY 7
#define FEC_IRQ_TX_PRIORITY 6
#define SLT0_IRQ_LEVEL 4
#define SLT0_IRQ_PRIORITY 0
@@ -107,6 +103,19 @@ m68k_isr_entry set_vector(
#define PSC3_IRQ_LEVEL 3
#define PSC3_IRQ_PRIORITY 4
#define FEC_IRQ_LEVEL 2
#define FEC_IRQ_PRIORITY 3
/*
* Network driver configuration
*/
struct rtems_bsdnet_ifconfig;
extern int rtems_mcf548x_fec_driver_attach_detach(struct rtems_bsdnet_ifconfig *config,int attaching);
#define RTEMS_BSP_NETWORK_DRIVER_ATTACH rtems_mcf548x_fec_driver_attach_detach
#define RTEMS_BSP_NETWORK_DRIVER_NAME "fec1"
#define RTEMS_BSP_NETWORK_DRIVER_NAME2 "fec2"
#ifdef __cplusplus
}
#endif
File diff suppressed because it is too large Load Diff
@@ -301,12 +301,12 @@ gpio_init(void)
* erroneous transmissions
*/
MCF548X_GPIO_PAR_FECI2CIRQ = (0
| MCF548X_GPIO_PAR_FECI2CIRQ_PAR_E1MDC_EMDC
| MCF548X_GPIO_PAR_FECI2CIRQ_PAR_E1MDIO_EMDIO
| MCF548X_GPIO_PAR_FECI2CIRQ_PAR_E1MII
| MCF548X_GPIO_PAR_FECI2CIRQ_PAR_E17
);
MCF548X_GPIO_PAR_FECI2CIRQ = (0
| MCF548X_GPIO_PAR_FECI2CIRQ_PAR_E0MDC
| MCF548X_GPIO_PAR_FECI2CIRQ_PAR_E0MDIO
| MCF548X_GPIO_PAR_FECI2CIRQ_PAR_E0MII