1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * access_tokenid.h
4 *
5 * Copyright (C) 2022-2023 Huawei Technologies Co., Ltd. All rights reserved.
6 *
7 */
8
9#ifndef _ACCESS_TOKEN_ID_H
10#define _ACCESS_TOKEN_ID_H
11
12#include <linux/ioctl.h>
13#include <linux/types.h>
14
15#define	ACCESS_TOKEN_ID_IOCTL_BASE	'A'
16#define MAX_PERM_GROUP_NUM 64
17
18enum {
19	GET_TOKEN_ID = 1,
20	SET_TOKEN_ID,
21	GET_FTOKEN_ID,
22	SET_FTOKEN_ID,
23	ADD_PERMISSIONS,
24	REMOVE_PERMISSIONS,
25	GET_PERMISSION,
26	SET_PERMISSION,
27	ACCESS_TOKENID_MAX_NR
28};
29
30typedef struct {
31	unsigned int token_uniqueid : 20;
32	unsigned int res : 5;
33	unsigned int render_flag : 1;
34	unsigned int dlp_flag : 1;
35	unsigned int type : 2;
36	unsigned int version : 3;
37} access_tokenid_inner;
38
39typedef struct {
40	uint32_t token;
41	uint32_t op_code;
42	bool is_granted;
43} ioctl_set_get_perm_data;
44
45typedef struct {
46	uint32_t token;
47	uint32_t perm[MAX_PERM_GROUP_NUM];
48} ioctl_add_perm_data;
49
50struct token_perm_node {
51	ioctl_add_perm_data perm_data;
52	struct token_perm_node *left;
53	struct token_perm_node *right;
54};
55
56#define	ACCESS_TOKENID_GET_TOKENID \
57	_IOR(ACCESS_TOKEN_ID_IOCTL_BASE, GET_TOKEN_ID, unsigned long long)
58#define	ACCESS_TOKENID_SET_TOKENID \
59	_IOW(ACCESS_TOKEN_ID_IOCTL_BASE, SET_TOKEN_ID, unsigned long long)
60#define	ACCESS_TOKENID_GET_FTOKENID \
61	_IOR(ACCESS_TOKEN_ID_IOCTL_BASE, GET_FTOKEN_ID, unsigned long long)
62#define	ACCESS_TOKENID_SET_FTOKENID \
63	_IOW(ACCESS_TOKEN_ID_IOCTL_BASE, SET_FTOKEN_ID, unsigned long long)
64#define	ACCESS_TOKENID_ADD_PERMISSIONS \
65	_IOW(ACCESS_TOKEN_ID_IOCTL_BASE, ADD_PERMISSIONS, ioctl_add_perm_data)
66#define	ACCESS_TOKENID_REMOVE_PERMISSIONS \
67	_IOW(ACCESS_TOKEN_ID_IOCTL_BASE, REMOVE_PERMISSIONS, uint32_t)
68#define	ACCESS_TOKENID_GET_PERMISSION \
69	_IOW(ACCESS_TOKEN_ID_IOCTL_BASE, GET_PERMISSION, ioctl_set_get_perm_data)
70#define	ACCESS_TOKENID_SET_PERMISSION \
71	_IOW(ACCESS_TOKEN_ID_IOCTL_BASE, SET_PERMISSION, ioctl_set_get_perm_data)
72
73#endif /* _ACCESS_TOKEN_ID_H */
74