помогите с драйвером

вот начинается выполнение.

int rtw_os_ndev_init(_adapter *adapter, const char *name)
{
        int ret = _FAIL;

        if (rtw_os_ndev_alloc(adapter) != _SUCCESS)
                goto exit;

        if (rtw_os_ndev_register(adapter, name) != _SUCCESS)
                goto os_ndev_free;

        ret = _SUCCESS;

os_ndev_free:
        if (ret != _SUCCESS)
                rtw_os_ndev_free(adapter);
exit:
        return ret;
}

rtw_os_ndev_alloc(adapter) отрабатывает нормально. а в rtw_os_ndev_register ошибка.

int rtw_os_ndev_register(_adapter *adapter, const char *name)
{
        struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
        int ret = _SUCCESS;
        struct net_device *ndev = adapter->pnetdev;
        u8 rtnl_lock_needed = rtw_rtnl_lock_needed(dvobj);

#ifdef CONFIG_RTW_NAPI
        netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT);
#endif /* CONFIG_RTW_NAPI */

#if defined(CONFIG_IOCTL_CFG80211)
        if (rtw_cfg80211_ndev_res_register(adapter) != _SUCCESS) {
                rtw_warn_on(1);
                ret = _FAIL;
                goto exit;
        }
#endif

        /* alloc netdev name */
        rtw_init_netdev_name(ndev, name);

        _rtw_memcpy(ndev->dev_addr, adapter_mac_addr(adapter), ETH_ALEN);

        /* Tell the network stack we exist */

        if (rtnl_lock_needed)
                ret = (register_netdev(ndev) == 0) ? _SUCCESS : _FAIL;
        else
                ret = (register_netdevice(ndev) == 0) ? _SUCCESS : _FAIL;

        if (ret == _SUCCESS)
                adapter->registered = 1;
        else
                RTW_INFO(FUNC_NDEV_FMT" if%d Failed!\n", FUNC_NDEV_ARG(ndev), (adapter->iface_id + 1));

#if defined(CONFIG_IOCTL_CFG80211)
        if (ret != _SUCCESS) {
                rtw_cfg80211_ndev_res_unregister(adapter);
                #if !defined(RTW_SINGLE_WIPHY)
                rtw_wiphy_unregister(adapter_to_wiphy(adapter));
                #endif
        }
#endif

exit:
#ifdef CONFIG_RTW_NAPI
        if (ret != _SUCCESS)
                netif_napi_del(&adapter->napi);
#endif /* CONFIG_RTW_NAPI */

        return ret;
}

ошибка в rtw_cfg80211_ndev_res_register(adapter).

int rtw_cfg80211_ndev_res_register(_adapter *adapter)
{
        int ret = _FAIL;

#if !defined(RTW_SINGLE_WIPHY)
        if (rtw_wiphy_register(adapter_to_wiphy(adapter)) < 0) {
                RTW_INFO("%s rtw_wiphy_register fail for if%d\n", __func__, (adapter->iface_id + 1));
                goto exit;
        }

#ifdef CONFIG_RFKILL_POLL
        rtw_cfg80211_init_rfkill(adapter_to_wiphy(adapter));
#endif
#endif

        ret = _SUCCESS;

exit:
        return ret;
}

ошибка в rtw_wiphy_register(adapter_to_wiphy(adapter)).

int rtw_wiphy_register(struct wiphy *wiphy)
{
        RTW_INFO(FUNC_WIPHY_FMT"\n", FUNC_WIPHY_ARG(wiphy));

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(RTW_VENDOR_EXT_SUPPORT)
        rtw_cfgvendor_attach(wiphy);
#endif

        return wiphy_register(wiphy);
}

ошибка в wiphy_register. но почему? здесь я код не менял, как узнать в чем ошибка?


Ответы (0 шт):