encrypt_ioctl.h revision 285809
1132718Skan/*******************************************************************************
2132718Skan*Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
3169689Skan*
4169689Skan*Redistribution and use in source and binary forms, with or without modification, are permitted provided
5132718Skan*that the following conditions are met:
6132718Skan*1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7132718Skan*following disclaimer.
8132718Skan*2. Redistributions in binary form must reproduce the above copyright notice,
9132718Skan*this list of conditions and the following disclaimer in the documentation and/or other materials provided
10132718Skan*with the distribution.
11132718Skan*
12132718Skan*THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13132718Skan*WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14132718Skan*FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15132718Skan*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16132718Skan*NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17132718Skan*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18132718Skan*LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19132718Skan*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20169689Skan*
21132718Skan* $FreeBSD$
22132718Skan*
23132718Skan*******************************************************************************/
24132718Skan/*******************************************************************************
25169689Skan**
26169689Skan** Version Control Information:
27132718Skan**
28132718Skan**  $Revision: 114125 $
29132718Skan**  $Author: lindfors $
30132718Skan**  $Date: 2012-01-06 17:12:27 -0800 (Fri, 06 Jan 2012) $
31132718Skan**  $Id: encrypt_ioctl.h 112360 2012-01-07 01:12:27Z mcleanda $
32132718Skan**
33132718Skan*******************************************************************************/
34132718Skan#include <linux/ioctl.h>
35132718Skan
36132718Skan#ifndef __ENCRYPT_IOCTL_H__
37132718Skan#define __ENCRYPT_IOCTL_H__
38132718Skan
39132718Skan#include <dev/pms/RefTisa/tisa/api/tiapi.h>
40132718Skan#include <dev/pms/RefTisa/tisa/api/ostiapi.h>
41169689Skan#include <dev/pms/RefTisa/tisa/api/tidefs.h>
42132718Skan#include <dev/pms/RefTisa/tisa/api/tiglobal.h>
43132718Skan#include <dev/pms/RefTisa/tisa/api/titypes.h>
44132718Skan#include <dev/pms/RefTisa/tisa/sassata/common/tdioctl.h>
45132718Skan#include <dev/pms/freebsd/driver/common/osenv.h>
46132718Skan#include <dev/pms/freebsd/driver/common/ostypes.h>
47132718Skan#include <dev/pms/freebsd/driver/common/osdebug.h>
48132718Skan
49169689Skantypedef struct IoctlEncryptGetInfo_s {
50169689Skan    tiEncryptInfo_t tisaEncryptInfo;
51132718Skan} __attribute__ ((packed)) IoctlEncryptGetInfo_t;
52169689Skan
53132718Skantypedef struct IoctlEncryptSetMode_s {
54132718Skan    bit32 securityCipherMode;
55132718Skan} __attribute__ ((packed))  IoctlEncryptSetMode_t;
56132718Skan
57132718Skantypedef struct IoctlEncryptKekAdd_s {
58132718Skan    bit32              kekIndex;
59132718Skan    bit32              wrapperKekIndex;
60132718Skan    bit32              blobFormat;
61132718Skan    tiEncryptKekBlob_t *EncryptKekBlob;
62132718Skan} __attribute__ ((packed)) IoctlEncryptKekAdd_t;
63132718Skan
64132718Skantypedef struct IoctlEncryptDekAdd_s {
65132718Skan    bit32              kekIndex;
66132718Skan    bit32              dekTable;
67132718Skan    bit32              dekIndex;
68132718Skan	bit32              dekBlobFormat;
69132718Skan    bit32              dekTableKeyEntrySize;
70132718Skan    tiEncryptDekBlob_t *dekBlob;
71132718Skan} __attribute__ ((packed)) IoctlEncryptDekAdd_t;
72132718Skan
73132718Skantypedef struct IoctlEncryptDekInvalidate_s {
74132718Skan    tiEncryptDek_t dek;
75260011Spfg} __attribute__ ((packed)) IoctlEncryptDekInvalidate_t;
76132718Skan
77132718Skantypedef struct IoctlEncryptKekNVRAM_s {
78132718Skan    bit32 index;
79132718Skan} __attribute__ ((packed)) IoctlEncryptKekNVRAM_t;
80132718Skan
81132718Skantypedef struct IoctlEncryptDekTable_s {
82132718Skan    tiMem_t DekTable1Addr;
83132718Skan    tiMem_t DekTable2Addr;
84132718Skan} __attribute__ ((packed)) IoctlEncryptDekTable_t;
85132718Skan
86132718Skantypedef struct EncryptDekMapEntry_s {
87132718Skan#define ENCRYPT_DEK_MAP_ENTRY_CLEAR 0x00000001UL
88132718Skan#define ENCRYPT_DEK_MAP_ENTRY_VALID 0x80000000UL
89132718Skan    bit32              flags;
90132718Skan    unsigned long long startLBA;
91132718Skan    unsigned long long endLBA;
92132718Skan    tiEncryptDek_t     dek;
93132718Skan} __attribute__ ((packed)) EncryptDekMapEntry_t;
94132718Skan
95132718Skantypedef struct EncryptDeviceDekMap_s {
96132718Skan    bit32                host;
97132718Skan    bit32                channel;
98132718Skan    bit32                device;
99132718Skan    bit32                lun;
100132718Skan    bit32                keytag_check;
101132718Skan    bit32                keytag[2];
102132718Skan    EncryptDekMapEntry_t dekMapEntry[1];
103132718Skan} __attribute__ ((packed)) EncryptDeviceDekMap_t;
104132718Skan
105132718Skantypedef struct IoctlEncryptDekMapTable_s {
106132718Skan    EncryptDeviceDekMap_t dekMap[1];
107132718Skan} __attribute__ ((packed)) IoctlEncryptDekMapTable_t;
108132718Skan
109132718Skantypedef struct IoctlEncryptIOError_s {
110132718Skan    bit64                error_id;
111132718Skan    bit64                timestamp;
112132718Skan    bit32                error_type;
113132718Skan    bit32                host;
114132718Skan    bit32                channel;
115169689Skan    bit32                device;
116132718Skan    bit32                lun;
117132718Skan    bit32                scsi_cmd;
118132718Skan    bit32                dek_index;
119132718Skan    bit32                dek_table;
120169689Skan    bit32                kek_index;
121132718Skan    bit32                encrypt_mode;
122132718Skan    bit32                keytag_check;
123132718Skan    bit32                keytag[2];
124132718Skan} __attribute__ ((packed)) IoctlEncryptIOError_t;
125132718Skan
126169689Skantypedef struct __attribute__ ((packed)) IoctlEncryptErrorQuery_s {
127169689Skan#define ERROR_QUERY_FLAG_BLOCK 1
128132718Skan   bit32                 query_flag;
129132718Skan   bit32                 valid_mask;
130132718Skan   IoctlEncryptIOError_t error[32];
131132718Skan} __attribute__ ((packed)) IoctlEncryptErrorQuery_t;
132132718Skan
133132718Skantypedef union IoctlEncryptOp_u {
134132718Skan    IoctlEncryptGetInfo_t       encryptGetInfo;
135169689Skan    IoctlEncryptSetMode_t       encryptSetMode;
136132718Skan    IoctlEncryptKekAdd_t        encryptKekAdd;
137132718Skan    IoctlEncryptDekAdd_t        encryptDekAdd;
138132718Skan    IoctlEncryptDekInvalidate_t encryptDekInvalidate;
139132718Skan    IoctlEncryptKekNVRAM_t      encryptKekNVRAM;
140132718Skan    IoctlEncryptDekMapTable_t   encryptDekMap;
141132718Skan    IoctlEncryptErrorQuery_t    encryptErrorQuery;
142132718Skan} __attribute__ ((packed)) IoctlEncryptOp_t;
143132718Skan
144132718Skantypedef struct tiIOCTLPayloadHeader_s {
145132718Skan    bit32 Signature;
146132718Skan    bit16 MajorFunction;
147132718Skan    bit16 MinorFunction;
148132718Skan    bit16 Length;
149169689Skan    bit16 Status;
150169689Skan} __attribute__ ((packed)) tiIOCTLPayloadHeader_t;
151169689Skan
152132718Skantypedef struct IoctlTISAEncrypt_s {
153132718Skan#define encryptGetInfo       0x00000001
154132718Skan#define encryptSetMode       0x00000002
155132718Skan#define encryptKekAdd        0x00000003
156132718Skan#define encryptDekAdd        0x00000004
157132718Skan#define encryptDekInvalidate 0x00000005
158132718Skan#define encryptKekStore      0x00000006
159132718Skan#define encryptKekLoad       0x00000007
160132718Skan#define encryptGetDekTable   0x00000008
161132718Skan#define encryptSetDekMap     0x00000009
162132718Skan#define encryptDekDump       0x0000000a
163132718Skan#define encryptErrorQuery    0x0000000c
164132718Skan    bit32            encryptFunction;
165132718Skan    bit32            status;
166132718Skan    bit32            subEvent;
167132718Skan    IoctlEncryptOp_t request;
168132718Skan} __attribute__ ((packed)) IoctlTISAEncrypt_t;
169169689Skan
170169689Skantypedef struct IOCTLEncrypt_s {
171169689Skan    tiIOCTLPayloadHeader_t hdr;
172169689Skan    IoctlTISAEncrypt_t     body;
173132718Skan} __attribute__ ((packed)) IoctlEncrypt_t;
174132718Skan
175132718Skan#endif
176132718Skan