linux/drivers/crypto/caam/intern.h
<<
>>
Prefs
   1/*
   2 * CAAM/SEC 4.x driver backend
   3 * Private/internal definitions between modules
   4 *
   5 * Copyright 2008-2011 Freescale Semiconductor, Inc.
   6 *
   7 */
   8
   9#ifndef INTERN_H
  10#define INTERN_H
  11
  12/* Currently comes from Kconfig param as a ^2 (driver-required) */
  13#define JOBR_DEPTH (1 << CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE)
  14
  15/* Kconfig params for interrupt coalescing if selected (else zero) */
  16#ifdef CONFIG_CRYPTO_DEV_FSL_CAAM_INTC
  17#define JOBR_INTC JRCFG_ICEN
  18#define JOBR_INTC_TIME_THLD CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD
  19#define JOBR_INTC_COUNT_THLD CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD
  20#else
  21#define JOBR_INTC 0
  22#define JOBR_INTC_TIME_THLD 0
  23#define JOBR_INTC_COUNT_THLD 0
  24#endif
  25
  26/*
  27 * Storage for tracking each in-process entry moving across a ring
  28 * Each entry on an output ring needs one of these
  29 */
  30struct caam_jrentry_info {
  31        void (*callbk)(struct device *dev, u32 *desc, u32 status, void *arg);
  32        void *cbkarg;   /* Argument per ring entry */
  33        u32 *desc_addr_virt;    /* Stored virt addr for postprocessing */
  34        dma_addr_t desc_addr_dma;       /* Stored bus addr for done matching */
  35        u32 desc_size;  /* Stored size for postprocessing, header derived */
  36};
  37
  38/* Private sub-storage for a single JobR */
  39struct caam_drv_private_jr {
  40        struct list_head        list_node;      /* Job Ring device list */
  41        struct device           *dev;
  42        int ridx;
  43        struct caam_job_ring __iomem *rregs;    /* JobR's register space */
  44        struct tasklet_struct irqtask;
  45        int irq;                        /* One per queue */
  46
  47        /* Number of scatterlist crypt transforms active on the JobR */
  48        atomic_t tfm_count ____cacheline_aligned;
  49
  50        /* Job ring info */
  51        int ringsize;   /* Size of rings (assume input = output) */
  52        struct caam_jrentry_info *entinfo;      /* Alloc'ed 1 per ring entry */
  53        spinlock_t inplock ____cacheline_aligned; /* Input ring index lock */
  54        int inp_ring_write_index;       /* Input index "tail" */
  55        int head;                       /* entinfo (s/w ring) head index */
  56        dma_addr_t *inpring;    /* Base of input ring, alloc DMA-safe */
  57        spinlock_t outlock ____cacheline_aligned; /* Output ring index lock */
  58        int out_ring_read_index;        /* Output index "tail" */
  59        int tail;                       /* entinfo (s/w ring) tail index */
  60        struct jr_outentry *outring;    /* Base of output ring, DMA-safe */
  61};
  62
  63/*
  64 * Driver-private storage for a single CAAM block instance
  65 */
  66struct caam_drv_private {
  67
  68        struct device *dev;
  69        struct platform_device **jrpdev; /* Alloc'ed array per sub-device */
  70        struct platform_device *pdev;
  71
  72        /* Physical-presence section */
  73        struct caam_ctrl __iomem *ctrl; /* controller region */
  74        struct caam_deco __iomem *deco; /* DECO/CCB views */
  75        struct caam_assurance __iomem *assure;
  76        struct caam_queue_if __iomem *qi; /* QI control region */
  77        struct caam_job_ring __iomem *jr[4];    /* JobR's register space */
  78
  79        /*
  80         * Detected geometry block. Filled in from device tree if powerpc,
  81         * or from register-based version detection code
  82         */
  83        u8 total_jobrs;         /* Total Job Rings in device */
  84        u8 qi_present;          /* Nonzero if QI present in device */
  85        int secvio_irq;         /* Security violation interrupt number */
  86        int virt_en;            /* Virtualization enabled in CAAM */
  87
  88#define RNG4_MAX_HANDLES 2
  89        /* RNG4 block */
  90        u32 rng4_sh_init;       /* This bitmap shows which of the State
  91                                   Handles of the RNG4 block are initialized
  92                                   by this driver */
  93
  94        /*
  95         * debugfs entries for developer view into driver/device
  96         * variables at runtime.
  97         */
  98#ifdef CONFIG_DEBUG_FS
  99        struct dentry *dfs_root;
 100        struct dentry *ctl; /* controller dir */
 101        struct dentry *ctl_rq_dequeued, *ctl_ob_enc_req, *ctl_ib_dec_req;
 102        struct dentry *ctl_ob_enc_bytes, *ctl_ob_prot_bytes;
 103        struct dentry *ctl_ib_dec_bytes, *ctl_ib_valid_bytes;
 104        struct dentry *ctl_faultaddr, *ctl_faultdetail, *ctl_faultstatus;
 105
 106        struct debugfs_blob_wrapper ctl_kek_wrap, ctl_tkek_wrap, ctl_tdsk_wrap;
 107        struct dentry *ctl_kek, *ctl_tkek, *ctl_tdsk;
 108#endif
 109};
 110
 111void caam_jr_algapi_init(struct device *dev);
 112void caam_jr_algapi_remove(struct device *dev);
 113#endif /* INTERN_H */
 114