104 lines
3.2 KiB
C
104 lines
3.2 KiB
C
/*
|
|
* drivers/video/tegra/host/nvhost_channel.h
|
|
*
|
|
* Tegra Graphics Host Channel
|
|
*
|
|
* Copyright (c) 2010-2020, NVIDIA Corporation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __NVHOST_CHANNEL_H
|
|
#define __NVHOST_CHANNEL_H
|
|
|
|
#include <linux/cdev.h>
|
|
#include <linux/io.h>
|
|
#include <linux/nvhost.h>
|
|
#include "nvhost_cdma.h"
|
|
|
|
#define NVHOST_MAX_WAIT_CHECKS 256
|
|
#define NVHOST_MAX_GATHERS 512
|
|
#define NVHOST_MAX_HANDLES 1280
|
|
#define NVHOST_MAX_POWERGATE_IDS 2
|
|
|
|
struct nvhost_master;
|
|
struct platform_device;
|
|
struct nvhost_channel;
|
|
|
|
struct nvhost_channel_ops {
|
|
const char *soc_name;
|
|
int (*init)(struct nvhost_channel *,
|
|
struct nvhost_master *);
|
|
int (*submit)(struct nvhost_job *job);
|
|
int (*init_gather_filter)(struct platform_device *pdev,
|
|
struct nvhost_channel *ch);
|
|
};
|
|
|
|
struct nvhost_channel {
|
|
struct nvhost_channel_ops ops;
|
|
struct kref refcount;
|
|
int chid;
|
|
int dev_chid;
|
|
struct mutex submitlock;
|
|
void __iomem *aperture;
|
|
struct platform_device *dev;
|
|
struct nvhost_cdma cdma;
|
|
bool cdma_initialized;
|
|
/* pointer to channel address space */
|
|
struct nvhost_vm *vm;
|
|
/* owner identifier */
|
|
void *identifier;
|
|
};
|
|
|
|
#define channel_op(ch) (ch->ops)
|
|
|
|
int nvhost_alloc_channels(struct nvhost_master *host);
|
|
int nvhost_channel_remove_identifier(struct nvhost_device_data *pdata,
|
|
void *identifier);
|
|
int nvhost_channel_unmap(struct nvhost_channel *ch);
|
|
int nvhost_channel_release(struct nvhost_device_data *pdata);
|
|
int nvhost_channel_list_free(struct nvhost_master *host);
|
|
struct nvhost_channel *nvhost_check_channel(struct nvhost_device_data *pdata);
|
|
int nvhost_channel_init(struct nvhost_channel *ch,
|
|
struct nvhost_master *dev);
|
|
|
|
int nvhost_channel_suspend(struct nvhost_master *host);
|
|
|
|
int nvhost_channel_read_reg(struct nvhost_channel *channel,
|
|
u32 offset, u32 *value);
|
|
|
|
struct nvhost_channel *nvhost_alloc_channel_internal(int chindex,
|
|
int max_channels);
|
|
|
|
void nvhost_channel_init_gather_filter(struct platform_device *pdev,
|
|
struct nvhost_channel *ch);
|
|
|
|
bool nvhost_channel_is_reset_required(struct nvhost_channel *ch);
|
|
|
|
int nvhost_channel_abort(struct nvhost_device_data *pdata,
|
|
void *identifier);
|
|
|
|
int nvhost_channel_map_with_vm(struct nvhost_device_data *pdata,
|
|
struct nvhost_channel **channel,
|
|
void *identifier,
|
|
void *vm_identifier);
|
|
|
|
int nvhost_channel_nb_channels(struct nvhost_master *host);
|
|
int nvhost_channel_ch_base(struct nvhost_master *host);
|
|
int nvhost_channel_ch_limit(struct nvhost_master *host);
|
|
int nvhost_channel_get_id_from_index(struct nvhost_master *host, int index);
|
|
int nvhost_channel_get_index_from_id(struct nvhost_master *host, int chid);
|
|
int nvhost_channel_set_syncpoint_name(struct nvhost_syncpt *sp, u32 syncpt_id,
|
|
const char *syncpt_name);
|
|
#endif
|