brintos

brintos / linux-shallow public Read only

0
0
Text · 3.7 KiB · 4881c8b Raw
119 lines · c
1#ifndef __NVKM_ACR_PRIV_H__2#define __NVKM_ACR_PRIV_H__3#include <subdev/acr.h>4struct lsb_header_tail;5 6struct nvkm_acr_fwif {7	int version;8	int (*load)(struct nvkm_acr *, int version,9		    const struct nvkm_acr_fwif *);10	const struct nvkm_acr_func *func;11};12 13int gm200_acr_nofw(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);14int gm20b_acr_load(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);15int gp102_acr_load(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);16 17struct nvkm_acr_lsf;18struct 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	int (*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;32};33 34extern const struct nvkm_acr_func gm200_acr;35int gm200_acr_wpr_parse(struct nvkm_acr *);36u32 gm200_acr_wpr_layout(struct nvkm_acr *);37int gm200_acr_wpr_build(struct nvkm_acr *, struct nvkm_acr_lsf *);38int gm200_acr_wpr_patch(struct nvkm_acr *, s64);39void gm200_acr_wpr_check(struct nvkm_acr *, u64 *, u64 *);40void gm200_acr_wpr_build_lsb_tail(struct nvkm_acr_lsfw *,41				  struct lsb_header_tail *);42int gm200_acr_init(struct nvkm_acr *);43 44int gm20b_acr_wpr_alloc(struct nvkm_acr *, u32 wpr_size);45 46int gp102_acr_wpr_parse(struct nvkm_acr *);47u32 gp102_acr_wpr_layout(struct nvkm_acr *);48int gp102_acr_wpr_alloc(struct nvkm_acr *, u32 wpr_size);49int gp102_acr_wpr_build(struct nvkm_acr *, struct nvkm_acr_lsf *);50int gp102_acr_wpr_build_lsb(struct nvkm_acr *, struct nvkm_acr_lsfw *);51int gp102_acr_wpr_patch(struct nvkm_acr *, s64);52 53int tu102_acr_init(struct nvkm_acr *);54 55void ga100_acr_wpr_check(struct nvkm_acr *, u64 *, u64 *);56 57struct nvkm_acr_hsfw {58	struct nvkm_falcon_fw fw;59 60	enum nvkm_acr_hsf_id {61		NVKM_ACR_HSF_PMU,62		NVKM_ACR_HSF_SEC2,63		NVKM_ACR_HSF_GSP,64	} falcon_id;65	u32 boot_mbox0;66	u32 intr_clear;67 68	struct list_head head;69};70 71int nvkm_acr_hsfw_boot(struct nvkm_acr *, const char *name);72 73struct nvkm_acr_hsf_fwif {74	int version;75	int (*load)(struct nvkm_acr *, const char *bl, const char *fw,76		    const char *name, int version,77		    const struct nvkm_acr_hsf_fwif *);78	const struct nvkm_falcon_fw_func *func;79 80	enum nvkm_acr_hsf_id falcon_id;81	u32 boot_mbox0;82	u32 intr_clear;83};84 85 86int gm200_acr_hsfw_ctor(struct nvkm_acr *, const char *, const char *, const char *, int,87			const struct nvkm_acr_hsf_fwif *);88int gm200_acr_hsfw_load_bld(struct nvkm_falcon_fw *);89extern const struct nvkm_falcon_fw_func gm200_acr_unload_0;90 91extern const struct nvkm_falcon_fw_func gm20b_acr_load_0;92 93int gp102_acr_load_setup(struct nvkm_falcon_fw *);94 95extern const struct nvkm_falcon_fw_func gp108_acr_load_0;96 97extern const struct nvkm_falcon_fw_func gp108_acr_hsfw_0;98int gp108_acr_hsfw_load_bld(struct nvkm_falcon_fw *);99 100int ga100_acr_hsfw_ctor(struct nvkm_acr *, const char *, const char *, const char *, int,101			const struct nvkm_acr_hsf_fwif *);102 103int nvkm_acr_new_(const struct nvkm_acr_fwif *, struct nvkm_device *, enum nvkm_subdev_type,104		  int inst, struct nvkm_acr **);105 106struct nvkm_acr_lsf {107	const struct nvkm_acr_lsf_func *func;108	struct nvkm_falcon *falcon;109	enum nvkm_acr_lsf_id id;110	struct list_head head;111};112 113struct nvkm_acr_lsfw *nvkm_acr_lsfw_add(const struct nvkm_acr_lsf_func *,114					struct nvkm_acr *, struct nvkm_falcon *,115					enum nvkm_acr_lsf_id);116void nvkm_acr_lsfw_del(struct nvkm_acr_lsfw *);117void nvkm_acr_lsfw_del_all(struct nvkm_acr *);118#endif119