zd1211: Added zd1211-4916 (rumoured to work with Unslung).
authorRod Whitby <rod@whitby.id.au>
Wed, 24 Aug 2005 02:14:20 +0000 (02:14 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Wed, 24 Aug 2005 02:14:20 +0000 (02:14 +0000)
packages/zd1211/zd1211-4916/.mtn2git_empty [new file with mode: 0644]
packages/zd1211/zd1211-4916/copy-break.patch [new file with mode: 0644]
packages/zd1211/zd1211-4916/explicit-key-change.patch [new file with mode: 0644]
packages/zd1211/zd1211-4916/get-stats.patch [new file with mode: 0644]
packages/zd1211/zd1211-4916/makefile.patch [new file with mode: 0644]
packages/zd1211/zd1211-4916/syntax.patch [new file with mode: 0644]
packages/zd1211/zd1211-4916/usb-endian.patch [new file with mode: 0644]
packages/zd1211/zd1211-4916/usb-ids.patch [new file with mode: 0644]
packages/zd1211/zd1211_4916.bb [new file with mode: 0644]

diff --git a/packages/zd1211/zd1211-4916/.mtn2git_empty b/packages/zd1211/zd1211-4916/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/zd1211/zd1211-4916/copy-break.patch b/packages/zd1211/zd1211-4916/copy-break.patch
new file mode 100644 (file)
index 0000000..a08c543
--- /dev/null
@@ -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;\r
+ struct net_device *g_dev;\r
+ zd_80211Obj_t dot11Obj = {0};\r
+-#define RX_COPY_BREAK       0//1518 //we do bridge, don't care IP header alignment\r
++#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\r
+ /* Definition of Wireless Extension */\r
\r
diff --git a/packages/zd1211/zd1211-4916/explicit-key-change.patch b/packages/zd1211/zd1211-4916/explicit-key-change.patch
new file mode 100644 (file)
index 0000000..ef01f3c
--- /dev/null
@@ -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 */\r
\r
+         if (!(erq->flags & IW_ENCODE_NOKEY)){\r
+-            pSetting->EncryKeyId = index;\r
++            // Only change the current keyid when explicitly asked
++            // pSetting->EncryKeyId = index;\r
\r
\r
+             memcpy(&pSetting->keyVector[index][0], key, pSetting->WepKeyLen);\r
+--- 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\r
\r
+    if (test_bit(KEVENT_UPDATE_SETTING, &macp->kevent_flags)){\r
+-      zd_UpdateCardSetting(&macp->cardSetting);\r
+       clear_bit(KEVENT_UPDATE_SETTING, &macp->kevent_flags);\r
++      zd_UpdateCardSetting(&macp->cardSetting);\r
+    }\r
\r
\r
diff --git a/packages/zd1211/zd1211-4916/get-stats.patch b/packages/zd1211/zd1211-4916/get-stats.patch
new file mode 100644 (file)
index 0000000..0525522
--- /dev/null
@@ -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 @@
+ ***************************************************************************/\r
+ struct driver_stats {\r
+       struct net_device_stats net_stats;\r
++#ifdef CONFIG_NET_WIRELESS
++        struct iw_statistics    iw_stats;
++#endif
+       unsigned long tx_late_col;\r
+       unsigned long tx_ok_defrd;\r
+       unsigned long tx_one_retry;\r
+--- 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);\r
+ }\r
\r
++/**
++ * 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
++
\r
+ /**\r
+  * zd1205_set_mac - set the MAC address\r
+--- 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)\r
+ #define       ZD1211_MTU                      1500\r
+ extern struct iw_handler_def p80211wext_handler_def;\r
++#ifdef CONFIG_NET_WIRELESS
++extern  struct iw_statistics *zd1205wext_iw_get_stats(struct net_device *);
++#endif
\r
+ u8 zd1211_InitSetup(struct net_device *dev, struct zd1205_private *macp)\r
\r
+@@ -1964,6 +1967,7 @@
\r
+ #if WIRELESS_EXT > 12\r
+     dev->wireless_handlers = (struct iw_handler_def *)&p80211wext_handler_def;\r
++    dev->get_wireless_stats = &zd1205wext_iw_get_stats;
+ #endif\r
+     \r
+       dev->hard_start_xmit = zd1205_xmit_frame;\r
diff --git a/packages/zd1211/zd1211-4916/makefile.patch b/packages/zd1211/zd1211-4916/makefile.patch
new file mode 100644 (file)
index 0000000..a01cb08
--- /dev/null
@@ -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 @@
\r
\r
+ # if the kernel is 2.6.x, trun on this\r
+-KERN_26=y\r
+-KERNEL_SOURCE=/usr/src/linux-2.6.7\r
++#KERN_26=y\r
++#KERNEL_SOURCE=/usr/src/linux-2.6.7\r
\r
+ # if the kernel is 2.4.x, trun on this\r
+-#KERN_24=y\r
+-#KERNEL_SOURCE=/usr/src/linux-2.4.24\r
++KERN_24=y\r
++KERNEL_SOURCE=/usr/src/linux-2.4.24\r
\r
+ SRC_DIR=src\r
+ DEFINES=-D__KERNEL__ -DMODULE=1\r
+@@ -154,7 +154,7 @@
+ all: $(MODULE)\r
\r
+ $(MODULE): $(OBJECTS)\r
+-      ld -r $(OBJECTS) -o $(MODULE)\r
++      $(LD) -r $(OBJECTS) -o $(MODULE)\r
+       chmod -x $(MODULE)\r
\r
+ %.o: %.c\r
diff --git a/packages/zd1211/zd1211-4916/syntax.patch b/packages/zd1211/zd1211-4916/syntax.patch
new file mode 100644 (file)
index 0000000..969839e
--- /dev/null
@@ -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 @@
\r
+  \r
+ exit:\r
++      1;\r
+       //read_unlock(&(macp->isolate_lock));    \r
\r
+ }\r
+--- 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\r
+ zd_80211Obj_t *pdot11Obj = 0;\r
+ U16 CurrScanCH = 1;\r
++void zd_ChooseAP(void);\r
\r
+ BOOLEAN zd_SendPkt(U8 *pEthHdr, U8 *pBody, U32 bodyLen, void *buf, U8 bEapol, void *pHash)\r
+ {\r
diff --git a/packages/zd1211/zd1211-4916/usb-endian.patch b/packages/zd1211/zd1211-4916/usb-endian.patch
new file mode 100644 (file)
index 0000000..f2516ff
--- /dev/null
@@ -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\r
+ CFLAGS += -DfWRITE_WORD_REG=1\r
+ CFLAGS += -DfREAD_MUL_REG=1\r
+-#CFLAGS += -DENHANCE_RX=1\r
++CFLAGS += -DENHANCE_RX=1\r
\r
+ all: $(MODULE)\r
\r
+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);                     \r
\r
+  \r
+-    ((PUSB_WRITE_REG)pRegBuffer)->RequestID = REGID_PROG_FLSH;\r
+-    ((PUSB_SET_RF) pRegBuffer)->Value       = Value[0];\r
+-    ((PUSB_SET_RF) pRegBuffer)->Index       = Value[1];\r
++    ((PUSB_WRITE_REG)pRegBuffer)->RequestID = cpu_to_le16(REGID_PROG_FLSH);\r
++    ((PUSB_SET_RF) pRegBuffer)->Value       = cpu_to_le16(Value[0]);\r
++    ((PUSB_SET_RF) pRegBuffer)->Index       = cpu_to_le16(Value[1]);\r
\r
\r
\r
\r
\r
+     for (ii = 2; ii < RegCount; ii ++)\r
+-      ((PUSB_SET_RF)pRegBuffer)->Data[ii - 2] = Value[ii];\r
++      ((PUSB_SET_RF)pRegBuffer)->Data[ii - 2] = cpu_to_le16(Value[ii]);\r
\r
+     \r
+     bufSize = sizeof(u16) * (1+RegCount);\r
+@@ -513,7 +513,7 @@
+       }else\r
+               memset(pRegBuffer, 0x0, size);\r
\r
+-    ((PUSB_READ_REG_REQ)pRegBuffer)->RequestID  = REGID_READ;\r
++      ((PUSB_READ_REG_REQ)pRegBuffer)->RequestID  = cpu_to_le16(REGID_READ);\r
\r
+     \r
\r
+@@ -526,7 +526,7 @@
+         else if ((Address[ii] & BASE_ADDR_MASK_HOST) == USB_BASE_ADDR_EEPROM)\r
+            Address[ii] = ((Address[ii] - USB_BASE_ADDR_EEPROM) / 2) + cFIRMWARE_EEPROM_OFFSET;\r
+                                          //0x9900                     //0xF817\r
+-        ((PUSB_READ_REG_REQ) pRegBuffer)->Address[ii] = Address[ii];\r
++        ((PUSB_READ_REG_REQ) pRegBuffer)->Address[ii] = cpu_to_le16(Address[ii]);\r
\r
+     }\r
\r
+@@ -608,7 +608,7 @@
+     }    \r
+     else {\r
+         for (ii = 0; ii < (macp->ReadRegCount-2) / 4; ii++){\r
+-            pValue[ii] = *((u16 *) macp->IntEPBuffer2 + 1 + ii * 2 + 1);\r
++        pValue[ii] = le16_to_cpu(*((u16 *) macp->IntEPBuffer2 + 1 + ii * 2 + 1));
+         }    \r
+         ret = 0;    \r
\r
+@@ -686,7 +686,7 @@
+     }    \r
\r
+       down(&macp->reg_sem);       \r
+-              \r
++\r
\r
\r
+     if ((RegCount == 0) || (!macp->bUSBDeveiceAttached) || !test_bit(ZD1211_RUNNING, &macp->flags)) { \r
+@@ -712,7 +712,7 @@
\r
\r
\r
+-      ((PUSB_WRITE_REG)pRegBuffer)->RequestID = REGID_WRITE;\r
++      ((PUSB_WRITE_REG)pRegBuffer)->RequestID = cpu_to_le16(REGID_WRITE);\r
\r
+     if (RegCount > cMIN_MULTI_WRITE_REG_NUM){\r
+         for (i=cMIN_MULTI_WRITE_REG_NUM; i<RegCount; i++){\r
+@@ -724,8 +724,8 @@
+             else if ((Address[i] & BASE_ADDR_MASK_HOST) == USB_BASE_ADDR_EEPROM)\r
+                 Address[i] = ((Address[i] - USB_BASE_ADDR_EEPROM) / 2) + cFIRMWARE_EEPROM_OFFSET;\r
\r
+-            ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].Address = Address[i];\r
+-            ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].WriteData_low = Value[i];\r
++            ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].Address = cpu_to_le16(Address[i]);\r
++            ((PUSB_WRITE_REG)pRegBuffer)->WritePackage[i].WriteData_low = cpu_to_le16(Value[i]);\r
+          }\r
+     }\r
\r
+@@ -1726,17 +1726,17 @@
\r
\r
\r
+-      ((PUSB_SET_RF)pRegBuffer)->RequestID = REGID_RFOFDMSET;\r
++      ((PUSB_SET_RF)pRegBuffer)->RequestID = cpu_to_le16(REGID_RFOFDMSET);\r
+       \r
+       if (bIs3683A)\r
+-              ((PUSB_SET_RF)pRegBuffer)->Value = 1;\r
++              ((PUSB_SET_RF)pRegBuffer)->Value = cpu_to_le16(1);\r
+       else\r
+-              ((PUSB_SET_RF)pRegBuffer)->Value = 2;\r
++              ((PUSB_SET_RF)pRegBuffer)->Value = cpu_to_le16(2);\r
+       \r
+-      ((PUSB_SET_RF)pRegBuffer)->Index = (u16)S_bit_cnt;\r
++      ((PUSB_SET_RF)pRegBuffer)->Index = cpu_to_le16((u16)S_bit_cnt);\r
\r
+     for (i = 0; i < S_bit_cnt; i ++)\r
+-        ((PUSB_SET_RF)pRegBuffer)->Data[i] = InputValue[i];\r
++        ((PUSB_SET_RF)pRegBuffer)->Data[i] = cpu_to_le16(InputValue[i]);\r
\r
\r
+       bufSize = sizeof(u16) * (3+S_bit_cnt);\r
+@@ -2229,7 +2229,7 @@
\r
\r
\r
+-    ZD1211DEBUG(4, "actual_length = %x\n", urb->actual_length);\r
++    ZD1211DEBUG(2, "actual_length = %x\n", urb->actual_length);\r
\r
\r
+       rx_struct = list_entry(macp->active_rx_list.next,\r
+@@ -2266,7 +2266,7 @@
+     if (last_pkt_len <= (macp->wMaxPacketSize - 4)){\r
\r
\r
+-       if (((u16 *) pRxBuffer)[TotalLength / sizeof(u16) - 1] == 0x697E){\r
++       if (le16_to_cpu(((u16 *) pRxBuffer)[TotalLength / sizeof(u16) - 1]) == 0x697E){\r
\r
+             total_rx_struct = 3;\r
+             //ZD1211DEBUG(0, "Got merged Rx Frames!!\n");\r
+@@ -2288,8 +2288,8 @@
+             int CurFrmLen;\r
\r
+             if (total_rx_struct> 1){\r
+-                CurFrmLen = ((u16 *) pRxBuffer)[TotalLength / sizeof(u16) + i - 4];\r
+-                //ZD1211DEBUG(2, "CurFrmLen = %x\n", CurFrmLen);\r
++                CurFrmLen = le16_to_cpu(((u16 *) pRxBuffer)[TotalLength / sizeof(u16) + i - 4]);\r
++                //ZD1211DEBUG(2, "[RX] CurFrmLen = %x\n", CurFrmLen);\r
+             }    \r
\r
+             else\r
+@@ -2316,22 +2316,22 @@
\r
+       \r
\r
+-            rfd->CbStatus = RFD_STATUS_COMPLETE;\r
+-            rfd->ActualCount = CurFrmLen;\r
++            rfd->CbStatus = cpu_to_le32(RFD_STATUS_COMPLETE);\r
++            rfd->ActualCount = cpu_to_le32(CurFrmLen);\r
\r
\r
+             if (i > 0){\r
+                 memcpy(&rfd->RxBuffer[macp->rxOffset],\r
+                       pRxBuffer + tmpLen,\r
+-                    rfd->ActualCount);\r
++                    CurFrmLen);\r
\r
+             }        \r
\r
\r
+-            tmpLen += (rfd->ActualCount & ~0x03);\r
++            tmpLen += (CurFrmLen & ~0x03);\r
\r
\r
+-            if (rfd->ActualCount & 0x03)\r
++            if (CurFrmLen & 0x03)\r
+                 tmpLen += 4;\r
\r
+        }\r
+@@ -2361,8 +2361,8 @@
\r
+ #else\r
\r
+-    rfd->CbStatus = RFD_STATUS_COMPLETE;\r
+-    rfd->ActualCount = TotalLength;\r
++    rfd->CbStatus = cpu_to_le32(RFD_STATUS_COMPLETE);\r
++    rfd->ActualCount = cpu_to_le32(TotalLength);\r
+     zd1205_rx_isr(macp);\r
+ #endif\r
\r
+@@ -2521,8 +2521,8 @@
+                               // this is USB_READ_REGISTER response\r
+                   macp->ReadRegCount = (u16)actual_length;\r
\r
+-                intNum = *(u16 *)(macp->IntEPBuffer+2);\r
+-                //intNum = macp->IntEPBuffer[2] + (((u16)macp->IntEPBuffer[3]) << 8);\r
++                //intNum = *(u16 *)(macp->IntEPBuffer+2);\r
++                intNum = macp->IntEPBuffer[2] + (((u16)macp->IntEPBuffer[3]) << 8);\r
+                \r
+                 if (intNum == (InterruptCtrl | macp->USBCSRAddress)){   \r
+                                       // Handle non-RxTx interrupt\r
+@@ -2549,8 +2549,8 @@
+                       case EPINT_RetryFial_Event:\r
+                       {\r
+                               u8 *pMacAddr = macp->IntEPBuffer + 4;\r
+-                              u8 NewRate = (u8)(*(u16 *)(macp->IntEPBuffer + 2));\r
+-                //u8 NewRate = macp->IntEPBuffer[2];\r
++                              //u8 NewRate = (u8)(*(u16 *)(macp->IntEPBuffer + 2));\r
++                u8 NewRate = (u8)macp->IntEPBuffer[2];\r
+                               u16 aid;\r
\r
\r
+@@ -2568,7 +2568,7 @@
+                       //ZD1211DEBUG(2, "NewRate = %x\n", NewRate);\r
+                       aid = zd_AidLookUp(pMacAddr);\r
+                       zd_EventNotify(EVENT_TX_COMPLETE, ZD_RETRY_FAILED, 0xff, (U32)aid);\r
+-                              macp->retryFailCnt +=  *(u16 *)(macp->IntEPBuffer + 10);\r
++                              macp->retryFailCnt +=  le16_to_cpu(*(u16 *)(macp->IntEPBuffer + 10));\r
+                               break;\r
\r
+                       }\r
+@@ -2634,7 +2634,7 @@
+       // in current design, no need to use spinlock\r
\r
\r
+-      intr_status = *(u16 *)(macp->IntEPBuffer3+4);\r
++      intr_status = le16_to_cpu(*(u16 *)(macp->IntEPBuffer3+4));\r
+     //ZD1211DEBUG(2, "intr_status = %x\n", intr_status);\r
+  \r
+     if (!intr_status)\r
+@@ -2765,7 +2765,7 @@
\r
+       sw_tcb = macp->activeTxQ->first;\r
+       if (sw_tcb) \r
+-              sw_tcb->pTcb->CbStatus = CB_STATUS_COMPLETE;\r
++              sw_tcb->pTcb->CbStatus = cpu_to_le32(CB_STATUS_COMPLETE);\r
\r
+       zd1205_tx_isr(macp);\r
\r
+@@ -2889,23 +2889,25 @@
+       Tbd++;\r
\r
+       //Mac Header\r
+-      memcpy(dst, (u8 *)Tbd->TbdBufferAddrLowPart, Tbd->TbdCount);\r
++      memcpy(dst, (u8 *)le32_to_cpu(Tbd->TbdBufferAddrLowPart), 
++             le32_to_cpu(Tbd->TbdCount));\r
\r
+     ZD1211DEBUG(2, "MAC Header Length = %x\n", Tbd->TbdCount);\r
+-      dst += Tbd->TbdCount;\r
++      dst += le32_to_cpu(Tbd->TbdCount);\r
\r
+-      TotalLength += Tbd->TbdCount;\r
++      TotalLength += le32_to_cpu(Tbd->TbdCount);\r
\r
+       Tbd++;\r
\r
+       //MAC Body\r
+-      memcpy(dst, (u8 *)Tbd->TbdBufferAddrLowPart, Tbd->TbdCount);\r
++      memcpy(dst, (u8 *)le32_to_cpu(Tbd->TbdBufferAddrLowPart), 
++             le32_to_cpu(Tbd->TbdCount));
\r
+     ZD1211DEBUG(2, "Tx DATA Length = %x\n", Tbd->TbdCount);\r
+-      dst += Tbd->TbdCount;\r
++      dst += le32_to_cpu(Tbd->TbdCount);\r
\r
\r
+-      TotalLength += Tbd->TbdCount;\r
++      TotalLength += le32_to_cpu(Tbd->TbdCount);\r
+       Tbd++;\r
\r
+     ZD1211DEBUG(2, "TotalLength = %x\n", TotalLength);\r
+@@ -2914,7 +2916,7 @@
\r
\r
+       // write down total length\r
+-      *((u16 *)(macp->tx_buff+4)) = (u16)TotalLength + 14;\r
++      *((u16 *)(macp->tx_buff+4)) = cpu_to_le16((u16)TotalLength + 14);\r
\r
+       ZD1211DEBUG(2, "macp->tx_buff+4 = %x\n", *((u16 *)(macp->tx_buff+4)));\r
\r
+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 {\r
+       u16  RequestID;\r
+     USB_WRITE_REG_PACKAGE WritePackage[cMAX_MULTI_WRITE_REG_NUM];\r
+-} USB_WRITE_REG, * PUSB_WRITE_REG;\r
++} __attribute__((__packed__));\r
++\r
++typedef struct _USB_WRITE_REG USB_WRITE_REG, * PUSB_WRITE_REG;\r
\r
\r
+ typedef struct _USB_SET_RF {\r
+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;\r
+       Frame_t *pf = pfrmDesc->mpdu;\r
+       \r
++      pf->header[2] = pf->header[3] = 0; // Initialize them to something?
+       setFrameType(pf, ST_PROBE_REQ);\r
+       pf->body = pfrmDesc->buffer;\r
+       body = pf->body;\r
diff --git a/packages/zd1211/zd1211-4916/usb-ids.patch b/packages/zd1211/zd1211-4916/usb-ids.patch
new file mode 100644 (file)
index 0000000..3bb9b00
--- /dev/null
@@ -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\r
+ #define VENDOR_ZYXEL  0x0586  //ZyXEL\r
+ #define PRODUCT_G220  0x3401\r
++#define VENDOR_3COM   0x6891  //3COM\r
++#define PRODUCT_3CRUSB10075 0xa727    \r
\r
\r
+ #endif\r
+--- 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 [] = {\r
+       { USB_DEVICE(VENDOR_ZYDAS, PRODUCT_1211) },\r
+     { USB_DEVICE(VENDOR_ZYXEL, PRODUCT_G220) },\r
++    { USB_DEVICE(VENDOR_3COM, PRODUCT_3CRUSB10075) },\r
+       { }                                     /* Terminating entry */\r
+ };\r
\r
diff --git a/packages/zd1211/zd1211_4916.bb b/packages/zd1211/zd1211_4916.bb
new file mode 100644 (file)
index 0000000..4d49409
--- /dev/null
@@ -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"