summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/boardobj/boardobj.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/boardobj/boardobj.h')
-rw-r--r--drivers/gpu/nvgpu/boardobj/boardobj.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/boardobj/boardobj.h b/drivers/gpu/nvgpu/boardobj/boardobj.h
new file mode 100644
index 00000000..a433fda8
--- /dev/null
+++ b/drivers/gpu/nvgpu/boardobj/boardobj.h
@@ -0,0 +1,102 @@
1/*
2* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
3*
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21*/
22
23#ifndef _BOARDOBJ_H_
24#define _BOARDOBJ_H_
25
26#include <nvgpu/pmuif/nvgpu_gpmu_cmdif.h>
27
28#include "ctrl/ctrlboardobj.h"
29
30struct boardobj;
31
32/*
33* check whether the specified BOARDOBJ object implements the queried
34* type/class enumeration.
35*/
36typedef bool boardobj_implements(struct gk20a *g, struct boardobj *pboardobj,
37 u8 type);
38
39/*
40* Fills out the appropriate the nv_pmu_xxxx_device_desc_<xyz> driver->PMU
41* description structure, describing this BOARDOBJ board device to the PMU.
42*
43*/
44typedef u32 boardobj_pmudatainit(struct gk20a *g, struct boardobj *pboardobj,
45 struct nv_pmu_boardobj *pmudata);
46
47/*
48* Constructor for the base Board Object. Called by each device-specific
49* implementation of the BOARDOBJ interface to initialize the board object.
50*/
51typedef u32 boardobj_construct(struct gk20a *g, struct boardobj **pboardobj,
52 u16 size, void *args);
53
54/*
55* Destructor for the base board object. Called by each device-Specific
56* implementation of the BOARDOBJ interface to destroy the board object.
57* This has to be explicitly set by each device that extends from the
58* board object.
59*/
60typedef u32 boardobj_destruct(struct boardobj *pboardobj);
61
62/*
63* Base Class for all physical or logical device on the PCB.
64* Contains fields common to all devices on the board. Specific types of
65* devices may extend this object adding any details specific to that
66* device or device-type.
67*/
68
69struct boardobj {
70 struct gk20a *g;
71
72 u8 type; /*type of the device*/
73 u8 idx; /*index of boardobj within in its group*/
74 /* true if allocated in constructor. destructor should free */
75 u8 allocated;
76 u32 type_mask; /*mask of types this boardobjimplements*/
77 boardobj_implements *implements;
78 boardobj_destruct *destruct;
79 /*
80 * Access interface apis which will be overridden by the devices
81 * that inherit from BOARDOBJ
82 */
83 boardobj_pmudatainit *pmudatainit;
84 struct nvgpu_list_node node;
85};
86
87boardobj_construct boardobj_construct_super;
88boardobj_destruct boardobj_destruct_super;
89boardobj_implements boardobj_implements_super;
90boardobj_pmudatainit boardobj_pmudatainit_super;
91
92#define BOARDOBJ_GET_TYPE(pobj) (((struct boardobj *)(pobj))->type)
93#define BOARDOBJ_GET_IDX(pobj) (((struct boardobj *)(pobj))->idx)
94
95static inline struct boardobj *
96boardobj_from_node(struct nvgpu_list_node *node)
97{
98 return (struct boardobj *)
99 ((uintptr_t)node - offsetof(struct boardobj, node));
100};
101
102#endif