summaryrefslogtreecommitdiffstats
path: root/src/lib/pmc_dcm.h
blob: 3141aecea55f37592ad01b9ad57dbc40653666eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#ifndef __PMC_DCM_H__
#define __PMC_DCM_H__

// $Id: pmc_dcm.h,v 1.2 2014/02/03 01:30:25 daviddu Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/lib/pmc_dcm.h,v $
//-----------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2013
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
//-----------------------------------------------------------------------------

/// \file pmc_dcm.h
/// \brief Generic PMC Interhchip Communication Mechanism 


/// PMC-DCM Return Code
#define PMC_DCM_SUCCESS              0
#define PMC_DCM_ARG_NULL_OBJECT_SEND 0x00326501 //ssx panic
#define PMC_DCM_ARG_NULL_OBJECT_RECV 0x00326501 //ssx panic
#define PMC_DCM_INTCHP_DISABLED_SEND 0x00326502 //ssx panic
#define PMC_DCM_INTCHP_DISABLED_RECV 0x00326502 //ssx panic
#define PMC_DCM_OUTSTANDING_TRANSFER 0x00326503 //user handle
#define PMC_DCM_INTCHP_CMD_ONLY_MTOS 0x00326504 //ssx panic
#define PMC_DCM_INTCHP_CMD_ONLY_STOM 0x00326504 //ssx panic
#define PMC_DCM_INVALID_COMMAND_CODE 0x00326505 //ssx panic
#define PMC_DCM_RECEIVE_NOT_DETECTED 0x00326506 //user handle
#define PMC_DCM_RECEIVE_NOT_MSG_TYPE 0x00326507 //ssx panic
    
/// PMC Interchip Command Code
#define PMC_IC_GPA_CC           1  //0b0001
#define PMC_IC_GPA_ACK_CC       2  //0b0010
#define PMC_IC_GAR_CC           3  //0b0011
#define PMC_IC_PING_CC          4  //0b0100
#define PMC_IC_PING_ACK_CC      6  //0b0110
#define PMC_IC_MSG_CC           8  //0b1000
#define PMC_IC_MSG_NACK_CC      10 //0b1010
#define PMC_IC_MSG_ACK_CC       11 //0b1011
#define PMC_IC_ERROR_CC         15 //0b1111

#ifndef __ASSEMBLER__

/// PMC-DCM low-level (hardware) packet

typedef union PmcInterchipPacket { 
    uint32_t value;
    struct {
        /// Hardware command code
        uint8_t cmd_code : 4;
        /// Hardware command extension; GPSM-DCM command code
        uint8_t cmd_ext : 4;
        /// Payload. The plan of record is to use payload[2] as HW-generated ECC.
        uint8_t payload[3];
    } fields;
} PmcDcmPacket;

/// Macro to set and get payload field
#define SET_PAYLOAD_FIELD(value) (value << 8) & 0xFFFF00
#define GET_PAYLOAD_FIELD(value) (value & 0xFFFF00) >> 8


/// low-level PMC-DCM interchip communication methods

int
pmc_dcm_send(PmcDcmPacket* hwPacket);

int
pmc_dcm_receive(PmcDcmPacket* hwPacket);

void
_pmc_dcm_send(uint32_t *value);

void
_pmc_dcm_receive(uint32_t *value);

int
pmc_dcm_check_ic_command(int cmd_code);

int
pmc_dcm_if_dcm_master();

void
pmc_dcm_set_interchip_mode(int master);

int
pmc_dcm_if_interchip_interface_enabled();

void
pmc_dcm_set_interchip_interface(int enable);

int
pmc_dcm_if_channel_busy();

int
pmc_dcm_if_new_message();

void
pmc_dcm_init(int master_or_slace);

#endif  /* __ASSEMBLER__ */

#endif  /* __PMC_DCM_H__ */

OpenPOWER on IntegriCloud