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