@@ -284,6 +284,9 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
284
284
struct nfc_llcp_local * local ;
285
285
struct sk_buff * skb ;
286
286
u8 * service_name_tlv = NULL , service_name_tlv_length ;
287
+ u8 * miux_tlv = NULL , miux_tlv_length ;
288
+ u8 * rw_tlv = NULL , rw_tlv_length , rw ;
289
+ __be16 miux ;
287
290
int err ;
288
291
u16 size = 0 ;
289
292
@@ -301,6 +304,14 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
301
304
size += service_name_tlv_length ;
302
305
}
303
306
307
+ miux = cpu_to_be16 (LLCP_MAX_MIUX );
308
+ miux_tlv = nfc_llcp_build_tlv (LLCP_TLV_MIUX , (u8 * )& miux , 0 , & miux_tlv_length );
309
+ size += miux_tlv_length ;
310
+
311
+ rw = LLCP_MAX_RW ;
312
+ rw_tlv = nfc_llcp_build_tlv (LLCP_TLV_RW , & rw , 0 , & rw_tlv_length );
313
+ size += rw_tlv_length ;
314
+
304
315
pr_debug ("SKB size %d SN length %zu\n" , size , sock -> service_name_len );
305
316
306
317
skb = llcp_allocate_pdu (sock , LLCP_PDU_CONNECT , size );
@@ -313,6 +324,9 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
313
324
skb = llcp_add_tlv (skb , service_name_tlv ,
314
325
service_name_tlv_length );
315
326
327
+ skb = llcp_add_tlv (skb , miux_tlv , miux_tlv_length );
328
+ skb = llcp_add_tlv (skb , rw_tlv , rw_tlv_length );
329
+
316
330
skb_queue_tail (& local -> tx_queue , skb );
317
331
318
332
return 0 ;
@@ -321,6 +335,8 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
321
335
pr_err ("error %d\n" , err );
322
336
323
337
kfree (service_name_tlv );
338
+ kfree (miux_tlv );
339
+ kfree (rw_tlv );
324
340
325
341
return err ;
326
342
}
@@ -329,20 +345,46 @@ int nfc_llcp_send_cc(struct nfc_llcp_sock *sock)
329
345
{
330
346
struct nfc_llcp_local * local ;
331
347
struct sk_buff * skb ;
348
+ u8 * miux_tlv = NULL , miux_tlv_length ;
349
+ u8 * rw_tlv = NULL , rw_tlv_length , rw ;
350
+ __be16 miux ;
351
+ int err ;
352
+ u16 size = 0 ;
332
353
333
354
pr_debug ("Sending CC\n" );
334
355
335
356
local = sock -> local ;
336
357
if (local == NULL )
337
358
return - ENODEV ;
338
359
339
- skb = llcp_allocate_pdu (sock , LLCP_PDU_CC , 0 );
340
- if (skb == NULL )
341
- return - ENOMEM ;
360
+ miux = cpu_to_be16 (LLCP_MAX_MIUX );
361
+ miux_tlv = nfc_llcp_build_tlv (LLCP_TLV_MIUX , (u8 * )& miux , 0 , & miux_tlv_length );
362
+ size += miux_tlv_length ;
363
+
364
+ rw = LLCP_MAX_RW ;
365
+ rw_tlv = nfc_llcp_build_tlv (LLCP_TLV_RW , & rw , 0 , & rw_tlv_length );
366
+ size += rw_tlv_length ;
367
+
368
+ skb = llcp_allocate_pdu (sock , LLCP_PDU_CC , size );
369
+ if (skb == NULL ) {
370
+ err = - ENOMEM ;
371
+ goto error_tlv ;
372
+ }
373
+
374
+ skb = llcp_add_tlv (skb , miux_tlv , miux_tlv_length );
375
+ skb = llcp_add_tlv (skb , rw_tlv , rw_tlv_length );
342
376
343
377
skb_queue_tail (& local -> tx_queue , skb );
344
378
345
379
return 0 ;
380
+
381
+ error_tlv :
382
+ pr_err ("error %d\n" , err );
383
+
384
+ kfree (miux_tlv );
385
+ kfree (rw_tlv );
386
+
387
+ return err ;
346
388
}
347
389
348
390
int nfc_llcp_send_dm (struct nfc_llcp_local * local , u8 ssap , u8 dsap , u8 reason )
0 commit comments