Index: c/src/lib/libbsp/sparc/leon3/leon_greth/leon_greth.c
===================================================================
--- c/src/lib/libbsp/sparc/leon3/leon_greth/leon_greth.c	(revision 0f04edd9ccf392f03548defe2e1db05592025a94)
+++ c/src/lib/libbsp/sparc/leon3/leon_greth/leon_greth.c	(revision 7499b84f415844f92ca3fa27a0036ac8252357fc)
@@ -49,11 +49,8 @@
     *(volatile int *) base_addr = 0;
     leon_greth_configuration.base_address = base_addr;
-    leon_greth_configuration.vector = eth_irq + 0x10;
+    leon_greth_configuration.vector = eth_irq; /* on LEON vector is IRQ no. */
     leon_greth_configuration.txd_count = TDA_COUNT;
     leon_greth_configuration.rxd_count = RDA_COUNT;
-    if (rtems_greth_driver_attach( config, &leon_greth_configuration )) {
-      LEON_Clear_interrupt(eth_irq);
-      LEON_Unmask_interrupt(eth_irq);
-    }
+    rtems_greth_driver_attach(config, &leon_greth_configuration);
   }
   return 0;
Index: c/src/libchip/network/greth.c
===================================================================
--- c/src/libchip/network/greth.c	(revision 0f04edd9ccf392f03548defe2e1db05592025a94)
+++ c/src/libchip/network/greth.c	(revision 7499b84f415844f92ca3fa27a0036ac8252357fc)
@@ -42,13 +42,4 @@
 #undef free
 #endif
-
-#if defined(__m68k__)
-extern m68k_isr_entry set_vector( rtems_isr_entry, rtems_vector_number, int );
-#elif defined(__lm32__)
-extern lm32_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
-
 
 /* #define GRETH_DEBUG */
@@ -190,20 +181,20 @@
 /* GRETH interrupt handler */
 
-rtems_isr
-greth_interrupt_handler (rtems_vector_number v)
+void greth_interrupt_handler (void *arg)
 {
         uint32_t status;
         uint32_t ctrl;
         rtems_event_set events = 0;
+        struct greth_softc *greth = arg;
 
         /* read and clear interrupt cause */
-        status = greth.regs->status;
-        greth.regs->status = status;
-        ctrl = greth.regs->ctrl;
+        status = greth->regs->status;
+        greth->regs->status = status;
+        ctrl = greth->regs->ctrl;
 
         /* Frame received? */
         if ((ctrl & GRETH_CTRL_RXIRQ) && (status & (GRETH_STATUS_RXERR | GRETH_STATUS_RXIRQ)))
         {
-                greth.rxInterrupts++;
+                greth->rxInterrupts++;
                 /* Stop RX-Error and RX-Packet interrupts */
                 ctrl &= ~GRETH_CTRL_RXIRQ;
@@ -213,15 +204,15 @@
         if ( (ctrl & GRETH_CTRL_TXIRQ) && (status & (GRETH_STATUS_TXERR | GRETH_STATUS_TXIRQ)) )
         {
-                greth.txInterrupts++;
+                greth->txInterrupts++;
                 ctrl &= ~GRETH_CTRL_TXIRQ;
                 events |= GRETH_TX_WAIT_EVENT;
         }
-        
+
         /* Clear interrupt sources */
-        greth.regs->ctrl = ctrl;
-        
+        greth->regs->ctrl = ctrl;
+
         /* Send the event(s) */
         if ( events )
-            rtems_event_send (greth.daemonTid, events);
+                rtems_event_send (greth->daemonTid, events);
 }
 
@@ -486,6 +477,7 @@
     regs->status = 0xffffffff;
     
-    /* install interrupt vector */
-    set_vector(greth_interrupt_handler, sc->vector, 1);
+    /* install interrupt handler */
+    rtems_interrupt_handler_install(sc->vector, "greth", RTEMS_INTERRUPT_SHARED,
+                                    greth_interrupt_handler, sc);
 
     regs->ctrl |= GRETH_CTRL_RXEN | (sc->fd << 4) | GRETH_CTRL_RXIRQ | (sc->sp << 7) | (sc->gb << 8);
Index: c/src/libchip/network/greth.h
===================================================================
--- c/src/libchip/network/greth.h	(revision 0f04edd9ccf392f03548defe2e1db05592025a94)
+++ c/src/libchip/network/greth.h	(revision 7499b84f415844f92ca3fa27a0036ac8252357fc)
@@ -19,5 +19,5 @@
 typedef struct {
   void                 *base_address;
-  uint32_t              vector;
+  rtems_vector_number   vector;
   uint32_t              txd_count;
   uint32_t              rxd_count;
