1 #ifndef __NVKM_ACR_PRIV_H__
2 #define __NVKM_ACR_PRIV_H__
3 #include <subdev/acr.h>
4 struct lsb_header_tail
;
8 int (*load
)(struct nvkm_acr
*, int version
,
9 const struct nvkm_acr_fwif
*);
10 const struct nvkm_acr_func
*func
;
13 int gm200_acr_nofw(struct nvkm_acr
*, int, const struct nvkm_acr_fwif
*);
14 int gm20b_acr_load(struct nvkm_acr
*, int, const struct nvkm_acr_fwif
*);
15 int gp102_acr_load(struct nvkm_acr
*, int, const struct nvkm_acr_fwif
*);
18 struct nvkm_acr_func
{
19 const struct nvkm_acr_hsf_fwif
*load
;
20 const struct nvkm_acr_hsf_fwif
*ahesasc
;
21 const struct nvkm_acr_hsf_fwif
*asb
;
22 const struct nvkm_acr_hsf_fwif
*unload
;
23 int (*wpr_parse
)(struct nvkm_acr
*);
24 u32 (*wpr_layout
)(struct nvkm_acr
*);
25 int (*wpr_alloc
)(struct nvkm_acr
*, u32 wpr_size
);
26 int (*wpr_build
)(struct nvkm_acr
*, struct nvkm_acr_lsf
*rtos
);
27 void (*wpr_patch
)(struct nvkm_acr
*, s64 adjust
);
28 void (*wpr_check
)(struct nvkm_acr
*, u64
*start
, u64
*limit
);
29 int (*init
)(struct nvkm_acr
*);
30 void (*fini
)(struct nvkm_acr
*);
31 u64 bootstrap_falcons
;
34 extern const struct nvkm_acr_func gm200_acr
;
35 int gm200_acr_wpr_parse(struct nvkm_acr
*);
36 u32
gm200_acr_wpr_layout(struct nvkm_acr
*);
37 int gm200_acr_wpr_build(struct nvkm_acr
*, struct nvkm_acr_lsf
*);
38 void gm200_acr_wpr_patch(struct nvkm_acr
*, s64
);
39 void gm200_acr_wpr_check(struct nvkm_acr
*, u64
*, u64
*);
40 void gm200_acr_wpr_build_lsb_tail(struct nvkm_acr_lsfw
*,
41 struct lsb_header_tail
*);
42 int gm200_acr_init(struct nvkm_acr
*);
44 int gm20b_acr_wpr_alloc(struct nvkm_acr
*, u32 wpr_size
);
46 int gp102_acr_wpr_parse(struct nvkm_acr
*);
47 u32
gp102_acr_wpr_layout(struct nvkm_acr
*);
48 int gp102_acr_wpr_alloc(struct nvkm_acr
*, u32 wpr_size
);
49 int gp102_acr_wpr_build(struct nvkm_acr
*, struct nvkm_acr_lsf
*);
50 int gp102_acr_wpr_build_lsb(struct nvkm_acr
*, struct nvkm_acr_lsfw
*);
51 void gp102_acr_wpr_patch(struct nvkm_acr
*, s64
);
53 struct nvkm_acr_hsfw
{
54 const struct nvkm_acr_hsf_func
*func
;
56 struct list_head head
;
80 struct nvkm_acr_hsf_fwif
{
82 int (*load
)(struct nvkm_acr
*, const char *bl
, const char *fw
,
83 const char *name
, int version
,
84 const struct nvkm_acr_hsf_fwif
*);
85 const struct nvkm_acr_hsf_func
*func
;
88 int nvkm_acr_hsfw_load(struct nvkm_acr
*, const char *, const char *,
89 const char *, int, const struct nvkm_acr_hsf_fwif
*);
90 void nvkm_acr_hsfw_del_all(struct nvkm_acr
*);
93 const struct nvkm_acr_hsf_func
*func
;
95 struct list_head head
;
108 struct nvkm_memory
*ucode
;
109 struct nvkm_vma
*vma
;
110 struct nvkm_falcon
*falcon
;
113 struct nvkm_acr_hsf_func
{
114 int (*load
)(struct nvkm_acr
*, struct nvkm_acr_hsfw
*);
115 int (*boot
)(struct nvkm_acr
*, struct nvkm_acr_hsf
*);
116 void (*bld
)(struct nvkm_acr
*, struct nvkm_acr_hsf
*);
119 int gm200_acr_hsfw_load(struct nvkm_acr
*, struct nvkm_acr_hsfw
*,
120 struct nvkm_falcon
*);
121 int gm200_acr_hsfw_boot(struct nvkm_acr
*, struct nvkm_acr_hsf
*,
122 u32 clear_intr
, u32 mbox0_ok
);
124 int gm200_acr_load_boot(struct nvkm_acr
*, struct nvkm_acr_hsf
*);
126 extern const struct nvkm_acr_hsf_func gm200_acr_unload_0
;
127 int gm200_acr_unload_load(struct nvkm_acr
*, struct nvkm_acr_hsfw
*);
128 int gm200_acr_unload_boot(struct nvkm_acr
*, struct nvkm_acr_hsf
*);
129 void gm200_acr_hsfw_bld(struct nvkm_acr
*, struct nvkm_acr_hsf
*);
131 extern const struct nvkm_acr_hsf_func gm20b_acr_load_0
;
133 int gp102_acr_load_load(struct nvkm_acr
*, struct nvkm_acr_hsfw
*);
135 extern const struct nvkm_acr_hsf_func gp108_acr_unload_0
;
136 void gp108_acr_hsfw_bld(struct nvkm_acr
*, struct nvkm_acr_hsf
*);
138 int nvkm_acr_new_(const struct nvkm_acr_fwif
*, struct nvkm_device
*, int,
140 int nvkm_acr_hsf_boot(struct nvkm_acr
*, const char *name
);
142 struct nvkm_acr_lsf
{
143 const struct nvkm_acr_lsf_func
*func
;
144 struct nvkm_falcon
*falcon
;
145 enum nvkm_acr_lsf_id id
;
146 struct list_head head
;
149 struct nvkm_acr_lsfw
*nvkm_acr_lsfw_add(const struct nvkm_acr_lsf_func
*,
150 struct nvkm_acr
*, struct nvkm_falcon
*,
151 enum nvkm_acr_lsf_id
);
152 void nvkm_acr_lsfw_del(struct nvkm_acr_lsfw
*);
153 void nvkm_acr_lsfw_del_all(struct nvkm_acr
*);