Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/include/linux/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 4 kB image not shown  

Quelle  pruss_driver.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * PRU-ICSS sub-system specific definitions
 *
 * Copyright (C) 2014-2020 Texas Instruments Incorporated - http://www.ti.com/
 * Suman Anna <s-anna@ti.com>
 */


#ifndef _PRUSS_DRIVER_H_
#define _PRUSS_DRIVER_H_

#include <linux/mutex.h>
#include <linux/remoteproc/pruss.h>
#include <linux/types.h>
#include <linux/err.h>

/*
 * enum pruss_gp_mux_sel - PRUSS GPI/O Mux modes for the
 * PRUSS_GPCFG0/1 registers
 *
 * NOTE: The below defines are the most common values, but there
 * are some exceptions like on 66AK2G, where the RESERVED and MII2
 * values are interchanged. Also, this bit-field does not exist on
 * AM335x SoCs
 */

enum pruss_gp_mux_sel {
 PRUSS_GP_MUX_SEL_GP,
 PRUSS_GP_MUX_SEL_ENDAT,
 PRUSS_GP_MUX_SEL_RESERVED,
 PRUSS_GP_MUX_SEL_SD,
 PRUSS_GP_MUX_SEL_MII2,
 PRUSS_GP_MUX_SEL_MAX,
};

/*
 * enum pruss_gpi_mode - PRUSS GPI configuration modes, used
 *  to program the PRUSS_GPCFG0/1 registers
 */

enum pruss_gpi_mode {
 PRUSS_GPI_MODE_DIRECT,
 PRUSS_GPI_MODE_PARALLEL,
 PRUSS_GPI_MODE_28BIT_SHIFT,
 PRUSS_GPI_MODE_MII,
 PRUSS_GPI_MODE_MAX,
};

/**
 * enum pru_type - PRU core type identifier
 *
 * @PRU_TYPE_PRU: Programmable Real-time Unit
 * @PRU_TYPE_RTU: Auxiliary Programmable Real-Time Unit
 * @PRU_TYPE_TX_PRU: Transmit Programmable Real-Time Unit
 * @PRU_TYPE_MAX: just keep this one at the end
 */

enum pru_type {
 PRU_TYPE_PRU,
 PRU_TYPE_RTU,
 PRU_TYPE_TX_PRU,
 PRU_TYPE_MAX,
};

/*
 * enum pruss_mem - PRUSS memory range identifiers
 */

enum pruss_mem {
 PRUSS_MEM_DRAM0 = 0,
 PRUSS_MEM_DRAM1,
 PRUSS_MEM_SHRD_RAM2,
 PRUSS_MEM_MAX,
};

/**
 * struct pruss_mem_region - PRUSS memory region structure
 * @va: kernel virtual address of the PRUSS memory region
 * @pa: physical (bus) address of the PRUSS memory region
 * @size: size of the PRUSS memory region
 */

struct pruss_mem_region {
 void __iomem *va;
 phys_addr_t pa;
 size_t size;
};

/**
 * struct pruss - PRUSS parent structure
 * @dev: pruss device pointer
 * @cfg_base: base iomap for CFG region
 * @cfg_regmap: regmap for config region
 * @mem_regions: data for each of the PRUSS memory regions
 * @mem_in_use: to indicate if memory resource is in use
 * @lock: mutex to serialize access to resources
 * @core_clk_mux: clk handle for PRUSS CORE_CLK_MUX
 * @iep_clk_mux: clk handle for PRUSS IEP_CLK_MUX
 */

struct pruss {
 struct device *dev;
 void __iomem *cfg_base;
 struct regmap *cfg_regmap;
 struct pruss_mem_region mem_regions[PRUSS_MEM_MAX];
 struct pruss_mem_region *mem_in_use[PRUSS_MEM_MAX];
 struct mutex lock; /* PRU resource lock */
 struct clk *core_clk_mux;
 struct clk *iep_clk_mux;
};

#if IS_ENABLED(CONFIG_TI_PRUSS)

struct pruss *pruss_get(struct rproc *rproc);
void pruss_put(struct pruss *pruss);
int pruss_request_mem_region(struct pruss *pruss, enum pruss_mem mem_id,
        struct pruss_mem_region *region);
int pruss_release_mem_region(struct pruss *pruss,
        struct pruss_mem_region *region);
int pruss_cfg_get_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 *mux);
int pruss_cfg_set_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 mux);
int pruss_cfg_gpimode(struct pruss *pruss, enum pruss_pru_id pru_id,
        enum pruss_gpi_mode mode);
int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable);
int pruss_cfg_xfr_enable(struct pruss *pruss, enum pru_type pru_type,
    bool enable);

#else

static inline struct pruss *pruss_get(struct rproc *rproc)
{
 return ERR_PTR(-EOPNOTSUPP);
}

static inline void pruss_put(struct pruss *pruss) { }

static inline int pruss_request_mem_region(struct pruss *pruss,
        enum pruss_mem mem_id,
        struct pruss_mem_region *region)
{
 return -EOPNOTSUPP;
}

static inline int pruss_release_mem_region(struct pruss *pruss,
        struct pruss_mem_region *region)
{
 return -EOPNOTSUPP;
}

static inline int pruss_cfg_get_gpmux(struct pruss *pruss,
          enum pruss_pru_id pru_id, u8 *mux)
{
 return -EOPNOTSUPP;
}

static inline int pruss_cfg_set_gpmux(struct pruss *pruss,
          enum pruss_pru_id pru_id, u8 mux)
{
 return -EOPNOTSUPP;
}

static inline int pruss_cfg_gpimode(struct pruss *pruss,
        enum pruss_pru_id pru_id,
        enum pruss_gpi_mode mode)
{
 return -EOPNOTSUPP;
}

static inline int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable)
{
 return -EOPNOTSUPP;
}

static inline int pruss_cfg_xfr_enable(struct pruss *pruss,
           enum pru_type pru_type,
           bool enable)
{
 return -EOPNOTSUPP;
}

#endif /* CONFIG_TI_PRUSS */

#endif /* _PRUSS_DRIVER_H_ */

96%


¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.