| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /**
- * \file pruss_drv.h
- *
- * \brief This file contains the function prototypes for the device
- * abstraction layer for PRUSS. It also contains some
- * related macro definitions and some files to be included.
- */
- /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
- *
- *
- * 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.
- *
- */
- #ifndef __PRUSS_DRV_H__
- #define __PRUSS_DRV_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define AM33XX
- //***********************************************************************
- // PRUSS Register Offsets for AM33X SOC
- //***********************************************************************/
- #ifdef AM33XX
- #define PRUSS_IRAM_SIZE 8192
- #define PRUSS_MMAP_SIZE 0x40000
- #define DATARAM0_PHYS_BASE 0x4a300000
- #define DATARAM1_PHYS_BASE 0x4a302000
- #define INTC_PHYS_BASE 0x4a320000
- #define PRU0CONTROL_PHYS_BASE 0x4a322000
- #define PRU0DEBUG_PHYS_BASE 0x4a322400
- #define PRU1CONTROL_PHYS_BASE 0x4a324000
- #define PRU1DEBUG_PHYS_BASE 0x4a324400
- #define PRU0IRAM_PHYS_BASE 0x4a334000
- #define PRU1IRAM_PHYS_BASE 0x4a338000
- #define PRUSS_SHAREDRAM_BASE 0x4a310000
- #define PRUSS_CFG_BASE 0x4a326000
- #define PRUSS_UART_BASE 0x4a328000
- #define PRUSS_IEP_BASE 0x4a32e000
- #define PRUSS_ECAP_BASE 0x4a330000
- #define PRUSS_MIIRT_BASE 0x4a332000
- #define PRUSS_MDIO_BASE 0x4a332400
- #else
- //***********************************************************************
- // PRUSS Register Offsets for AM18X SOC
- //***********************************************************************/
- #define PRUSS_IRAM_SIZE 4096
- #define PRUSS_MMAP_SIZE 0x7C00
- #define PRUSS_DATARAM_SIZE 512
- #define DATARAM0_PHYS_BASE 0x01C30000
- #define DATARAM1_PHYS_BASE 0x01C32000
- #define INTC_PHYS_BASE 0x01C34000
- #define PRU0CONTROL_PHYS_BASE 0x01C37000
- #define PRU0DEBUG_PHYS_BASE 0x01C37400
- #define PRU1CONTROL_PHYS_BASE 0x01C37800
- #define PRU1DEBUG_PHYS_BASE 0x01C37C00
- #define PRU0IRAM_PHYS_BASE 0x01C38000
- #define PRU1IRAM_PHYS_BASE 0x01C3C000
- #endif
- #define PRU_EVTOUT_0 0
- #define PRU_EVTOUT_1 1
- #define PRU_EVTOUT_2 2
- #define PRU_EVTOUT_3 3
- #define PRU_EVTOUT_4 4
- #define PRU_EVTOUT_5 5
- #define PRU_EVTOUT_6 6
- #define PRU_EVTOUT_7 7
- /*
- * PRUSS Interrupt Controller (PRUSS INTC) Registers Offsets
- */
-
- #define PRU_INTC_REVID_REG 0x000
- #define PRU_INTC_CR_REG 0x004
- #define PRU_INTC_HCR_REG 0x00C
- #define PRU_INTC_GER_REG 0x010
- #define PRU_INTC_GNLR_REG 0x01C
- #define PRU_INTC_SISR_REG 0x020
- #define PRU_INTC_SICR_REG 0x024
- #define PRU_INTC_EISR_REG 0x028
- #define PRU_INTC_EICR_REG 0x02C
- #define PRU_INTC_HIEISR_REG 0x034
- #define PRU_INTC_HIDISR_REG 0x038
- #define PRU_INTC_GPIR_REG 0x080
- #define PRU_INTC_SRSR1_REG 0x200
- #define PRU_INTC_SRSR2_REG 0x204
- #define PRU_INTC_SECR1_REG 0x280
- #define PRU_INTC_SECR2_REG 0x284
- #define PRU_INTC_ESR1_REG 0x300
- #define PRU_INTC_ESR2_REG 0x304
- #define PRU_INTC_ECR1_REG 0x380
- #define PRU_INTC_ECR2_REG 0x384
- #define PRU_INTC_CMR1_REG 0x400
- #define PRU_INTC_CMR2_REG 0x404
- #define PRU_INTC_CMR3_REG 0x408
- #define PRU_INTC_CMR4_REG 0x40C
- #define PRU_INTC_CMR5_REG 0x410
- #define PRU_INTC_CMR6_REG 0x414
- #define PRU_INTC_CMR7_REG 0x418
- #define PRU_INTC_CMR8_REG 0x41C
- #define PRU_INTC_CMR9_REG 0x420
- #define PRU_INTC_CMR10_REG 0x424
- #define PRU_INTC_CMR11_REG 0x428
- #define PRU_INTC_CMR12_REG 0x42C
- #define PRU_INTC_CMR13_REG 0x430
- #define PRU_INTC_CMR14_REG 0x434
- #define PRU_INTC_CMR15_REG 0x438
- #define PRU_INTC_CMR16_REG 0x43C
- #define PRU_INTC_HMR1_REG 0x800
- #define PRU_INTC_HMR2_REG 0x804
- #define PRU_INTC_HMR3_REG 0x808
- #define PRU_INTC_SIPR1_REG 0xD00
- #define PRU_INTC_SIPR2_REG 0xD04
- #define PRU_INTC_SITR1_REG 0xD80
- #define PRU_INTC_SITR2_REG 0xD84
- #define PRU_INTC_HIER_REG 0x1500
- //***********************************************************************
- // Macros representing PRU Memory locations
- //***********************************************************************/
- #define PRUSS0_PRU0_DATARAM 0
- #define PRUSS0_PRU1_DATARAM 1
- #define PRUSS0_PRU0_IRAM 2
- #define PRUSS0_PRU1_IRAM 3
- #define PRUSS0_SHARED_DATARAM 4
- #define PRUSS0_CFG 5
- #define PRUSS0_UART 6
- #define PRUSS0_IEP 7
- #define PRUSS0_ECAP 8
- #define PRUSS0_MII_RT 9
- #define PRUSS0_MDIO 10
- //***********************************************************************
- // Macros representing Interrupt-Channel-Host sizes
- //***********************************************************************/
- #define MAX_HOSTS_SUPPORTED 10
- #define NUM_PRU_HOSTS 10
- #define NUM_PRU_CHANNELS 10
- #define NUM_PRU_SYS_EVTS 64
- //***********************************************************************
- // Macros to support dynamic chip detecting feature
- //***********************************************************************/
- #define AM18XX_INTC_PHYS_BASE 0x01C34000
- #define AM18XX_DATARAM0_PHYS_BASE 0x01C30000
- #define AM18XX_PRUSS_INTC_REV 0x4E825900
- #define AM33XX_INTC_PHYS_BASE 0x4a320000
- #define AM33XX_DATARAM0_PHYS_BASE 0x4a300000
- #define AM33XX_PRUSS_INTC_REV 0x4E82A900
- #define PRUSS_V1 1
- #define PRUSS_V2 2
- typedef struct __sysevt_to_channel_map
- {
- short sysevt;
- short channel;
- }tsysevt_to_channel_map;
-
- typedef struct __channel_to_host_map
- {
- short channel;
- short host;
- }tchannel_to_host_map;
-
- typedef struct __pruss_intc_initdata
- {
- //Enabled SYSEVTs - Range:0..63
- //{-1} indicates end of list
- char sysevts_enabled[NUM_PRU_SYS_EVTS];
-
- //SysEvt to Channel map. SYSEVTs - Range:0..63 Channels -Range: 0..9
- //{-1, -1} indicates end of list
- tsysevt_to_channel_map sysevt_to_channel_map[NUM_PRU_SYS_EVTS];
-
- //Channel to Host map.Channels -Range: 0..9 HOSTs - Range:0..9
- //{-1, -1} indicates end of list
- tchannel_to_host_map channel_to_host_map[NUM_PRU_CHANNELS];
-
- //10-bit mask - Enable Host0-Host9 {Host0/1:PRU0/1, Host2..9 : PRUEVT_OUT0..7)
- unsigned int host_enable_bitmask;
- }tpruss_intc_initdata;
-
- //typedef void *(*PRUSSDRV_IRQ_HANDLER) (void *);
- typedef void (*PRUSSDRV_IRQ_HANDLER)(void);
- //**********************************************************************
- // API FUNCTION PROTOTYPES
- //**********************************************************************/
- int PRUSSDRVPruReset(unsigned int pruNum);
- int PRUSSDRVPruDisable(unsigned char pruNum);
- int PRUSSDRVPruEnable(unsigned char pruNum);
- int PRUSSDRVPruWriteMemory(unsigned int pruMem,
- unsigned int wordoffset,
- unsigned int *source_mem,
- unsigned int bytelength);
- int PRUSSDRVPruExecProgram(int prunum, char *filename);
- int PRUSSDRVPruSendEvent(unsigned int eventnum);
- int PRUSSDRVPruClearEvent(unsigned int eventnum);
- int PRUSSDRVPruWaitEvent(unsigned int pruEvtoutNum);
- int PRUSSDRVPruSendWaitCearEvent(unsigned int sendEventNum,
- unsigned int pruEvtoutNum,
- unsigned int ackEventNum);
- int PRUSSDRVRegisterIrqHandler(unsigned int pruEvtoutNum,
- unsigned char channel,
- PRUSSDRV_IRQ_HANDLER irqHandler);
- int PRUSSDRVSetPRUBuffer(unsigned int pruNum,
- void *buffer,
- unsigned int numBytes);
-
- int PRUSSDRVMapL3Mem(void **address);
- int PRUSSDRVMapExtMem(void **address);
- int PRUSSDRVMapPruMem(unsigned int pru_ram_id, void **address);
- void PRUSSDRVIntcSetCmr(unsigned short sysevt,
- unsigned short channel);
- void PRUSSDRVIntcSetHmr(unsigned short channel,
- unsigned short host);
- void ICSS_Init(void);
- // #ifdef AM33XX
- // //int PRUSSDRVMapPeripheralIO(unsigned int per_id, void **address);
- // #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
|