0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _MWIFIEX_UTIL_H_
0009 #define _MWIFIEX_UTIL_H_
0010
0011 struct mwifiex_private;
0012
0013 struct mwifiex_dma_mapping {
0014 dma_addr_t addr;
0015 size_t len;
0016 };
0017
0018 struct mwifiex_cb {
0019 struct mwifiex_dma_mapping dma_mapping;
0020 union {
0021 struct mwifiex_rxinfo rx_info;
0022 struct mwifiex_txinfo tx_info;
0023 };
0024 };
0025
0026
0027 #define item_size(n) (sizeof_field(struct mwifiex_debug_info, n))
0028 #define item_addr(n) (offsetof(struct mwifiex_debug_info, n))
0029
0030
0031 #define adapter_item_size(n) (sizeof_field(struct mwifiex_adapter, n))
0032 #define adapter_item_addr(n) (offsetof(struct mwifiex_adapter, n))
0033
0034 struct mwifiex_debug_data {
0035 char name[32];
0036 u32 size;
0037 size_t addr;
0038 int num;
0039 };
0040
0041 static inline struct mwifiex_rxinfo *MWIFIEX_SKB_RXCB(struct sk_buff *skb)
0042 {
0043 struct mwifiex_cb *cb = (struct mwifiex_cb *)skb->cb;
0044
0045 BUILD_BUG_ON(sizeof(struct mwifiex_cb) > sizeof(skb->cb));
0046 return &cb->rx_info;
0047 }
0048
0049 static inline struct mwifiex_txinfo *MWIFIEX_SKB_TXCB(struct sk_buff *skb)
0050 {
0051 struct mwifiex_cb *cb = (struct mwifiex_cb *)skb->cb;
0052
0053 return &cb->tx_info;
0054 }
0055
0056 static inline void mwifiex_store_mapping(struct sk_buff *skb,
0057 struct mwifiex_dma_mapping *mapping)
0058 {
0059 struct mwifiex_cb *cb = (struct mwifiex_cb *)skb->cb;
0060
0061 memcpy(&cb->dma_mapping, mapping, sizeof(*mapping));
0062 }
0063
0064 static inline void mwifiex_get_mapping(struct sk_buff *skb,
0065 struct mwifiex_dma_mapping *mapping)
0066 {
0067 struct mwifiex_cb *cb = (struct mwifiex_cb *)skb->cb;
0068
0069 memcpy(mapping, &cb->dma_mapping, sizeof(*mapping));
0070 }
0071
0072 static inline dma_addr_t MWIFIEX_SKB_DMA_ADDR(struct sk_buff *skb)
0073 {
0074 struct mwifiex_dma_mapping mapping;
0075
0076 mwifiex_get_mapping(skb, &mapping);
0077
0078 return mapping.addr;
0079 }
0080
0081 int mwifiex_debug_info_to_buffer(struct mwifiex_private *priv, char *buf,
0082 struct mwifiex_debug_info *info);
0083
0084 static inline void le16_unaligned_add_cpu(__le16 *var, u16 val)
0085 {
0086 put_unaligned_le16(get_unaligned_le16(var) + val, var);
0087 }
0088
0089 #endif