linux/drivers/net/wireless/b43/tables_phy_ht.c
<<
>>
Prefs
   1/*
   2
   3  Broadcom B43 wireless driver
   4  IEEE 802.11n HT-PHY data tables
   5
   6  Copyright (c) 2011 Rafał Miłecki <zajec5@gmail.com>
   7
   8  This program is free software; you can redistribute it and/or modify
   9  it under the terms of the GNU General Public License as published by
  10  the Free Software Foundation; either version 2 of the License, or
  11  (at your option) any later version.
  12
  13  This program is distributed in the hope that it will be useful,
  14  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16  GNU General Public License for more details.
  17
  18  You should have received a copy of the GNU General Public License
  19  along with this program; see the file COPYING.  If not, write to
  20  the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
  21  Boston, MA 02110-1301, USA.
  22
  23*/
  24
  25#include "b43.h"
  26#include "tables_phy_ht.h"
  27#include "phy_common.h"
  28#include "phy_ht.h"
  29
  30static const u16 b43_httab_0x12[] = {
  31        0x0000, 0x0008, 0x000a, 0x0010, 0x0012, 0x0019,
  32        0x001a, 0x001c, 0x0080, 0x0088, 0x008a, 0x0090,
  33        0x0092, 0x0099, 0x009a, 0x009c, 0x0100, 0x0108,
  34        0x010a, 0x0110, 0x0112, 0x0119, 0x011a, 0x011c,
  35        0x0180, 0x0188, 0x018a, 0x0190, 0x0192, 0x0199,
  36        0x019a, 0x019c, 0x0000, 0x0098, 0x00a0, 0x00a8,
  37        0x009a, 0x00a2, 0x00aa, 0x0120, 0x0128, 0x0128,
  38        0x0130, 0x0138, 0x0138, 0x0140, 0x0122, 0x012a,
  39        0x012a, 0x0132, 0x013a, 0x013a, 0x0142, 0x01a8,
  40        0x01b0, 0x01b8, 0x01b0, 0x01b8, 0x01c0, 0x01c8,
  41        0x01c0, 0x01c8, 0x01d0, 0x01d0, 0x01d8, 0x01aa,
  42        0x01b2, 0x01ba, 0x01b2, 0x01ba, 0x01c2, 0x01ca,
  43        0x01c2, 0x01ca, 0x01d2, 0x01d2, 0x01da, 0x0001,
  44        0x0002, 0x0004, 0x0009, 0x000c, 0x0011, 0x0014,
  45        0x0018, 0x0020, 0x0021, 0x0022, 0x0024, 0x0081,
  46        0x0082, 0x0084, 0x0089, 0x008c, 0x0091, 0x0094,
  47        0x0098, 0x00a0, 0x00a1, 0x00a2, 0x00a4, 0x0007,
  48        0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
  49        0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
  50        0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
  51        0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
  52        0x0007, 0x0007,
  53};
  54
  55static const u16 b43_httab_0x27[] = {
  56        0x0009, 0x000e, 0x0011, 0x0014, 0x0017, 0x001a,
  57        0x001d, 0x0020, 0x0009, 0x000e, 0x0011, 0x0014,
  58        0x0017, 0x001a, 0x001d, 0x0020, 0x0009, 0x000e,
  59        0x0011, 0x0014, 0x0017, 0x001a, 0x001d, 0x0020,
  60        0x0009, 0x000e, 0x0011, 0x0014, 0x0017, 0x001a,
  61        0x001d, 0x0020,
  62};
  63
  64static const u16 b43_httab_0x26[] = {
  65        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  66        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  67        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  68        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  69        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  70        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  71        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  72        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  73        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  74        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  75        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  76        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  77        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  78        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  79        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  80        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  81        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  82        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  83        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  84        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  85        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  86        0x0000, 0x0000,
  87};
  88
  89static const u32 b43_httab_0x25[] = {
  90        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  91        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  92        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  93        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  94        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  95        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  96        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  97        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  98        0x00000000, 0x00000000, 0x00000000, 0x00000000,
  99        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 100        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 101        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 102        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 103        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 104        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 105        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 106        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 107        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 108        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 109        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 110        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 111        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 112        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 113        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 114        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 115        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 116        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 117        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 118        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 119        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 120        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 121        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 122};
 123
 124static const u32 b43_httab_0x2f[] = {
 125        0x00035700, 0x0002cc9a, 0x00026666, 0x0001581f,
 126        0x0001581f, 0x0001581f, 0x0001581f, 0x0001581f,
 127        0x0001581f, 0x0001581f, 0x0001581f, 0x00035700,
 128        0x0002cc9a, 0x00026666, 0x0001581f, 0x0001581f,
 129        0x0001581f, 0x0001581f, 0x0001581f, 0x0001581f,
 130        0x0001581f, 0x0001581f,
 131};
 132
 133static const u16 b43_httab_0x1a[] = {
 134        0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
 135        0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
 136        0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
 137        0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
 138        0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
 139        0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
 140        0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
 141        0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
 142        0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
 143        0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
 144        0x000b, 0x0007, 0x0002, 0x00fd,
 145};
 146
 147static const u16 b43_httab_0x1b[] = {
 148        0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
 149        0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
 150        0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
 151        0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
 152        0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
 153        0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
 154        0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
 155        0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
 156        0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
 157        0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
 158        0x000b, 0x0007, 0x0002, 0x00fd,
 159};
 160
 161static const u16 b43_httab_0x1c[] = {
 162        0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
 163        0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
 164        0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
 165        0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
 166        0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
 167        0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
 168        0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
 169        0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
 170        0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
 171        0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
 172        0x000b, 0x0007, 0x0002, 0x00fd,
 173};
 174
 175static const u32 b43_httab_0x1a_0xc0[] = {
 176        0x5bf70044, 0x5bf70042, 0x5bf70040, 0x5bf7003e,
 177        0x5bf7003c, 0x5bf7003b, 0x5bf70039, 0x5bf70037,
 178        0x5bf70036, 0x5bf70034, 0x5bf70033, 0x5bf70031,
 179        0x5bf70030, 0x5ba70044, 0x5ba70042, 0x5ba70040,
 180        0x5ba7003e, 0x5ba7003c, 0x5ba7003b, 0x5ba70039,
 181        0x5ba70037, 0x5ba70036, 0x5ba70034, 0x5ba70033,
 182        0x5b770044, 0x5b770042, 0x5b770040, 0x5b77003e,
 183        0x5b77003c, 0x5b77003b, 0x5b770039, 0x5b770037,
 184        0x5b770036, 0x5b770034, 0x5b770033, 0x5b770031,
 185        0x5b770030, 0x5b77002f, 0x5b77002d, 0x5b77002c,
 186        0x5b470044, 0x5b470042, 0x5b470040, 0x5b47003e,
 187        0x5b47003c, 0x5b47003b, 0x5b470039, 0x5b470037,
 188        0x5b470036, 0x5b470034, 0x5b470033, 0x5b470031,
 189        0x5b470030, 0x5b47002f, 0x5b47002d, 0x5b47002c,
 190        0x5b47002b, 0x5b47002a, 0x5b270044, 0x5b270042,
 191        0x5b270040, 0x5b27003e, 0x5b27003c, 0x5b27003b,
 192        0x5b270039, 0x5b270037, 0x5b270036, 0x5b270034,
 193        0x5b270033, 0x5b270031, 0x5b270030, 0x5b27002f,
 194        0x5b170044, 0x5b170042, 0x5b170040, 0x5b17003e,
 195        0x5b17003c, 0x5b17003b, 0x5b170039, 0x5b170037,
 196        0x5b170036, 0x5b170034, 0x5b170033, 0x5b170031,
 197        0x5b170030, 0x5b17002f, 0x5b17002d, 0x5b17002c,
 198        0x5b17002b, 0x5b17002a, 0x5b170028, 0x5b170027,
 199        0x5b170026, 0x5b170025, 0x5b170024, 0x5b170023,
 200        0x5b070044, 0x5b070042, 0x5b070040, 0x5b07003e,
 201        0x5b07003c, 0x5b07003b, 0x5b070039, 0x5b070037,
 202        0x5b070036, 0x5b070034, 0x5b070033, 0x5b070031,
 203        0x5b070030, 0x5b07002f, 0x5b07002d, 0x5b07002c,
 204        0x5b07002b, 0x5b07002a, 0x5b070028, 0x5b070027,
 205        0x5b070026, 0x5b070025, 0x5b070024, 0x5b070023,
 206        0x5b070022, 0x5b070021, 0x5b070020, 0x5b07001f,
 207        0x5b07001e, 0x5b07001d, 0x5b07001d, 0x5b07001c,
 208};
 209
 210static const u32 b43_httab_0x1a_0x140[] = {
 211        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 212        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 213        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 214        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 215        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 216        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 217        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 218        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 219        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 220        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 221        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 222        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 223        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 224        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 225        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 226        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 227        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 228        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 229        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 230        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 231        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 232        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 233        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 234        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 235        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 236        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 237        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 238        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 239        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 240        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 241        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 242        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 243};
 244
 245static const u32 b43_httab_0x1b_0x140[] = {
 246        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 247        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 248        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 249        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 250        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 251        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 252        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 253        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 254        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 255        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 256        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 257        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 258        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 259        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 260        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 261        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 262        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 263        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 264        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 265        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 266        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 267        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 268        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 269        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 270        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 271        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 272        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 273        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 274        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 275        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 276        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 277        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 278};
 279
 280static const u32 b43_httab_0x1c_0x140[] = {
 281        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 282        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 283        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 284        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 285        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 286        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 287        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 288        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 289        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 290        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 291        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 292        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 293        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 294        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 295        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 296        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 297        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 298        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 299        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 300        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 301        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 302        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 303        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 304        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 305        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 306        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 307        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 308        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 309        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 310        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 311        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 312        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 313};
 314
 315static const u16 b43_httab_0x1a_0x1c0[] = {
 316        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 317        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 318        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 319        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 320        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 321        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 322        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 323        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 324        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 325        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 326        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 327        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 328        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 329        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 330        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 331        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 332        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 333        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 334        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 335        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 336        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 337        0x0000, 0x0000,
 338};
 339
 340static const u16 b43_httab_0x1b_0x1c0[] = {
 341        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 342        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 343        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 344        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 345        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 346        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 347        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 348        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 349        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 350        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 351        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 352        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 353        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 354        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 355        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 356        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 357        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 358        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 359        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 360        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 361        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 362        0x0000, 0x0000,
 363};
 364
 365static const u16 b43_httab_0x1c_0x1c0[] = {
 366        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 367        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 368        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 369        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 370        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 371        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 372        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 373        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 374        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 375        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 376        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 377        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 378        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 379        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 380        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 381        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 382        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 383        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 384        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 385        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 386        0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 387        0x0000, 0x0000,
 388};
 389
 390static const u16 b43_httab_0x1a_0x240[] = {
 391        0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
 392        0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
 393        0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
 394        0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
 395        0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
 396        0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
 397        0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
 398        0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
 399        0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
 400        0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
 401        0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
 402        0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
 403        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 404        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 405        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 406        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 407        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 408        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 409        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 410        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 411        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 412        0x01d6, 0x01d6,
 413};
 414
 415static const u16 b43_httab_0x1b_0x240[] = {
 416        0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
 417        0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
 418        0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
 419        0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
 420        0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
 421        0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
 422        0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
 423        0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
 424        0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
 425        0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
 426        0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
 427        0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
 428        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 429        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 430        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 431        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 432        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 433        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 434        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 435        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 436        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 437        0x01d6, 0x01d6,
 438};
 439
 440static const u16 b43_httab_0x1c_0x240[] = {
 441        0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
 442        0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
 443        0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
 444        0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
 445        0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
 446        0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
 447        0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
 448        0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
 449        0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
 450        0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
 451        0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
 452        0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
 453        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 454        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 455        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 456        0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
 457        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 458        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 459        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 460        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 461        0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
 462        0x01d6, 0x01d6,
 463};
 464
 465static const u32 b43_httab_0x1f[] = {
 466        0x00000000, 0x00000000, 0x00016023, 0x00006028,
 467        0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
 468        0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
 469        0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
 470        0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
 471        0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
 472        0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
 473        0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
 474        0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
 475        0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
 476        0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
 477        0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
 478        0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
 479        0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
 480        0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
 481        0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
 482};
 483
 484static const u32 b43_httab_0x21[] = {
 485        0x00000000, 0x00000000, 0x00016023, 0x00006028,
 486        0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
 487        0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
 488        0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
 489        0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
 490        0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
 491        0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
 492        0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
 493        0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
 494        0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
 495        0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
 496        0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
 497        0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
 498        0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
 499        0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
 500        0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
 501};
 502
 503static const u32 b43_httab_0x23[] = {
 504        0x00000000, 0x00000000, 0x00016023, 0x00006028,
 505        0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
 506        0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
 507        0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
 508        0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
 509        0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
 510        0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
 511        0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
 512        0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
 513        0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
 514        0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
 515        0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
 516        0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
 517        0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
 518        0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
 519        0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
 520};
 521
 522static const u32 b43_httab_0x20[] = {
 523        0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
 524        0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
 525        0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
 526        0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
 527        0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
 528        0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
 529        0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
 530        0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
 531        0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
 532        0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
 533        0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
 534        0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
 535        0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
 536        0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
 537        0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
 538        0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
 539};
 540
 541static const u32 b43_httab_0x22[] = {
 542        0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
 543        0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
 544        0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
 545        0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
 546        0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
 547        0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
 548        0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
 549        0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
 550        0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
 551        0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
 552        0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
 553        0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
 554        0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
 555        0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
 556        0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
 557        0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
 558};
 559
 560static const u32 b43_httab_0x24[] = {
 561        0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
 562        0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
 563        0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
 564        0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
 565        0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
 566        0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
 567        0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
 568        0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
 569        0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
 570        0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
 571        0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
 572        0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
 573        0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
 574        0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
 575        0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
 576        0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
 577};
 578
 579/* Some late-init table */
 580const u32 b43_httab_0x1a_0xc0_late[] = {
 581        0x10f90040, 0x10e10040, 0x10e1003c, 0x10c9003d,
 582        0x10b9003c, 0x10a9003d, 0x10a1003c, 0x1099003b,
 583        0x1091003b, 0x1089003a, 0x1081003a, 0x10790039,
 584        0x10710039, 0x1069003a, 0x1061003b, 0x1059003d,
 585        0x1051003f, 0x10490042, 0x1049003e, 0x1049003b,
 586        0x1041003e, 0x1041003b, 0x1039003e, 0x1039003b,
 587        0x10390038, 0x10390035, 0x1031003a, 0x10310036,
 588        0x10310033, 0x1029003a, 0x10290037, 0x10290034,
 589        0x10290031, 0x10210039, 0x10210036, 0x10210033,
 590        0x10210030, 0x1019003c, 0x10190039, 0x10190036,
 591        0x10190033, 0x10190030, 0x1019002d, 0x1019002b,
 592        0x10190028, 0x1011003a, 0x10110036, 0x10110033,
 593        0x10110030, 0x1011002e, 0x1011002b, 0x10110029,
 594        0x10110027, 0x10110024, 0x10110022, 0x10110020,
 595        0x1011001f, 0x1011001d, 0x1009003a, 0x10090037,
 596        0x10090034, 0x10090031, 0x1009002e, 0x1009002c,
 597        0x10090029, 0x10090027, 0x10090025, 0x10090023,
 598        0x10090021, 0x1009001f, 0x1009001d, 0x1009001b,
 599        0x1009001a, 0x10090018, 0x10090017, 0x10090016,
 600        0x10090015, 0x10090013, 0x10090012, 0x10090011,
 601        0x10090010, 0x1009000f, 0x1009000f, 0x1009000e,
 602        0x1009000d, 0x1009000c, 0x1009000c, 0x1009000b,
 603        0x1009000a, 0x1009000a, 0x10090009, 0x10090009,
 604        0x10090008, 0x10090008, 0x10090007, 0x10090007,
 605        0x10090007, 0x10090006, 0x10090006, 0x10090005,
 606        0x10090005, 0x10090005, 0x10090005, 0x10090004,
 607        0x10090004, 0x10090004, 0x10090004, 0x10090003,
 608        0x10090003, 0x10090003, 0x10090003, 0x10090003,
 609        0x10090003, 0x10090002, 0x10090002, 0x10090002,
 610        0x10090002, 0x10090002, 0x10090002, 0x10090002,
 611        0x10090002, 0x10090002, 0x10090001, 0x10090001,
 612        0x10090001, 0x10090001, 0x10090001, 0x10090001,
 613};
 614
 615/**************************************************
 616 * R/W ops.
 617 **************************************************/
 618
 619u32 b43_httab_read(struct b43_wldev *dev, u32 offset)
 620{
 621        u32 type, value;
 622
 623        type = offset & B43_HTTAB_TYPEMASK;
 624        offset &= ~B43_HTTAB_TYPEMASK;
 625        B43_WARN_ON(offset > 0xFFFF);
 626
 627        switch (type) {
 628        case B43_HTTAB_8BIT:
 629                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 630                value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
 631                break;
 632        case B43_HTTAB_16BIT:
 633                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 634                value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
 635                break;
 636        case B43_HTTAB_32BIT:
 637                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 638                value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
 639                value <<= 16;
 640                value |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
 641                break;
 642        default:
 643                B43_WARN_ON(1);
 644                value = 0;
 645        }
 646
 647        return value;
 648}
 649
 650void b43_httab_read_bulk(struct b43_wldev *dev, u32 offset,
 651                         unsigned int nr_elements, void *_data)
 652{
 653        u32 type;
 654        u8 *data = _data;
 655        unsigned int i;
 656
 657        type = offset & B43_HTTAB_TYPEMASK;
 658        offset &= ~B43_HTTAB_TYPEMASK;
 659        B43_WARN_ON(offset > 0xFFFF);
 660
 661        b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 662
 663        for (i = 0; i < nr_elements; i++) {
 664                switch (type) {
 665                case B43_HTTAB_8BIT:
 666                        *data = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
 667                        data++;
 668                        break;
 669                case B43_HTTAB_16BIT:
 670                        *((u16 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
 671                        data += 2;
 672                        break;
 673                case B43_HTTAB_32BIT:
 674                        *((u32 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
 675                        *((u32 *)data) <<= 16;
 676                        *((u32 *)data) |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
 677                        data += 4;
 678                        break;
 679                default:
 680                        B43_WARN_ON(1);
 681                }
 682        }
 683}
 684
 685void b43_httab_write(struct b43_wldev *dev, u32 offset, u32 value)
 686{
 687        u32 type;
 688
 689        type = offset & B43_HTTAB_TYPEMASK;
 690        offset &= 0xFFFF;
 691
 692        switch (type) {
 693        case B43_HTTAB_8BIT:
 694                B43_WARN_ON(value & ~0xFF);
 695                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 696                b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
 697                break;
 698        case B43_HTTAB_16BIT:
 699                B43_WARN_ON(value & ~0xFFFF);
 700                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 701                b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
 702                break;
 703        case B43_HTTAB_32BIT:
 704                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 705                b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
 706                b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value & 0xFFFF);
 707                break;
 708        default:
 709                B43_WARN_ON(1);
 710        }
 711
 712        return;
 713}
 714
 715void b43_httab_write_few(struct b43_wldev *dev, u32 offset, size_t num, ...)
 716{
 717        va_list args;
 718        u32 type, value;
 719        unsigned int i;
 720
 721        type = offset & B43_HTTAB_TYPEMASK;
 722        offset &= 0xFFFF;
 723
 724        va_start(args, num);
 725        switch (type) {
 726        case B43_HTTAB_8BIT:
 727                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 728                for (i = 0; i < num; i++) {
 729                        value = va_arg(args, int);
 730                        B43_WARN_ON(value & ~0xFF);
 731                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
 732                }
 733                break;
 734        case B43_HTTAB_16BIT:
 735                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 736                for (i = 0; i < num; i++) {
 737                        value = va_arg(args, int);
 738                        B43_WARN_ON(value & ~0xFFFF);
 739                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
 740                }
 741                break;
 742        case B43_HTTAB_32BIT:
 743                b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 744                for (i = 0; i < num; i++) {
 745                        value = va_arg(args, int);
 746                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI,
 747                                      value >> 16);
 748                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO,
 749                                      value & 0xFFFF);
 750                }
 751                break;
 752        default:
 753                B43_WARN_ON(1);
 754        }
 755        va_end(args);
 756
 757        return;
 758}
 759
 760void b43_httab_write_bulk(struct b43_wldev *dev, u32 offset,
 761                          unsigned int nr_elements, const void *_data)
 762{
 763        u32 type, value;
 764        const u8 *data = _data;
 765        unsigned int i;
 766
 767        type = offset & B43_HTTAB_TYPEMASK;
 768        offset &= ~B43_HTTAB_TYPEMASK;
 769        B43_WARN_ON(offset > 0xFFFF);
 770
 771        b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
 772
 773        for (i = 0; i < nr_elements; i++) {
 774                switch (type) {
 775                case B43_HTTAB_8BIT:
 776                        value = *data;
 777                        data++;
 778                        B43_WARN_ON(value & ~0xFF);
 779                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
 780                        break;
 781                case B43_HTTAB_16BIT:
 782                        value = *((u16 *)data);
 783                        data += 2;
 784                        B43_WARN_ON(value & ~0xFFFF);
 785                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
 786                        break;
 787                case B43_HTTAB_32BIT:
 788                        value = *((u32 *)data);
 789                        data += 4;
 790                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
 791                        b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO,
 792                                        value & 0xFFFF);
 793                        break;
 794                default:
 795                        B43_WARN_ON(1);
 796                }
 797        }
 798}
 799
 800/**************************************************
 801 * Tables ops.
 802 **************************************************/
 803
 804#define httab_upload(dev, offset, data) do { \
 805                b43_httab_write_bulk(dev, offset, ARRAY_SIZE(data), data); \
 806        } while (0)
 807void b43_phy_ht_tables_init(struct b43_wldev *dev)
 808{
 809        BUILD_BUG_ON(ARRAY_SIZE(b43_httab_0x1a_0xc0_late) !=
 810                        B43_HTTAB_1A_C0_LATE_SIZE);
 811
 812        httab_upload(dev, B43_HTTAB16(0x12, 0), b43_httab_0x12);
 813        httab_upload(dev, B43_HTTAB16(0x27, 0), b43_httab_0x27);
 814        httab_upload(dev, B43_HTTAB16(0x26, 0), b43_httab_0x26);
 815        httab_upload(dev, B43_HTTAB32(0x25, 0), b43_httab_0x25);
 816        httab_upload(dev, B43_HTTAB32(0x2f, 0), b43_httab_0x2f);
 817        httab_upload(dev, B43_HTTAB16(0x1a, 0), b43_httab_0x1a);
 818        httab_upload(dev, B43_HTTAB16(0x1b, 0), b43_httab_0x1b);
 819        httab_upload(dev, B43_HTTAB16(0x1c, 0), b43_httab_0x1c);
 820        httab_upload(dev, B43_HTTAB32(0x1a, 0x0c0), b43_httab_0x1a_0xc0);
 821        httab_upload(dev, B43_HTTAB32(0x1a, 0x140), b43_httab_0x1a_0x140);
 822        httab_upload(dev, B43_HTTAB32(0x1b, 0x140), b43_httab_0x1b_0x140);
 823        httab_upload(dev, B43_HTTAB32(0x1c, 0x140), b43_httab_0x1c_0x140);
 824        httab_upload(dev, B43_HTTAB16(0x1a, 0x1c0), b43_httab_0x1a_0x1c0);
 825        httab_upload(dev, B43_HTTAB16(0x1b, 0x1c0), b43_httab_0x1b_0x1c0);
 826        httab_upload(dev, B43_HTTAB16(0x1c, 0x1c0), b43_httab_0x1c_0x1c0);
 827        httab_upload(dev, B43_HTTAB16(0x1a, 0x240), b43_httab_0x1a_0x240);
 828        httab_upload(dev, B43_HTTAB16(0x1b, 0x240), b43_httab_0x1b_0x240);
 829        httab_upload(dev, B43_HTTAB16(0x1c, 0x240), b43_httab_0x1c_0x240);
 830        httab_upload(dev, B43_HTTAB32(0x1f, 0), b43_httab_0x1f);
 831        httab_upload(dev, B43_HTTAB32(0x21, 0), b43_httab_0x21);
 832        httab_upload(dev, B43_HTTAB32(0x23, 0), b43_httab_0x23);
 833        httab_upload(dev, B43_HTTAB32(0x20, 0), b43_httab_0x20);
 834        httab_upload(dev, B43_HTTAB32(0x22, 0), b43_httab_0x22);
 835        httab_upload(dev, B43_HTTAB32(0x24, 0), b43_httab_0x24);
 836}
 837