1a6a308a4SAdrian Chadd /*- 2718cf2ccSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 3718cf2ccSPedro F. Giffuni * 4a6a308a4SAdrian Chadd * Copyright (c) 2005 John Bicket 5a6a308a4SAdrian Chadd * All rights reserved. 6a6a308a4SAdrian Chadd * 7a6a308a4SAdrian Chadd * Redistribution and use in source and binary forms, with or without 8a6a308a4SAdrian Chadd * modification, are permitted provided that the following conditions 9a6a308a4SAdrian Chadd * are met: 10a6a308a4SAdrian Chadd * 1. Redistributions of source code must retain the above copyright 11a6a308a4SAdrian Chadd * notice, this list of conditions and the following disclaimer, 12a6a308a4SAdrian Chadd * without modification. 13a6a308a4SAdrian Chadd * 2. Redistributions in binary form must reproduce at minimum a disclaimer 14a6a308a4SAdrian Chadd * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 15a6a308a4SAdrian Chadd * redistribution must be conditioned upon including a substantially 16a6a308a4SAdrian Chadd * similar Disclaimer requirement for further binary redistribution. 17a6a308a4SAdrian Chadd * 3. Neither the names of the above-listed copyright holders nor the names 18a6a308a4SAdrian Chadd * of any contributors may be used to endorse or promote products derived 19a6a308a4SAdrian Chadd * from this software without specific prior written permission. 20a6a308a4SAdrian Chadd * 21a6a308a4SAdrian Chadd * Alternatively, this software may be distributed under the terms of the 22a6a308a4SAdrian Chadd * GNU General Public License ("GPL") version 2 as published by the Free 23a6a308a4SAdrian Chadd * Software Foundation. 24a6a308a4SAdrian Chadd * 25a6a308a4SAdrian Chadd * NO WARRANTY 26a6a308a4SAdrian Chadd * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27a6a308a4SAdrian Chadd * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28a6a308a4SAdrian Chadd * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 29a6a308a4SAdrian Chadd * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 30a6a308a4SAdrian Chadd * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 31a6a308a4SAdrian Chadd * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32a6a308a4SAdrian Chadd * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33a6a308a4SAdrian Chadd * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 34a6a308a4SAdrian Chadd * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35a6a308a4SAdrian Chadd * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 36a6a308a4SAdrian Chadd * THE POSSIBILITY OF SUCH DAMAGES. 37a6a308a4SAdrian Chadd * 38a6a308a4SAdrian Chadd */ 39a6a308a4SAdrian Chadd #ifndef __ATH_RATE_SAMPLE_TXSCHEDULES_H__ 40a6a308a4SAdrian Chadd #define __ATH_RATE_SAMPLE_TXSCHEDULES_H__ 41a6a308a4SAdrian Chadd 42a6a308a4SAdrian Chadd #include <sys/cdefs.h> 43a6a308a4SAdrian Chadd #define A(_r) \ 44a6a308a4SAdrian Chadd (((_r) == 6) ? 0 : (((_r) == 9) ? 1 : (((_r) == 12) ? 2 : \ 45a6a308a4SAdrian Chadd (((_r) == 18) ? 3 : (((_r) == 24) ? 4 : (((_r) == 36) ? 5 : \ 46a6a308a4SAdrian Chadd (((_r) == 48) ? 6 : (((_r) == 54) ? 7 : 0)))))))) 47a6a308a4SAdrian Chadd static const struct txschedule series_11a[] = { 48a6a308a4SAdrian Chadd { 3,A( 6), 3,A( 6), 0,A( 6), 0,A( 6) }, /* 6Mb/s */ 49a6a308a4SAdrian Chadd { 4,A( 9), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 9Mb/s */ 50a6a308a4SAdrian Chadd { 4,A(12), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 12Mb/s */ 51a6a308a4SAdrian Chadd { 4,A(18), 3,A( 12), 4,A( 6), 2,A( 6) }, /* 18Mb/s */ 52a6a308a4SAdrian Chadd { 4,A(24), 3,A( 18), 4,A( 12), 2,A( 6) }, /* 24Mb/s */ 53a6a308a4SAdrian Chadd { 4,A(36), 3,A( 24), 4,A( 18), 2,A( 6) }, /* 36Mb/s */ 54a6a308a4SAdrian Chadd { 4,A(48), 3,A( 36), 4,A( 24), 2,A(12) }, /* 48Mb/s */ 55a6a308a4SAdrian Chadd { 4,A(54), 3,A( 48), 4,A( 36), 2,A(24) } /* 54Mb/s */ 56a6a308a4SAdrian Chadd }; 57a6a308a4SAdrian Chadd 58a6a308a4SAdrian Chadd #define NA1(_r) \ 59a6a308a4SAdrian Chadd (((_r) == 6.5) ? 8 : (((_r) == 13) ? 9 : (((_r) == 19.5)? 10 : \ 60a6a308a4SAdrian Chadd (((_r) == 26) ? 11 : (((_r) == 39) ? 12 : (((_r) == 52) ? 13 : \ 61a6a308a4SAdrian Chadd (((_r) == 58.5)? 14 : (((_r) == 65) ? 15 : 0)))))))) 62a6a308a4SAdrian Chadd #define NA2(_r) \ 63a6a308a4SAdrian Chadd (((_r) == 13) ? 16 : (((_r) == 26) ? 17 : (((_r) == 39) ? 18 : \ 64a6a308a4SAdrian Chadd (((_r) == 52) ? 19 : (((_r) == 78) ? 20 : (((_r) == 104)? 21 : \ 65a6a308a4SAdrian Chadd (((_r) == 117)? 22 : (((_r) == 130)? 23 : 0)))))))) 66b36437c8SAdrian Chadd #define NA3(_r) \ 67b36437c8SAdrian Chadd (((_r) == 19.5) ? 24 : (((_r) == 39) ? 25 : (((_r) == 58.5) ? 26 : \ 68b36437c8SAdrian Chadd (((_r) == 78) ? 27 : (((_r) == 117) ? 28 : (((_r) == 156) ? 29 : \ 69b36437c8SAdrian Chadd (((_r) == 175.5) ? 30 : (((_r) == 195)? 31 : 0)))))))) 70a6a308a4SAdrian Chadd static const struct txschedule series_11na[] = { 71a6a308a4SAdrian Chadd { 3,A( 6), 3,A( 6), 0,A( 6), 0,A( 6) }, /* 6Mb/s */ 72a6a308a4SAdrian Chadd { 4,A( 9), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 9Mb/s */ 73a6a308a4SAdrian Chadd { 4,A(12), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 12Mb/s */ 74a6a308a4SAdrian Chadd { 4,A(18), 3,A( 12), 4,A( 6), 2,A( 6) }, /* 18Mb/s */ 75a6a308a4SAdrian Chadd { 4,A(24), 3,A( 18), 4,A( 12), 2,A( 6) }, /* 24Mb/s */ 76a6a308a4SAdrian Chadd { 4,A(36), 3,A( 24), 4,A( 18), 2,A( 6) }, /* 36Mb/s */ 77a6a308a4SAdrian Chadd { 4,A(48), 3,A( 36), 4,A( 24), 2,A(12) }, /* 48Mb/s */ 78a6a308a4SAdrian Chadd { 4,A(54), 3,A( 48), 4,A( 36), 2,A(24) }, /* 54Mb/s */ 79b36437c8SAdrian Chadd 80b36437c8SAdrian Chadd /* 1 stream rates */ 81b36437c8SAdrian Chadd 82a6a308a4SAdrian Chadd { 3,NA1( 6.5), 3,NA1( 6.5), 0,NA1( 6.5), 0,NA1(6.5) }, /* 6.5Mb/s */ 83a6a308a4SAdrian Chadd { 4,NA1( 13), 3,NA1( 6.5), 4,NA1( 6.5), 0,NA1(6.5) }, /* 13Mb/s */ 84a6a308a4SAdrian Chadd { 4,NA1(19.5), 3,NA1( 6.5), 4,NA1( 6.5), 0,NA1(6.5) }, /*19.5Mb/s */ 85a6a308a4SAdrian Chadd { 4,NA1( 26), 3,NA1(19.5), 4,NA1( 6.5), 2,NA1(6.5) }, /* 26Mb/s */ 86a6a308a4SAdrian Chadd { 4,NA1( 39), 3,NA1( 26), 4,NA1(19.5), 2,NA1(6.5) }, /* 39Mb/s */ 87a6a308a4SAdrian Chadd { 4,NA1( 52), 3,NA1( 39), 4,NA1( 26), 2,NA1(6.5) }, /* 52Mb/s */ 88a6a308a4SAdrian Chadd { 4,NA1(58.5), 3,NA1( 52), 4,NA1( 39), 2,NA1( 13) }, /*58.5Mb/s */ 89a6a308a4SAdrian Chadd { 4,NA1( 65), 3,NA1(58.5), 4,NA1( 52), 2,NA1( 13) }, /* 65Mb/s */ 90b36437c8SAdrian Chadd 91b36437c8SAdrian Chadd /* 2 stream rates */ 92b36437c8SAdrian Chadd 93a6a308a4SAdrian Chadd { 3,NA2( 13), 3,NA2( 13), 0,NA2( 13), 0,NA2( 13) }, /* 13Mb/s */ 94a6a308a4SAdrian Chadd { 4,NA2( 26), 3,NA2( 13), 4,NA2( 13), 0,NA2( 13) }, /* 26Mb/s */ 95a6a308a4SAdrian Chadd { 4,NA2( 39), 3,NA2( 26), 4,NA2( 13), 2,NA2( 13) }, /* 39Mb/s */ 96a6a308a4SAdrian Chadd { 4,NA2( 52), 3,NA2( 39), 4,NA2( 26), 2,NA2( 13) }, /* 52Mb/s */ 97a6a308a4SAdrian Chadd { 4,NA2( 78), 3,NA2( 52), 4,NA2( 39), 2,NA2( 13) }, /* 78Mb/s */ 98a6a308a4SAdrian Chadd { 4,NA2( 104), 3,NA2( 78), 4,NA2( 52), 2,NA2( 13) }, /* 104Mb/s */ 99a6a308a4SAdrian Chadd { 4,NA2( 117), 3,NA2( 104), 4,NA2( 78), 2,NA2( 26) }, /* 117Mb/s */ 100b193c0b5SAdrian Chadd { 4,NA2( 130), 3,NA2( 117), 4,NA2( 104), 2,NA2( 26) }, /* 130Mb/s */ 101b36437c8SAdrian Chadd 102b36437c8SAdrian Chadd /* 3 stream rates */ 103b36437c8SAdrian Chadd 104b36437c8SAdrian Chadd { 3,NA3(19.5), 3,NA3(19.5), 0,NA3(19.5), 0,NA3(19.5) }, /* 19Mb/s */ 105b36437c8SAdrian Chadd { 3,NA3( 39), 3,NA3(19.5), 0,NA3(19.5), 0,NA3(19.5) }, /* 39Mb/s */ 106b36437c8SAdrian Chadd { 3,NA3(58.5), 3,NA3( 39), 0,NA3(19.5), 0,NA3(19.5) }, /* 58Mb/s */ 107b36437c8SAdrian Chadd { 3,NA3( 78), 3,NA3(58.5), 0,NA3( 39), 0,NA3(19.5) }, /* 78Mb/s */ 108b36437c8SAdrian Chadd { 3,NA3( 117), 3,NA3( 78), 0,NA3(58.5), 0,NA3(19.5) }, /* 117Mb/s */ 109b36437c8SAdrian Chadd { 3,NA3( 156), 3,NA3( 117), 0,NA3( 78), 0,NA3(19.5) }, /* 156Mb/s */ 110b36437c8SAdrian Chadd { 3,NA3(175.5), 3,NA3( 156), 0,NA3( 117), 0,NA3( 39) }, /* 175Mb/s */ 111b36437c8SAdrian Chadd { 3,NA3( 195), 3,NA3( 195), 0,NA3( 156), 0,NA3(58.5) }, /* 195Mb/s */ 112a6a308a4SAdrian Chadd }; 113a6a308a4SAdrian Chadd #undef A 114b36437c8SAdrian Chadd #undef NA3 115a6a308a4SAdrian Chadd #undef NA2 116a6a308a4SAdrian Chadd #undef NA1 117a6a308a4SAdrian Chadd 118a6a308a4SAdrian Chadd #define G(_r) \ 119a6a308a4SAdrian Chadd (((_r) == 1) ? 0 : (((_r) == 2) ? 1 : (((_r) == 5.5) ? 2 : \ 120a6a308a4SAdrian Chadd (((_r) == 11) ? 3 : (((_r) == 6) ? 4 : (((_r) == 9) ? 5 : \ 121a6a308a4SAdrian Chadd (((_r) == 12) ? 6 : (((_r) == 18) ? 7 : (((_r) == 24) ? 8 : \ 122a6a308a4SAdrian Chadd (((_r) == 36) ? 9 : (((_r) == 48) ? 10 : (((_r) == 54) ? 11 : 0)))))))))))) 123a6a308a4SAdrian Chadd static const struct txschedule series_11g[] = { 124a6a308a4SAdrian Chadd { 3,G( 1), 3,G( 1), 0,G( 1), 0,G( 1) }, /* 1Mb/s */ 125a6a308a4SAdrian Chadd { 4,G( 2), 3,G( 1), 4,G( 1), 0,G( 1) }, /* 2Mb/s */ 126a6a308a4SAdrian Chadd { 4,G(5.5),3,G( 2), 4,G( 1), 2,G( 1) }, /* 5.5Mb/s */ 127a6a308a4SAdrian Chadd { 4,G(11), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 11Mb/s */ 128a6a308a4SAdrian Chadd { 4,G( 6), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 6Mb/s */ 129a6a308a4SAdrian Chadd { 4,G( 9), 3,G( 6), 4,G(5.5), 2,G( 1) }, /* 9Mb/s */ 130a6a308a4SAdrian Chadd { 4,G(12), 3,G( 11), 4,G(5.5), 2,G( 1) }, /* 12Mb/s */ 131a6a308a4SAdrian Chadd { 4,G(18), 3,G( 12), 4,G( 11), 2,G( 1) }, /* 18Mb/s */ 132a6a308a4SAdrian Chadd { 4,G(24), 3,G( 18), 4,G( 12), 2,G( 1) }, /* 24Mb/s */ 133a6a308a4SAdrian Chadd { 4,G(36), 3,G( 24), 4,G( 18), 2,G( 1) }, /* 36Mb/s */ 134a6a308a4SAdrian Chadd { 4,G(48), 3,G( 36), 4,G( 24), 2,G( 1) }, /* 48Mb/s */ 135a6a308a4SAdrian Chadd { 4,G(54), 3,G( 48), 4,G( 36), 2,G( 1) } /* 54Mb/s */ 136a6a308a4SAdrian Chadd }; 137a6a308a4SAdrian Chadd 138a6a308a4SAdrian Chadd #define NG1(_r) \ 139a6a308a4SAdrian Chadd (((_r) == 6.5) ? 12 : (((_r) == 13) ? 13 : (((_r) == 19.5)? 14 : \ 140a6a308a4SAdrian Chadd (((_r) == 26) ? 15 : (((_r) == 39) ? 16 : (((_r) == 52) ? 17 : \ 141a6a308a4SAdrian Chadd (((_r) == 58.5)? 18 : (((_r) == 65) ? 19 : 0)))))))) 142a6a308a4SAdrian Chadd #define NG2(_r) \ 143a6a308a4SAdrian Chadd (((_r) == 13) ? 20 : (((_r) == 26) ? 21 : (((_r) == 39) ? 22 : \ 144a6a308a4SAdrian Chadd (((_r) == 52) ? 23 : (((_r) == 78) ? 24 : (((_r) == 104) ? 25 : \ 145a6a308a4SAdrian Chadd (((_r) == 117) ? 26 : (((_r) == 130)? 27 : 0)))))))) 146b36437c8SAdrian Chadd #define NG3(_r) \ 147b36437c8SAdrian Chadd (((_r) == 19.5) ? 28 : (((_r) == 39) ? 29 : (((_r) == 58.5) ? 30 : \ 148b36437c8SAdrian Chadd (((_r) == 78) ? 31 : (((_r) == 117) ? 32 : (((_r) == 156) ? 33 : \ 149b36437c8SAdrian Chadd (((_r) == 175.5) ? 34 : (((_r) == 195)? 35 : 0)))))))) 150b36437c8SAdrian Chadd 151a6a308a4SAdrian Chadd static const struct txschedule series_11ng[] = { 152a6a308a4SAdrian Chadd { 3,G( 1), 3,G( 1), 0,G( 1), 0,G( 1) }, /* 1Mb/s */ 153a6a308a4SAdrian Chadd { 4,G( 2), 3,G( 1), 4,G( 1), 0,G( 1) }, /* 2Mb/s */ 154a6a308a4SAdrian Chadd { 4,G(5.5),3,G( 2), 4,G( 1), 2,G( 1) }, /* 5.5Mb/s */ 155a6a308a4SAdrian Chadd { 4,G(11), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 11Mb/s */ 156a6a308a4SAdrian Chadd { 4,G( 6), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 6Mb/s */ 157a6a308a4SAdrian Chadd { 4,G( 9), 3,G( 6), 4,G(5.5), 2,G( 1) }, /* 9Mb/s */ 158a6a308a4SAdrian Chadd { 4,G(12), 3,G( 11), 4,G(5.5), 2,G( 1) }, /* 12Mb/s */ 159a6a308a4SAdrian Chadd { 4,G(18), 3,G( 12), 4,G( 11), 2,G( 1) }, /* 18Mb/s */ 160a6a308a4SAdrian Chadd { 4,G(24), 3,G( 18), 4,G( 12), 2,G( 1) }, /* 24Mb/s */ 161a6a308a4SAdrian Chadd { 4,G(36), 3,G( 24), 4,G( 18), 2,G( 1) }, /* 36Mb/s */ 162a6a308a4SAdrian Chadd { 4,G(48), 3,G( 36), 4,G( 24), 2,G( 1) }, /* 48Mb/s */ 163a6a308a4SAdrian Chadd { 4,G(54), 3,G( 48), 4,G( 36), 2,G( 1) }, /* 54Mb/s */ 164b36437c8SAdrian Chadd 165b36437c8SAdrian Chadd /* 1 stream rates */ 166b36437c8SAdrian Chadd 167a6a308a4SAdrian Chadd { 3,NG1( 6.5), 3,NG1( 6.5), 0,NG1( 6.5), 0,NG1(6.5) }, /* 6.5Mb/s */ 168a6a308a4SAdrian Chadd { 4,NG1( 13), 3,NG1( 6.5), 4,NG1( 6.5), 0,NG1(6.5) }, /* 13Mb/s */ 169a6a308a4SAdrian Chadd { 4,NG1(19.5), 3,NG1( 6.5), 4,NG1( 6.5), 0,NG1(6.5) }, /*19.5Mb/s */ 170a6a308a4SAdrian Chadd { 4,NG1( 26), 3,NG1(19.5), 4,NG1( 6.5), 2,NG1(6.5) }, /* 26Mb/s */ 171a6a308a4SAdrian Chadd { 4,NG1( 39), 3,NG1( 26), 4,NG1(19.5), 2,NG1(6.5) }, /* 39Mb/s */ 172a6a308a4SAdrian Chadd { 4,NG1( 52), 3,NG1( 39), 4,NG1( 26), 2,NG1(6.5) }, /* 52Mb/s */ 173*b4967c9bSAdrian Chadd { 4,NG1(58.5), 3,NG1( 52), 4,NG1( 39), 2,NG1(6.5) }, /*58.5Mb/s */ 174*b4967c9bSAdrian Chadd { 4,NG1( 65), 3,NG1(58.5), 4,NG1( 52), 2,NG1(6.5) }, /* 65Mb/s */ 175b36437c8SAdrian Chadd 176b36437c8SAdrian Chadd /* 2 stream rates */ 177b36437c8SAdrian Chadd 178*b4967c9bSAdrian Chadd { 3,NG2( 13), 3,NG1(6.5), 0,NG2( 13), 0,NG2( 13) }, /* 13Mb/s */ 179*b4967c9bSAdrian Chadd { 4,NG2( 26), 3,NG2( 13), 4,NG1(6.5), 0,NG2( 13) }, /* 26Mb/s */ 180*b4967c9bSAdrian Chadd { 4,NG2( 39), 3,NG2( 26), 4,NG2( 13), 2,NG1(6.5) }, /* 39Mb/s */ 181*b4967c9bSAdrian Chadd { 4,NG2( 52), 3,NG2( 39), 4,NG2( 26), 2,NG1(6.5) }, /* 52Mb/s */ 182*b4967c9bSAdrian Chadd { 4,NG2( 78), 3,NG2( 52), 4,NG2( 39), 2,NG1(6.5) }, /* 78Mb/s */ 183*b4967c9bSAdrian Chadd { 4,NG2( 104), 3,NG2( 78), 4,NG2( 52), 2,NG1(6.5) }, /* 104Mb/s */ 184*b4967c9bSAdrian Chadd { 4,NG2( 117), 3,NG2( 104), 4,NG2( 78), 2,NG1(6.5) }, /* 117Mb/s */ 185*b4967c9bSAdrian Chadd { 4,NG2( 130), 3,NG2( 117), 4,NG2( 104), 2,NG1(6.5) }, /* 130Mb/s */ 186b36437c8SAdrian Chadd 187b36437c8SAdrian Chadd /* 3 stream rates */ 188b36437c8SAdrian Chadd 189*b4967c9bSAdrian Chadd { 3,NG3(19.5), 3,NG1(6.5), 0,NG3(19.5), 0,NG3(19.5) }, /* 19Mb/s */ 190*b4967c9bSAdrian Chadd { 3,NG3( 39), 3,NG3(19.5), 4,NG1(6.5), 0,NG3(19.5) }, /* 39Mb/s */ 191*b4967c9bSAdrian Chadd { 3,NG3(58.5), 3,NG3( 39), 4,NG1(6.5), 0,NG3(19.5) }, /* 58Mb/s */ 192*b4967c9bSAdrian Chadd { 3,NG3( 78), 3,NG3(58.5), 4,NG1(6.5), 0,NG3(19.5) }, /* 78Mb/s */ 193*b4967c9bSAdrian Chadd { 3,NG3( 117), 3,NG3( 78), 4,NG1(6.5), 0,NG3(19.5) }, /* 117Mb/s */ 194*b4967c9bSAdrian Chadd { 3,NG3( 156), 3,NG3( 117), 4,NG1(6.5), 0,NG3(19.5) }, /* 156Mb/s */ 195*b4967c9bSAdrian Chadd { 3,NG3(175.5), 3,NG3( 156), 4,NG1(6.5), 0,NG3( 39) }, /* 175Mb/s */ 196*b4967c9bSAdrian Chadd { 3,NG3( 195), 3,NG3( 195), 4,NG1(6.5), 0,NG3(58.5) }, /* 195Mb/s */ 197b36437c8SAdrian Chadd 198a6a308a4SAdrian Chadd }; 199a6a308a4SAdrian Chadd #undef G 200b36437c8SAdrian Chadd #undef NG3 201a6a308a4SAdrian Chadd #undef NG2 202a6a308a4SAdrian Chadd #undef NG1 203a6a308a4SAdrian Chadd 204a6a308a4SAdrian Chadd #define H(_r) \ 205a6a308a4SAdrian Chadd (((_r) == 3) ? 0 : (((_r) == 4.5) ? 1 : (((_r) == 6) ? 2 : \ 206a6a308a4SAdrian Chadd (((_r) == 9) ? 3 : (((_r) == 12) ? 4 : (((_r) == 18) ? 5 : \ 207a6a308a4SAdrian Chadd (((_r) == 24) ? 6 : (((_r) == 27) ? 7 : 0)))))))) 208a6a308a4SAdrian Chadd static const struct txschedule series_half[] = { 209a6a308a4SAdrian Chadd { 3,H( 3), 3,H( 3), 0,H( 3), 0,H( 3) }, /* 3Mb/s */ 210a6a308a4SAdrian Chadd { 4,H(4.5),3,H( 3), 4,H( 3), 0,H( 3) }, /* 4.5Mb/s */ 211a6a308a4SAdrian Chadd { 4,H( 6), 3,H( 3), 4,H( 3), 0,H( 3) }, /* 6Mb/s */ 212a6a308a4SAdrian Chadd { 4,H( 9), 3,H( 6), 4,H( 3), 2,H( 3) }, /* 9Mb/s */ 213a6a308a4SAdrian Chadd { 4,H(12), 3,H( 9), 4,H( 6), 2,H( 3) }, /* 12Mb/s */ 214a6a308a4SAdrian Chadd { 4,H(18), 3,H( 12), 4,H( 9), 2,H( 3) }, /* 18Mb/s */ 215a6a308a4SAdrian Chadd { 4,H(24), 3,H( 18), 4,H( 12), 2,H( 6) }, /* 24Mb/s */ 216a6a308a4SAdrian Chadd { 4,H(27), 3,H( 24), 4,H( 18), 2,H(12) } /* 27Mb/s */ 217a6a308a4SAdrian Chadd }; 218a6a308a4SAdrian Chadd #undef H 219a6a308a4SAdrian Chadd 220a6a308a4SAdrian Chadd #ifdef Q 2214b547324SAttilio Rao #undef Q 222a6a308a4SAdrian Chadd #endif 223a6a308a4SAdrian Chadd #define Q(_r) \ 224a6a308a4SAdrian Chadd (((_r) == 1.5) ? 0 : (((_r) ==2.25) ? 1 : (((_r) == 3) ? 2 : \ 225a6a308a4SAdrian Chadd (((_r) == 4.5) ? 3 : (((_r) == 6) ? 4 : (((_r) == 9) ? 5 : \ 226a6a308a4SAdrian Chadd (((_r) == 12) ? 6 : (((_r) == 13.5)? 7 : 0)))))))) 227a6a308a4SAdrian Chadd static const struct txschedule series_quarter[] = { 228a6a308a4SAdrian Chadd { 3,Q( 1.5),3,Q(1.5), 0,Q(1.5), 0,Q(1.5) }, /* 1.5Mb/s */ 229a6a308a4SAdrian Chadd { 4,Q(2.25),3,Q(1.5), 4,Q(1.5), 0,Q(1.5) }, /*2.25Mb/s */ 230a6a308a4SAdrian Chadd { 4,Q( 3),3,Q(1.5), 4,Q(1.5), 0,Q(1.5) }, /* 3Mb/s */ 231a6a308a4SAdrian Chadd { 4,Q( 4.5),3,Q( 3), 4,Q(1.5), 2,Q(1.5) }, /* 4.5Mb/s */ 232a6a308a4SAdrian Chadd { 4,Q( 6),3,Q(4.5), 4,Q( 3), 2,Q(1.5) }, /* 6Mb/s */ 233a6a308a4SAdrian Chadd { 4,Q( 9),3,Q( 6), 4,Q(4.5), 2,Q(1.5) }, /* 9Mb/s */ 234a6a308a4SAdrian Chadd { 4,Q( 12),3,Q( 9), 4,Q( 6), 2,Q( 3) }, /* 12Mb/s */ 235a6a308a4SAdrian Chadd { 4,Q(13.5),3,Q( 12), 4,Q( 9), 2,Q( 6) } /*13.5Mb/s */ 236a6a308a4SAdrian Chadd }; 237a6a308a4SAdrian Chadd #undef Q 238a6a308a4SAdrian Chadd 239a6a308a4SAdrian Chadd #endif 240