video: tegra: host: Move device data to nvhost_device
[linux-2.6.git] / drivers / video / tegra / host / nvhost_channel.h
1 /*
2  * drivers/video/tegra/host/nvhost_channel.h
3  *
4  * Tegra Graphics Host Channel
5  *
6  * Copyright (c) 2010-2011, NVIDIA Corporation.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
16  * more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21  */
22
23 #ifndef __NVHOST_CHANNEL_H
24 #define __NVHOST_CHANNEL_H
25
26 #include "nvhost_cdma.h"
27 #include "nvhost_acm.h"
28 #include "nvhost_hwctx.h"
29 #include "nvhost_job.h"
30
31 #include <linux/cdev.h>
32 #include <linux/io.h>
33
34 #define NVHOST_MAX_WAIT_CHECKS 256
35 #define NVHOST_MAX_GATHERS 512
36 #define NVHOST_MAX_HANDLES 1280
37 #define NVHOST_MAX_POWERGATE_IDS 2
38
39 struct nvhost_master;
40 struct nvhost_waitchk;
41 struct nvhost_device;
42
43 struct nvhost_channel_gather {
44         u32 words;
45         phys_addr_t mem;
46         u32 mem_id;
47         int offset;
48 };
49
50 struct nvhost_channel {
51         int refcount;
52         int chid;
53         u32 syncpt_id;
54         struct mutex reflock;
55         struct mutex submitlock;
56         void __iomem *aperture;
57         struct nvhost_hwctx *cur_ctx;
58         struct device *node;
59         struct nvhost_device *dev;
60         struct cdev cdev;
61         struct nvhost_hwctx_handler ctxhandler;
62         struct nvhost_cdma cdma;
63 };
64
65 int nvhost_channel_init(
66         struct nvhost_channel *ch,
67         struct nvhost_master *dev, int index);
68
69 int nvhost_channel_submit(struct nvhost_job *job);
70
71 struct nvhost_channel *nvhost_getchannel(struct nvhost_channel *ch);
72 void nvhost_putchannel(struct nvhost_channel *ch, struct nvhost_hwctx *ctx);
73 int nvhost_channel_suspend(struct nvhost_channel *ch);
74
75 #define channel_cdma_op(ch) (ch->dev->host->op.cdma)
76 #define channel_op(ch) (ch->dev->host->op.channel)
77 #define host_channel_op(host) (host->op.channel)
78
79 int nvhost_channel_drain_read_fifo(void __iomem *chan_regs,
80                         u32 *ptr, unsigned int count, unsigned int *pending);
81
82 int nvhost_channel_read_3d_reg(
83         struct nvhost_channel *channel,
84         struct nvhost_hwctx *hwctx,
85         u32 offset,
86         u32 *value);
87
88 #endif