aboutsummaryrefslogtreecommitdiff
path: root/include/uapi/linux/mnh-sm.h
blob: 7ba9f196739a8d2e32f38b2f739413f50c7c0d79 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
 *
 * MNH State Manager Configuration.
 * Copyright (c) 2016, Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 */

#ifndef _UAPI__MNH_SM_H
#define _UAPI__MNH_SM_H

#define MIPI_TX0    0
#define MIPI_TX1    1
#define MIPI_TX_IPU 2
#define MIPI_RX0    0
#define MIPI_RX1    1
#define MIPI_RX2    2
#define MIPI_RX_IPU 3

#define MIPI_MODE_BYPASS       0
#define MIPI_MODE_BYPASS_W_IPU 1
#define MIPI_MODE_FUNCTIONAL   2

#define MNH_MIPI_VC0_EN_MASK	0x1
#define MNH_MIPI_VC1_EN_MASK	0x2
#define MNH_MIPI_VC2_EN_MASK	0x4
#define MNH_MIPI_VC3_EN_MASK	0x8
#define MNH_MIPI_VC_ALL_EN_MASK 0xf

#define MNH_SM_IOC_MAGIC 'T'
#define MNH_SM_MAX 8

#define MNH_ION_BUFFER_SIZE SZ_32M
#define FW_VER_SIZE 24

#define MNH_SM_IOC_GET_STATE \
	_IOR(MNH_SM_IOC_MAGIC, 1, int *)
#define MNH_SM_IOC_SET_STATE \
	_IOW(MNH_SM_IOC_MAGIC, 2, int)
#define MNH_SM_IOC_WAIT_FOR_STATE \
	_IOW(MNH_SM_IOC_MAGIC, 3, int)
#define MNH_SM_IOC_CONFIG_MIPI \
	_IOW(MNH_SM_IOC_MAGIC, 4, struct mnh_mipi_config *)
#define MNH_SM_IOC_STOP_MIPI \
	_IOW(MNH_SM_IOC_MAGIC, 5, struct mnh_mipi_config *)
#define MNH_SM_IOC_WAIT_FOR_POWER \
	_IO(MNH_SM_IOC_MAGIC, 6)
#define MNH_SM_IOC_GET_UPDATE_BUF \
	_IOR(MNH_SM_IOC_MAGIC, 7, int *)
#define MNH_SM_IOC_POST_UPDATE_BUF \
	_IOW(MNH_SM_IOC_MAGIC, 8, struct mnh_update_configs *)
#define MNH_SM_IOC_GET_FW_VER \
	_IOR(MNH_SM_IOC_MAGIC, 9, char [FW_VER_SIZE])

enum mnh_sm_state {
	MNH_STATE_OFF, /* powered off */
	MNH_STATE_ACTIVE, /* powered on and booted */
	MNH_STATE_SUSPEND, /* suspended, ddr in self-refresh */
	MNH_STATE_MAX,
};

enum mnh_fw_slot {
	MNH_FW_SLOT_SBL = 0,
	MNH_FW_SLOT_KERNEL,
	MNH_FW_SLOT_DTB,
	MNH_FW_SLOT_RAMDISK,
	MAX_NR_MNH_FW_SLOTS
};

struct mnh_mipi_config {
	/* Tx dev (MIPI sink) MNH_MUX_DEVICE_TX* */
	int txdev;
	/* Rx dev (MIPI source) MNH_MUX_DEVICE_RX* */
	int rxdev;
	/* RX MIPI transfer rate */
	int rx_rate;
	/* TX MIPI transfer rate */
	int tx_rate;
	/* Mux mode */
	int mode;
	/* virtual channel enable mask */
	int vc_en_mask;
};

struct mnh_update_config {
	/* slot type (dtb, kernel, ramdisk) */
	enum mnh_fw_slot slot_type;
	/* slot offset in the ion buffer */
	unsigned long offset;
	/* slot size */
	size_t size;
};

struct mnh_update_configs {
	struct mnh_update_config config[MAX_NR_MNH_FW_SLOTS];
};

#endif /* _UAPI__MNH_SM_H */