1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */
29d4fa1a1SMauro Carvalho Chehab /*
39d4fa1a1SMauro Carvalho Chehab  * Support for Intel Camera Imaging ISP subsystem.
49d4fa1a1SMauro Carvalho Chehab  * Copyright (c) 2015, Intel Corporation.
59d4fa1a1SMauro Carvalho Chehab  *
69d4fa1a1SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or modify it
79d4fa1a1SMauro Carvalho Chehab  * under the terms and conditions of the GNU General Public License,
89d4fa1a1SMauro Carvalho Chehab  * version 2, as published by the Free Software Foundation.
99d4fa1a1SMauro Carvalho Chehab  *
109d4fa1a1SMauro Carvalho Chehab  * This program is distributed in the hope it will be useful, but WITHOUT
119d4fa1a1SMauro Carvalho Chehab  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129d4fa1a1SMauro Carvalho Chehab  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139d4fa1a1SMauro Carvalho Chehab  * more details.
149d4fa1a1SMauro Carvalho Chehab  */
159d4fa1a1SMauro Carvalho Chehab 
169d4fa1a1SMauro Carvalho Chehab #ifndef __ISP_PUBLIC_H_INCLUDED__
179d4fa1a1SMauro Carvalho Chehab #define __ISP_PUBLIC_H_INCLUDED__
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab #include <type_support.h>
20f90e73ceSMauro Carvalho Chehab #include "system_local.h"
219d4fa1a1SMauro Carvalho Chehab 
229d4fa1a1SMauro Carvalho Chehab /*! Enable or disable the program complete irq signal of ISP[ID]
239d4fa1a1SMauro Carvalho Chehab 
249d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				SP identifier
259d4fa1a1SMauro Carvalho Chehab  \param	cnd[in]				predicate
269d4fa1a1SMauro Carvalho Chehab 
279d4fa1a1SMauro Carvalho Chehab  \return none, if(cnd) enable(ISP[ID].irq) else disable(ISP[ID].irq)
289d4fa1a1SMauro Carvalho Chehab  */
299d4fa1a1SMauro Carvalho Chehab void cnd_isp_irq_enable(
309d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
319d4fa1a1SMauro Carvalho Chehab     const bool			cnd);
329d4fa1a1SMauro Carvalho Chehab 
339d4fa1a1SMauro Carvalho Chehab /*! Read the state of cell ISP[ID]
349d4fa1a1SMauro Carvalho Chehab 
359d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
369d4fa1a1SMauro Carvalho Chehab  \param	state[out]			isp state structure
379d4fa1a1SMauro Carvalho Chehab  \param	stall[out]			isp stall conditions
389d4fa1a1SMauro Carvalho Chehab 
399d4fa1a1SMauro Carvalho Chehab  \return none, state = ISP[ID].state, stall = ISP[ID].stall
409d4fa1a1SMauro Carvalho Chehab  */
419d4fa1a1SMauro Carvalho Chehab void isp_get_state(
429d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
439d4fa1a1SMauro Carvalho Chehab     isp_state_t			*state,
449d4fa1a1SMauro Carvalho Chehab     isp_stall_t			*stall);
459d4fa1a1SMauro Carvalho Chehab 
469d4fa1a1SMauro Carvalho Chehab /*! Write to the status and control register of ISP[ID]
479d4fa1a1SMauro Carvalho Chehab 
489d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
499d4fa1a1SMauro Carvalho Chehab  \param	reg[in]				register index
509d4fa1a1SMauro Carvalho Chehab  \param value[in]			The data to be written
519d4fa1a1SMauro Carvalho Chehab 
529d4fa1a1SMauro Carvalho Chehab  \return none, ISP[ID].sc[reg] = value
539d4fa1a1SMauro Carvalho Chehab  */
549d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_ctrl_store(
559d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
569d4fa1a1SMauro Carvalho Chehab     const unsigned int	reg,
579d4fa1a1SMauro Carvalho Chehab     const hrt_data		value);
589d4fa1a1SMauro Carvalho Chehab 
599d4fa1a1SMauro Carvalho Chehab /*! Read from the status and control register of ISP[ID]
609d4fa1a1SMauro Carvalho Chehab 
619d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
629d4fa1a1SMauro Carvalho Chehab  \param	reg[in]				register index
639d4fa1a1SMauro Carvalho Chehab  \param value[in]			The data to be written
649d4fa1a1SMauro Carvalho Chehab 
659d4fa1a1SMauro Carvalho Chehab  \return ISP[ID].sc[reg]
669d4fa1a1SMauro Carvalho Chehab  */
679d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H hrt_data isp_ctrl_load(
689d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
699d4fa1a1SMauro Carvalho Chehab     const unsigned int	reg);
709d4fa1a1SMauro Carvalho Chehab 
719d4fa1a1SMauro Carvalho Chehab /*! Get the status of a bitfield in the control register of ISP[ID]
729d4fa1a1SMauro Carvalho Chehab 
739d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
749d4fa1a1SMauro Carvalho Chehab  \param	reg[in]				register index
759d4fa1a1SMauro Carvalho Chehab  \param bit[in]				The bit index to be checked
769d4fa1a1SMauro Carvalho Chehab 
779d4fa1a1SMauro Carvalho Chehab  \return  (ISP[ID].sc[reg] & (1<<bit)) != 0
789d4fa1a1SMauro Carvalho Chehab  */
799d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H bool isp_ctrl_getbit(
809d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
819d4fa1a1SMauro Carvalho Chehab     const unsigned int	reg,
829d4fa1a1SMauro Carvalho Chehab     const unsigned int	bit);
839d4fa1a1SMauro Carvalho Chehab 
849d4fa1a1SMauro Carvalho Chehab /*! Set a bitfield in the control register of ISP[ID]
859d4fa1a1SMauro Carvalho Chehab 
869d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
879d4fa1a1SMauro Carvalho Chehab  \param	reg[in]				register index
889d4fa1a1SMauro Carvalho Chehab  \param bit[in]				The bit index to be set
899d4fa1a1SMauro Carvalho Chehab 
909d4fa1a1SMauro Carvalho Chehab  \return none, ISP[ID].sc[reg] |= (1<<bit)
919d4fa1a1SMauro Carvalho Chehab  */
929d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_ctrl_setbit(
939d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
949d4fa1a1SMauro Carvalho Chehab     const unsigned int	reg,
959d4fa1a1SMauro Carvalho Chehab     const unsigned int	bit);
969d4fa1a1SMauro Carvalho Chehab 
979d4fa1a1SMauro Carvalho Chehab /*! Clear a bitfield in the control register of ISP[ID]
989d4fa1a1SMauro Carvalho Chehab 
999d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
1009d4fa1a1SMauro Carvalho Chehab  \param	reg[in]				register index
1019d4fa1a1SMauro Carvalho Chehab  \param bit[in]				The bit index to be set
1029d4fa1a1SMauro Carvalho Chehab 
1039d4fa1a1SMauro Carvalho Chehab  \return none, ISP[ID].sc[reg] &= ~(1<<bit)
1049d4fa1a1SMauro Carvalho Chehab  */
1059d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_ctrl_clearbit(
1069d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
1079d4fa1a1SMauro Carvalho Chehab     const unsigned int	reg,
1089d4fa1a1SMauro Carvalho Chehab     const unsigned int	bit);
1099d4fa1a1SMauro Carvalho Chehab 
1109d4fa1a1SMauro Carvalho Chehab /*! Write to the DMEM of ISP[ID]
1119d4fa1a1SMauro Carvalho Chehab 
1129d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
1139d4fa1a1SMauro Carvalho Chehab  \param	addr[in]			the address in DMEM
1149d4fa1a1SMauro Carvalho Chehab  \param data[in]			The data to be written
1159d4fa1a1SMauro Carvalho Chehab  \param size[in]			The size(in bytes) of the data to be written
1169d4fa1a1SMauro Carvalho Chehab 
1179d4fa1a1SMauro Carvalho Chehab  \return none, ISP[ID].dmem[addr...addr+size-1] = data
1189d4fa1a1SMauro Carvalho Chehab  */
1199d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_dmem_store(
1209d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
1219d4fa1a1SMauro Carvalho Chehab     unsigned int		addr,
1229d4fa1a1SMauro Carvalho Chehab     const void			*data,
1239d4fa1a1SMauro Carvalho Chehab     const size_t		size);
1249d4fa1a1SMauro Carvalho Chehab 
1259d4fa1a1SMauro Carvalho Chehab /*! Read from the DMEM of ISP[ID]
1269d4fa1a1SMauro Carvalho Chehab 
1279d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
1289d4fa1a1SMauro Carvalho Chehab  \param	addr[in]			the address in DMEM
1299d4fa1a1SMauro Carvalho Chehab  \param data[in]			The data to be read
1309d4fa1a1SMauro Carvalho Chehab  \param size[in]			The size(in bytes) of the data to be read
1319d4fa1a1SMauro Carvalho Chehab 
1329d4fa1a1SMauro Carvalho Chehab  \return none, data = ISP[ID].dmem[addr...addr+size-1]
1339d4fa1a1SMauro Carvalho Chehab  */
1349d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_dmem_load(
1359d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
1369d4fa1a1SMauro Carvalho Chehab     const unsigned int	addr,
1379d4fa1a1SMauro Carvalho Chehab     void				*data,
1389d4fa1a1SMauro Carvalho Chehab     const size_t		size);
1399d4fa1a1SMauro Carvalho Chehab 
1409d4fa1a1SMauro Carvalho Chehab /*! Write a 32-bit datum to the DMEM of ISP[ID]
1419d4fa1a1SMauro Carvalho Chehab 
1429d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
1439d4fa1a1SMauro Carvalho Chehab  \param	addr[in]			the address in DMEM
1449d4fa1a1SMauro Carvalho Chehab  \param data[in]			The data to be written
1459d4fa1a1SMauro Carvalho Chehab  \param size[in]			The size(in bytes) of the data to be written
1469d4fa1a1SMauro Carvalho Chehab 
1479d4fa1a1SMauro Carvalho Chehab  \return none, ISP[ID].dmem[addr] = data
1489d4fa1a1SMauro Carvalho Chehab  */
1499d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_dmem_store_uint32(
1509d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
1519d4fa1a1SMauro Carvalho Chehab     unsigned int		addr,
1529d4fa1a1SMauro Carvalho Chehab     const uint32_t		data);
1539d4fa1a1SMauro Carvalho Chehab 
1549d4fa1a1SMauro Carvalho Chehab /*! Load a 32-bit datum from the DMEM of ISP[ID]
1559d4fa1a1SMauro Carvalho Chehab 
1569d4fa1a1SMauro Carvalho Chehab  \param	ID[in]				ISP identifier
1579d4fa1a1SMauro Carvalho Chehab  \param	addr[in]			the address in DMEM
1589d4fa1a1SMauro Carvalho Chehab  \param data[in]			The data to be read
1599d4fa1a1SMauro Carvalho Chehab  \param size[in]			The size(in bytes) of the data to be read
1609d4fa1a1SMauro Carvalho Chehab 
1619d4fa1a1SMauro Carvalho Chehab  \return none, data = ISP[ID].dmem[addr]
1629d4fa1a1SMauro Carvalho Chehab  */
1639d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H uint32_t isp_dmem_load_uint32(
1649d4fa1a1SMauro Carvalho Chehab     const isp_ID_t		ID,
1659d4fa1a1SMauro Carvalho Chehab     const unsigned int	addr);
1669d4fa1a1SMauro Carvalho Chehab 
1679d4fa1a1SMauro Carvalho Chehab /*! Concatenate the LSW and MSW into a double precision word
1689d4fa1a1SMauro Carvalho Chehab 
1699d4fa1a1SMauro Carvalho Chehab  \param	x0[in]				Integer containing the LSW
1709d4fa1a1SMauro Carvalho Chehab  \param	x1[in]				Integer containing the MSW
1719d4fa1a1SMauro Carvalho Chehab 
1729d4fa1a1SMauro Carvalho Chehab  \return x0 | (x1 << bits_per_vector_element)
1739d4fa1a1SMauro Carvalho Chehab  */
1749d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H uint32_t isp_2w_cat_1w(
1759d4fa1a1SMauro Carvalho Chehab     const u16		x0,
1769d4fa1a1SMauro Carvalho Chehab     const uint16_t		x1);
1779d4fa1a1SMauro Carvalho Chehab 
1789d4fa1a1SMauro Carvalho Chehab unsigned int isp_is_ready(isp_ID_t ID);
1799d4fa1a1SMauro Carvalho Chehab 
1809d4fa1a1SMauro Carvalho Chehab unsigned int isp_is_sleeping(isp_ID_t ID);
1819d4fa1a1SMauro Carvalho Chehab 
1829d4fa1a1SMauro Carvalho Chehab void isp_start(isp_ID_t ID);
1839d4fa1a1SMauro Carvalho Chehab 
1849d4fa1a1SMauro Carvalho Chehab void isp_wake(isp_ID_t ID);
1859d4fa1a1SMauro Carvalho Chehab 
1869d4fa1a1SMauro Carvalho Chehab #endif /* __ISP_PUBLIC_H_INCLUDED__ */
187