123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- /*
- * Copyright (c) 2015, Texas Instruments Incorporated
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of Texas Instruments Incorporated nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /*
- * Copyright (c) 2015, Texas Instruments Incorporated
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of Texas Instruments Incorporated nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /** ============================================================================
- * @file pruicss.h
- *
- * @brief pruicss driver interface
- *
- * The pruss header file should be included in an application as follows:
- * @code
- * #include <ti/drv/pruss/pruss.h>
- * @endcode
- *
- * ============================================================================
- */
- #ifndef ti_drivers_PRUICSS__include
- #define ti_drivers_PRUICSS__include
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <stdint.h>
- #include <stddef.h>
- #define PRUICSS_NUM_PRU_HOSTS (10U)
- #define PRUICSS_NUM_PRU_CHANNELS (10U)
- #define PRUICSS_NUM_PRU_SYS_EVTS (64U)
- #define PRUICSS_MAX_WAIT_EVENTS (10U)
- #define PRUICSS_PRU0_DATARAM (0U)
- #define PRUICSS_PRU1_DATARAM (1U)
- #define PRUICSS_PRU0_IRAM (2U)
- #define PRUICSS_PRU1_IRAM (3U)
- #define PRUICSS_SHARED_DATARAM (4U)
- #define PRUICSS_CFG (5U)
- #define PRUICSS_UART (6U)
- #define PRUICSS_IEP (7U)
- #define PRUICSS_ECAP (8U)
- #define PRUICSS_MII_RT (9U)
- #define PRUICSS_MDIO (10U)
- /**< Invalid Intc Mux number, intc Mux not used if assigned PRUSS_INVALID_INTC_MUX_NUM */
- #define PRUSS_INVALID_INTC_MUX_NUM ((uint32_t)0xffff)
- /*!
- * @brief PRUICSS Instance IDs
- */
- typedef enum PRUICSS_MaxInstances_s
- {
- PRUICCSS_INSTANCE_ONE=1,
- PRUICCSS_INSTANCE_TWO=2,
- PRUICCSS_INSTANCE_MAX=3
- }PRUICSS_MaxInstances;
- /** \brief Interrupt handler */
- typedef void (*PRUICSSDRV_IRQ_HANDLER)(void* buf);
- typedef struct PRUICSS_Config_s *PRUICSS_Handle;
- /*!
- * @brief PRUICSS Constant Table Register Entries
- */
- typedef enum PRUICSS_ConstTblEntry_s
- {
- PRUICCSS_ConstTblEntryC24,
- PRUICCSS_ConstTblEntryC25,
- PRUICCSS_ConstTblEntryC26,
- PRUICCSS_ConstTblEntryC27,
- PRUICCSS_ConstTblEntryC28,
- PRUICCSS_ConstTblEntryC29,
- PRUICCSS_ConstTblEntryC30,
- PRUICCSS_ConstTblEntryC31,
- PRUICCSS_ConstTblEntryMax
- }PRUICSS_ConstTblEntry;
- /***********************************************************************
- * Macros to support dynamic chip detecting feature
- ***********************************************************************/
- typedef void *(*prussdrv_function_handler) (void * buf);
- /*!
- * @brief PRUICSS system to channel map
- *
- */
- typedef struct PRUICSS_SysevtToChannelMap_s
- {
- uint8_t sysevt; /*System event number */
- uint8_t channel; /*Channel number */
- uint8_t polarity; /*Interrupt polarity [ 0 - active low , 1 - active high ] */
- uint8_t type; /*Interrupt type [ 0 - level or pulse interrupt , 1 - edge interrupt ] */
- }PRUICSS_SysevtToChannelMap;
- /*!
- * @brief PRUICSS channel to host map
- *
- */
- typedef struct PRUICSS_ChannelToHostMap_s
- {
- int16_t channel;
- int16_t host;
- }PRUICSS_ChannelToHostMap;
- /*!
- * @brief PRUICSS Interrupt controller initialisation data structure
- *
- */
- typedef struct PRUICSS_IntcInitData_s
- {
- /*Enabled SYSEVTs - Range:0..63
- {-1} indicates end of list*/
- int8_t sysevts_enabled[PRUICSS_NUM_PRU_SYS_EVTS];
- /*SysEvt to Channel map. SYSEVTs - Range:0..63 Channels -Range: 0..9
- {-1, -1} indicates end of list*/
- PRUICSS_SysevtToChannelMap sysevt_to_channel_map[PRUICSS_NUM_PRU_SYS_EVTS];
- /*Channel to Host map.Channels -Range: 0..9 HOSTs - Range:0..9
- {-1, -1} indicates end of list*/
- PRUICSS_ChannelToHostMap channel_to_host_map[PRUICSS_NUM_PRU_CHANNELS];
- /*10-bit mask - Enable Host0-Host9 {Host0/1:PRU0/1, Host2..9 : PRUEVT_OUT0..7)*/
- uint32_t host_enable_bitmask;
- }PRUICSS_IntcInitData;
- /*!
- * @brief brief PRUICSS Global configuration
- *
- */
- typedef struct PRUICSS_Config_s {
- /*! Pointer to a driver specific data object */
- void *object;
- /*! Pointer to a driver specific hardware attributes structure */
- void const *hwAttrs;
- } PRUICSS_Config;
- extern PRUICSS_Config pruss_config[];
- /*!
- * @brief brief PRUICSS IRQ handlers mapping
- *
- */
- typedef struct PRUICSS_IrqFunMap_s
- {
- PRUICSSDRV_IRQ_HANDLER irqHandler;
- /**< Interrupt handler*/
- void* semHandle;
- /**< Binary semaphore to wait on */
- void* handle;
- }PRUICSS_IrqFunMap;
- /**
- * \brief PRU Firmware binary header
- *
- */
- typedef struct PRUICSS_FirmwareBinHeader_s
- {
- uint32_t image_size;
- /**< Image size */
- uint32_t load_addr;
- /**< Address to which this binary need to be loaded */
- uint32_t run_addr;
- /**< Address at which the execution should start */
- }PRUICSS_FirmwareBinHeader;
- /*!
- * @brief PRUICSS interrupt config structure
- *
- * Default interrrupt configuration parametetrs
- */
- typedef struct PRUICSS_IntrCfg_s
- {
- uint32_t pruEvtoutNum; /**< PRU Event number */
- uint8_t waitEnable; /**< Flag specifying whether application can wait on this interrupt
- using PRUICSSPruWaitEvent function */
- PRUICSSDRV_IRQ_HANDLER irqHandler; /**< Pointer to a function which will be called on interrupt.*/
- /**< DSP: int vector number; ARM: GIC int number (peripheral event ID + 32) */
- uint32_t intNum;
- /**< CorePac specific Event ID, input to CorePac interrupt controller */
- uint32_t eventId;
- /**< intc mux number, Keystone inc mux is Chip Interrupt Controller
- if assigned -1, system resource manager will decide the mux num */
- int32_t intcMuxNum;
- /**< intc mux input event ID, for Keystone, it is the input event to CIC
- if assigned -1, system resource manager will decide the mux input event ID */
- int32_t intcMuxInEvent;
- /**< intc mux output event ID, for Keystone, it is the Host interrupt num
- if assigned -1, system resource manager will decide the mux output event ID */
- int32_t intcMuxOutEvent;
- }PRUICSS_IntrCfg;
- typedef enum PRUICSS_Return_e
- {
- PRUICSS_RETURN_FAILURE = -1,
- PRUICSS_RETURN_SUCCESS = 0
- }PRUICSS_Return;
- /**
- * @brief This function creates the handle for the PRUICSS instance \n
- *
- * @param config configuration structure of PRUICSS.
- * @param instance PRUICSS instance no.
- *
- * @return PRUICSS handle. \n
- */
- PRUICSS_Handle PRUICSS_create(PRUICSS_Config *config ,int32_t instance);
- /**
- * @brief This function Executes the program in the specified PRU \n
- *
- * @param handle Pruss's driver handle
- * @param pruNum PRU instance number.\n
- *
- * @return 0 in case of successful transition, -1 otherwise. \n
- */
- int32_t PRUICSS_pruExecProgram(PRUICSS_Handle handle,int32_t pruNum );
- /**
- * @brief Routine to
- *
- * @param handle Pruss's driver handle
- * @param pru_instance PRU instance number
- * @param spi_offset Offset on SPI flash to where this need to be flashed
- *
- *
- * @return None.
- *
- **/
- int8_t PRUICSS_loadBinary (PRUICSS_Handle handle, uint8_t pru_instance,uint32_t spi_offset);
- /**
- * @brief This function waits for a System event to happen \n
- *
- * @param handle Pruss's driver handle
- * @param pruEvtoutNum The AINTC Event number.\n
- *
- * @return 0 in case of successful transition, -1 otherwise. \n
- */
- int32_t PRUICSS_pruWaitEvent(PRUICSS_Handle handle,uint32_t pruEvtoutNum );
- /**
- * @brief This function does Interrupt-Channel-host mapping.
- *
- * @param handle Pruss's driver handle
- * @param prussintc_init_data The pointer to structure containing mapping information.
- *
- * @return 0 in case of successful transition, -1 otherwise. \n
- */
- int32_t PRUICSS_pruIntcInit(PRUICSS_Handle handle, const PRUICSS_IntcInitData * prussintc_init_data);
- /**
- * \brief This function generates and INTC event, waits for AINTC event and
- * clears an INTC event \n
- *
- * @param handle Pruss's driver handle
- * @param sendEventNum Event number.\n
- * @param pruEvtoutNum PRU Event number.\n
- * @param ackEventNum Acknowlodegement event number.\n
- *
- * \return 0 in case of successful transition, -1 otherwise. \n
- */
- int32_t PRUICSS_pruSendWaitCearEvent(PRUICSS_Handle handle,uint32_t sendEventNum,
- uint32_t pruEvtoutNum,
- uint32_t ackEventNum
- );
- /**
- * @brief This function Registers an Interrupt Handler for an event.\n
- *
- * @param handle Pruss's driver handle
- *
- * @param pruEvtoutNum The ARM side event number.\n
- *
- * @param intrNum Interrupt number of MPU/C66x
- *
- * @param eventNum Event number of PRUICSS
- *
- * @param waitEnable Flag specifying whether application can wait on this interrupt
- * using PRUICSSPruWaitEvent function
- *
- * @param irqHandler Pointer to a function which will be called on interrupt.\n
- *
- *
- * \return 0 in case of successful registration, -1 otherwise. \n
- */
- int32_t PRUICSS_registerIrqHandler(PRUICSS_Handle handle,uint32_t pruEvtoutNum,
- int32_t intrNum,
- int32_t eventNum,
- uint8_t waitEnable,
- PRUICSSDRV_IRQ_HANDLER irqHandler
- );
- /**
- * @brief This function Registers an Interrupt Handler for an event.\n
- *
- * @param handle Pruss's driver handle
- *
- *
- * @param intrCfg pointer to interrupt configuration parameter
- *
- * \return 0 in case of successful registration, -1 otherwise. \n
- */
- int32_t PRUICSS_registerIrqHandler2(PRUICSS_Handle handle,
- PRUICSS_IntrCfg* intrCfg);
- /**
- * @brief This function sets the buffer pointer for PRU. The contents of this buffer will be \n
- * loaded to IRAM.\n
- *
- * @param handle Pruss's driver handle
- * @param pruNum The PRU number.\n
- * @param buffer Pointer to buffer.\n
- * @param numBytes Number of bytes in the buffer.\n
- *
- * @return 0 in case of successful transition, -1 otherwise. \n
- */
- int32_t PRUICSS_setPRUBuffer(PRUICSS_Handle handle,
- uint32_t pruNum,
- void *buffer,
- uint32_t numBytes);
- /**
- * @brief Configure PIN_MUX_SEL
- *
- * @param handle Pruss's driver handle
- * @param regVal value to be written
- *
- * @return None.
- *
- **/
- void PRUICSS_pinMuxConfig(PRUICSS_Handle handle, uint64_t regVal);
- /*The following are the static functions to be moved to .c file.*/
- /**
- * @brief Resets PRU: \n
- *
- * @param handle Pruss's driver handle
- * @param pruNum PRU instance number[0 or 1].
- *
- * @return 0 in case of successful reset, -1 otherwise.
- **/
- int32_t PRUICSS_pruReset(PRUICSS_Handle handle ,uint8_t pruNum);
- /**
- * @brief Disables PRU: \n
- *
- * @param handle Pruss's driver handle
- * @param pruNum PRU instance number[0 or 1].
- *
- * @return 0 in case of successful disable, -1 otherwise.
- **/
- int32_t PRUICSS_pruDisable(PRUICSS_Handle handle,uint8_t pruNum);
- /**
- * @brief Enables PRU: \n
- *
- * @param handle Pruss's driver handle
- * @param pruNum PRU instance number[0 or 1].
- *
- * @return 0 in case of successful enable, -1 otherwise.
- **/
- int32_t PRUICSS_pruEnable(PRUICSS_Handle handle,uint8_t pruNum);
- /**
- *
- * @brief This function writes the given data to PRU memory
- *
- * @param handle Pruss's driver handle
- * @param pruMem PRU Memory Macro [DATARAM0_PHYS_BASE
- * @param wordoffset Offset at which the write will happen.
- * @param source_mem Source memory[ Array of uint32_tegers ]
- * @param bytelength Total number of bytes to be writen
- *
- * pruMem can have values
- * PRU0_DATARAM\n
- * PRU0_IRAM\n
- * PRU1_DATARAM\n
- * PRU1_IRAM\n
- * PRUICSS_SHARED_DATARAM
- * @return word length written or 0 on error.
- *
- **/
- int32_t PRUICSS_pruWriteMemory(PRUICSS_Handle handle,
- uint32_t pruMem,
- uint32_t wordoffset,
- const uint32_t *source_mem,
- uint32_t bytelength
- );
- /**
- * @brief This function Generates an INTC event \n
- *
- * @param handle Pruss's driver handle
- * @param eventnum The INTC Event number.\n
- *
- * @return 0 in case of successful transition, -1 otherwise. \n
- **/
- int32_t PRUICSS_pruSendEvent(PRUICSS_Handle handle,uint32_t eventnum);
- /**
- * @brief This function clears an INTC event \n
- *
- * @param handle Pruss's driver handle
- * @param eventnum The INTC Event number.\n
- *
- * @return 0 in case of successful transition, -1 otherwise. \n
- **/
- int32_t PRUICSS_pruClearEvent(PRUICSS_Handle handle,uint32_t eventnum);
- /**
- * @brief This function returns the address of PRU components.
- *
- * @param handle Pruss's driver handle
- * @param pru_ram_id PRU components' Id. \n
- * @param address Memory to which address to be copied. \n
- *
- * @return 0 in case of success, -1 otherwise. \n
- **/
- int32_t PRUICSS_mapPruMem(PRUICSS_Handle handle,uint32_t pru_ram_id, void **address);
- /**
- * @brief This function returns the base address of peripheral IO modules.
- *
- * @param per_id Peripheral Module's Id.
- *
- * @param handle Pruss's driver handle
- * @param address Memory to which address to be copied. \n
- *
- * @return 0 in case of success, -1 otherwise. \n
- **/
- int32_t PRUICSS_mapPeripheralIO(PRUICSS_Handle handle,uint32_t per_id, void **address);
- void PRUICSS_enableOCPMasterAccess(PRUICSS_Handle handle );
- /**
- * @brief Detects the Chip Type \n
- *
- */
- uint32_t PRUICSS_detectHWVersion(void);
- /**
- * @brief Get PRU ICSS version \n
- *
- * @param handle Pruss's driver handle
- *
- * @return PRU ICSS version
- **/
- uint32_t PRUICSS_getICSSVersion(PRUICSS_Handle handle);
- /**
- * \brief This API gets the SoC level of PRUICSS intial configuration
- *
- * \param cfg Pointer to PRUICSS SOC initial config.
- *
- * \return 0 success
- *
- */
- int32_t PRUICSS_socGetInitCfg( PRUICSS_Config **cfg);
- /**
- * \brief This API sets the SoC level of PRUICSS intial configuration
- *
- * \param cfg Pointer to PRUICSS SOC initial config.
- *
- * \return 0 success
- *
- */
- int32_t PRUICSS_socSetInitCfg(PRUICSS_Config *cfg);
- /**
- * @brief This function clears all Interrupt-Channel-host mapping.
- *
- * @param handle Pruss's driver handle
- *
- * @return 0 in case of successful transition, -1 otherwise. \n
- */
- int32_t PRUICSS_pruIntcClear(PRUICSS_Handle handle);
- /**
- * \brief This API updates the constant table for specified constant table entry
- which have write permissions.
- *
- * @param handle Pruss's driver handle
- * @param pruNum PRU number[0 or 1] for which constant table is being updated.
- * @param constantTblEntry contant table entry being updated
- * @param constantTblVal contant table value to be written
- *
- * \return 0 success, -1 on error
- *
- */
- int32_t PRUICSS_setConstantTblEntry(PRUICSS_Handle handle, uint8_t pruNum, int32_t constantTblEntry, uint32_t constantTblVal);
- /**
- * \brief This API configures the General Purpose Mux Selector field of
- * the General Purpose Config Register (PRUSS_GPCFG)
- *
- * @param handle Pruss's driver handle
- * @param pruNum PRU number[0 or 1].
- * @param mode PRU-ICSS wrap mux selection
- *
- * \return 0 success, -1 on error
- *
- */
- int32_t PRUICSS_setGpMuxSel(PRUICSS_Handle handle, uint8_t pruNum, uint32_t mode);
- #ifdef __cplusplus
- }
- #endif
- #endif /* ti_drivers_PRUICSS__include */
|