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


Quelle  vnic_devcmd.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright 2014 Cisco Systems, Inc.  All rights reserved. */

#ifndef _VNIC_DEVCMD_H_
#define _VNIC_DEVCMD_H_

#define _CMD_NBITS      14
#define _CMD_VTYPEBITS 10
#define _CMD_FLAGSBITS  6
#define _CMD_DIRBITS 2

#define _CMD_NMASK      ((1 << _CMD_NBITS)-1)
#define _CMD_VTYPEMASK  ((1 << _CMD_VTYPEBITS)-1)
#define _CMD_FLAGSMASK  ((1 << _CMD_FLAGSBITS)-1)
#define _CMD_DIRMASK    ((1 << _CMD_DIRBITS)-1)

#define _CMD_NSHIFT     0
#define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
#define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
#define _CMD_DIRSHIFT   (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)

/*
 * Direction bits (from host perspective).
 */

#define _CMD_DIR_NONE   0U
#define _CMD_DIR_WRITE  1U
#define _CMD_DIR_READ   2U
#define _CMD_DIR_RW     (_CMD_DIR_WRITE | _CMD_DIR_READ)

/*
 * Flag bits.
 */

#define _CMD_FLAGS_NONE 0U
#define _CMD_FLAGS_NOWAIT 1U

/*
 * vNIC type bits.
 */

#define _CMD_VTYPE_NONE  0U
#define _CMD_VTYPE_ENET  1U
#define _CMD_VTYPE_FC    2U
#define _CMD_VTYPE_SCSI  4U
#define _CMD_VTYPE_ALL   (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)

/*
 * Used to create cmds..
*/

#define _CMDCF(dir, flags, vtype, nr)  \
 (((dir)   << _CMD_DIRSHIFT) | \
 ((flags) << _CMD_FLAGSSHIFT) | \
 ((vtype) << _CMD_VTYPESHIFT) | \
 ((nr)    << _CMD_NSHIFT))
#define _CMDC(dir, vtype, nr)    _CMDCF(dir, 0, vtype, nr)
#define _CMDCNW(dir, vtype, nr)  _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)

/*
 * Used to decode cmds..
*/

#define _CMD_DIR(cmd)            (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
#define _CMD_FLAGS(cmd)          (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
#define _CMD_VTYPE(cmd)          (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
#define _CMD_N(cmd)              (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)

enum vnic_devcmd_cmd {
 CMD_NONE                = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),

 /* mcpu fw info in mem: (u64)a0=paddr to struct vnic_devcmd_fw_info */
 CMD_MCPU_FW_INFO        = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),

 /* dev-specific block member:
 *    in: (u16)a0=offset,(u8)a1=size
 *    out: a0=value */

 CMD_DEV_SPEC            = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),

 /* stats clear */
 CMD_STATS_CLEAR         = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),

 /* stats dump in mem: (u64)a0=paddr to stats area,
 *                    (u16)a1=sizeof stats area */

 CMD_STATS_DUMP          = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),

 /* nic_cfg in (u32)a0 */
 CMD_NIC_CFG             = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),

 /* set struct vnic_devcmd_notify buffer in mem:
 * in:
 *   (u64)a0=paddr to notify (set paddr=0 to unset)
 *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
 *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
 * out:
 *   (u32)a1 = effective size
 */

 CMD_NOTIFY              = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),

 /* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */
 CMD_OPEN  = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),

 /* open status:
 *    out: a0=0 open complete, a0=1 open in progress */

 CMD_OPEN_STATUS  = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),

 /* close vnic */
 CMD_CLOSE  = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),

 /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
 CMD_INIT  = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),

 /* enable virtual link */
 CMD_ENABLE  = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),

 /* enable virtual link, waiting variant. */
 CMD_ENABLE_WAIT  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),

 /* disable virtual link */
 CMD_DISABLE  = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),

 /* stats dump all vnics on uplink in mem: (u64)a0=paddr (u32)a1=uif */
 CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),

 /* init status:
 *    out: a0=0 init complete, a0=1 init in progress
 *         if a0=0, a1=errno */

 CMD_INIT_STATUS  = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),

 /* undo initialize of virtual link */
 CMD_DEINIT  = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),

 /* check fw capability of a cmd:
 * in:  (u32)a0=cmd
 * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */

 CMD_CAPABILITY      = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),

 /*
 * Initialization for the devcmd2 interface.
 * in: (u64) a0=host result buffer physical address
 * in: (u16) a1=number of entries in result buffer
 */

 CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57)
};

