예제 #1
0
void pnp_resume_wk(void *context)
{
	uint res = _SUCCESS;
	_adapter * padapter = (_adapter *)context;
	struct xmit_priv	*pxmitpriv = &padapter->xmitpriv;
	struct recv_priv	*precvpriv = &padapter->recvpriv;

	padapter->pwrctrlpriv.pnp_bstop_trx=_FALSE;

	pxmitpriv->txirp_cnt = 1;
	precvpriv->rx_pending_cnt = 1;


	res = rtl871x_hal_init(padapter);

	if (res ==_FAIL) {
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n========== pnp_hw_init_thread:init 8712 fail!!!!!!!!!!\n"));
	}

	if (padapter->dvobjpriv.inirp_init !=NULL) {
		padapter->dvobjpriv.inirp_init(padapter);
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("\n pnp_hw_init_thread:rx irp init!!\n"));
	}

	padapter->hw_init_completed = _TRUE;

	NdisMSetInformationComplete(padapter->hndis_adapter, NDIS_STATUS_SUCCESS);
}
예제 #2
0
static int netdev_open(struct net_device *pnetdev)
{
	struct _adapter *padapter = (struct _adapter *)_netdev_priv(pnetdev);

	if (padapter->bup == false) {
		padapter->bDriverStopped = false;
		padapter->bSurpriseRemoved = false;
		padapter->bup = true;
		if (rtl871x_hal_init(padapter) != _SUCCESS)
			goto netdev_open_error;
		if (r8712_initmac == NULL)
			/* Use the mac address stored in the Efuse */
			memcpy(pnetdev->dev_addr,
				padapter->eeprompriv.mac_addr, ETH_ALEN);
		else {
			/* We have to inform f/w to use user-supplied MAC
			 * address.
			 */
			msleep(200);
			r8712_setMacAddr_cmd(padapter, (u8 *)pnetdev->dev_addr);
			/*
			 * The "myid" function will get the wifi mac address
			 * from eeprompriv structure instead of netdev
			 * structure. So, we have to overwrite the mac_addr
			 * stored in the eeprompriv structure. In this case,
			 * the real mac address won't be used anymore. So that,
			 * the eeprompriv.mac_addr should store the mac which
			 * users specify.
			 */
			memcpy(padapter->eeprompriv.mac_addr,
				pnetdev->dev_addr, ETH_ALEN);
		}
		if (start_drv_threads(padapter) != _SUCCESS)
			goto netdev_open_error;
		if (padapter->dvobjpriv.inirp_init == NULL)
			goto netdev_open_error;
		else
			padapter->dvobjpriv.inirp_init(padapter);
		r8712_set_ps_mode(padapter, padapter->registrypriv.power_mgnt,
				  padapter->registrypriv.smart_ps);
	}
	if (!netif_queue_stopped(pnetdev))
		netif_start_queue(pnetdev);
	else
		netif_wake_queue(pnetdev);

	 if (video_mode)
		enable_video_mode(padapter, cbw40_enable);
	/* start driver mlme relation timer */
	start_drv_timers(padapter);
	padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK);
	return 0;
netdev_open_error:
	padapter->bup = false;
	netif_carrier_off(pnetdev);
	netif_stop_queue(pnetdev);
	return -1;
}
예제 #3
0
void pnp_resume_wk(void *context)
{
#ifdef CONFIG_POWER_DOWN_MODE
	NDIS_STATUS status;
	uint res = _SUCCESS;
#endif
	u8	x = 0;
	_adapter * padapter = (_adapter *)context;


	RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("pnp_resume_wk ===>\n"));

	padapter->pwrctrlpriv.pnp_bstop_trx=_FALSE;

#ifdef CONFIG_POWER_DOWN_MODE
{
	BOOL	fRet = FALSE;
	HANDLE	hPMU = INVALID_HANDLE_VALUE;
	u32 stLdoData = 0;

	hPMU = CreateFile(_T("SDH1:"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	if(INVALID_HANDLE_VALUE == hPMU )
	{
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("CreateFile Error SDH1==.\n"));
	}

	 fRet=DeviceIoControl(hPMU,
                         IOCTL_CARD_STATE_NOTIFY,
                         NULL,
                         0,
                         &stLdoData,
                         sizeof(u32),
                         NULL,
                         NULL);

	if(!fRet)
	{
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("DeviceIoControl Error \n"));
	}

	CloseHandle(hPMU);
}

	//set 4-bit bus mode
	attrib_read(padapter, 0x7, 1, &x);
	x |= BIT(1);
	attrib_write(padapter, 0x7, 1, &x);

	//set Function 1 I/O Block Size to 512(0x0200)
	x = 0x00;
	attrib_write(padapter, 0x110, 1, &x);
	x = 0x02;
	attrib_write(padapter, 0x111, 1, &x);

	//set  Function 1 I/O Enable
	attrib_read(padapter, 0x2, 1, &x);
	x |= BIT(1);
	attrib_write(padapter, 0x2, 1, &x);

	//set Function 1 Interrupt Enable
	x = BIT(0)|BIT(1);
	attrib_write(padapter, 0x4, 1, &x);

	status=padapter->dvobj_init(padapter);
	if (status != NDIS_STATUS_SUCCESS) {
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n initialize device object priv Failed!\n"));
	}

	res = rtl871x_hal_init(padapter);
	if (res ==_FAIL) {
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n========== pnp_hw_init_thread:init 8712 fail!!!!!!!!!!\n"));
	}
#endif

	RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("===>write SDIO_HIMR!!!\n"));
	write16(padapter, SDIO_HIMR, 0x3ff);
	{
		u32 tmp32;
		tmp32=read32(padapter, TXFF_EMPTY_TH);
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("  =====TXFF_EMPTY_TH=0x%.8x!\n",tmp32));
		tmp32=tmp32 |0xfffff;
		write32(padapter, TXFF_EMPTY_TH, tmp32);
		tmp32=read32(padapter, TXFF_EMPTY_TH);
		RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("  =====TXFF_EMPTY_TH=0x%.8x!\n",tmp32));
	}

	padapter->hw_init_completed=_TRUE;

#ifdef CONFIG_POWER_DOWN_MODE
	if(padapter->pwrctrlpriv.pwr_mode != padapter->registrypriv.power_mgnt){
		set_ps_mode(padapter, padapter->registrypriv.power_mgnt, padapter->registrypriv.smart_ps);
	}
#endif

	NdisMSetInformationComplete(padapter->hndis_adapter, NDIS_STATUS_SUCCESS);

	RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("pnp_resume_wk <===\n"));
}