Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
gpu
drm
nouveau
core
include
core
device.h
Go to the documentation of this file.
1
#ifndef __NOUVEAU_DEVICE_H__
2
#define __NOUVEAU_DEVICE_H__
3
4
#include <
core/object.h
>
5
#include <
core/subdev.h
>
6
#include <
core/engine.h
>
7
8
enum
nv_subdev_type
{
9
NVDEV_SUBDEV_DEVICE
,
10
NVDEV_SUBDEV_VBIOS
,
11
12
/* All subdevs from DEVINIT to DEVINIT_LAST will be created before
13
* *any* of them are initialised. This subdev category is used
14
* for any subdevs that the VBIOS init table parsing may call out
15
* to during POST.
16
*/
17
NVDEV_SUBDEV_DEVINIT
,
18
NVDEV_SUBDEV_GPIO
,
19
NVDEV_SUBDEV_I2C
,
20
NVDEV_SUBDEV_CLOCK
,
21
NVDEV_SUBDEV_DEVINIT_LAST
=
NVDEV_SUBDEV_CLOCK
,
22
23
/* This grouping of subdevs are initialised right after they've
24
* been created, and are allowed to assume any subdevs in the
25
* list above them exist and have been initialised.
26
*/
27
NVDEV_SUBDEV_MXM
,
28
NVDEV_SUBDEV_MC
,
29
NVDEV_SUBDEV_TIMER
,
30
NVDEV_SUBDEV_FB
,
31
NVDEV_SUBDEV_LTCG
,
32
NVDEV_SUBDEV_IBUS
,
33
NVDEV_SUBDEV_INSTMEM
,
34
NVDEV_SUBDEV_VM
,
35
NVDEV_SUBDEV_BAR
,
36
NVDEV_SUBDEV_VOLT
,
37
NVDEV_SUBDEV_THERM
,
38
39
NVDEV_ENGINE_DMAOBJ
,
40
NVDEV_ENGINE_FIFO
,
41
NVDEV_ENGINE_SW
,
42
NVDEV_ENGINE_GR
,
43
NVDEV_ENGINE_MPEG
,
44
NVDEV_ENGINE_ME
,
45
NVDEV_ENGINE_VP
,
46
NVDEV_ENGINE_CRYPT
,
47
NVDEV_ENGINE_BSP
,
48
NVDEV_ENGINE_PPP
,
49
NVDEV_ENGINE_COPY0
,
50
NVDEV_ENGINE_COPY1
,
51
NVDEV_ENGINE_UNK1C1
,
52
NVDEV_ENGINE_VENC
,
53
NVDEV_ENGINE_DISP
,
54
55
NVDEV_SUBDEV_NR
,
56
};
57
58
struct
nouveau_device
{
59
struct
nouveau_subdev
base
;
60
struct
list_head
head
;
61
62
struct
pci_dev
*
pdev
;
63
u64
handle
;
64
65
const
char
*
cfgopt
;
66
const
char
*
dbgopt
;
67
const
char
*
name
;
68
const
char
*
cname
;
69
70
enum
{
71
NV_04
= 0x04,
72
NV_10
= 0x10,
73
NV_20
= 0x20,
74
NV_30
= 0x30,
75
NV_40
= 0x40,
76
NV_50
= 0x50,
77
NV_C0
= 0xc0,
78
NV_D0
= 0xd0,
79
NV_E0
= 0xe0,
80
}
card_type
;
81
u32
chipset
;
82
u32
crystal
;
83
84
struct
nouveau_oclass
*
oclass
[
NVDEV_SUBDEV_NR
];
85
struct
nouveau_object
*
subdev
[
NVDEV_SUBDEV_NR
];
86
};
87
88
static
inline
struct
nouveau_device
*
89
nv_device(
void
*obj)
90
{
91
struct
nouveau_object
*
object
= nv_object(obj);
92
struct
nouveau_object
*
device
= object;
93
94
if
(device->
engine
)
95
device = device->
engine
;
96
if
(device->
parent
)
97
device = device->
parent
;
98
99
#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
100
if
(
unlikely
(!
nv_iclass
(device,
NV_SUBDEV_CLASS
) ||
101
(
nv_hclass
(device) & 0xff) !=
NVDEV_SUBDEV_DEVICE
)) {
102
nv_assert
(
"BAD CAST -> NvDevice, 0x%08x 0x%08x"
,
103
nv_hclass
(
object
),
nv_hclass
(device));
104
}
105
#endif
106
107
return
(
void
*)device;
108
}
109
110
static
inline
struct
nouveau_subdev
*
111
nouveau_subdev
(
void
*obj,
int
sub)
112
{
113
if
(nv_device(obj)->
subdev
[sub])
114
return
nv_subdev(nv_device(obj)->
subdev
[sub]);
115
return
NULL
;
116
}
117
118
static
inline
struct
nouveau_engine
*
119
nouveau_engine
(
void
*obj,
int
sub)
120
{
121
struct
nouveau_subdev
*
subdev
=
nouveau_subdev
(obj, sub);
122
if
(subdev &&
nv_iclass
(subdev,
NV_ENGINE_CLASS
))
123
return
nv_engine(subdev);
124
return
NULL
;
125
}
126
127
static
inline
bool
128
nv_device_match(
struct
nouveau_object
*
object
,
u16
dev
,
u16
ven,
u16
sub)
129
{
130
struct
nouveau_device
*device = nv_device(
object
);
131
return
device->
pdev
->device == dev &&
132
device->
pdev
->subsystem_vendor == ven &&
133
device->
pdev
->subsystem_device == sub;
134
}
135
136
#endif
Generated on Thu Jan 10 2013 12:49:21 for Linux Kernel by
1.8.2