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__ */
|