/* flags for CMD_OPEN */
#define CMD_OPENF_OPROM  0x1 /* open coming from option rom */

/* flags for CMD_INIT */
#define CMD_INITF_DEFAULT_MAC 0x1 /* init with default mac addr */

/* flags for CMD_PACKET_FILTER */
#define CMD_PFILTER_DIRECTED  0x01
#define CMD_PFILTER_MULTICAST  0x02
#define CMD_PFILTER_BROADCAST  0x04
#define CMD_PFILTER_PROMISCUOUS  0x08
#define CMD_PFILTER_ALL_MULTICAST 0x10

enum vnic_devcmd_status {
 STAT_NONE = 0,
 STAT_BUSY = 1 << 0, /* cmd in progress */
 STAT_ERROR = 1 << 1, /* last cmd caused error (code in a0) */
};

enum vnic_devcmd_error {
 ERR_SUCCESS = 0,
 ERR_EINVAL = 1,
 ERR_EFAULT = 2,
 ERR_EPERM = 3,
 ERR_EBUSY = 4,
 ERR_ECMDUNKNOWN = 5,
 ERR_EBADSTATE = 6,
 ERR_ENOMEM = 7,
 ERR_ETIMEDOUT = 8,
 ERR_ELINKDOWN = 9,
};

struct vnic_devcmd_fw_info {
 char fw_version[32];
 char fw_build[32];
 char hw_version[32];
 char hw_serial_number[32];
};

struct vnic_devcmd_notify {
 u32 csum;  /* checksum over following words */

 u32 link_state;  /* link up == 1 */
 u32 port_speed;  /* effective port speed (rate limit) */
 u32 mtu;  /* MTU */
 u32 msglvl;  /* requested driver msg lvl */
 u32 uif;  /* uplink interface */
 u32 status;  /* status bits (see VNIC_STF_*) */
 u32 error;  /* error code (see ERR_*) for first ERR */
 u32 link_down_cnt; /* running count of link down transitions */
};
#define VNIC_STF_FATAL_ERR 0x0001 /* fatal fw error */

struct vnic_devcmd_provinfo {
 u8 oui[3];
 u8 type;
 u8 data[];
};

/*
 * Writing cmd register causes STAT_BUSY to get set in status register.
 * When cmd completes, STAT_BUSY will be cleared.
 *
 * If cmd completed successfully STAT_ERROR will be clear
 * and args registers contain cmd-specific results.
 *
 * If cmd error, STAT_ERROR will be set and args[0] contains error code.
 *
 * status register is read-only.  While STAT_BUSY is set,
 * all other register contents are read-only.
 */


/* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */
#define VNIC_DEVCMD_NARGS 15
struct vnic_devcmd {
 u32 status;   /* RO */
 u32 cmd;   /* RW */
 u64 args[VNIC_DEVCMD_NARGS]; /* RW cmd args (little-endian) */
};


/*
 * Version 2 of the interface.
 *
 * Some things are carried over, notably the vnic_devcmd_cmd enum.
 */


/*
 * Flags for vnic_devcmd2.flags
 */


#define DEVCMD2_FNORESULT       0x1     /* Don't copy result to host */

#define VNIC_DEVCMD2_NARGS      VNIC_DEVCMD_NARGS
struct vnic_devcmd2 {
 u16 pad;
 u16 flags;
 u32 cmd;                /* same command #defines as original */
 u64 args[VNIC_DEVCMD2_NARGS];
};

#define VNIC_DEVCMD2_NRESULTS   VNIC_DEVCMD_NARGS
struct devcmd2_result {
 u64 results[VNIC_DEVCMD2_NRESULTS];
 u32 pad;
 u16 completed_index;    /* into copy WQ */
 u8  error;              /* same error codes as original */
 u8  color;              /* 0 or 1 as with completion queues */
};

#define DEVCMD2_RING_SIZE   32
#define DEVCMD2_DESC_SIZE   128

#define DEVCMD2_RESULTS_SIZE_MAX   ((1 << 16) - 1)

#endif /* _VNIC_DEVCMD_H_ */

Messung V0.5
C=80 H=100 G=90

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