/////////////////////////////////////////////////////////////////////////////
//                                    NOTICE                               //
//                                                                         //
//            COPYRIGHT MARVELL INTERNATIONAL LTD. AND ITS AFFILIATES      //
//                             ALL RIGHTS RESERVED                         //
//                                                                         //
//    The source code for this computer program is  CONFIDENTIAL  and a    //
//    TRADE SECRET of MARVELL  INTERNATIONAL  LTD. AND  ITS  AFFILIATES    //
//    ('MARVELL'). The receipt or possession of  this  program does not    //
//    convey any rights to  reproduce or  disclose  its contents, or to    //
//    manufacture,  use, or  sell  anything  that it  may  describe, in    //
//    whole or in part, without the specific written consent of MARVELL.   //
//    Any  reproduction  or  distribution  of this  program without the    //
//    express written consent of MARVELL is a violation of the copyright   //
//    laws and may subject you to criminal prosecution.                    //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

#ifndef INCLUDE_BCM_MAILBOX_H
#define INCLUDE_BCM_MAILBOX_H

typedef struct _BCM_MAILBOX_COMMAND
{
   unsigned int arg0;
   unsigned int arg1;
   unsigned int arg2;
   unsigned int arg3;
   unsigned int arg4;
   unsigned int arg5;
   unsigned int arg6;
   unsigned int arg7;
   unsigned int arg8;
   unsigned int arg9;
   unsigned int arg10;
   unsigned int arg11;
   unsigned int arg12;
   unsigned int arg13;
   unsigned int arg14;
   unsigned int arg15;
   unsigned int command;
} BCM_MAILBOX_COMMAND;

typedef struct _BCM_MAILBOX_STATUS
{
   unsigned int return_status;
   unsigned int arg0;
   unsigned int arg1;
   unsigned int arg2;
   unsigned int arg3;
   unsigned int arg4;
   unsigned int arg5;
   unsigned int arg6;
   unsigned int arg7;
   unsigned int arg8;
   unsigned int arg9;
   unsigned int arg10;
   unsigned int arg11;
   unsigned int arg12;
   unsigned int arg13;
   unsigned int arg14;
   unsigned int arg15;
} BCM_MAILBOX_STATUS;

// the command mailbox structure, which appears in the Client's memory space
typedef struct _BCM_MAILBOX
{
   unsigned int command_parameter0;                  // 0x0 Write Only
   unsigned int command_parameter1;                  // 0x4 Write Only
   unsigned int command_parameter2;                  // 0x8 Write Only
   unsigned int command_parameter3;                  // 0xc Write Only
   unsigned int command_parameter4;                  // 0x10 Write Only
   unsigned int command_parameter5;                  // 0x14 Write Only
   unsigned int command_parameter6;                  // 0x18 Write Only
   unsigned int command_parameter7;                  // 0x1c Write Only
   unsigned int command_parameter8;                  // 0x20 Write Only
   unsigned int command_parameter9;                  // 0x24 Write Only
   unsigned int command_parameter10;                 // 0x28 Write Only
   unsigned int command_parameter11;                 // 0x2c Write Only
   unsigned int command_parameter12;                 // 0x30 Write Only
   unsigned int command_parameter13;                 // 0x34 Write Only
   unsigned int command_parameter14;                 // 0x38 Write Only: linked-list dma host-read pointer
   unsigned int command_parameter15;                 // 0x3c Write Only: linked-list dma host-write pointer
   unsigned int secure_processor_command;            // 0x40 Write Only
   unsigned int reserved_0x44[15];
   unsigned int command_return_status;               // 0x80 Read Only
   unsigned int command_status0;                     // 0x84 Read Only
   unsigned int command_status1;                     // 0x88 Read Only
   unsigned int command_status2;                     // 0x8c Read Only
   unsigned int command_status3;                     // 0x90 Read Only
   unsigned int command_status4;                     // 0x94 Read Only
   unsigned int command_status5;                     // 0x98 Read Only
   unsigned int command_status6;                     // 0x9c Read Only
   unsigned int command_status7;                     // 0xa0 Read Only
   unsigned int command_status8;                     // 0xa4 Read Only
   unsigned int command_status9;                     // 0xa8 Read Only
   unsigned int command_status10;                    // 0xac Read Only
   unsigned int command_status11;                    // 0xb0 Read Only
   unsigned int command_status12;                    // 0xb4 Read Only
   unsigned int command_status13;                    // 0xb8 Read Only
   unsigned int command_status14;                    // 0xbc Read Only
   unsigned int command_status15;                    // 0xc0 Read Only
   unsigned int command_fifo_status;                 // 0xc4 Read Only
   unsigned int host_interrupt_register;             // 0xc8 Write-to-Clear
   unsigned int host_interrupt_mask;                 // 0xcc Write-to-Clear
   unsigned int host_exception_address;              // 0xd0 Write-to-Clear
   unsigned int sp_trust_register;                   // 0xd4 Read Only
   unsigned int wtm_identification;                  // 0xd8 Read Only
   unsigned int wtm_revision;                        // 0xdc Read Only
} _BCM_MAILBOX;

