linux/drivers/s390/crypto/zcrypt_api.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 *  zcrypt 2.1.0
   4 *
   5 *  Copyright IBM Corp. 2001, 2012
   6 *  Author(s): Robert Burroughs
   7 *             Eric Rossman (edrossma@us.ibm.com)
   8 *             Cornelia Huck <cornelia.huck@de.ibm.com>
   9 *
  10 *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
  11 *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
  12 *                                Ralph Wuerthner <rwuerthn@de.ibm.com>
  13 *  MSGTYPE restruct:             Holger Dengler <hd@linux.vnet.ibm.com>
  14 */
  15
  16#ifndef _ZCRYPT_API_H_
  17#define _ZCRYPT_API_H_
  18
  19#include <linux/atomic.h>
  20#include <asm/debug.h>
  21#include <asm/zcrypt.h>
  22#include "ap_bus.h"
  23
  24/**
  25 * device type for an actual device is either PCICA, PCICC, PCIXCC_MCL2,
  26 * PCIXCC_MCL3, CEX2C, or CEX2A
  27 *
  28 * NOTE: PCIXCC_MCL3 refers to a PCIXCC with May 2004 version of Licensed
  29 *       Internal Code (LIC) (EC J12220 level 29).
  30 *       PCIXCC_MCL2 refers to any LIC before this level.
  31 */
  32#define ZCRYPT_PCICA            1
  33#define ZCRYPT_PCICC            2
  34#define ZCRYPT_PCIXCC_MCL2      3
  35#define ZCRYPT_PCIXCC_MCL3      4
  36#define ZCRYPT_CEX2C            5
  37#define ZCRYPT_CEX2A            6
  38#define ZCRYPT_CEX3C            7
  39#define ZCRYPT_CEX3A            8
  40#define ZCRYPT_CEX4            10
  41#define ZCRYPT_CEX5            11
  42#define ZCRYPT_CEX6            12
  43
  44/**
  45 * Large random numbers are pulled in 4096 byte chunks from the crypto cards
  46 * and stored in a page. Be careful when increasing this buffer due to size
  47 * limitations for AP requests.
  48 */
  49#define ZCRYPT_RNG_BUFFER_SIZE  4096
  50
  51/*
  52 * Identifier for Crypto Request Performance Index
  53 */
  54enum crypto_ops {
  55        MEX_1K,
  56        MEX_2K,
  57        MEX_4K,
  58        CRT_1K,
  59        CRT_2K,
  60        CRT_4K,
  61        HWRNG,
  62        SECKEY,
  63        NUM_OPS
  64};
  65
  66struct zcrypt_queue;
  67
  68struct zcrypt_ops {
  69        long (*rsa_modexpo)(struct zcrypt_queue *, struct ica_rsa_modexpo *);
  70        long (*rsa_modexpo_crt)(struct zcrypt_queue *,
  71                                struct ica_rsa_modexpo_crt *);
  72        long (*send_cprb)(struct zcrypt_queue *, struct ica_xcRB *,
  73                          struct ap_message *);
  74        long (*send_ep11_cprb)(struct zcrypt_queue *, struct ep11_urb *,
  75                               struct ap_message *);
  76        long (*rng)(struct zcrypt_queue *, char *, struct ap_message *);
  77        struct list_head list;          /* zcrypt ops list. */
  78        struct module *owner;
  79        int variant;
  80        char name[128];
  81};
  82
  83struct zcrypt_card {
  84        struct list_head list;          /* Device list. */
  85        struct list_head zqueues;       /* List of zcrypt queues */
  86        struct kref refcount;           /* device refcounting */
  87        struct ap_card *card;           /* The "real" ap card device. */
  88        int online;                     /* User online/offline */
  89
  90        int user_space_type;            /* User space device id. */
  91        char *type_string;              /* User space device name. */
  92        int min_mod_size;               /* Min number of bits. */
  93        int max_mod_size;               /* Max number of bits. */
  94        int max_exp_bit_length;
  95        int speed_rating[NUM_OPS];      /* Speed idx of crypto ops. */
  96        atomic_t load;                  /* Utilization of the crypto device */
  97
  98        int request_count;              /* # current requests. */
  99};
 100
 101struct zcrypt_queue {
 102        struct list_head list;          /* Device list. */
 103        struct kref refcount;           /* device refcounting */
 104        struct zcrypt_card *zcard;
 105        struct zcrypt_ops *ops;         /* Crypto operations. */
 106        struct ap_queue *queue;         /* The "real" ap queue device. */
 107        int online;                     /* User online/offline */
 108
 109        atomic_t load;                  /* Utilization of the crypto device */
 110
 111        int request_count;              /* # current requests. */
 112
 113        struct ap_message reply;        /* Per-device reply structure. */
 114};
 115
 116/* transport layer rescanning */
 117extern atomic_t zcrypt_rescan_req;
 118
 119extern spinlock_t zcrypt_list_lock;
 120extern int zcrypt_device_count;
 121extern struct list_head zcrypt_card_list;
 122
 123#define for_each_zcrypt_card(_zc) \
 124        list_for_each_entry(_zc, &zcrypt_card_list, list)
 125
 126#define for_each_zcrypt_queue(_zq, _zc) \
 127        list_for_each_entry(_zq, &(_zc)->zqueues, list)
 128
 129struct zcrypt_card *zcrypt_card_alloc(void);
 130void zcrypt_card_free(struct zcrypt_card *);
 131void zcrypt_card_get(struct zcrypt_card *);
 132int zcrypt_card_put(struct zcrypt_card *);
 133int zcrypt_card_register(struct zcrypt_card *);
 134void zcrypt_card_unregister(struct zcrypt_card *);
 135struct zcrypt_card *zcrypt_card_get_best(unsigned int *,
 136                                         unsigned int, unsigned int);
 137void zcrypt_card_put_best(struct zcrypt_card *, unsigned int);
 138
 139struct zcrypt_queue *zcrypt_queue_alloc(size_t);
 140void zcrypt_queue_free(struct zcrypt_queue *);
 141void zcrypt_queue_get(struct zcrypt_queue *);
 142int zcrypt_queue_put(struct zcrypt_queue *);
 143int zcrypt_queue_register(struct zcrypt_queue *);
 144void zcrypt_queue_unregister(struct zcrypt_queue *);
 145void zcrypt_queue_force_online(struct zcrypt_queue *, int);
 146struct zcrypt_queue *zcrypt_queue_get_best(unsigned int, unsigned int);
 147void  zcrypt_queue_put_best(struct zcrypt_queue *, unsigned int);
 148
 149int zcrypt_rng_device_add(void);
 150void zcrypt_rng_device_remove(void);
 151
 152void zcrypt_msgtype_register(struct zcrypt_ops *);
 153void zcrypt_msgtype_unregister(struct zcrypt_ops *);
 154struct zcrypt_ops *zcrypt_msgtype(unsigned char *, int);
 155int zcrypt_api_init(void);
 156void zcrypt_api_exit(void);
 157long zcrypt_send_cprb(struct ica_xcRB *xcRB);
 158void zcrypt_device_status_mask_ext(struct zcrypt_device_status_ext *devstatus);
 159
 160#endif /* _ZCRYPT_API_H_ */
 161