void mbed_eth_hardware_init(void) { /* Configure and start the timer. Timer 0 will be used for timestamping */ rflpc_timer_enable(RFLPC_TIMER0); /* Clock the timer with the slower clock possible. Enough for millisecond precision */ rflpc_timer_set_clock(RFLPC_TIMER0, RFLPC_CCLK_8); /* Set the pre scale register so that timer counter is incremented every 1ms */ rflpc_timer_set_pre_scale_register(RFLPC_TIMER0, rflpc_clock_get_system_clock() / 8000); /* Start the timer */ rflpc_timer_start(RFLPC_TIMER0); /* Init the GDMA */ rflpc_dma_init(); /* Init output buffers */ mbed_eth_init_tx_buffers(); printf(" ##### # # ###### ####### ######\r\n"); printf("# # # # ###### # # #### ## ## # # # # #\r\n"); printf("# ## ## # # # # # # # # # # # # #\r\n"); printf(" ##### # ## # ##### # # #### # # # ###### ##### # #\r\n"); printf(" # # # # # ## # # # # # # # # #\r\n"); printf("# # # # # ## ## # # # # # # # # #\r\n"); printf(" ##### # # ###### # # #### # # ###### ####### ######\r\n"); printf("\r\n"); printf(".data size: %d\r\n", &_data_end - &_data_start); printf(".bss size: %d\r\n", &_bss_end - &_bss_start); printf(".stack size: %d\r\n", RFLPC_STACK_SIZE); printf("Total: %d\r\n", (&_data_end - &_data_start) + (&_bss_end - &_bss_start) + RFLPC_STACK_SIZE); /* Set the MAC addr from the local ip */ /* @todo: use hardware ID chip from MBED */ local_eth_addr.addr[0] = 2; local_eth_addr.addr[1] = 3; local_eth_addr.addr[2] = local_ip_addr[3]; local_eth_addr.addr[3] = local_ip_addr[2]; local_eth_addr.addr[4] = local_ip_addr[1]; local_eth_addr.addr[5] = local_ip_addr[0]; printf("ETH Init..."); rflpc_eth_init(); rflpc_eth_set_mac_address(local_eth_addr.addr); _init_buffers(); while (!rflpc_eth_link_state()); printf(" done! Link is up\r\n"); printf("My MAC: %02x:%02x:%02x:%02x:%02x:%02x\r\n", local_eth_addr.addr[0], local_eth_addr.addr[1], local_eth_addr.addr[2], local_eth_addr.addr[3], local_eth_addr.addr[4], local_eth_addr.addr[5]); printf("My ip: %d.%d.%d.%d\r\n", local_ip_addr[3], local_ip_addr[2], local_ip_addr[1], local_ip_addr[0]); printf("Starting system takes %d ms\r\n", rflpc_timer_get_counter(RFLPC_TIMER0)); mbed_console_prompt(); rflpc_uart0_set_rx_callback(_uart_irq); }
knet_handle_t knet_handle_new(uint16_t host_id, int log_fd, uint8_t default_log_level) { knet_handle_t knet_h; int savederrno = 0; /* * validate incoming request */ if ((log_fd > 0) && (default_log_level > KNET_LOG_DEBUG)) { errno = EINVAL; return NULL; } /* * allocate handle */ knet_h = malloc(sizeof(struct knet_handle)); if (!knet_h) { errno = ENOMEM; return NULL; } memset(knet_h, 0, sizeof(struct knet_handle)); /* * copy config in place */ knet_h->host_id = host_id; knet_h->logfd = log_fd; if (knet_h->logfd > 0) { memset(&knet_h->log_levels, default_log_level, KNET_MAX_SUBSYSTEMS); } /* * set pmtud default timers */ knet_h->pmtud_interval = KNET_PMTUD_DEFAULT_INTERVAL; /* * init main locking structures */ if (_init_locks(knet_h)) { savederrno = errno; goto exit_fail; } /* * init sockets */ if (_init_socks(knet_h)) { savederrno = errno; goto exit_fail; } /* * allocate packet buffers */ if (_init_buffers(knet_h)) { savederrno = errno; goto exit_fail; } /* * create epoll fds */ if (_init_epolls(knet_h)) { savederrno = errno; goto exit_fail; } /* * start internal threads */ if (_start_threads(knet_h)) { savederrno = errno; goto exit_fail; } return knet_h; exit_fail: knet_handle_free(knet_h); errno = savederrno; return NULL; }