⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
        );

#ifdef MRVL_GUI_INTERFACE 
    g_NdisWrapperHandle = NdisWrapperHandle;
#endif // MRVL_GUI_INTERFACE 

    NdisZeroMemory(&MrvDrvNMC, sizeof(MrvDrvNMC));

    // Initialize the Miniport characteristics for NdisMRegisterMiniport.
    MrvDrvNMC.MajorNdisVersion         = MRVDRV_NDIS_MAJOR_VERSION;
    MrvDrvNMC.MinorNdisVersion         = MRVDRV_NDIS_MINOR_VERSION;
    MrvDrvNMC.InitializeHandler        = MrvDrvInitialize;
    MrvDrvNMC.ResetHandler             = MrvDrvReset;
    MrvDrvNMC.CheckForHangHandler      = MrvDrvCheckForHang;
  
    MrvDrvNMC.HandleInterruptHandler   = NULL;
    MrvDrvNMC.DisableInterruptHandler  = NULL;  //MrvDrvDisableInterrupt;
    MrvDrvNMC.EnableInterruptHandler   = NULL;   //MrvDrvEnableInterrupt;
    MrvDrvNMC.ISRHandler               = NULL;

    MrvDrvNMC.QueryInformationHandler  = MrvDrvQueryInformation;
    MrvDrvNMC.SetInformationHandler    = MrvDrvSetInformation;  
    MrvDrvNMC.AllocateCompleteHandler  = MrvDrvAllocateComplete;
    MrvDrvNMC.ReconfigureHandler       = NULL;
    #ifdef NDIS51_MINIPORT
    MrvDrvNMC.PnPEventNotifyHandler    = MrvDrvPnPEventNotify;
    //#ifdef TX_PRY_Q  ##dralee
    MrvDrvNMC.CancelSendPacketsHandler = NULL;
    //#else
    //MrvDrvNMC.CancelSendPacketsHandler = MrvDrvCancelSendPackets; 
    //#endif
    MrvDrvNMC.AdapterShutdownHandler   = MrvDrvShutdownHandler;
    #endif 
    //++dralee_20060418 don't remove this call back. unplug card need this to release resource. 
    MrvDrvNMC.HaltHandler              = MrvDrvHalt;
    //MrvDrvNMC.HaltHandler              = NULL;

    MrvDrvNMC.TransferDataHandler      = NULL;
    MrvDrvNMC.ReturnPacketHandler      = MrvDrvReturnPacket;   

    MrvDrvNMC.SendHandler              = MrvDrvSend;
    MrvDrvNMC.SendPacketsHandler       = NULL;    

    //  Register this driver with the NDIS wrapper
    //  This will cause MrvDrvInitialize to be called before returning
  Status = NdisMRegisterMiniport(
        NdisWrapperHandle,
        &MrvDrvNMC,
        sizeof(NDIS_MINIPORT_CHARACTERISTICS));

  if (Status == NDIS_STATUS_SUCCESS)
  { 
    DBGPRINT(DBG_LOAD,("<== DriverEntry: register miniport success\n"));
	//RETAILMSG(1,(TEXT("<== DriverEntry: register miniport success")));
    return NDIS_STATUS_SUCCESS; 
  }
  
  NdisTerminateWrapper(NdisWrapperHandle, NULL);
  DBGPRINT(DBG_LOAD,("<== INIT - DriverEntry: register miniport failed!!\n"));
  //RETAILMSG(1,(TEXT("<== INIT - DriverEntry: register miniport failed!!")));
    return Status;
}

/******************************************************************************
 *
 *  Name: MrvDrvInitialize()
 *
 *  Description: 
 *      NDIS miniport initialization routine, upper layer interface to the NDIS wrapper.
 *      This routine will check medium support and call rsource allocation and HW 
 *      initialization routines to set up the staion.
 *
 *  Conditions for Use: 
 *      Will be called by NDIS wrapper to initialize the device
 *
 *  Arguments: 
 *      OUT PNDIS_STATUS OpenErrorStatus,
 *      OUT PUINT SelectedMediumIndex,
 *      IN PNDIS_MEDIUM MediumArray,
 *      IN UINT MediumArraySize,
 *      IN NDIS_HANDLE MiniportAdapterHandle,
 *      IN NDIS_HANDLE WrapperConfigurationContext
 *    
 *  Return Value:         
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_FAILURE
 * 
 *  Notes:                
 *
 *****************************************************************************/
