• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Copyright (c) 2022 Huawei Device Co., Ltd.
4  *
5  * Description: Definitions for the structure
6  * associated with NewIP address.
7  *
8  * Author: Yang Yanjun <yangyanjun@huawei.com>
9  *
10  * Data: 2022-09-06
11  */
12 #ifndef _NIP_H
13 #define _NIP_H
14 
15 #define NIP_ADDR_LEN_1 1
16 #define NIP_ADDR_LEN_2 2
17 #define NIP_ADDR_LEN_3 3
18 #define NIP_ADDR_LEN_4 4
19 #define NIP_ADDR_LEN_5 5
20 #define NIP_ADDR_LEN_7 7
21 #define NIP_ADDR_LEN_8 8
22 
23 #define NIP_ADDR_BIT_LEN_8    8
24 #define NIP_ADDR_BIT_LEN_16   16
25 #define NIP_ADDR_BIT_LEN_24   24
26 #define NIP_ADDR_BIT_LEN_40   40
27 #define NIP_ADDR_BIT_LEN_MAX  64
28 
29 enum nip_addr_check_value {
30 	ADDR_FIRST_DC = 0xDC,
31 	ADDR_FIRST_F0 = 0xF0,
32 	ADDR_FIRST_F1,
33 	ADDR_FIRST_F2,
34 	ADDR_FIRST_F3,
35 	ADDR_FIRST_FE = 0xFE,
36 	ADDR_FIRST_FF = 0xFF,
37 	ADDR_SECOND_MIN_DD = 0xDD,
38 	ADDR_SECOND_MIN_F1 = 0x14,    /* f1 14 00 */
39 	ADDR_THIRD_MIN_F2 = 0x01,     /* f2 00 01 00 00 */
40 	ADDR_THIRD_MIN_F3 = 0x01,     /* F3 0001 0000 0000 */
41 };
42 
43 enum nip_8bit_addr_index {
44 	NIP_8BIT_ADDR_INDEX_0 = 0,
45 	NIP_8BIT_ADDR_INDEX_1 = 1,
46 	NIP_8BIT_ADDR_INDEX_2 = 2,
47 	NIP_8BIT_ADDR_INDEX_3 = 3,
48 	NIP_8BIT_ADDR_INDEX_4 = 4,
49 	NIP_8BIT_ADDR_INDEX_5 = 5,
50 	NIP_8BIT_ADDR_INDEX_6 = 6,
51 	NIP_8BIT_ADDR_INDEX_7 = 7,
52 	NIP_8BIT_ADDR_INDEX_MAX,
53 };
54 
55 enum nip_16bit_addr_index {
56 	NIP_16BIT_ADDR_INDEX_0 = 0,
57 	NIP_16BIT_ADDR_INDEX_1 = 1,
58 	NIP_16BIT_ADDR_INDEX_2 = 2,
59 	NIP_16BIT_ADDR_INDEX_3 = 3,
60 	NIP_16BIT_ADDR_INDEX_MAX,
61 };
62 
63 enum nip_32bit_addr_index {
64 	NIP_32BIT_ADDR_INDEX_0 = 0,
65 	NIP_32BIT_ADDR_INDEX_1 = 1,
66 	NIP_32BIT_ADDR_INDEX_MAX,
67 };
68 
69 #define NIP_ADDR_FIELD8 v.u.field8
70 #define NIP_ADDR_FIELD16 v.u.field16
71 #define NIP_ADDR_FIELD32 v.u.field32
72 
73 #pragma pack(1)
74 struct nip_addr_field {
75 	union {
76 		unsigned char   field8[NIP_8BIT_ADDR_INDEX_MAX];
77 		unsigned short field16[NIP_16BIT_ADDR_INDEX_MAX]; /* big-endian */
78 		unsigned int   field32[NIP_32BIT_ADDR_INDEX_MAX]; /* big-endian */
79 	} u;
80 };
81 
82 struct nip_addr {
83 	unsigned char bitlen; /* The address length is in bit (not byte) */
84 	struct nip_addr_field v;
85 };
86 #pragma pack()
87 
88 enum nip_index {
89 	INDEX_0 = 0,
90 	INDEX_1 = 1,
91 	INDEX_2 = 2,
92 	INDEX_3 = 3,
93 	INDEX_4 = 4,
94 	INDEX_5 = 5,
95 	INDEX_6 = 6,
96 	INDEX_7 = 7,
97 	INDEX_8 = 8,
98 	INDEX_9 = 9,
99 	INDEX_10 = 10,
100 	INDEX_11 = 11,
101 	INDEX_12 = 12,
102 	INDEX_13 = 13,
103 	INDEX_14 = 14,
104 	INDEX_15 = 15,
105 	INDEX_MAX,
106 };
107 
108 #endif /* _NIP_H */
109