5 void hal_set_ethernet_address(struct hw_data *pHwData, u8 * current_address)
9 if (pHwData->SurpriseRemove)
12 memcpy(pHwData->CurrentMacAddress, current_address, ETH_ALEN);
14 ltmp[0] = cpu_to_le32(*(u32 *) pHwData->CurrentMacAddress);
16 cpu_to_le32(*(u32 *) (pHwData->CurrentMacAddress + 4)) & 0xffff;
18 Wb35Reg_BurstWrite(pHwData, 0x03e8, ltmp, 2, AUTO_INCREMENT);
21 void hal_get_permanent_address(struct hw_data *pHwData, u8 * pethernet_address)
23 if (pHwData->SurpriseRemove)
26 memcpy(pethernet_address, pHwData->PermanentMacAddress, 6);
29 //---------------------------------------------------------------------------------------------------
30 void hal_set_beacon_period(struct hw_data *pHwData, u16 beacon_period)
34 if (pHwData->SurpriseRemove)
37 pHwData->BeaconPeriod = beacon_period;
38 tmp = pHwData->BeaconPeriod << 16;
39 tmp |= pHwData->ProbeDelay;
40 Wb35Reg_Write(pHwData, 0x0848, tmp);
43 static void hal_set_current_channel_ex(struct hw_data *pHwData,
46 struct wb35_reg *reg = &pHwData->reg;
48 if (pHwData->SurpriseRemove)
51 printk("Going to channel: %d/%d\n", channel.band, channel.ChanNo);
53 RFSynthesizer_SwitchingChannel(pHwData, channel); // Switch channel
54 pHwData->Channel = channel.ChanNo;
55 pHwData->band = channel.band;
56 #ifdef _PE_STATE_DUMP_
57 printk("Set channel is %d, band =%d\n", pHwData->Channel,
60 reg->M28_MacControl &= ~0xff; // Clean channel information field
61 reg->M28_MacControl |= channel.ChanNo;
62 Wb35Reg_WriteWithCallbackValue(pHwData, 0x0828, reg->M28_MacControl,
63 (s8 *) & channel, sizeof(ChanInfo));
66 //---------------------------------------------------------------------------------------------------
67 void hal_set_current_channel(struct hw_data *pHwData, ChanInfo channel)
69 hal_set_current_channel_ex(pHwData, channel);
72 //---------------------------------------------------------------------------------------------------
73 void hal_set_accept_broadcast(struct hw_data *pHwData, u8 enable)
75 struct wb35_reg *reg = &pHwData->reg;
77 if (pHwData->SurpriseRemove)
80 reg->M00_MacControl &= ~0x02000000; //The HW value
83 reg->M00_MacControl |= 0x02000000; //The HW value
85 Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
88 //for wep key error detection, we need to accept broadcast packets to be received temporary.
89 void hal_set_accept_promiscuous(struct hw_data *pHwData, u8 enable)
91 struct wb35_reg *reg = &pHwData->reg;
93 if (pHwData->SurpriseRemove)
96 reg->M00_MacControl |= 0x00400000;
97 Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
99 reg->M00_MacControl &= ~0x00400000;
100 Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
104 void hal_set_accept_multicast(struct hw_data *pHwData, u8 enable)
106 struct wb35_reg *reg = &pHwData->reg;
108 if (pHwData->SurpriseRemove)
111 reg->M00_MacControl &= ~0x01000000; //The HW value
113 reg->M00_MacControl |= 0x01000000; //The HW value
114 Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
117 void hal_set_accept_beacon(struct hw_data *pHwData, u8 enable)
119 struct wb35_reg *reg = &pHwData->reg;
121 if (pHwData->SurpriseRemove)
125 if (!enable) //Due to SME and MLME are not suitable for 35
128 reg->M00_MacControl &= ~0x04000000; //The HW value
130 reg->M00_MacControl |= 0x04000000; //The HW value
132 Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl);
135 //---------------------------------------------------------------------------------------------------
137 void hal_stop(struct hw_data *pHwData)
139 struct wb35_reg *reg = &pHwData->reg;
141 pHwData->Wb35Rx.rx_halt = 1;
142 Wb35Rx_stop(pHwData);
144 pHwData->Wb35Tx.tx_halt = 1;
145 Wb35Tx_stop(pHwData);
147 reg->D00_DmaControl &= ~0xc0000000; //Tx Off, Rx Off
148 Wb35Reg_Write(pHwData, 0x0400, reg->D00_DmaControl);
151 unsigned char hal_idle(struct hw_data *pHwData)
153 struct wb35_reg *reg = &pHwData->reg;
154 struct wb_usb *pWbUsb = &pHwData->WbUsb;
156 if (!pHwData->SurpriseRemove
157 && (pWbUsb->DetectCount || reg->EP0vm_state != VM_STOP))
163 void hal_set_radio_mode(struct hw_data *pHwData, unsigned char radio_off)
165 struct wb35_reg *reg = &pHwData->reg;
167 if (pHwData->SurpriseRemove)
170 if (radio_off) //disable Baseband receive off
172 pHwData->CurrentRadioSw = 1; // off
173 reg->M24_MacControl &= 0xffffffbf;
175 pHwData->CurrentRadioSw = 0; // on
176 reg->M24_MacControl |= 0x00000040;
178 Wb35Reg_Write(pHwData, 0x0824, reg->M24_MacControl);
181 u8 hal_get_antenna_number(struct hw_data *pHwData)
183 struct wb35_reg *reg = &pHwData->reg;
185 if ((reg->BB2C & BIT(11)) == 0)
191 //----------------------------------------------------------------------------------------------------
192 //0 : radio on; 1: radio off
193 u8 hal_get_hw_radio_off(struct hw_data * pHwData)
195 struct wb35_reg *reg = &pHwData->reg;
197 if (pHwData->SurpriseRemove)
200 //read the bit16 of register U1B0
201 Wb35Reg_Read(pHwData, 0x3b0, ®->U1B0);
202 if ((reg->U1B0 & 0x00010000)) {
203 pHwData->CurrentRadioHw = 1;
206 pHwData->CurrentRadioHw = 0;
211 unsigned char hal_get_dxx_reg(struct hw_data *pHwData, u16 number, u32 * pValue)
215 return Wb35Reg_ReadSync(pHwData, number, pValue);
218 unsigned char hal_set_dxx_reg(struct hw_data *pHwData, u16 number, u32 value)
224 ret = Wb35Reg_WriteSync(pHwData, number, value);
228 void hal_set_rf_power(struct hw_data *pHwData, u8 PowerIndex)
230 RFSynthesizer_SetPowerIndex(pHwData, PowerIndex);