NDIS_STATUS
MrvDrvInitialize(
  OUT PNDIS_STATUS OpenErrorStatus,
  OUT PUINT SelectedMediumIndex,
  IN PNDIS_MEDIUM MediumArray,
  IN UINT MediumArraySize,
  IN NDIS_HANDLE MiniportAdapterHandle,
  IN NDIS_HANDLE WrapperConfigurationContext
  )
{
  ULONG i;
  NDIS_STATUS Status;
  PMRVDRV_ADAPTER Adapter;
  NDIS_HANDLE RegHdl;
//???dralee----------------------------  
#if 1

#else //1
#ifdef IF_GSPI
#ifdef OMAP
	DWORD dwReadValue = 0;
    BOOL bWLANDriverLoaded = FALSE;
    DWORD dwRegValue = 0;
#endif // OMAP
#endif // IF_GSPI
#endif //1
//???------------------------------------

 
    IF_FW_STATUS      fwStatus; 
    i =0;
  DBGPRINT(DBG_LOAD,("INIT - Enter MrvDrvInitialize \n"));
  //RETAILMSG(1,(TEXT("INIT - Enter MrvDrvInitialize(%xh, %xh)"), (int)MiniportAdapterHandle, (int)WrapperConfigurationContext));
//???dralee-------------------------------------------------------- 
#if 1
#ifdef IF_GSPI
	///crlo:2k60303 - leave this fragment temporally. We will remove it later...
  	///This function will be called twice in the initialization period. Avoid it
	if (isDrvInitialized == TRUE) {
		return NDIS_STATUS_FAILURE;
//	RETAILMSG(1,(TEXT("Exit MrvDrvInitialize(success directly)")));
//		return NDIS_STATUS_SUCCESS;
	}
//	if (isDrvInitialized == FALSE) {
//		isDrvInitialized = TRUE;
//		return NDIS_STATUS_SUCCESS;
//	}
#endif	///IF_GSPI
#else //1
#ifdef IF_GSPI
#if OMAP
    KernelIoControl(IOCTL_GET_WLAN_DRIVER_LOADED, NULL, 0, &bWLANDriverLoaded, sizeof(BOOL), NULL);
    if (FALSE == bWLANDriverLoaded)
    {
        bWLANDriverLoaded = TRUE;
        KernelIoControl(IOCTL_SET_WLAN_DRIVER_LOADED, &bWLANDriverLoaded, sizeof(BOOL), NULL, 0, NULL);
        //NKDbgPrintfW(TEXT("WLAN: First time to load driver \n"));
    }
    else
    {
        //NKDbgPrintfW(TEXT("WLAN: Second time to load driver \n"));
        return NDIS_STATUS_FAILURE;
    }
#endif
	///This function will be called twice in the initialization period. Avoid it
	if (isDrvInitialized == TRUE) {
		return NDIS_STATUS_FAILURE;
	}
#endif	///IF_GSPI
#endif //1
//???---------------------------------------------------------------------
  // Only support medium type 802.3
  for( i = 0; i < MediumArraySize; i++ )
  {
    if( MediumArray[i] == NdisMedium802_3 ) 
      break;
  }

  // If 802.3 is not found, return error
  if (i == MediumArraySize)
  {
        //DEBUGSTR(("802.3 Media type not found.\n"));
    return NDIS_STATUS_UNSUPPORTED_MEDIA;
  }

  // Select medium type 802.3
  *SelectedMediumIndex = i;

  // Allocate adapter handler
  Status = MRVDRV_ALLOC_MEM(&Adapter, sizeof(MRVDRV_ADAPTER));
  if( Status != NDIS_STATUS_SUCCESS )
  {
        DBGPRINT(DBG_ERROR | DBG_LOAD, ("Unable to allocate adapter memory, "
                                        "Status = 0x%x\n", Status));
    return Status;
  }

    // Zero out the adapter object space
    NdisZeroMemory(Adapter, sizeof(MRVDRV_ADAPTER));

    Adapter->MrvDrvAdapterHdl = MiniportAdapterHandle;
    Adapter->MrvDrvWrapperConfigurationContext = WrapperConfigurationContext;
 
#ifdef MRVL_GUI_INTERFACE 
  Adapter->WrapperHandle =  g_NdisWrapperHandle; 
  Adapter->QueryOidByIOCTL = FALSE;;
  Adapter->SetOidByIOCTL = FALSE;
  Adapter->UIPresent = FALSE;
  MrvlRegisterDeviceObj(Adapter);
#endif // MRVL_GUI_INTERFACE

  Adapter->ConfigurationHandle = WrapperConfigurationContext;

  Adapter->ShutDown = FALSE;
  //************************************************************


  //[1]  Assign default adapter object value and allocate buffer
  //************************************************************     
   InitAdapterObject(Adapter);  
   //************************************************************
   //[2] Read configuration from registry
   //************************************************************
    NdisOpenConfiguration(
    &Status,
        &RegHdl,
        WrapperConfigurationContext);

    if (Status != NDIS_STATUS_SUCCESS)
  {
    
        FreeAdapterObject(Adapter);

        return NDIS_STATUS_FAILURE;
    }
  
  Status = ReadRegistryInfo(Adapter, RegHdl);

  if(Status != NDIS_STATUS_SUCCESS )
  {

        FreeAdapterObject(Adapter);
    NdisCloseConfiguration(RegHdl);

    return Status;
  }
    NdisCloseConfiguration(RegHdl);
  ////////////////////////////////////////////////////////////////
  //[3]
	if ( If_Initialize( Adapter, WrapperConfigurationContext ) != NDIS_STATUS_SUCCESS )
    {
        // Only adapter object itself has been created up to this point

    MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));
      DBGPRINT(DBG_LOAD | DBG_ERROR, ("*** SDIOInitialization FAILED! ***\n"));
		RETAILMSG(1,(TEXT("Initialize failed \n")));

    return NDIS_STATUS_FAILURE;      
    }
    // Call NdisMSetAttributesEx to inform NDIS NIC features
  // Set the time-out for unreturned OID to be 10 seconds 
