Search Linux Wireless

Re: [PATCH v4] qtnfmac: announcement of new FullMAC driver for Quantenna chipsets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Two more comments. Please note I don't find these things critical, this would be
fine to fix them in incremental patch for me.

On 01/09/2017 10:07 AM, igor.mitsyanko.os@xxxxxxxxxxxxx wrote:
> +static int qtnf_core_mac_init(struct qtnf_bus *bus, int macid)
> +{
> +	struct qtnf_wmac *mac;
> +	struct qtnf_vif *vif;
> +
> +	pr_debug("starting mac(%d) init\n", macid);
> +
> +	if (!(bus->hw_info.mac_bitmap & BIT(macid))) {
> +		pr_info("mac(%d) is not available for host operations\n",
> +			macid);
> +		return 0;
> +	}
> +
> +	mac = qtnf_mac_init(bus, macid);
> +	if (!mac) {
> +		pr_err("failed to initialize mac(%d)\n", macid);
> +		return -1;
> +	}
> +
> +	if (qtnf_cmd_get_mac_info(mac)) {
> +		pr_err("failed to get mac(%d) info\n", macid);
> +		return -1;
> +	}
> +
> +	vif = qtnf_get_base_vif(mac);
> +	if (!vif) {
> +		pr_err("could not get valid vif pointer\n");
> +		return -1;
> +	}
> +
> +	if (qtnf_cmd_send_add_intf(vif, NL80211_IFTYPE_AP, vif->mac_addr)) {
> +		pr_err("could not add primary vif for mac(%d)\n", macid);
> +		return -1;
> +	}
> +
> +	if (qtnf_cmd_send_get_phy_params(mac)) {
> +		pr_err("could not get phy thresholds for mac(%d)\n", macid);
> +		return -1;
> +	}
> +
> +	if (qtnf_mac_init_bands(mac)) {
> +		pr_err("could not get channel info for mac(%d)\n", macid);
> +		return -1;
> +	}
> +
> +	if (qtnf_register_wiphy(bus, mac)) {
> +		pr_err("wiphy registration failed for mac(%d)\n", macid);
> +		return -1;
> +	}
> +
> +	mac->wiphy_registered = 1;
> +
> +	/* add primary networking interface */
> +	rtnl_lock();
> +	if (qtnf_net_attach(mac, vif, "wlan%d", NET_NAME_ENUM,
> +			    NL80211_IFTYPE_AP)) {
> +		pr_err("could not attach primary interface for mac(%d)\n",
> +		       macid);
> +		vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
> +		vif->netdev = NULL;
> +		rtnl_unlock();
> +		return -1;
> +	}
> +	rtnl_unlock();
> +
> +	return 0;
> +}

You could have more original error codes in qtnf_core_mac_init ;)


> (...)
> +void qtnf_core_detach(struct qtnf_bus *bus)
> +{
> +	struct wiphy *wiphy;
> +	struct qtnf_wmac *mac;
> +	struct qtnf_vif *vif;
> +	int i, cnt;
> +	enum nl80211_band band;
> +
> +	for (cnt = 0; cnt < QTNF_MAX_MAC; cnt++) {
> +		mac = bus->mac[cnt];
> +
> +		if (!mac || !mac->mac_started)
> +			continue;

I think I'd put all following cfg80211 code in cfg80211.c. This would match
qtnf_register_wiphy you have in that file.

> +		wiphy = priv_to_wiphy(mac);
> +
> +		for (i = 0; i < QTNF_MAX_INTF; i++) {
> +			vif = &mac->iflist[i];
> +			rtnl_lock();
> +			if (vif->netdev &&
> +			    vif->wdev.iftype != NL80211_IFTYPE_UNSPECIFIED) {
> +				qtnf_virtual_intf_cleanup(vif->netdev);
> +				qtnf_del_virtual_intf(wiphy, &vif->wdev);
> +			}
> +			rtnl_unlock();
> +			qtnf_sta_list_free(&vif->sta_list);
> +		}
> +
> +		if (mac->wiphy_registered)
> +			wiphy_unregister(wiphy);
> +
> +		for (band = NL80211_BAND_2GHZ;
> +		     band < NUM_NL80211_BANDS; ++band) {
> +			if (!wiphy->bands[band])
> +				continue;
> +
> +			kfree(wiphy->bands[band]->channels);
> +			wiphy->bands[band]->n_channels = 0;
> +
> +			kfree(wiphy->bands[band]);
> +			wiphy->bands[band] = NULL;
> +		}
> +
> +		kfree(mac->macinfo.limits);
> +		kfree(wiphy->iface_combinations);
> +		wiphy_free(wiphy);
> +		bus->mac[cnt] = NULL;
> +	}
> +
> +	if (bus->workqueue) {
> +		flush_workqueue(bus->workqueue);
> +		destroy_workqueue(bus->workqueue);
> +	}
> +
> +	qtnf_trans_free(bus);
> +}
> +EXPORT_SYMBOL_GPL(qtnf_core_detach);



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux