]>
Commit | Line | Data |
---|---|---|
5b435de0 AS |
1 | /* |
2 | * Copyright (c) 2010 Broadcom Corporation | |
3 | * | |
4 | * Permission to use, copy, modify, and/or distribute this software for any | |
5 | * purpose with or without fee is hereby granted, provided that the above | |
6 | * copyright notice and this permission notice appear in all copies. | |
7 | * | |
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | |
11 | * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | |
13 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |
14 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
15 | */ | |
16 | ||
17 | #ifndef _BRCMF_BUS_H_ | |
18 | #define _BRCMF_BUS_H_ | |
19 | ||
a8a363ac FL |
20 | /* The level of bus communication with the dongle */ |
21 | enum brcmf_bus_state { | |
22 | BRCMF_BUS_DOWN, /* Not ready for frame transfers */ | |
23 | BRCMF_BUS_LOAD, /* Download access only (CPU reset) */ | |
24 | BRCMF_BUS_DATA /* Ready for frame transfers */ | |
25 | }; | |
26 | ||
27 | struct dngl_stats { | |
28 | unsigned long rx_packets; /* total packets received */ | |
29 | unsigned long tx_packets; /* total packets transmitted */ | |
30 | unsigned long rx_bytes; /* total bytes received */ | |
31 | unsigned long tx_bytes; /* total bytes transmitted */ | |
32 | unsigned long rx_errors; /* bad packets received */ | |
33 | unsigned long tx_errors; /* packet transmit problems */ | |
34 | unsigned long rx_dropped; /* packets dropped by dongle */ | |
35 | unsigned long tx_dropped; /* packets dropped by dongle */ | |
36 | unsigned long multicast; /* multicast packets received */ | |
37 | }; | |
38 | ||
39 | /* interface structure between common and bus layer */ | |
40 | struct brcmf_bus { | |
41 | u8 type; /* bus type */ | |
0a332e46 | 42 | union { |
0a332e46 | 43 | struct brcmf_sdio_dev *sdio; |
71bb244b | 44 | struct brcmf_usbdev *usb; |
0a332e46 AS |
45 | } bus_priv; |
46 | struct brcmf_pub *drvr; /* pointer to driver pub structure brcmf_pub */ | |
a8a363ac FL |
47 | enum brcmf_bus_state state; |
48 | uint maxctl; /* Max size rxctl request from proto to bus */ | |
49 | bool drvr_up; /* Status flag of driver up/down */ | |
50 | unsigned long tx_realloc; /* Tx packets realloced for headroom */ | |
51 | struct dngl_stats dstats; /* Stats for dongle-based data */ | |
52 | u8 align; /* bus alignment requirement */ | |
53 | ||
54 | /* interface functions pointers */ | |
55 | /* Stop bus module: clear pending frames, disable data flow */ | |
56 | void (*brcmf_bus_stop)(struct device *); | |
99a0b8ff FL |
57 | /* Initialize bus module: prepare for communication w/dongle */ |
58 | int (*brcmf_bus_init)(struct device *); | |
b9692d17 FL |
59 | /* Send a data frame to the dongle. Callee disposes of txp. */ |
60 | int (*brcmf_bus_txdata)(struct device *, struct sk_buff *); | |
fcf094f4 FL |
61 | /* Send/receive a control message to/from the dongle. |
62 | * Expects caller to enforce a single outstanding transaction. | |
63 | */ | |
64 | int (*brcmf_bus_txctl)(struct device *, unsigned char *, uint); | |
65 | int (*brcmf_bus_rxctl)(struct device *, unsigned char *, uint); | |
a8a363ac FL |
66 | }; |
67 | ||
68 | /* | |
69 | * interface functions from common layer | |
70 | */ | |
71 | ||
72 | /* Remove any protocol-specific data header. */ | |
73 | extern int brcmf_proto_hdrpull(struct device *dev, int *ifidx, | |
74 | struct sk_buff *rxp); | |
75 | ||
76 | extern bool brcmf_c_prec_enq(struct device *dev, struct pktq *q, | |
77 | struct sk_buff *pkt, int prec); | |
78 | ||
79 | /* Receive frame for delivery to OS. Callee disposes of rxp. */ | |
80 | extern void brcmf_rx_frame(struct device *dev, int ifidx, | |
81 | struct sk_buff_head *rxlist); | |
82 | static inline void brcmf_rx_packet(struct device *dev, int ifidx, | |
83 | struct sk_buff *pkt) | |
84 | { | |
85 | struct sk_buff_head q; | |
86 | ||
87 | skb_queue_head_init(&q); | |
88 | skb_queue_tail(&q, pkt); | |
89 | brcmf_rx_frame(dev, ifidx, &q); | |
90 | } | |
91 | ||
92 | /* Indication from bus module regarding presence/insertion of dongle. */ | |
93 | extern int brcmf_attach(uint bus_hdrlen, struct device *dev); | |
94 | /* Indication from bus module regarding removal/absence of dongle */ | |
95 | extern void brcmf_detach(struct device *dev); | |
96 | ||
97 | /* Indication from bus module to change flow-control state */ | |
98 | extern void brcmf_txflowcontrol(struct device *dev, int ifidx, bool on); | |
99 | ||
100 | /* Notify tx completion */ | |
101 | extern void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, | |
102 | bool success); | |
103 | ||
104 | extern int brcmf_bus_start(struct device *dev); | |
105 | ||
106 | extern int brcmf_add_if(struct device *dev, int ifidx, | |
107 | char *name, u8 *mac_addr); | |
f3d7cdc3 AS |
108 | |
109 | #ifdef CONFIG_BRCMFMAC_SDIO | |
110 | extern void brcmf_sdio_exit(void); | |
549040ab | 111 | extern void brcmf_sdio_init(void); |
f3d7cdc3 | 112 | #endif |
71bb244b AS |
113 | #ifdef CONFIG_BRCMFMAC_USB |
114 | extern void brcmf_usb_exit(void); | |
549040ab | 115 | extern void brcmf_usb_init(void); |
71bb244b | 116 | #endif |
f3d7cdc3 | 117 | |
5b435de0 | 118 | #endif /* _BRCMF_BUS_H_ */ |