1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * ioctl definitions for qeth driver
4 *
5 * Copyright IBM Corp. 2004
6 *
7 * Author(s):	Thomas Spatzier <tspat@de.ibm.com>
8 *
9 */
10#ifndef __ASM_S390_QETH_IOCTL_H__
11#define __ASM_S390_QETH_IOCTL_H__
12#include <linux/types.h>
13#include <linux/ioctl.h>
14
15#define SIOC_QETH_ARP_SET_NO_ENTRIES    (SIOCDEVPRIVATE)
16#define SIOC_QETH_ARP_QUERY_INFO        (SIOCDEVPRIVATE + 1)
17#define SIOC_QETH_ARP_ADD_ENTRY         (SIOCDEVPRIVATE + 2)
18#define SIOC_QETH_ARP_REMOVE_ENTRY      (SIOCDEVPRIVATE + 3)
19#define SIOC_QETH_ARP_FLUSH_CACHE       (SIOCDEVPRIVATE + 4)
20#define SIOC_QETH_ADP_SET_SNMP_CONTROL  (SIOCDEVPRIVATE + 5)
21#define SIOC_QETH_GET_CARD_TYPE         (SIOCDEVPRIVATE + 6)
22#define SIOC_QETH_QUERY_OAT		(SIOCDEVPRIVATE + 7)
23
24struct qeth_arp_cache_entry {
25	__u8  macaddr[6];
26	__u8  reserved1[2];
27	__u8  ipaddr[16]; /* for both  IPv4 and IPv6 */
28	__u8  reserved2[32];
29} __attribute__ ((packed));
30
31enum qeth_arp_ipaddrtype {
32	QETHARP_IP_ADDR_V4 = 1,
33	QETHARP_IP_ADDR_V6 = 2,
34};
35struct qeth_arp_entrytype {
36	__u8 mac;
37	__u8 ip;
38} __attribute__((packed));
39
40#define QETH_QARP_MEDIASPECIFIC_BYTES 32
41#define QETH_QARP_MACADDRTYPE_BYTES 1
42struct qeth_arp_qi_entry7 {
43	__u8 media_specific[QETH_QARP_MEDIASPECIFIC_BYTES];
44	struct qeth_arp_entrytype type;
45	__u8 macaddr[6];
46	__u8 ipaddr[4];
47} __attribute__((packed));
48
49struct qeth_arp_qi_entry7_ipv6 {
50	__u8 media_specific[QETH_QARP_MEDIASPECIFIC_BYTES];
51	struct qeth_arp_entrytype type;
52	__u8 macaddr[6];
53	__u8 ipaddr[16];
54} __attribute__((packed));
55
56struct qeth_arp_qi_entry7_short {
57	struct qeth_arp_entrytype type;
58	__u8 macaddr[6];
59	__u8 ipaddr[4];
60} __attribute__((packed));
61
62struct qeth_arp_qi_entry7_short_ipv6 {
63	struct qeth_arp_entrytype type;
64	__u8 macaddr[6];
65	__u8 ipaddr[16];
66} __attribute__((packed));
67
68struct qeth_arp_qi_entry5 {
69	__u8 media_specific[QETH_QARP_MEDIASPECIFIC_BYTES];
70	struct qeth_arp_entrytype type;
71	__u8 ipaddr[4];
72} __attribute__((packed));
73
74struct qeth_arp_qi_entry5_ipv6 {
75	__u8 media_specific[QETH_QARP_MEDIASPECIFIC_BYTES];
76	struct qeth_arp_entrytype type;
77	__u8 ipaddr[16];
78} __attribute__((packed));
79
80struct qeth_arp_qi_entry5_short {
81	struct qeth_arp_entrytype type;
82	__u8 ipaddr[4];
83} __attribute__((packed));
84
85struct qeth_arp_qi_entry5_short_ipv6 {
86	struct qeth_arp_entrytype type;
87	__u8 ipaddr[16];
88} __attribute__((packed));
89/*
90 * can be set by user if no "media specific information" is wanted
91 * -> saves a lot of space in user space buffer
92 */
93#define QETH_QARP_STRIP_ENTRIES  0x8000
94#define QETH_QARP_WITH_IPV6	 0x4000
95#define QETH_QARP_REQUEST_MASK   0x00ff
96
97/* data sent to user space as result of query arp ioctl */
98#define QETH_QARP_USER_DATA_SIZE 20000
99#define QETH_QARP_MASK_OFFSET    4
100#define QETH_QARP_ENTRIES_OFFSET 6
101struct qeth_arp_query_user_data {
102	union {
103		__u32 data_len;		/* set by user space program */
104		__u32 no_entries;	/* set by kernel */
105	} u;
106	__u16 mask_bits;
107	char *entries;
108} __attribute__((packed));
109
110struct qeth_query_oat_data {
111	__u32 command;
112	__u32 buffer_len;
113	__u32 response_len;
114	__u64 ptr;
115};
116#endif /* __ASM_S390_QETH_IOCTL_H__ */
117