blackhawk_tsc_dependencies.h (9604B)
1 /************************************************************************************** 2 ************************************************************************************** 3 * * 4 * Revision : * 5 * * 6 * Description : API Dependencies to be provided by IP user * 7 * * 8 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 9 * 10 * Copyright 2007-2019 Broadcom Inc. All rights reserved. * 11 * No portions of this material may be reproduced in any form without * 12 * the written permission of: * 13 * Broadcom Corporation * 14 * 5300 California Avenue * 15 * Irvine, CA 92617 * 16 * * 17 * All information contained in this document is Broadcom Corporation * 18 * company private proprietary, and trade secret. * 19 */ 20 21 /** @file blackhawk_tsc_dependencies.h 22 * Dependencies to be provided by IP User 23 */ 24 25 #ifndef BLACKHAWK_TSC_API_DEPENDENCIES_H 26 #define BLACKHAWK_TSC_API_DEPENDENCIES_H 27 28 #include "common/srds_api_err_code.h" 29 #include "common/srds_api_types.h" 30 31 /** Read a register from the currently selected Serdes IP Lane. 32 * @param sa__ is an opaque state vector passed through to device access functions. 33 * @param address Address of register to be read 34 * @param *val value read out from the register 35 * @return Error code generated by read function (returns ERR_CODE_NONE if no errors) 36 */ 37 err_code_t blackhawk_tsc_pmd_rdt_reg(srds_access_t *sa__, uint16_t address, uint16_t *val); 38 39 /** Write to a register from the currently selected Serdes IP Lane. 40 * @param sa__ is an opaque state vector passed through to device access functions. 41 * @param address Address of register to be written 42 * @param val Value to be written to the register 43 * @return Error code generated by write function (returns ERR_CODE_NONE if no errors) 44 */ 45 err_code_t blackhawk_tsc_pmd_wr_reg(srds_access_t *sa__, uint16_t address, uint16_t val); 46 47 /** Masked Register Write to the currently selected Serdes IP core/lane. 48 * If using Serdes MDIO controller to access the registers, implement this function using blackhawk_tsc_pmd_mdio_mwr_reg(..) 49 * 50 * If NOT using a Serdes MDIO controller or the Serdes PMI Masked write feature, please use the following code to 51 * implement this function 52 * 53 * blackhawk_tsc_pmd_wr_reg(addr, ((blackhawk_tsc_pmd_rd_reg(addr) & ~mask) | (mask & (val << lsb)))); 54 * 55 * @param sa__ is an opaque state vector passed through to device access functions. 56 * @param addr Address of register to be written 57 * @param mask 16-bit mask indicating the position of the field with bits of 1s 58 * @param lsb LSB of the field 59 * @param val 16bit value to be written 60 * @return Error code generated by write function (returns ERR_CODE_NONE if no errors) 61 */ 62 err_code_t blackhawk_tsc_pmd_mwr_reg(srds_access_t *sa__, uint16_t addr, uint16_t mask, uint8_t lsb, uint16_t val); 63 64 /** Write to a PRAM location for the currently selected Serdes IP Core. 65 * The address is auto-incrementing, per the PRAM interface specification. 66 * @param sa__ is an opaque state vector passed through to device access functions. 67 * @param val Value to be written 68 * @return Error code generated by write function (returns ERR_CODE_NONE if no errors) 69 */ 70 err_code_t blackhawk_tsc_pmd_wr_pram(srds_access_t *sa__, uint8_t val); 71 72 /** Write message to the logger with the designated verbose level. 73 * Output is sent to stdout and a logfile 74 * @param message_verbose_level Verbose level for the current message 75 * @param *format Format string as in printf 76 * @param ... Additional variables used as in printf 77 * @return Error code generated by function (returns ERR_CODE_NONE if no errors) 78 */ 79 #ifdef SRDS_API_ALL_FUNCTIONS_HAVE_ACCESS_STRUCT 80 int logger_write(srds_access_t *sa__, int message_verbose_level, const char *format, ...); 81 #else 82 int logger_write(int message_verbose_level, const char *format, ...); 83 #endif 84 85 /** Delay the execution of the code for atleast specified amount of time in nanoseconds. 86 * This function is used ONLY for delays less than 1 microsecond, non-zero error code may be returned otherwise. 87 * The user can implement this as an empty function if their register access latency exceeds 1 microsecond. 88 * @param delay_ns Delay in nanoseconds 89 * @return Error code generated by delay function (returns ERR_CODE_NONE if no errors) 90 */ 91 #ifdef SRDS_API_ALL_FUNCTIONS_HAVE_ACCESS_STRUCT 92 err_code_t blackhawk_tsc_delay_ns(srds_access_t *sa__, uint16_t delay_ns); 93 #else 94 err_code_t blackhawk_tsc_delay_ns(uint16_t delay_ns); 95 #endif 96 97 /** Delay the execution of the code for atleast specified amount of time in microseconds. 98 * For longer delays, accuracy is required. When requested delay is > 100ms, the implemented delay is assumed 99 * to be < 10% bigger than requested. 100 * This function is used ONLY for delays greater than or equal to 1 microsecond. 101 * @param delay_us Delay in microseconds 102 * @return Error code generated by delay function (returns ERR_CODE_NONE if no errors) 103 */ 104 #ifdef SRDS_API_ALL_FUNCTIONS_HAVE_ACCESS_STRUCT 105 err_code_t blackhawk_tsc_delay_us(srds_access_t *sa__, uint32_t delay_us); 106 #else 107 err_code_t blackhawk_tsc_delay_us(uint32_t delay_us); 108 #endif 109 110 /** Delay the execution of the code for atleast specified amount of time in milliseconds. 111 * For longer delays, accuracy is required. When requested delay is > 100ms, the implemented delay is assumed 112 * to be < 10% bigger than requested. 113 * This function is used ONLY for delays greater than or equal to 1 millisecond. 114 * @param delay_ms Delay in milliseconds 115 * @return Error code generated by delay function (returns ERR_CODE_NONE if no errors) 116 */ 117 #ifdef SRDS_API_ALL_FUNCTIONS_HAVE_ACCESS_STRUCT 118 err_code_t blackhawk_tsc_delay_ms(srds_access_t *sa__, uint32_t delay_ms); 119 #else 120 err_code_t blackhawk_tsc_delay_ms(uint32_t delay_ms); 121 #endif 122 123 /** Return the address of current selected Serdes IP Core. 124 * @param sa__ is an opaque state vector passed through to device access functions. 125 * @return the IP level address of the current core. 126 */ 127 uint8_t blackhawk_tsc_get_core(srds_access_t *sa__); 128 129 /** Return the logical address of current selected Serdes IP lane. 130 * @param sa__ is an opaque state vector passed through to device access functions. 131 * @return the IP level address of the current lane. 0 to N-1, for an N lane IP 132 */ 133 uint8_t blackhawk_tsc_get_lane(srds_access_t *sa__); 134 135 #define blackhawk_tsc_get_physical_lane blackhawk_tsc_get_lane 136 137 /** Set the logical address of current selected Serdes IP lane. Used in diagnostic 138 * and core-level management functions. 139 * @param sa__ is an opaque state vector passed through to device access functions. 140 * @param lane_index is the lane index 141 * @return Any error code generated during execution; ERR_CODE NONE otherwise. 142 */ 143 err_code_t blackhawk_tsc_set_lane(srds_access_t *sa__, uint8_t lane_index); 144 145 #define blackhawk_tsc_set_physical_lane blackhawk_tsc_set_lane 146 147 /** Return the address of current selected Serdes IP PLL. 148 * @param sa__ is an opaque state vector passed through to device access functions. 149 * @return the IP level address of the current PLL. 0 to N-1, for an N-PLL IP 150 */ 151 uint8_t blackhawk_tsc_get_pll_idx(srds_access_t *sa__); 152 153 /** Set the address of current selected Serdes IP PLL. Its purpose is to select which 154 * PLL's registers is accessed when accessing AMS_PLL_COM, CORE_PLL_COM, & PLL_CAL_COM. 155 * This is a selection similar to selecting lane registers. 156 * Used in diagnostic and core-level management functions. 157 * @param sa__ is an opaque state vector passed through to device access functions. 158 * @param pll_index is the PLL index 159 * @return Any error code generated during execution; ERR_CODE NONE otherwise. 160 */ 161 err_code_t blackhawk_tsc_set_pll_idx(srds_access_t *sa__, uint8_t pll_index); 162 163 /** Return the index of current selected Serdes IP micro. 164 * NOTE: The micro_idx is selected using same bits as PLL selection in AER or PMI address. 165 * @param sa__ is an opaque state vector passed through to device access functions. 166 * @return the IP level index of the current micro. 0 to N-1, for an N-micro IP 167 */ 168 uint8_t blackhawk_tsc_get_micro_idx(srds_access_t *sa__); 169 170 /** Set the index of current selected Serdes IP micro. Its purpose is to select which 171 * micro's registers is accessed when accessing MICRO_E_COM.This is a selection similar to 172 * selecting lane registers. 173 * Used in diagnostic and core-level management functions. 174 * NOTE: The micro_idx is selected using same bits as PLL selection in AER or PMI address. 175 * @param sa__ is an opaque state vector passed through to device access functions. 176 * @param micro_index is the micro index 177 * @return Any error code generated during execution; ERR_CODE NONE otherwise. 178 */ 179 err_code_t blackhawk_tsc_set_micro_idx(srds_access_t *sa__, uint8_t micro_index); 180 181 srds_info_t *blackhawk_tsc_INTERNAL_get_blackhawk_tsc_info_ptr(srds_access_t *sa__); 182 183 #endif /* BLACKHAWK_TSC_API_DEPENDENCIES_H */ 184