struct p2p_sd_query * p2p_pending_sd_req(struct p2p_data *p2p, struct p2p_device *dev) { struct p2p_sd_query *q; int wsd = 0; if (!(dev->info.dev_capab & P2P_DEV_CAPAB_SERVICE_DISCOVERY)) return NULL; /* peer does not support SD */ #ifdef CONFIG_WIFI_DISPLAY if (wfd_wsd_supported(dev->info.wfd_subelems)) wsd = 1; #endif /* CONFIG_WIFI_DISPLAY */ for (q = p2p->sd_queries; q; q = q->next) { /* Use WSD only if the peer indicates support or it */ if (q->wsd && !wsd) continue; if (q->for_all_peers && !(dev->flags & P2P_DEV_SD_INFO)) return q; if (!q->for_all_peers && os_memcmp(q->peer, dev->info.p2p_device_addr, ETH_ALEN) == 0) return q; } return NULL; }
struct p2p_sd_query * p2p_pending_sd_req(struct p2p_data *p2p, struct p2p_device *dev) { struct p2p_sd_query *q; int wsd = 0; int count = 0; if (!(dev->info.dev_capab & P2P_DEV_CAPAB_SERVICE_DISCOVERY)) return NULL; /* peer does not support SD */ #ifdef CONFIG_WIFI_DISPLAY if (wfd_wsd_supported(dev->info.wfd_subelems)) wsd = 1; #endif /* CONFIG_WIFI_DISPLAY */ for (q = p2p->sd_queries; q; q = q->next) { /* Use WSD only if the peer indicates support or it */ if (q->wsd && !wsd) continue; /* if the query is a broadcast query */ if (q->for_all_peers) { /* * check if there are any broadcast queries pending for * this device */ if (dev->sd_pending_bcast_queries <= 0) return NULL; /* query number that needs to be send to the device */ if (count == dev->sd_pending_bcast_queries - 1) goto found; count++; } if (!q->for_all_peers && os_memcmp(q->peer, dev->info.p2p_device_addr, ETH_ALEN) == 0) goto found; } return NULL; found: if (dev->sd_reqs > 100) { p2p_dbg(p2p, "Too many SD request attempts to " MACSTR " - skip remaining queries", MAC2STR(dev->info.p2p_device_addr)); return NULL; } return q; }
struct p2p_sd_query * p2p_pending_sd_req(struct p2p_data *p2p, struct p2p_device *dev) { struct p2p_sd_query *q; int wsd = 0; int count = 0; if (!(dev->info.dev_capab & P2P_DEV_CAPAB_SERVICE_DISCOVERY)) return NULL; /* peer does not support SD */ #ifdef CONFIG_WIFI_DISPLAY if (wfd_wsd_supported(dev->info.wfd_subelems)) wsd = 1; #endif /* CONFIG_WIFI_DISPLAY */ for (q = p2p->sd_queries; q; q = q->next) { /* Use WSD only if the peer indicates support or it */ if (q->wsd && !wsd) continue; /* if the query is a broadcast query */ #ifdef CONFIG_MTK_P2P if (q->for_all_peers && !(dev->flags & P2P_DEV_SD_INFO)) return q; #endif if (q->for_all_peers) { /* * check if there are any broadcast queries pending for * this device */ if (dev->sd_pending_bcast_queries <= 0) return NULL; /* query number that needs to be send to the device */ if (count == dev->sd_pending_bcast_queries - 1) return q; count++; } if (!q->for_all_peers && os_memcmp(q->peer, dev->info.p2p_device_addr, ETH_ALEN) == 0) return q; } return NULL; }