cb117b5a0cee5f619516138e7bd30bbb8a9472c2
[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, 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
30 #include <linux/cdev.h>
31 #include <linux/io.h>
32
33 #define NVHOST_CHANNEL_BASE 0
34 #define NVHOST_NUMCHANNELS (NV_HOST1X_CHANNELS - 1)
35 #define NVHOST_MAX_GATHERS 512
36 #define NVHOST_MAX_HANDLES 1280
37
38 struct nvhost_master;
39
40 struct nvhost_channeldesc {
41         const char *name;
42         nvhost_modulef power;
43         u32 syncpts;
44         u32 waitbases;
45         u32 modulemutexes;
46         u32 class;
47         bool exclusive;
48 };
49
50 struct nvhost_channel {
51         int refcount;
52         struct mutex reflock;
53         struct mutex submitlock;
54         void __iomem *aperture;
55         struct nvhost_master *dev;
56         const struct nvhost_channeldesc *desc;
57         struct nvhost_hwctx *cur_ctx;
58         struct device *node;
59         struct cdev cdev;
60         struct nvhost_hwctx_handler ctxhandler;
61         struct nvhost_module mod;
62         struct nvhost_cdma cdma;
63 };
64
65 struct nvhost_op_pair {
66         u32 op1;
67         u32 op2;
68 };
69
70 struct nvhost_cpuinterrupt {
71         u32 syncpt_val;
72         void *intr_data;
73 };
74
75 int nvhost_channel_init(
76         struct nvhost_channel *ch,
77         struct nvhost_master *dev, int index);
78
79 void nvhost_channel_submit(struct nvhost_channel *ch,
80                         struct nvmap_client *user_nvmap,
81                         struct nvhost_op_pair *ops, int num_pairs,
82                         struct nvhost_cpuinterrupt *intrs, int num_intrs,
83                         struct nvmap_handle **unpins, int num_unpins,
84                         u32 syncpt_id, u32 syncpt_val,
85                         int num_nulled_incrs);
86
87 struct nvhost_channel *nvhost_getchannel(struct nvhost_channel *ch);
88 void nvhost_putchannel(struct nvhost_channel *ch, struct nvhost_hwctx *ctx);
89 void nvhost_channel_suspend(struct nvhost_channel *ch);
90
91 #endif