| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* Copyright (C) 2018 Synaptics Incorporated */ |
| |
| #ifndef DHUB_API |
| #define DHUB_API " DHUB_API >>> " |
| /** DHUB_API |
| */ |
| |
| #include "ctypes.h" |
| |
| typedef struct HDL_semaphore { |
| UNSG32 ra; /*! Base address of $SemaHub ! */ |
| SIGN32 depth[32]; /*! Array of semaphore (virtual FIFO) depth ! */ |
| } HDL_semaphore; |
| |
| typedef struct HDL_hbo { |
| UNSG32 mem; /*! Base address of HBO SRAM ! */ |
| UNSG32 ra; /*! Base address of $HBO ! */ |
| HDL_semaphore fifoCtl; /*! Handle of HBO.FiFoCtl ! */ |
| UNSG32 base[32]; /*! Array of HBO queue base address ! */ |
| } HDL_hbo; |
| |
| typedef struct HDL_dhub { |
| UNSG32 ra; /*! Base address of $dHub ! */ |
| HDL_semaphore semaHub; /*! Handle of dHub.SemaHub ! */ |
| HDL_hbo hbo; /*! Handle of dHub.HBO ! */ |
| SIGN32 MTUb[16]; /*! Array of dHub channel MTU size bits ! */ |
| } HDL_dhub; |
| |
| typedef struct HDL_dhub2d { |
| UNSG32 ra; /*! Base address of $dHub2D ! */ |
| HDL_dhub dhub; /*! Handle of dHub2D.dHub ! */ |
| } HDL_dhub2d; |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** SECTION - handle of local contexts |
| */ |
| extern UNSG32 sizeof_hdl_semaphore; /*! sizeof(HDL_semaphore) ! */ |
| extern UNSG32 sizeof_hdl_hbo; /*! sizeof(HDL_hbo) ! */ |
| extern UNSG32 sizeof_hdl_dhub; /*! sizeof(HDL_dhub) ! */ |
| extern UNSG32 sizeof_hdl_dhub2d; /*! sizeof(HDL_dhub2d) ! */ |
| |
| /** ENDOFSECTION |
| */ |
| |
| /** SECTION - API definitions for $SemaHub |
| */ |
| /******************************************************************************************** |
| * Function: semaphore_hdl |
| * Description: Initialize HDL_semaphore with a $SemaHub BIU instance. |
| *********************************************************************************************/ |
| void semaphore_hdl(UNSG32 ra, /*! Base address of a BIU instance of $SemaHub ! */ |
| void *hdl /*! Handle to HDL_semaphore ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_cfg |
| * Description: Configurate a semaphore's depth & reset pointers. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ |
| *********************************************************************************************/ |
| UNSG32 semaphore_cfg(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id, /*! Semaphore ID in $SemaHub ! */ |
| SIGN32 depth, /*! Semaphore (virtual FIFO) depth ! */ |
| T64b cfgQ[] /*! Pass NULL to directly init SemaHub, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| ); |
| |
| UNSG32 hbo_queue_getDepth(void *hdl, SIGN32 id); |
| |
| /******************************************************************************************** |
| * Function: semaphore_intr_enable |
| * Description: Configurate interrupt enable bits of a semaphore. |
| *********************************************************************************************/ |
| void semaphore_intr_enable(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id, /*! Semaphore ID in $SemaHub ! */ |
| SIGN32 empty, /*! Interrupt enable for CPU at condition 'empty' ! */ |
| SIGN32 full, /*! Interrupt enable for CPU at condition 'full' ! */ |
| SIGN32 almostEmpty, /*! Interrupt enable for CPU at condition 'almostEmpty' ! */ |
| SIGN32 almostFull, /*! Interrupt enable for CPU at condition 'almostFull' ! */ |
| SIGN32 cpu /*! CPU ID (0/1/2) ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_query |
| * Description: Query current status (counter & pointer) of a semaphore. |
| * Return: UNSG32 Current available unit level |
| *********************************************************************************************/ |
| UNSG32 semaphore_query(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id, /*! Semaphore ID in $SemaHub ! */ |
| SIGN32 master, /*! 0/1 as procuder/consumer query ! */ |
| UNSG32 * ptr /*! Non-zero to receive semaphore r/w pointer ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_push |
| * Description: Producer semaphore push. |
| *********************************************************************************************/ |
| void semaphore_push(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id, /*! Semaphore ID in $SemaHub ! */ |
| SIGN32 delta /*! Delta to push as a producer ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_push |
| * Description: Consumer semaphore pop. |
| *********************************************************************************************/ |
| void semaphore_pop(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id, /*! Semaphore ID in $SemaHub ! */ |
| SIGN32 delta /*! Delta to pop as a consumer ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_chk_empty |
| * Description: Check 'empty' status of a semaphore (or all semaphores). |
| * Return: UNSG32 status bit of given semaphore, or |
| * status bits of all semaphores if id==-1 |
| *********************************************************************************************/ |
| UNSG32 semaphore_chk_empty(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub |
| -1 to return all 32b of the interrupt status |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_chk_full |
| * Description: Check 'full' status of a semaphore (or all semaphores). |
| * Return: UNSG32 status bit of given semaphore, or |
| * status bits of all semaphores if id==-1 |
| *********************************************************************************************/ |
| UNSG32 semaphore_chk_full(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub |
| -1 to return all 32b of the interrupt status |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_chk_almostEmpty |
| * Description: Check 'almostEmpty' status of a semaphore (or all semaphores). |
| * Return: UNSG32 status bit of given semaphore, or |
| * status bits of all semaphores if id==-1 |
| *********************************************************************************************/ |
| UNSG32 semaphore_chk_almostEmpty(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub |
| -1 to return all 32b of the interrupt status |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_chk_almostFull |
| * Description: Check 'almostFull' status of a semaphore (or all semaphores). |
| * Return: UNSG32 status bit of given semaphore, or |
| * status bits of all semaphores if id==-1 |
| *********************************************************************************************/ |
| UNSG32 semaphore_chk_almostFull(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub |
| -1 to return all 32b of the interrupt status |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_clr_empty |
| * Description: Clear 'empty' status of a semaphore. |
| *********************************************************************************************/ |
| void semaphore_clr_empty(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_clr_full |
| * Description: Clear 'full' status of a semaphore. |
| *********************************************************************************************/ |
| void semaphore_clr_full(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_clr_almostEmpty |
| * Description: Clear 'almostEmpty' status of a semaphore. |
| *********************************************************************************************/ |
| void semaphore_clr_almostEmpty(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: semaphore_clr_almostFull |
| * Description: Clear 'almostFull' status of a semaphore. |
| *********************************************************************************************/ |
| void semaphore_clr_almostFull(void *hdl, /*! Handle to HDL_semaphore ! */ |
| SIGN32 id /*! Semaphore ID in $SemaHub ! */ |
| ); |
| /** ENDOFSECTION |
| */ |
| |
| /** SECTION - API definitions for $HBO |
| */ |
| /******************************************************************************************** |
| * Function: hbo_hdl |
| * Description: Initialize HDL_hbo with a $HBO BIU instance. |
| *********************************************************************************************/ |
| void hbo_hdl(UNSG32 mem, /*! Base address of HBO SRAM ! */ |
| UNSG32 ra, /*! Base address of a BIU instance of $HBO ! */ |
| void *hdl /*! Handle to HDL_hbo ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: hbo_fifoCtl |
| * Description: Get HDL_semaphore pointer from a HBO instance. |
| * Return: void* Handle for HBO.FiFoCtl |
| *********************************************************************************************/ |
| void *hbo_fifoCtl(void *hdl /*! Handle to HDL_hbo ! */ |
| ); |
| |
| /******************************************************************************************** |
| * DEFINITION - convert HBO FIFO control to semaphore control |
| *********************************************************************************************/ |
| #define hbo_queue_intr_enable (hdl,id,empty,full,almostEmpty,almostFull,cpu) \ |
| semaphore_intr_enable (hbo_fifoCtl(hdl),id,empty,full,almostEmpty,almostFull,cpu) |
| |
| #define hbo_queue_query(hdl,id,master,ptr) \ |
| semaphore_query(hbo_fifoCtl(hdl),id,master,ptr) |
| |
| #define hbo_queue_push(hdl,id,delta) \ |
| semaphore_push(hbo_fifoCtl(hdl),id,delta) |
| |
| #define hbo_queue_pop(hdl,id,delta) \ |
| semaphore_pop(hbo_fifoCtl(hdl),id,delta) |
| |
| #define hbo_queue_chk_empty(hdl,id) \ |
| semaphore_chk_empty(hbo_fifoCtl(hdl),id) |
| |
| #define hbo_queue_chk_full(hdl,id) \ |
| semaphore_chk_full(hbo_fifoCtl(hdl),id) |
| |
| #define hbo_queue_chk_almostEmpty(hdl,id) \ |
| semaphore_chk_almostEmpty(hbo_fifoCtl(hdl),id) |
| |
| #define hbo_queue_chk_almostFull(hdl,id) \ |
| semaphore_chk_almostFull(hbo_fifoCtl(hdl),id) |
| |
| #define hbo_queue_clr_empty(hdl,id) \ |
| semaphore_clr_empty(hbo_fifoCtl(hdl),id) |
| |
| #define hbo_queue_clr_full(hdl,id) \ |
| semaphore_clr_full(hbo_fifoCtl(hdl),id) |
| |
| #define hbo_queue_clr_almostEmpty (hdl,id) \ |
| semaphore_clr_almostEmpty(hbo_fifoCtl(hdl),id) |
| |
| #define hbo_queue_clr_almostFull(hdl,id) \ |
| semaphore_clr_almostFull(hbo_fifoCtl(hdl),id) |
| |
| /******************************************************************************************** |
| * Function: hbo_queue_cfg |
| * Description: Configurate a FIFO's base, depth & reset pointers. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ |
| *********************************************************************************************/ |
| UNSG32 hbo_queue_cfg(void *hdl, /*! Handle to HDL_hbo ! */ |
| SIGN32 id, /*! Queue ID in $HBO ! */ |
| UNSG32 base, /*! Channel FIFO base address (byte address) ! */ |
| SIGN32 depth, /*! Channel FIFO depth, in 64b word ! */ |
| SIGN32 enable, /*! 0 to disable, 1 to enable ! */ |
| T64b cfgQ[] /*! Pass NULL to directly init HBO, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: hbo_queue_enable |
| * Description: HBO FIFO enable/disable. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ |
| *********************************************************************************************/ |
| UNSG32 hbo_queue_enable(void *hdl, /*! Handle to HDL_hbo ! */ |
| SIGN32 id, /*! Queue ID in $HBO ! */ |
| SIGN32 enable, /*! 0 to disable, 1 to enable ! */ |
| T64b cfgQ[] /*! Pass NULL to directly init HBO, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: hbo_queue_clear |
| * Description: Issue HBO FIFO clear (will NOT wait for finish). |
| *********************************************************************************************/ |
| void hbo_queue_clear(void *hdl, /*! Handle to HDL_hbo ! */ |
| SIGN32 id /*! Queue ID in $HBO ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: hbo_queue_busy |
| * Description: Read HBO 'BUSY' status for all channel FIFOs. |
| * Return: UNSG32 'BUSY' status bits of all channels |
| *********************************************************************************************/ |
| UNSG32 hbo_queue_busy(void *hdl /*! Handle to HDL_hbo ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: hbo_queue_clear_done |
| * Description: Wait for a given channel or all channels to be cleared. |
| *********************************************************************************************/ |
| void hbo_queue_clear_done(void *hdl, /*! Handle to HDL_hbo ! */ |
| SIGN32 id /*! Queue ID in $HBO |
| -1 to wait for all channel clear done |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: hbo_queue_read |
| * Description: Read a number of 64b data & pop FIFO from HBO SRAM. |
| * Return: UNSG32 Number of 64b data being read (=n), or (when cfgQ==NULL) |
| * 0 if there're not sufficient data in FIFO |
| *********************************************************************************************/ |
| UNSG32 hbo_queue_read(void *hdl, /*! Handle to HDL_hbo ! */ |
| SIGN32 id, /*! Queue ID in $HBO ! */ |
| SIGN32 n, /*! Number 64b entries to read ! */ |
| T64b data[], /*! To receive read data ! */ |
| UNSG32 * ptr /*! Pass in current FIFO pointer (in 64b word), |
| & receive updated new pointer, |
| Pass NULL to read from HW |
| ! */ |
| ); |
| |
| UNSG32 hbo_queue_getspace(void *hdl, SIGN32 id); |
| UNSG32 hbo_queue_getdepth(void *hdl, SIGN32 id); |
| /******************************************************************************************** |
| * Function: hbo_queue_write |
| * Description: Write a number of 64b data & push FIFO to HBO SRAM. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ, or (when cfgQ==NULL) |
| * 0 if there're not sufficient space in FIFO |
| *********************************************************************************************/ |
| UNSG32 hbo_queue_write(void *hdl, /*! Handle to HDL_hbo ! */ |
| SIGN32 id, /*! Queue ID in $HBO ! */ |
| SIGN32 n, /*! Number 64b entries to write ! */ |
| T64b data[], /*! Write data ! */ |
| T64b cfgQ[], /*! Pass NULL to directly update HBO, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| UNSG32 * ptr /*! Pass in current FIFO pointer (in 64b word), |
| & receive updated new pointer, |
| Pass NULL to read from HW |
| ! */ |
| ); |
| /** ENDOFSECTION |
| */ |
| |
| /** SECTION - API definitions for $dHubReg |
| */ |
| /******************************************************************************************** |
| * Function: dhub_hdl |
| * Description: Initialize HDL_dhub with a $dHub BIU instance. |
| *********************************************************************************************/ |
| void dhub_hdl(UNSG32 mem, /*! Base address of dHub.HBO SRAM ! */ |
| UNSG32 ra, /*! Base address of a BIU instance of $dHub ! */ |
| void *hdl /*! Handle to HDL_dhub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_semaphore |
| * Description: Get HDL_semaphore pointer from a dHub instance. |
| * Return: void* Handle for dHub.SemaHub |
| *********************************************************************************************/ |
| void *dhub_semaphore(void *hdl /*! Handle to HDL_dhub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_hbo |
| * Description: Get HDL_hbo pointer from a dHub instance. |
| * Return: void* Handle for dHub.HBO |
| *********************************************************************************************/ |
| void *dhub_hbo(void *hdl /*! Handle to HDL_dhub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_hbo_fifoCtl |
| * Description: Get HDL_semaphore pointer from the HBO of a dHub instance. |
| * Return: void* Handle for dHub.HBO.FiFoCtl |
| *********************************************************************************************/ |
| #define dhub_hbo_fifoCtl(hdl) (hbo_fifoCtl(dhub_hbo(hdl))) |
| |
| /******************************************************************************************** |
| * DEFINITION - convert from dHub channel ID to HBO FIFO ID & semaphore (interrupt) ID |
| *********************************************************************************************/ |
| // removed connection from HBO interrupt to semaphore |
| //#define dhub_id2intr(id) ((id)+1) |
| #define dhub_id2intr(id) ((id)) |
| #define dhub_id2hbo_cmdQ(id) ((id)*2) |
| #define dhub_id2hbo_data(id) ((id)*2+1) |
| |
| /******************************************************************************************** |
| * DEFINITION - convert dHub cmdQ/dataQ/channel-done interrupt control to HBO/semaphore control |
| *********************************************************************************************/ |
| //removed connection from HBO interrupt to semaphore |
| //#define dhub_hbo_intr_enable (hdl,id,empty,full,almostEmpty,almostFull,cpu) |
| // semaphore_intr_enable (dhub_semaphore(hdl),0,empty,full,almostEmpty,almostFull,cpu) |
| |
| #define dhub_channel_intr_enable (hdl,id,full,cpu) \ |
| semaphore_intr_enable (dhub_semaphore(hdl),dhub_id2intr(id),0,full,0,0,cpu) |
| |
| #define dhub_hbo_cmdQ_intr_enable (hdl,id,empty,almostEmpty,cpu) \ |
| hbo_queue_intr_enable (dhub_hbo(hdl),dhub_id2hbo_cmdQ(id),empty,0,almostEmpty,0,cpu) |
| |
| #define dhub_hbo_data_intr_enable (hdl,id,empty,full,almostEmpty,almostFull,cpu) \ |
| hbo_queue_intr_enable (dhub_hbo(hdl),dhub_id2hbo_data(id),empty,full,almostEmpty,almostFull,cpu) |
| |
| /******************************************************************************************** |
| * DEFINITION - convert dHub cmdQ opehdltions to HBO FIFO opehdltions |
| *********************************************************************************************/ |
| #define dhub_cmdQ_query (hdl,id,ptr) \ |
| hbo_queue_query (dhub_hbo(hdl),dhub_id2hbo_cmdQ(id),0,ptr) |
| |
| #define dhub_cmdQ_push (hdl,id,delta) \ |
| hbo_queue_push (dhub_hbo(hdl),dhub_id2hbo_cmdQ(id),delta) |
| |
| /******************************************************************************************** |
| * DEFINITION - convert dHub dataQ opehdltions to HBO FIFO opehdltions |
| *********************************************************************************************/ |
| #define dhub_data_query(hdl,id,master,ptr)\ |
| hbo_queue_query(dhub_hbo(hdl),dhub_id2hbo_data(id),master,ptr) |
| |
| #define dhub_data_push (hdl,id,delta) \ |
| hbo_queue_push (dhub_hbo(hdl),dhub_id2hbo_data(id),delta) |
| |
| #define dhub_data_pop (hdl,id,delta) \ |
| hbo_queue_pop (dhub_hbo(hdl),dhub_id2hbo_data(id),delta) |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_cfg |
| * Description: Configurate a dHub channel. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ, or (when cfgQ==NULL) |
| * 0 if either cmdQ or dataQ in HBO is still busy |
| *********************************************************************************************/ |
| UNSG32 dhub_channel_cfg(void *hdl, /*!Handle to HDL_dhub ! */ |
| SIGN32 id, /*!Channel ID in $dHubReg ! */ |
| UNSG32 baseCmd, /*!Channel FIFO base address (byte address) for cmdQ ! */ |
| UNSG32 baseData, /*!Channel FIFO base address (byte address) for dataQ ! */ |
| SIGN32 depthCmd, /*!Channel FIFO depth for cmdQ, in 64b word ! */ |
| SIGN32 depthData, /*!Channel FIFO depth for dataQ, in 64b word ! */ |
| SIGN32 mtu, /*!See 'dHubChannel.CFG.MTU', 0/1/2 for 8/32/128 bytes ! */ |
| SIGN32 QoS, /*!See 'dHubChannel.CFG.QoS' ! */ |
| SIGN32 selfLoop, /*!See 'dHubChannel.CFG.selfLoop' ! */ |
| SIGN32 enable, /*!0 to disable, 1 to enable ! */ |
| T64b cfgQ[] /*!Pass NULL to directly init dHub, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_enable |
| * Description: dHub channel enable/disable. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ |
| *********************************************************************************************/ |
| UNSG32 dhub_channel_enable(void *hdl, /*! Handle to HDL_dhub ! */ |
| SIGN32 id, /*! Channel ID in $dHubReg ! */ |
| SIGN32 enable, /*! 0 to disable, 1 to enable ! */ |
| T64b cfgQ[] /*! Pass NULL to directly init dHub, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_clear |
| * Description: Issue dHub channel clear (will NOT wait for finish). |
| *********************************************************************************************/ |
| void dhub_channel_clear(void *hdl, /*! Handle to HDL_dhub ! */ |
| SIGN32 id /*! Channel ID in $dHubReg ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_flush |
| * Description: Issue dHub channel (H2M only) flush (will NOT wait for finish). |
| *********************************************************************************************/ |
| void dhub_channel_flush(void *hdl, /*! Handle to HDL_dhub ! */ |
| SIGN32 id /*! Channel ID in $dHubReg ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_busy |
| * Description: Read dHub 'BUSY' status for all channel FIFOs. |
| * Return: UNSG32 'BUSY' status bits of all channels |
| *********************************************************************************************/ |
| UNSG32 dhub_channel_busy(void *hdl /*! Handle to HDL_dhub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_pending |
| * Description: Read dHub 'PENDING' status for all channel FIFOs. |
| * Return: UNSG32 'PENDING' status bits of all channels |
| *********************************************************************************************/ |
| UNSG32 dhub_channel_pending(void *hdl /*! Handle to HDL_dhub ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_clear_done |
| * Description: Wait for a given channel or all channels to be cleared or flushed. |
| *********************************************************************************************/ |
| void dhub_channel_clear_done(void *hdl, /*! Handle to HDL_dhub ! */ |
| SIGN32 id /*! Channel ID in $dHubReg |
| -1 to wait for all channel clear done |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_write_cmd |
| * Description: Write a 64b command for a dHub channel. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ if success, or |
| * 0 if there're not sufficient space in FIFO |
| *********************************************************************************************/ |
| UNSG32 dhub_channel_write_cmd(void *hdl, /*! Handle to HDL_dhub ! */ |
| SIGN32 id, /*! Channel ID in $dHubReg ! */ |
| UNSG32 addr, /*! CMD: buffer address ! */ |
| SIGN32 size, /*! CMD: number of bytes to transfer ! */ |
| SIGN32 semOnMTU, /*! CMD: semaphore operation at CMD/MTU (0/1) ! */ |
| SIGN32 chkSemId, /*! CMD: non-zero to check semaphore ! */ |
| SIGN32 updSemId, /*! CMD: non-zero to update semaphore ! */ |
| SIGN32 interrupt, /*! CMD: raise interrupt at CMD finish ! */ |
| T64b cfgQ[], /*! Pass NULL to directly update dHub, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| UNSG32 * ptr /*! Pass in current cmdQ pointer (in 64b word), |
| & receive updated new pointer, |
| Pass NULL to read from HW |
| ! */ |
| ); |
| /** ENDOFSECTION |
| */ |
| |
| void dhub_channel_generate_cmd(void *hdl, /*! Handle to HDL_dhub ! */ |
| SIGN32 id, /*! Channel ID in $dHubReg ! */ |
| UNSG32 addr, /*! CMD: buffer address ! */ |
| SIGN32 size, /*! CMD: number of bytes to transfer ! */ |
| SIGN32 semOnMTU, /*! CMD: semaphore operation at CMD/MTU (0/1) ! */ |
| SIGN32 chkSemId, /*! CMD: non-zero to check semaphore ! */ |
| SIGN32 updSemId, /*! CMD: non-zero to update semaphore ! */ |
| SIGN32 interrupt, /*! CMD: raise interrupt at CMD finish ! */ |
| SIGN32 * pData); |
| |
| /******************************************************************************************** |
| * Function: dhub_channel_big_write_cmd |
| * Description: Write a sequence of 64b command for a dHub channel. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ if success, or |
| * 0 if there're not sufficient space in FIFO |
| *********************************************************************************************/ |
| UNSG32 dhub_channel_big_write_cmd(void *hdl, /*! Handle to HDL_dhub ! */ |
| SIGN32 id, /*! Channel ID in $dHubReg ! */ |
| UNSG32 addr, /*! CMD: buffer address ! */ |
| SIGN32 size, /*! CMD: number of bytes to transfer ! */ |
| SIGN32 semOnMTU, /*! CMD: semaphore operation at CMD/MTU (0/1) ! */ |
| SIGN32 chkSemId, /*! CMD: non-zero to check semaphore ! */ |
| SIGN32 updSemId, /*! CMD: non-zero to update semaphore ! */ |
| SIGN32 interrupt, /*! CMD: raise interrupt at CMD finish ! */ |
| T64b cfgQ[], /*! Pass NULL to directly update dHub, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| UNSG32 * ptr /*! Pass in current cmdQ pointer (in 64b word), |
| & receive updated new pointer, |
| Pass NULL to read from HW |
| ! */ |
| ); |
| |
| /** SECTION - API definitions for $dHubReg2D |
| */ |
| /******************************************************************************************** |
| * Function: dhub2d_hdl |
| * Description: Initialize HDL_dhub2d with a $dHub2D BIU instance. |
| *********************************************************************************************/ |
| void dhub2d_hdl(UNSG32 mem, /*! Base address of dHub2D.dHub.HBO SRAM ! */ |
| UNSG32 ra, /*! Base address of a BIU instance of $dHub2D ! */ |
| void *hdl /*! Handle to HDL_dhub2d ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub2d_channel_cfg |
| * Description: Configurate a dHub2D channel. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ |
| *********************************************************************************************/ |
| UNSG32 dhub2d_channel_cfg(void *hdl, /*! Handle to HDL_dhub2d ! */ |
| SIGN32 id, /*! Channel ID in $dHubReg2D ! */ |
| UNSG32 addr, /*! CMD: 2D-buffer address ! */ |
| SIGN32 stride, /*! CMD: line stride size in bytes ! */ |
| SIGN32 width, /*! CMD: buffer width in bytes ! */ |
| SIGN32 height, /*! CMD: buffer height in lines ! */ |
| SIGN32 semLoop, /*! CMD: loop size (1~4) of semaphore operations ! */ |
| SIGN32 semOnMTU, /*! CMD: semaphore operation at CMD/MTU (0/1) ! */ |
| SIGN32 chkSemId[], /*! CMD: semaphore loop pattern - non-zero to check ! */ |
| SIGN32 updSemId[], /*! CMD: semaphore loop pattern - non-zero to update ! */ |
| SIGN32 interrupt, /*! CMD: raise interrupt at CMD finish ! */ |
| SIGN32 enable, /*! 0 to disable, 1 to enable ! */ |
| T64b cfgQ[] /*! Pass NULL to directly init dHub2D, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub2d_channel_enable |
| * Description: dHub2D channel enable/disable. |
| * Return: UNSG32 Number of (adr,pair) added to cfgQ |
| *********************************************************************************************/ |
| UNSG32 dhub2d_channel_enable(void *hdl, /*! Handle to HDL_dhub2d ! */ |
| SIGN32 id, /*! Channel ID in $dHubReg2D ! */ |
| SIGN32 enable, /*! 0 to disable, 1 to enable ! */ |
| T64b cfgQ[] /*! Pass NULL to directly init dHub2D, or |
| Pass non-zero to receive programming sequence |
| in (adr,data) pairs |
| ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub2d_channel_clear |
| * Description: Issue dHub2D channel clear (will NOT wait for finish). |
| *********************************************************************************************/ |
| void dhub2d_channel_clear(void *hdl, /*! Handle to HDL_dhub2d ! */ |
| SIGN32 id /*! Channel ID in $dHubReg2D ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub2d_channel_busy |
| * Description: Read dHub2D 'BUSY' status for all channel FIFOs. |
| * Return: UNSG32 'BUSY' status bits of all channels |
| *********************************************************************************************/ |
| UNSG32 dhub2d_channel_busy(void *hdl /*! Handle to HDL_dhub2d ! */ |
| ); |
| |
| /******************************************************************************************** |
| * Function: dhub2d_channel_clear_done |
| * Description: Wait for a given channel or all channels to be cleared. |
| *********************************************************************************************/ |
| void dhub2d_channel_clear_done(void *hdl, /*! Handle to HDL_dhub2d ! */ |
| SIGN32 id /*! Channel ID in $dHubReg2D |
| -1 to wait for all channel clear done |
| ! */ |
| ); |
| /** ENDOFSECTION |
| */ |
| |
| typedef enum { |
| BCM_SCHED_Q0 = 0, |
| BCM_SCHED_Q1, |
| BCM_SCHED_Q2, |
| BCM_SCHED_Q3, |
| BCM_SCHED_Q4, |
| BCM_SCHED_Q5, |
| BCM_SCHED_Q6, |
| BCM_SCHED_Q7, |
| BCM_SCHED_Q8, |
| BCM_SCHED_Q9, |
| BCM_SCHED_Q10, |
| BCM_SCHED_Q11, |
| BCM_SCHED_Q12, |
| BCM_SCHED_Q13, |
| BCM_SCHED_Q14, |
| BCM_SCHED_Q15, |
| BCM_SCHED_Q16, |
| BCM_SCHED_Q17, |
| BCM_SCHED_Q18, |
| } ENUM_BCM_SCHED_QID; |
| |
| typedef enum { |
| BCM_SCHED_TRIG_CPCB0_VBI = 0, |
| BCM_SCHED_TRIG_CPCB1_VBI, |
| BCM_SCHED_TRIG_CPCB2_VBI, |
| BCM_SCHED_TRIG_CPCB0_VDE, |
| BCM_SCHED_TRIG_CPCB1_VDE, |
| BCM_SCHED_TRIG_CPCB2_VDE, |
| BCM_SCHED_TRIG_AUD_PRIM, |
| BCM_SCHED_TRIG_AUD_SEC, |
| BCM_SCHED_TRIG_AUD_HDMI, |
| BCM_SCHED_TRIG_AUD_SPDIF, |
| BCM_SCHED_TRIG_AUD_MIC, //0xA |
| BCM_SCHED_TRIG_VBI_VDE, |
| BCM_SCHED_TRIG_DVI_VDE, |
| BCM_SCHED_TRIG_SD_WRE, |
| BCM_SCHED_TRIG_SD_RDE, |
| BCM_SCHED_TRIG_SD_ERR, //0xF |
| BCM_SCHED_TRIG_NONE = 0x1f, |
| |
| } ENUM_BCM_SCHED_TRIG_EVENT; |
| |
| void BCM_SCHED_Open(void); |
| void BCM_SCHED_Close(void); |
| void BCM_SCHED_SetMux(UNSG32 QID, UNSG32 TrigEvent); |
| int BCM_SCHED_PushCmd(UNSG32 QID, UNSG32 * pCmd, UNSG32 * cfgQ); |
| void BCM_SCHED_GetEmptySts(UNSG32 QID, UNSG32 * EmptySts); |
| |
| int BCM_SCHED_AutoPushCmd(UNSG32 QID, UNSG8 uchEnable); |
| |
| /****************************************************************************************************************** |
| * Function: dhub_channel_enable_InverseScan |
| * Description: Enable the inverse scan at loader. |
| ******************************************************************************************************************/ |
| UNSG32 dhub_channel_enable_InverseScan(void *hdl, SIGN32 id, |
| SIGN32 iMode, T64b cfgQ[]); |
| |
| void dhub2d_channel_clear_seq(void *hdl, SIGN32 id); |
| void dhub2d_channel_start_seq(void *hdl, SIGN32 id); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| /** DHUB_API |
| */ |
| #endif |
| /** ENDOFFILE: api_dhub.h |
| */ |