#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef CSR_ETHMAC_BASE #include #include #else #include #include #include #endif #include "bridge_ctl.h" #include "kloader.h" #include "flash_storage.h" #include "clock.h" #include "rtiocrg.h" #include "test_mode.h" #include "net_server.h" #include "session.h" #include "analyzer.h" #include "moninj.h" u32_t sys_now(void) { return clock_get_ms(); } u32_t sys_jiffies(void) { return clock_get_ms(); } static struct netif netif; #ifndef CSR_ETHMAC_BASE static ppp_pcb *ppp; #endif static void lwip_service(void) { sys_check_timeouts(); #ifdef CSR_ETHMAC_BASE if(ethmac_sram_writer_ev_pending_read() & ETHMAC_EV_SRAM_WRITER) { liteeth_input(&netif); ethmac_sram_writer_ev_pending_write(ETHMAC_EV_SRAM_WRITER); } #else if(uart_read_nonblock()) { u8_t c; c = uart_read(); pppos_input(ppp, &c, 1); } #endif } #ifdef CSR_ETHMAC_BASE unsigned char macadr[6]; static int hex2nib(int c) { if((c >= '0') && (c <= '9')) return c - '0'; if((c >= 'a') && (c <= 'f')) return c - 'a' + 10; if((c >= 'A') && (c <= 'F')) return c - 'A' + 10; return -1; } static void init_macadr(void) { static const unsigned char default_macadr[6] = {0x10, 0xe2, 0xd5, 0x32, 0x50, 0x00}; #if (defined CSR_SPIFLASH_BASE && defined CONFIG_SPIFLASH_PAGE_SIZE) char b[32]; char fs_macadr[6]; int i, r, s; #endif memcpy(macadr, default_macadr, 6); #if (defined CSR_SPIFLASH_BASE && defined CONFIG_SPIFLASH_PAGE_SIZE) r = fs_read("mac", b, sizeof(b) - 1, NULL); if(r <= 0) return; b[r] = 0; for(i=0;i<6;i++) { r = hex2nib(b[3*i]); s = hex2nib(b[3*i + 1]); if((r < 0) || (s < 0)) return; fs_macadr[i] = (r << 4) | s; } for(i=0;i<5;i++) if(b[3*i + 2] != ':') return; memcpy(macadr, fs_macadr, 6); #endif } static void fsip_or_default(struct ip4_addr *d, char *key, int i1, int i2, int i3, int i4) { int r; #if (defined CSR_SPIFLASH_BASE && defined CONFIG_SPIFLASH_PAGE_SIZE) char cp[32]; #endif IP4_ADDR(d, i1, i2, i3, i4); #if (defined CSR_SPIFLASH_BASE && defined CONFIG_SPIFLASH_PAGE_SIZE) r = fs_read(key, cp, sizeof(cp) - 1, NULL); if(r <= 0) return; cp[r] = 0; if(!ip4addr_aton(cp, d)) return; #endif } static void network_init(void) { struct ip4_addr local_ip; struct ip4_addr netmask; struct ip4_addr gateway_ip; init_macadr(); fsip_or_default(&local_ip, "ip", 192, 168, 1, 50); fsip_or_default(&netmask, "netmask", 255, 255, 255, 0); fsip_or_default(&gateway_ip, "gateway", 192, 168, 1, 1); lwip_init(); netif_add(&netif, &local_ip, &netmask, &gateway_ip, 0, liteeth_init, ethernet_input); netif_set_default(&netif); netif_set_up(&netif); netif_set_link_up(&netif); } #else /* CSR_ETHMAC_BASE */ static int ppp_connected; static void ppp_status_cb(ppp_pcb *pcb, int err_code, void *ctx) { if (err_code == PPPERR_NONE) { ppp_connected = 1; return; } else if (err_code == PPPERR_USER) { return; } else { ppp_connect(pcb, 1); } } u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len) { int i; for(i=0;i