1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright IBM Corp. 2020
4  *
5  * Author(s): Alexandra Winter <wintera@linux.ibm.com>
6  *
7  * Interface for Channel Subsystem Call
8  */
9 #ifndef _ASM_S390_CHSC_H
10 #define _ASM_S390_CHSC_H
11 
12 #include <uapi/asm/chsc.h>
13 
14 /* struct from linux/notifier.h */
15 struct notifier_block;
16 
17 /**
18  * Operation codes for CHSC PNSO:
19  *    PNSO_OC_NET_BRIDGE_INFO - only addresses that are visible to a bridgeport
20  *    PNSO_OC_NET_ADDR_INFO   - all addresses
21  */
22 #define PNSO_OC_NET_BRIDGE_INFO		0
23 #define PNSO_OC_NET_ADDR_INFO		3
24 /**
25  * struct chsc_pnso_naid_l2 - network address information descriptor
26  * @nit:  Network interface token
27  * @addr_lnid: network address and logical network id (VLAN ID)
28  */
29 struct chsc_pnso_naid_l2 {
30 	u64 nit;
31 	struct { u8 mac[6]; u16 lnid; } addr_lnid;
32 } __packed;
33 
34 struct chsc_pnso_resume_token {
35 	u64 t1;
36 	u64 t2;
37 } __packed;
38 
39 struct chsc_pnso_naihdr {
40 	struct chsc_pnso_resume_token resume_token;
41 	u32:32;
42 	u32 instance;
43 	u32:24;
44 	u8 naids;
45 	u32 reserved[3];
46 } __packed;
47 
48 struct chsc_pnso_area {
49 	struct chsc_header request;
50 	u8:2;
51 	u8 m:1;
52 	u8:5;
53 	u8:2;
54 	u8 ssid:2;
55 	u8 fmt:4;
56 	u16 sch;
57 	u8:8;
58 	u8 cssid;
59 	u16:16;
60 	u8 oc;
61 	u32:24;
62 	struct chsc_pnso_resume_token resume_token;
63 	u32 n:1;
64 	u32:31;
65 	u32 reserved[3];
66 	struct chsc_header response;
67 	u32:32;
68 	struct chsc_pnso_naihdr naihdr;
69 	struct chsc_pnso_naid_l2 entries[];
70 } __packed __aligned(PAGE_SIZE);
71 
72 /*
73  * notifier interface - registered notifiers gets called on
74  * the following events:
75  * - ap config changed (CHSC_NOTIFY_AP_CFG)
76  */
77 enum chsc_notify_type {
78 	CHSC_NOTIFY_AP_CFG = 3,
79 };
80 
81 int chsc_notifier_register(struct notifier_block *nb);
82 int chsc_notifier_unregister(struct notifier_block *nb);
83 
84 #endif /* _ASM_S390_CHSC_H */
85