Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003 
0004   Broadcom B43 wireless driver
0005   IEEE 802.11n HT-PHY data tables
0006 
0007   Copyright (c) 2011 Rafał Miłecki <zajec5@gmail.com>
0008 
0009 
0010 */
0011 
0012 #include "b43.h"
0013 #include "tables_phy_ht.h"
0014 #include "phy_common.h"
0015 #include "phy_ht.h"
0016 
0017 static const u16 b43_httab_0x12[] = {
0018     0x0000, 0x0008, 0x000a, 0x0010, 0x0012, 0x0019,
0019     0x001a, 0x001c, 0x0080, 0x0088, 0x008a, 0x0090,
0020     0x0092, 0x0099, 0x009a, 0x009c, 0x0100, 0x0108,
0021     0x010a, 0x0110, 0x0112, 0x0119, 0x011a, 0x011c,
0022     0x0180, 0x0188, 0x018a, 0x0190, 0x0192, 0x0199,
0023     0x019a, 0x019c, 0x0000, 0x0098, 0x00a0, 0x00a8,
0024     0x009a, 0x00a2, 0x00aa, 0x0120, 0x0128, 0x0128,
0025     0x0130, 0x0138, 0x0138, 0x0140, 0x0122, 0x012a,
0026     0x012a, 0x0132, 0x013a, 0x013a, 0x0142, 0x01a8,
0027     0x01b0, 0x01b8, 0x01b0, 0x01b8, 0x01c0, 0x01c8,
0028     0x01c0, 0x01c8, 0x01d0, 0x01d0, 0x01d8, 0x01aa,
0029     0x01b2, 0x01ba, 0x01b2, 0x01ba, 0x01c2, 0x01ca,
0030     0x01c2, 0x01ca, 0x01d2, 0x01d2, 0x01da, 0x0001,
0031     0x0002, 0x0004, 0x0009, 0x000c, 0x0011, 0x0014,
0032     0x0018, 0x0020, 0x0021, 0x0022, 0x0024, 0x0081,
0033     0x0082, 0x0084, 0x0089, 0x008c, 0x0091, 0x0094,
0034     0x0098, 0x00a0, 0x00a1, 0x00a2, 0x00a4, 0x0007,
0035     0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
0036     0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
0037     0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
0038     0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
0039     0x0007, 0x0007,
0040 };
0041 
0042 static const u16 b43_httab_0x27[] = {
0043     0x0009, 0x000e, 0x0011, 0x0014, 0x0017, 0x001a,
0044     0x001d, 0x0020, 0x0009, 0x000e, 0x0011, 0x0014,
0045     0x0017, 0x001a, 0x001d, 0x0020, 0x0009, 0x000e,
0046     0x0011, 0x0014, 0x0017, 0x001a, 0x001d, 0x0020,
0047     0x0009, 0x000e, 0x0011, 0x0014, 0x0017, 0x001a,
0048     0x001d, 0x0020,
0049 };
0050 
0051 static const u16 b43_httab_0x26[] = {
0052     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0053     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0054     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0055     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0056     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0057     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0058     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0059     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0060     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0061     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0062     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0063     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0064     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0065     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0066     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0067     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0068     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0069     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0070     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0071     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0072     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0073     0x0000, 0x0000,
0074 };
0075 
0076 static const u32 b43_httab_0x25[] = {
0077     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0078     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0079     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0080     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0081     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0082     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0083     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0084     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0085     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0086     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0087     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0088     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0089     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0090     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0091     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0092     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0093     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0094     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0095     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0096     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0097     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0098     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0099     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0100     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0101     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0102     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0103     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0104     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0105     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0106     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0107     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0108     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0109 };
0110 
0111 static const u32 b43_httab_0x2f[] = {
0112     0x00035700, 0x0002cc9a, 0x00026666, 0x0001581f,
0113     0x0001581f, 0x0001581f, 0x0001581f, 0x0001581f,
0114     0x0001581f, 0x0001581f, 0x0001581f, 0x00035700,
0115     0x0002cc9a, 0x00026666, 0x0001581f, 0x0001581f,
0116     0x0001581f, 0x0001581f, 0x0001581f, 0x0001581f,
0117     0x0001581f, 0x0001581f,
0118 };
0119 
0120 static const u16 b43_httab_0x1a[] = {
0121     0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
0122     0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
0123     0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
0124     0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
0125     0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
0126     0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
0127     0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
0128     0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
0129     0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
0130     0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
0131     0x000b, 0x0007, 0x0002, 0x00fd,
0132 };
0133 
0134 static const u16 b43_httab_0x1b[] = {
0135     0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
0136     0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
0137     0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
0138     0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
0139     0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
0140     0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
0141     0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
0142     0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
0143     0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
0144     0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
0145     0x000b, 0x0007, 0x0002, 0x00fd,
0146 };
0147 
0148 static const u16 b43_httab_0x1c[] = {
0149     0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
0150     0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
0151     0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
0152     0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
0153     0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
0154     0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
0155     0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
0156     0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
0157     0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
0158     0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
0159     0x000b, 0x0007, 0x0002, 0x00fd,
0160 };
0161 
0162 static const u32 b43_httab_0x1a_0xc0[] = {
0163     0x5bf70044, 0x5bf70042, 0x5bf70040, 0x5bf7003e,
0164     0x5bf7003c, 0x5bf7003b, 0x5bf70039, 0x5bf70037,
0165     0x5bf70036, 0x5bf70034, 0x5bf70033, 0x5bf70031,
0166     0x5bf70030, 0x5ba70044, 0x5ba70042, 0x5ba70040,
0167     0x5ba7003e, 0x5ba7003c, 0x5ba7003b, 0x5ba70039,
0168     0x5ba70037, 0x5ba70036, 0x5ba70034, 0x5ba70033,
0169     0x5b770044, 0x5b770042, 0x5b770040, 0x5b77003e,
0170     0x5b77003c, 0x5b77003b, 0x5b770039, 0x5b770037,
0171     0x5b770036, 0x5b770034, 0x5b770033, 0x5b770031,
0172     0x5b770030, 0x5b77002f, 0x5b77002d, 0x5b77002c,
0173     0x5b470044, 0x5b470042, 0x5b470040, 0x5b47003e,
0174     0x5b47003c, 0x5b47003b, 0x5b470039, 0x5b470037,
0175     0x5b470036, 0x5b470034, 0x5b470033, 0x5b470031,
0176     0x5b470030, 0x5b47002f, 0x5b47002d, 0x5b47002c,
0177     0x5b47002b, 0x5b47002a, 0x5b270044, 0x5b270042,
0178     0x5b270040, 0x5b27003e, 0x5b27003c, 0x5b27003b,
0179     0x5b270039, 0x5b270037, 0x5b270036, 0x5b270034,
0180     0x5b270033, 0x5b270031, 0x5b270030, 0x5b27002f,
0181     0x5b170044, 0x5b170042, 0x5b170040, 0x5b17003e,
0182     0x5b17003c, 0x5b17003b, 0x5b170039, 0x5b170037,
0183     0x5b170036, 0x5b170034, 0x5b170033, 0x5b170031,
0184     0x5b170030, 0x5b17002f, 0x5b17002d, 0x5b17002c,
0185     0x5b17002b, 0x5b17002a, 0x5b170028, 0x5b170027,
0186     0x5b170026, 0x5b170025, 0x5b170024, 0x5b170023,
0187     0x5b070044, 0x5b070042, 0x5b070040, 0x5b07003e,
0188     0x5b07003c, 0x5b07003b, 0x5b070039, 0x5b070037,
0189     0x5b070036, 0x5b070034, 0x5b070033, 0x5b070031,
0190     0x5b070030, 0x5b07002f, 0x5b07002d, 0x5b07002c,
0191     0x5b07002b, 0x5b07002a, 0x5b070028, 0x5b070027,
0192     0x5b070026, 0x5b070025, 0x5b070024, 0x5b070023,
0193     0x5b070022, 0x5b070021, 0x5b070020, 0x5b07001f,
0194     0x5b07001e, 0x5b07001d, 0x5b07001d, 0x5b07001c,
0195 };
0196 
0197 static const u32 b43_httab_0x1a_0x140[] = {
0198     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0199     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0200     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0201     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0202     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0203     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0204     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0205     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0206     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0207     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0208     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0209     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0210     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0211     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0212     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0213     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0214     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0215     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0216     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0217     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0218     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0219     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0220     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0221     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0222     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0223     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0224     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0225     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0226     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0227     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0228     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0229     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0230 };
0231 
0232 static const u32 b43_httab_0x1b_0x140[] = {
0233     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0234     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0235     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0236     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0237     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0238     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0239     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0240     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0241     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0242     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0243     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0244     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0245     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0246     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0247     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0248     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0249     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0250     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0251     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0252     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0253     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0254     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0255     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0256     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0257     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0258     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0259     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0260     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0261     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0262     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0263     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0264     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0265 };
0266 
0267 static const u32 b43_httab_0x1c_0x140[] = {
0268     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0269     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0270     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0271     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0272     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0273     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0274     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0275     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0276     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0277     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0278     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0279     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0280     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0281     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0282     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0283     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0284     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0285     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0286     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0287     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0288     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0289     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0290     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0291     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0292     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0293     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0294     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0295     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0296     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0297     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0298     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0299     0x00000000, 0x00000000, 0x00000000, 0x00000000,
0300 };
0301 
0302 static const u16 b43_httab_0x1a_0x1c0[] = {
0303     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0304     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0305     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0306     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0307     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0308     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0309     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0310     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0311     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0312     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0313     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0314     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0315     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0316     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0317     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0318     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0319     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0320     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0321     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0322     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0323     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0324     0x0000, 0x0000,
0325 };
0326 
0327 static const u16 b43_httab_0x1b_0x1c0[] = {
0328     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0329     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0330     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0331     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0332     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0333     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0334     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0335     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0336     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0337     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0338     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0339     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0340     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0341     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0342     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0343     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0344     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0345     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0346     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0347     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0348     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0349     0x0000, 0x0000,
0350 };
0351 
0352 static const u16 b43_httab_0x1c_0x1c0[] = {
0353     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0354     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0355     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0356     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0357     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0358     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0359     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0360     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0361     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0362     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0363     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0364     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0365     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0366     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0367     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0368     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0369     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0370     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0371     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0372     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0373     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0374     0x0000, 0x0000,
0375 };
0376 
0377 static const u16 b43_httab_0x1a_0x240[] = {
0378     0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
0379     0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
0380     0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
0381     0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
0382     0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
0383     0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
0384     0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
0385     0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
0386     0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
0387     0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
0388     0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
0389     0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
0390     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0391     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0392     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0393     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0394     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0395     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0396     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0397     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0398     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0399     0x01d6, 0x01d6,
0400 };
0401 
0402 static const u16 b43_httab_0x1b_0x240[] = {
0403     0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
0404     0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
0405     0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
0406     0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
0407     0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
0408     0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
0409     0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
0410     0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
0411     0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
0412     0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
0413     0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
0414     0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
0415     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0416     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0417     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0418     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0419     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0420     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0421     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0422     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0423     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0424     0x01d6, 0x01d6,
0425 };
0426 
0427 static const u16 b43_httab_0x1c_0x240[] = {
0428     0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
0429     0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
0430     0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
0431     0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
0432     0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
0433     0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
0434     0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
0435     0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
0436     0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
0437     0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
0438     0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
0439     0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
0440     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0441     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0442     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0443     0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
0444     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0445     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0446     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0447     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0448     0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
0449     0x01d6, 0x01d6,
0450 };
0451 
0452 static const u32 b43_httab_0x1f[] = {
0453     0x00000000, 0x00000000, 0x00016023, 0x00006028,
0454     0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
0455     0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
0456     0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
0457     0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
0458     0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
0459     0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
0460     0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
0461     0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
0462     0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
0463     0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
0464     0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
0465     0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
0466     0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
0467     0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
0468     0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
0469 };
0470 
0471 static const u32 b43_httab_0x21[] = {
0472     0x00000000, 0x00000000, 0x00016023, 0x00006028,
0473     0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
0474     0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
0475     0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
0476     0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
0477     0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
0478     0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
0479     0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
0480     0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
0481     0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
0482     0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
0483     0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
0484     0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
0485     0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
0486     0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
0487     0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
0488 };
0489 
0490 static const u32 b43_httab_0x23[] = {
0491     0x00000000, 0x00000000, 0x00016023, 0x00006028,
0492     0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
0493     0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
0494     0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
0495     0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
0496     0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
0497     0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
0498     0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
0499     0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
0500     0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
0501     0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
0502     0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
0503     0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
0504     0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
0505     0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
0506     0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
0507 };
0508 
0509 static const u32 b43_httab_0x20[] = {
0510     0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
0511     0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
0512     0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
0513     0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
0514     0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
0515     0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
0516     0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
0517     0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
0518     0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
0519     0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
0520     0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
0521     0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
0522     0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
0523     0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
0524     0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
0525     0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
0526 };
0527 
0528 static const u32 b43_httab_0x22[] = {
0529     0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
0530     0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
0531     0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
0532     0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
0533     0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
0534     0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
0535     0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
0536     0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
0537     0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
0538     0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
0539     0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
0540     0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
0541     0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
0542     0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
0543     0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
0544     0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
0545 };
0546 
0547 static const u32 b43_httab_0x24[] = {
0548     0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
0549     0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
0550     0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
0551     0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
0552     0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
0553     0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
0554     0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
0555     0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
0556     0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
0557     0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
0558     0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
0559     0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
0560     0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
0561     0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
0562     0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
0563     0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
0564 };
0565 
0566 /* Some late-init table */
0567 const u32 b43_httab_0x1a_0xc0_late[] = {
0568     0x10f90040, 0x10e10040, 0x10e1003c, 0x10c9003d,
0569     0x10b9003c, 0x10a9003d, 0x10a1003c, 0x1099003b,
0570     0x1091003b, 0x1089003a, 0x1081003a, 0x10790039,
0571     0x10710039, 0x1069003a, 0x1061003b, 0x1059003d,
0572     0x1051003f, 0x10490042, 0x1049003e, 0x1049003b,
0573     0x1041003e, 0x1041003b, 0x1039003e, 0x1039003b,
0574     0x10390038, 0x10390035, 0x1031003a, 0x10310036,
0575     0x10310033, 0x1029003a, 0x10290037, 0x10290034,
0576     0x10290031, 0x10210039, 0x10210036, 0x10210033,
0577     0x10210030, 0x1019003c, 0x10190039, 0x10190036,
0578     0x10190033, 0x10190030, 0x1019002d, 0x1019002b,
0579     0x10190028, 0x1011003a, 0x10110036, 0x10110033,
0580     0x10110030, 0x1011002e, 0x1011002b, 0x10110029,
0581     0x10110027, 0x10110024, 0x10110022, 0x10110020,
0582     0x1011001f, 0x1011001d, 0x1009003a, 0x10090037,
0583     0x10090034, 0x10090031, 0x1009002e, 0x1009002c,
0584     0x10090029, 0x10090027, 0x10090025, 0x10090023,
0585     0x10090021, 0x1009001f, 0x1009001d, 0x1009001b,
0586     0x1009001a, 0x10090018, 0x10090017, 0x10090016,
0587     0x10090015, 0x10090013, 0x10090012, 0x10090011,
0588     0x10090010, 0x1009000f, 0x1009000f, 0x1009000e,
0589     0x1009000d, 0x1009000c, 0x1009000c, 0x1009000b,
0590     0x1009000a, 0x1009000a, 0x10090009, 0x10090009,
0591     0x10090008, 0x10090008, 0x10090007, 0x10090007,
0592     0x10090007, 0x10090006, 0x10090006, 0x10090005,
0593     0x10090005, 0x10090005, 0x10090005, 0x10090004,
0594     0x10090004, 0x10090004, 0x10090004, 0x10090003,
0595     0x10090003, 0x10090003, 0x10090003, 0x10090003,
0596     0x10090003, 0x10090002, 0x10090002, 0x10090002,
0597     0x10090002, 0x10090002, 0x10090002, 0x10090002,
0598     0x10090002, 0x10090002, 0x10090001, 0x10090001,
0599     0x10090001, 0x10090001, 0x10090001, 0x10090001,
0600 };
0601 
0602 /**************************************************
0603  * R/W ops.
0604  **************************************************/
0605 
0606 u32 b43_httab_read(struct b43_wldev *dev, u32 offset)
0607 {
0608     u32 type, value;
0609 
0610     type = offset & B43_HTTAB_TYPEMASK;
0611     offset &= ~B43_HTTAB_TYPEMASK;
0612     B43_WARN_ON(offset > 0xFFFF);
0613 
0614     switch (type) {
0615     case B43_HTTAB_8BIT:
0616         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0617         value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
0618         break;
0619     case B43_HTTAB_16BIT:
0620         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0621         value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
0622         break;
0623     case B43_HTTAB_32BIT:
0624         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0625         value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
0626         value <<= 16;
0627         value |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
0628         break;
0629     default:
0630         B43_WARN_ON(1);
0631         value = 0;
0632     }
0633 
0634     return value;
0635 }
0636 
0637 void b43_httab_read_bulk(struct b43_wldev *dev, u32 offset,
0638              unsigned int nr_elements, void *_data)
0639 {
0640     u32 type;
0641     u8 *data = _data;
0642     unsigned int i;
0643 
0644     type = offset & B43_HTTAB_TYPEMASK;
0645     offset &= ~B43_HTTAB_TYPEMASK;
0646     B43_WARN_ON(offset > 0xFFFF);
0647 
0648     b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0649 
0650     for (i = 0; i < nr_elements; i++) {
0651         switch (type) {
0652         case B43_HTTAB_8BIT:
0653             *data = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
0654             data++;
0655             break;
0656         case B43_HTTAB_16BIT:
0657             *((u16 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
0658             data += 2;
0659             break;
0660         case B43_HTTAB_32BIT:
0661             *((u32 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
0662             *((u32 *)data) <<= 16;
0663             *((u32 *)data) |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
0664             data += 4;
0665             break;
0666         default:
0667             B43_WARN_ON(1);
0668         }
0669     }
0670 }
0671 
0672 void b43_httab_write(struct b43_wldev *dev, u32 offset, u32 value)
0673 {
0674     u32 type;
0675 
0676     type = offset & B43_HTTAB_TYPEMASK;
0677     offset &= 0xFFFF;
0678 
0679     switch (type) {
0680     case B43_HTTAB_8BIT:
0681         B43_WARN_ON(value & ~0xFF);
0682         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0683         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
0684         break;
0685     case B43_HTTAB_16BIT:
0686         B43_WARN_ON(value & ~0xFFFF);
0687         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0688         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
0689         break;
0690     case B43_HTTAB_32BIT:
0691         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0692         b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
0693         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value & 0xFFFF);
0694         break;
0695     default:
0696         B43_WARN_ON(1);
0697     }
0698 
0699     return;
0700 }
0701 
0702 void b43_httab_write_few(struct b43_wldev *dev, u32 offset, size_t num, ...)
0703 {
0704     va_list args;
0705     u32 type, value;
0706     unsigned int i;
0707 
0708     type = offset & B43_HTTAB_TYPEMASK;
0709     offset &= 0xFFFF;
0710 
0711     va_start(args, num);
0712     switch (type) {
0713     case B43_HTTAB_8BIT:
0714         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0715         for (i = 0; i < num; i++) {
0716             value = va_arg(args, int);
0717             B43_WARN_ON(value & ~0xFF);
0718             b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
0719         }
0720         break;
0721     case B43_HTTAB_16BIT:
0722         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0723         for (i = 0; i < num; i++) {
0724             value = va_arg(args, int);
0725             B43_WARN_ON(value & ~0xFFFF);
0726             b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
0727         }
0728         break;
0729     case B43_HTTAB_32BIT:
0730         b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0731         for (i = 0; i < num; i++) {
0732             value = va_arg(args, int);
0733             b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI,
0734                       value >> 16);
0735             b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO,
0736                       value & 0xFFFF);
0737         }
0738         break;
0739     default:
0740         B43_WARN_ON(1);
0741     }
0742     va_end(args);
0743 
0744     return;
0745 }
0746 
0747 void b43_httab_write_bulk(struct b43_wldev *dev, u32 offset,
0748               unsigned int nr_elements, const void *_data)
0749 {
0750     u32 type, value;
0751     const u8 *data = _data;
0752     unsigned int i;
0753 
0754     type = offset & B43_HTTAB_TYPEMASK;
0755     offset &= ~B43_HTTAB_TYPEMASK;
0756     B43_WARN_ON(offset > 0xFFFF);
0757 
0758     b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
0759 
0760     for (i = 0; i < nr_elements; i++) {
0761         switch (type) {
0762         case B43_HTTAB_8BIT:
0763             value = *data;
0764             data++;
0765             B43_WARN_ON(value & ~0xFF);
0766             b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
0767             break;
0768         case B43_HTTAB_16BIT:
0769             value = *((u16 *)data);
0770             data += 2;
0771             B43_WARN_ON(value & ~0xFFFF);
0772             b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
0773             break;
0774         case B43_HTTAB_32BIT:
0775             value = *((u32 *)data);
0776             data += 4;
0777             b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
0778             b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO,
0779                     value & 0xFFFF);
0780             break;
0781         default:
0782             B43_WARN_ON(1);
0783         }
0784     }
0785 }
0786 
0787 /**************************************************
0788  * Tables ops.
0789  **************************************************/
0790 
0791 #define httab_upload(dev, offset, data) do { \
0792         b43_httab_write_bulk(dev, offset, ARRAY_SIZE(data), data); \
0793     } while (0)
0794 void b43_phy_ht_tables_init(struct b43_wldev *dev)
0795 {
0796     BUILD_BUG_ON(ARRAY_SIZE(b43_httab_0x1a_0xc0_late) !=
0797             B43_HTTAB_1A_C0_LATE_SIZE);
0798 
0799     httab_upload(dev, B43_HTTAB16(0x12, 0), b43_httab_0x12);
0800     httab_upload(dev, B43_HTTAB16(0x27, 0), b43_httab_0x27);
0801     httab_upload(dev, B43_HTTAB16(0x26, 0), b43_httab_0x26);
0802     httab_upload(dev, B43_HTTAB32(0x25, 0), b43_httab_0x25);
0803     httab_upload(dev, B43_HTTAB32(0x2f, 0), b43_httab_0x2f);
0804     httab_upload(dev, B43_HTTAB16(0x1a, 0), b43_httab_0x1a);
0805     httab_upload(dev, B43_HTTAB16(0x1b, 0), b43_httab_0x1b);
0806     httab_upload(dev, B43_HTTAB16(0x1c, 0), b43_httab_0x1c);
0807     httab_upload(dev, B43_HTTAB32(0x1a, 0x0c0), b43_httab_0x1a_0xc0);
0808     httab_upload(dev, B43_HTTAB32(0x1a, 0x140), b43_httab_0x1a_0x140);
0809     httab_upload(dev, B43_HTTAB32(0x1b, 0x140), b43_httab_0x1b_0x140);
0810     httab_upload(dev, B43_HTTAB32(0x1c, 0x140), b43_httab_0x1c_0x140);
0811     httab_upload(dev, B43_HTTAB16(0x1a, 0x1c0), b43_httab_0x1a_0x1c0);
0812     httab_upload(dev, B43_HTTAB16(0x1b, 0x1c0), b43_httab_0x1b_0x1c0);
0813     httab_upload(dev, B43_HTTAB16(0x1c, 0x1c0), b43_httab_0x1c_0x1c0);
0814     httab_upload(dev, B43_HTTAB16(0x1a, 0x240), b43_httab_0x1a_0x240);
0815     httab_upload(dev, B43_HTTAB16(0x1b, 0x240), b43_httab_0x1b_0x240);
0816     httab_upload(dev, B43_HTTAB16(0x1c, 0x240), b43_httab_0x1c_0x240);
0817     httab_upload(dev, B43_HTTAB32(0x1f, 0), b43_httab_0x1f);
0818     httab_upload(dev, B43_HTTAB32(0x21, 0), b43_httab_0x21);
0819     httab_upload(dev, B43_HTTAB32(0x23, 0), b43_httab_0x23);
0820     httab_upload(dev, B43_HTTAB32(0x20, 0), b43_httab_0x20);
0821     httab_upload(dev, B43_HTTAB32(0x22, 0), b43_httab_0x22);
0822     httab_upload(dev, B43_HTTAB32(0x24, 0), b43_httab_0x24);
0823 }