| 1 | /*************************************************************************** |
|---|
| 2 | * Copyright (c) 2006-2012, Broadcom Corporation |
|---|
| 3 | * All Rights Reserved |
|---|
| 4 | * Confidential Property of Broadcom Corporation |
|---|
| 5 | * |
|---|
| 6 | * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE |
|---|
| 7 | * AGREEMENT BETWEEN THE USER AND BROADCOM. YOU HAVE NO RIGHT TO USE OR |
|---|
| 8 | * EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. |
|---|
| 9 | * |
|---|
| 10 | * $brcm_Workfile: bape_reg_priv.h $ |
|---|
| 11 | * $brcm_Revision: Hydra_Software_Devel/3 $ |
|---|
| 12 | * $brcm_Date: 2/2/12 5:42p $ |
|---|
| 13 | * |
|---|
| 14 | * Module Description: APE Register Routines |
|---|
| 15 | * |
|---|
| 16 | * Revision History: |
|---|
| 17 | * |
|---|
| 18 | * $brcm_Log: /magnum/portinginterface/ape/7422/bape_reg_priv.h $ |
|---|
| 19 | * |
|---|
| 20 | * Hydra_Software_Devel/3 2/2/12 5:42p gskerl |
|---|
| 21 | * SW7429-18: Added BAPE_Reg_P_ReadField() and BAPE_Reg_P_ReadField_isr(). |
|---|
| 22 | * |
|---|
| 23 | * Hydra_Software_Devel/2 1/13/12 3:31p gskerl |
|---|
| 24 | * SW7429-18: Added BAPE_ wrappers for BCHP_ field macros in order to |
|---|
| 25 | * provide macro expansion for arguments. |
|---|
| 26 | * |
|---|
| 27 | * Hydra_Software_Devel/1 11/14/11 3:14p gskerl |
|---|
| 28 | * SW7429-18: Merging 7429 changes back to main branch. |
|---|
| 29 | * |
|---|
| 30 | * Hydra_Software_Devel/SW7429-18/3 11/7/11 2:03p gskerl |
|---|
| 31 | * SW7429-18: Fixed parentheses in BAPE_Reg_P_Update() and |
|---|
| 32 | * BAPE_Reg_P_Update_isr() |
|---|
| 33 | * |
|---|
| 34 | * Hydra_Software_Devel/SW7429-18/2 10/25/11 5:33p jgarrett |
|---|
| 35 | * SW7429-18: Adding _isr version of InitFieldList |
|---|
| 36 | * |
|---|
| 37 | * Hydra_Software_Devel/SW7429-18/1 10/21/11 6:40p jgarrett |
|---|
| 38 | * SW7429-18: Initial compileable version for 7429 |
|---|
| 39 | * |
|---|
| 40 | ***************************************************************************/ |
|---|
| 41 | #ifndef BAPE_REG_PRIV_H_ |
|---|
| 42 | #define BAPE_REG_PRIV_H_ |
|---|
| 43 | |
|---|
| 44 | #include "breg_mem.h" |
|---|
| 45 | |
|---|
| 46 | /* Compute Array Register Address */ |
|---|
| 47 | #define BAPE_Reg_P_GetArrayAddress(ArrayName, ArrayIndex) (BDBG_ASSERT((ArrayIndex)<=BCHP_##ArrayName##_ARRAY_END),(BCHP_##ArrayName##_ARRAY_BASE)+((ArrayIndex)*((BCHP_##ArrayName##_ARRAY_ELEMENT_SIZE)/8))) |
|---|
| 48 | |
|---|
| 49 | /* Read/Write registers */ |
|---|
| 50 | #define BAPE_Reg_P_Read(hApe, regAddr) (BREG_Read32((hApe)->regHandle, (regAddr))) |
|---|
| 51 | #define BAPE_Reg_P_Write(hApe, regAddr, regVal) (BREG_Write32((hApe)->regHandle, (regAddr), (regVal))) |
|---|
| 52 | |
|---|
| 53 | #define BAPE_Reg_P_Read_isr(hApe, regAddr) (BREG_Read32_isr((hApe)->regHandle, (regAddr))) |
|---|
| 54 | #define BAPE_Reg_P_Write_isr(hApe, regAddr, regVal) (BREG_Write32_isr((hApe)->regHandle, (regAddr), (regVal))) |
|---|
| 55 | |
|---|
| 56 | #define BAPE_Reg_P_ReadField(hApe, regAddr, regName, fieldName) BCHP_GET_FIELD_DATA(BAPE_Reg_P_Read (hApe, regAddr),regName,fieldName) |
|---|
| 57 | #define BAPE_Reg_P_ReadField_isr(hApe, regAddr, regName, fieldName) BCHP_GET_FIELD_DATA(BAPE_Reg_P_Read_isr(hApe, regAddr),regName,fieldName) |
|---|
| 58 | |
|---|
| 59 | /* Update registers based on address, mask, value */ |
|---|
| 60 | #define BAPE_Reg_P_Update(hApe, regAddr, regMask, regVal) (BREG_Write32((hApe)->regHandle, (regAddr), (BREG_Read32((hApe)->regHandle, (regAddr)) & ~(regMask)) | (regVal))) |
|---|
| 61 | #define BAPE_Reg_P_UpdateAtomic(hApe, regAddr, regMask, regVal) (BREG_AtomicUpdate32((hApe)->regHandle, regAddr, regMask, regVal)) |
|---|
| 62 | |
|---|
| 63 | #define BAPE_Reg_P_Update_isr(hApe, regAddr, regMask, regVal) (BREG_Write32_isr((hApe)->regHandle, (regAddr), (BREG_Read32((hApe)->regHandle, (regAddr)) & ~(regMask)) | (regVal))) |
|---|
| 64 | #define BAPE_Reg_P_UpdateAtomic_isr(hApe, regAddr, regMask, regVal) (BREG_AtomicUpdate32_isr((hApe)->regHandle, regAddr, regMask, regVal)) |
|---|
| 65 | |
|---|
| 66 | /* Update single field of a register */ |
|---|
| 67 | #define BAPE_Reg_P_UpdateField(hApe, regAddr, regName, fieldName, fieldData) (BAPE_Reg_P_Update(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_DATA(regName, fieldName, fieldData))) |
|---|
| 68 | #define BAPE_Reg_P_UpdateFieldAtomic(hApe, regAddr, regName, fieldName, fieldData) (BAPE_Reg_P_AtomicUpdate(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_DATA(regName, fieldName, fieldData))) |
|---|
| 69 | |
|---|
| 70 | #define BAPE_Reg_P_UpdateField_isr(hApe, regAddr, regName, fieldName, fieldData) (BAPE_Reg_P_Update_isr(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_DATA(regName, fieldName, fieldData))) |
|---|
| 71 | #define BAPE_Reg_P_UpdateFieldAtomic_isr(hApe, regAddr, regName, fieldName, fieldData) (BAPE_Reg_P_AtomicUpdate_isr(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_DATA(regName, fieldName, fieldData))) |
|---|
| 72 | |
|---|
| 73 | /* Update single enum field of a register */ |
|---|
| 74 | #define BAPE_Reg_P_UpdateEnum(hApe, regAddr, regName, fieldName, fieldEnumVal) (BAPE_Reg_P_Update(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_ENUM(regName, fieldName, fieldEnumVal))) |
|---|
| 75 | #define BAPE_Reg_P_UpdateEnumAtomic(hApe, regAddr, regName, fieldName, fieldEnumVal) (BAPE_Reg_P_AtomicUpdate(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_ENUM(regName, fieldName, fieldEnumVal))) |
|---|
| 76 | |
|---|
| 77 | #define BAPE_Reg_P_UpdateEnum_isr(hApe, regAddr, regName, fieldName, fieldEnumVal) (BAPE_Reg_P_Update_isr(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_ENUM(regName, fieldName, fieldEnumVal))) |
|---|
| 78 | #define BAPE_Reg_P_UpdateEnumAtomic_isr(hApe, regAddr, regName, fieldName, fieldEnumVal) (BAPE_Reg_P_AtomicUpdate_isr(hApe, regAddr, BCHP_MASK(regName, fieldName), BCHP_FIELD_ENUM(regName, fieldName, fieldEnumVal))) |
|---|
| 79 | |
|---|
| 80 | /* Create some wrapper macros for the BCHP_ field macros. |
|---|
| 81 | This is needed to allow for macro-expansion of arguments. |
|---|
| 82 | Currently, BCHP_FIELD_ENUM, BCHP_MASK, and BCHP_SHIFT do NOT |
|---|
| 83 | macro-expand their arguments. */ |
|---|
| 84 | #define BAPE_P_FIELD_ENUM(Register,Field,Name) \ |
|---|
| 85 | BCHP_FIELD_ENUM(Register,Field,Name) |
|---|
| 86 | |
|---|
| 87 | #define BAPE_P_BCHP_MASK(Register,Field) \ |
|---|
| 88 | BCHP_MASK(Register,Field) |
|---|
| 89 | |
|---|
| 90 | #define BAPE_P_BCHP_SHIFT(Register,Field) \ |
|---|
| 91 | BCHP_SHIFT(Register,Field) |
|---|
| 92 | |
|---|
| 93 | #define BAPE_P_BCHP_ENUM_private(Register,Field,Name) \ |
|---|
| 94 | BCHP_##Register##_##Field##_##Name |
|---|
| 95 | |
|---|
| 96 | #define BAPE_P_BCHP_ENUM(Register,Field,Name) \ |
|---|
| 97 | BAPE_P_BCHP_ENUM_private(Register,Field,Name) /* Using wrapper macro to provide macro-expansion of args */ |
|---|
| 98 | |
|---|
| 99 | |
|---|
| 100 | /* Field List */ |
|---|
| 101 | BDBG_OBJECT_ID_DECLARE(BAPE_Reg_P_FieldList); |
|---|
| 102 | typedef struct BAPE_Reg_P_FieldList |
|---|
| 103 | { |
|---|
| 104 | BDBG_OBJECT(BAPE_Reg_P_FieldList) |
|---|
| 105 | uint32_t mask, value; |
|---|
| 106 | BAPE_Handle hApe; |
|---|
| 107 | }BAPE_Reg_P_FieldList; |
|---|
| 108 | |
|---|
| 109 | /* Initialize Field List */ |
|---|
| 110 | #define BAPE_Reg_P_InitFieldList(ApeHandle, FieldList) do { BDBG_OBJECT_SET(FieldList, BAPE_Reg_P_FieldList); (FieldList)->mask=0; (FieldList)->value=0; (FieldList)->hApe=(ApeHandle); } while(0) |
|---|
| 111 | #define BAPE_Reg_P_InitFieldList_isr BAPE_Reg_P_InitFieldList |
|---|
| 112 | |
|---|
| 113 | /* Add Value to field list */ |
|---|
| 114 | #define BAPE_Reg_P_AddMaskValueToFieldList_isr BAPE_Reg_P_AddMaskValueToFieldList |
|---|
| 115 | void BAPE_Reg_P_AddMaskValueToFieldList(BAPE_Reg_P_FieldList *pFieldList, uint32_t mask, uint32_t value); |
|---|
| 116 | |
|---|
| 117 | #define BAPE_Reg_P_AddToFieldList(FieldList, RegName, FieldName, FieldData) BAPE_Reg_P_AddMaskValueToFieldList(FieldList, BCHP_MASK(RegName, FieldName), BCHP_FIELD_DATA(RegName, FieldName, FieldData)) |
|---|
| 118 | #define BAPE_Reg_P_AddEnumToFieldList(FieldList, RegName, FieldName, FieldEnum) BAPE_Reg_P_AddMaskValueToFieldList(FieldList, BCHP_MASK(RegName, FieldName), BCHP_FIELD_ENUM(RegName, FieldName, FieldEnum)) |
|---|
| 119 | |
|---|
| 120 | #define BAPE_Reg_P_AddToFieldList_isr(FieldList, RegName, FieldName, FieldData) BAPE_Reg_P_AddMaskValueToFieldList_isr(FieldList, BCHP_MASK(RegName, FieldName), BCHP_FIELD_DATA(RegName, FieldName, FieldData)) |
|---|
| 121 | #define BAPE_Reg_P_AddEnumToFieldList_isr(FieldList, RegName, FieldName, FieldEnum) BAPE_Reg_P_AddMaskValueToFieldList_isr(FieldList, BCHP_MASK(RegName, FieldName), BCHP_FIELD_ENUM(RegName, FieldName, FieldEnum)) |
|---|
| 122 | |
|---|
| 123 | /* Apply field list to a register */ |
|---|
| 124 | void BAPE_Reg_P_ApplyFieldList(BAPE_Reg_P_FieldList *pFieldList, uint32_t address); |
|---|
| 125 | void BAPE_Reg_P_ApplyFieldListAtomic(BAPE_Reg_P_FieldList *pFieldList, uint32_t address); |
|---|
| 126 | |
|---|
| 127 | void BAPE_Reg_P_ApplyFieldList_isr(BAPE_Reg_P_FieldList *pFieldList, uint32_t address); |
|---|
| 128 | void BAPE_Reg_P_ApplyFieldListAtomic_isr(BAPE_Reg_P_FieldList *pFieldList, uint32_t address); |
|---|
| 129 | |
|---|
| 130 | #endif /* !defined BAPE_REG_PRIV_H_ */ |
|---|