diff options
Diffstat (limited to 'src/lib/pmc_dcm.h')
-rwxr-xr-x | src/lib/pmc_dcm.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/lib/pmc_dcm.h b/src/lib/pmc_dcm.h new file mode 100755 index 0000000..3141aec --- /dev/null +++ b/src/lib/pmc_dcm.h @@ -0,0 +1,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__ */ + |