nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* |
2 | * Copyright (c) 2013 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 | |||
18 | #include <linux/types.h> |
||
19 | #include <linux/slab.h> |
||
20 | #include <linux/netdevice.h> |
||
21 | |||
22 | #include <brcmu_wifi.h> |
||
23 | #include "core.h" |
||
24 | #include "bus.h" |
||
25 | #include "debug.h" |
||
26 | #include "proto.h" |
||
27 | #include "bcdc.h" |
||
28 | #include "msgbuf.h" |
||
29 | |||
30 | |||
31 | int brcmf_proto_attach(struct brcmf_pub *drvr) |
||
32 | { |
||
33 | struct brcmf_proto *proto; |
||
34 | |||
35 | brcmf_dbg(TRACE, "Enter\n"); |
||
36 | |||
37 | proto = kzalloc(sizeof(*proto), GFP_ATOMIC); |
||
38 | if (!proto) |
||
39 | goto fail; |
||
40 | |||
41 | drvr->proto = proto; |
||
42 | |||
43 | if (drvr->bus_if->proto_type == BRCMF_PROTO_BCDC) { |
||
44 | if (brcmf_proto_bcdc_attach(drvr)) |
||
45 | goto fail; |
||
46 | } else if (drvr->bus_if->proto_type == BRCMF_PROTO_MSGBUF) { |
||
47 | if (brcmf_proto_msgbuf_attach(drvr)) |
||
48 | goto fail; |
||
49 | } else { |
||
50 | brcmf_err("Unsupported proto type %d\n", |
||
51 | drvr->bus_if->proto_type); |
||
52 | goto fail; |
||
53 | } |
||
54 | if ((proto->txdata == NULL) || (proto->hdrpull == NULL) || |
||
55 | (proto->query_dcmd == NULL) || (proto->set_dcmd == NULL) || |
||
56 | (proto->configure_addr_mode == NULL) || |
||
57 | (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL)) { |
||
58 | brcmf_err("Not all proto handlers have been installed\n"); |
||
59 | goto fail; |
||
60 | } |
||
61 | return 0; |
||
62 | |||
63 | fail: |
||
64 | kfree(proto); |
||
65 | drvr->proto = NULL; |
||
66 | return -ENOMEM; |
||
67 | } |
||
68 | |||
69 | void brcmf_proto_detach(struct brcmf_pub *drvr) |
||
70 | { |
||
71 | brcmf_dbg(TRACE, "Enter\n"); |
||
72 | |||
73 | if (drvr->proto) { |
||
74 | if (drvr->bus_if->proto_type == BRCMF_PROTO_BCDC) |
||
75 | brcmf_proto_bcdc_detach(drvr); |
||
76 | else if (drvr->bus_if->proto_type == BRCMF_PROTO_MSGBUF) |
||
77 | brcmf_proto_msgbuf_detach(drvr); |
||
78 | kfree(drvr->proto); |
||
79 | drvr->proto = NULL; |
||
80 | } |
||
81 | } |