brintos

brintos / linux-shallow public Read only

0
0
Text · 10.6 KiB · d82fc9b Raw
352 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 4  Broadcom B43 wireless driver5  IEEE 802.11n 2059 radio device data tables6 7  Copyright (c) 2011 Rafał Miłecki <zajec5@gmail.com>8 9 10*/11 12#include "b43.h"13#include "radio_2059.h"14 15/* Extracted from MMIO dump of 6.30.223.141 */16static u16 r2059_phy_rev1_init[][2] = {17	{ 0x051, 0x70 }, { 0x05a, 0x03 }, { 0x079, 0x01 }, { 0x082, 0x70 },18	{ 0x083, 0x00 }, { 0x084, 0x70 }, { 0x09a, 0x7f }, { 0x0b6, 0x10 },19	{ 0x188, 0x05 },20};21 22#define RADIOREGS(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \23		  r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \24		  r20) \25	.radio_syn16			= r00,	\26	.radio_syn17			= r01,	\27	.radio_syn22			= r02,	\28	.radio_syn25			= r03,	\29	.radio_syn27			= r04,	\30	.radio_syn28			= r05,	\31	.radio_syn29			= r06,	\32	.radio_syn2c			= r07,	\33	.radio_syn2d			= r08,	\34	.radio_syn37			= r09,	\35	.radio_syn41			= r10,	\36	.radio_syn43			= r11,	\37	.radio_syn47			= r12,	\38	.radio_rxtx4a			= r13,	\39	.radio_rxtx58			= r14,	\40	.radio_rxtx5a			= r15,	\41	.radio_rxtx6a			= r16,	\42	.radio_rxtx6d			= r17,	\43	.radio_rxtx6e			= r18,	\44	.radio_rxtx92			= r19,	\45	.radio_rxtx98			= r2046 47#define PHYREGS(r0, r1, r2, r3, r4, r5)	\48	.phy_regs.bw1	= r0,	\49	.phy_regs.bw2	= r1,	\50	.phy_regs.bw3	= r2,	\51	.phy_regs.bw4	= r3,	\52	.phy_regs.bw5	= r4,	\53	.phy_regs.bw6	= r554 55/* Extracted from MMIO dump of 6.30.223.14156 * TODO: Values for channels 12 & 13 are outdated (from some old 5.x driver)!57 */58static const struct b43_phy_ht_channeltab_e_radio2059 b43_phy_ht_channeltab_radio2059[] = {59	{60		.freq			= 2412,61		RADIOREGS(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,62			  0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x73,63			  0x00, 0x00, 0x00, 0xd0, 0x00),64		PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),65	},66	{67		.freq			= 2417,68		RADIOREGS(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,69			  0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x73,70			  0x00, 0x00, 0x00, 0xd0, 0x00),71		PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),72	},73	{74		.freq			= 2422,75		RADIOREGS(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,76			  0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x73,77			  0x00, 0x00, 0x00, 0xd0, 0x00),78		PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),79	},80	{81		.freq			= 2427,82		RADIOREGS(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,83			  0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x73,84			  0x00, 0x00, 0x00, 0xa0, 0x00),85		PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),86	},87	{88		.freq			= 2432,89		RADIOREGS(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,90			  0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x73,91			  0x00, 0x00, 0x00, 0xa0, 0x00),92		PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),93	},94	{95		.freq			= 2437,96		RADIOREGS(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,97			  0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x73,98			  0x00, 0x00, 0x00, 0xa0, 0x00),99		PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),100	},101	{102		.freq			= 2442,103		RADIOREGS(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,104			  0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x73,105			  0x00, 0x00, 0x00, 0x80, 0x00),106		PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),107	},108	{109		.freq			= 2447,110		RADIOREGS(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,111			  0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x73,112			  0x00, 0x00, 0x00, 0x80, 0x00),113		PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),114	},115	{116		.freq			= 2452,117		RADIOREGS(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,118			  0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x73,119			  0x00, 0x00, 0x00, 0x80, 0x00),120		PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),121	},122	{123		.freq			= 2457,124		RADIOREGS(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,125			  0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x73,126			  0x00, 0x00, 0x00, 0x60, 0x00),127		PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),128	},129	{130		.freq			= 2462,131		RADIOREGS(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,132			  0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x73,133			  0x00, 0x00, 0x00, 0x60, 0x00),134		PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),135	},136  {	.freq			= 2467,137	RADIOREGS(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,138		  0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,139		  0x00, 0x00, 0x00, 0xf0, 0x00),140	PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),141  },142  {	.freq			= 2472,143	RADIOREGS(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,144		  0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,145		  0x00, 0x00, 0x00, 0xf0, 0x00),146	PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),147  },148	{149		.freq			= 5180,150		RADIOREGS(0xbe, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x06,151			  0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,152			  0x0f, 0x4f, 0xa3, 0x00, 0xfc),153		PHYREGS(0x081c, 0x0818, 0x0814, 0x01f9, 0x01fa, 0x01fb),154	},155	{156		.freq			= 5200,157		RADIOREGS(0xc5, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x08,158			  0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,159			  0x0f, 0x4f, 0x93, 0x00, 0xfb),160		PHYREGS(0x0824, 0x0820, 0x081c, 0x01f7, 0x01f8, 0x01f9),161	},162	{163		.freq			= 5220,164		RADIOREGS(0xcc, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0a,165			  0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,166			  0x0f, 0x4f, 0x93, 0x00, 0xea),167		PHYREGS(0x082c, 0x0828, 0x0824, 0x01f5, 0x01f6, 0x01f7),168	},169	{170		.freq			= 5240,171		RADIOREGS(0xd2, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0c,172			  0x02, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00,173			  0x0f, 0x4f, 0x93, 0x00, 0xda),174		PHYREGS(0x0834, 0x0830, 0x082c, 0x01f3, 0x01f4, 0x01f5),175	},176	{177		.freq			= 5260,178		RADIOREGS(0xd9, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0e,179			  0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,180			  0x0f, 0x4f, 0x93, 0x00, 0xca),181		PHYREGS(0x083c, 0x0838, 0x0834, 0x01f1, 0x01f2, 0x01f3),182	},183	{184		.freq			= 5280,185		RADIOREGS(0xe0, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x10,186			  0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,187			  0x0f, 0x4f, 0x93, 0x00, 0xb9),188		PHYREGS(0x0844, 0x0840, 0x083c, 0x01f0, 0x01f0, 0x01f1),189	},190	{191		.freq			= 5300,192		RADIOREGS(0xe6, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x12,193			  0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,194			  0x0f, 0x4c, 0x83, 0x00, 0xb8),195		PHYREGS(0x084c, 0x0848, 0x0844, 0x01ee, 0x01ef, 0x01f0),196	},197	{198		.freq			= 5320,199		RADIOREGS(0xed, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x14,200			  0x02, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00,201			  0x0f, 0x4c, 0x83, 0x00, 0xa8),202		PHYREGS(0x0854, 0x0850, 0x084c, 0x01ec, 0x01ed, 0x01ee),203	},204	{205		.freq			= 5500,206		RADIOREGS(0x29, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x26,207			  0x02, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x00,208			  0x0a, 0x46, 0x43, 0x00, 0x75),209		PHYREGS(0x089c, 0x0898, 0x0894, 0x01dc, 0x01dd, 0x01dd),210	},211	{212		.freq			= 5520,213		RADIOREGS(0x30, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x28,214			  0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,215			  0x0a, 0x46, 0x43, 0x00, 0x75),216		PHYREGS(0x08a4, 0x08a0, 0x089c, 0x01da, 0x01db, 0x01dc),217	},218	{219		.freq			= 5540,220		RADIOREGS(0x36, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x2a,221			  0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,222			  0x0a, 0x46, 0x43, 0x00, 0x75),223		PHYREGS(0x08ac, 0x08a8, 0x08a4, 0x01d8, 0x01d9, 0x01da),224	},225	{226		.freq			= 5560,227		RADIOREGS(0x3d, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x2c,228			  0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,229			  0x0a, 0x46, 0x43, 0x00, 0x75),230		PHYREGS(0x08b4, 0x08b0, 0x08ac, 0x01d7, 0x01d7, 0x01d8),231	},232	{233		.freq			= 5580,234		RADIOREGS(0x44, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x2e,235			  0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,236			  0x0a, 0x46, 0x43, 0x00, 0x74),237		PHYREGS(0x08bc, 0x08b8, 0x08b4, 0x01d5, 0x01d6, 0x01d7),238	},239	{240		.freq			= 5600,241		RADIOREGS(0x4a, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x30,242			  0x02, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,243			  0x09, 0x44, 0x23, 0x00, 0x54),244		PHYREGS(0x08c4, 0x08c0, 0x08bc, 0x01d3, 0x01d4, 0x01d5),245	},246	{247		.freq			= 5620,248		RADIOREGS(0x51, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x32,249			  0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,250			  0x09, 0x44, 0x23, 0x00, 0x54),251		PHYREGS(0x08cc, 0x08c8, 0x08c4, 0x01d2, 0x01d2, 0x01d3),252	},253	{254		.freq			= 5640,255		RADIOREGS(0x58, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x34,256			  0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,257			  0x09, 0x44, 0x23, 0x00, 0x43),258		PHYREGS(0x08d4, 0x08d0, 0x08cc, 0x01d0, 0x01d1, 0x01d2),259	},260	{261		.freq			= 5660,262		RADIOREGS(0x5e, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x36,263			  0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,264			  0x09, 0x43, 0x23, 0x00, 0x43),265		PHYREGS(0x08dc, 0x08d8, 0x08d4, 0x01ce, 0x01cf, 0x01d0),266	},267	{268		.freq			= 5680,269		RADIOREGS(0x65, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x38,270			  0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,271			  0x09, 0x42, 0x23, 0x00, 0x43),272		PHYREGS(0x08e4, 0x08e0, 0x08dc, 0x01cd, 0x01ce, 0x01ce),273	},274	{275		.freq			= 5700,276		RADIOREGS(0x6c, 0x17, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x3a,277			  0x02, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,278			  0x08, 0x42, 0x13, 0x00, 0x32),279		PHYREGS(0x08ec, 0x08e8, 0x08e4, 0x01cb, 0x01cc, 0x01cd),280	},281	{282		.freq			= 5745,283		RADIOREGS(0x7b, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x7d,284			  0x04, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00,285			  0x08, 0x42, 0x13, 0x00, 0x21),286		PHYREGS(0x08fe, 0x08fa, 0x08f6, 0x01c8, 0x01c8, 0x01c9),287	},288	{289		.freq			= 5765,290		RADIOREGS(0x81, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x81,291			  0x04, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00,292			  0x08, 0x42, 0x13, 0x00, 0x11),293		PHYREGS(0x0906, 0x0902, 0x08fe, 0x01c6, 0x01c7, 0x01c8),294	},295	{296		.freq			= 5785,297		RADIOREGS(0x88, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x85,298			  0x04, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00,299			  0x08, 0x42, 0x13, 0x00, 0x00),300		PHYREGS(0x090e, 0x090a, 0x0906, 0x01c4, 0x01c5, 0x01c6),301	},302	{303		.freq			= 5805,304		RADIOREGS(0x8f, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x89,305			  0x04, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00,306			  0x06, 0x41, 0x03, 0x00, 0x00),307		PHYREGS(0x0916, 0x0912, 0x090e, 0x01c3, 0x01c4, 0x01c4),308	},309	{310		.freq			= 5825,311		RADIOREGS(0x95, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x8d,312			  0x04, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00,313			  0x06, 0x41, 0x03, 0x00, 0x00),314		PHYREGS(0x091e, 0x091a, 0x0916, 0x01c1, 0x01c2, 0x01c3),315	},316};317 318void r2059_upload_inittabs(struct b43_wldev *dev)319{320	struct b43_phy *phy = &dev->phy;321	u16 *table = NULL;322	u16 size, i;323 324	switch (phy->rev) {325	case 1:326		table = r2059_phy_rev1_init[0];327		size = ARRAY_SIZE(r2059_phy_rev1_init);328		break;329	default:330		B43_WARN_ON(1);331		return;332	}333 334	for (i = 0; i < size; i++, table += 2)335		b43_radio_write(dev, R2059_ALL | table[0], table[1]);336}337 338const struct b43_phy_ht_channeltab_e_radio2059339*b43_phy_ht_get_channeltab_e_r2059(struct b43_wldev *dev, u16 freq)340{341	const struct b43_phy_ht_channeltab_e_radio2059 *e;342	unsigned int i;343 344	e = b43_phy_ht_channeltab_radio2059;345	for (i = 0; i < ARRAY_SIZE(b43_phy_ht_channeltab_radio2059); i++, e++) {346		if (e->freq == freq)347			return e;348	}349 350	return NULL;351}352