From 627a6c6b681e7c7c293f19d61c6f7ff5c5439f63 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Thu, 30 Oct 2008 13:05:42 +0200 Subject: Staging: w35und: move source files to one directory As we're trying to get rid of the "compatability layer" in the driver, move everything under one directory. Keeping some of the files under drivers/staging/winbond/linux is a major pain in the ass whenever you're cleaning up the driver. Acked-by: Pavel Machek Signed-off-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman --- drivers/staging/winbond/wb35tx_f.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 drivers/staging/winbond/wb35tx_f.h (limited to 'drivers/staging/winbond/wb35tx_f.h') diff --git a/drivers/staging/winbond/wb35tx_f.h b/drivers/staging/winbond/wb35tx_f.h new file mode 100644 index 000000000000..6aca4e99b91d --- /dev/null +++ b/drivers/staging/winbond/wb35tx_f.h @@ -0,0 +1,25 @@ +#ifndef __WINBOND_WB35TX_F_H +#define __WINBOND_WB35TX_F_H + +#include "wbhal_f.h" + +//==================================== +// Interface function declare +//==================================== +unsigned char Wb35Tx_initial( phw_data_t pHwData ); +void Wb35Tx_destroy( phw_data_t pHwData ); +unsigned char Wb35Tx_get_tx_buffer( phw_data_t pHwData, u8 **pBuffer ); + +void Wb35Tx_EP2VM( phw_data_t pHwData ); +void Wb35Tx_EP2VM_start( phw_data_t pHwData ); +void Wb35Tx_EP2VM_complete(struct urb *urb); + +void Wb35Tx_start( phw_data_t pHwData ); +void Wb35Tx_stop( phw_data_t pHwData ); +void Wb35Tx( phw_data_t pHwData ); +void Wb35Tx_complete(struct urb *urb); +void Wb35Tx_reset_descriptor( phw_data_t pHwData ); + +void Wb35Tx_CurrentTime( phw_data_t pHwData, u32 TimeCount ); + +#endif -- cgit v1.2.3 From 2b16ae7f8be36942ebeb82f0de3e6bbfaa5f5852 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Thu, 30 Oct 2008 16:14:36 +0200 Subject: Staging: w35und: remove ->adapter from struct _HW_DATA_T Eventually we want to pass a pointer to struct ieee80211_hw around in the driver, so remove the bidirectional link between struct wb35_adapter and struct _HW_DATA_T to simplify the code. Acked-by: Pavel Machek Signed-off-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman --- drivers/staging/winbond/mds.c | 2 +- drivers/staging/winbond/wb35tx.c | 38 +++++++++++++++++++++----------------- drivers/staging/winbond/wb35tx_f.h | 11 ++++++----- drivers/staging/winbond/wbhal.c | 24 ++++++++++++------------ drivers/staging/winbond/wbhal_f.h | 6 +++--- drivers/staging/winbond/wbhal_s.h | 10 ---------- 6 files changed, 43 insertions(+), 48 deletions(-) (limited to 'drivers/staging/winbond/wb35tx_f.h') diff --git a/drivers/staging/winbond/mds.c b/drivers/staging/winbond/mds.c index e680157c6ada..35ea100a665c 100644 --- a/drivers/staging/winbond/mds.c +++ b/drivers/staging/winbond/mds.c @@ -176,7 +176,7 @@ Mds_Tx(struct wb35_adapter * adapter) // Start to send by lower module // if (!pHwData->IsKeyPreSet) - Wb35Tx_start(pHwData); + Wb35Tx_start(adapter); cleanup: atomic_dec(&pMds->TxThreadCount); diff --git a/drivers/staging/winbond/wb35tx.c b/drivers/staging/winbond/wb35tx.c index af4a61fdc072..ce7e9812739f 100644 --- a/drivers/staging/winbond/wb35tx.c +++ b/drivers/staging/winbond/wb35tx.c @@ -23,23 +23,24 @@ Wb35Tx_get_tx_buffer(phw_data_t pHwData, u8 **pBuffer) return true; } -void Wb35Tx_start(phw_data_t pHwData) +void Wb35Tx_start(struct wb35_adapter *adapter) { + phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; // Allow only one thread to run into function if (atomic_inc_return(&pWb35Tx->TxFireCounter) == 1) { pWb35Tx->EP4vm_state = VM_RUNNING; - Wb35Tx(pHwData); + Wb35Tx(adapter); } else atomic_dec(&pWb35Tx->TxFireCounter); } -void Wb35Tx(phw_data_t pHwData) +void Wb35Tx(struct wb35_adapter *adapter) { + phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; - struct wb35_adapter *adapter = pHwData->adapter; u8 *pTxBufferAddress; PMDS pMds = &adapter->Mds; struct urb * pUrb = (struct urb *)pWb35Tx->Tx4Urb; @@ -65,7 +66,7 @@ void Wb35Tx(phw_data_t pHwData) usb_fill_bulk_urb(pUrb, pHwData->WbUsb.udev, usb_sndbulkpipe(pHwData->WbUsb.udev, 4), pTxBufferAddress, pMds->TxBufferSize[ SendIndex ], - Wb35Tx_complete, pHwData); + Wb35Tx_complete, adapter); pWb35Tx->EP4vm_state = VM_RUNNING; retv = usb_submit_urb(pUrb, GFP_ATOMIC); @@ -77,7 +78,7 @@ void Wb35Tx(phw_data_t pHwData) // Check if driver needs issue Irp for EP2 pWb35Tx->TxFillCount += pMds->TxCountInBuffer[SendIndex]; if (pWb35Tx->TxFillCount > 12) - Wb35Tx_EP2VM_start( pHwData ); + Wb35Tx_EP2VM_start(adapter); pWb35Tx->ByteTransfer += pMds->TxBufferSize[SendIndex]; return; @@ -90,8 +91,8 @@ void Wb35Tx(phw_data_t pHwData) void Wb35Tx_complete(struct urb * pUrb) { - phw_data_t pHwData = pUrb->context; - struct wb35_adapter *adapter = pHwData->adapter; + struct wb35_adapter *adapter = pUrb->context; + phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; PMDS pMds = &adapter->Mds; @@ -117,7 +118,7 @@ void Wb35Tx_complete(struct urb * pUrb) } Mds_Tx(adapter); - Wb35Tx(pHwData); + Wb35Tx(adapter); return; error: @@ -193,8 +194,9 @@ void Wb35Tx_destroy(phw_data_t pHwData) #endif } -void Wb35Tx_CurrentTime(phw_data_t pHwData, u32 TimeCount) +void Wb35Tx_CurrentTime(struct wb35_adapter *adapter, u32 TimeCount) { + phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; unsigned char Trigger = false; @@ -205,26 +207,28 @@ void Wb35Tx_CurrentTime(phw_data_t pHwData, u32 TimeCount) if (Trigger) { pWb35Tx->TxTimer = TimeCount; - Wb35Tx_EP2VM_start( pHwData ); + Wb35Tx_EP2VM_start(adapter); } } -void Wb35Tx_EP2VM_start(phw_data_t pHwData) +void Wb35Tx_EP2VM_start(struct wb35_adapter *adapter) { + phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; // Allow only one thread to run into function if (atomic_inc_return(&pWb35Tx->TxResultCount) == 1) { pWb35Tx->EP2vm_state = VM_RUNNING; - Wb35Tx_EP2VM( pHwData ); + Wb35Tx_EP2VM(adapter); } else atomic_dec(&pWb35Tx->TxResultCount); } -void Wb35Tx_EP2VM(phw_data_t pHwData) +void Wb35Tx_EP2VM(struct wb35_adapter *adapter) { + phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; struct urb * pUrb = (struct urb *)pWb35Tx->Tx2Urb; u32 * pltmp = (u32 *)pWb35Tx->EP2_buf; @@ -240,7 +244,7 @@ void Wb35Tx_EP2VM(phw_data_t pHwData) // Issuing URB // usb_fill_int_urb( pUrb, pHwData->WbUsb.udev, usb_rcvintpipe(pHwData->WbUsb.udev,2), - pltmp, MAX_INTERRUPT_LENGTH, Wb35Tx_EP2VM_complete, pHwData, 32); + pltmp, MAX_INTERRUPT_LENGTH, Wb35Tx_EP2VM_complete, adapter, 32); pWb35Tx->EP2vm_state = VM_RUNNING; retv = usb_submit_urb(pUrb, GFP_ATOMIC); @@ -261,9 +265,9 @@ error: void Wb35Tx_EP2VM_complete(struct urb * pUrb) { - phw_data_t pHwData = pUrb->context; + struct wb35_adapter *adapter = pUrb->context; + phw_data_t pHwData = &adapter->sHwData; T02_DESCRIPTOR T02, TSTATUS; - struct wb35_adapter *adapter = pHwData->adapter; PWB35TX pWb35Tx = &pHwData->Wb35Tx; u32 * pltmp = (u32 *)pWb35Tx->EP2_buf; u32 i; diff --git a/drivers/staging/winbond/wb35tx_f.h b/drivers/staging/winbond/wb35tx_f.h index 6aca4e99b91d..466eb6f26c60 100644 --- a/drivers/staging/winbond/wb35tx_f.h +++ b/drivers/staging/winbond/wb35tx_f.h @@ -1,6 +1,7 @@ #ifndef __WINBOND_WB35TX_F_H #define __WINBOND_WB35TX_F_H +#include "adapter.h" #include "wbhal_f.h" //==================================== @@ -10,16 +11,16 @@ unsigned char Wb35Tx_initial( phw_data_t pHwData ); void Wb35Tx_destroy( phw_data_t pHwData ); unsigned char Wb35Tx_get_tx_buffer( phw_data_t pHwData, u8 **pBuffer ); -void Wb35Tx_EP2VM( phw_data_t pHwData ); -void Wb35Tx_EP2VM_start( phw_data_t pHwData ); +void Wb35Tx_EP2VM(struct wb35_adapter *adapter); +void Wb35Tx_EP2VM_start(struct wb35_adapter *adapter); void Wb35Tx_EP2VM_complete(struct urb *urb); -void Wb35Tx_start( phw_data_t pHwData ); +void Wb35Tx_start(struct wb35_adapter *adapter); void Wb35Tx_stop( phw_data_t pHwData ); -void Wb35Tx( phw_data_t pHwData ); +void Wb35Tx(struct wb35_adapter *adapter); void Wb35Tx_complete(struct urb *urb); void Wb35Tx_reset_descriptor( phw_data_t pHwData ); -void Wb35Tx_CurrentTime( phw_data_t pHwData, u32 TimeCount ); +void Wb35Tx_CurrentTime(struct wb35_adapter *adapter, u32 TimeCount); #endif diff --git a/drivers/staging/winbond/wbhal.c b/drivers/staging/winbond/wbhal.c index 1ee706a70a6d..da39eef7dce4 100644 --- a/drivers/staging/winbond/wbhal.c +++ b/drivers/staging/winbond/wbhal.c @@ -32,8 +32,8 @@ void hal_get_permanent_address( phw_data_t pHwData, u8 *pethernet_address ) static void hal_led_control(unsigned long data) { - phw_data_t pHwData = (phw_data_t) data; - struct wb35_adapter * adapter = pHwData->adapter; + struct wb35_adapter *adapter = (struct wb35_adapter *) data; + phw_data_t pHwData = &adapter->sHwData; struct wb35_reg *reg = &pHwData->reg; u32 LEDSet = (pHwData->SoftwareSet & HAL_LED_SET_MASK) >> HAL_LED_SET_SHIFT; u8 LEDgray[20] = { 0,3,4,6,8,10,11,12,13,14,15,14,13,12,11,10,8,6,4,2 }; @@ -310,7 +310,7 @@ static void hal_led_control(unsigned long data) } pHwData->time_count += TimeInterval; - Wb35Tx_CurrentTime( pHwData, pHwData->time_count ); // 20060928 add + Wb35Tx_CurrentTime(adapter, pHwData->time_count); // 20060928 add pHwData->LEDTimer.expires = jiffies + msecs_to_jiffies(TimeInterval); add_timer(&pHwData->LEDTimer); } @@ -319,7 +319,6 @@ static void hal_led_control(unsigned long data) u8 hal_init_hardware(phw_data_t pHwData, struct wb35_adapter * adapter) { u16 SoftwareSet; - pHwData->adapter = adapter; // Initial the variable pHwData->MaxReceiveLifeTime = DEFAULT_MSDU_LIFE_TIME; // Setting Rx maximum MSDU life time @@ -334,7 +333,7 @@ u8 hal_init_hardware(phw_data_t pHwData, struct wb35_adapter * adapter) pHwData->InitialResource = 4; init_timer(&pHwData->LEDTimer); pHwData->LEDTimer.function = hal_led_control; - pHwData->LEDTimer.data = (unsigned long) pHwData; + pHwData->LEDTimer.data = (unsigned long) adapter; pHwData->LEDTimer.expires = jiffies + msecs_to_jiffies(1000); add_timer(&pHwData->LEDTimer); @@ -351,7 +350,7 @@ u8 hal_init_hardware(phw_data_t pHwData, struct wb35_adapter * adapter) #endif Wb35Rx_start( pHwData ); - Wb35Tx_EP2VM_start( pHwData ); + Wb35Tx_EP2VM_start(adapter); return true; } @@ -672,13 +671,13 @@ s32 hal_get_rssi( phw_data_t pHwData, u32 *HalRssiArry, u8 Count ) return ltmp; } //---------------------------------------------------------------------------------------------------- -s32 hal_get_rssi_bss( phw_data_t pHwData, u16 idx, u8 Count ) +s32 hal_get_rssi_bss(struct wb35_adapter *adapter, u16 idx, u8 Count) { + phw_data_t pHwData = &adapter->sHwData; struct wb35_reg *reg = &pHwData->reg; R01_DESCRIPTOR r01; s32 ltmp = 0, tmp; u8 i, j; - struct wb35_adapter * adapter = pHwData->adapter; // u32 *HalRssiArry = psBSS(idx)->HalRssi; if( pHwData->SurpriseRemove ) return -200; @@ -842,9 +841,10 @@ void hal_system_power_change(phw_data_t pHwData, u32 PowerState) } } -void hal_surprise_remove( phw_data_t pHwData ) +void hal_surprise_remove(struct wb35_adapter *adapter) { - struct wb35_adapter * adapter = pHwData->adapter; + phw_data_t pHwData = &adapter->sHwData; + if (atomic_inc_return( &pHwData->SurpriseRemoveCount ) == 1) { #ifdef _PE_STATE_DUMP_ WBDEBUG(("Calling hal_surprise_remove\n")); @@ -853,9 +853,9 @@ void hal_surprise_remove( phw_data_t pHwData ) } } -void hal_rate_change( phw_data_t pHwData ) // Notify the HAL rate is changing 20060613.1 +void hal_rate_change(struct wb35_adapter *adapter) // Notify the HAL rate is changing 20060613.1 { - struct wb35_adapter * adapter = pHwData->adapter; + phw_data_t pHwData = &adapter->sHwData; u8 rate = CURRENT_TX_RATE; BBProcessor_RateChanging( pHwData, rate ); diff --git a/drivers/staging/winbond/wbhal_f.h b/drivers/staging/winbond/wbhal_f.h index d64fd175dff9..4cb4da055400 100644 --- a/drivers/staging/winbond/wbhal_f.h +++ b/drivers/staging/winbond/wbhal_f.h @@ -61,7 +61,7 @@ void hal_set_cwmax( phw_data_t pHwData, u16 cwin_max ); void hal_set_rsn_wpa( phw_data_t pHwData, u32 * RSN_IE_Bitmap , u32 * RSN_OUI_type , unsigned char bDesiredAuthMode); //s32 hal_get_rssi( phw_data_t pHwData, u32 HalRssi ); s32 hal_get_rssi( phw_data_t pHwData, u32 *HalRssiArry, u8 Count ); -s32 hal_get_rssi_bss( phw_data_t pHwData, u16 idx, u8 Count ); +s32 hal_get_rssi_bss(struct wb35_adapter *adapter, u16 idx, u8 Count); void hal_set_connect_info( phw_data_t pHwData, unsigned char boConnect ); u8 hal_get_est_sq3( phw_data_t pHwData, u8 Count ); void hal_set_rf_power( phw_data_t pHwData, u8 PowerIndex ); // 20060621 Modify @@ -82,13 +82,13 @@ u8 hal_get_hw_radio_off ( phw_data_t pHwData ); #define hal_scan_interval( _A ) (_A->Scan_Interval) void hal_scan_status_indicate( phw_data_t pHwData, u8 status); // 0: complete, 1: in progress void hal_system_power_change( phw_data_t pHwData, u32 PowerState ); // 20051230 -=D0 1=D1 .. -void hal_surprise_remove( phw_data_t pHwData ); +void hal_surprise_remove(struct wb35_adapter *adapter); #define PHY_DEBUG( msg, args... ) -void hal_rate_change( phw_data_t pHwData ); // Notify the HAL rate is changing 20060613.1 +void hal_rate_change(struct wb35_adapter *adapter); // Notify the HAL rate is changing 20060613.1 unsigned char hal_get_dxx_reg( phw_data_t pHwData, u16 number, u32 * pValue ); unsigned char hal_set_dxx_reg( phw_data_t pHwData, u16 number, u32 value ); #define hal_get_time_count( _P ) (_P->time_count/10) // return 100ms count diff --git a/drivers/staging/winbond/wbhal_s.h b/drivers/staging/winbond/wbhal_s.h index 995976a9d7d2..276d2b12632f 100644 --- a/drivers/staging/winbond/wbhal_s.h +++ b/drivers/staging/winbond/wbhal_s.h @@ -449,16 +449,6 @@ typedef struct _HW_DATA_T u32 FragCount; u32 DMAFix; //V1_DMA_FIX The variable can be removed if driver want to save mem space for V2. - //======================================================================================= - // For USB driver, hal need more variables. Due to - // 1. NDIS-WDM operation - // 2. The SME, MLME and OLD MDS need adapter structure, but the driver under HAL doesn't - // have that parameter when receiving and indicating packet. - // The MDS must input the adapter pointer as the second parameter of hal_init_hardware. - // The function usage is different than PCI driver. - //======================================================================================= - void* adapter; - //=============================================== // Definition for MAC address //=============================================== -- cgit v1.2.3 From 78df82380899729a18c56ee804c686640ef702a4 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Thu, 30 Oct 2008 16:14:38 +0200 Subject: Staging: w35und: merge struct wb35_adapter to struct wbsoft_priv This patch merges struct wb35_adapter to struct wbsoft_priv. Now we can finally start passing a pointer to struct ieee80211_hw around where necessary. Acked-by: Pavel Machek Signed-off-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman --- drivers/staging/winbond/adapter.h | 44 ----------------------- drivers/staging/winbond/bss_f.h | 70 ++++++++++++++++++------------------ drivers/staging/winbond/core.h | 38 ++++++++++++++++++-- drivers/staging/winbond/mds.c | 16 ++++----- drivers/staging/winbond/mds_f.h | 36 +++++++++---------- drivers/staging/winbond/mlmetxrx.c | 12 +++---- drivers/staging/winbond/mlmetxrx_f.h | 22 ++++++------ drivers/staging/winbond/mto.h | 2 +- drivers/staging/winbond/mto_f.h | 8 ++--- drivers/staging/winbond/rxisr.c | 8 ++--- drivers/staging/winbond/scan_s.h | 6 ++-- drivers/staging/winbond/wb35tx.c | 14 ++++---- drivers/staging/winbond/wb35tx_f.h | 12 +++---- drivers/staging/winbond/wbhal.c | 10 +++--- drivers/staging/winbond/wbhal_f.h | 10 +++--- drivers/staging/winbond/wblinux.c | 10 +++--- drivers/staging/winbond/wblinux_f.h | 14 ++++---- drivers/staging/winbond/wbusb.c | 55 ++++++++++++---------------- 18 files changed, 183 insertions(+), 204 deletions(-) delete mode 100644 drivers/staging/winbond/adapter.h (limited to 'drivers/staging/winbond/wb35tx_f.h') diff --git a/drivers/staging/winbond/adapter.h b/drivers/staging/winbond/adapter.h deleted file mode 100644 index 239cc3a5fa29..000000000000 --- a/drivers/staging/winbond/adapter.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __WINBOND_ADAPTER_H -#define __WINBOND_ADAPTER_H - -#include - -#include "bssdscpt.h" -#include "mto.h" -#include "wbhal_s.h" - -#define WBLINUX_PACKET_ARRAY_SIZE (ETHERNET_TX_DESCRIPTORS*4) - -#define WB_MAX_LINK_NAME_LEN 40 - -struct wb35_adapter { - u32 adapterIndex; // 20060703.4 Add for using padapterContext global adapter point - - WB_LOCALDESCRIPT sLocalPara; // Myself connected parameters - PWB_BSSDESCRIPTION asBSSDescriptElement; - - MLME_FRAME sMlmeFrame; // connect to peerSTA parameters - - MTO_PARAMETERS sMtoPara; // MTO_struct ... - hw_data_t sHwData; //For HAL - MDS Mds; - - spinlock_t SpinLock; - u32 shutdown; - - atomic_t ThreadCount; - - u32 RxByteCount; - u32 TxByteCount; - - struct sk_buff *skb_array[WBLINUX_PACKET_ARRAY_SIZE]; - struct sk_buff *packet_return; - s32 skb_SetIndex; - s32 skb_GetIndex; - s32 netif_state_stop; // 1: stop 0: normal - struct iw_statistics iw_stats; - - u8 LinkName[WB_MAX_LINK_NAME_LEN]; -}; - -#endif diff --git a/drivers/staging/winbond/bss_f.h b/drivers/staging/winbond/bss_f.h index feffe5f25f05..a433b5a85924 100644 --- a/drivers/staging/winbond/bss_f.h +++ b/drivers/staging/winbond/bss_f.h @@ -1,7 +1,7 @@ #ifndef __WINBOND_BSS_F_H #define __WINBOND_BSS_F_H -#include "adapter.h" +#include "core.h" struct PMKID_Information_Element; @@ -9,54 +9,54 @@ struct PMKID_Information_Element; // BSS descriptor DataBase management global function // -void vBSSdescriptionInit(struct wb35_adapter * adapter); -void vBSSfoundList(struct wb35_adapter * adapter); -u8 boChanFilter(struct wb35_adapter * adapter, u8 ChanNo); -u16 wBSSallocateEntry(struct wb35_adapter * adapter); -u16 wBSSGetEntry(struct wb35_adapter * adapter); -void vSimpleHouseKeeping(struct wb35_adapter * adapter); -u16 wBSShouseKeeping(struct wb35_adapter * adapter); -void ClearBSSdescpt(struct wb35_adapter * adapter, u16 i); -u16 wBSSfindBssID(struct wb35_adapter * adapter, u8 *pbBssid); -u16 wBSSfindDedicateCandidate(struct wb35_adapter * adapter, struct SSID_Element *psSsid, u8 *pbBssid); -u16 wBSSfindMACaddr(struct wb35_adapter * adapter, u8 *pbMacAddr); -u16 wBSSsearchMACaddr(struct wb35_adapter * adapter, u8 *pbMacAddr, u8 band); -u16 wBSSaddScanData(struct wb35_adapter *, u16, psRXDATA); -u16 wBSSUpdateScanData(struct wb35_adapter * adapter, u16 wBssIdx, psRXDATA psRcvData); -u16 wBSScreateIBSSdata(struct wb35_adapter * adapter, PWB_BSSDESCRIPTION psDesData); -void DesiredRate2BSSdescriptor(struct wb35_adapter * adapter, PWB_BSSDESCRIPTION psDesData, +void vBSSdescriptionInit(struct wbsoft_priv * adapter); +void vBSSfoundList(struct wbsoft_priv * adapter); +u8 boChanFilter(struct wbsoft_priv * adapter, u8 ChanNo); +u16 wBSSallocateEntry(struct wbsoft_priv * adapter); +u16 wBSSGetEntry(struct wbsoft_priv * adapter); +void vSimpleHouseKeeping(struct wbsoft_priv * adapter); +u16 wBSShouseKeeping(struct wbsoft_priv * adapter); +void ClearBSSdescpt(struct wbsoft_priv * adapter, u16 i); +u16 wBSSfindBssID(struct wbsoft_priv * adapter, u8 *pbBssid); +u16 wBSSfindDedicateCandidate(struct wbsoft_priv * adapter, struct SSID_Element *psSsid, u8 *pbBssid); +u16 wBSSfindMACaddr(struct wbsoft_priv * adapter, u8 *pbMacAddr); +u16 wBSSsearchMACaddr(struct wbsoft_priv * adapter, u8 *pbMacAddr, u8 band); +u16 wBSSaddScanData(struct wbsoft_priv *, u16, psRXDATA); +u16 wBSSUpdateScanData(struct wbsoft_priv * adapter, u16 wBssIdx, psRXDATA psRcvData); +u16 wBSScreateIBSSdata(struct wbsoft_priv * adapter, PWB_BSSDESCRIPTION psDesData); +void DesiredRate2BSSdescriptor(struct wbsoft_priv * adapter, PWB_BSSDESCRIPTION psDesData, u8 *pBasicRateSet, u8 BasicRateCount, u8 *pOperationRateSet, u8 OperationRateCount); -void DesiredRate2InfoElement(struct wb35_adapter * adapter, u8 *addr, u16 *iFildOffset, +void DesiredRate2InfoElement(struct wbsoft_priv * adapter, u8 *addr, u16 *iFildOffset, u8 *pBasicRateSet, u8 BasicRateCount, u8 *pOperationRateSet, u8 OperationRateCount); -void BSSAddIBSSdata(struct wb35_adapter * adapter, PWB_BSSDESCRIPTION psDesData); +void BSSAddIBSSdata(struct wbsoft_priv * adapter, PWB_BSSDESCRIPTION psDesData); unsigned char boCmpMacAddr( u8 *, u8 *); unsigned char boCmpSSID(struct SSID_Element *psSSID1, struct SSID_Element *psSSID2); -u16 wBSSfindSSID(struct wb35_adapter * adapter, struct SSID_Element *psSsid); -u16 wRoamingQuery(struct wb35_adapter * adapter); -void vRateToBitmap(struct wb35_adapter * adapter, u16 index); -u8 bRateToBitmapIndex(struct wb35_adapter * adapter, u8 bRate); +u16 wBSSfindSSID(struct wbsoft_priv * adapter, struct SSID_Element *psSsid); +u16 wRoamingQuery(struct wbsoft_priv * adapter); +void vRateToBitmap(struct wbsoft_priv * adapter, u16 index); +u8 bRateToBitmapIndex(struct wbsoft_priv * adapter, u8 bRate); u8 bBitmapToRate(u8 i); -unsigned char boIsERPsta(struct wb35_adapter * adapter, u16 i); -unsigned char boCheckConnect(struct wb35_adapter * adapter); -unsigned char boCheckSignal(struct wb35_adapter * adapter); -void AddIBSSIe(struct wb35_adapter * adapter,PWB_BSSDESCRIPTION psDesData );//added by ws for WPA_None06/01/04 -void BssScanUpToDate(struct wb35_adapter * adapter); -void BssUpToDate(struct wb35_adapter * adapter); +unsigned char boIsERPsta(struct wbsoft_priv * adapter, u16 i); +unsigned char boCheckConnect(struct wbsoft_priv * adapter); +unsigned char boCheckSignal(struct wbsoft_priv * adapter); +void AddIBSSIe(struct wbsoft_priv * adapter,PWB_BSSDESCRIPTION psDesData );//added by ws for WPA_None06/01/04 +void BssScanUpToDate(struct wbsoft_priv * adapter); +void BssUpToDate(struct wbsoft_priv * adapter); void RateSort(u8 *RateArray, u8 num, u8 mode); -void RateReSortForSRate(struct wb35_adapter * adapter, u8 *RateArray, u8 num); -void Assemble_IE(struct wb35_adapter * adapter, u16 wBssIdx); -void SetMaxTxRate(struct wb35_adapter * adapter); +void RateReSortForSRate(struct wbsoft_priv * adapter, u8 *RateArray, u8 num); +void Assemble_IE(struct wbsoft_priv * adapter, u16 wBssIdx); +void SetMaxTxRate(struct wbsoft_priv * adapter); -void CreateWpaIE(struct wb35_adapter * adapter, u16* iFildOffset, u8 *msg, struct Management_Frame* msgHeader, +void CreateWpaIE(struct wbsoft_priv * adapter, u16* iFildOffset, u8 *msg, struct Management_Frame* msgHeader, struct Association_Request_Frame_Body* msgBody, u16 iMSindex); //added by WS 05/14/05 #ifdef _WPA2_ -void CreateRsnIE(struct wb35_adapter * adapter, u16* iFildOffset, u8 *msg, struct Management_Frame* msgHeader, +void CreateRsnIE(struct wbsoft_priv * adapter, u16* iFildOffset, u8 *msg, struct Management_Frame* msgHeader, struct Association_Request_Frame_Body* msgBody, u16 iMSindex);//added by WS 05/14/05 -u16 SearchPmkid(struct wb35_adapter * adapter, struct Management_Frame* msgHeader, +u16 SearchPmkid(struct wbsoft_priv * adapter, struct Management_Frame* msgHeader, struct PMKID_Information_Element * AssoReq_PMKID ); #endif diff --git a/drivers/staging/winbond/core.h b/drivers/staging/winbond/core.h index 62ad9545548d..64b73bbf7474 100644 --- a/drivers/staging/winbond/core.h +++ b/drivers/staging/winbond/core.h @@ -1,10 +1,44 @@ #ifndef __WINBOND_CORE_H #define __WINBOND_CORE_H -#include "adapter.h" +#include + +#include "bssdscpt.h" +#include "mto.h" +#include "wbhal_s.h" + +#define WBLINUX_PACKET_ARRAY_SIZE (ETHERNET_TX_DESCRIPTORS*4) + +#define WB_MAX_LINK_NAME_LEN 40 struct wbsoft_priv { - struct wb35_adapter *adapter; + u32 adapterIndex; // 20060703.4 Add for using padapterContext global adapter point + + WB_LOCALDESCRIPT sLocalPara; // Myself connected parameters + PWB_BSSDESCRIPTION asBSSDescriptElement; + + MLME_FRAME sMlmeFrame; // connect to peerSTA parameters + + MTO_PARAMETERS sMtoPara; // MTO_struct ... + hw_data_t sHwData; //For HAL + MDS Mds; + + spinlock_t SpinLock; + u32 shutdown; + + atomic_t ThreadCount; + + u32 RxByteCount; + u32 TxByteCount; + + struct sk_buff *skb_array[WBLINUX_PACKET_ARRAY_SIZE]; + struct sk_buff *packet_return; + s32 skb_SetIndex; + s32 skb_GetIndex; + s32 netif_state_stop; // 1: stop 0: normal + struct iw_statistics iw_stats; + + u8 LinkName[WB_MAX_LINK_NAME_LEN]; }; #endif /* __WINBOND_CORE_H */ diff --git a/drivers/staging/winbond/mds.c b/drivers/staging/winbond/mds.c index 35ea100a665c..df59b04da749 100644 --- a/drivers/staging/winbond/mds.c +++ b/drivers/staging/winbond/mds.c @@ -8,7 +8,7 @@ #include "wblinux_f.h" void -Mds_reset_descriptor(struct wb35_adapter * adapter) +Mds_reset_descriptor(struct wbsoft_priv * adapter) { PMDS pMds = &adapter->Mds; @@ -21,7 +21,7 @@ Mds_reset_descriptor(struct wb35_adapter * adapter) } unsigned char -Mds_initial(struct wb35_adapter * adapter) +Mds_initial(struct wbsoft_priv * adapter) { PMDS pMds = &adapter->Mds; @@ -35,13 +35,13 @@ Mds_initial(struct wb35_adapter * adapter) } void -Mds_Destroy(struct wb35_adapter * adapter) +Mds_Destroy(struct wbsoft_priv * adapter) { vRxTimerStop(adapter); } void -Mds_Tx(struct wb35_adapter * adapter) +Mds_Tx(struct wbsoft_priv * adapter) { phw_data_t pHwData = &adapter->sHwData; PMDS pMds = &adapter->Mds; @@ -183,7 +183,7 @@ Mds_Tx(struct wb35_adapter * adapter) } void -Mds_SendComplete(struct wb35_adapter * adapter, PT02_DESCRIPTOR pT02) +Mds_SendComplete(struct wbsoft_priv * adapter, PT02_DESCRIPTOR pT02) { PMDS pMds = &adapter->Mds; phw_data_t pHwData = &adapter->sHwData; @@ -236,7 +236,7 @@ Mds_SendComplete(struct wb35_adapter * adapter, PT02_DESCRIPTOR pT02) } void -Mds_HeaderCopy(struct wb35_adapter * adapter, PDESCRIPTOR pDes, u8 *TargetBuffer) +Mds_HeaderCopy(struct wbsoft_priv * adapter, PDESCRIPTOR pDes, u8 *TargetBuffer) { PMDS pMds = &adapter->Mds; u8 *src_buffer = pDes->buffer_address[0];//931130.5.g @@ -333,7 +333,7 @@ Mds_HeaderCopy(struct wb35_adapter * adapter, PDESCRIPTOR pDes, u8 *TargetBuffer // The function return the 4n size of usb pk u16 -Mds_BodyCopy(struct wb35_adapter * adapter, PDESCRIPTOR pDes, u8 *TargetBuffer) +Mds_BodyCopy(struct wbsoft_priv * adapter, PDESCRIPTOR pDes, u8 *TargetBuffer) { PT00_DESCRIPTOR pT00; PMDS pMds = &adapter->Mds; @@ -436,7 +436,7 @@ Mds_BodyCopy(struct wb35_adapter * adapter, PDESCRIPTOR pDes, u8 *TargetBuffer) void -Mds_DurationSet( struct wb35_adapter * adapter, PDESCRIPTOR pDes, u8 *buffer ) +Mds_DurationSet( struct wbsoft_priv * adapter, PDESCRIPTOR pDes, u8 *buffer ) { PT00_DESCRIPTOR pT00; PT01_DESCRIPTOR pT01; diff --git a/drivers/staging/winbond/mds_f.h b/drivers/staging/winbond/mds_f.h index 2e0f7a84a481..a3724ac6798d 100644 --- a/drivers/staging/winbond/mds_f.h +++ b/drivers/staging/winbond/mds_f.h @@ -2,31 +2,31 @@ #define __WINBOND_MDS_F_H #include "wbhal_s.h" -#include "adapter.h" +#include "core.h" -unsigned char Mds_initial( struct wb35_adapter *adapter ); -void Mds_Destroy( struct wb35_adapter *adapter ); -void Mds_Tx( struct wb35_adapter *adapter ); -void Mds_HeaderCopy( struct wb35_adapter *adapter, PDESCRIPTOR pDes, u8 *TargetBuffer ); -u16 Mds_BodyCopy( struct wb35_adapter *adapter, PDESCRIPTOR pDes, u8 *TargetBuffer ); -void Mds_DurationSet( struct wb35_adapter *adapter, PDESCRIPTOR pDes, u8 *TargetBuffer ); -void Mds_SendComplete( struct wb35_adapter *adapter, PT02_DESCRIPTOR pT02 ); -void Mds_MpduProcess( struct wb35_adapter *adapter, PDESCRIPTOR pRxDes ); -void Mds_reset_descriptor( struct wb35_adapter *adapter ); +unsigned char Mds_initial( struct wbsoft_priv *adapter ); +void Mds_Destroy( struct wbsoft_priv *adapter ); +void Mds_Tx( struct wbsoft_priv *adapter ); +void Mds_HeaderCopy( struct wbsoft_priv *adapter, PDESCRIPTOR pDes, u8 *TargetBuffer ); +u16 Mds_BodyCopy( struct wbsoft_priv *adapter, PDESCRIPTOR pDes, u8 *TargetBuffer ); +void Mds_DurationSet( struct wbsoft_priv *adapter, PDESCRIPTOR pDes, u8 *TargetBuffer ); +void Mds_SendComplete( struct wbsoft_priv *adapter, PT02_DESCRIPTOR pT02 ); +void Mds_MpduProcess( struct wbsoft_priv *adapter, PDESCRIPTOR pRxDes ); +void Mds_reset_descriptor( struct wbsoft_priv *adapter ); extern void DataDmp(u8 *pdata, u32 len, u32 offset); -void vRxTimerInit(struct wb35_adapter *adapter); -void vRxTimerStart(struct wb35_adapter *adapter, int timeout_value); -void vRxTimerStop(struct wb35_adapter *adapter); +void vRxTimerInit(struct wbsoft_priv *adapter); +void vRxTimerStart(struct wbsoft_priv *adapter, int timeout_value); +void vRxTimerStop(struct wbsoft_priv *adapter); // For Asynchronous indicating. The routine collocates with USB. -void Mds_MsduProcess( struct wb35_adapter *adapter, PRXLAYER1 pRxLayer1, u8 SlotIndex); +void Mds_MsduProcess( struct wbsoft_priv *adapter, PRXLAYER1 pRxLayer1, u8 SlotIndex); // For data frame sending 20060802 -u16 MDS_GetPacketSize( struct wb35_adapter *adapter ); -void MDS_GetNextPacket( struct wb35_adapter *adapter, PDESCRIPTOR pDes ); -void MDS_GetNextPacketComplete( struct wb35_adapter *adapter, PDESCRIPTOR pDes ); -void MDS_SendResult( struct wb35_adapter *adapter, u8 PacketId, unsigned char SendOK ); +u16 MDS_GetPacketSize( struct wbsoft_priv *adapter ); +void MDS_GetNextPacket( struct wbsoft_priv *adapter, PDESCRIPTOR pDes ); +void MDS_GetNextPacketComplete( struct wbsoft_priv *adapter, PDESCRIPTOR pDes ); +void MDS_SendResult( struct wbsoft_priv *adapter, u8 PacketId, unsigned char SendOK ); #endif diff --git a/drivers/staging/winbond/mlmetxrx.c b/drivers/staging/winbond/mlmetxrx.c index ee80aed7f0b8..f3da9a6a85c1 100644 --- a/drivers/staging/winbond/mlmetxrx.c +++ b/drivers/staging/winbond/mlmetxrx.c @@ -19,7 +19,7 @@ #include "mds_f.h" -void MLMEResetTxRx(struct wb35_adapter * adapter) +void MLMEResetTxRx(struct wbsoft_priv * adapter) { s32 i; @@ -55,7 +55,7 @@ void MLMEResetTxRx(struct wb35_adapter * adapter) //============================================================================= /* FIXME: Should this just be replaced with kmalloc() and kfree()? */ -u8 *MLMEGetMMPDUBuffer(struct wb35_adapter * adapter) +u8 *MLMEGetMMPDUBuffer(struct wbsoft_priv * adapter) { s32 i; u8 *returnVal; @@ -73,7 +73,7 @@ u8 *MLMEGetMMPDUBuffer(struct wb35_adapter * adapter) } //============================================================================= -u8 MLMESendFrame(struct wb35_adapter * adapter, u8 *pMMPDU, u16 len, u8 DataType) +u8 MLMESendFrame(struct wbsoft_priv * adapter, u8 *pMMPDU, u16 len, u8 DataType) /* DataType : FRAME_TYPE_802_11_MANAGEMENT, FRAME_TYPE_802_11_MANAGEMENT_CHALLENGE, FRAME_TYPE_802_11_DATA */ { @@ -98,7 +98,7 @@ u8 MLMESendFrame(struct wb35_adapter * adapter, u8 *pMMPDU, u16 len, u8 DataType return true; } -void MLME_GetNextPacket(struct wb35_adapter *adapter, PDESCRIPTOR desc) +void MLME_GetNextPacket(struct wbsoft_priv *adapter, PDESCRIPTOR desc) { desc->InternalUsed = desc->buffer_start_index + desc->buffer_number; desc->InternalUsed %= MAX_DESCRIPTOR_BUFFER_INDEX; @@ -109,7 +109,7 @@ void MLME_GetNextPacket(struct wb35_adapter *adapter, PDESCRIPTOR desc) desc->Type = adapter->sMlmeFrame.DataType; } -void MLMEfreeMMPDUBuffer(struct wb35_adapter * adapter, s8 *pData) +void MLMEfreeMMPDUBuffer(struct wbsoft_priv * adapter, s8 *pData) { int i; @@ -127,7 +127,7 @@ void MLMEfreeMMPDUBuffer(struct wb35_adapter * adapter, s8 *pData) } void -MLME_SendComplete(struct wb35_adapter * adapter, u8 PacketID, unsigned char SendOK) +MLME_SendComplete(struct wbsoft_priv * adapter, u8 PacketID, unsigned char SendOK) { MLME_TXCALLBACK TxCallback; diff --git a/drivers/staging/winbond/mlmetxrx_f.h b/drivers/staging/winbond/mlmetxrx_f.h index 0f264ed64ea4..905c301028a3 100644 --- a/drivers/staging/winbond/mlmetxrx_f.h +++ b/drivers/staging/winbond/mlmetxrx_f.h @@ -8,34 +8,34 @@ #ifndef _MLMETXRX_H #define _MLMETXRX_H -#include "adapter.h" +#include "core.h" void MLMEProcThread( - struct wb35_adapter * adapter + struct wbsoft_priv * adapter ); -void MLMEResetTxRx( struct wb35_adapter * adapter); +void MLMEResetTxRx( struct wbsoft_priv * adapter); u8 * MLMEGetMMPDUBuffer( - struct wb35_adapter * adapter + struct wbsoft_priv * adapter ); -void MLMEfreeMMPDUBuffer( struct wb35_adapter * adapter, s8 * pData); +void MLMEfreeMMPDUBuffer( struct wbsoft_priv * adapter, s8 * pData); -void MLME_GetNextPacket( struct wb35_adapter * adapter, PDESCRIPTOR pDes ); -u8 MLMESendFrame( struct wb35_adapter * adapter, +void MLME_GetNextPacket( struct wbsoft_priv * adapter, PDESCRIPTOR pDes ); +u8 MLMESendFrame( struct wbsoft_priv * adapter, u8 *pMMPDU, u16 len, u8 DataType); void -MLME_SendComplete( struct wb35_adapter * adapter, u8 PacketID, unsigned char SendOK ); +MLME_SendComplete( struct wbsoft_priv * adapter, u8 PacketID, unsigned char SendOK ); void MLMERcvFrame( - struct wb35_adapter * adapter, + struct wbsoft_priv * adapter, PRXBUFFER pRxBufferArray, u8 NumOfBuffer, u8 ReturnSlotIndex @@ -43,11 +43,11 @@ MLMERcvFrame( void MLMEReturnPacket( - struct wb35_adapter * adapter, + struct wbsoft_priv * adapter, u8 * pRxBufer ); #ifdef _IBSS_BEACON_SEQ_STICK_ -s8 SendBCNullData(struct wb35_adapter * adapter, u16 wIdx); +s8 SendBCNullData(struct wbsoft_priv * adapter, u16 wIdx); #endif #endif diff --git a/drivers/staging/winbond/mto.h b/drivers/staging/winbond/mto.h index 9a175449ce50..536c4f15c416 100644 --- a/drivers/staging/winbond/mto.h +++ b/drivers/staging/winbond/mto.h @@ -131,7 +131,7 @@ typedef struct _MTO_PARAMETERS } MTO_PARAMETERS, *PMTO_PARAMETERS; -#define MTO_FUNC_INPUT struct wb35_adapter * adapter +#define MTO_FUNC_INPUT struct wbsoft_priv * adapter #define MTO_FUNC_INPUT_DATA adapter #define MTO_DATA() (adapter->sMtoPara) #define MTO_HAL() (&adapter->sHwData) diff --git a/drivers/staging/winbond/mto_f.h b/drivers/staging/winbond/mto_f.h index ce4319da1f3a..81f59137c6d6 100644 --- a/drivers/staging/winbond/mto_f.h +++ b/drivers/staging/winbond/mto_f.h @@ -1,11 +1,11 @@ #ifndef __WINBOND_MTO_F_H #define __WINBOND_MTO_F_H -#include "adapter.h" +#include "core.h" -extern void MTO_Init(struct wb35_adapter *); -extern void MTO_PeriodicTimerExpired(struct wb35_adapter *); -extern void MTO_SetDTORateRange(struct wb35_adapter *, u8 *, u8); +extern void MTO_Init(struct wbsoft_priv *); +extern void MTO_PeriodicTimerExpired(struct wbsoft_priv *); +extern void MTO_SetDTORateRange(struct wbsoft_priv *, u8 *, u8); extern u8 MTO_GetTxRate(MTO_FUNC_INPUT, u32 fpdu_len); extern u8 MTO_GetTxFallbackRate(MTO_FUNC_INPUT); extern void MTO_SetTxCount(MTO_FUNC_INPUT, u8 t0, u8 index); diff --git a/drivers/staging/winbond/rxisr.c b/drivers/staging/winbond/rxisr.c index f5c98d915c7b..d591003a38ec 100644 --- a/drivers/staging/winbond/rxisr.c +++ b/drivers/staging/winbond/rxisr.c @@ -1,19 +1,19 @@ #include "os_common.h" -#include "adapter.h" +#include "core.h" static void RxTimerHandler(unsigned long data) { WARN_ON(1); } -void vRxTimerInit(struct wb35_adapter *adapter) +void vRxTimerInit(struct wbsoft_priv *adapter) { init_timer(&adapter->Mds.timer); adapter->Mds.timer.function = RxTimerHandler; adapter->Mds.timer.data = (unsigned long) adapter; } -void vRxTimerStart(struct wb35_adapter *adapter, int timeout_value) +void vRxTimerStart(struct wbsoft_priv *adapter, int timeout_value) { if (timeout_value < MIN_TIMEOUT_VAL) timeout_value = MIN_TIMEOUT_VAL; @@ -22,7 +22,7 @@ void vRxTimerStart(struct wb35_adapter *adapter, int timeout_value) add_timer(&adapter->Mds.timer); } -void vRxTimerStop(struct wb35_adapter *adapter) +void vRxTimerStop(struct wbsoft_priv *adapter) { del_timer_sync(&adapter->Mds.timer); } diff --git a/drivers/staging/winbond/scan_s.h b/drivers/staging/winbond/scan_s.h index 726954684ce5..775bb81f23cc 100644 --- a/drivers/staging/winbond/scan_s.h +++ b/drivers/staging/winbond/scan_s.h @@ -114,8 +114,8 @@ typedef struct _SCAN_PARAMETERS // static functions -//static void ScanTimerHandler(struct wb35_adapter * adapter); -//static void vScanTimerStart(struct wb35_adapter * adapter, int timeout_value); -//static void vScanTimerStop(struct wb35_adapter * adapter); +//static void ScanTimerHandler(struct wbsoft_priv * adapter); +//static void vScanTimerStart(struct wbsoft_priv * adapter, int timeout_value); +//static void vScanTimerStop(struct wbsoft_priv * adapter); #endif diff --git a/drivers/staging/winbond/wb35tx.c b/drivers/staging/winbond/wb35tx.c index ce7e9812739f..32ee391eac86 100644 --- a/drivers/staging/winbond/wb35tx.c +++ b/drivers/staging/winbond/wb35tx.c @@ -23,7 +23,7 @@ Wb35Tx_get_tx_buffer(phw_data_t pHwData, u8 **pBuffer) return true; } -void Wb35Tx_start(struct wb35_adapter *adapter) +void Wb35Tx_start(struct wbsoft_priv *adapter) { phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; @@ -37,7 +37,7 @@ void Wb35Tx_start(struct wb35_adapter *adapter) } -void Wb35Tx(struct wb35_adapter *adapter) +void Wb35Tx(struct wbsoft_priv *adapter) { phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; @@ -91,7 +91,7 @@ void Wb35Tx(struct wb35_adapter *adapter) void Wb35Tx_complete(struct urb * pUrb) { - struct wb35_adapter *adapter = pUrb->context; + struct wbsoft_priv *adapter = pUrb->context; phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; PMDS pMds = &adapter->Mds; @@ -194,7 +194,7 @@ void Wb35Tx_destroy(phw_data_t pHwData) #endif } -void Wb35Tx_CurrentTime(struct wb35_adapter *adapter, u32 TimeCount) +void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 TimeCount) { phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; @@ -211,7 +211,7 @@ void Wb35Tx_CurrentTime(struct wb35_adapter *adapter, u32 TimeCount) } } -void Wb35Tx_EP2VM_start(struct wb35_adapter *adapter) +void Wb35Tx_EP2VM_start(struct wbsoft_priv *adapter) { phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; @@ -226,7 +226,7 @@ void Wb35Tx_EP2VM_start(struct wb35_adapter *adapter) } -void Wb35Tx_EP2VM(struct wb35_adapter *adapter) +void Wb35Tx_EP2VM(struct wbsoft_priv *adapter) { phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; @@ -265,7 +265,7 @@ error: void Wb35Tx_EP2VM_complete(struct urb * pUrb) { - struct wb35_adapter *adapter = pUrb->context; + struct wbsoft_priv *adapter = pUrb->context; phw_data_t pHwData = &adapter->sHwData; T02_DESCRIPTOR T02, TSTATUS; PWB35TX pWb35Tx = &pHwData->Wb35Tx; diff --git a/drivers/staging/winbond/wb35tx_f.h b/drivers/staging/winbond/wb35tx_f.h index 466eb6f26c60..277faa7aaed8 100644 --- a/drivers/staging/winbond/wb35tx_f.h +++ b/drivers/staging/winbond/wb35tx_f.h @@ -1,7 +1,7 @@ #ifndef __WINBOND_WB35TX_F_H #define __WINBOND_WB35TX_F_H -#include "adapter.h" +#include "core.h" #include "wbhal_f.h" //==================================== @@ -11,16 +11,16 @@ unsigned char Wb35Tx_initial( phw_data_t pHwData ); void Wb35Tx_destroy( phw_data_t pHwData ); unsigned char Wb35Tx_get_tx_buffer( phw_data_t pHwData, u8 **pBuffer ); -void Wb35Tx_EP2VM(struct wb35_adapter *adapter); -void Wb35Tx_EP2VM_start(struct wb35_adapter *adapter); +void Wb35Tx_EP2VM(struct wbsoft_priv *adapter); +void Wb35Tx_EP2VM_start(struct wbsoft_priv *adapter); void Wb35Tx_EP2VM_complete(struct urb *urb); -void Wb35Tx_start(struct wb35_adapter *adapter); +void Wb35Tx_start(struct wbsoft_priv *adapter); void Wb35Tx_stop( phw_data_t pHwData ); -void Wb35Tx(struct wb35_adapter *adapter); +void Wb35Tx(struct wbsoft_priv *adapter); void Wb35Tx_complete(struct urb *urb); void Wb35Tx_reset_descriptor( phw_data_t pHwData ); -void Wb35Tx_CurrentTime(struct wb35_adapter *adapter, u32 TimeCount); +void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 TimeCount); #endif diff --git a/drivers/staging/winbond/wbhal.c b/drivers/staging/winbond/wbhal.c index 1fb8c3d78467..163ca3c4f117 100644 --- a/drivers/staging/winbond/wbhal.c +++ b/drivers/staging/winbond/wbhal.c @@ -32,7 +32,7 @@ void hal_get_permanent_address( phw_data_t pHwData, u8 *pethernet_address ) static void hal_led_control(unsigned long data) { - struct wb35_adapter *adapter = (struct wb35_adapter *) data; + struct wbsoft_priv *adapter = (struct wbsoft_priv *) data; phw_data_t pHwData = &adapter->sHwData; struct wb35_reg *reg = &pHwData->reg; u32 LEDSet = (pHwData->SoftwareSet & HAL_LED_SET_MASK) >> HAL_LED_SET_SHIFT; @@ -316,7 +316,7 @@ static void hal_led_control(unsigned long data) } -u8 hal_init_hardware(phw_data_t pHwData, struct wb35_adapter * adapter) +u8 hal_init_hardware(phw_data_t pHwData, struct wbsoft_priv * adapter) { u16 SoftwareSet; @@ -671,7 +671,7 @@ s32 hal_get_rssi( phw_data_t pHwData, u32 *HalRssiArry, u8 Count ) return ltmp; } //---------------------------------------------------------------------------------------------------- -s32 hal_get_rssi_bss(struct wb35_adapter *adapter, u16 idx, u8 Count) +s32 hal_get_rssi_bss(struct wbsoft_priv *adapter, u16 idx, u8 Count) { phw_data_t pHwData = &adapter->sHwData; struct wb35_reg *reg = &pHwData->reg; @@ -841,7 +841,7 @@ void hal_system_power_change(phw_data_t pHwData, u32 PowerState) } } -void hal_surprise_remove(struct wb35_adapter *adapter) +void hal_surprise_remove(struct wbsoft_priv *adapter) { phw_data_t pHwData = &adapter->sHwData; @@ -853,7 +853,7 @@ void hal_surprise_remove(struct wb35_adapter *adapter) } } -void hal_rate_change(struct wb35_adapter *adapter) // Notify the HAL rate is changing 20060613.1 +void hal_rate_change(struct wbsoft_priv *adapter) // Notify the HAL rate is changing 20060613.1 { phw_data_t pHwData = &adapter->sHwData; u8 rate = CURRENT_TX_RATE; diff --git a/drivers/staging/winbond/wbhal_f.h b/drivers/staging/winbond/wbhal_f.h index 4cb4da055400..e7a1d611bdeb 100644 --- a/drivers/staging/winbond/wbhal_f.h +++ b/drivers/staging/winbond/wbhal_f.h @@ -5,7 +5,7 @@ #include "wb35tx_f.h" #include "wb35rx_f.h" -#include "adapter.h" +#include "core.h" //==================================================================================== // Function declaration @@ -21,7 +21,7 @@ void hal_clear_all_key( phw_data_t pHwData ); void hal_get_ethernet_address( phw_data_t pHwData, u8 *current_address ); void hal_set_ethernet_address( phw_data_t pHwData, u8 *current_address ); void hal_get_permanent_address( phw_data_t pHwData, u8 *pethernet_address ); -unsigned char hal_init_hardware( phw_data_t pHwData, struct wb35_adapter * adapter ); +unsigned char hal_init_hardware( phw_data_t pHwData, struct wbsoft_priv * adapter ); void hal_set_power_save_mode( phw_data_t pHwData, unsigned char power_save, unsigned char wakeup, unsigned char dtim ); void hal_get_power_save_mode( phw_data_t pHwData, u8 *pin_pwr_save ); void hal_set_slot_time( phw_data_t pHwData, u8 type ); @@ -61,7 +61,7 @@ void hal_set_cwmax( phw_data_t pHwData, u16 cwin_max ); void hal_set_rsn_wpa( phw_data_t pHwData, u32 * RSN_IE_Bitmap , u32 * RSN_OUI_type , unsigned char bDesiredAuthMode); //s32 hal_get_rssi( phw_data_t pHwData, u32 HalRssi ); s32 hal_get_rssi( phw_data_t pHwData, u32 *HalRssiArry, u8 Count ); -s32 hal_get_rssi_bss(struct wb35_adapter *adapter, u16 idx, u8 Count); +s32 hal_get_rssi_bss(struct wbsoft_priv *adapter, u16 idx, u8 Count); void hal_set_connect_info( phw_data_t pHwData, unsigned char boConnect ); u8 hal_get_est_sq3( phw_data_t pHwData, u8 Count ); void hal_set_rf_power( phw_data_t pHwData, u8 PowerIndex ); // 20060621 Modify @@ -82,13 +82,13 @@ u8 hal_get_hw_radio_off ( phw_data_t pHwData ); #define hal_scan_interval( _A ) (_A->Scan_Interval) void hal_scan_status_indicate( phw_data_t pHwData, u8 status); // 0: complete, 1: in progress void hal_system_power_change( phw_data_t pHwData, u32 PowerState ); // 20051230 -=D0 1=D1 .. -void hal_surprise_remove(struct wb35_adapter *adapter); +void hal_surprise_remove(struct wbsoft_priv *adapter); #define PHY_DEBUG( msg, args... ) -void hal_rate_change(struct wb35_adapter *adapter); // Notify the HAL rate is changing 20060613.1 +void hal_rate_change(struct wbsoft_priv *adapter); // Notify the HAL rate is changing 20060613.1 unsigned char hal_get_dxx_reg( phw_data_t pHwData, u16 number, u32 * pValue ); unsigned char hal_set_dxx_reg( phw_data_t pHwData, u16 number, u32 value ); #define hal_get_time_count( _P ) (_P->time_count/10) // return 100ms count diff --git a/drivers/staging/winbond/wblinux.c b/drivers/staging/winbond/wblinux.c index d6894f9da832..594c0692a93d 100644 --- a/drivers/staging/winbond/wblinux.c +++ b/drivers/staging/winbond/wblinux.c @@ -17,14 +17,14 @@ #include "wblinux_f.h" unsigned char -WBLINUX_Initial(struct wb35_adapter * adapter) +WBLINUX_Initial(struct wbsoft_priv * adapter) { spin_lock_init( &adapter->SpinLock ); return true; } void -WBLINUX_Destroy(struct wb35_adapter * adapter) +WBLINUX_Destroy(struct wbsoft_priv * adapter) { WBLINUX_stop( adapter ); #ifdef _PE_USB_INI_DUMP_ @@ -33,7 +33,7 @@ WBLINUX_Destroy(struct wb35_adapter * adapter) } void -WBLINUX_stop( struct wb35_adapter * adapter ) +WBLINUX_stop( struct wbsoft_priv * adapter ) { struct sk_buff *pSkb; @@ -63,7 +63,7 @@ WBLINUX_stop( struct wb35_adapter * adapter ) } void -WbWlanHalt(struct wb35_adapter *adapter) +WbWlanHalt( struct wbsoft_priv * adapter ) { //--------------------- adapter->sLocalPara.ShutDowned = true; @@ -85,7 +85,7 @@ WbWlanHalt(struct wb35_adapter *adapter) } unsigned char -WbWLanInitialize(struct wb35_adapter *adapter) +WbWLanInitialize(struct wbsoft_priv * adapter) { phw_data_t pHwData; u8 *pMacAddr; diff --git a/drivers/staging/winbond/wblinux_f.h b/drivers/staging/winbond/wblinux_f.h index ed2676b22f6b..4b786fcf34ec 100644 --- a/drivers/staging/winbond/wblinux_f.h +++ b/drivers/staging/winbond/wblinux_f.h @@ -1,7 +1,7 @@ #ifndef __WBLINUX_F_H #define __WBLINUX_F_H -#include "adapter.h" +#include "core.h" #include "mds_s.h" //========================================================================= @@ -9,14 +9,14 @@ // // wblinux_f.h // -unsigned char WBLINUX_Initial( struct wb35_adapter *adapter ); +unsigned char WBLINUX_Initial( struct wbsoft_priv *adapter ); int wb35_start_xmit(struct sk_buff *skb, struct net_device *netdev ); -void WBLINUX_stop( struct wb35_adapter *adapter ); -void WBLINUX_Destroy( struct wb35_adapter *adapter ); +void WBLINUX_stop( struct wbsoft_priv *adapter ); +void WBLINUX_Destroy( struct wbsoft_priv *adapter ); void wb35_set_multicast( struct net_device *netdev ); struct net_device_stats * wb35_netdev_stats( struct net_device *netdev ); -void WBLINUX_stop( struct wb35_adapter *adapter ); -void WbWlanHalt( struct wb35_adapter *adapter ); -unsigned char WbWLanInitialize(struct wb35_adapter *adapter); +void WBLINUX_stop( struct wbsoft_priv *adapter ); +void WbWlanHalt( struct wbsoft_priv *adapter ); +unsigned char WbWLanInitialize(struct wbsoft_priv *adapter); #endif diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c index d8fa9e56318a..a6bc78e4609d 100644 --- a/drivers/staging/winbond/wbusb.c +++ b/drivers/staging/winbond/wbusb.c @@ -120,7 +120,7 @@ static int wbsoft_tx(struct ieee80211_hw *dev, struct sk_buff *skb) { struct wbsoft_priv *priv = dev->priv; - MLMESendFrame(priv->adapter, skb->data, skb->len, FRAME_TYPE_802_11_MANAGEMENT); + MLMESendFrame(priv, skb->data, skb->len, FRAME_TYPE_802_11_MANAGEMENT); return NETDEV_TX_OK; } @@ -144,20 +144,20 @@ static int wbsoft_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) ch.ChanNo = 1; /* Should use channel_num, or something, as that is already pre-translated */ - hal_set_current_channel(&priv->adapter->sHwData, ch); - hal_set_beacon_period(&priv->adapter->sHwData, conf->beacon_int); -// hal_set_cap_info(&priv->adapter->sHwData, ?? ); + hal_set_current_channel(&priv->sHwData, ch); + hal_set_beacon_period(&priv->sHwData, conf->beacon_int); +// hal_set_cap_info(&priv->sHwData, ?? ); // hal_set_ssid(phw_data_t pHwData, u8 * pssid, u8 ssid_len); ?? - hal_set_accept_broadcast(&priv->adapter->sHwData, 1); - hal_set_accept_promiscuous(&priv->adapter->sHwData, 1); - hal_set_accept_multicast(&priv->adapter->sHwData, 1); - hal_set_accept_beacon(&priv->adapter->sHwData, 1); - hal_set_radio_mode(&priv->adapter->sHwData, 0); + hal_set_accept_broadcast(&priv->sHwData, 1); + hal_set_accept_promiscuous(&priv->sHwData, 1); + hal_set_accept_multicast(&priv->sHwData, 1); + hal_set_accept_beacon(&priv->sHwData, 1); + hal_set_radio_mode(&priv->sHwData, 0); //hal_set_antenna_number( phw_data_t pHwData, u8 number ) //hal_set_rf_power(phw_data_t pHwData, u8 PowerIndex) -// hal_start_bss(&priv->adapter->sHwData, WLAN_BSSTYPE_INFRASTRUCTURE); ?? +// hal_start_bss(&priv->sHwData, WLAN_BSSTYPE_INFRASTRUCTURE); ?? //void hal_set_rates(phw_data_t pHwData, u8 * pbss_rates, // u8 length, unsigned char basic_rate_set) @@ -196,7 +196,6 @@ static const struct ieee80211_ops wbsoft_ops = { static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id_table) { - struct wb35_adapter *adapter; PWBUSB pWbUsb; struct usb_host_interface *interface; struct usb_endpoint_descriptor *endpoint; @@ -221,13 +220,14 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id goto error; } - adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); - if (!adapter) { - err = -ENOMEM; + dev = ieee80211_alloc_hw(sizeof(*priv), &wbsoft_ops); + if (!dev) goto error; - } - pWbUsb = &adapter->sHwData.WbUsb; + priv = dev->priv; + my_dev = dev; + + pWbUsb = &priv->sHwData.WbUsb; pWbUsb->udev = udev; interface = intf->cur_altsetting; @@ -238,23 +238,14 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id pWbUsb->IsUsb20 = 1; } - if (!WbWLanInitialize(adapter)) { + if (!WbWLanInitialize(priv)) { err = -EINVAL; - goto error_free_adapter; + goto error_free_hw; } - dev = ieee80211_alloc_hw(sizeof(*priv), &wbsoft_ops); - if (!dev) - goto error_free_adapter; - - priv = dev->priv; - priv->adapter = adapter; - - my_dev = dev; - SET_IEEE80211_DEV(dev, &udev->dev); { - phw_data_t pHwData = &adapter->sHwData; + phw_data_t pHwData = &priv->sHwData; unsigned char dev_addr[MAX_ADDR_LEN]; hal_get_permanent_address(pHwData, dev_addr); SET_IEEE80211_PERM_ADDR(dev, dev_addr); @@ -272,14 +263,12 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id if (err) goto error_free_hw; - usb_set_intfdata(intf, adapter); + usb_set_intfdata(intf, priv); return 0; error_free_hw: ieee80211_free_hw(dev); -error_free_adapter: - kfree(adapter); error: usb_put_dev(udev); return err; @@ -315,9 +304,9 @@ void packet_came(char *pRxBufferAddress, int PacketSize) static void wb35_disconnect(struct usb_interface *intf) { - struct wb35_adapter *adapter = usb_get_intfdata(intf); + struct wbsoft_priv *priv = usb_get_intfdata(intf); - WbWlanHalt(adapter); + WbWlanHalt(priv); usb_set_intfdata(intf, NULL); usb_put_dev(interface_to_usbdev(intf)); -- cgit v1.2.3 From dc67d2b663d4d72ee39b32836fa91c4ff926f3db Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Thu, 30 Oct 2008 19:04:54 +0200 Subject: Staging: w35und: make functions local to wb35tx.c static While there are no functional changes, the diff is quite large because we need to shuffle code around to avoid forward declarations. Acked-by: Pavel Machek Signed-off-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman --- drivers/staging/winbond/wb35tx.c | 199 ++++++++++++++++++------------------- drivers/staging/winbond/wb35tx_f.h | 5 - 2 files changed, 95 insertions(+), 109 deletions(-) (limited to 'drivers/staging/winbond/wb35tx_f.h') diff --git a/drivers/staging/winbond/wb35tx.c b/drivers/staging/winbond/wb35tx.c index 32ee391eac86..b9b4456c8082 100644 --- a/drivers/staging/winbond/wb35tx.c +++ b/drivers/staging/winbond/wb35tx.c @@ -23,21 +23,46 @@ Wb35Tx_get_tx_buffer(phw_data_t pHwData, u8 **pBuffer) return true; } -void Wb35Tx_start(struct wbsoft_priv *adapter) +static void Wb35Tx(struct wbsoft_priv *adapter); + +static void Wb35Tx_complete(struct urb * pUrb) { - phw_data_t pHwData = &adapter->sHwData; - PWB35TX pWb35Tx = &pHwData->Wb35Tx; + struct wbsoft_priv *adapter = pUrb->context; + phw_data_t pHwData = &adapter->sHwData; + PWB35TX pWb35Tx = &pHwData->Wb35Tx; + PMDS pMds = &adapter->Mds; - // Allow only one thread to run into function - if (atomic_inc_return(&pWb35Tx->TxFireCounter) == 1) { - pWb35Tx->EP4vm_state = VM_RUNNING; - Wb35Tx(adapter); - } else - atomic_dec(&pWb35Tx->TxFireCounter); -} + printk("wb35: tx complete\n"); + // Variable setting + pWb35Tx->EP4vm_state = VM_COMPLETED; + pWb35Tx->EP4VM_status = pUrb->status; //Store the last result of Irp + pMds->TxOwner[ pWb35Tx->TxSendIndex ] = 0;// Set the owner. Free the owner bit always. + pWb35Tx->TxSendIndex++; + pWb35Tx->TxSendIndex %= MAX_USB_TX_BUFFER_NUMBER; + if (pHwData->SurpriseRemove || pHwData->HwStop) // Let WbWlanHalt to handle surprise remove + goto error; -void Wb35Tx(struct wbsoft_priv *adapter) + if (pWb35Tx->tx_halt) + goto error; + + // The URB is completed, check the result + if (pWb35Tx->EP4VM_status != 0) { + printk("URB submission failed\n"); + pWb35Tx->EP4vm_state = VM_STOP; + goto error; + } + + Mds_Tx(adapter); + Wb35Tx(adapter); + return; + +error: + atomic_dec(&pWb35Tx->TxFireCounter); + pWb35Tx->EP4vm_state = VM_STOP; +} + +static void Wb35Tx(struct wbsoft_priv *adapter) { phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; @@ -88,50 +113,17 @@ void Wb35Tx(struct wbsoft_priv *adapter) atomic_dec(&pWb35Tx->TxFireCounter); } - -void Wb35Tx_complete(struct urb * pUrb) -{ - struct wbsoft_priv *adapter = pUrb->context; - phw_data_t pHwData = &adapter->sHwData; - PWB35TX pWb35Tx = &pHwData->Wb35Tx; - PMDS pMds = &adapter->Mds; - - printk("wb35: tx complete\n"); - // Variable setting - pWb35Tx->EP4vm_state = VM_COMPLETED; - pWb35Tx->EP4VM_status = pUrb->status; //Store the last result of Irp - pMds->TxOwner[ pWb35Tx->TxSendIndex ] = 0;// Set the owner. Free the owner bit always. - pWb35Tx->TxSendIndex++; - pWb35Tx->TxSendIndex %= MAX_USB_TX_BUFFER_NUMBER; - - if (pHwData->SurpriseRemove || pHwData->HwStop) // Let WbWlanHalt to handle surprise remove - goto error; - - if (pWb35Tx->tx_halt) - goto error; - - // The URB is completed, check the result - if (pWb35Tx->EP4VM_status != 0) { - printk("URB submission failed\n"); - pWb35Tx->EP4vm_state = VM_STOP; - goto error; - } - - Mds_Tx(adapter); - Wb35Tx(adapter); - return; - -error: - atomic_dec(&pWb35Tx->TxFireCounter); - pWb35Tx->EP4vm_state = VM_STOP; -} - -void Wb35Tx_reset_descriptor( phw_data_t pHwData ) +void Wb35Tx_start(struct wbsoft_priv *adapter) { + phw_data_t pHwData = &adapter->sHwData; PWB35TX pWb35Tx = &pHwData->Wb35Tx; - pWb35Tx->TxSendIndex = 0; - pWb35Tx->tx_halt = 0; + // Allow only one thread to run into function + if (atomic_inc_return(&pWb35Tx->TxFireCounter) == 1) { + pWb35Tx->EP4vm_state = VM_RUNNING; + Wb35Tx(adapter); + } else + atomic_dec(&pWb35Tx->TxFireCounter); } unsigned char Wb35Tx_initial(phw_data_t pHwData) @@ -211,59 +203,9 @@ void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 TimeCount) } } -void Wb35Tx_EP2VM_start(struct wbsoft_priv *adapter) -{ - phw_data_t pHwData = &adapter->sHwData; - PWB35TX pWb35Tx = &pHwData->Wb35Tx; - - // Allow only one thread to run into function - if (atomic_inc_return(&pWb35Tx->TxResultCount) == 1) { - pWb35Tx->EP2vm_state = VM_RUNNING; - Wb35Tx_EP2VM(adapter); - } - else - atomic_dec(&pWb35Tx->TxResultCount); -} - +static void Wb35Tx_EP2VM(struct wbsoft_priv *adapter); -void Wb35Tx_EP2VM(struct wbsoft_priv *adapter) -{ - phw_data_t pHwData = &adapter->sHwData; - PWB35TX pWb35Tx = &pHwData->Wb35Tx; - struct urb * pUrb = (struct urb *)pWb35Tx->Tx2Urb; - u32 * pltmp = (u32 *)pWb35Tx->EP2_buf; - int retv; - - if (pHwData->SurpriseRemove || pHwData->HwStop) - goto error; - - if (pWb35Tx->tx_halt) - goto error; - - // - // Issuing URB - // - usb_fill_int_urb( pUrb, pHwData->WbUsb.udev, usb_rcvintpipe(pHwData->WbUsb.udev,2), - pltmp, MAX_INTERRUPT_LENGTH, Wb35Tx_EP2VM_complete, adapter, 32); - - pWb35Tx->EP2vm_state = VM_RUNNING; - retv = usb_submit_urb(pUrb, GFP_ATOMIC); - - if (retv < 0) { - #ifdef _PE_TX_DUMP_ - WBDEBUG(("EP2 Tx Irp sending error\n")); - #endif - goto error; - } - - return; -error: - pWb35Tx->EP2vm_state = VM_STOP; - atomic_dec(&pWb35Tx->TxResultCount); -} - - -void Wb35Tx_EP2VM_complete(struct urb * pUrb) +static void Wb35Tx_EP2VM_complete(struct urb * pUrb) { struct wbsoft_priv *adapter = pUrb->context; phw_data_t pHwData = &adapter->sHwData; @@ -312,3 +254,52 @@ error: pWb35Tx->EP2vm_state = VM_STOP; } +static void Wb35Tx_EP2VM(struct wbsoft_priv *adapter) +{ + phw_data_t pHwData = &adapter->sHwData; + PWB35TX pWb35Tx = &pHwData->Wb35Tx; + struct urb * pUrb = (struct urb *)pWb35Tx->Tx2Urb; + u32 * pltmp = (u32 *)pWb35Tx->EP2_buf; + int retv; + + if (pHwData->SurpriseRemove || pHwData->HwStop) + goto error; + + if (pWb35Tx->tx_halt) + goto error; + + // + // Issuing URB + // + usb_fill_int_urb( pUrb, pHwData->WbUsb.udev, usb_rcvintpipe(pHwData->WbUsb.udev,2), + pltmp, MAX_INTERRUPT_LENGTH, Wb35Tx_EP2VM_complete, adapter, 32); + + pWb35Tx->EP2vm_state = VM_RUNNING; + retv = usb_submit_urb(pUrb, GFP_ATOMIC); + + if (retv < 0) { + #ifdef _PE_TX_DUMP_ + WBDEBUG(("EP2 Tx Irp sending error\n")); + #endif + goto error; + } + + return; +error: + pWb35Tx->EP2vm_state = VM_STOP; + atomic_dec(&pWb35Tx->TxResultCount); +} + +void Wb35Tx_EP2VM_start(struct wbsoft_priv *adapter) +{ + phw_data_t pHwData = &adapter->sHwData; + PWB35TX pWb35Tx = &pHwData->Wb35Tx; + + // Allow only one thread to run into function + if (atomic_inc_return(&pWb35Tx->TxResultCount) == 1) { + pWb35Tx->EP2vm_state = VM_RUNNING; + Wb35Tx_EP2VM(adapter); + } + else + atomic_dec(&pWb35Tx->TxResultCount); +} diff --git a/drivers/staging/winbond/wb35tx_f.h b/drivers/staging/winbond/wb35tx_f.h index 277faa7aaed8..4222fa80c7bd 100644 --- a/drivers/staging/winbond/wb35tx_f.h +++ b/drivers/staging/winbond/wb35tx_f.h @@ -11,15 +11,10 @@ unsigned char Wb35Tx_initial( phw_data_t pHwData ); void Wb35Tx_destroy( phw_data_t pHwData ); unsigned char Wb35Tx_get_tx_buffer( phw_data_t pHwData, u8 **pBuffer ); -void Wb35Tx_EP2VM(struct wbsoft_priv *adapter); void Wb35Tx_EP2VM_start(struct wbsoft_priv *adapter); -void Wb35Tx_EP2VM_complete(struct urb *urb); void Wb35Tx_start(struct wbsoft_priv *adapter); void Wb35Tx_stop( phw_data_t pHwData ); -void Wb35Tx(struct wbsoft_priv *adapter); -void Wb35Tx_complete(struct urb *urb); -void Wb35Tx_reset_descriptor( phw_data_t pHwData ); void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 TimeCount); -- cgit v1.2.3