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