Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


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.14 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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge