static int xge_get_resources(struct xge_pdata *pdata) { struct platform_device *pdev; struct net_device *ndev; int phy_mode, ret = 0; struct resource *res; struct device *dev; pdev = pdata->pdev; dev = &pdev->dev; ndev = pdata->ndev; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(dev, "Resource enet_csr not defined\n"); return -ENODEV; } pdata->resources.base_addr = devm_ioremap(dev, res->start, resource_size(res)); if (!pdata->resources.base_addr) { dev_err(dev, "Unable to retrieve ENET Port CSR region\n"); return -ENOMEM; } if (!device_get_mac_address(dev, ndev->dev_addr, ETH_ALEN)) eth_hw_addr_random(ndev); memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len); phy_mode = device_get_phy_mode(dev); if (phy_mode < 0) { dev_err(dev, "Unable to get phy-connection-type\n"); return phy_mode; } pdata->resources.phy_mode = phy_mode; if (pdata->resources.phy_mode != PHY_INTERFACE_MODE_RGMII) { dev_err(dev, "Incorrect phy-connection-type specified\n"); return -ENODEV; } ret = platform_get_irq(pdev, 0); if (ret < 0) { dev_err(dev, "Unable to get irq\n"); return ret; } pdata->resources.irq = ret; return 0; }
int init_device(struct v7 *v7) { int result = 1; uint8_t mac[6] = ""; /* Load system defaults - mandatory */ memset(&s_cfg, 0, sizeof(s_cfg)); if (!load_config_defaults(&s_cfg)) { LOG(LL_ERROR, ("Failed to load config defaults")); return 0; } #ifndef SJ_DISABLE_GPIO /* * Check factory reset GPIO. We intentionally do it before loading CONF_FILE * so that it cannot be overridden by the end user. */ if (s_cfg.debug.factory_reset_gpio >= 0) { int gpio = s_cfg.debug.factory_reset_gpio; sj_gpio_set_mode(gpio, GPIO_MODE_INPUT, GPIO_PULL_PULLUP); if (sj_gpio_read(gpio) == GPIO_LEVEL_LOW) { LOG(LL_WARN, ("Factory reset requested via GPIO%d", gpio)); if (remove(CONF_FILE) == 0) { LOG(LL_WARN, ("Removed %s", CONF_FILE)); } /* Continue as if nothing happened, no reboot necessary. */ } } #endif /* Successfully loaded system config. Try overrides - they are optional. */ load_config_file(CONF_FILE, s_cfg.conf_acl, 0, &s_cfg); REGISTER_RO_VAR(fw_id, &build_id); REGISTER_RO_VAR(fw_timestamp, &build_timestamp); REGISTER_RO_VAR(fw_version, &build_version); REGISTER_RO_VAR(arch, &s_architecture); /* Init mac address readonly var - users may use it as device ID */ device_get_mac_address(mac); snprintf(s_mac_address, sizeof(s_mac_address), "%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); REGISTER_RO_VAR(mac_address, &mac_address_ptr); LOG(LL_INFO, ("MAC: %s", s_mac_address)); if (get_cfg()->wifi.ap.ssid != NULL) { expand_mac_address_placeholders((char *) get_cfg()->wifi.ap.ssid); } result = device_init_platform(v7, get_cfg()); if (result != 0) { if (get_cfg()->http.enable) { result = init_web_server(get_cfg()); } } else { LOG(LL_ERROR, ("Platform init failed")); } #ifndef CS_DISABLE_JS /* NOTE(lsm): must be done last */ export_read_only_vars_to_v7(v7); #endif return result; }