Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/net/wireless/quantenna/qtnfmac/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  util.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0+
/* Copyright (c) 2015-2016 Quantenna Communications. All rights reserved. */

#include "util.h"
#include "qtn_hw_ids.h"

void qtnf_sta_list_init(struct qtnf_sta_list *list)
{
 if (unlikely(!list))
  return;

 INIT_LIST_HEAD(&list->head);
 atomic_set(&list->size, 0);
}

struct qtnf_sta_node *qtnf_sta_list_lookup(struct qtnf_sta_list *list,
        const u8 *mac)
{
 struct qtnf_sta_node *node;

 if (unlikely(!mac))
  return NULL;

 list_for_each_entry(node, &list->head, list) {
  if (ether_addr_equal(node->mac_addr, mac))
   return node;
 }

 return NULL;
}

struct qtnf_sta_node *qtnf_sta_list_lookup_index(struct qtnf_sta_list *list,
       size_t index)
{
 struct qtnf_sta_node *node;

 if (qtnf_sta_list_size(list) <= index)
  return NULL;

 list_for_each_entry(node, &list->head, list) {
  if (index-- == 0)
   return node;
 }

 return NULL;
}

struct qtnf_sta_node *qtnf_sta_list_add(struct qtnf_vif *vif,
     const u8 *mac)
{
 struct qtnf_sta_list *list = &vif->sta_list;
 struct qtnf_sta_node *node;

 if (unlikely(!mac))
  return NULL;

 node = qtnf_sta_list_lookup(list, mac);

 if (node)
  goto done;

 node = kzalloc(sizeof(*node), GFP_KERNEL);
 if (unlikely(!node))
  goto done;

 ether_addr_copy(node->mac_addr, mac);
 list_add_tail(&node->list, &list->head);
 atomic_inc(&list->size);
 ++vif->generation;

done:
 return node;
}

bool qtnf_sta_list_del(struct qtnf_vif *vif, const u8 *mac)
{
 struct qtnf_sta_list *list = &vif->sta_list;
 struct qtnf_sta_node *node;
 bool ret = false;

 node = qtnf_sta_list_lookup(list, mac);

 if (node) {
  list_del(&node->list);
  atomic_dec(&list->size);
  kfree(node);
  ++vif->generation;
  ret = true;
 }

 return ret;
}

void qtnf_sta_list_free(struct qtnf_sta_list *list)
{
 struct qtnf_sta_node *node, *tmp;

 atomic_set(&list->size, 0);

 list_for_each_entry_safe(node, tmp, &list->head, list) {
  list_del(&node->list);
  kfree(node);
 }

 INIT_LIST_HEAD(&list->head);
}

const char *qtnf_chipid_to_string(unsigned long chip_id)
{
 switch (chip_id) {
 case QTN_CHIP_ID_TOPAZ:
  return "Topaz";
 case QTN_CHIP_ID_PEARL:
  return "Pearl revA";
 case QTN_CHIP_ID_PEARL_B:
  return "Pearl revB";
 case QTN_CHIP_ID_PEARL_C:
  return "Pearl revC";
 default:
  return "unknown";
 }
}
EXPORT_SYMBOL_GPL(qtnf_chipid_to_string);

Messung V0.5
C=99 H=94 G=96

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.