// the command mailbox registers which appears in the Client's memory space
#ifndef MEMMAP_BCM_REG_BASE
#define MEMMAP_BCM_REG_BASE                 0xF7930000
#endif

#define BCM_MAILBOX_BASE                    (MEMMAP_BCM_REG_BASE)
#define BCM_PRIMITIVE_COMMAND_PARAMETER0    (BCM_MAILBOX_BASE+0x00)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER1    (BCM_MAILBOX_BASE+0x04)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER2    (BCM_MAILBOX_BASE+0x08)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER3    (BCM_MAILBOX_BASE+0x0c)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER4    (BCM_MAILBOX_BASE+0x10)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER5    (BCM_MAILBOX_BASE+0x14)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER6    (BCM_MAILBOX_BASE+0x18)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER7    (BCM_MAILBOX_BASE+0x1c)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER8    (BCM_MAILBOX_BASE+0x20)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER9    (BCM_MAILBOX_BASE+0x24)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER10   (BCM_MAILBOX_BASE+0x28)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER11   (BCM_MAILBOX_BASE+0x2c)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER12   (BCM_MAILBOX_BASE+0x30)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER13   (BCM_MAILBOX_BASE+0x34)  //Write Only
#define BCM_PRIMITIVE_COMMAND_PARAMETER14   (BCM_MAILBOX_BASE+0x38)  //Write Only: linked-list dma host-read pointer
#define BCM_PRIMITIVE_COMMAND_PARAMETER15   (BCM_MAILBOX_BASE+0x3c)  //Write Only: linked-list dma host-write pointer
#define BCM_SECURE_PROCESSOR_COMMAND        (BCM_MAILBOX_BASE+0x40)  //Write Only

#define BCM_COMMAND_RETURN_STATUS           (BCM_MAILBOX_BASE+0x80)  //Read Only
#define BCM_COMMAND_STATUS_0                (BCM_MAILBOX_BASE+0x84)  //Read Only
#define BCM_COMMAND_STATUS_1                (BCM_MAILBOX_BASE+0x88)  //Read Only
#define BCM_COMMAND_STATUS_2                (BCM_MAILBOX_BASE+0x8c)  //Read Only
#define BCM_COMMAND_STATUS_3                (BCM_MAILBOX_BASE+0x90)  //Read Only
#define BCM_COMMAND_STATUS_4                (BCM_MAILBOX_BASE+0x94)  //Read Only
#define BCM_COMMAND_STATUS_5                (BCM_MAILBOX_BASE+0x98)  //Read Only
#define BCM_COMMAND_STATUS_6                (BCM_MAILBOX_BASE+0x9c)  //Read Only
#define BCM_COMMAND_STATUS_7                (BCM_MAILBOX_BASE+0xa0)  //Read Only
#define BCM_COMMAND_STATUS_8                (BCM_MAILBOX_BASE+0xa4)  //Read Only
#define BCM_COMMAND_STATUS_9                (BCM_MAILBOX_BASE+0xa8)  //Read Only
#define BCM_COMMAND_STATUS_10               (BCM_MAILBOX_BASE+0xac)  //Read Only
#define BCM_COMMAND_STATUS_11               (BCM_MAILBOX_BASE+0xb0)  //Read Only
#define BCM_COMMAND_STATUS_12               (BCM_MAILBOX_BASE+0xb4)  //Read Only
#define BCM_COMMAND_STATUS_13               (BCM_MAILBOX_BASE+0xb8)  //Read Only
#define BCM_COMMAND_STATUS_14               (BCM_MAILBOX_BASE+0xbc)  //Read Only
#define BCM_COMMAND_STATUS_15               (BCM_MAILBOX_BASE+0xc0)  //Read Only
#define BCM_COMMAND_FIFO_STATUS             (BCM_MAILBOX_BASE+0xc4)  //Read Only

#define BCM_HOST_INTERRUPT_REGISTER         (BCM_MAILBOX_BASE+0xC8)  //Write to clear
#define BCM_HOST_INTERRUPT_MASK             (BCM_MAILBOX_BASE+0xcc)  //Write-to-Clear
#define BCM_HOST_EXCEPTION_ADDRESS          (BCM_MAILBOX_BASE+0xd0)  //Write-to-Clear
#define BCM_SP_TRUST_REGISTER               (BCM_MAILBOX_BASE+0xd4)  //Read Only
#define BCM_WTM_IDENTIFICATION              (BCM_MAILBOX_BASE+0xd8)  //Read Only
#define BCM_WTM_REVISION                    (BCM_MAILBOX_BASE+0xdc)  //Read Only

inline void bcm_clear_command(BCM_MAILBOX_COMMAND * pCmd);
inline void bcm_clear_status(BCM_MAILBOX_STATUS * pStatus);
void bcm_clear_interrupts(unsigned int mask);
void execute_bcm_command(BCM_MAILBOX_COMMAND *pCmd, BCM_MAILBOX_STATUS *pStatus);
int bcm_wait_for_boot();
int bcm_usb_console_func(const unsigned int primitive_id);
int bcm_usb_boot_func(const BCM_MAILBOX_COMMAND* cmd);
int bcm_generate_random_number(unsigned char *buf, const unsigned int size);
#endif
