1/*	$NetBSD: volt.h,v 1.3 2021/12/18 23:45:33 riastradh Exp $	*/
2
3/* SPDX-License-Identifier: MIT */
4#ifndef __NVBIOS_VOLT_H__
5#define __NVBIOS_VOLT_H__
6
7enum nvbios_volt_type {
8	NVBIOS_VOLT_GPIO = 0,
9	NVBIOS_VOLT_PWM,
10};
11
12struct nvbios_volt {
13	enum nvbios_volt_type type;
14	u32 min;
15	u32 max;
16	u32 base;
17
18	/* GPIO mode */
19	bool ranged;
20	u8   vidmask;
21	s16  step;
22
23	/* PWM mode */
24	u32 pwm_freq;
25	u32 pwm_range;
26};
27
28u32 nvbios_volt_table(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
29u32 nvbios_volt_parse(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
30		      struct nvbios_volt *);
31
32struct nvbios_volt_entry {
33	u32 voltage;
34	u8  vid;
35};
36
37u32 nvbios_volt_entry(struct nvkm_bios *, int idx, u8 *ver, u8 *len);
38u32 nvbios_volt_entry_parse(struct nvkm_bios *, int idx, u8 *ver, u8 *len,
39			    struct nvbios_volt_entry *);
40#endif
41