linux/drivers/s390/crypto/zcrypt_api.h
<<
>>
Prefs
   1/*
   2 *  zcrypt 2.1.0
   3 *
   4 *  Copyright IBM Corp. 2001, 2012
   5 *  Author(s): Robert Burroughs
   6 *             Eric Rossman (edrossma@us.ibm.com)
   7 *             Cornelia Huck <cornelia.huck@de.ibm.com>
   8 *
   9 *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
  10 *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
  11 *                                Ralph Wuerthner <rwuerthn@de.ibm.com>
  12 *  MSGTYPE restruct:             Holger Dengler <hd@linux.vnet.ibm.com>
  13 *
  14 * This program is free software; you can redistribute it and/or modify
  15 * it under the terms of the GNU General Public License as published by
  16 * the Free Software Foundation; either version 2, or (at your option)
  17 * any later version.
  18 *
  19 * This program is distributed in the hope that it will be useful,
  20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  22 * GNU General Public License for more details.
  23 *
  24 * You should have received a copy of the GNU General Public License
  25 * along with this program; if not, write to the Free Software
  26 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  27 */
  28
  29#ifndef _ZCRYPT_API_H_
  30#define _ZCRYPT_API_H_
  31
  32#include <linux/atomic.h>
  33#include <asm/debug.h>
  34#include <asm/zcrypt.h>
  35#include "ap_bus.h"
  36
  37/* deprecated status calls */
  38#define ICAZ90STATUS            _IOR(ZCRYPT_IOCTL_MAGIC, 0x10, struct ica_z90_status)
  39#define Z90STAT_PCIXCCCOUNT     _IOR(ZCRYPT_IOCTL_MAGIC, 0x43, int)
  40
  41/**
  42 * This structure is deprecated and the corresponding ioctl() has been
  43 * replaced with individual ioctl()s for each piece of data!
  44 */
  45struct ica_z90_status {
  46        int totalcount;
  47        int leedslitecount; // PCICA
  48        int leeds2count;    // PCICC
  49        // int PCIXCCCount; is not in struct for backward compatibility
  50        int requestqWaitCount;
  51        int pendingqWaitCount;
  52        int totalOpenCount;
  53        int cryptoDomain;
  54        // status: 0=not there, 1=PCICA, 2=PCICC, 3=PCIXCC_MCL2, 4=PCIXCC_MCL3,
  55        //         5=CEX2C
  56        unsigned char status[64];
  57        // qdepth: # work elements waiting for each device
  58        unsigned char qdepth[64];
  59};
  60
  61/**
  62 * device type for an actual device is either PCICA, PCICC, PCIXCC_MCL2,
  63 * PCIXCC_MCL3, CEX2C, or CEX2A
  64 *
  65 * NOTE: PCIXCC_MCL3 refers to a PCIXCC with May 2004 version of Licensed
  66 *       Internal Code (LIC) (EC J12220 level 29).
  67 *       PCIXCC_MCL2 refers to any LIC before this level.
  68 */
  69#define ZCRYPT_PCICA            1
  70#define ZCRYPT_PCICC            2
  71#define ZCRYPT_PCIXCC_MCL2      3
  72#define ZCRYPT_PCIXCC_MCL3      4
  73#define ZCRYPT_CEX2C            5
  74#define ZCRYPT_CEX2A            6
  75#define ZCRYPT_CEX3C            7
  76#define ZCRYPT_CEX3A            8
  77#define ZCRYPT_CEX4            10
  78#define ZCRYPT_CEX5            11
  79
  80/**
  81 * Large random numbers are pulled in 4096 byte chunks from the crypto cards
  82 * and stored in a page. Be careful when increasing this buffer due to size
  83 * limitations for AP requests.
  84 */
  85#define ZCRYPT_RNG_BUFFER_SIZE  4096
  86
  87struct zcrypt_device;
  88
  89struct zcrypt_ops {
  90        long (*rsa_modexpo)(struct zcrypt_device *, struct ica_rsa_modexpo *);
  91        long (*rsa_modexpo_crt)(struct zcrypt_device *,
  92                                struct ica_rsa_modexpo_crt *);
  93        long (*send_cprb)(struct zcrypt_device *, struct ica_xcRB *);
  94        long (*send_ep11_cprb)(struct zcrypt_device *, struct ep11_urb *);
  95        long (*rng)(struct zcrypt_device *, char *);
  96        struct list_head list;          /* zcrypt ops list. */
  97        struct module *owner;
  98        int variant;
  99        char name[128];
 100};
 101
 102struct zcrypt_device {
 103        struct list_head list;          /* Device list. */
 104        spinlock_t lock;                /* Per device lock. */
 105        struct kref refcount;           /* device refcounting */
 106        struct ap_device *ap_dev;       /* The "real" ap device. */
 107        struct zcrypt_ops *ops;         /* Crypto operations. */
 108        int online;                     /* User online/offline */
 109
 110        int user_space_type;            /* User space device id. */
 111        char *type_string;              /* User space device name. */
 112        int min_mod_size;               /* Min number of bits. */
 113        int max_mod_size;               /* Max number of bits. */
 114        int short_crt;                  /* Card has crt length restriction. */
 115        int speed_rating;               /* Speed of the crypto device. */
 116
 117        int request_count;              /* # current requests. */
 118
 119        struct ap_message reply;        /* Per-device reply structure. */
 120        int max_exp_bit_length;
 121
 122        debug_info_t *dbf_area;         /* debugging */
 123};
 124
 125/* transport layer rescanning */
 126extern atomic_t zcrypt_rescan_req;
 127
 128struct zcrypt_device *zcrypt_device_alloc(size_t);
 129void zcrypt_device_free(struct zcrypt_device *);
 130void zcrypt_device_get(struct zcrypt_device *);
 131int zcrypt_device_put(struct zcrypt_device *);
 132int zcrypt_device_register(struct zcrypt_device *);
 133void zcrypt_device_unregister(struct zcrypt_device *);
 134void zcrypt_msgtype_register(struct zcrypt_ops *);
 135void zcrypt_msgtype_unregister(struct zcrypt_ops *);
 136struct zcrypt_ops *zcrypt_msgtype_request(unsigned char *, int);
 137void zcrypt_msgtype_release(struct zcrypt_ops *);
 138int zcrypt_api_init(void);
 139void zcrypt_api_exit(void);
 140
 141#endif /* _ZCRYPT_API_H_ */
 142