aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/crypto/z90common.h
blob: dbbcda3c846a34fa29f91a02cd0c698eef99a144 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/*
 *  linux/drivers/s390/crypto/z90common.h
 *
 *  z90crypt 1.3.3
 *
 *  Copyright (C)  2001, 2005 IBM Corporation
 *  Author(s): Robert Burroughs (burrough@us.ibm.com)
 *             Eric Rossman (edrossma@us.ibm.com)
 *
 *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef _Z90COMMON_H_
#define _Z90COMMON_H_


#define RESPBUFFSIZE 256
#define PCI_FUNC_KEY_DECRYPT 0x5044
#define PCI_FUNC_KEY_ENCRYPT 0x504B
extern int ext_bitlens;

enum devstat {
	DEV_GONE,
	DEV_ONLINE,
	DEV_QUEUE_FULL,
	DEV_EMPTY,
	DEV_NO_WORK,
	DEV_BAD_MESSAGE,
	DEV_TSQ_EXCEPTION,
	DEV_RSQ_EXCEPTION,
	DEV_SEN_EXCEPTION,
	DEV_REC_EXCEPTION
};

enum hdstat {
	HD_NOT_THERE,
	HD_BUSY,
	HD_DECONFIGURED,
	HD_CHECKSTOPPED,
	HD_ONLINE,
	HD_TSQ_EXCEPTION
};

#define Z90C_NO_DEVICES		1
#define Z90C_AMBIGUOUS_DOMAIN	2
#define Z90C_INCORRECT_DOMAIN	3
#define ENOTINIT		4

#define SEN_BUSY	 7
#define SEN_USER_ERROR	 8
#define SEN_QUEUE_FULL	11
#define SEN_NOT_AVAIL	16
#define SEN_PAD_ERROR	17
#define SEN_RETRY	18
#define SEN_RELEASED	24

#define REC_EMPTY	 4
#define REC_BUSY	 6
#define REC_OPERAND_INV	 8
#define REC_OPERAND_SIZE 9
#define REC_EVEN_MOD	10
#define REC_NO_WORK	11
#define REC_HARDWAR_ERR	12
#define REC_NO_RESPONSE	13
#define REC_RETRY_DEV	14
#define REC_USER_GONE	15
#define REC_BAD_MESSAGE	16
#define REC_INVALID_PAD	17
#define REC_USE_PCICA	18

#define WRONG_DEVICE_TYPE 20

#define REC_FATAL_ERROR 32
#define SEN_FATAL_ERROR 33
#define TSQ_FATAL_ERROR 34
#define RSQ_FATAL_ERROR 35

#define Z90CRYPT_NUM_TYPES	6
#define PCICA		0
#define PCICC		1
#define PCIXCC_MCL2	2
#define PCIXCC_MCL3	3
#define CEX2C		4
#define CEX2A		5
#define NILDEV		-1
#define ANYDEV		-1
#define PCIXCC_UNK	-2

enum hdevice_type {
	PCICC_HW  = 3,
	PCICA_HW  = 4,
	PCIXCC_HW = 5,
	CEX2A_HW  = 6,
	CEX2C_HW  = 7
};

struct CPRBX {
	unsigned short cprb_len;
	unsigned char  cprb_ver_id;
	unsigned char  pad_000[3];
	unsigned char  func_id[2];
	unsigned char  cprb_flags[4];
	unsigned int   req_parml;
	unsigned int   req_datal;
	unsigned int   rpl_msgbl;
	unsigned int   rpld_parml;
	unsigned int   rpl_datal;
	unsigned int   rpld_datal;
	unsigned int   req_extbl;
	unsigned char  pad_001[4];
	unsigned int   rpld_extbl;
	unsigned char  req_parmb[16];
	unsigned char  req_datab[16];
	unsigned char  rpl_parmb[16];
	unsigned char  rpl_datab[16];
	unsigned char  req_extb[16];
	unsigned char  rpl_extb[16];
	unsigned short ccp_rtcode;
	unsigned short ccp_rscode;
	unsigned int   mac_data_len;
	unsigned char  logon_id[8];
	unsigned char  mac_value[8];
	unsigned char  mac_content_flgs;
	unsigned char  pad_002;
	unsigned short domain;
	unsigned char  pad_003[12];
	unsigned char  pad_004[36];
};

#ifndef DEV_NAME
#define DEV_NAME	"z90crypt"
#endif
#define PRINTK(fmt, args...) \
	printk(KERN_DEBUG DEV_NAME ": %s -> " fmt, __FUNCTION__ , ## args)
#define PRINTKN(fmt, args...) \
	printk(KERN_DEBUG DEV_NAME ": " fmt, ## args)
#define PRINTKW(fmt, args...) \
	printk(KERN_WARNING DEV_NAME ": %s -> " fmt, __FUNCTION__ , ## args)
#define PRINTKC(fmt, args...) \
	printk(KERN_CRIT DEV_NAME ": %s -> " fmt, __FUNCTION__ , ## args)

#ifdef Z90CRYPT_DEBUG
#define PDEBUG(fmt, args...) \
	printk(KERN_DEBUG DEV_NAME ": %s -> " fmt, __FUNCTION__ , ## args)
#else
#define PDEBUG(fmt, args...) do {} while (0)
#endif

#define UMIN(a,b) ((a) < (b) ? (a) : (b))
#define IS_EVEN(x) ((x) == (2 * ((x) / 2)))

#endif