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