1299751Sadrian/*- 2299751Sadrian * Copyright (c) 2009-2010 Weongyo Jeong <weongyo@freebsd.org> 3299751Sadrian * All rights reserved. 4299751Sadrian * 5299751Sadrian * Redistribution and use in source and binary forms, with or without 6299751Sadrian * modification, are permitted provided that the following conditions 7299751Sadrian * are met: 8299751Sadrian * 1. Redistributions of source code must retain the above copyright 9299751Sadrian * notice, this list of conditions and the following disclaimer, 10299751Sadrian * without modification. 11299751Sadrian * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12299751Sadrian * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 13299751Sadrian * redistribution must be conditioned upon including a substantially 14299751Sadrian * similar Disclaimer requirement for further binary redistribution. 15299751Sadrian * 16299751Sadrian * NO WARRANTY 17299751Sadrian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18299751Sadrian * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19299751Sadrian * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 20299751Sadrian * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21299751Sadrian * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 22299751Sadrian * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23299751Sadrian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24299751Sadrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25299751Sadrian * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26299751Sadrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27299751Sadrian * THE POSSIBILITY OF SUCH DAMAGES. 28299751Sadrian */ 29299751Sadrian 30299751Sadrian#include <sys/cdefs.h> 31299751Sadrian__FBSDID("$FreeBSD$"); 32299751Sadrian 33299751Sadrian/* 34299751Sadrian * The Broadcom Wireless LAN controller driver. 35299751Sadrian */ 36299751Sadrian 37299984Sadrian#include "opt_bwn.h" 38299984Sadrian#include "opt_wlan.h" 39299984Sadrian 40299751Sadrian#include <sys/param.h> 41299751Sadrian#include <sys/systm.h> 42299751Sadrian#include <sys/kernel.h> 43299751Sadrian#include <sys/malloc.h> 44299751Sadrian#include <sys/module.h> 45299751Sadrian#include <sys/endian.h> 46299751Sadrian#include <sys/errno.h> 47299751Sadrian#include <sys/firmware.h> 48299751Sadrian#include <sys/lock.h> 49299751Sadrian#include <sys/mutex.h> 50299751Sadrian#include <machine/bus.h> 51299751Sadrian#include <machine/resource.h> 52299751Sadrian#include <sys/bus.h> 53299751Sadrian#include <sys/rman.h> 54299751Sadrian#include <sys/socket.h> 55299751Sadrian#include <sys/sockio.h> 56299751Sadrian 57299751Sadrian#include <net/ethernet.h> 58299751Sadrian#include <net/if.h> 59299751Sadrian#include <net/if_var.h> 60299751Sadrian#include <net/if_arp.h> 61299751Sadrian#include <net/if_dl.h> 62299751Sadrian#include <net/if_llc.h> 63299751Sadrian#include <net/if_media.h> 64299751Sadrian#include <net/if_types.h> 65299751Sadrian 66299751Sadrian#include <dev/pci/pcivar.h> 67299751Sadrian#include <dev/pci/pcireg.h> 68299751Sadrian#include <dev/siba/siba_ids.h> 69299751Sadrian#include <dev/siba/sibareg.h> 70299751Sadrian#include <dev/siba/sibavar.h> 71299751Sadrian 72299751Sadrian#include <net80211/ieee80211_var.h> 73299751Sadrian#include <net80211/ieee80211_radiotap.h> 74299751Sadrian#include <net80211/ieee80211_regdomain.h> 75299751Sadrian#include <net80211/ieee80211_phy.h> 76299751Sadrian#include <net80211/ieee80211_ratectl.h> 77299751Sadrian 78299751Sadrian#include <dev/bwn/if_bwnreg.h> 79299751Sadrian#include <dev/bwn/if_bwnvar.h> 80299751Sadrian 81299751Sadrian#include <dev/bwn/if_bwn_chipid.h> 82299751Sadrian#include <dev/bwn/if_bwn_debug.h> 83299751Sadrian#include <dev/bwn/if_bwn_misc.h> 84299751Sadrian#include <dev/bwn/if_bwn_util.h> 85299751Sadrian 86299751Sadrianunsigned int 87299751Sadrianbwn_sqrt(struct bwn_mac *mac, unsigned int x) 88299751Sadrian{ 89299751Sadrian /* Table holding (10 * sqrt(x)) for x between 1 and 256. */ 90299751Sadrian static uint8_t sqrt_table[256] = { 91299751Sadrian 10, 14, 17, 20, 22, 24, 26, 28, 92299751Sadrian 30, 31, 33, 34, 36, 37, 38, 40, 93299751Sadrian 41, 42, 43, 44, 45, 46, 47, 48, 94299751Sadrian 50, 50, 51, 52, 53, 54, 55, 56, 95299751Sadrian 57, 58, 59, 60, 60, 61, 62, 63, 96299751Sadrian 64, 64, 65, 66, 67, 67, 68, 69, 97299751Sadrian 70, 70, 71, 72, 72, 73, 74, 74, 98299751Sadrian 75, 76, 76, 77, 78, 78, 79, 80, 99299751Sadrian 80, 81, 81, 82, 83, 83, 84, 84, 100299751Sadrian 85, 86, 86, 87, 87, 88, 88, 89, 101299751Sadrian 90, 90, 91, 91, 92, 92, 93, 93, 102299751Sadrian 94, 94, 95, 95, 96, 96, 97, 97, 103299751Sadrian 98, 98, 99, 100, 100, 100, 101, 101, 104299751Sadrian 102, 102, 103, 103, 104, 104, 105, 105, 105299751Sadrian 106, 106, 107, 107, 108, 108, 109, 109, 106299751Sadrian 110, 110, 110, 111, 111, 112, 112, 113, 107299751Sadrian 113, 114, 114, 114, 115, 115, 116, 116, 108299751Sadrian 117, 117, 117, 118, 118, 119, 119, 120, 109299751Sadrian 120, 120, 121, 121, 122, 122, 122, 123, 110299751Sadrian 123, 124, 124, 124, 125, 125, 126, 126, 111299751Sadrian 126, 127, 127, 128, 128, 128, 129, 129, 112299751Sadrian 130, 130, 130, 131, 131, 131, 132, 132, 113299751Sadrian 133, 133, 133, 134, 134, 134, 135, 135, 114299751Sadrian 136, 136, 136, 137, 137, 137, 138, 138, 115299751Sadrian 138, 139, 139, 140, 140, 140, 141, 141, 116299751Sadrian 141, 142, 142, 142, 143, 143, 143, 144, 117299751Sadrian 144, 144, 145, 145, 145, 146, 146, 146, 118299751Sadrian 147, 147, 147, 148, 148, 148, 149, 149, 119299751Sadrian 150, 150, 150, 150, 151, 151, 151, 152, 120299751Sadrian 152, 152, 153, 153, 153, 154, 154, 154, 121299751Sadrian 155, 155, 155, 156, 156, 156, 157, 157, 122299751Sadrian 157, 158, 158, 158, 159, 159, 159, 160 123299751Sadrian }; 124299751Sadrian 125299751Sadrian if (x == 0) 126299751Sadrian return (0); 127299751Sadrian if (x >= 256) { 128299751Sadrian unsigned int tmp; 129299751Sadrian 130299751Sadrian for (tmp = 0; x >= (2 * tmp) + 1; x -= (2 * tmp++) + 1) 131299751Sadrian /* do nothing */ ; 132299751Sadrian return (tmp); 133299751Sadrian } 134299751Sadrian return (sqrt_table[x - 1] / 10); 135299751Sadrian} 136