encrypt_ioctl.h revision 285242
1/*******************************************************************************
2*Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
3*
4*Redistribution and use in source and binary forms, with or without modification, are permitted provided
5*that the following conditions are met:
6*1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7*following disclaimer.
8*2. Redistributions in binary form must reproduce the above copyright notice,
9*this list of conditions and the following disclaimer in the documentation and/or other materials provided
10*with the distribution.
11*
12*THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13*WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14*FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16*NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18*LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20*
21* $FreeBSD: projects/pms/sys/dev/pms/freebsd/driver/common/encrypt_ioctl.h 285242 2015-07-07 13:17:02Z achim $
22*
23*******************************************************************************/
24/*******************************************************************************
25**
26** Version Control Information:
27**
28**  $Revision: 114125 $
29**  $Author: lindfors $
30**  $Date: 2012-01-06 17:12:27 -0800 (Fri, 06 Jan 2012) $
31**  $Id: encrypt_ioctl.h 112360 2012-01-07 01:12:27Z mcleanda $
32**
33*******************************************************************************/
34#include <linux/ioctl.h>
35
36#ifndef __ENCRYPT_IOCTL_H__
37#define __ENCRYPT_IOCTL_H__
38
39#include <dev/pms/RefTisa/tisa/api/tiapi.h>
40#include <dev/pms/RefTisa/tisa/api/ostiapi.h>
41#include <dev/pms/RefTisa/tisa/api/tidefs.h>
42#include <dev/pms/RefTisa/tisa/api/tiglobal.h>
43#include <dev/pms/RefTisa/tisa/api/titypes.h>
44#include <dev/pms/RefTisa/tisa/sassata/common/tdioctl.h>
45#include <dev/pms/freebsd/driver/common/osenv.h>
46#include <dev/pms/freebsd/driver/common/ostypes.h>
47#include <dev/pms/freebsd/driver/common/osdebug.h>
48
49typedef struct IoctlEncryptGetInfo_s {
50    tiEncryptInfo_t tisaEncryptInfo;
51} __attribute__ ((packed)) IoctlEncryptGetInfo_t;
52
53typedef struct IoctlEncryptSetMode_s {
54    bit32 securityCipherMode;
55} __attribute__ ((packed))  IoctlEncryptSetMode_t;
56
57typedef struct IoctlEncryptKekAdd_s {
58    bit32              kekIndex;
59    bit32              wrapperKekIndex;
60    bit32              blobFormat;
61    tiEncryptKekBlob_t *EncryptKekBlob;
62} __attribute__ ((packed)) IoctlEncryptKekAdd_t;
63
64typedef struct IoctlEncryptDekAdd_s {
65    bit32              kekIndex;
66    bit32              dekTable;
67    bit32              dekIndex;
68	bit32              dekBlobFormat;
69    bit32              dekTableKeyEntrySize;
70    tiEncryptDekBlob_t *dekBlob;
71} __attribute__ ((packed)) IoctlEncryptDekAdd_t;
72
73typedef struct IoctlEncryptDekInvalidate_s {
74    tiEncryptDek_t dek;
75} __attribute__ ((packed)) IoctlEncryptDekInvalidate_t;
76
77typedef struct IoctlEncryptKekNVRAM_s {
78    bit32 index;
79} __attribute__ ((packed)) IoctlEncryptKekNVRAM_t;
80
81typedef struct IoctlEncryptDekTable_s {
82    tiMem_t DekTable1Addr;
83    tiMem_t DekTable2Addr;
84} __attribute__ ((packed)) IoctlEncryptDekTable_t;
85
86typedef struct EncryptDekMapEntry_s {
87#define ENCRYPT_DEK_MAP_ENTRY_CLEAR 0x00000001UL
88#define ENCRYPT_DEK_MAP_ENTRY_VALID 0x80000000UL
89    bit32              flags;
90    unsigned long long startLBA;
91    unsigned long long endLBA;
92    tiEncryptDek_t     dek;
93} __attribute__ ((packed)) EncryptDekMapEntry_t;
94
95typedef struct EncryptDeviceDekMap_s {
96    bit32                host;
97    bit32                channel;
98    bit32                device;
99    bit32                lun;
100    bit32                keytag_check;
101    bit32                keytag[2];
102    EncryptDekMapEntry_t dekMapEntry[1];
103} __attribute__ ((packed)) EncryptDeviceDekMap_t;
104
105typedef struct IoctlEncryptDekMapTable_s {
106    EncryptDeviceDekMap_t dekMap[1];
107} __attribute__ ((packed)) IoctlEncryptDekMapTable_t;
108
109typedef struct IoctlEncryptIOError_s {
110    bit64                error_id;
111    bit64                timestamp;
112    bit32                error_type;
113    bit32                host;
114    bit32                channel;
115    bit32                device;
116    bit32                lun;
117    bit32                scsi_cmd;
118    bit32                dek_index;
119    bit32                dek_table;
120    bit32                kek_index;
121    bit32                encrypt_mode;
122    bit32                keytag_check;
123    bit32                keytag[2];
124} __attribute__ ((packed)) IoctlEncryptIOError_t;
125
126typedef struct __attribute__ ((packed)) IoctlEncryptErrorQuery_s {
127#define ERROR_QUERY_FLAG_BLOCK 1
128   bit32                 query_flag;
129   bit32                 valid_mask;
130   IoctlEncryptIOError_t error[32];
131} __attribute__ ((packed)) IoctlEncryptErrorQuery_t;
132
133typedef union IoctlEncryptOp_u {
134    IoctlEncryptGetInfo_t       encryptGetInfo;
135    IoctlEncryptSetMode_t       encryptSetMode;
136    IoctlEncryptKekAdd_t        encryptKekAdd;
137    IoctlEncryptDekAdd_t        encryptDekAdd;
138    IoctlEncryptDekInvalidate_t encryptDekInvalidate;
139    IoctlEncryptKekNVRAM_t      encryptKekNVRAM;
140    IoctlEncryptDekMapTable_t   encryptDekMap;
141    IoctlEncryptErrorQuery_t    encryptErrorQuery;
142} __attribute__ ((packed)) IoctlEncryptOp_t;
143
144typedef struct tiIOCTLPayloadHeader_s {
145    bit32 Signature;
146    bit16 MajorFunction;
147    bit16 MinorFunction;
148    bit16 Length;
149    bit16 Status;
150} __attribute__ ((packed)) tiIOCTLPayloadHeader_t;
151
152typedef struct IoctlTISAEncrypt_s {
153#define encryptGetInfo       0x00000001
154#define encryptSetMode       0x00000002
155#define encryptKekAdd        0x00000003
156#define encryptDekAdd        0x00000004
157#define encryptDekInvalidate 0x00000005
158#define encryptKekStore      0x00000006
159#define encryptKekLoad       0x00000007
160#define encryptGetDekTable   0x00000008
161#define encryptSetDekMap     0x00000009
162#define encryptDekDump       0x0000000a
163#define encryptErrorQuery    0x0000000c
164    bit32            encryptFunction;
165    bit32            status;
166    bit32            subEvent;
167    IoctlEncryptOp_t request;
168} __attribute__ ((packed)) IoctlTISAEncrypt_t;
169
170typedef struct IOCTLEncrypt_s {
171    tiIOCTLPayloadHeader_t hdr;
172    IoctlTISAEncrypt_t     body;
173} __attribute__ ((packed)) IoctlEncrypt_t;
174
175#endif
176