summaryrefslogtreecommitdiff
path: root/source/hal/source/components/vsi/include
diff options
context:
space:
mode:
Diffstat (limited to 'source/hal/source/components/vsi/include')
-rw-r--r--source/hal/source/components/vsi/include/arm_vsi.h121
-rw-r--r--source/hal/source/components/vsi/include/video_drv.h142
2 files changed, 263 insertions, 0 deletions
diff --git a/source/hal/source/components/vsi/include/arm_vsi.h b/source/hal/source/components/vsi/include/arm_vsi.h
new file mode 100644
index 0000000..1d307d1
--- /dev/null
+++ b/source/hal/source/components/vsi/include/arm_vsi.h
@@ -0,0 +1,121 @@
+/*
+* SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/*
+ * Virtual Streaming Interface (VSI)
+ */
+
+#ifndef __ARM_VSI_H
+#define __ARM_VSI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __IM
+#define __IM volatile const /*! Defines 'read only' structure member permissions */
+#endif
+#ifndef __OM
+#define __OM volatile /*! Defines 'write only' structure member permissions */
+#endif
+#ifndef __IOM
+#define __IOM volatile /*! Defines 'read/write' structure member permissions */
+#endif
+
+#include <stdint.h>
+
+/* IRQ number assignment (should be moved to device header) */
+#define ARM_VSI0_IRQn 224
+#define ARM_VSI1_IRQn 225
+#define ARM_VSI2_IRQn 226
+#define ARM_VSI3_IRQn 227
+#define ARM_VSI4_IRQn 228
+#define ARM_VSI5_IRQn 229
+#define ARM_VSI6_IRQn 230
+#define ARM_VSI7_IRQn 231
+
+/// Structure type to access the virtual streaming interface
+typedef struct
+{
+ /// Interrupt Request (IRQ)
+ struct {
+ __IOM uint32_t Enable; /*!< (R/W) IRQ Enable */
+ __OM uint32_t Set; /*!< (-/W) IRQ Set */
+ __OM uint32_t Clear; /*!< (-/W) IRQ Clear */
+ __IM uint32_t Status; /*!< (R/-) IRQ Status */
+ } IRQ;
+ uint32_t reserved1[60];
+ /// Time counter with 1MHz input frequency
+ struct {
+ __IOM uint32_t Control; /*!< (R/W) Timer Control */
+ __IOM uint32_t Interval; /*!< (R/W) Timer Interval Value (in microseconds) */
+ __IM uint32_t Count; /*!< (R/-) Timer Overflow Count */
+ } Timer;
+ uint32_t reserved2[61];
+ /// Direct Memory Access (DMA) Controller
+ struct {
+ __IOM uint32_t Control; /*!< (R/W) DMA Control */
+ __IOM uint32_t Address; /*!< (R/W) DMA Memory Start Address */
+ __IOM uint32_t BlockSize; /*!< (R/W) DMA Block Size (in bytes, multiple of 4) */
+ __IOM uint32_t BlockNum; /*!< (R/W) DMA Number of Blocks (must be 2^n) */
+ __IM uint32_t BlockIndex; /*!< (R/-) DMA Block Index */
+ } DMA;
+ uint32_t reserved3[59];
+ __IOM uint32_t Regs[64]; /*!< (R/W) User Registers */
+} ARM_VSI_Type;
+
+/* VSI Timer Control Definitions for Timer.Control register */
+#define ARM_VSI_Timer_Run_Pos 0U /*!< Timer Control: Run Position */
+#define ARM_VSI_Timer_Run_Msk (1UL << ARM_VSI_Timer_Run_Pos) /*!< Timer Control: Run Mask */
+#define ARM_VSI_Timer_Periodic_Pos 1U /*!< Timer Control: Periodic Position */
+#define ARM_VSI_Timer_Periodic_Msk (1UL << ARM_VSI_Timer_Periodic_Pos) /*!< Timer Control: Periodic Mask */
+#define ARM_VSI_Timer_Trig_IRQ_Pos 2U /*!< Timer Control: Trig_IRQ Position */
+#define ARM_VSI_Timer_Trig_IRQ_Msk (1UL << ARM_VSI_Timer_Trig_IRQ_Pos) /*!< Timer Control: Trig_IRQ Mask */
+#define ARM_VSI_Timer_Trig_DMA_Pos 3U /*!< Timer Control: Trig_DAM Position */
+#define ARM_VSI_Timer_Trig_DMA_Msk (1UL << ARM_VSI_Timer_Trig_DMA_Pos) /*!< Timer Control: Trig_DMA Mask */
+
+/* VSI DMA Control Definitions for DMA.Control register */
+#define ARM_VSI_DMA_Enable_Pos 0U /*!< DMA Control: Enable Position */
+#define ARM_VSI_DMA_Enable_Msk (1UL << ARM_VSI_DMA_Enable_Pos) /*!< DMA Control: Enable Mask */
+#define ARM_VSI_DMA_Direction_Pos 1U /*!< DMA Control: Direction Position */
+#define ARM_VSI_DMA_Direction_Msk (1UL << ARM_VSI_DMA_Direction_Pos) /*!< DMA Control: Direction Mask */
+#define ARM_VSI_DMA_Direction_P2M (0UL*ARM_VSI_DMA_Direction_Msk) /*!< DMA Control: Direction P2M */
+#define ARM_VSI_DMA_Direction_M2P (1UL*ARM_VSI_DMA_Direction_Msk) /*!< DMA Control: Direction M2P */
+
+/* Memory mapping of 8 VSI peripherals */
+#define ARM_VSI0_BASE (0x4FF00000UL) /*!< VSI 0 Base Address */
+#define ARM_VSI1_BASE (0x4FF10000UL) /*!< VSI 1 Base Address */
+#define ARM_VSI2_BASE (0x4FF20000UL) /*!< VSI 2 Base Address */
+#define ARM_VSI3_BASE (0x4FF30000UL) /*!< VSI 3 Base Address */
+#define ARM_VSI4_BASE (0x4FF40000UL) /*!< VSI 4 Base Address */
+#define ARM_VSI5_BASE (0x4FF50000UL) /*!< VSI 5 Base Address */
+#define ARM_VSI6_BASE (0x4FF60000UL) /*!< VSI 6 Base Address */
+#define ARM_VSI7_BASE (0x4FF70000UL) /*!< VSI 7 Base Address */
+#define ARM_VSI0 ((ARM_VSI_Type *)ARM_VSI0_BASE) /*!< VSI 0 struct */
+#define ARM_VSI1 ((ARM_VSI_Type *)ARM_VSI1_BASE) /*!< VSI 1 struct */
+#define ARM_VSI2 ((ARM_VSI_Type *)ARM_VSI2_BASE) /*!< VSI 2 struct */
+#define ARM_VSI3 ((ARM_VSI_Type *)ARM_VSI3_BASE) /*!< VSI 3 struct */
+#define ARM_VSI4 ((ARM_VSI_Type *)ARM_VSI4_BASE) /*!< VSI 4 struct */
+#define ARM_VSI5 ((ARM_VSI_Type *)ARM_VSI5_BASE) /*!< VSI 5 struct */
+#define ARM_VSI6 ((ARM_VSI_Type *)ARM_VSI6_BASE) /*!< VSI 6 struct */
+#define ARM_VSI7 ((ARM_VSI_Type *)ARM_VSI7_BASE) /*!< VSI 7 struct */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ARM_VSI_H */
diff --git a/source/hal/source/components/vsi/include/video_drv.h b/source/hal/source/components/vsi/include/video_drv.h
new file mode 100644
index 0000000..73a6ef7
--- /dev/null
+++ b/source/hal/source/components/vsi/include/video_drv.h
@@ -0,0 +1,142 @@
+/*
+* SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef VIDEO_DRV_H
+#define VIDEO_DRV_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdint.h>
+
+/* Video Channel */
+#define VIDEO_DRV_IN0 (0UL) ///< Video Input channel 0
+#define VIDEO_DRV_OUT0 (1UL) ///< Video Output channel 0
+#define VIDEO_DRV_IN1 (2UL) ///< Video Input channel 1
+#define VIDEO_DRV_OUT1 (3UL) ///< Video Output channel 1
+
+/* Video Event */
+#define VIDEO_DRV_EVENT_FRAME (1UL << 0) ///< Video frame received
+#define VIDEO_DRV_EVENT_OVERFLOW (1UL << 1) ///< Video buffer overflow
+#define VIDEO_DRV_EVENT_UNDERFLOW (1UL << 2) ///< Video buffer underflow
+#define VIDEO_DRV_EVENT_EOS (1UL << 3) ///< Video end of stream
+
+/* Video Mode */
+#define VIDEO_DRV_MODE_SINGLE (0UL) ///< Single frame
+#define VIDEO_DRV_MODE_CONTINUOS (1UL) ///< Continuos stream
+
+/* Return code */
+#define VIDEO_DRV_OK (0) ///< Operation succeeded
+#define VIDEO_DRV_ERROR (-1) ///< Unspecified error
+#define VIDEO_DRV_ERROR_PARAMETER (-2) ///< Parameter error
+
+/// Video Color Format
+#define COLOR_FORMAT_BEGIN (0UL)
+#define COLOR_GRAYSCALE8 (1UL)
+#define COLOR_RGB888 (2UL)
+#define COLOR_BGR565 (3UL)
+#define COLOR_YUV420 (4UL)
+#define COLOR_NV12 (5UL)
+#define COLOR_NV21 (6UL)
+#define COLOR_FORMAT_END (7UL)
+
+/// Video Status
+typedef struct {
+ uint32_t active : 1; ///< Video stream active
+ uint32_t buf_empty : 1; ///< Video stream buffer empty
+ uint32_t buf_full : 1; ///< Video stream buffer full
+ uint32_t overflow : 1; ///< Video buffer overflow (cleared on GetStatus)
+ uint32_t underflow : 1; ///< Video buffer underflow (cleared on GetStatus)
+ uint32_t eos : 1; ///< Video end of stream (cleared on GetStatus)
+ uint32_t reserved : 26;
+} VideoDrv_Status_t;
+
+/// \brief Video Events callback function type.
+/// \param[in] channel channel number
+/// \param[in] event events notification mask
+/// \return none
+typedef void (*VideoDrv_Event_t) (uint32_t channel, uint32_t event);
+
+/// \brief Initialize Video Interface.
+/// \param[in] cb_event pointer to \ref VideoDrv_Event_t
+/// \return return code
+int32_t VideoDrv_Initialize (VideoDrv_Event_t cb_event);
+
+/// \brief De-initialize Video Interface.
+/// \return return code
+int32_t VideoDrv_Uninitialize (void);
+
+/// \brief Set Video Interface file.
+/// \param[in] channel channel number
+/// \param[in] name video filename (pointer to NULL terminated string)
+/// \return return code
+int32_t VideoDrv_SetFile (uint32_t channel, const char *name);
+
+/// \brief Configure Video Interface.
+/// \param[in] channel channel number
+/// \param[in] frame_width frame width in pixels
+/// \param[in] frame_height frame height in pixels
+/// \param[in] color_format pixel color format
+/// \param[in] frame_rate frame rate (frames per second)
+/// \return return code
+int32_t VideoDrv_Configure (uint32_t channel, uint32_t frame_width, uint32_t frame_height, uint32_t color_format, uint32_t frame_rate);
+
+/// \brief Set Video Interface buffer.
+/// \param[in] channel channel number
+/// \param[in] buf pointer to buffer for video stream
+/// \param[in] buf_size video stream buffer size in bytes
+/// \return return code
+int32_t VideoDrv_SetBuf (uint32_t channel, void *buf, uint32_t buf_size);
+
+/// \brief Flush Video Interface buffer.
+/// \param[in] channel channel number
+/// \return return code
+int32_t VideoDrv_FlushBuf (uint32_t channel);
+
+/// \brief Start Stream on Video Interface.
+/// \param[in] channel channel number
+/// \param[in] mode stream mode
+/// \return return code
+int32_t VideoDrv_StreamStart (uint32_t channel, uint32_t mode);
+
+/// \brief Stop Stream on Video Interface.
+/// \param[in] channel channel number
+/// \return return code
+int32_t VideoDrv_StreamStop (uint32_t channel);
+
+/// \brief Get Video Frame buffer.
+/// \param[in] channel channel number
+/// \return pointer to frame buffer
+void *VideoDrv_GetFrameBuf (uint32_t channel);
+
+/// \brief Release Video Frame.
+/// \param[in] channel channel number
+/// \return return code
+int32_t VideoDrv_ReleaseFrame (uint32_t channel);
+
+/// \brief Get Video Interface status.
+/// \param[in] channel channel number
+/// \return \ref VideoDrv_Status_t
+VideoDrv_Status_t VideoDrv_GetStatus (uint32_t channel);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VIDEO_DRV_H */