summaryrefslogtreecommitdiffstats
path: root/bsps/powerpc/mpc55xxevb/net/if_smc.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/powerpc/mpc55xxevb/net/if_smc.c')
-rw-r--r--bsps/powerpc/mpc55xxevb/net/if_smc.c161
1 files changed, 0 insertions, 161 deletions
diff --git a/bsps/powerpc/mpc55xxevb/net/if_smc.c b/bsps/powerpc/mpc55xxevb/net/if_smc.c
deleted file mode 100644
index 995bf0b1b0..0000000000
--- a/bsps/powerpc/mpc55xxevb/net/if_smc.c
+++ /dev/null
@@ -1,161 +0,0 @@
-#include <bsp.h>
-
-#ifdef HAS_SMC91111
-
-#include <mpc55xx/mpc55xx.h>
-#include <mpc55xx/regs.h>
-
-#include <rtems.h>
-
-#include <bsp/irq.h>
-#include <rtems/bspIo.h>
-#include <libcpu/powerpc-utility.h>
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <rtems/error.h>
-#include <rtems/rtems_bsdnet.h>
-#include <rtems/irq-extension.h>
-
-#include <sys/param.h>
-#include <sys/mbuf.h>
-
-#include <sys/socket.h>
-#include <sys/sockio.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-
-#include <libchip/smc91111exp.h>
-
-
-
-/* The SMC91111 on the MPC5554SOM is IRQ2.
- */
-#define SMC91111_BASE_ADDR (void*)0x22000300
-#define SMC91111_BASE_IRQ MPC55XX_IRQ_SIU_EXTERNAL_2
-#define SMC91111_BASE_PIO 4
-
-extern void lan91cxx_interrupt_handler(void *arg);
-
-static const union SIU_EISR_tag clear_eisr_2 = {.B.EIF2 = 1};
-
-static void rtems_smc91111_interrupt_wrapper(void *arg)
-{
- /* Clear external interrupt status */
-
- SIU.EISR = clear_eisr_2;
-
- lan91cxx_interrupt_handler(arg);
-}
-
-scmv91111_configuration_t mpc5554_scmv91111_configuration = {
- SMC91111_BASE_ADDR, /* base address */
- SMC91111_BASE_IRQ, /* vector number */
- SMC91111_BASE_PIO, /* XXX: What's this? */
- 100, /* 100b */
- 1, /* fulldx */
- 1, /* autoneg */
- "SMC91111",
- RTEMS_INTERRUPT_UNIQUE,
- rtems_smc91111_interrupt_wrapper,
- (void *)0
-};
-
-/*
- * Attach an SMC91111 driver to the system
- */
-int rtems_smc91111_driver_attach_mpc5554(struct rtems_bsdnet_ifconfig *config)
-{
- /* Configure IRQ2 (GPIO pin 211) is set up properly:
- * Secondary, Alternate, Input.
- */
- static const union SIU_PCR_tag irq_input_pcr = {
- .B.PA = 2, /* Alternate function 1 */
- .B.OBE = 0,
- .B.IBE = 1, /* Input Buffer Enable */
- .B.DSC = 0,
- .B.ODE = 0,
- .B.HYS = 1,
- .B.SRC = 3, /* Maximum slew rate */
- .B.WPE = 0, /* Disable weak pullup/pulldown */
- .B.WPS = 1 /* Specify weak pullup? But it isn't enabled! */
- };
-
- union SIU_ORER_tag orer = MPC55XX_ZERO_FLAGS;
- union SIU_DIRER_tag direr = MPC55XX_ZERO_FLAGS;
- union SIU_IREER_tag ireer = MPC55XX_ZERO_FLAGS;
- union SIU_IFEER_tag ifeer = MPC55XX_ZERO_FLAGS;
- union SIU_IDFR_tag idfr = MPC55XX_ZERO_FLAGS;
- union SIU_DIRSR_tag dirsr = MPC55XX_ZERO_FLAGS;
- rtems_interrupt_level level;
-
-#define MPC55XX_EBI_CS_2_BR 0x22000003
-#define MPC55XX_EBI_CS_2_OR 0xff000010
-#if MPC55XX_EBI_CS_2_BR
- static const union SIU_PCR_tag primary_50pf_weak_pullup = { /* 0x4c3 */
- .B.PA = 1,
- .B.DSC = 3,
- .B.WPE = 1,
- .B.WPS = 1
- };
- EBI.CS[2].BR.R = MPC55XX_EBI_CS_2_BR;
- EBI.CS[2].OR.R = MPC55XX_EBI_CS_2_OR;
- SIU.PCR[2] = primary_50pf_weak_pullup;
-#endif
-
- SIU.PCR[211] = irq_input_pcr;
-
- /* XXX These should be using bit set and bit clear instructions */
-
- /* DMA/Interrupt Request Select */
- rtems_interrupt_disable(level);
- dirsr.R = SIU.DIRSR.R;
- dirsr.B.DIRS2 = 0; /* Select interrupt not DMA */
- SIU.DIRSR.R = dirsr.R;
- rtems_interrupt_enable(level);
-
- /* Overrun Request Enable */
- rtems_interrupt_disable(level);
- orer.R = SIU.ORER.R;
- orer.B.ORE2 = 0; /* Disable overruns. */
- SIU.ORER.R = orer.R;
- rtems_interrupt_enable(level);
-
- /* IRQ Rising-Edge Enable */
- rtems_interrupt_disable(level);
- ireer.R = SIU.IREER.R;
- ireer.B.IREE2 = 1; /* Enable rising edge. */
- SIU.IREER.R = ireer.R;
- rtems_interrupt_enable(level);
-
- /* IRQ Falling-Edge Enable */
- rtems_interrupt_disable(level);
- ifeer.R = SIU.IFEER.R;
- ifeer.B.IFEE2 = 0; /* Disable falling edge. */
- SIU.IFEER.R = ifeer.R;
- rtems_interrupt_enable(level);
-
- /* IRQ Digital Filter */
- rtems_interrupt_disable(level);
- idfr.R = SIU.IDFR.R;
- idfr.B.DFL = 0; /* Minimal digital filter. */
- SIU.IDFR.R = idfr.R;
- rtems_interrupt_enable(level);
-
- /* Clear external interrupt status */
- SIU.EISR = clear_eisr_2;
-
- /* DMA/Interrupt Request Enable */
- rtems_interrupt_disable(level);
- direr.R = SIU.DIRER.R;
- direr.B.EIRE2 = 1; /* Enable. */
- SIU.DIRER.R = direr.R;
- rtems_interrupt_enable(level);
-
- return _rtems_smc91111_driver_attach(config,&mpc5554_scmv91111_configuration);
-};
-
-#endif /* HAS_SMC91111 */