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


Quelle  hpilo.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * linux/drivers/char/hpilo.h
 *
 * Copyright (C) 2008 Hewlett-Packard Development Company, L.P.
 * David Altobelli <david.altobelli@hp.com>
 */

#ifndef __HPILO_H
#define __HPILO_H

#define ILO_NAME "hpilo"

/* iLO ASIC PCI revision id */
#define PCI_REV_ID_NECHES 7

/* max number of open channel control blocks per device, hw limited to 32 */
#define MAX_CCB        24
/* min number of open channel control blocks per device, hw limited to 32 */
#define MIN_CCB  8
/* max number of supported devices */
#define MAX_ILO_DEV 1
/* max number of files */
#define MAX_OPEN (MAX_CCB * MAX_ILO_DEV)
/* total wait time in usec */
#define MAX_WAIT_TIME 10000
/* per spin wait time in usec */
#define WAIT_TIME 10
/* spin counter for open/close delay */
#define MAX_WAIT (MAX_WAIT_TIME / WAIT_TIME)

/*
 * Per device, used to track global memory allocations.
 */

struct ilo_hwinfo {
 /* mmio registers on device */
 char __iomem *mmio_vaddr;

 /* doorbell registers on device */
 char __iomem *db_vaddr;

 /* shared memory on device used for channel control blocks */
 char __iomem *ram_vaddr;

 /* files corresponding to this device */
 struct ccb_data *ccb_alloc[MAX_CCB];

 struct pci_dev *ilo_dev;

 /*
 * open_lock      serializes ccb_cnt during open and close
 * [ irq disabled ]
 * -> alloc_lock  used when adding/removing/searching ccb_alloc,
 *                which represents all ccbs open on the device
 * --> fifo_lock  controls access to fifo queues shared with hw
 *
 * Locks must be taken in this order, but open_lock and alloc_lock
 * are optional, they do not need to be held in order to take a
 * lower level lock.
 */

 spinlock_t open_lock;
 spinlock_t alloc_lock;
 spinlock_t fifo_lock;

 struct cdev cdev;
};

/* offset from mmio_vaddr for enabling doorbell interrupts */
#define DB_IRQ  0xB2
/* offset from mmio_vaddr for outbound communications */
#define DB_OUT  0xD4
/* DB_OUT reset bit */
#define DB_RESET 26

/*
 * Channel control block. Used to manage hardware queues.
 * The format must match hw's version.  The hw ccb is 128 bytes,
 * but the context area shouldn't be touched by the driver.
 */

#define ILOSW_CCB_SZ 64
#define ILOHW_CCB_SZ  128
struct ccb {
 union {
  char *send_fifobar;
  u64 send_fifobar_pa;
 } ccb_u1;
 union {
  char *send_desc;
  u64 send_desc_pa;
 } ccb_u2;
 u64 send_ctrl;

 union {
  char *recv_fifobar;
  u64 recv_fifobar_pa;
 } ccb_u3;
 union {
  char *recv_desc;
  u64 recv_desc_pa;
 } ccb_u4;
 u64 recv_ctrl;

 union {
  char __iomem *db_base;
  u64 padding5;
 } ccb_u5;

 u64 channel;

 /* unused context area (64 bytes) */
};

/* ccb queue parameters */
#define SENDQ  1
#define RECVQ   2
#define NR_QENTRY     4
#define L2_QENTRY_SZ  12

/* ccb ctrl bitfields */
#define CTRL_BITPOS_L2SZ             0
#define CTRL_BITPOS_FIFOINDEXMASK    4
#define CTRL_BITPOS_DESCLIMIT        18
#define CTRL_BITPOS_A                30
#define CTRL_BITPOS_G                31

/* ccb doorbell macros */
#define L2_DB_SIZE  14
#define ONE_DB_SIZE  (1 << L2_DB_SIZE)

/*
 * Per fd structure used to track the ccb allocated to that dev file.
 */

struct ccb_data {
 /* software version of ccb, using virtual addrs */
 struct ccb  driver_ccb;

 /* hardware version of ccb, using physical addrs */
 struct ccb  ilo_ccb;

 /* hardware ccb is written to this shared mapped device memory */
 struct ccb __iomem *mapped_ccb;

 /* dma'able memory used for send/recv queues */
 void       *dma_va;
 dma_addr_t  dma_pa;
 size_t      dma_size;

 /* pointer to hardware device info */
 struct ilo_hwinfo *ilo_hw;

 /* queue for this ccb to wait for recv data */
 wait_queue_head_t ccb_waitq;

 /* usage count, to allow for shared ccb's */
 int     ccb_cnt;

 /* open wanted exclusive access to this ccb */
 int     ccb_excl;
};

/*
 * FIFO queue structure, shared with hw.
 */

#define ILO_START_ALIGN 4096
#define ILO_CACHE_SZ   128
struct fifo {
 u64 nrents; /* user requested number of fifo entries */
 u64 imask;  /* mask to extract valid fifo index */
 u64 merge; /*  O/C bits to merge in during enqueue operation */
 u64 reset; /* set to non-zero when the target device resets */
 u8  pad_0[ILO_CACHE_SZ - (sizeof(u64) * 4)];

 u64 head;
 u8  pad_1[ILO_CACHE_SZ - (sizeof(u64))];

 u64 tail;
 u8  pad_2[ILO_CACHE_SZ - (sizeof(u64))];

 u64 fifobar[];
};

/* convert between struct fifo, and the fifobar, which is saved in the ccb */
#define FIFOHANDLESIZE (sizeof(struct fifo))
#define FIFOBARTOHANDLE(_fifo) \
 ((struct fifo *)(((char *)(_fifo)) - FIFOHANDLESIZE))

/* the number of qwords to consume from the entry descriptor */
#define ENTRY_BITPOS_QWORDS      0
/* descriptor index number (within a specified queue) */
#define ENTRY_BITPOS_DESCRIPTOR  10
/* state bit, fifo entry consumed by consumer */
#define ENTRY_BITPOS_C           22
/* state bit, fifo entry is occupied */
#define ENTRY_BITPOS_O           23

#define ENTRY_BITS_QWORDS        10
#define ENTRY_BITS_DESCRIPTOR    12
#define ENTRY_BITS_C             1
#define ENTRY_BITS_O             1
#define ENTRY_BITS_TOTAL \
 (ENTRY_BITS_C + ENTRY_BITS_O + \
  ENTRY_BITS_QWORDS + ENTRY_BITS_DESCRIPTOR)

/* extract various entry fields */
#define ENTRY_MASK ((1 << ENTRY_BITS_TOTAL) - 1)
#define ENTRY_MASK_C (((1 << ENTRY_BITS_C) - 1) << ENTRY_BITPOS_C)
#define ENTRY_MASK_O (((1 << ENTRY_BITS_O) - 1) << ENTRY_BITPOS_O)
#define ENTRY_MASK_QWORDS \
 (((1 << ENTRY_BITS_QWORDS) - 1) << ENTRY_BITPOS_QWORDS)
#define ENTRY_MASK_DESCRIPTOR \
 (((1 << ENTRY_BITS_DESCRIPTOR) - 1) << ENTRY_BITPOS_DESCRIPTOR)

#define ENTRY_MASK_NOSTATE (ENTRY_MASK >> (ENTRY_BITS_C + ENTRY_BITS_O))

#endif /* __HPILO_H */

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

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