Index: uspace/srv/hw/netif/dp8390/dp8390.c
===================================================================
--- uspace/srv/hw/netif/dp8390/dp8390.c	(revision 0777f4c53180eac85f3c0c202bca4bf031b12b99)
+++ uspace/srv/hw/netif/dp8390/dp8390.c	(revision 6fc0eddfb616dfffd344e690afccee29596e0369)
@@ -478,7 +478,7 @@
 }
 
-void dp_check_ints(dpeth_t *dep)
-{
-	int isr, tsr;
+void dp_check_ints(dpeth_t *dep, int isr)
+{
+	int tsr;
 	int size, sendq_tail;
 	
@@ -486,9 +486,5 @@
 		fprintf(stderr, "dp8390: got premature interrupt\n");
 	
-	for (;;) {
-		isr = inb_reg0(dep, DP_ISR);
-		if (!isr)
-			break;
-		
+	for (; isr; isr = inb_reg0(dep, DP_ISR)) {
 		outb_reg0(dep, DP_ISR, isr);
 		
@@ -524,7 +520,4 @@
 			
 			if (!(dep->de_sendq[sendq_tail].sq_filled)) {
-				/* Software bug? */
-				assert(false);
-				
 				/* Or hardware bug? */
 				printf("%s: transmit interrupt, but not sending\n", dep->de_name);
@@ -601,9 +594,5 @@
 }
 
-/*===========================================================================*
- *				dp_recv					     *
- *===========================================================================*/
-static void dp_recv(dep)
-dpeth_t *dep;
+static void dp_recv(dpeth_t *dep)
 {
 	dp_rcvhdr_t header;
Index: uspace/srv/hw/netif/dp8390/dp8390.h
===================================================================
--- uspace/srv/hw/netif/dp8390/dp8390.h	(revision 0777f4c53180eac85f3c0c202bca4bf031b12b99)
+++ uspace/srv/hw/netif/dp8390/dp8390.h	(revision 6fc0eddfb616dfffd344e690afccee29596e0369)
@@ -263,7 +263,6 @@
 	phys_bytes de_linmem;
 	int de_irq;
-	int de_int_pending;
-	dp_initf_t de_initf; 
-	dp_stopf_t de_stopf; 
+	dp_initf_t de_initf;
+	dp_stopf_t de_stopf;
 	char de_name[sizeof("dp8390#n")];
 	
Index: uspace/srv/hw/netif/dp8390/dp8390_drv.h
===================================================================
--- uspace/srv/hw/netif/dp8390/dp8390_drv.h	(revision 0777f4c53180eac85f3c0c202bca4bf031b12b99)
+++ uspace/srv/hw/netif/dp8390/dp8390_drv.h	(revision 6fc0eddfb616dfffd344e690afccee29596e0369)
@@ -56,5 +56,5 @@
  *  @param[in,out] dep The network interface structure.
  */
-void dp_check_ints(dpeth_t *dep);
+void dp_check_ints(dpeth_t *dep, int isr);
 
 /** Probes and initializes the network interface.
Index: uspace/srv/hw/netif/dp8390/dp8390_module.c
===================================================================
--- uspace/srv/hw/netif/dp8390/dp8390_module.c	(revision 0777f4c53180eac85f3c0c202bca4bf031b12b99)
+++ uspace/srv/hw/netif/dp8390/dp8390_module.c	(revision 6fc0eddfb616dfffd344e690afccee29596e0369)
@@ -58,8 +58,17 @@
 #define NAME  "dp8390"
 
-/** Returns the device from the interrupt call.
+/** Return the device from the interrupt call.
+ *
  *  @param[in] call The interrupt call.
- */
-#define IRQ_GET_DEVICE(call)  (device_id_t) IPC_GET_IMETHOD(*call)
+ *
+ */
+#define IRQ_GET_DEVICE(call)  ((device_id_t) IPC_GET_IMETHOD(call))
+
+/** Return the ISR from the interrupt call.
+ *
+ *  @param[in] call The interrupt call.
+ *
+ */
+#define IRQ_GET_ISR(call)  ((int) IPC_GET_ARG2(call))
 
 /** DP8390 kernel interrupt command sequence.
@@ -72,7 +81,18 @@
 	},
 	{
+		.cmd = CMD_BTEST,
+		.value = 0x7f,
+		.srcarg = 2,
+		.dstarg = 3,
+	},
+	{
 		.cmd = CMD_PREDICATE,
-		.value = 1,
-		.srcarg = 2
+		.value = 2,
+		.srcarg = 3
+	},
+	{
+		.cmd = CMD_PIO_WRITE_8,
+		.addr = NULL,
+		.value = 0xff
 	},
 	{
@@ -101,5 +121,5 @@
 	int phone;
 	
-	device_id = IRQ_GET_DEVICE(call);
+	device_id = IRQ_GET_DEVICE(*call);
 	fibril_rwlock_write_lock(&netif_globals.lock);
 	
@@ -117,6 +137,5 @@
 	assert(dep->de_flags & DEF_ENABLED);
 	
-	dep->de_int_pending = 0;
-	dp_check_ints(dep);
+	dp_check_ints(dep, IRQ_GET_ISR(*call));
 	
 	if (dep->received_queue) {
@@ -279,5 +298,5 @@
 		
 		if (do_pwrite(dep, packet, false) != EBUSY)
-			netif_pq_release(packet_get_id(packet));\
+			netif_pq_release(packet_get_id(packet));
 		
 		packet = next;
@@ -295,5 +314,5 @@
 		dep = (dpeth_t *) device->specific;
 		dp8390_cmds[0].addr = (void *) (uintptr_t) (dep->de_dp8390_port + DP_ISR);
-		dp8390_cmds[2].addr = dp8390_cmds[0].addr;
+		dp8390_cmds[3].addr = dp8390_cmds[0].addr;
 		
 		rc = ipc_register_irq(dep->de_irq, device->device_id, device->device_id, &dp8390_code);
