summaryrefslogtreecommitdiff
path: root/include/uapi/linux/aspeed-mctp.h
blob: 678ec3d9f1ccf5f7b838cbe07a304a79f18d29b9 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2020 Intel Corporation */

#ifndef _UAPI_LINUX_ASPEED_MCTP_H
#define _UAPI_LINUX_ASPEED_MCTP_H

#include <linux/ioctl.h>
#include <linux/types.h>

/*
 * aspeed-mctp is a simple device driver exposing a read/write interface:
 *  +----------------------+
 *  | PCIe VDM Header      | 16 bytes (Big Endian)
 *  +----------------------+
 *  | MCTP Message Payload | 64/128/256/512 bytes (Big Endian)
 *  +----------------------+
 *
 * MCTP packet description can be found in DMTF DSP0238,
 * MCTP PCIe VDM Transport Specification.
 */

#define ASPEED_MCTP_PCIE_VDM_HDR_SIZE 16

/*
 * uevents generated by aspeed-mctp driver
 */
#define ASPEED_MCTP_READY "PCIE_READY"

/*
 * maximum possible number of struct eid_info elements stored in list
 */
#define ASPEED_MCTP_EID_INFO_MAX 256

/*
 * MCTP operations
 * @ASPEED_MCTP_IOCTL_FILTER_EID: enable/disable filter incoming packets based
 * on Endpoint ID (BROKEN)
 * @ASPEED_MCTP_IOCTL_GET_BDF: read PCI bus/device/function of MCTP Controller
 * @ASPEED_MCTP_IOCTL_GET_MEDIUM_ID: read MCTP physical medium identifier
 * related to PCIe revision
 * @ASPEED_MCTP_IOCTL_GET_MTU: read max transmission unit (in bytes)
 * @ASPEED_MCTP_IOCTL_REGISTER_DEFAULT_HANDLER Register client as default
 * handler that receives all MCTP messages that were not dispatched to other
 * clients
 * @ASPEED_MCTP_IOCTL_REGISTER_TYPE_HANDLER Register client to receive all
 * messages of specified MCTP type or PCI vendor defined type
 * @ASPEED_MCTP_IOCTL_UNREGISTER_TYPE_HANDLER Unregister client as handler
 * for specified MCTP type or PCI vendor defined message type
 * @ASPEED_MCTP_GET_EID_INFO: read list of existing endpoint mappings
 * returns count which is less of the two requested count and existing count
 * @ASPEED_MCTP_SET_EID_INFO: write list of endpoint mappings
 * overwrites already existing endpoint mappings
 */

struct aspeed_mctp_filter_eid {
	__u8 eid;
	bool enable;
};

struct aspeed_mctp_get_bdf {
	__u16 bdf;
};

struct aspeed_mctp_get_medium_id {
	__u8 medium_id;
};

struct aspeed_mctp_get_mtu {
	__u8 mtu;
};

struct aspeed_mctp_type_handler_ioctl {
	__u8 mctp_type;		/* MCTP message type as per DSP239*/
	/* Below params must be 0 if mctp_type is not Vendor Defined PCI */
	__u16 pci_vendor_id;	/* PCI Vendor ID */
	__u16 vendor_type;	/* Vendor specific type */
	__u16 vendor_type_mask; /* Mask applied to vendor type */
};

struct aspeed_mctp_eid_info {
	__u8 eid;
	__u16 bdf;
};

struct aspeed_mctp_eid_ext_info {
	__u8 eid;
	__u16 bdf;
	__u8 domain_id;
};

struct aspeed_mctp_get_eid_info {
	__u64 ptr;
	__u16 count;
	__u8 start_eid;
};

struct aspeed_mctp_set_eid_info {
	__u64 ptr;
	__u16 count;
};

#define ASPEED_MCTP_IOCTL_BASE	0x4d

#define ASPEED_MCTP_IOCTL_FILTER_EID \
	_IOW(ASPEED_MCTP_IOCTL_BASE, 0, struct aspeed_mctp_filter_eid)
#define ASPEED_MCTP_IOCTL_GET_BDF \
	_IOR(ASPEED_MCTP_IOCTL_BASE, 1, struct aspeed_mctp_get_bdf)
#define ASPEED_MCTP_IOCTL_GET_MEDIUM_ID \
	_IOR(ASPEED_MCTP_IOCTL_BASE, 2, struct aspeed_mctp_get_medium_id)
#define ASPEED_MCTP_IOCTL_GET_MTU \
	_IOR(ASPEED_MCTP_IOCTL_BASE, 3, struct aspeed_mctp_get_mtu)
#define ASPEED_MCTP_IOCTL_REGISTER_DEFAULT_HANDLER \
	_IO(ASPEED_MCTP_IOCTL_BASE, 4)
#define ASPEED_MCTP_IOCTL_REGISTER_TYPE_HANDLER \
	_IOW(ASPEED_MCTP_IOCTL_BASE, 6, struct aspeed_mctp_type_handler_ioctl)
#define ASPEED_MCTP_IOCTL_UNREGISTER_TYPE_HANDLER \
	_IOW(ASPEED_MCTP_IOCTL_BASE, 7, struct aspeed_mctp_type_handler_ioctl)
#define ASPEED_MCTP_IOCTL_GET_EID_INFO \
	_IOWR(ASPEED_MCTP_IOCTL_BASE, 8, struct aspeed_mctp_get_eid_info)
#define ASPEED_MCTP_IOCTL_SET_EID_INFO \
	_IOW(ASPEED_MCTP_IOCTL_BASE, 9, struct aspeed_mctp_set_eid_info)
#define ASPEED_MCTP_IOCTL_GET_EID_EXT_INFO \
	_IOW(ASPEED_MCTP_IOCTL_BASE, 10, struct aspeed_mctp_get_eid_info)
#define ASPEED_MCTP_IOCTL_SET_EID_EXT_INFO \
	_IOW(ASPEED_MCTP_IOCTL_BASE, 11, struct aspeed_mctp_set_eid_info)


#endif /* _UAPI_LINUX_ASPEED_MCTP_H */