linux/drivers/infiniband/hw/hfi1/sdma_txreq.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
   2/*
   3 * Copyright(c) 2016 Intel Corporation.
   4 */
   5
   6#ifndef HFI1_SDMA_TXREQ_H
   7#define HFI1_SDMA_TXREQ_H
   8
   9/* increased for AHG */
  10#define NUM_DESC 6
  11
  12/*
  13 * struct sdma_desc - canonical fragment descriptor
  14 *
  15 * This is the descriptor carried in the tx request
  16 * corresponding to each fragment.
  17 *
  18 */
  19struct sdma_desc {
  20        /* private:  don't use directly */
  21        u64 qw[2];
  22};
  23
  24/**
  25 * struct sdma_txreq - the sdma_txreq structure (one per packet)
  26 * @list: for use by user and by queuing for wait
  27 *
  28 * This is the representation of a packet which consists of some
  29 * number of fragments.   Storage is provided to within the structure.
  30 * for all fragments.
  31 *
  32 * The storage for the descriptors are automatically extended as needed
  33 * when the currently allocation is exceeded.
  34 *
  35 * The user (Verbs or PSM) may overload this structure with fields
  36 * specific to their use by putting this struct first in their struct.
  37 * The method of allocation of the overloaded structure is user dependent
  38 *
  39 * The list is the only public field in the structure.
  40 *
  41 */
  42
  43#define SDMA_TXREQ_S_OK        0
  44#define SDMA_TXREQ_S_SENDERROR 1
  45#define SDMA_TXREQ_S_ABORTED   2
  46#define SDMA_TXREQ_S_SHUTDOWN  3
  47
  48/* flags bits */
  49#define SDMA_TXREQ_F_URGENT       0x0001
  50#define SDMA_TXREQ_F_AHG_COPY     0x0002
  51#define SDMA_TXREQ_F_USE_AHG      0x0004
  52#define SDMA_TXREQ_F_VIP          0x0010
  53
  54struct sdma_txreq;
  55typedef void (*callback_t)(struct sdma_txreq *, int);
  56
  57struct iowait;
  58struct sdma_txreq {
  59        struct list_head list;
  60        /* private: */
  61        struct sdma_desc *descp;
  62        /* private: */
  63        void *coalesce_buf;
  64        /* private: */
  65        struct iowait *wait;
  66        /* private: */
  67        callback_t                  complete;
  68#ifdef CONFIG_HFI1_DEBUG_SDMA_ORDER
  69        u64 sn;
  70#endif
  71        /* private: - used in coalesce/pad processing */
  72        u16                         packet_len;
  73        /* private: - down-counted to trigger last */
  74        u16                         tlen;
  75        /* private: */
  76        u16                         num_desc;
  77        /* private: */
  78        u16                         desc_limit;
  79        /* private: */
  80        u16                         next_descq_idx;
  81        /* private: */
  82        u16 coalesce_idx;
  83        /* private: flags */
  84        u16                         flags;
  85        /* private: */
  86        struct sdma_desc descs[NUM_DESC];
  87};
  88
  89static inline int sdma_txreq_built(struct sdma_txreq *tx)
  90{
  91        return tx->num_desc;
  92}
  93
  94#endif                          /* HFI1_SDMA_TXREQ_H */
  95