xref: /freebsd/sys/dev/asmc/asmcmmio.h (revision a48b900300ebdbd5c47e664b4cc06e705da91bd8)
1*a48b9003SAbdelkader Boudih /*
2*a48b9003SAbdelkader Boudih  * Copyright (c) 2026 Abdelkader Boudih <freebsd@seuros.com>
3*a48b9003SAbdelkader Boudih  *
4*a48b9003SAbdelkader Boudih  * SPDX-License-Identifier: BSD-2-Clause
5*a48b9003SAbdelkader Boudih  */
6*a48b9003SAbdelkader Boudih 
7*a48b9003SAbdelkader Boudih #ifndef _DEV_ASMC_ASMCMMIO_H_
8*a48b9003SAbdelkader Boudih #define _DEV_ASMC_ASMCMMIO_H_
9*a48b9003SAbdelkader Boudih 
10*a48b9003SAbdelkader Boudih struct asmc_softc;
11*a48b9003SAbdelkader Boudih 
12*a48b9003SAbdelkader Boudih /*
13*a48b9003SAbdelkader Boudih  * MMIO register offsets.
14*a48b9003SAbdelkader Boudih  */
15*a48b9003SAbdelkader Boudih #define ASMC_MMIO_DATA		0x0000
16*a48b9003SAbdelkader Boudih #define ASMC_MMIO_KEY_NAME	0x0078
17*a48b9003SAbdelkader Boudih #define ASMC_MMIO_DATA_LEN	0x007D
18*a48b9003SAbdelkader Boudih #define ASMC_MMIO_SMC_ID	0x007E
19*a48b9003SAbdelkader Boudih #define ASMC_MMIO_CMD		0x007F
20*a48b9003SAbdelkader Boudih #define ASMC_MMIO_STATUS	0x4005
21*a48b9003SAbdelkader Boudih #define ASMC_MMIO_MIN_SIZE	0x4006
22*a48b9003SAbdelkader Boudih #define ASMC_MMIO_STATUS_READY	0x20	/* Bit 5 */
23*a48b9003SAbdelkader Boudih #define ASMC_MMIO_MAX_WAIT	24
24*a48b9003SAbdelkader Boudih 
25*a48b9003SAbdelkader Boudih /*
26*a48b9003SAbdelkader Boudih  * T2-specific keys.
27*a48b9003SAbdelkader Boudih  */
28*a48b9003SAbdelkader Boudih #define ASMC_KEY_LDKN		"LDKN"	/* RO; 1 byte, firmware version */
29*a48b9003SAbdelkader Boudih #define ASMC_KEY_BCLM		"BCLM"	/* RW; 1 byte, battery charge limit 0-100 */
30*a48b9003SAbdelkader Boudih #define ASMC_KEY_FANMANUAL_T2	"F%dMd"	/* RW; 1 byte per fan (T2) */
31*a48b9003SAbdelkader Boudih 
32*a48b9003SAbdelkader Boudih /*
33*a48b9003SAbdelkader Boudih  * MMIO backend functions.
34*a48b9003SAbdelkader Boudih  */
35*a48b9003SAbdelkader Boudih int	asmc_mmio_probe(device_t dev);
36*a48b9003SAbdelkader Boudih void	asmc_mmio_detach(device_t dev, struct asmc_softc *sc);
37*a48b9003SAbdelkader Boudih int	asmc_mmio_key_read(device_t dev, const char *key,
38*a48b9003SAbdelkader Boudih 	    uint8_t *buf, uint8_t len);
39*a48b9003SAbdelkader Boudih int	asmc_mmio_key_write(device_t dev, const char *key,
40*a48b9003SAbdelkader Boudih 	    uint8_t *buf, uint8_t len);
41*a48b9003SAbdelkader Boudih int	asmc_mmio_key_getinfo(device_t dev, const char *key,
42*a48b9003SAbdelkader Boudih 	    uint8_t *len, char *type);
43*a48b9003SAbdelkader Boudih int	asmc_mmio_key_getbyindex(device_t dev, int index, char *key);
44*a48b9003SAbdelkader Boudih 
45*a48b9003SAbdelkader Boudih /*
46*a48b9003SAbdelkader Boudih  * IEEE 754 float <-> uint32 conversion for T2 fan RPM values.
47*a48b9003SAbdelkader Boudih  */
48*a48b9003SAbdelkader Boudih uint32_t	asmc_float_to_u32(uint32_t d);
49*a48b9003SAbdelkader Boudih uint32_t	asmc_u32_to_float(uint32_t d);
50*a48b9003SAbdelkader Boudih 
51*a48b9003SAbdelkader Boudih /*
52*a48b9003SAbdelkader Boudih  * T2-specific sysctls.
53*a48b9003SAbdelkader Boudih  */
54*a48b9003SAbdelkader Boudih int	asmc_bclm_sysctl(SYSCTL_HANDLER_ARGS);
55*a48b9003SAbdelkader Boudih 
56*a48b9003SAbdelkader Boudih #endif /* _DEV_ASMC_ASMCMMIO_H_ */
57