5 void hal_set_ethernet_address( struct hw_data * pHwData, u8 *current_address )
9 if( pHwData->SurpriseRemove ) return;
11 memcpy( pHwData->CurrentMacAddress, current_address, ETH_ALEN );
13 ltmp[0]= cpu_to_le32( *(u32 *)pHwData->CurrentMacAddress );
14 ltmp[1]= cpu_to_le32( *(u32 *)(pHwData->CurrentMacAddress + 4) ) & 0xffff;
16 Wb35Reg_BurstWrite( pHwData, 0x03e8, ltmp, 2, AUTO_INCREMENT );
19 void hal_get_permanent_address( struct hw_data * pHwData, u8 *pethernet_address )
21 if( pHwData->SurpriseRemove ) return;
23 memcpy( pethernet_address, pHwData->PermanentMacAddress, 6 );
26 //---------------------------------------------------------------------------------------------------
27 void hal_set_beacon_period( struct hw_data * pHwData, u16 beacon_period )
31 if( pHwData->SurpriseRemove ) return;
33 pHwData->BeaconPeriod = beacon_period;
34 tmp = pHwData->BeaconPeriod << 16;
35 tmp |= pHwData->ProbeDelay;
36 Wb35Reg_Write( pHwData, 0x0848, tmp );
40 static void hal_set_current_channel_ex( struct hw_data * pHwData, ChanInfo channel )
42 struct wb35_reg *reg = &pHwData->reg;
44 if( pHwData->SurpriseRemove )
47 printk("Going to channel: %d/%d\n", channel.band, channel.ChanNo);
49 RFSynthesizer_SwitchingChannel( pHwData, channel );// Switch channel
50 pHwData->Channel = channel.ChanNo;
51 pHwData->band = channel.band;
52 #ifdef _PE_STATE_DUMP_
53 printk("Set channel is %d, band =%d\n", pHwData->Channel, pHwData->band);
55 reg->M28_MacControl &= ~0xff; // Clean channel information field
56 reg->M28_MacControl |= channel.ChanNo;
57 Wb35Reg_WriteWithCallbackValue( pHwData, 0x0828, reg->M28_MacControl,
58 (s8 *)&channel, sizeof(ChanInfo));
60 //---------------------------------------------------------------------------------------------------
61 void hal_set_current_channel( struct hw_data * pHwData, ChanInfo channel )
63 hal_set_current_channel_ex( pHwData, channel );
65 //---------------------------------------------------------------------------------------------------
66 void hal_set_accept_broadcast( struct hw_data * pHwData, u8 enable )
68 struct wb35_reg *reg = &pHwData->reg;
70 if( pHwData->SurpriseRemove ) return;
72 reg->M00_MacControl &= ~0x02000000;//The HW value
75 reg->M00_MacControl |= 0x02000000;//The HW value
77 Wb35Reg_Write( pHwData, 0x0800, reg->M00_MacControl );
80 //for wep key error detection, we need to accept broadcast packets to be received temporary.
81 void hal_set_accept_promiscuous( struct hw_data * pHwData, u8 enable)
83 struct wb35_reg *reg = &pHwData->reg;
85 if (pHwData->SurpriseRemove) return;
87 reg->M00_MacControl |= 0x00400000;
88 Wb35Reg_Write( pHwData, 0x0800, reg->M00_MacControl );
90 reg->M00_MacControl&=~0x00400000;
91 Wb35Reg_Write( pHwData, 0x0800, reg->M00_MacControl );
95 void hal_set_accept_multicast( struct hw_data * pHwData, u8 enable )
97 struct wb35_reg *reg = &pHwData->reg;
99 if( pHwData->SurpriseRemove ) return;
101 reg->M00_MacControl &= ~0x01000000;//The HW value
102 if (enable) reg->M00_MacControl |= 0x01000000;//The HW value
103 Wb35Reg_Write( pHwData, 0x0800, reg->M00_MacControl );
106 void hal_set_accept_beacon( struct hw_data * pHwData, u8 enable )
108 struct wb35_reg *reg = &pHwData->reg;
110 if( pHwData->SurpriseRemove ) return;
113 if( !enable )//Due to SME and MLME are not suitable for 35
116 reg->M00_MacControl &= ~0x04000000;//The HW value
118 reg->M00_MacControl |= 0x04000000;//The HW value
120 Wb35Reg_Write( pHwData, 0x0800, reg->M00_MacControl );
122 //---------------------------------------------------------------------------------------------------
124 void hal_stop( struct hw_data * pHwData )
126 struct wb35_reg *reg = &pHwData->reg;
128 pHwData->Wb35Rx.rx_halt = 1;
129 Wb35Rx_stop( pHwData );
131 pHwData->Wb35Tx.tx_halt = 1;
132 Wb35Tx_stop( pHwData );
134 reg->D00_DmaControl &= ~0xc0000000;//Tx Off, Rx Off
135 Wb35Reg_Write( pHwData, 0x0400, reg->D00_DmaControl );
138 unsigned char hal_idle(struct hw_data * pHwData)
140 struct wb35_reg *reg = &pHwData->reg;
141 struct wb_usb *pWbUsb = &pHwData->WbUsb;
143 if( !pHwData->SurpriseRemove && ( pWbUsb->DetectCount || reg->EP0vm_state!=VM_STOP ) )
149 void hal_set_radio_mode( struct hw_data * pHwData, unsigned char radio_off)
151 struct wb35_reg *reg = &pHwData->reg;
153 if( pHwData->SurpriseRemove ) return;
155 if (radio_off) //disable Baseband receive off
157 pHwData->CurrentRadioSw = 1; // off
158 reg->M24_MacControl &= 0xffffffbf;
162 pHwData->CurrentRadioSw = 0; // on
163 reg->M24_MacControl |= 0x00000040;
165 Wb35Reg_Write( pHwData, 0x0824, reg->M24_MacControl );
168 u8 hal_get_antenna_number( struct hw_data * pHwData )
170 struct wb35_reg *reg = &pHwData->reg;
172 if ((reg->BB2C & BIT(11)) == 0)
178 //----------------------------------------------------------------------------------------------------
179 //0 : radio on; 1: radio off
180 u8 hal_get_hw_radio_off( struct hw_data * pHwData )
182 struct wb35_reg *reg = &pHwData->reg;
184 if( pHwData->SurpriseRemove ) return 1;
186 //read the bit16 of register U1B0
187 Wb35Reg_Read( pHwData, 0x3b0, ®->U1B0 );
188 if ((reg->U1B0 & 0x00010000)) {
189 pHwData->CurrentRadioHw = 1;
192 pHwData->CurrentRadioHw = 0;
197 unsigned char hal_get_dxx_reg( struct hw_data * pHwData, u16 number, u32 * pValue )
199 if( number < 0x1000 )
201 return Wb35Reg_ReadSync( pHwData, number, pValue );
204 unsigned char hal_set_dxx_reg( struct hw_data * pHwData, u16 number, u32 value )
208 if( number < 0x1000 )
210 ret = Wb35Reg_WriteSync( pHwData, number, value );
214 void hal_set_rf_power(struct hw_data * pHwData, u8 PowerIndex)
216 RFSynthesizer_SetPowerIndex( pHwData, PowerIndex );