xref: /freebsd/lib/libifconfig/libifconfig_sfp_tables.tpl.h (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1 /*-
2  * Copyright (c) 2020, Ryan Moeller <freqlabs@FreeBSD.org>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  *
25  * $FreeBSD$
26  */
27 
28 {# THIS IS A TEMPLATE PROCESSED BY lib/libifconfig/sfp.lua #}
29 
30 #pragma once
31 
32 #include <stdint.h>
33 
34 {%
35 for _, ent in ipairs(enums) do
36     if type(ent) == "string" then
37 %}
38 /*
39  * {*ent*}
40  */
41 
42 {%
43     else
44         local enum = ent
45         local name = "sfp_"..enum.name
46         local num, sym, desc, disp
47 %}
48 /** {*enum.description*} */
49 enum {*name*} {
50 {%
51         for _, item in ipairs(enum.values) do
52             val, sym, desc, disp = table.unpack(item)
53             local symbol = string.upper(name).."_"..sym
54 %}
55 	{*symbol*} = {*val*}, /**< {*desc*} */
56 {%
57         end
58 %}
59 };
60 
61 /** Get the symbolic name of a given {*name*} value */
62 const char *ifconfig_{*name*}_symbol(enum {*name*});
63 
64 /** Get a brief description of a given {*name*} value */
65 const char *ifconfig_{*name*}_description(enum {*name*});
66 
67 {%
68         if disp then
69 %}
70 /** Get a shortened user-friendly display name for a given {*name*} value */
71 const char *ifconfig_{*name*}_display(enum {*name*});
72 
73 {%
74         end
75     end
76 end
77 %}
78 /*
79  * Descriptions of each enum
80  */
81 
82 {%
83 for _, ent in ipairs(enums) do
84     if type(ent) == "table" then
85         local enum = ent
86         local name = "sfp_"..enum.name
87 %}
88 /** Get a brief description of the {*name*} enum */
89 static inline const char *
90 ifconfig_enum_{*name*}_description(void)
91 {
92 	return ("{*enum.description*}");
93 }
94 
95 {%
96     end
97 end
98 %}
99 /*
100  * Info struct definitions
101  */
102 
103 struct ifconfig_sfp_info {
104 {%
105 for _, ent in ipairs(enums) do
106     if type(ent) == "table" then
107         local enum = ent
108         local name = "sfp_"..enum.name
109         local t = string.format("uint%d_t", enum.bits)
110 %}
111 	{*t*} {*name*}; /**< {*enum.description*} */
112 {%
113     end
114 end
115 %}
116 };
117 
118 struct ifconfig_sfp_info_strings {
119 {%
120 for _, ent in ipairs(enums) do
121     if type(ent) == "table" then
122         local enum = ent
123         local name = "sfp_"..enum.name
124 %}
125 	const char *{*name*}; /**< {*enum.description*} */
126 {%
127     end
128 end
129 %}
130 };
131