diff options
author | Daniel Hellstrom <daniel@gaisler.com> | 2012-04-05 10:23:16 -0500 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@oarcorp.com> | 2012-04-06 11:38:25 -0500 |
commit | 0f04edd9ccf392f03548defe2e1db05592025a94 (patch) | |
tree | e018c7644ba331cf6819fb0400ec414ce308e0c4 | |
parent | LEON3 - Fix spacing (diff) | |
download | rtems-0f04edd9ccf392f03548defe2e1db05592025a94.tar.bz2 |
SMC91111: updated to use shared IRQ service
Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
-rw-r--r-- | c/src/lib/libbsp/sparc/leon2/leon_smc91111/leon_smc91111.c | 10 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c | 4 | ||||
-rw-r--r-- | c/src/libchip/network/smc91111.c | 19 | ||||
-rw-r--r-- | c/src/libchip/network/smc91111exp.h | 2 |
4 files changed, 15 insertions, 20 deletions
diff --git a/c/src/lib/libbsp/sparc/leon2/leon_smc91111/leon_smc91111.c b/c/src/lib/libbsp/sparc/leon2/leon_smc91111/leon_smc91111.c index 47b4d7a413..b459edd7b8 100644 --- a/c/src/lib/libbsp/sparc/leon2/leon_smc91111/leon_smc91111.c +++ b/c/src/lib/libbsp/sparc/leon2/leon_smc91111/leon_smc91111.c @@ -26,12 +26,12 @@ #define SMC91111_BASE_ADDR (void*)0x20000300 -#define SMC91111_BASE_IRQ LEON_TRAP_TYPE(4) +#define SMC91111_BASE_IRQ 4 #define SMC91111_BASE_PIO 4 scmv91111_configuration_t leon_scmv91111_configuration = { SMC91111_BASE_ADDR, /* base address */ - SMC91111_BASE_IRQ, /* vector number */ + SMC91111_BASE_IRQ, /* IRQ number (on LEON vector is irq) */ SMC91111_BASE_PIO, /* PIO */ 100, /* 100b */ 1, /* fulldx */ @@ -55,9 +55,7 @@ int rtems_smc91111_driver_attach_leon2(struct rtems_bsdnet_ifconfig *config) *((volatile unsigned int *)0x80000000) |= 0x10f80000; *((volatile unsigned int *)0x800000A8) |= (0xe0 | leon_scmv91111_configuration.pio) - << (8 * ((leon_scmv91111_configuration.vector & 0x0f) - 4)); + << (8 * (leon_scmv91111_configuration.vector - 4)); /* vector = irq-no */ return _rtems_smc91111_driver_attach(config,&leon_scmv91111_configuration); - -}; - +} diff --git a/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c b/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c index 5ebdc12cfc..841c4b6651 100644 --- a/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c +++ b/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c @@ -13,9 +13,9 @@ scmv91111_configuration_t leon_scmv91111_configuration = { SMC91111_BASE_ADDR, /* base address */ - LEON_TRAP_TYPE (SMC91111_BASE_IRQ), /* vector number */ + SMC91111_BASE_IRQ, /* IRQ number (on LEON vector is irq) */ SMC91111_BASE_PIO, /* PIO */ - 100, /* 100b */ + 100, /* 100b */ 1, /* fulldx */ 1 /* autoneg */ }; diff --git a/c/src/libchip/network/smc91111.c b/c/src/libchip/network/smc91111.c index 7070108ece..864587a169 100644 --- a/c/src/libchip/network/smc91111.c +++ b/c/src/libchip/network/smc91111.c @@ -61,12 +61,6 @@ #ifdef BSP_FEATURE_IRQ_EXTENSION #include <rtems/irq-extension.h> -#else - #if defined(__m68k__) - extern m68k_isr_entry set_vector( rtems_isr_entry, rtems_vector_number, int ); - #else - extern rtems_isr_entry set_vector( rtems_isr_entry, rtems_vector_number, int ); - #endif #endif struct lan91cxx_priv_data smc91111; @@ -92,9 +86,9 @@ static void lan91cxx_phy_configure(struct lan91cxx_priv_data *cpd); #define max(l,r) ((l) > (r) ? (l) : (r)) /* \ ------------- Interrupt ------------- \ */ -rtems_isr lan91cxx_interrupt_handler(rtems_vector_number v) +void lan91cxx_interrupt_handler(void *arg) { - struct lan91cxx_priv_data *cpd = &smc91111; + struct lan91cxx_priv_data *cpd = arg; unsigned short irq, event; unsigned short oldbase; unsigned short oldpointer; @@ -1029,7 +1023,7 @@ static void smc91111_stop(struct lan91cxx_priv_data *cpd) int lan91cxx_hardware_init(struct lan91cxx_priv_data *cpd) { unsigned short val; - int i; + int i, rc; DEBUG_FUNCTION(); @@ -1053,8 +1047,11 @@ int lan91cxx_hardware_init(struct lan91cxx_priv_data *cpd) } } #else - db_printf("Install lan91cxx irqvector at %d\n", cpd->config.vector); - set_vector(lan91cxx_interrupt_handler, cpd->config.vector, 1); + db_printf("Install lan91cxx isr at vec/irq %d\n", cpd->config.vector); + rc = rtems_interrupt_handler_install(cpd->config.vector, "smc91cxx", + RTEMS_INTERRUPT_SHARED, lan91cxx_interrupt_handler, cpd); + if (rc != RTEMS_SUCCESSFUL) + return 0; #endif /* Reset chip */ diff --git a/c/src/libchip/network/smc91111exp.h b/c/src/libchip/network/smc91111exp.h index 3f8ba1e414..2ab62c1417 100644 --- a/c/src/libchip/network/smc91111exp.h +++ b/c/src/libchip/network/smc91111exp.h @@ -9,7 +9,7 @@ typedef struct scmv91111_configuration { void *baseaddr; - unsigned int vector; + rtems_vector_number vector; unsigned int pio; unsigned int ctl_rspeed; unsigned int ctl_rfduplx; |