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