/* Ideally this would be generic, but different platforms have varying manners of handling gpio * numbers / banks etc. Nvidia uses A-F, ST uses # and ports, Xilinx uses #s and banks. Etc. */ static int cmd_gpio(int argc, const cmd_args *argv) { if (argc == 4 && !strcmp(argv[1].str,"set")) { unsigned int gpio = argv[2].u; unsigned int value = argv[3].u; gpio_set(gpio, value); } else if (argc == 3 && !strcmp(argv[1].str,"get")) { unsigned int gpio = argv[2].u; printf("gpio %u: %d\n", gpio, gpio_get(gpio)); } else if (argc >= 3 && !strcmp(argv[1].str,"cfg")) { unsigned int gpio = argv[2].u; unsigned int flags = 0; for (int i = 3; i < argc; i++) { flags |= get_flag_value(argv[i].str); } gpio_config(gpio, flags); } else { printf("gpio set <gpio #> <value>\n"); printf("gpio get <gpio #>\n"); printf("gpio cfg <gpio #> [flags: "); for (unsigned int i = 0; i < countof(gpio_flag_labels); i++) { printf("%s ", gpio_flag_labels[i].label); } putchar(']'); putchar('\n'); } return 0; }
static int ulinker_check_cdc_rndis_status(void) { int ret = 1; bdbg_rndis_check(stderr, "\n[%s] checking...\n", __FUNC__, ret); ret = get_flag_value(ULINKER_CDC_RNDIS_STATUS_FLAG); bdbg_rndis_check(stderr, "[%s] rndis status[%d]\n", __FUNC__, ret); return ret; }
static int ulinker_get_decided_mode() { int mode; int auto_wan; apmib_get(MIB_ULINKER_AUTO, (void *)&auto_wan); if (auto_wan == 1) mode = get_flag_value(ULINKER_MODE_FLAG); else { #if 0 int op_mode, wan_mode, dhcp_mode, wlan_mode; apmib_get(MIB_OP_MODE, (void *)&op_mode); apmib_get(MIB_WAN_DHCP, (void *)&wan_mode); apmib_get(MIB_DHCP, (void *)&dhcp_mode); apmib_get(MIB_WLAN_MODE, (void *)&wlan_mode); if (op_mode == 0) { mode = ULINKER_RT_DHCP_MODE: mode = ULINKER_RT_PPPOE_MODE: } else if (op_mode == 1) {
static int dhcps_discover(int val) { int dhcps_exist = 0; int round = val; int mode; int ping_ok; int op_ori, wan_ori, dhcp_ori, wlan_ori; int op_mode, wan_mode, dhcp_mode, wlan_mode; bdbg_dhcps_discover(stderr, "\n[%s] dhcp server discovering...\n", __FUNC__); system("brctl delif br0 eth1 >/dev/null 2>&1"); /* backup current mode */ apmib_get(MIB_OP_MODE, (void *)&op_ori); apmib_get(MIB_WAN_DHCP, (void *)&wan_ori); apmib_get(MIB_DHCP, (void *)&dhcp_ori); apmib_get(MIB_WLAN_MODE, (void *)&wlan_ori); /* set dut to gateway mode for execute dhcp server discover*/ op_mode = GATEWAY_MODE; wan_mode = DHCP_CLIENT; dhcp_mode = DHCP_SERVER; wlan_mode = AP_MODE; apmib_set(MIB_OP_MODE, (void *)&op_mode); apmib_set(MIB_WAN_DHCP, (void *)&wan_mode); apmib_set(MIB_DHCP, (void *)&dhcp_mode); apmib_set(MIB_WLAN_MODE, (void *)&wlan_mode); clean_dhcps_discover(); set_eth1_mac(); eth1_up(); while (round > 0) { stop_dhcpc(); system("udhcpc -d 2 -i eth1 -p /etc/udhcpc/udhcpc-eth1.pid -s /usr/share/udhcpc/br0.bound >/dev/null 2>&1"); dhcps_exist = get_flag_value(ULINKER_DHCPS_DISCOVER_FLAG); round--; if (dhcps_exist == 3) { dhcps_exist = 1; break; } else { dhcps_exist = 0; } } /* restore mode */ apmib_set(MIB_OP_MODE, (void *)&op_ori); apmib_set(MIB_WAN_DHCP, (void *)&wan_ori); apmib_set(MIB_DHCP, (void *)&dhcp_ori); apmib_set(MIB_WLAN_MODE, (void *)&wlan_ori); stop_dhcpc(); //eth1_down(); clean_dhcps_discover(); bdbg_dhcps_discover(stderr, "[%s] dhcp server result[%d]\n", __FUNC__, dhcps_exist); return dhcps_exist; }