int rt_wlan_init(void) { rt_int32_t value=0; rt_err_t error=RT_EOK; /* * SRAM Tx/Rx pointer automatically return to start address, * Packet Transmitted, Packet Received */ wlan_eth.parent.parent.init = rt_wlan_dev_init; wlan_eth.parent.parent.open = rt_wlan_dev_open; wlan_eth.parent.parent.close = rt_wlan_dev_close; wlan_eth.parent.parent.read = rt_wlan_dev_read; wlan_eth.parent.parent.write = rt_wlan_dev_write; wlan_eth.parent.parent.control = rt_wlan_dev_control; wlan_eth.parent.parent.user_data =(void *)&wlan_eth ; wlan_eth.parent.eth_rx = rt_wlan_dev_rx; wlan_eth.parent.eth_tx = rt_wlan_dev_tx; if (WlanInitPhase1(&wlan_eth) == 0) { WlanInitPhase2(); WlanInitPhase3(); eth_device_init(&(wlan_eth.parent), "w0"); } done: return error; }
rt_err_t mrvl_wlan_hw_init(const char* spi_device) { rt_int32_t value=0; rt_err_t error=RT_EOK; struct rt_device* device; struct eth_device* eth; struct rt_wlan_device* wlan; device = (struct rt_device*)&wlan_eth; eth = (struct eth_device*)&wlan_eth; wlan = (struct rt_wlan_device*)&wlan_eth; /* set the RT-Thread common device interface */ device->init = mrvl_wlan_init; device->open = mrvl_wlan_open; device->close = mrvl_wlan_close; device->read = RT_NULL; device->write = mrvl_wlan_write; device->control = mrvl_wlan_control; device->user_data =(void *)&wlan_eth ; /* set ethernet network interface */ eth->eth_tx = mrvl_wlan_tx; eth->eth_rx = mrvl_wlan_rx; wlan->status = WLAN_STATUS_IDLE; /* try to initialize wlan card */ if (WlanInitPhase1(&wlan_eth, spi_device) == 0) { WlanInitPhase2(); WlanInitPhase3(); /* initialize wlan device */ rt_wlan_device_init(wlan, &_mrvl_wlan_ops, "w0"); } return error; }