#ifdef MRVL_WINXP_NDIS51
     NdisMSetAttributesEx(
        Adapter->MrvDrvAdapterHdl,
        (NDIS_HANDLE) Adapter,
        MRVL_CHECK_FOR_HANG_TIME,  
    (ULONG)NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK,
        NdisInterfaceInternal); 
#else
    NdisMSetAttributesEx(
        Adapter->MrvDrvAdapterHdl,
        (NDIS_HANDLE) Adapter,
        6,  
    0,
        NdisInterfacePcMcia); 
#endif

  //  Assign default adapter object value and allocate buffer



    InitializeCriticalSection(&Adapter->CmdQueueExeSection);


    // command
  NdisAllocateSpinLock(&Adapter->FreeQSpinLock); 


    

  NdisAllocateSpinLock(&Adapter->RxQueueSpinLock);


    Status = AllocateAdapterBuffer(Adapter);
  if( Status != NDIS_STATUS_SUCCESS )
    return Status;
  // Initialize sync object
  InitSyncObjects(Adapter);
//???dralee------------------------------------------ 
#if 1

#else  //1 
#ifdef IF_GSPI
#if OMAP
    g_nMiniportAdapterContext = Adapter;
	SPI_Initialize();
#endif
#endif
#endif //1
//???-------------------------------------------------
    // SDIO FW Download
    fwStatus = If_FirmwareDownload(Adapter);
    if ( fwStatus != FW_STATUS_INITIALIZED  )
    {
    DBGPRINT(DBG_LOAD, ("Failed to download the firmware\n"));

	    return NDIS_STATUS_FAILURE;
    }
//???dralee------------------------------------------------------------------- 
///#if 1
	IF_BUS_CONFIG;     
///#else //1
/*#ifdef IF_GSPI
	///crlo:if_gspi ++
	///Move to gspi_if.h / sdio.h
    ///g_bWLAN_FW_Downloaded = TRUE;
	g_spi_dummy_clk_reg = 0x01;
	g_spi_dummy_clk_data = 0x01;
	PrepareAndSendCommand(
			Adapter,
			HostCmd_CMD_GSPI_BUS_CONFIG,
			HostCmd_ACT_GEN_SET,
			HostCmd_OPTION_USE_INT,
			(NDIS_OID)0,
			HostCmd_PENDING_ON_NONE,
			0,
			FALSE,
			NULL,
			NULL,
			NULL,
			NULL);
	///crlo:if_gspi --
#endif*/
///#endif //1
//???---------------------------------------------------------------------------

#ifdef MRVL_EXTERNAL_FW_DOWNLOAD
//give a chance for FW download, for debugging only
	///crlo:verdef ++
	MessageBox(NULL, TEXT("Download FW Now"), (TEXT(IFSTRN) TEXT(CHIPSTRN) TEXT("_") TEXT(RFSTRN)), MB_OK); 
	///crlo:verdef --
#endif // #ifdef MRVL_EXTERNAL_FW_DOWNLOAD
//???dralee----------------------------------------
///#if 1
  NdisMSleep(IF_WAITING_FW_BOOTUP);
  ///crlo:if_gspi ++
  ///crlo: move to if_gspi.h
/*
#else  //1
#ifndef IF_GSPI
    NdisMSleep(50000); // Wait long enough
#else
    NdisMSleep(50); // Wait long enough
#endif
#endif //1
*/
	///crlo:if_gspi --
//???---------------------------------------------
  NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
  NdisFillMemory(Adapter->PermanentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);

  PrepareAndSendCommand(
    Adapter, 
    HostCmd_CMD_GET_HW_SPEC, 
    0, 
    HostCmd_OPTION_USE_INT,
    (NDIS_OID)0,
    HostCmd_PENDING_ON_NONE,
    0,
    FALSE,
    NULL,
    NULL,
    NULL,
    NULL);
//???dralee--------------------------------------------  
///#if 1
  NdisMSleep(IF_WAITING_GET_HW_SPEC_READY);
  ///crlo: move to if_gspi.h / if_sdio.h
/*
#else  //1
#ifndef IF_GSPI
  NdisMSleep(2500000);
#else
	NdisMSleep(2500);
#endif
#endif //1
*/
//???--------------------------------------------------
  /// Power-Save
  if ( Adapter->PSMode != 0)
  {
    Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;

  }


  DBGPRINT(DBG_NEWPS, ("Adapter PSMODE = %d\n", Adapter->PSMode));
  
//???dralee-------------------------------------------------------
//#if 1
  // give the interrupt timer a chance to execute
  IF_RELEASE_CPU_TIME;
/*
#else
#ifdef IF_SDIO
    // give the interrupt timer a chance to execute
    NdisMSleep(10000);
#endif // IF_SDIO

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -