diff options
-rw-r--r-- | conf/distro/unslung-binary-kernel-packages.conf | 1 | ||||
-rw-r--r-- | packages/linux/unslung-kernel/defconfig | 13 | ||||
-rw-r--r-- | packages/linux/unslung-kernel_2.4.22.l2.3r63.bb | 2 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/.mtn2git_empty | 0 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/copy-break.patch | 11 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/explicit-key-change.patch | 24 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/get-stats.patch | 77 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/makefile.patch | 28 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/syntax.patch | 20 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/usb-endian.patch | 298 | ||||
-rw-r--r-- | packages/zd1211/zd1211-4916/usb-ids.patch | 21 | ||||
-rw-r--r-- | packages/zd1211/zd1211_4916.bb | 35 |
12 files changed, 528 insertions, 2 deletions
diff --git a/conf/distro/unslung-binary-kernel-packages.conf b/conf/distro/unslung-binary-kernel-packages.conf index 3e9059fae8..1dd405bd6e 100644 --- a/conf/distro/unslung-binary-kernel-packages.conf +++ b/conf/distro/unslung-binary-kernel-packages.conf @@ -34,5 +34,6 @@ ${PKGDIR}/packages/slugimage/*.bb \ ${PKGDIR}/packages/unzip/*.bb \ ${PKGDIR}/packages/update-modules/*.bb \ ${PKGDIR}/packages/wget/*.bb \ +${PKGDIR}/packages/zd1211/*.bb \ ${PKGDIR}/packages/zlib/*.bb \ ${UNSLUNG_EXTRA_BBFILES}" diff --git a/packages/linux/unslung-kernel/defconfig b/packages/linux/unslung-kernel/defconfig index 208041c6d6..d9a01070d5 100644 --- a/packages/linux/unslung-kernel/defconfig +++ b/packages/linux/unslung-kernel/defconfig @@ -596,7 +596,18 @@ CONFIG_PPP_BSDCOMP=m # # Wireless LAN (non-hamradio) # -# CONFIG_NET_RADIO is not set +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_WAVELAN is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_AIRO is not set +# CONFIG_HERMES is not set +# CONFIG_PLX_HERMES is not set +# CONFIG_PCI_HERMES is not set +CONFIG_NET_WIRELESS=y # # Token Ring devices diff --git a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb index 0a7a8f3dd2..4acc6d7a5f 100644 --- a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb +++ b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb @@ -4,7 +4,7 @@ include nslu2-linksys-kernel_2.4.22.bb DESCRIPTION = "Unslung kernel for the Linksys NSLU2 device" MAINTAINER = "NSLU2 Linux <www.nlsu2-linux.org>" -PR = "r2" +PR = "r3" KERNEL_SUFFIX = "unslung" diff --git a/packages/zd1211/zd1211-4916/.mtn2git_empty b/packages/zd1211/zd1211-4916/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/zd1211/zd1211-4916/.mtn2git_empty diff --git a/packages/zd1211/zd1211-4916/copy-break.patch b/packages/zd1211/zd1211-4916/copy-break.patch new file mode 100644 index 0000000000..a08c543550 --- /dev/null +++ b/packages/zd1211/zd1211-4916/copy-break.patch @@ -0,0 +1,11 @@ +--- zd1211-4916-r0/src/zd1205.c.cborig 2005-03-08 14:20:22.846179000 -0800 ++++ zd1211-4916-r0/src/zd1205.c 2005-03-08 14:21:09.432096896 -0800 +@@ -267,7 +267,7 @@ + zd1205_SwTcbQ_t free_txq_buf, active_txq_buf;
+ struct net_device *g_dev;
+ zd_80211Obj_t dot11Obj = {0};
+-#define RX_COPY_BREAK 0//1518 //we do bridge, don't care IP header alignment
++#define RX_COPY_BREAK MAX_WLAN_SIZE //It doesn't appear that unaligned frames work with TCP/UDP beyond a certain size + #define BEFORE_BEACON 5
+ /* Definition of Wireless Extension */
+
diff --git a/packages/zd1211/zd1211-4916/explicit-key-change.patch b/packages/zd1211/zd1211-4916/explicit-key-change.patch new file mode 100644 index 0000000000..ef01f3cb3e --- /dev/null +++ b/packages/zd1211/zd1211-4916/explicit-key-change.patch @@ -0,0 +1,24 @@ +--- zd1211-4916-r0/src/zd1205.c.korig 2005-03-04 13:45:07.000000000 -0800 ++++ zd1211-4916-r0/src/zd1205.c 2005-03-08 10:43:26.304994072 -0800 +@@ -5528,7 +5528,8 @@ + /* Check if the key is not marked as invalid */
+
+ if (!(erq->flags & IW_ENCODE_NOKEY)){
+- pSetting->EncryKeyId = index;
++ // Only change the current keyid when explicitly asked ++ // pSetting->EncryKeyId = index;
+
+
+ memcpy(&pSetting->keyVector[index][0], key, pSetting->WepKeyLen);
+--- zd1211-4916-r0/src/zd1211.c.orig 2005-03-08 17:15:24.085747960 -0800 ++++ zd1211-4916-r0/src/zd1211.c 2005-03-08 17:05:02.044312632 -0800 +@@ -3423,8 +3423,8 @@ + //update card setting
+
+ if (test_bit(KEVENT_UPDATE_SETTING, &macp->kevent_flags)){
+- zd_UpdateCardSetting(&macp->cardSetting);
+ clear_bit(KEVENT_UPDATE_SETTING, &macp->kevent_flags);
++ zd_UpdateCardSetting(&macp->cardSetting);
+ }
+
+
diff --git a/packages/zd1211/zd1211-4916/get-stats.patch b/packages/zd1211/zd1211-4916/get-stats.patch new file mode 100644 index 0000000000..0525522b43 --- /dev/null +++ b/packages/zd1211/zd1211-4916/get-stats.patch @@ -0,0 +1,77 @@ +--- zd1211-4916-r0/src/zd1205.h.orig 2005-01-28 22:55:15.000000000 -0800 ++++ zd1211-4916-r0/src/zd1205.h 2005-03-04 13:41:16.879006208 -0800 +@@ -611,6 +611,9 @@ + ***************************************************************************/
+ struct driver_stats {
+ struct net_device_stats net_stats;
++#ifdef CONFIG_NET_WIRELESS ++ struct iw_statistics iw_stats; ++#endif + unsigned long tx_late_col;
+ unsigned long tx_ok_defrd;
+ unsigned long tx_one_retry;
+--- zd1211-4916-r0/src/zd1205.c.orig 2005-03-03 18:43:48.000000000 -0800 ++++ zd1211-4916-r0/src/zd1205.c 2005-03-04 13:45:07.134002128 -0800 +@@ -4196,6 +4196,42 @@ + return &(macp->drv_stats.net_stats);
+ }
+
++/** ++ * zd1205wext_iw_get_stats - get driver statistics ++ ++ * @dev: adapter's net_device struct ++ * ++ * This routine is called when the OS wants the adapter's wireless ++ * stats returned. It returns the address of the iw_statistics ++ * stucture for the device. If the statistics are currently being ++ * updated, then they might be incorrect for a short while. However, ++ * since this cannot actually cause damage, no locking is used. ++ */ ++#if WIRELESS_EXT > 12 ++struct iw_statistics * ++zd1205wext_iw_get_stats(struct net_device *dev) ++{ ++ struct zd1205_private *macp = dev->priv; ++ struct iw_statistics *iw_stats = &macp->drv_stats.iw_stats; ++ ++ iw_stats->qual.noise = 161; ++ iw_stats->qual.qual = 0;//macp->rxInfo.rxSignalQuality; ++ iw_stats->qual.level = 0;//macp->rxInfo.rxSignalStrength; ++ iw_stats->qual.updated = 7; ++ ++ iw_stats->discard.nwid = 0; ++ iw_stats->discard.code = 0; ++ iw_stats->discard.fragment = 0; ++ iw_stats->discard.retries = macp->retryFailCnt; ++ iw_stats->discard.misc = macp->DropFirstFragCnt + macp->ErrLongFrmCnt + ++ macp->ErrShortFrmCnt + macp->ErrZeroLenFrmCnt; ++ ++ iw_stats->miss.beacon = 0; ++ ++ return iw_stats; ++} ++#endif ++ +
+ /**
+ * zd1205_set_mac - set the MAC address
+--- zd1211-4916-r0/src/zd1211.c.orig 2005-03-03 18:43:49.000000000 -0800 ++++ zd1211-4916-r0/src/zd1211.c 2005-03-04 13:44:31.122476712 -0800 +@@ -1873,6 +1873,9 @@ + #define ZD1211_TX_TIMEOUT (HZ*10)
+ #define ZD1211_MTU 1500
+ extern struct iw_handler_def p80211wext_handler_def;
++#ifdef CONFIG_NET_WIRELESS ++extern struct iw_statistics *zd1205wext_iw_get_stats(struct net_device *); ++#endif +
+ u8 zd1211_InitSetup(struct net_device *dev, struct zd1205_private *macp)
+
+@@ -1964,6 +1967,7 @@ +
+ #if WIRELESS_EXT > 12
+ dev->wireless_handlers = (struct iw_handler_def *)&p80211wext_handler_def;
++ dev->get_wireless_stats = &zd1205wext_iw_get_stats; + #endif
+
+ dev->hard_start_xmit = zd1205_xmit_frame;
diff --git a/packages/zd1211/zd1211-4916/makefile.patch b/packages/zd1211/zd1211-4916/makefile.patch new file mode 100644 index 0000000000..a01cb085bc --- /dev/null +++ b/packages/zd1211/zd1211-4916/makefile.patch @@ -0,0 +1,28 @@ +--- zd1211-4916-r0/Makefile.orig 2005-01-28 22:55:15.000000000 -0800 ++++ zd1211-4916-r0/Makefile 2005-02-18 17:03:09.009560224 -0800 +@@ -11,12 +11,12 @@ +
+
+ # if the kernel is 2.6.x, trun on this
+-KERN_26=y
+-KERNEL_SOURCE=/usr/src/linux-2.6.7
++#KERN_26=y
++#KERNEL_SOURCE=/usr/src/linux-2.6.7
+
+ # if the kernel is 2.4.x, trun on this
+-#KERN_24=y
+-#KERNEL_SOURCE=/usr/src/linux-2.4.24
++KERN_24=y
++KERNEL_SOURCE=/usr/src/linux-2.4.24
+
+ SRC_DIR=src
+ DEFINES=-D__KERNEL__ -DMODULE=1
+@@ -154,7 +154,7 @@ + all: $(MODULE)
+
+ $(MODULE): $(OBJECTS)
+- ld -r $(OBJECTS) -o $(MODULE)
++ $(LD) -r $(OBJECTS) -o $(MODULE)
+ chmod -x $(MODULE)
+
+ %.o: %.c
diff --git a/packages/zd1211/zd1211-4916/syntax.patch b/packages/zd1211/zd1211-4916/syntax.patch new file mode 100644 index 0000000000..969839e8dd --- /dev/null +++ b/packages/zd1211/zd1211-4916/syntax.patch @@ -0,0 +1,20 @@ +--- zd1211-4916-r0/src/zd1205.c.orig 2005-01-28 22:55:14.000000000 -0800 ++++ zd1211-4916-r0/src/zd1205.c 2005-02-18 17:40:39.136488936 -0800 +@@ -5182,6 +5182,7 @@ +
+
+ exit:
++ 1;
+ //read_unlock(&(macp->isolate_lock));
+
+ }
+--- zd1211-4916-r0/src/zdhci.c.orig 2005-01-28 22:55:15.000000000 -0800 ++++ zd1211-4916-r0/src/zdhci.c 2005-02-18 21:01:45.426134088 -0800 +@@ -10,6 +10,7 @@ + #define MAX_CHANNEL_ALLOW 13
+ zd_80211Obj_t *pdot11Obj = 0;
+ U16 CurrScanCH = 1;
++void zd_ChooseAP(void);
+
+ BOOLEAN zd_SendPkt(U8 *pEthHdr, U8 *pBody, U32 bodyLen, void *buf, U8 bEapol, void *pHash)
+ {
diff --git a/packages/zd1211/zd1211-4916/usb-endian.patch b/packages/zd1211/zd1211-4916/usb-endian.patch new file mode 100644 index 0000000000..f2516ff783 --- /dev/null +++ b/packages/zd1211/zd1211-4916/usb-endian.patch @@ -0,0 +1,298 @@ +diff -ur zdold/Makefile zd1211-4916-r0/Makefile +--- zdold/Makefile 2005-02-18 21:58:36.000000000 -0800 ++++ zd1211-4916-r0/Makefile 2005-02-28 17:59:05.000000000 -0800 +@@ -149,7 +149,7 @@ + CFLAGS += -DfNEW_CODE_MAP=1
+ CFLAGS += -DfWRITE_WORD_REG=1
+ CFLAGS += -DfREAD_MUL_REG=1
+-#CFLAGS += -DENHANCE_RX=1
++CFLAGS += -DENHANCE_RX=1
+
+ all: $(MODULE)
+
+diff -ur zdold/src/zd1211.c zd1211-4916-r0/src/zd1211.c +--- zdold/src/zd1211.c 2005-01-28 22:55:15.000000000 -0800 ++++ zd1211-4916-r0/src/zd1211.c 2005-03-01 14:41:07.003613776 -0800 +@@ -429,16 +429,16 @@ + memset(pRegBuffer, 0x0, size);
+
+
+- ((PUSB_WRITE_REG)pRegBuffer)->RequestID = REGID_PROG_FLSH;
+- ((PUSB_SET_RF) pRegBuffer)->Value = Value[0];
+- ((PUSB_SET_RF) pRegBuffer)->Index = Value[1];
++ ((PUSB_WRITE_REG)pRegBuffer)->RequestID = cpu_to_le16(REGID_PROG_FLSH);
++ ((PUSB_SET_RF) pRegBuffer)->Value = cpu_to_le16(Value[0]);
++ ((PUSB_SET_RF) pRegBuffer)->Index = cpu_to_le16(Value[1]);
+
+
+
+
+
+ for (ii = 2; ii < RegCount; ii ++)
+- ((PUSB_SET_RF)pRegBuffer)->Data[ii - 2] = Value[ii];
++ ((PUSB_SET_RF)pRegBuffer)->Data[ii - 2] = cpu_to_le16(Value[ii]);
+
+
+ bufSize = sizeof(u16) * (1+RegCount);
+@@ -513,7 +513,7 @@ + }else
+ memset(pRegBuffer, 0x0, size);
+
+- ((PUSB_READ_REG_REQ)pRegBuffer)->RequestID = REGID_READ;
++ ((PUSB_READ_REG_REQ)pRegBuffer)->RequestID = cpu_to_le16(REGID_READ);
+
+
+
+@@ -526,7 +526,7 @@ + else if ((Address[ii] & BASE_ADDR_MASK_HOST) == USB_BASE_ADDR_EEPROM)
+ Address[ii] = ((Address[ii] - USB_BASE_ADDR_EEPROM) / 2) + cFIRMWARE_EEPROM_OFFSET;
+ //0x9900 //0xF817
+- ((PUSB_READ_REG_REQ) pRegBuffer)->Address[ii] = Address[ii];
++ ((PUSB_READ_REG_REQ) pRegBuffer)->Address[ii] = cpu_to_le16(Address[ii]);
+
+ }
+
+@@ -608,7 +608,7 @@ + }
+ else {
+ for (ii = 0; ii < (macp->ReadRegCount-2) / 4; ii++){
+- pValue[ii] = *((u16 *) macp->IntEPBuffer2 + 1 + ii * 2 + 1);
++ pValue[ii] = le16_to_cpu(*((u16 *) macp->IntEPBuffer2 + 1 + ii * 2 + 1)); + }
+ ret = 0;
+
+@@ -686,7 +686,7 @@ + }
+
+ down(&macp->reg_sem);
+-
++
+
+
+ if ((RegCount == 0) || (!macp->bUSBDeveiceAttached) || !test_bit(ZD1211_RUNNING, &macp->flags)) {
+@@ -712,7 +712,7 @@ +
+
+
+- ((PUSB_WRITE_REG)pRegBuffer)->RequestID = REGID_WRITE;
++ ((PUSB_WRITE_REG)pRegBuffer)->RequestID = cpu_to_le16(REGID_WRITE);
+
+ if (RegCount > cMIN_MULTI_WRITE_REG_NUM){
+ for (i=cMIN_MULTI_WRITE_REG_NUM; i<RegCount; i++){
+@@ -724,8 +724,8 @@ + else if ((Address[i] & BASE_ADDR_MASK_HOST) == USB_BASE_ADDR_EEPROM)
+ Address[i] = ((Address[i] - USB_BASE_ADDR_EEPROM) / 2) + cFIRMWARE_EEPROM_OFFSET;
+
+- ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].Address = Address[i];
+- ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].WriteData_low = Value[i];
++ ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].Address = cpu_to_le16(Address[i]);
++ ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].WriteData_low = cpu_to_le16(Value[i]);
+ }
+ }
+
+@@ -1726,17 +1726,17 @@ +
+
+
+- ((PUSB_SET_RF)pRegBuffer)->RequestID = REGID_RFOFDMSET;
++ ((PUSB_SET_RF)pRegBuffer)->RequestID = cpu_to_le16(REGID_RFOFDMSET);
+
+ if (bIs3683A)
+- ((PUSB_SET_RF)pRegBuffer)->Value = 1;
++ ((PUSB_SET_RF)pRegBuffer)->Value = cpu_to_le16(1);
+ else
+- ((PUSB_SET_RF)pRegBuffer)->Value = 2;
++ ((PUSB_SET_RF)pRegBuffer)->Value = cpu_to_le16(2);
+
+- ((PUSB_SET_RF)pRegBuffer)->Index = (u16)S_bit_cnt;
++ ((PUSB_SET_RF)pRegBuffer)->Index = cpu_to_le16((u16)S_bit_cnt);
+
+ for (i = 0; i < S_bit_cnt; i ++)
+- ((PUSB_SET_RF)pRegBuffer)->Data[i] = InputValue[i];
++ ((PUSB_SET_RF)pRegBuffer)->Data[i] = cpu_to_le16(InputValue[i]);
+
+
+ bufSize = sizeof(u16) * (3+S_bit_cnt);
+@@ -2229,7 +2229,7 @@ +
+
+
+- ZD1211DEBUG(4, "actual_length = %x\n", urb->actual_length);
++ ZD1211DEBUG(2, "actual_length = %x\n", urb->actual_length);
+
+
+ rx_struct = list_entry(macp->active_rx_list.next,
+@@ -2266,7 +2266,7 @@ + if (last_pkt_len <= (macp->wMaxPacketSize - 4)){
+
+
+- if (((u16 *) pRxBuffer)[TotalLength / sizeof(u16) - 1] == 0x697E){
++ if (le16_to_cpu(((u16 *) pRxBuffer)[TotalLength / sizeof(u16) - 1]) == 0x697E){
+
+ total_rx_struct = 3;
+ //ZD1211DEBUG(0, "Got merged Rx Frames!!\n");
+@@ -2288,8 +2288,8 @@ + int CurFrmLen;
+
+ if (total_rx_struct> 1){
+- CurFrmLen = ((u16 *) pRxBuffer)[TotalLength / sizeof(u16) + i - 4];
+- //ZD1211DEBUG(2, "CurFrmLen = %x\n", CurFrmLen);
++ CurFrmLen = le16_to_cpu(((u16 *) pRxBuffer)[TotalLength / sizeof(u16) + i - 4]);
++ //ZD1211DEBUG(2, "[RX] CurFrmLen = %x\n", CurFrmLen);
+ }
+
+ else
+@@ -2316,22 +2316,22 @@ +
+
+
+- rfd->CbStatus = RFD_STATUS_COMPLETE;
+- rfd->ActualCount = CurFrmLen;
++ rfd->CbStatus = cpu_to_le32(RFD_STATUS_COMPLETE);
++ rfd->ActualCount = cpu_to_le32(CurFrmLen);
+
+
+ if (i > 0){
+ memcpy(&rfd->RxBuffer[macp->rxOffset],
+ pRxBuffer + tmpLen,
+- rfd->ActualCount);
++ CurFrmLen);
+
+ }
+
+
+- tmpLen += (rfd->ActualCount & ~0x03);
++ tmpLen += (CurFrmLen & ~0x03);
+
+
+- if (rfd->ActualCount & 0x03)
++ if (CurFrmLen & 0x03)
+ tmpLen += 4;
+
+ }
+@@ -2361,8 +2361,8 @@ +
+ #else
+
+- rfd->CbStatus = RFD_STATUS_COMPLETE;
+- rfd->ActualCount = TotalLength;
++ rfd->CbStatus = cpu_to_le32(RFD_STATUS_COMPLETE);
++ rfd->ActualCount = cpu_to_le32(TotalLength);
+ zd1205_rx_isr(macp);
+ #endif
+
+@@ -2521,8 +2521,8 @@ + // this is USB_READ_REGISTER response
+ macp->ReadRegCount = (u16)actual_length;
+
+- intNum = *(u16 *)(macp->IntEPBuffer+2);
+- //intNum = macp->IntEPBuffer[2] + (((u16)macp->IntEPBuffer[3]) << 8);
++ //intNum = *(u16 *)(macp->IntEPBuffer+2);
++ intNum = macp->IntEPBuffer[2] + (((u16)macp->IntEPBuffer[3]) << 8);
+
+ if (intNum == (InterruptCtrl | macp->USBCSRAddress)){
+ // Handle non-RxTx interrupt
+@@ -2549,8 +2549,8 @@ + case EPINT_RetryFial_Event:
+ {
+ u8 *pMacAddr = macp->IntEPBuffer + 4;
+- u8 NewRate = (u8)(*(u16 *)(macp->IntEPBuffer + 2));
+- //u8 NewRate = macp->IntEPBuffer[2];
++ //u8 NewRate = (u8)(*(u16 *)(macp->IntEPBuffer + 2));
++ u8 NewRate = (u8)macp->IntEPBuffer[2];
+ u16 aid;
+
+
+@@ -2568,7 +2568,7 @@ + //ZD1211DEBUG(2, "NewRate = %x\n", NewRate);
+ aid = zd_AidLookUp(pMacAddr);
+ zd_EventNotify(EVENT_TX_COMPLETE, ZD_RETRY_FAILED, 0xff, (U32)aid);
+- macp->retryFailCnt += *(u16 *)(macp->IntEPBuffer + 10);
++ macp->retryFailCnt += le16_to_cpu(*(u16 *)(macp->IntEPBuffer + 10));
+ break;
+
+ }
+@@ -2634,7 +2634,7 @@ + // in current design, no need to use spinlock
+
+
+- intr_status = *(u16 *)(macp->IntEPBuffer3+4);
++ intr_status = le16_to_cpu(*(u16 *)(macp->IntEPBuffer3+4));
+ //ZD1211DEBUG(2, "intr_status = %x\n", intr_status);
+
+ if (!intr_status)
+@@ -2765,7 +2765,7 @@ +
+ sw_tcb = macp->activeTxQ->first;
+ if (sw_tcb)
+- sw_tcb->pTcb->CbStatus = CB_STATUS_COMPLETE;
++ sw_tcb->pTcb->CbStatus = cpu_to_le32(CB_STATUS_COMPLETE);
+
+ zd1205_tx_isr(macp);
+
+@@ -2889,23 +2889,25 @@ + Tbd++;
+
+ //Mac Header
+- memcpy(dst, (u8 *)Tbd->TbdBufferAddrLowPart, Tbd->TbdCount);
++ memcpy(dst, (u8 *)le32_to_cpu(Tbd->TbdBufferAddrLowPart), ++ le32_to_cpu(Tbd->TbdCount));
+
+ ZD1211DEBUG(2, "MAC Header Length = %x\n", Tbd->TbdCount);
+- dst += Tbd->TbdCount;
++ dst += le32_to_cpu(Tbd->TbdCount);
+
+- TotalLength += Tbd->TbdCount;
++ TotalLength += le32_to_cpu(Tbd->TbdCount);
+
+ Tbd++;
+
+ //MAC Body
+- memcpy(dst, (u8 *)Tbd->TbdBufferAddrLowPart, Tbd->TbdCount);
++ memcpy(dst, (u8 *)le32_to_cpu(Tbd->TbdBufferAddrLowPart), ++ le32_to_cpu(Tbd->TbdCount)); +
+ ZD1211DEBUG(2, "Tx DATA Length = %x\n", Tbd->TbdCount);
+- dst += Tbd->TbdCount;
++ dst += le32_to_cpu(Tbd->TbdCount);
+
+
+- TotalLength += Tbd->TbdCount;
++ TotalLength += le32_to_cpu(Tbd->TbdCount);
+ Tbd++;
+
+ ZD1211DEBUG(2, "TotalLength = %x\n", TotalLength);
+@@ -2914,7 +2916,7 @@ +
+
+ // write down total length
+- *((u16 *)(macp->tx_buff+4)) = (u16)TotalLength + 14;
++ *((u16 *)(macp->tx_buff+4)) = cpu_to_le16((u16)TotalLength + 14);
+
+ ZD1211DEBUG(2, "macp->tx_buff+4 = %x\n", *((u16 *)(macp->tx_buff+4)));
+
+diff -ur zdold/src/zd1211.h zd1211-4916-r0/src/zd1211.h +--- zdold/src/zd1211.h 2005-01-28 22:55:14.000000000 -0800 ++++ zd1211-4916-r0/src/zd1211.h 2005-03-01 14:12:15.023914712 -0800 +@@ -146,7 +146,9 @@ + typedef struct _USB_WRITE_REG {
+ u16 RequestID;
+ USB_WRITE_REG_PACKAGE WritePackage[cMAX_MULTI_WRITE_REG_NUM];
+-} USB_WRITE_REG, * PUSB_WRITE_REG;
++} __attribute__((__packed__));
++
++typedef struct _USB_WRITE_REG USB_WRITE_REG, * PUSB_WRITE_REG;
+
+
+ typedef struct _USB_SET_RF {
+diff -ur zdold/src/zdshared.c zd1211-4916-r0/src/zdshared.c +--- zdold/src/zdshared.c 2005-01-28 22:55:15.000000000 -0800 ++++ zd1211-4916-r0/src/zdshared.c 2005-03-01 14:43:35.078103032 -0800 +@@ -416,6 +416,7 @@ + U16 len;
+ Frame_t *pf = pfrmDesc->mpdu;
+
++ pf->header[2] = pf->header[3] = 0; // Initialize them to something? + setFrameType(pf, ST_PROBE_REQ);
+ pf->body = pfrmDesc->buffer;
+ body = pf->body;
diff --git a/packages/zd1211/zd1211-4916/usb-ids.patch b/packages/zd1211/zd1211-4916/usb-ids.patch new file mode 100644 index 0000000000..3bb9b00e35 --- /dev/null +++ b/packages/zd1211/zd1211-4916/usb-ids.patch @@ -0,0 +1,21 @@ +--- zd1211-4916-r0/src/zdusb.h~ 2005-01-29 17:25:15.000000000 +1030 ++++ zd1211-4916-r0/src/zdusb.h 2005-08-24 10:39:06.000000000 +0930 +@@ -10,6 +10,8 @@ + #define PRODUCT_1211 0x1211
+ #define VENDOR_ZYXEL 0x0586 //ZyXEL
+ #define PRODUCT_G220 0x3401
++#define VENDOR_3COM 0x6891 //3COM
++#define PRODUCT_3CRUSB10075 0xa727
+
+
+ #endif
+--- zd1211-4916-r0/src/zdusb.c~ 2005-01-29 17:25:15.000000000 +1030 ++++ zd1211-4916-r0/src/zdusb.c 2005-08-24 10:39:30.000000000 +0930 +@@ -59,6 +59,7 @@ + static struct usb_device_id zd1211_ids [] = {
+ { USB_DEVICE(VENDOR_ZYDAS, PRODUCT_1211) },
+ { USB_DEVICE(VENDOR_ZYXEL, PRODUCT_G220) },
++ { USB_DEVICE(VENDOR_3COM, PRODUCT_3CRUSB10075) },
+ { } /* Terminating entry */
+ };
+
diff --git a/packages/zd1211/zd1211_4916.bb b/packages/zd1211/zd1211_4916.bb new file mode 100644 index 0000000000..4d49409b5e --- /dev/null +++ b/packages/zd1211/zd1211_4916.bb @@ -0,0 +1,35 @@ +SRC_URI = "${SOURCEFORGE_MIRROR}/zd1211/sf-zd1211-${PV}-src.tar.gz \ + file://makefile.patch;patch=1 \ + file://syntax.patch;patch=1 \ + file://usb-endian.patch;patch=1 \ + file://usb-ids.patch;patch=1 \ + file://get-stats.patch;patch=1 \ + file://explicit-key-change.patch;patch=1 \ + file://copy-break.patch;patch=1" +S = "${WORKDIR}" +LICENSE = "GPL" + +inherit module-base +SECTION = "base" + +do_configure() { + : +} + +CFLAGS = "-DLINUX_OS -D__KERNEL__ -DMODULE -I${S}/src/includes -I${S}/src/includes/pcmcia -I${STAGING_KERNEL_DIR}/include" + +do_compile() { + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \ + KERNEL_SRC=${STAGING_KERNEL_DIR} \ + KERNEL_VERSION=${KERNEL_VERSION} \ + CC="${KERNEL_CC}" LD="${KERNEL_LD}" \ + ${MAKE_TARGETS} +} + +do_install() { + install -d ${D}/opt/lib/modules/${KERNEL_VERSION}/wireless + install -m 0644 zd1211.o ${D}/opt/lib/modules/${KERNEL_VERSION}/wireless/zd1211.o +} + +FILES_${PN} = "/opt/lib/modules" |