| /* |
| * Copyright (C) 2018 Synaptics Incorporated. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND |
| * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, |
| * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY |
| * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR |
| * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE |
| * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND |
| * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF |
| * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT |
| * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY |
| * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS. |
| */ |
| |
| #ifndef _BCMBUF_H_ |
| #define _BCMBUF_H_ |
| |
| typedef unsigned int UINT32; |
| typedef void *SHM_HANDLE; |
| |
| typedef struct DHUB_CFGQ_T { |
| SHM_HANDLE handle; |
| UINT32 shm_offset; |
| UINT32 *addr; |
| UINT32 len; |
| UINT32 *phy_addr; |
| } DHUB_CFGQ; |
| |
| /* structure of a buffer descriptor */ |
| typedef struct BCMBUF_T { |
| unsigned int *head; |
| unsigned int *tail; |
| unsigned int *writer; |
| int size; |
| SHM_HANDLE handle; |
| UINT32 shm_offset; |
| unsigned int *dv1_head; |
| unsigned int *dv2_head; |
| unsigned int *dv3_head; |
| int subID; |
| UINT32 *phy_addr; |
| } BCMBUF; |
| |
| /****************************************************************************** |
| * FUNCTION: allocate register programming buffer |
| * PARAMS: *buf - pointer to a register programming buffer |
| * : size - size of the buffer to allocate |
| * : - (should be a multiple of 4) |
| * RETURN: 1 - succeed |
| * 0 - failed to initialize a BCM buffer |
| ******************************************************************************/ |
| int VPP_BCMBUF_Create(BCMBUF *pbcmbuf, int size); |
| |
| /****************************************************************************** |
| * FUNCTION: free register programming buffer |
| * PARAMS: *buf - pointer to a register programming buffer |
| * RETURN: 1 - succeed |
| * 0 - failed to initialize a BCM buffer |
| ******************************************************************************/ |
| int VPP_BCMBUF_Destroy(BCMBUF *pbcmbuf); |
| |
| /****************************************************************************** |
| * FUNCTION: reset a register programming buffer |
| * PARAMS: *buf - pointer to a register programming buffer |
| * RETURN: 1 - succeed |
| * 0 - failed to initialize a BCM buffer |
| ******************************************************************************/ |
| int VPP_BCMBUF_Reset(BCMBUF *pbcmbuf); |
| |
| /****************************************************************************** |
| * FUNCTION: selest BCM sub-buffer to use |
| * PARAMS: *buf - pointer to the buffer descriptor |
| * subID - DV_1, DV_2, DV_3 |
| ******************************************************************************/ |
| void VPP_BCMBUF_Select(BCMBUF *pbcmbuf, int subID); |
| |
| /****************************************************************************** |
| * FUNCTION: write register address (4bytes) and value |
| * (4bytes) to the buffer |
| * PARAMS: *buf - pointer to the buffer descriptor |
| * address - address of the register to be set |
| * value - the value to be written into the |
| * register |
| * RETURN: 1 - succeed |
| * 0 - register programming buffer is full |
| ******************************************************************************/ |
| int VPP_BCMBUF_Write(BCMBUF *pbcmbuf, unsigned int address, unsigned int value); |
| |
| /****************************************************************************** |
| * FUNCTION: write a block of data to BCM buffer |
| * PARAMS: *buf - pointer to the buffer descriptor |
| * *pdata - pointer to the data |
| * length - the length of the data to be written |
| * to BCM buffer |
| * RETURN: 1 - succeed |
| * 0 - register programming buffer is full |
| ******************************************************************************/ |
| int VPP_BCMBUF_WriteBlock(BCMBUF *pbcmbuf, unsigned int *pdata, |
| unsigned int length); |
| |
| /****************************************************************************** |
| * FUNCTION: do the hardware transmission |
| * PARAMS: block - 0:return without waiting for |
| * transactionfinishing |
| * 1:return after waiting for |
| * transaction finishing |
| ******************************************************************************/ |
| void VPP_BCMBUF_HardwareTrans(BCMBUF *pbcmbuf, int block); |
| |
| /****************************************************************************** |
| * FUNCTION: do the hardware transaction |
| * PARAMS: pdata - pointer to the data block |
| * length - data length for transaction |
| ******************************************************************************/ |
| void VPP_BCMBUF_HardwareTransBlock(const unsigned int *pdata, |
| unsigned int length, int block); |
| |
| /****************************************************************************** |
| * FUNCTION: commit cfgQ which contains BCM DHUB programming info to interrupt |
| * service routine |
| * PARAMS: *cfgQ - cfgQ |
| * cpcbID - cpcb ID which this cmdQ belongs to |
| * intrType - interrupt type which this cmdQ belongs to: |
| * 0-VBI, 1-VDE |
| * NOTE: this API is only called from VBI/VDE ISR. |
| *****************************************************************************/ |
| int VPP_BCMDHUB_CFGQ_Commit(DHUB_CFGQ *cfgQ, int cpcbID, int intrType); |
| |
| /****************************************************************************** |
| * FUNCTION: send a BCM BUF info info to a BCM cfgQ |
| * PARAMS: *pbcmbuf - pointer to the BCMBUF |
| * *cfgQ - target BCM cfgQ |
| * NOTE: this API is only called from VBI/VDE ISR. |
| *****************************************************************************/ |
| int VPP_BCMBUF_To_CFGQ(BCMBUF *pbcmbuf, DHUB_CFGQ *cfgQ); |
| |
| /****************************************************************************** |
| * FUNCTION: send a raw BCM BUF info to a BCM cfgQ |
| * PARAMS: pdata - pointer to the data block |
| * length - data length for transaction |
| * *cfgQ - target BCM cfgQ |
| * NOTE: this API is only called from VBI/VDE ISR. |
| *****************************************************************************/ |
| void VPP_BCMBUF_Raw_To_CFGQ(UINT32 *pdata, UINT32 length, |
| DHUB_CFGQ *cfgQ); |
| |
| /****************************************************************************** |
| * FUNCTION: send a BCM cfgQ info to a BCM cfgQ |
| * PARAMS: src_cfgQ - pointer to the source BCM cfgQ |
| * *cfgQ - target BCM cfgQ |
| * NOTE: this API is only called from VBI/VDE ISR. |
| *****************************************************************************/ |
| void VPP_CFGQ_To_CFGQ(DHUB_CFGQ *src_cfgQ, DHUB_CFGQ *cfgQ); |
| |
| /****************************************************************************** |
| * FUNCTION: Write Register block of array using DHUB or Direct REG Write |
| * PARAMS: start - array pointer |
| * size - array size |
| * use_dhub - flag to use dhub or not |
| *****************************************************************************/ |
| void VPP_REG_Block_Write(unsigned int *start, unsigned int size, int use_dhub); |
| |
| #endif |
| |