@@ -109,6 +109,72 @@ static const struct nla_policy nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
109
109
[RDMA_NLDEV_ATTR_DRIVER_U64 ] = { .type = NLA_U64 },
110
110
};
111
111
112
+ static int put_driver_name_print_type (struct sk_buff * msg , const char * name ,
113
+ enum rdma_nldev_print_type print_type )
114
+ {
115
+ if (nla_put_string (msg , RDMA_NLDEV_ATTR_DRIVER_STRING , name ))
116
+ return - EMSGSIZE ;
117
+ if (print_type != RDMA_NLDEV_PRINT_TYPE_UNSPEC &&
118
+ nla_put_u8 (msg , RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE , print_type ))
119
+ return - EMSGSIZE ;
120
+
121
+ return 0 ;
122
+ }
123
+
124
+ static int _rdma_nl_put_driver_u32 (struct sk_buff * msg , const char * name ,
125
+ enum rdma_nldev_print_type print_type ,
126
+ u32 value )
127
+ {
128
+ if (put_driver_name_print_type (msg , name , print_type ))
129
+ return - EMSGSIZE ;
130
+ if (nla_put_u32 (msg , RDMA_NLDEV_ATTR_DRIVER_U32 , value ))
131
+ return - EMSGSIZE ;
132
+
133
+ return 0 ;
134
+ }
135
+
136
+ static int _rdma_nl_put_driver_u64 (struct sk_buff * msg , const char * name ,
137
+ enum rdma_nldev_print_type print_type ,
138
+ u64 value )
139
+ {
140
+ if (put_driver_name_print_type (msg , name , print_type ))
141
+ return - EMSGSIZE ;
142
+ if (nla_put_u64_64bit (msg , RDMA_NLDEV_ATTR_DRIVER_U64 , value ,
143
+ RDMA_NLDEV_ATTR_PAD ))
144
+ return - EMSGSIZE ;
145
+
146
+ return 0 ;
147
+ }
148
+
149
+ int rdma_nl_put_driver_u32 (struct sk_buff * msg , const char * name , u32 value )
150
+ {
151
+ return _rdma_nl_put_driver_u32 (msg , name , RDMA_NLDEV_PRINT_TYPE_UNSPEC ,
152
+ value );
153
+ }
154
+ EXPORT_SYMBOL (rdma_nl_put_driver_u32 );
155
+
156
+ int rdma_nl_put_driver_u32_hex (struct sk_buff * msg , const char * name ,
157
+ u32 value )
158
+ {
159
+ return _rdma_nl_put_driver_u32 (msg , name , RDMA_NLDEV_PRINT_TYPE_HEX ,
160
+ value );
161
+ }
162
+ EXPORT_SYMBOL (rdma_nl_put_driver_u32_hex );
163
+
164
+ int rdma_nl_put_driver_u64 (struct sk_buff * msg , const char * name , u64 value )
165
+ {
166
+ return _rdma_nl_put_driver_u64 (msg , name , RDMA_NLDEV_PRINT_TYPE_UNSPEC ,
167
+ value );
168
+ }
169
+ EXPORT_SYMBOL (rdma_nl_put_driver_u64 );
170
+
171
+ int rdma_nl_put_driver_u64_hex (struct sk_buff * msg , const char * name , u64 value )
172
+ {
173
+ return _rdma_nl_put_driver_u64 (msg , name , RDMA_NLDEV_PRINT_TYPE_HEX ,
174
+ value );
175
+ }
176
+ EXPORT_SYMBOL (rdma_nl_put_driver_u64_hex );
177
+
112
178
static int fill_nldev_handle (struct sk_buff * msg , struct ib_device * device )
113
179
{
114
180
if (nla_put_u32 (msg , RDMA_NLDEV_ATTR_DEV_INDEX , device -> index ))
0 commit comments