diff -Naur acx_orig/common.c acx_rawtx/common.c
--- acx_orig/common.c	2007-01-10 22:15:27.000000000 +0100
+++ acx_rawtx/common.c	2007-05-20 12:58:55.000000000 +0200
@@ -3180,6 +3180,14 @@
 		goto end;
 	}
 
+	if(unlikely(skb->len < 24)) {
+		/* silently drop the packet, since fw won't send it */
+		txresult = OK;
+		/* ...but indicate an error nevertheless */
+		adev->stats.tx_errors++;
+		goto end;
+	}
+
 	tx = acx_l_alloc_tx(adev);
 	if (unlikely(!tx)) {
 		printk_ratelimited("%s: start_xmit: txdesc ring is full, "
diff -Naur acx_orig/pci.c acx_rawtx/pci.c
--- acx_orig/pci.c	2007-01-10 13:27:16.000000000 +0100
+++ acx_rawtx/pci.c	2007-05-20 12:58:55.000000000 +0200
@@ -1992,7 +1992,12 @@
 		acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
 	case ACX_MODE_3_AP:
 	case ACX_MODE_MONITOR:
-		acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
+		acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
+		adev->msdu_lifetime = 0;/* no lifetime at all */
+		adev->short_retry = 0; /* no retries for (short) non-RTS packets */
+		adev->long_retry = 0; /* no retries for long (RTS) packets */
+
+		break;
 	}
 
 	acx_s_start(adev);
@@ -3387,12 +3392,14 @@
 		break;
 	}
 	adev->stats.tx_errors++;
+#if 0
 	if (adev->stats.tx_errors <= 20)
 		printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
 				adev->ndev->name, error, finger, err);
 	else
 		printk("%s: tx error 0x%02X, buf %02u!\n",
 				adev->ndev->name, error, finger);
+#endif
 }
 
 
