1 /* 2 * Copyright (c) 2015-2016 Quantenna Communications, Inc. 3 * All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 */ 16 17 #ifndef _QTN_FMAC_QLINK_UTIL_H_ 18 #define _QTN_FMAC_QLINK_UTIL_H_ 19 20 #include <linux/types.h> 21 #include <linux/skbuff.h> 22 23 #include "qlink.h" 24 25 static inline void qtnf_cmd_skb_put_action(struct sk_buff *skb, u16 action) 26 { 27 __le16 *buf_ptr; 28 29 buf_ptr = skb_put(skb, sizeof(action)); 30 *buf_ptr = cpu_to_le16(action); 31 } 32 33 static inline void 34 qtnf_cmd_skb_put_buffer(struct sk_buff *skb, const u8 *buf_src, size_t len) 35 { 36 skb_put_data(skb, buf_src, len); 37 } 38 39 static inline void qtnf_cmd_skb_put_tlv_arr(struct sk_buff *skb, 40 u16 tlv_id, const u8 arr[], 41 size_t arr_len) 42 { 43 struct qlink_tlv_hdr *hdr = skb_put(skb, sizeof(*hdr) + arr_len); 44 45 hdr->type = cpu_to_le16(tlv_id); 46 hdr->len = cpu_to_le16(arr_len); 47 memcpy(hdr->val, arr, arr_len); 48 } 49 50 static inline void qtnf_cmd_skb_put_tlv_u8(struct sk_buff *skb, u16 tlv_id, 51 u8 value) 52 { 53 struct qlink_tlv_hdr *hdr = skb_put(skb, sizeof(*hdr) + sizeof(value)); 54 55 hdr->type = cpu_to_le16(tlv_id); 56 hdr->len = cpu_to_le16(sizeof(value)); 57 *hdr->val = value; 58 } 59 60 static inline void qtnf_cmd_skb_put_tlv_u16(struct sk_buff *skb, 61 u16 tlv_id, u16 value) 62 { 63 struct qlink_tlv_hdr *hdr = skb_put(skb, sizeof(*hdr) + sizeof(value)); 64 __le16 tmp = cpu_to_le16(value); 65 66 hdr->type = cpu_to_le16(tlv_id); 67 hdr->len = cpu_to_le16(sizeof(value)); 68 memcpy(hdr->val, &tmp, sizeof(tmp)); 69 } 70 71 u16 qlink_iface_type_mask_to_nl(u16 qlink_mask); 72 u8 qlink_chan_width_mask_to_nl(u16 qlink_mask); 73 74 #endif /* _QTN_FMAC_QLINK_UTIL_H_ */ 75