12e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/** 22e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Copyright(c) 2011 Trusted Logic. All rights reserved. 32e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 42e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Redistribution and use in source and binary forms, with or without 52e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * modification, are permitted provided that the following conditions 62e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * are met: 72e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 82e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * * Redistributions of source code must retain the above copyright 92e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * notice, this list of conditions and the following disclaimer. 102e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * * Redistributions in binary form must reproduce the above copyright 112e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * notice, this list of conditions and the following disclaimer in 122e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * the documentation and/or other materials provided with the 132e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * distribution. 142e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * * Neither the name Trusted Logic nor the names of its 152e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * contributors may be used to endorse or promote products derived 162e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * from this software without specific prior written permission. 172e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 182e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 192e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 202e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 212e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 222e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 232e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 242e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 282e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 292e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley */ 302e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 312e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#ifndef __SERVICE_DELEGATION_PROTOCOL_H__ 322e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define __SERVICE_DELEGATION_PROTOCOL_H__ 332e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 342e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#include "s_type.h" 352e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 362e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* ----------------------------------------------------------------------------- 372e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley UUID 382e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley----------------------------------------------------------------------------- */ 392e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/** Service Identifier: {71139E60-ECAE-11DF-98CF-0800200C9A66} */ 402e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define SERVICE_DELEGATION_UUID { 0x71139e60, 0xecae, 0x11df, { 0x98, 0xcf, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 } } 412e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 422e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 432e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* ----------------------------------------------------------------------------- 442e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley Command identifiers 452e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley----------------------------------------------------------------------------- */ 462e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* See your Product Reference Manual for a specification of the delegation protocol */ 472e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 482e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/** 492e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Command identifier : get instruction 502e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 512e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley */ 522e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define SERVICE_DELEGATION_GET_INSTRUCTIONS 0x00000002 532e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 542e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* Instruction codes */ 552e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_SHUTDOWN 0xF0 562e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_NOTIFY 0xE0 572e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 582e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* Partition-specific instruction codes (high-nibble encodes the partition identifier) */ 592e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_CREATE 0x01 602e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_OPEN 0x02 612e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_READ 0x03 622e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_WRITE 0x04 632e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_SET_SIZE 0x05 642e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_SYNC 0x06 652e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_CLOSE 0x07 662e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_INSTRUCTION_PARTITION_DESTROY 0x08 672e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 682e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_NOTIFY_TYPE_ERROR 0x000000E1 692e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_NOTIFY_TYPE_WARNING 0x000000E2 702e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_NOTIFY_TYPE_INFO 0x000000E3 712e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define DELEGATION_NOTIFY_TYPE_DEBUG 0x000000E4 722e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 73d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic#ifdef SUPPORT_RPMB_PARTITION 74d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic#define RPMB_PARTITION_ID 14 75d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic#endif 76d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic 772e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct 782e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ 792e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nInstructionID; 802e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} DELEGATION_GENERIC_INSTRUCTION; 812e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 822e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct 832e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ 842e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nInstructionID; 852e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nMessageType; 862e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nMessageSize; 872e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley char nMessage[1]; 882e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} DELEGATION_NOTIFY_INSTRUCTION; 892e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 902e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct 912e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ 922e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nInstructionID; 932e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nSectorID; 942e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nWorkspaceOffset; 952e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} DELEGATION_RW_INSTRUCTION; 962e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 97d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic#ifdef SUPPORT_RPMB_PARTITION 98d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logictypedef struct 99d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic{ 100d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint32_t nInstructionID; 101d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint8_t nMAC[32]; 102d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint32_t nWorkspaceOffset[16]; 103d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint8_t pNonce[16]; 104d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint32_t nMC; 105d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint16_t nAddr; 106d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint16_t nBlockCount; 107d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint16_t nResult; 108d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic uint16_t nRequest; 109d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic} DELEGATION_RPMB_INSTRUCTION; 110d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic#endif 111d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic 1122e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct 1132e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ 1142e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nInstructionID; 1152e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nNewSize; 1162e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} DELEGATION_SET_SIZE_INSTRUCTION; 1172e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 1182e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef union 1192e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ 1202e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley DELEGATION_GENERIC_INSTRUCTION sGeneric; 1212e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley DELEGATION_NOTIFY_INSTRUCTION sNotify; 1222e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley DELEGATION_RW_INSTRUCTION sReadWrite; 1232e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley DELEGATION_SET_SIZE_INSTRUCTION sSetSize; 124d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic#ifdef SUPPORT_RPMB_PARTITION 125d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic DELEGATION_RPMB_INSTRUCTION sAuthRW; 126d96c0c949b8ecc4e1570106243d21c8fd5ed72efTrusted Logic#endif 1272e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} DELEGATION_INSTRUCTION; 1282e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 1292e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct 1302e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ 1312e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nSyncExecuted; 1322e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nPartitionErrorStates[16]; 1332e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nPartitionOpenSizes[16]; 1342e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} DELEGATION_ADMINISTRATIVE_DATA; 1352e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 1362e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#endif /* __SERVICE_DELEGATION_PROTOCOL_H__ */ 137