1/* 2 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "los_tick.h" 17#include "los_task.h" 18#include "los_config.h" 19#include "los_interrupt.h" 20#include "los_debug.h" 21#include "uart.h" 22 23#ifdef LOSCFG_NET_LWIP 24 25#define IFNAMSIZ IF_NAMESIZE 26#include "lwip/tcpip.h" 27#include "lwip/netif.h" 28#include "lwip/netifapi.h" 29 30#define SLEEP_TIME_MS 60 31#define NETIF_SETUP_OVERTIME 100 32 33void net_init(void) 34{ 35 extern void tcpip_init(tcpip_init_done_fn initfunc, void *arg); 36 extern struct netif *VirtnetInit(void); 37 38 static unsigned int overtime = 0; 39 40 printf("tcpip_init start\n"); 41 tcpip_init(NULL, NULL); 42 printf("tcpip_init end\n"); 43 44 printf("netif init start...\n"); 45 struct netif *pnetif = VirtnetInit(); 46 if (pnetif) { 47 netif_set_default(pnetif); 48 (void)netifapi_netif_set_up(pnetif); 49 do { 50 LOS_UDelay(SLEEP_TIME_MS); 51 overtime++; 52 if (overtime > NETIF_SETUP_OVERTIME) { 53 PRINT_ERR("netif_is_link_up overtime!\n"); 54 break; 55 } 56 } while (netif_is_link_up(pnetif) == 0); 57 if (overtime <= NETIF_SETUP_OVERTIME) { 58 printf("netif init succeed!\n"); 59 } 60 } else { 61 printf("netif init failed!\n"); 62 } 63} 64#endif /* LOSCFG_NET_LWIP */ 65 66UINT32 LosAppInit(VOID); 67 68UINT32 QemuCLZ(UINT32 data) 69{ 70 UINT32 count = 32; /* 32-bit data length */ 71 if (data == 0) { 72 return count; 73 } 74 75 if (data & 0xFFFF0000) { 76 data = data >> 16; /* 16-bit data length */ 77 count -= 16; /* 16-bit data length */ 78 } 79 80 if (data & 0xFF00) { 81 data = data >> 8; /* 8-bit data length */ 82 count -= 8; /* 8-bit data length */ 83 } 84 85 if (data & 0xF0) { 86 data = data >> 4; /* 4-bit data length */ 87 count -= 4; /* 4-bit data length */ 88 } 89 90 if (data & 0x8) { 91 return (count - 4); /* 4-bit data length */ 92 } else if (data & 0x4) { 93 return (count - 3); /* 3-bit data length */ 94 } else if (data & 0x2) { 95 return (count - 2); /* 2-bit data length */ 96 } else if (data & 0x1) { 97 return (count - 1); 98 } 99 100 return 0; 101} 102 103/***************************************************************************** 104 Function : main 105 Description : Main function entry 106 Input : None 107 Output : None 108 Return : None 109 *****************************************************************************/ 110LITE_OS_SEC_TEXT_INIT INT32 main(VOID) 111{ 112 UINT32 ret; 113 114 UartInit(); 115 printf("\n OHOS start \n\r"); 116 117 ret = LOS_KernelInit(); 118 if (ret != LOS_OK) { 119 PRINT_ERR("LiteOS kernel init failed! ERROR: 0x%x\n", ret); 120 goto START_FAILED; 121 } 122 123 HalPlicInit(); 124 125 Uart0RxIrqRegister(); 126 127#if (LOSCFG_USE_SHELL == 1) 128 ret = LosShellInit(); 129 if (ret != LOS_OK) { 130 printf("LosShellInit failed! ERROR: 0x%x\n", ret); 131 } 132#endif 133 134 printf("\nFb init begin...\n"); 135 if (fb_init() != LOS_OK) { 136 PRINT_ERR("Fb init failed!"); 137 } 138 printf("Fb int end\n"); 139 140 printf("\nDeviceManagerStart start ...\n"); 141 if (DeviceManagerStart()) { 142 PRINT_ERR("No drivers need load by hdf manager!"); 143 } 144 printf("DeviceManagerStart end ...\n"); 145 146#ifdef LOSCFG_NET_LWIP 147 net_init(); 148#endif /* LOSCFG_NET_LWIP */ 149 150 SystemAdapterInit(); 151 ret = LosAppInit(); 152 if (ret != LOS_OK) { 153 PRINT_ERR("LosAppInit failed! ERROR: 0x%x\n", ret); 154 } 155 156 LOS_Start(); 157 158START_FAILED: 159 while (1) { 160 __asm volatile("wfi"); 161 } 162} 163 164void *ioremap(uintptr_t paddr, unsigned long size) 165{ 166 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 167 return (void *)paddr; 168} 169 170void iounmap(void *vaddr) 171{ 172 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 173} 174 175int32_t I2cOpen(int16_t number) 176{ 177 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 178 return 0; 179} 180 181int32_t GpioRead(uint16_t gpio, uint16_t *val) 182{ 183 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 184 return 0; 185} 186 187int32_t GpioSetIrq(uint16_t gpio, uint16_t mode, void *func, void *arg) 188{ 189 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 190 return 0; 191} 192 193int32_t GpioSetDir(uint16_t gpio, uint16_t dir) 194{ 195 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 196 return 0; 197} 198 199int32_t GpioEnableIrq(uint16_t gpio) 200{ 201 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 202 return 0; 203} 204 205int32_t GpioDisableIrq(uint16_t gpio) 206{ 207 printf("[WARN] Function to be implemented: %s\n", __FUNCTION__); 208 return 0; 209} 210