Staging: w35und: merge wbhal.c to wbusb.c
Impact: cleanup This patch moves all the functions in wbhal.c that are used only in wbusb.c to the latter file. Acked-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
c6e523c0cb
commit
22a82bcd5b
3 changed files with 202 additions and 219 deletions
|
@ -2,212 +2,6 @@
|
|||
#include "wbhal_f.h"
|
||||
#include "wblinux_f.h"
|
||||
|
||||
void hal_set_ethernet_address(struct hw_data *pHwData, u8 * current_address)
|
||||
{
|
||||
u32 ltmp[2];
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
memcpy(pHwData->CurrentMacAddress, current_address, ETH_ALEN);
|
||||
|
||||
ltmp[0] = cpu_to_le32(*(u32 *) pHwData->CurrentMacAddress);
|
||||
ltmp[1] =
|
||||
cpu_to_le32(*(u32 *) (pHwData->CurrentMacAddress + 4)) & 0xffff;
|
||||
|
||||
Wb35Reg_BurstWrite(pHwData, 0x03e8, ltmp, 2, AUTO_INCREMENT);
|
||||
}
|
||||
|
||||
void hal_get_permanent_address(struct hw_data *pHwData, u8 * pethernet_address)
|
||||
{
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
memcpy(pethernet_address, pHwData->PermanentMacAddress, 6);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
void hal_set_beacon_period(struct hw_data *pHwData, u16 beacon_period)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
pHwData->BeaconPeriod = beacon_period;
|
||||
tmp = pHwData->BeaconPeriod << 16;
|
||||
tmp |= pHwData->ProbeDelay;
|
||||
Wb35Reg_Write(pHwData, 0x0848, tmp);
|
||||
}
|
||||
|
||||
static void hal_set_current_channel_ex(struct hw_data *pHwData,
|
||||
ChanInfo channel)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
printk("Going to channel: %d/%d\n", channel.band, channel.ChanNo);
|
||||
|
||||
RFSynthesizer_SwitchingChannel(pHwData, channel); // Switch channel
|
||||
pHwData->Channel = channel.ChanNo;
|
||||
pHwData->band = channel.band;
|
||||
#ifdef _PE_STATE_DUMP_
|
||||
printk("Set channel is %d, band =%d\n", pHwData->Channel,
|
||||
pHwData->band);
|
||||
#endif
|
||||
reg->M28_MacControl &= ~0xff; // Clean channel information field
|
||||
reg->M28_MacControl |= channel.ChanNo;
|
||||
Wb35Reg_WriteWithCallbackValue(pHwData, 0x0828, reg->M28_MacControl,
|
||||
(s8 *) & channel, sizeof(ChanInfo));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
void hal_set_current_channel(struct hw_data *pHwData, ChanInfo channel)
|
||||
{
|
||||
hal_set_current_channel_ex(pHwData, channel);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
void hal_set_accept_broadcast(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
reg->M00_MacControl &= ~0x02000000; //The HW value
|
||||
|
||||
if (enable)
|
||||
reg->M00_MacControl |= 0x02000000; //The HW value
|
||||
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
|
||||
//for wep key error detection, we need to accept broadcast packets to be received temporary.
|
||||
void hal_set_accept_promiscuous(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
if (enable) {
|
||||
reg->M00_MacControl |= 0x00400000;
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
} else {
|
||||
reg->M00_MacControl &= ~0x00400000;
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
}
|
||||
|
||||
void hal_set_accept_multicast(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
reg->M00_MacControl &= ~0x01000000; //The HW value
|
||||
if (enable)
|
||||
reg->M00_MacControl |= 0x01000000; //The HW value
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
|
||||
void hal_set_accept_beacon(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
// 20040108 debug
|
||||
if (!enable) //Due to SME and MLME are not suitable for 35
|
||||
return;
|
||||
|
||||
reg->M00_MacControl &= ~0x04000000; //The HW value
|
||||
if (enable)
|
||||
reg->M00_MacControl |= 0x04000000; //The HW value
|
||||
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
void hal_stop(struct hw_data *pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
pHwData->Wb35Rx.rx_halt = 1;
|
||||
Wb35Rx_stop(pHwData);
|
||||
|
||||
pHwData->Wb35Tx.tx_halt = 1;
|
||||
Wb35Tx_stop(pHwData);
|
||||
|
||||
reg->D00_DmaControl &= ~0xc0000000; //Tx Off, Rx Off
|
||||
Wb35Reg_Write(pHwData, 0x0400, reg->D00_DmaControl);
|
||||
}
|
||||
|
||||
unsigned char hal_idle(struct hw_data *pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
struct wb_usb *pWbUsb = &pHwData->WbUsb;
|
||||
|
||||
if (!pHwData->SurpriseRemove
|
||||
&& (pWbUsb->DetectCount || reg->EP0vm_state != VM_STOP))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void hal_set_radio_mode(struct hw_data *pHwData, unsigned char radio_off)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
if (radio_off) //disable Baseband receive off
|
||||
{
|
||||
pHwData->CurrentRadioSw = 1; // off
|
||||
reg->M24_MacControl &= 0xffffffbf;
|
||||
} else {
|
||||
pHwData->CurrentRadioSw = 0; // on
|
||||
reg->M24_MacControl |= 0x00000040;
|
||||
}
|
||||
Wb35Reg_Write(pHwData, 0x0824, reg->M24_MacControl);
|
||||
}
|
||||
|
||||
u8 hal_get_antenna_number(struct hw_data *pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if ((reg->BB2C & BIT(11)) == 0)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
//0 : radio on; 1: radio off
|
||||
u8 hal_get_hw_radio_off(struct hw_data * pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return 1;
|
||||
|
||||
//read the bit16 of register U1B0
|
||||
Wb35Reg_Read(pHwData, 0x3b0, ®->U1B0);
|
||||
if ((reg->U1B0 & 0x00010000)) {
|
||||
pHwData->CurrentRadioHw = 1;
|
||||
return 1;
|
||||
} else {
|
||||
pHwData->CurrentRadioHw = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char hal_get_dxx_reg(struct hw_data *pHwData, u16 number, u32 * pValue)
|
||||
{
|
||||
if (number < 0x1000)
|
||||
|
|
|
@ -18,9 +18,6 @@ void hal_clear_all_default_key( struct hw_data * pHwData );
|
|||
void hal_clear_all_group_key( struct hw_data * pHwData );
|
||||
void hal_clear_all_mapping_key( struct hw_data * pHwData );
|
||||
void hal_clear_all_key( struct hw_data * pHwData );
|
||||
void hal_get_ethernet_address( struct hw_data * pHwData, u8 *current_address );
|
||||
void hal_set_ethernet_address( struct hw_data * pHwData, u8 *current_address );
|
||||
void hal_get_permanent_address( struct hw_data * pHwData, u8 *pethernet_address );
|
||||
void hal_set_power_save_mode( struct hw_data * pHwData, unsigned char power_save, unsigned char wakeup, unsigned char dtim );
|
||||
void hal_get_power_save_mode( struct hw_data * pHwData, u8 *pin_pwr_save );
|
||||
void hal_set_slot_time( struct hw_data * pHwData, u8 type );
|
||||
|
@ -32,15 +29,9 @@ void hal_resume_sync_bss( struct hw_data * pHwData);
|
|||
void hal_set_aid( struct hw_data * pHwData, u16 aid );
|
||||
void hal_set_bssid( struct hw_data * pHwData, u8 *pbssid );
|
||||
void hal_get_bssid( struct hw_data * pHwData, u8 *pbssid );
|
||||
void hal_set_beacon_period( struct hw_data * pHwData, u16 beacon_period );
|
||||
void hal_set_listen_interval( struct hw_data * pHwData, u16 listen_interval );
|
||||
void hal_set_cap_info( struct hw_data * pHwData, u16 capability_info );
|
||||
void hal_set_ssid( struct hw_data * pHwData, u8 *pssid, u8 ssid_len );
|
||||
void hal_set_current_channel( struct hw_data * pHwData, ChanInfo channel );
|
||||
void hal_set_accept_broadcast( struct hw_data * pHwData, u8 enable );
|
||||
void hal_set_accept_multicast( struct hw_data * pHwData, u8 enable );
|
||||
void hal_set_accept_beacon( struct hw_data * pHwData, u8 enable );
|
||||
void hal_stop( struct hw_data * pHwData );
|
||||
void hal_start_tx0( struct hw_data * pHwData );
|
||||
#define hal_get_cwmin( _A ) ( (_A)->cwmin )
|
||||
void hal_set_cwmax( struct hw_data * pHwData, u16 cwin_max );
|
||||
|
@ -49,14 +40,11 @@ void hal_set_rsn_wpa( struct hw_data * pHwData, u32 * RSN_IE_Bitmap , u32 * RS
|
|||
void hal_set_connect_info( struct hw_data * pHwData, unsigned char boConnect );
|
||||
u8 hal_get_est_sq3( struct hw_data * pHwData, u8 Count );
|
||||
void hal_set_rf_power( struct hw_data * pHwData, u8 PowerIndex ); // 20060621 Modify
|
||||
void hal_set_radio_mode( struct hw_data * pHwData, unsigned char boValue);
|
||||
void hal_descriptor_indicate( struct hw_data * pHwData, PDESCRIPTOR pDes );
|
||||
u8 hal_get_antenna_number( struct hw_data * pHwData );
|
||||
u32 hal_get_bss_pk_cnt( struct hw_data * pHwData );
|
||||
#define hal_get_region_from_EEPROM( _A ) ( (_A)->reg.EEPROMRegion )
|
||||
void hal_set_accept_promiscuous ( struct hw_data * pHwData, u8 enable);
|
||||
#define hal_get_tx_buffer( _A, _B ) Wb35Tx_get_tx_buffer( _A, _B )
|
||||
u8 hal_get_hw_radio_off ( struct hw_data * pHwData );
|
||||
#define hal_software_set( _A ) (_A->SoftwareSet)
|
||||
#define hal_driver_init_OK( _A ) (_A->IsInitOK)
|
||||
#define hal_rssi_boundary_high( _A ) (_A->RSSI_high)
|
||||
|
@ -79,7 +67,6 @@ unsigned char hal_set_dxx_reg( struct hw_data * pHwData, u16 number, u32 valu
|
|||
#define hal_get_clear_interrupt(_A)
|
||||
#define hal_ibss_disconnect(_A) hal_stop_sync_bss(_A)
|
||||
#define hal_join_request_stop(_A)
|
||||
unsigned char hal_idle( struct hw_data * pHwData );
|
||||
#define hw_get_cxx_reg( _A, _B, _C )
|
||||
#define hw_set_cxx_reg( _A, _B, _C )
|
||||
#define hw_get_dxx_reg( _A, _B, _C ) hal_get_dxx_reg( _A, _B, (u32 *)_C )
|
||||
|
|
|
@ -120,6 +120,127 @@ static int wbsoft_start(struct ieee80211_hw *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void hal_set_radio_mode(struct hw_data *pHwData, unsigned char radio_off)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
if (radio_off) //disable Baseband receive off
|
||||
{
|
||||
pHwData->CurrentRadioSw = 1; // off
|
||||
reg->M24_MacControl &= 0xffffffbf;
|
||||
} else {
|
||||
pHwData->CurrentRadioSw = 0; // on
|
||||
reg->M24_MacControl |= 0x00000040;
|
||||
}
|
||||
Wb35Reg_Write(pHwData, 0x0824, reg->M24_MacControl);
|
||||
}
|
||||
|
||||
static void hal_set_beacon_period(struct hw_data *pHwData, u16 beacon_period)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
pHwData->BeaconPeriod = beacon_period;
|
||||
tmp = pHwData->BeaconPeriod << 16;
|
||||
tmp |= pHwData->ProbeDelay;
|
||||
Wb35Reg_Write(pHwData, 0x0848, tmp);
|
||||
}
|
||||
|
||||
static void
|
||||
hal_set_current_channel_ex(struct hw_data *pHwData, ChanInfo channel)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
printk("Going to channel: %d/%d\n", channel.band, channel.ChanNo);
|
||||
|
||||
RFSynthesizer_SwitchingChannel(pHwData, channel); // Switch channel
|
||||
pHwData->Channel = channel.ChanNo;
|
||||
pHwData->band = channel.band;
|
||||
#ifdef _PE_STATE_DUMP_
|
||||
printk("Set channel is %d, band =%d\n", pHwData->Channel,
|
||||
pHwData->band);
|
||||
#endif
|
||||
reg->M28_MacControl &= ~0xff; // Clean channel information field
|
||||
reg->M28_MacControl |= channel.ChanNo;
|
||||
Wb35Reg_WriteWithCallbackValue(pHwData, 0x0828, reg->M28_MacControl,
|
||||
(s8 *) & channel, sizeof(ChanInfo));
|
||||
}
|
||||
|
||||
static void hal_set_current_channel(struct hw_data *pHwData, ChanInfo channel)
|
||||
{
|
||||
hal_set_current_channel_ex(pHwData, channel);
|
||||
}
|
||||
|
||||
static void hal_set_accept_broadcast(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
reg->M00_MacControl &= ~0x02000000; //The HW value
|
||||
|
||||
if (enable)
|
||||
reg->M00_MacControl |= 0x02000000; //The HW value
|
||||
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
|
||||
//for wep key error detection, we need to accept broadcast packets to be received temporary.
|
||||
static void hal_set_accept_promiscuous(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
if (enable) {
|
||||
reg->M00_MacControl |= 0x00400000;
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
} else {
|
||||
reg->M00_MacControl &= ~0x00400000;
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
}
|
||||
|
||||
static void hal_set_accept_multicast(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
reg->M00_MacControl &= ~0x01000000; //The HW value
|
||||
if (enable)
|
||||
reg->M00_MacControl |= 0x01000000; //The HW value
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
|
||||
static void hal_set_accept_beacon(struct hw_data *pHwData, u8 enable)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
// 20040108 debug
|
||||
if (!enable) //Due to SME and MLME are not suitable for 35
|
||||
return;
|
||||
|
||||
reg->M00_MacControl &= ~0x04000000; //The HW value
|
||||
if (enable)
|
||||
reg->M00_MacControl |= 0x04000000; //The HW value
|
||||
|
||||
Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
|
||||
}
|
||||
|
||||
static int wbsoft_config(struct ieee80211_hw *dev, u32 changed)
|
||||
{
|
||||
struct wbsoft_priv *priv = dev->priv;
|
||||
|
@ -171,6 +292,87 @@ static const struct ieee80211_ops wbsoft_ops = {
|
|||
.get_tsf = wbsoft_get_tsf,
|
||||
};
|
||||
|
||||
static void
|
||||
hal_set_ethernet_address(struct hw_data *pHwData, u8 * current_address)
|
||||
{
|
||||
u32 ltmp[2];
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
memcpy(pHwData->CurrentMacAddress, current_address, ETH_ALEN);
|
||||
|
||||
ltmp[0] = cpu_to_le32(*(u32 *) pHwData->CurrentMacAddress);
|
||||
ltmp[1] =
|
||||
cpu_to_le32(*(u32 *) (pHwData->CurrentMacAddress + 4)) & 0xffff;
|
||||
|
||||
Wb35Reg_BurstWrite(pHwData, 0x03e8, ltmp, 2, AUTO_INCREMENT);
|
||||
}
|
||||
|
||||
static void
|
||||
hal_get_permanent_address(struct hw_data *pHwData, u8 * pethernet_address)
|
||||
{
|
||||
if (pHwData->SurpriseRemove)
|
||||
return;
|
||||
|
||||
memcpy(pethernet_address, pHwData->PermanentMacAddress, 6);
|
||||
}
|
||||
|
||||
static void hal_stop(struct hw_data *pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
pHwData->Wb35Rx.rx_halt = 1;
|
||||
Wb35Rx_stop(pHwData);
|
||||
|
||||
pHwData->Wb35Tx.tx_halt = 1;
|
||||
Wb35Tx_stop(pHwData);
|
||||
|
||||
reg->D00_DmaControl &= ~0xc0000000; //Tx Off, Rx Off
|
||||
Wb35Reg_Write(pHwData, 0x0400, reg->D00_DmaControl);
|
||||
}
|
||||
|
||||
static unsigned char hal_idle(struct hw_data *pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
struct wb_usb *pWbUsb = &pHwData->WbUsb;
|
||||
|
||||
if (!pHwData->SurpriseRemove
|
||||
&& (pWbUsb->DetectCount || reg->EP0vm_state != VM_STOP))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
u8 hal_get_antenna_number(struct hw_data *pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if ((reg->BB2C & BIT(11)) == 0)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 0 : radio on; 1: radio off */
|
||||
static u8 hal_get_hw_radio_off(struct hw_data * pHwData)
|
||||
{
|
||||
struct wb35_reg *reg = &pHwData->reg;
|
||||
|
||||
if (pHwData->SurpriseRemove)
|
||||
return 1;
|
||||
|
||||
//read the bit16 of register U1B0
|
||||
Wb35Reg_Read(pHwData, 0x3b0, ®->U1B0);
|
||||
if ((reg->U1B0 & 0x00010000)) {
|
||||
pHwData->CurrentRadioHw = 1;
|
||||
return 1;
|
||||
} else {
|
||||
pHwData->CurrentRadioHw = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static u8 LED_GRAY[20] = {
|
||||
0, 3, 4, 6, 8, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 8, 6, 4, 2
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue