1/*
2 *  linux/drivers/s390/crypto/zcrypt_pcixcc.h
3 *
4 *  zcrypt 2.1.0
5 *
6 *  Copyright (C)  2001, 2006 IBM Corporation
7 *  Author(s): Robert Burroughs
8 *	       Eric Rossman (edrossma@us.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 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2, or (at your option)
16 * any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 */
27
28#ifndef _ZCRYPT_PCIXCC_H_
29#define _ZCRYPT_PCIXCC_H_
30
31/**
32 * CPRBX
33 *	  Note that all shorts and ints are big-endian.
34 *	  All pointer fields are 16 bytes long, and mean nothing.
35 *
36 *	  A request CPRB is followed by a request_parameter_block.
37 *
38 *	  The request (or reply) parameter block is organized thus:
39 *	    function code
40 *	    VUD block
41 *	    key block
42 */
43struct CPRBX {
44	unsigned short cprb_len;	/* CPRB length	      220	 */
45	unsigned char  cprb_ver_id;	/* CPRB version id.   0x02	 */
46	unsigned char  pad_000[3];	/* Alignment pad bytes		 */
47	unsigned char  func_id[2];	/* function id	      0x5432	 */
48	unsigned char  cprb_flags[4];	/* Flags			 */
49	unsigned int   req_parml;	/* request parameter buffer len	 */
50	unsigned int   req_datal;	/* request data buffer		 */
51	unsigned int   rpl_msgbl;	/* reply  message block length	 */
52	unsigned int   rpld_parml;	/* replied parameter block len	 */
53	unsigned int   rpl_datal;	/* reply data block len		 */
54	unsigned int   rpld_datal;	/* replied data block len	 */
55	unsigned int   req_extbl;	/* request extension block len	 */
56	unsigned char  pad_001[4];	/* reserved			 */
57	unsigned int   rpld_extbl;	/* replied extension block len	 */
58	unsigned char  req_parmb[16];	/* request parm block 'address'	 */
59	unsigned char  req_datab[16];	/* request data block 'address'	 */
60	unsigned char  rpl_parmb[16];	/* reply parm block 'address'	 */
61	unsigned char  rpl_datab[16];	/* reply data block 'address'	 */
62	unsigned char  req_extb[16];	/* request extension block 'addr'*/
63	unsigned char  rpl_extb[16];	/* reply extension block 'addres'*/
64	unsigned short ccp_rtcode;	/* server return code		 */
65	unsigned short ccp_rscode;	/* server reason code		 */
66	unsigned int   mac_data_len;	/* Mac Data Length		 */
67	unsigned char  logon_id[8];	/* Logon Identifier		 */
68	unsigned char  mac_value[8];	/* Mac Value			 */
69	unsigned char  mac_content_flgs;/* Mac content flag byte	 */
70	unsigned char  pad_002;		/* Alignment			 */
71	unsigned short domain;		/* Domain			 */
72	unsigned char  pad_003[12];	/* Domain masks			 */
73	unsigned char  pad_004[36];	/* reserved			 */
74} __attribute__((packed));
75
76int zcrypt_pcixcc_init(void);
77void zcrypt_pcixcc_exit(void);
78
79#endif /* _ZCRYPT_PCIXCC_H_ */
80