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


Quelle  connection.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Greybus connections
 *
 * Copyright 2014 Google Inc.
 * Copyright 2014 Linaro Ltd.
 */


#ifndef __CONNECTION_H
#define __CONNECTION_H

#include <linux/bits.h>
#include <linux/list.h>
#include <linux/kfifo.h>
#include <linux/kref.h>
#include <linux/workqueue.h>

#define GB_CONNECTION_FLAG_CSD  BIT(0)
#define GB_CONNECTION_FLAG_NO_FLOWCTRL BIT(1)
#define GB_CONNECTION_FLAG_OFFLOADED BIT(2)
#define GB_CONNECTION_FLAG_CDSI1 BIT(3)
#define GB_CONNECTION_FLAG_CONTROL BIT(4)
#define GB_CONNECTION_FLAG_HIGH_PRIO BIT(5)

#define GB_CONNECTION_FLAG_CORE_MASK GB_CONNECTION_FLAG_CONTROL

enum gb_connection_state {
 GB_CONNECTION_STATE_DISABLED  = 0,
 GB_CONNECTION_STATE_ENABLED_TX  = 1,
 GB_CONNECTION_STATE_ENABLED  = 2,
 GB_CONNECTION_STATE_DISCONNECTING = 3,
};

struct gb_operation;

typedef int (*gb_request_handler_t)(struct gb_operation *);

struct gb_connection {
 struct gb_host_device  *hd;
 struct gb_interface  *intf;
 struct gb_bundle  *bundle;
 struct kref   kref;
 u16    hd_cport_id;
 u16    intf_cport_id;

 struct list_head  hd_links;
 struct list_head  bundle_links;

 gb_request_handler_t  handler;
 unsigned long   flags;

 struct mutex   mutex;
 spinlock_t   lock;
 enum gb_connection_state state;
 struct list_head  operations;

 char    name[16];
 struct workqueue_struct  *wq;

 atomic_t   op_cycle;

 void    *private;

 bool    mode_switch;
};

struct gb_connection *gb_connection_create_static(struct gb_host_device *hd,
    u16 hd_cport_id, gb_request_handler_t handler);
struct gb_connection *gb_connection_create_control(struct gb_interface *intf);
struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
    u16 cport_id, gb_request_handler_t handler);
struct gb_connection *gb_connection_create_flags(struct gb_bundle *bundle,
    u16 cport_id, gb_request_handler_t handler,
    unsigned long flags);
struct gb_connection *gb_connection_create_offloaded(struct gb_bundle *bundle,
    u16 cport_id, unsigned long flags);
void gb_connection_destroy(struct gb_connection *connection);

static inline bool gb_connection_is_static(struct gb_connection *connection)
{
 return !connection->intf;
}

int gb_connection_enable(struct gb_connection *connection);
int gb_connection_enable_tx(struct gb_connection *connection);
void gb_connection_disable_rx(struct gb_connection *connection);
void gb_connection_disable(struct gb_connection *connection);
void gb_connection_disable_forced(struct gb_connection *connection);

void gb_connection_mode_switch_prepare(struct gb_connection *connection);
void gb_connection_mode_switch_complete(struct gb_connection *connection);

void greybus_data_rcvd(struct gb_host_device *hd, u16 cport_id,
         u8 *data, size_t length);

void gb_connection_latency_tag_enable(struct gb_connection *connection);
void gb_connection_latency_tag_disable(struct gb_connection *connection);

static inline bool gb_connection_e2efc_enabled(struct gb_connection *connection)
{
 return !(connection->flags & GB_CONNECTION_FLAG_CSD);
}

static inline bool
gb_connection_flow_control_disabled(struct gb_connection *connection)
{
 return connection->flags & GB_CONNECTION_FLAG_NO_FLOWCTRL;
}

static inline bool gb_connection_is_offloaded(struct gb_connection *connection)
{
 return connection->flags & GB_CONNECTION_FLAG_OFFLOADED;
}

static inline bool gb_connection_is_control(struct gb_connection *connection)
{
 return connection->flags & GB_CONNECTION_FLAG_CONTROL;
}

static inline void *gb_connection_get_data(struct gb_connection *connection)
{
 return connection->private;
}

static inline void gb_connection_set_data(struct gb_connection *connection,
       void *data)
{
 connection->private = data;
}

#endif /* __CONNECTION_H */

Messung V0.5
C=98 H=100 G=98

¤ Dauer der Verarbeitung: 0.0 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