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