xref: /OK3568_Linux_fs/kernel/include/uapi/linux/if_arcnet.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * INET         An implementation of the TCP/IP protocol suite for the LINUX
4*4882a593Smuzhiyun  *              operating system.  INET is implemented using the  BSD Socket
5*4882a593Smuzhiyun  *              interface as the means of communication with the user level.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *              Global definitions for the ARCnet interface.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Authors:     David Woodhouse and Avery Pennarun
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  *              This program is free software; you can redistribute it and/or
12*4882a593Smuzhiyun  *              modify it under the terms of the GNU General Public License
13*4882a593Smuzhiyun  *              as published by the Free Software Foundation; either version
14*4882a593Smuzhiyun  *              2 of the License, or (at your option) any later version.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #ifndef _LINUX_IF_ARCNET_H
18*4882a593Smuzhiyun #define _LINUX_IF_ARCNET_H
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #include <linux/types.h>
21*4882a593Smuzhiyun #include <linux/if_ether.h>
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /*
24*4882a593Smuzhiyun  *    These are the defined ARCnet Protocol ID's.
25*4882a593Smuzhiyun  */
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* CAP mode */
28*4882a593Smuzhiyun /* No macro but uses 1-8 */
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* RFC1201 Protocol ID's */
31*4882a593Smuzhiyun #define ARC_P_IP		212	/* 0xD4 */
32*4882a593Smuzhiyun #define ARC_P_IPV6		196	/* 0xC4: RFC2497 */
33*4882a593Smuzhiyun #define ARC_P_ARP		213	/* 0xD5 */
34*4882a593Smuzhiyun #define ARC_P_RARP		214	/* 0xD6 */
35*4882a593Smuzhiyun #define ARC_P_IPX		250	/* 0xFA */
36*4882a593Smuzhiyun #define ARC_P_NOVELL_EC		236	/* 0xEC */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /* Old RFC1051 Protocol ID's */
39*4882a593Smuzhiyun #define ARC_P_IP_RFC1051	240	/* 0xF0 */
40*4882a593Smuzhiyun #define ARC_P_ARP_RFC1051	241	/* 0xF1 */
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun /* MS LanMan/WfWg "NDIS" encapsulation */
43*4882a593Smuzhiyun #define ARC_P_ETHER		232	/* 0xE8 */
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun /* Unsupported/indirectly supported protocols */
46*4882a593Smuzhiyun #define ARC_P_DATAPOINT_BOOT	0	/* very old Datapoint equipment */
47*4882a593Smuzhiyun #define ARC_P_DATAPOINT_MOUNT	1
48*4882a593Smuzhiyun #define ARC_P_POWERLAN_BEACON	8	/* Probably ATA-Netbios related */
49*4882a593Smuzhiyun #define ARC_P_POWERLAN_BEACON2	243	/* 0xF3 */
50*4882a593Smuzhiyun #define ARC_P_LANSOFT		251	/* 0xFB - what is this? */
51*4882a593Smuzhiyun #define ARC_P_ATALK		0xDD
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /* Hardware address length */
54*4882a593Smuzhiyun #define ARCNET_ALEN	1
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun /*
57*4882a593Smuzhiyun  * The RFC1201-specific components of an arcnet packet header.
58*4882a593Smuzhiyun  */
59*4882a593Smuzhiyun struct arc_rfc1201 {
60*4882a593Smuzhiyun 	__u8  proto;		/* protocol ID field - varies		*/
61*4882a593Smuzhiyun 	__u8  split_flag;	/* for use with split packets		*/
62*4882a593Smuzhiyun 	__be16   sequence;	/* sequence number			*/
63*4882a593Smuzhiyun 	__u8  payload[0];	/* space remaining in packet (504 bytes)*/
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun #define RFC1201_HDR_SIZE 4
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun /*
68*4882a593Smuzhiyun  * The RFC1051-specific components.
69*4882a593Smuzhiyun  */
70*4882a593Smuzhiyun struct arc_rfc1051 {
71*4882a593Smuzhiyun 	__u8 proto;		/* ARC_P_RFC1051_ARP/RFC1051_IP	*/
72*4882a593Smuzhiyun 	__u8 payload[0];	/* 507 bytes			*/
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun #define RFC1051_HDR_SIZE 1
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun /*
77*4882a593Smuzhiyun  * The ethernet-encap-specific components.  We have a real ethernet header
78*4882a593Smuzhiyun  * and some data.
79*4882a593Smuzhiyun  */
80*4882a593Smuzhiyun struct arc_eth_encap {
81*4882a593Smuzhiyun 	__u8 proto;		/* Always ARC_P_ETHER			*/
82*4882a593Smuzhiyun 	struct ethhdr eth;	/* standard ethernet header (yuck!)	*/
83*4882a593Smuzhiyun 	__u8 payload[0];	/* 493 bytes				*/
84*4882a593Smuzhiyun };
85*4882a593Smuzhiyun #define ETH_ENCAP_HDR_SIZE 14
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun struct arc_cap {
88*4882a593Smuzhiyun 	__u8 proto;
89*4882a593Smuzhiyun 	__u8 cookie[sizeof(int)];
90*4882a593Smuzhiyun 				/* Actually NOT sent over the network */
91*4882a593Smuzhiyun 	union {
92*4882a593Smuzhiyun 		__u8 ack;
93*4882a593Smuzhiyun 		__u8 raw[0];	/* 507 bytes */
94*4882a593Smuzhiyun 	} mes;
95*4882a593Smuzhiyun };
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /*
98*4882a593Smuzhiyun  * The data needed by the actual arcnet hardware.
99*4882a593Smuzhiyun  *
100*4882a593Smuzhiyun  * Now, in the real arcnet hardware, the third and fourth bytes are the
101*4882a593Smuzhiyun  * 'offset' specification instead of the length, and the soft data is at
102*4882a593Smuzhiyun  * the _end_ of the 512-byte buffer.  We hide this complexity inside the
103*4882a593Smuzhiyun  * driver.
104*4882a593Smuzhiyun  */
105*4882a593Smuzhiyun struct arc_hardware {
106*4882a593Smuzhiyun 	__u8 source;		/* source ARCnet - filled in automagically */
107*4882a593Smuzhiyun 	__u8 dest;		/* destination ARCnet - 0 for broadcast    */
108*4882a593Smuzhiyun 	__u8 offset[2];		/* offset bytes (some weird semantics)     */
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun #define ARC_HDR_SIZE 4
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /*
113*4882a593Smuzhiyun  * This is an ARCnet frame header, as seen by the kernel (and userspace,
114*4882a593Smuzhiyun  * when you do a raw packet capture).
115*4882a593Smuzhiyun  */
116*4882a593Smuzhiyun struct archdr {
117*4882a593Smuzhiyun 	/* hardware requirements */
118*4882a593Smuzhiyun 	struct arc_hardware hard;
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun 	/* arcnet encapsulation-specific bits */
121*4882a593Smuzhiyun 	union {
122*4882a593Smuzhiyun 		struct arc_rfc1201   rfc1201;
123*4882a593Smuzhiyun 		struct arc_rfc1051   rfc1051;
124*4882a593Smuzhiyun 		struct arc_eth_encap eth_encap;
125*4882a593Smuzhiyun 		struct arc_cap       cap;
126*4882a593Smuzhiyun 		__u8 raw[0];	/* 508 bytes				*/
127*4882a593Smuzhiyun 	} soft;
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #endif				/* _LINUX_IF_ARCNET_H */
131