14e1bc9a0SAchim Leubner /*******************************************************************************
24e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
34e1bc9a0SAchim Leubner *
44e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided
54e1bc9a0SAchim Leubner *that the following conditions are met:
64e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
74e1bc9a0SAchim Leubner *following disclaimer.
84e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice,
94e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided
104e1bc9a0SAchim Leubner *with the distribution.
114e1bc9a0SAchim Leubner *
124e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
134e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
144e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
154e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
164e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
174e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
184e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
194e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
204e1bc9a0SAchim Leubner *
214e1bc9a0SAchim Leubner *
224e1bc9a0SAchim Leubner *******************************************************************************/
234e1bc9a0SAchim Leubner /*******************************************************************************
244e1bc9a0SAchim Leubner **
254e1bc9a0SAchim Leubner ** Version Control Information:
264e1bc9a0SAchim Leubner **
274e1bc9a0SAchim Leubner **  $Revision: 114125 $
284e1bc9a0SAchim Leubner **  $Author: lindfors $
294e1bc9a0SAchim Leubner **  $Date: 2012-01-06 17:12:27 -0800 (Fri, 06 Jan 2012) $
304e1bc9a0SAchim Leubner **  $Id: encrypt_ioctl.h 112360 2012-01-07 01:12:27Z mcleanda $
314e1bc9a0SAchim Leubner **
324e1bc9a0SAchim Leubner *******************************************************************************/
334e1bc9a0SAchim Leubner #include <linux/ioctl.h>
344e1bc9a0SAchim Leubner 
354e1bc9a0SAchim Leubner #ifndef __ENCRYPT_IOCTL_H__
364e1bc9a0SAchim Leubner #define __ENCRYPT_IOCTL_H__
374e1bc9a0SAchim Leubner 
384e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/tiapi.h>
394e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/ostiapi.h>
404e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/tidefs.h>
414e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/tiglobal.h>
424e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/api/titypes.h>
434e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/tisa/sassata/common/tdioctl.h>
444e1bc9a0SAchim Leubner #include <dev/pms/freebsd/driver/common/osenv.h>
454e1bc9a0SAchim Leubner #include <dev/pms/freebsd/driver/common/ostypes.h>
464e1bc9a0SAchim Leubner #include <dev/pms/freebsd/driver/common/osdebug.h>
474e1bc9a0SAchim Leubner 
484e1bc9a0SAchim Leubner typedef struct IoctlEncryptGetInfo_s {
494e1bc9a0SAchim Leubner     tiEncryptInfo_t tisaEncryptInfo;
504e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptGetInfo_t;
514e1bc9a0SAchim Leubner 
524e1bc9a0SAchim Leubner typedef struct IoctlEncryptSetMode_s {
534e1bc9a0SAchim Leubner     bit32 securityCipherMode;
544e1bc9a0SAchim Leubner } __attribute__ ((packed))  IoctlEncryptSetMode_t;
554e1bc9a0SAchim Leubner 
564e1bc9a0SAchim Leubner typedef struct IoctlEncryptKekAdd_s {
574e1bc9a0SAchim Leubner     bit32              kekIndex;
584e1bc9a0SAchim Leubner     bit32              wrapperKekIndex;
594e1bc9a0SAchim Leubner     bit32              blobFormat;
604e1bc9a0SAchim Leubner     tiEncryptKekBlob_t *EncryptKekBlob;
614e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptKekAdd_t;
624e1bc9a0SAchim Leubner 
634e1bc9a0SAchim Leubner typedef struct IoctlEncryptDekAdd_s {
644e1bc9a0SAchim Leubner     bit32              kekIndex;
654e1bc9a0SAchim Leubner     bit32              dekTable;
664e1bc9a0SAchim Leubner     bit32              dekIndex;
674e1bc9a0SAchim Leubner 	bit32              dekBlobFormat;
684e1bc9a0SAchim Leubner     bit32              dekTableKeyEntrySize;
694e1bc9a0SAchim Leubner     tiEncryptDekBlob_t *dekBlob;
704e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptDekAdd_t;
714e1bc9a0SAchim Leubner 
724e1bc9a0SAchim Leubner typedef struct IoctlEncryptDekInvalidate_s {
734e1bc9a0SAchim Leubner     tiEncryptDek_t dek;
744e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptDekInvalidate_t;
754e1bc9a0SAchim Leubner 
764e1bc9a0SAchim Leubner typedef struct IoctlEncryptKekNVRAM_s {
774e1bc9a0SAchim Leubner     bit32 index;
784e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptKekNVRAM_t;
794e1bc9a0SAchim Leubner 
804e1bc9a0SAchim Leubner typedef struct IoctlEncryptDekTable_s {
814e1bc9a0SAchim Leubner     tiMem_t DekTable1Addr;
824e1bc9a0SAchim Leubner     tiMem_t DekTable2Addr;
834e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptDekTable_t;
844e1bc9a0SAchim Leubner 
854e1bc9a0SAchim Leubner typedef struct EncryptDekMapEntry_s {
864e1bc9a0SAchim Leubner #define ENCRYPT_DEK_MAP_ENTRY_CLEAR 0x00000001UL
874e1bc9a0SAchim Leubner #define ENCRYPT_DEK_MAP_ENTRY_VALID 0x80000000UL
884e1bc9a0SAchim Leubner     bit32              flags;
894e1bc9a0SAchim Leubner     unsigned long long startLBA;
904e1bc9a0SAchim Leubner     unsigned long long endLBA;
914e1bc9a0SAchim Leubner     tiEncryptDek_t     dek;
924e1bc9a0SAchim Leubner } __attribute__ ((packed)) EncryptDekMapEntry_t;
934e1bc9a0SAchim Leubner 
944e1bc9a0SAchim Leubner typedef struct EncryptDeviceDekMap_s {
954e1bc9a0SAchim Leubner     bit32                host;
964e1bc9a0SAchim Leubner     bit32                channel;
974e1bc9a0SAchim Leubner     bit32                device;
984e1bc9a0SAchim Leubner     bit32                lun;
994e1bc9a0SAchim Leubner     bit32                keytag_check;
1004e1bc9a0SAchim Leubner     bit32                keytag[2];
1014e1bc9a0SAchim Leubner     EncryptDekMapEntry_t dekMapEntry[1];
1024e1bc9a0SAchim Leubner } __attribute__ ((packed)) EncryptDeviceDekMap_t;
1034e1bc9a0SAchim Leubner 
1044e1bc9a0SAchim Leubner typedef struct IoctlEncryptDekMapTable_s {
1054e1bc9a0SAchim Leubner     EncryptDeviceDekMap_t dekMap[1];
1064e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptDekMapTable_t;
1074e1bc9a0SAchim Leubner 
1084e1bc9a0SAchim Leubner typedef struct IoctlEncryptIOError_s {
1094e1bc9a0SAchim Leubner     bit64                error_id;
1104e1bc9a0SAchim Leubner     bit64                timestamp;
1114e1bc9a0SAchim Leubner     bit32                error_type;
1124e1bc9a0SAchim Leubner     bit32                host;
1134e1bc9a0SAchim Leubner     bit32                channel;
1144e1bc9a0SAchim Leubner     bit32                device;
1154e1bc9a0SAchim Leubner     bit32                lun;
1164e1bc9a0SAchim Leubner     bit32                scsi_cmd;
1174e1bc9a0SAchim Leubner     bit32                dek_index;
1184e1bc9a0SAchim Leubner     bit32                dek_table;
1194e1bc9a0SAchim Leubner     bit32                kek_index;
1204e1bc9a0SAchim Leubner     bit32                encrypt_mode;
1214e1bc9a0SAchim Leubner     bit32                keytag_check;
1224e1bc9a0SAchim Leubner     bit32                keytag[2];
1234e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptIOError_t;
1244e1bc9a0SAchim Leubner 
1254e1bc9a0SAchim Leubner typedef struct __attribute__ ((packed)) IoctlEncryptErrorQuery_s {
1264e1bc9a0SAchim Leubner #define ERROR_QUERY_FLAG_BLOCK 1
1274e1bc9a0SAchim Leubner    bit32                 query_flag;
1284e1bc9a0SAchim Leubner    bit32                 valid_mask;
1294e1bc9a0SAchim Leubner    IoctlEncryptIOError_t error[32];
1304e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptErrorQuery_t;
1314e1bc9a0SAchim Leubner 
1324e1bc9a0SAchim Leubner typedef union IoctlEncryptOp_u {
1334e1bc9a0SAchim Leubner     IoctlEncryptGetInfo_t       encryptGetInfo;
1344e1bc9a0SAchim Leubner     IoctlEncryptSetMode_t       encryptSetMode;
1354e1bc9a0SAchim Leubner     IoctlEncryptKekAdd_t        encryptKekAdd;
1364e1bc9a0SAchim Leubner     IoctlEncryptDekAdd_t        encryptDekAdd;
1374e1bc9a0SAchim Leubner     IoctlEncryptDekInvalidate_t encryptDekInvalidate;
1384e1bc9a0SAchim Leubner     IoctlEncryptKekNVRAM_t      encryptKekNVRAM;
1394e1bc9a0SAchim Leubner     IoctlEncryptDekMapTable_t   encryptDekMap;
1404e1bc9a0SAchim Leubner     IoctlEncryptErrorQuery_t    encryptErrorQuery;
1414e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncryptOp_t;
1424e1bc9a0SAchim Leubner 
1434e1bc9a0SAchim Leubner typedef struct tiIOCTLPayloadHeader_s {
1444e1bc9a0SAchim Leubner     bit32 Signature;
1454e1bc9a0SAchim Leubner     bit16 MajorFunction;
1464e1bc9a0SAchim Leubner     bit16 MinorFunction;
1474e1bc9a0SAchim Leubner     bit16 Length;
1484e1bc9a0SAchim Leubner     bit16 Status;
1494e1bc9a0SAchim Leubner } __attribute__ ((packed)) tiIOCTLPayloadHeader_t;
1504e1bc9a0SAchim Leubner 
1514e1bc9a0SAchim Leubner typedef struct IoctlTISAEncrypt_s {
1524e1bc9a0SAchim Leubner #define encryptGetInfo       0x00000001
1534e1bc9a0SAchim Leubner #define encryptSetMode       0x00000002
1544e1bc9a0SAchim Leubner #define encryptKekAdd        0x00000003
1554e1bc9a0SAchim Leubner #define encryptDekAdd        0x00000004
1564e1bc9a0SAchim Leubner #define encryptDekInvalidate 0x00000005
1574e1bc9a0SAchim Leubner #define encryptKekStore      0x00000006
1584e1bc9a0SAchim Leubner #define encryptKekLoad       0x00000007
1594e1bc9a0SAchim Leubner #define encryptGetDekTable   0x00000008
1604e1bc9a0SAchim Leubner #define encryptSetDekMap     0x00000009
1614e1bc9a0SAchim Leubner #define encryptDekDump       0x0000000a
1624e1bc9a0SAchim Leubner #define encryptErrorQuery    0x0000000c
1634e1bc9a0SAchim Leubner     bit32            encryptFunction;
1644e1bc9a0SAchim Leubner     bit32            status;
1654e1bc9a0SAchim Leubner     bit32            subEvent;
1664e1bc9a0SAchim Leubner     IoctlEncryptOp_t request;
1674e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlTISAEncrypt_t;
1684e1bc9a0SAchim Leubner 
1694e1bc9a0SAchim Leubner typedef struct IOCTLEncrypt_s {
1704e1bc9a0SAchim Leubner     tiIOCTLPayloadHeader_t hdr;
1714e1bc9a0SAchim Leubner     IoctlTISAEncrypt_t     body;
1724e1bc9a0SAchim Leubner } __attribute__ ((packed)) IoctlEncrypt_t;
1734e1bc9a0SAchim Leubner 
1744e1bc9a0SAchim Leubner #endif
175