aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2013-04-03 06:40:47 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-03 15:07:08 -0400
commitd9337414e87259fae13693796f7ad897b1b7f8e1 (patch)
treee38c2373fd1bf2703d68457c4048cc8520d119b7 /drivers
parent946072383b6f93839e4ff79ffe44cfffa3aeb2d0 (diff)
brcmfmac: move brcmf_fws_{de,}init() functions
The functions are moved in preparation of later patches. Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Piotr Haber <phaber@broadcom.com> Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c136
1 files changed, 68 insertions, 68 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
index 6da9f82b9b1e..8b09973309c9 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
@@ -900,74 +900,6 @@ static int brcmf_fws_notify_credit_map(struct brcmf_if *ifp,
900 return 0; 900 return 0;
901} 901}
902 902
903int brcmf_fws_init(struct brcmf_pub *drvr)
904{
905 u32 tlv = 0;
906 int rc;
907
908 /* enable rssi signals */
909 if (drvr->fw_signals)
910 tlv = BRCMF_FWS_FLAGS_RSSI_SIGNALS |
911 BRCMF_FWS_FLAGS_XONXOFF_SIGNALS |
912 BRCMF_FWS_FLAGS_CREDIT_STATUS_SIGNALS;
913
914 spin_lock_init(&drvr->fws_spinlock);
915
916 drvr->fws = kzalloc(sizeof(*(drvr->fws)), GFP_KERNEL);
917 if (!drvr->fws) {
918 rc = -ENOMEM;
919 goto fail;
920 }
921
922 /* set linkage back */
923 drvr->fws->drvr = drvr;
924 drvr->fws->fcmode = fcmode;
925
926 /* enable proptxtstatus signaling by default */
927 rc = brcmf_fil_iovar_int_set(drvr->iflist[0], "tlv", tlv);
928 if (rc < 0) {
929 brcmf_err("failed to set bdcv2 tlv signaling\n");
930 goto fail;
931 }
932
933 if (brcmf_fweh_register(drvr, BRCMF_E_FIFO_CREDIT_MAP,
934 brcmf_fws_notify_credit_map)) {
935 brcmf_err("register credit map handler failed\n");
936 goto fail;
937 }
938
939 brcmf_fws_hanger_init(&drvr->fws->hanger);
940
941 /* create debugfs file for statistics */
942 brcmf_debugfs_create_fws_stats(drvr, &drvr->fws->stats);
943
944 /* TODO: remove upon feature delivery */
945 brcmf_err("%s bdcv2 tlv signaling [%x]\n",
946 drvr->fw_signals ? "enabled" : "disabled", tlv);
947 return 0;
948
949fail:
950 /* disable flow control entirely */
951 drvr->fw_signals = false;
952 brcmf_fws_deinit(drvr);
953 return rc;
954}
955
956void brcmf_fws_deinit(struct brcmf_pub *drvr)
957{
958 struct brcmf_fws_info *fws = drvr->fws;
959 ulong flags;
960
961 /* cleanup */
962 brcmf_fws_lock(drvr, flags);
963 brcmf_fws_cleanup(fws, -1);
964 drvr->fws = NULL;
965 brcmf_fws_unlock(drvr, flags);
966
967 /* free top structure */
968 kfree(fws);
969}
970
971int brcmf_fws_hdrpull(struct brcmf_pub *drvr, int ifidx, s16 signal_len, 903int brcmf_fws_hdrpull(struct brcmf_pub *drvr, int ifidx, s16 signal_len,
972 struct sk_buff *skb) 904 struct sk_buff *skb)
973{ 905{
@@ -1287,6 +1219,74 @@ void brcmf_fws_del_interface(struct brcmf_if *ifp)
1287 kfree(entry); 1219 kfree(entry);
1288} 1220}
1289 1221
1222int brcmf_fws_init(struct brcmf_pub *drvr)
1223{
1224 u32 tlv = 0;
1225 int rc;
1226
1227 /* enable rssi signals */
1228 if (drvr->fw_signals)
1229 tlv = BRCMF_FWS_FLAGS_RSSI_SIGNALS |
1230 BRCMF_FWS_FLAGS_XONXOFF_SIGNALS |
1231 BRCMF_FWS_FLAGS_CREDIT_STATUS_SIGNALS;
1232
1233 spin_lock_init(&drvr->fws_spinlock);
1234
1235 drvr->fws = kzalloc(sizeof(*(drvr->fws)), GFP_KERNEL);
1236 if (!drvr->fws) {
1237 rc = -ENOMEM;
1238 goto fail;
1239 }
1240
1241 /* set linkage back */
1242 drvr->fws->drvr = drvr;
1243 drvr->fws->fcmode = fcmode;
1244
1245 /* enable proptxtstatus signaling by default */
1246 rc = brcmf_fil_iovar_int_set(drvr->iflist[0], "tlv", tlv);
1247 if (rc < 0) {
1248 brcmf_err("failed to set bdcv2 tlv signaling\n");
1249 goto fail;
1250 }
1251
1252 if (brcmf_fweh_register(drvr, BRCMF_E_FIFO_CREDIT_MAP,
1253 brcmf_fws_notify_credit_map)) {
1254 brcmf_err("register credit map handler failed\n");
1255 goto fail;
1256 }
1257
1258 brcmf_fws_hanger_init(&drvr->fws->hanger);
1259
1260 /* create debugfs file for statistics */
1261 brcmf_debugfs_create_fws_stats(drvr, &drvr->fws->stats);
1262
1263 /* TODO: remove upon feature delivery */
1264 brcmf_err("%s bdcv2 tlv signaling [%x]\n",
1265 drvr->fw_signals ? "enabled" : "disabled", tlv);
1266 return 0;
1267
1268fail:
1269 /* disable flow control entirely */
1270 drvr->fw_signals = false;
1271 brcmf_fws_deinit(drvr);
1272 return rc;
1273}
1274
1275void brcmf_fws_deinit(struct brcmf_pub *drvr)
1276{
1277 struct brcmf_fws_info *fws = drvr->fws;
1278 ulong flags;
1279
1280 /* cleanup */
1281 brcmf_fws_lock(drvr, flags);
1282 brcmf_fws_cleanup(fws, -1);
1283 drvr->fws = NULL;
1284 brcmf_fws_unlock(drvr, flags);
1285
1286 /* free top structure */
1287 kfree(fws);
1288}
1289
1290bool brcmf_fws_fc_active(struct brcmf_fws_info *fws) 1290bool brcmf_fws_fc_active(struct brcmf_fws_info *fws)
1291{ 1291{
1292 if (!fws) 1292 if (!fws)