diff -urpN acx100-0.2.0pre8_plus_fixes_43/include/acx100_helper.h acx100-0.2.0pre8_plus_fixes_43_patched/include/acx100_helper.h --- acx100-0.2.0pre8_plus_fixes_43/include/acx100_helper.h 2004-12-05 15:58:53.000000000 +0100 +++ acx100-0.2.0pre8_plus_fixes_43_patched/include/acx100_helper.h 2005-04-03 19:28:14.000000000 +0200 @@ -417,7 +417,7 @@ typedef struct ie_dot11WEPDefaultKey { typedef struct acx111WEPDefaultKey { UINT8 MacAddr[ETH_ALEN] ACX_PACKED; - UINT8 action ACX_PACKED; + UINT16 action ACX_PACKED; UINT16 reserved ACX_PACKED; UINT8 keySize ACX_PACKED; UINT8 type ACX_PACKED; diff -urpN acx100-0.2.0pre8_plus_fixes_43/src/acx100.c acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100.c --- acx100-0.2.0pre8_plus_fixes_43/src/acx100.c 2004-12-05 15:58:53.000000000 +0100 +++ acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100.c 2006-01-18 19:58:00.000000000 +0100 @@ -786,7 +786,7 @@ acx_probe_pci(struct pci_dev *pdev, cons /* Log the device */ acxlog(L_STD | L_INIT, "Found %s-based wireless network card at %s, irq:%d, phymem1:0x%lx, phymem2:0x%lx, mem1:0x%p, mem1_size:%ld, mem2:0x%p, mem2_size:%ld\n", - chip_name, (char *)pdev->slot_name /* was: pci_name(pdev) */, pdev->irq, phymem1, phymem2, + chip_name, pci_name(pdev), pdev->irq, phymem1, phymem2, mem1, mem_region1_size, mem2, mem_region2_size); acxlog(0xffff, "initial debug setting is 0x%04x\n", debug); diff -urpN acx100-0.2.0pre8_plus_fixes_43/src/acx100_conv.c acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100_conv.c --- acx100-0.2.0pre8_plus_fixes_43/src/acx100_conv.c 2004-12-05 15:58:54.000000000 +0100 +++ acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100_conv.c 2005-04-03 22:07:12.000000000 +0200 @@ -217,6 +217,21 @@ int acx_ether_to_txdesc(wlandevice_t *pr if ((unsigned long)0xffffffff == (unsigned long)header) /* FIXME: happens on card eject; better method? */ return NOT_OK; payload = tx_desc->fixed_size.s.host_desc + 1; + + /* to send raw packets */ + + if (priv->monitor == 2 && priv->chip_type == CHIPTYPE_ACX111) + { + header->length = cpu_to_le16(WLAN_HDR_A3_LEN + sizeof(wlan_llc_t) + sizeof(wlan_snap_t)); + memcpy(header->data, skb->data, le16_to_cpu(header->length)); + payload->length = cpu_to_le16(skb->len - le16_to_cpu(header->length)); + memcpy(payload->data, skb->data + le16_to_cpu(header->length), le16_to_cpu(payload->length)); + header->data_offset = 0; + payload->data_offset = 0; + tx_desc->total_length = cpu_to_le16(le16_to_cpu(header->length) + le16_to_cpu(payload->length)); + } + else /* usual conversion */ + { e_hdr = (wlan_ethhdr_t *)skb->data; /* step 1: classify ether frame, DIX or 802.3? */ @@ -307,6 +322,7 @@ int acx_ether_to_txdesc(wlandevice_t *pr w_hdr->a3.fc = fc; w_hdr->a3.dur = 0; w_hdr->a3.seq = 0; + } /* end of usual conversion */ /* the "<6>" output is from the KERN_INFO channel value */ /* Can be used to debug conversion process */ @@ -411,7 +427,7 @@ fail: saddr = w_hdr->a4.a4; } - if (0 != WLAN_GET_FC_ISWEP(fc)) { + if (0 != WLAN_GET_FC_ISWEP(fc) && priv->chip_type != CHIPTYPE_ACX111) { /* chop off the IV+ICV WEP header and footer */ acxlog(L_DATA | L_DEBUG, "rx: it's a WEP packet, chopping off IV and ICV.\n"); payload_length -= 8; diff -urpN acx100-0.2.0pre8_plus_fixes_43/src/acx100_helper.c acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100_helper.c --- acx100-0.2.0pre8_plus_fixes_43/src/acx100_helper.c 2004-12-05 15:58:54.000000000 +0100 +++ acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100_helper.c 2005-04-03 21:44:28.000000000 +0200 @@ -1537,7 +1537,7 @@ void acx111_set_wepkey( wlandevice_t *pr if ( priv->wep_keys[i].size != 0 ) { acxlog(L_INIT, "Setting WEP key: %d with size: %d\n", i, priv->wep_keys[i].size); memset(&dk, 0, sizeof(dk)); - dk.action = 1; /* add key */ + dk.action = cpu_to_le16(1); /* add key */ dk.keySize = priv->wep_keys[i].size; /* are these two lines necessary? */ diff -urpN acx100-0.2.0pre8_plus_fixes_43/src/acx100_ioctl.c acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100_ioctl.c --- acx100-0.2.0pre8_plus_fixes_43/src/acx100_ioctl.c 2004-12-05 15:58:54.000000000 +0100 +++ acx100-0.2.0pre8_plus_fixes_43_patched/src/acx100_ioctl.c 2006-01-18 21:00:13.000000000 +0100 @@ -2269,6 +2269,7 @@ end: static inline int acx_ioctl_wlansniff(struct net_device *dev, struct iw_request_info *info, struct iw_param *vwrq, char *extra) { wlandevice_t *priv = (wlandevice_t *) dev->priv; + struct ACX111FeatureConfig featureconfig; int *params = (int*)extra; int enable = (int)(params[0] > 0); unsigned long flags; @@ -2300,10 +2301,27 @@ static inline int acx_ioctl_wlansniff(st break; } + if (priv->chip_type == CHIPTYPE_ACX111) + acx111_get_feature_config(priv, &featureconfig); + if (0 != priv->monitor) + { priv->monitor_setting = 0x02; /* don't decrypt default key only, override decryption mechanism */ + if (priv->chip_type == CHIPTYPE_ACX111) /* disable encryption */ + { + SET_BIT(featureconfig.data_flow_options, cpu_to_le32(0x81)); + acx111_set_feature_config(priv, &featureconfig); + } + } else + { priv->monitor_setting = 0x00; /* don't decrypt default key only, don't override decryption */ + if (priv->chip_type == CHIPTYPE_ACX111) /* enable encryption */ + { + CLEAR_BIT(featureconfig.data_flow_options, cpu_to_le32(0x81)); + acx111_set_feature_config(priv, &featureconfig); + } + } acx_initialize_rx_config(priv, priv->monitor); SET_BIT(priv->set_mask, SET_RXCONFIG | SET_WEP_OPTIONS); @@ -3277,7 +3295,9 @@ const struct iw_handler_def acx_ioctl_ha .standard = (iw_handler *) acx_ioctl_handler, .private = (iw_handler *) acx_ioctl_private_handler, .private_args = (struct iw_priv_args *) acx_ioctl_private_args, -#if WIRELESS_EXT > 15 +#if WIRELESS_EXT > 18 + .get_wireless_stats = NULL, +#elif WIRELESS_EXT > 15 .spy_offset = ((void *) (&((struct wlandevice *) NULL)->spy_data) - (void *) NULL), #endif /* WE > 15 */ };