1218013Sadrian/*- 2218013Sadrian * Copyright (c) 2005 John Bicket 3218013Sadrian * All rights reserved. 4218013Sadrian * 5218013Sadrian * Redistribution and use in source and binary forms, with or without 6218013Sadrian * modification, are permitted provided that the following conditions 7218013Sadrian * are met: 8218013Sadrian * 1. Redistributions of source code must retain the above copyright 9218013Sadrian * notice, this list of conditions and the following disclaimer, 10218013Sadrian * without modification. 11218013Sadrian * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12218013Sadrian * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 13218013Sadrian * redistribution must be conditioned upon including a substantially 14218013Sadrian * similar Disclaimer requirement for further binary redistribution. 15218013Sadrian * 3. Neither the names of the above-listed copyright holders nor the names 16218013Sadrian * of any contributors may be used to endorse or promote products derived 17218013Sadrian * from this software without specific prior written permission. 18218013Sadrian * 19218013Sadrian * Alternatively, this software may be distributed under the terms of the 20218013Sadrian * GNU General Public License ("GPL") version 2 as published by the Free 21218013Sadrian * Software Foundation. 22218013Sadrian * 23218013Sadrian * NO WARRANTY 24218013Sadrian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25218013Sadrian * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26218013Sadrian * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 27218013Sadrian * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 28218013Sadrian * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 29218013Sadrian * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30218013Sadrian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31218013Sadrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 32218013Sadrian * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33218013Sadrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 34218013Sadrian * THE POSSIBILITY OF SUCH DAMAGES. 35218013Sadrian * 36218013Sadrian */ 37218013Sadrian#ifndef __ATH_RATE_SAMPLE_TXSCHEDULES_H__ 38218013Sadrian#define __ATH_RATE_SAMPLE_TXSCHEDULES_H__ 39218013Sadrian 40218013Sadrian#include <sys/cdefs.h> 41218013Sadrian__FBSDID("$FreeBSD$"); 42218013Sadrian 43218013Sadrian#define A(_r) \ 44218013Sadrian (((_r) == 6) ? 0 : (((_r) == 9) ? 1 : (((_r) == 12) ? 2 : \ 45218013Sadrian (((_r) == 18) ? 3 : (((_r) == 24) ? 4 : (((_r) == 36) ? 5 : \ 46218013Sadrian (((_r) == 48) ? 6 : (((_r) == 54) ? 7 : 0)))))))) 47218013Sadrianstatic const struct txschedule series_11a[] = { 48218013Sadrian { 3,A( 6), 3,A( 6), 0,A( 6), 0,A( 6) }, /* 6Mb/s */ 49218013Sadrian { 4,A( 9), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 9Mb/s */ 50218013Sadrian { 4,A(12), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 12Mb/s */ 51218013Sadrian { 4,A(18), 3,A( 12), 4,A( 6), 2,A( 6) }, /* 18Mb/s */ 52218013Sadrian { 4,A(24), 3,A( 18), 4,A( 12), 2,A( 6) }, /* 24Mb/s */ 53218013Sadrian { 4,A(36), 3,A( 24), 4,A( 18), 2,A( 6) }, /* 36Mb/s */ 54218013Sadrian { 4,A(48), 3,A( 36), 4,A( 24), 2,A(12) }, /* 48Mb/s */ 55218013Sadrian { 4,A(54), 3,A( 48), 4,A( 36), 2,A(24) } /* 54Mb/s */ 56218013Sadrian}; 57218013Sadrian 58218013Sadrian#define NA1(_r) \ 59218013Sadrian (((_r) == 6.5) ? 8 : (((_r) == 13) ? 9 : (((_r) == 19.5)? 10 : \ 60218013Sadrian (((_r) == 26) ? 11 : (((_r) == 39) ? 12 : (((_r) == 52) ? 13 : \ 61218013Sadrian (((_r) == 58.5)? 14 : (((_r) == 65) ? 15 : 0)))))))) 62218013Sadrian#define NA2(_r) \ 63218013Sadrian (((_r) == 13) ? 16 : (((_r) == 26) ? 17 : (((_r) == 39) ? 18 : \ 64218013Sadrian (((_r) == 52) ? 19 : (((_r) == 78) ? 20 : (((_r) == 104)? 21 : \ 65218013Sadrian (((_r) == 117)? 22 : (((_r) == 130)? 23 : 0)))))))) 66218013Sadrianstatic const struct txschedule series_11na[] = { 67218013Sadrian { 3,A( 6), 3,A( 6), 0,A( 6), 0,A( 6) }, /* 6Mb/s */ 68218013Sadrian { 4,A( 9), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 9Mb/s */ 69218013Sadrian { 4,A(12), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 12Mb/s */ 70218013Sadrian { 4,A(18), 3,A( 12), 4,A( 6), 2,A( 6) }, /* 18Mb/s */ 71218013Sadrian { 4,A(24), 3,A( 18), 4,A( 12), 2,A( 6) }, /* 24Mb/s */ 72218013Sadrian { 4,A(36), 3,A( 24), 4,A( 18), 2,A( 6) }, /* 36Mb/s */ 73218013Sadrian { 4,A(48), 3,A( 36), 4,A( 24), 2,A(12) }, /* 48Mb/s */ 74218013Sadrian { 4,A(54), 3,A( 48), 4,A( 36), 2,A(24) }, /* 54Mb/s */ 75218013Sadrian { 3,NA1( 6.5), 3,NA1( 6.5), 0,NA1( 6.5), 0,NA1(6.5) }, /* 6.5Mb/s */ 76218013Sadrian { 4,NA1( 13), 3,NA1( 6.5), 4,NA1( 6.5), 0,NA1(6.5) }, /* 13Mb/s */ 77218013Sadrian { 4,NA1(19.5), 3,NA1( 6.5), 4,NA1( 6.5), 0,NA1(6.5) }, /*19.5Mb/s */ 78218013Sadrian { 4,NA1( 26), 3,NA1(19.5), 4,NA1( 6.5), 2,NA1(6.5) }, /* 26Mb/s */ 79218013Sadrian { 4,NA1( 39), 3,NA1( 26), 4,NA1(19.5), 2,NA1(6.5) }, /* 39Mb/s */ 80218013Sadrian { 4,NA1( 52), 3,NA1( 39), 4,NA1( 26), 2,NA1(6.5) }, /* 52Mb/s */ 81218013Sadrian { 4,NA1(58.5), 3,NA1( 52), 4,NA1( 39), 2,NA1( 13) }, /*58.5Mb/s */ 82218013Sadrian { 4,NA1( 65), 3,NA1(58.5), 4,NA1( 52), 2,NA1( 13) }, /* 65Mb/s */ 83218013Sadrian { 3,NA2( 13), 3,NA2( 13), 0,NA2( 13), 0,NA2( 13) }, /* 13Mb/s */ 84218013Sadrian { 4,NA2( 26), 3,NA2( 13), 4,NA2( 13), 0,NA2( 13) }, /* 26Mb/s */ 85218013Sadrian { 4,NA2( 39), 3,NA2( 26), 4,NA2( 13), 2,NA2( 13) }, /* 39Mb/s */ 86218013Sadrian { 4,NA2( 52), 3,NA2( 39), 4,NA2( 26), 2,NA2( 13) }, /* 52Mb/s */ 87218013Sadrian { 4,NA2( 78), 3,NA2( 52), 4,NA2( 39), 2,NA2( 13) }, /* 78Mb/s */ 88218013Sadrian { 4,NA2( 104), 3,NA2( 78), 4,NA2( 52), 2,NA2( 13) }, /* 104Mb/s */ 89218013Sadrian { 4,NA2( 117), 3,NA2( 104), 4,NA2( 78), 2,NA2( 26) }, /* 117Mb/s */ 90218013Sadrian { 4,NA2( 130), 3,NA2( 117), 4,NA2( 104), 2,NA2( 26) } /* 130Mb/s */ 91218013Sadrian}; 92218013Sadrian#undef A 93218013Sadrian#undef NA2 94218013Sadrian#undef NA1 95218013Sadrian 96218013Sadrian#define G(_r) \ 97218013Sadrian (((_r) == 1) ? 0 : (((_r) == 2) ? 1 : (((_r) == 5.5) ? 2 : \ 98218013Sadrian (((_r) == 11) ? 3 : (((_r) == 6) ? 4 : (((_r) == 9) ? 5 : \ 99218013Sadrian (((_r) == 12) ? 6 : (((_r) == 18) ? 7 : (((_r) == 24) ? 8 : \ 100218013Sadrian (((_r) == 36) ? 9 : (((_r) == 48) ? 10 : (((_r) == 54) ? 11 : 0)))))))))))) 101218013Sadrianstatic const struct txschedule series_11g[] = { 102218013Sadrian { 3,G( 1), 3,G( 1), 0,G( 1), 0,G( 1) }, /* 1Mb/s */ 103218013Sadrian { 4,G( 2), 3,G( 1), 4,G( 1), 0,G( 1) }, /* 2Mb/s */ 104218013Sadrian { 4,G(5.5),3,G( 2), 4,G( 1), 2,G( 1) }, /* 5.5Mb/s */ 105218013Sadrian { 4,G(11), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 11Mb/s */ 106218013Sadrian { 4,G( 6), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 6Mb/s */ 107218013Sadrian { 4,G( 9), 3,G( 6), 4,G(5.5), 2,G( 1) }, /* 9Mb/s */ 108218013Sadrian { 4,G(12), 3,G( 11), 4,G(5.5), 2,G( 1) }, /* 12Mb/s */ 109218013Sadrian { 4,G(18), 3,G( 12), 4,G( 11), 2,G( 1) }, /* 18Mb/s */ 110218013Sadrian { 4,G(24), 3,G( 18), 4,G( 12), 2,G( 1) }, /* 24Mb/s */ 111218013Sadrian { 4,G(36), 3,G( 24), 4,G( 18), 2,G( 1) }, /* 36Mb/s */ 112218013Sadrian { 4,G(48), 3,G( 36), 4,G( 24), 2,G( 1) }, /* 48Mb/s */ 113218013Sadrian { 4,G(54), 3,G( 48), 4,G( 36), 2,G( 1) } /* 54Mb/s */ 114218013Sadrian}; 115218013Sadrian 116218013Sadrian#define NG1(_r) \ 117218013Sadrian (((_r) == 6.5) ? 12 : (((_r) == 13) ? 13 : (((_r) == 19.5)? 14 : \ 118218013Sadrian (((_r) == 26) ? 15 : (((_r) == 39) ? 16 : (((_r) == 52) ? 17 : \ 119218013Sadrian (((_r) == 58.5)? 18 : (((_r) == 65) ? 19 : 0)))))))) 120218013Sadrian#define NG2(_r) \ 121218013Sadrian (((_r) == 13) ? 20 : (((_r) == 26) ? 21 : (((_r) == 39) ? 22 : \ 122218013Sadrian (((_r) == 52) ? 23 : (((_r) == 78) ? 24 : (((_r) == 104) ? 25 : \ 123218013Sadrian (((_r) == 117) ? 26 : (((_r) == 130)? 27 : 0)))))))) 124218013Sadrianstatic const struct txschedule series_11ng[] = { 125218013Sadrian { 3,G( 1), 3,G( 1), 0,G( 1), 0,G( 1) }, /* 1Mb/s */ 126218013Sadrian { 4,G( 2), 3,G( 1), 4,G( 1), 0,G( 1) }, /* 2Mb/s */ 127218013Sadrian { 4,G(5.5),3,G( 2), 4,G( 1), 2,G( 1) }, /* 5.5Mb/s */ 128218013Sadrian { 4,G(11), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 11Mb/s */ 129218013Sadrian { 4,G( 6), 3,G(5.5), 4,G( 2), 2,G( 1) }, /* 6Mb/s */ 130218013Sadrian { 4,G( 9), 3,G( 6), 4,G(5.5), 2,G( 1) }, /* 9Mb/s */ 131218013Sadrian { 4,G(12), 3,G( 11), 4,G(5.5), 2,G( 1) }, /* 12Mb/s */ 132218013Sadrian { 4,G(18), 3,G( 12), 4,G( 11), 2,G( 1) }, /* 18Mb/s */ 133218013Sadrian { 4,G(24), 3,G( 18), 4,G( 12), 2,G( 1) }, /* 24Mb/s */ 134218013Sadrian { 4,G(36), 3,G( 24), 4,G( 18), 2,G( 1) }, /* 36Mb/s */ 135218013Sadrian { 4,G(48), 3,G( 36), 4,G( 24), 2,G( 1) }, /* 48Mb/s */ 136218013Sadrian { 4,G(54), 3,G( 48), 4,G( 36), 2,G( 1) }, /* 54Mb/s */ 137218013Sadrian { 3,NG1( 6.5), 3,NG1( 6.5), 0,NG1( 6.5), 0,NG1(6.5) }, /* 6.5Mb/s */ 138218013Sadrian { 4,NG1( 13), 3,NG1( 6.5), 4,NG1( 6.5), 0,NG1(6.5) }, /* 13Mb/s */ 139218013Sadrian { 4,NG1(19.5), 3,NG1( 6.5), 4,NG1( 6.5), 0,NG1(6.5) }, /*19.5Mb/s */ 140218013Sadrian { 4,NG1( 26), 3,NG1(19.5), 4,NG1( 6.5), 2,NG1(6.5) }, /* 26Mb/s */ 141218013Sadrian { 4,NG1( 39), 3,NG1( 26), 4,NG1(19.5), 2,NG1(6.5) }, /* 39Mb/s */ 142218013Sadrian { 4,NG1( 52), 3,NG1( 39), 4,NG1( 26), 2,NG1(6.5) }, /* 52Mb/s */ 143218013Sadrian { 4,NG1(58.5), 3,NG1( 52), 4,NG1( 39), 2,NG1( 13) }, /*58.5Mb/s */ 144218013Sadrian { 4,NG1( 65), 3,NG1(58.5), 4,NG1( 52), 2,NG1( 13) }, /* 65Mb/s */ 145218013Sadrian { 3,NG2( 13), 3,NG2( 13), 0,NG2( 13), 0,NG2( 13) }, /* 13Mb/s */ 146218013Sadrian { 4,NG2( 26), 3,NG2( 13), 4,NG2( 13), 0,NG2( 13) }, /* 26Mb/s */ 147218013Sadrian { 4,NG2( 39), 3,NG2( 26), 4,NG2( 13), 2,NG2( 13) }, /* 39Mb/s */ 148218013Sadrian { 4,NG2( 52), 3,NG2( 39), 4,NG2( 26), 2,NG2( 13) }, /* 52Mb/s */ 149218013Sadrian { 4,NG2( 78), 3,NG2( 52), 4,NG2( 39), 2,NG2( 13) }, /* 78Mb/s */ 150218013Sadrian { 4,NG2( 104), 3,NG2( 78), 4,NG2( 52), 2,NG2( 13) }, /* 104Mb/s */ 151218013Sadrian { 4,NG2( 117), 3,NG2( 104), 4,NG2( 78), 2,NG2( 26) }, /* 117Mb/s */ 152218013Sadrian { 4,NG2( 130), 3,NG2( 117), 4,NG2( 104), 2,NG2( 26) } /* 130Mb/s */ 153218013Sadrian}; 154218013Sadrian#undef G 155218013Sadrian#undef NG2 156218013Sadrian#undef NG1 157218013Sadrian 158218013Sadrian#define H(_r) \ 159218013Sadrian (((_r) == 3) ? 0 : (((_r) == 4.5) ? 1 : (((_r) == 6) ? 2 : \ 160218013Sadrian (((_r) == 9) ? 3 : (((_r) == 12) ? 4 : (((_r) == 18) ? 5 : \ 161218013Sadrian (((_r) == 24) ? 6 : (((_r) == 27) ? 7 : 0)))))))) 162218013Sadrianstatic const struct txschedule series_half[] = { 163218013Sadrian { 3,H( 3), 3,H( 3), 0,H( 3), 0,H( 3) }, /* 3Mb/s */ 164218013Sadrian { 4,H(4.5),3,H( 3), 4,H( 3), 0,H( 3) }, /* 4.5Mb/s */ 165218013Sadrian { 4,H( 6), 3,H( 3), 4,H( 3), 0,H( 3) }, /* 6Mb/s */ 166218013Sadrian { 4,H( 9), 3,H( 6), 4,H( 3), 2,H( 3) }, /* 9Mb/s */ 167218013Sadrian { 4,H(12), 3,H( 9), 4,H( 6), 2,H( 3) }, /* 12Mb/s */ 168218013Sadrian { 4,H(18), 3,H( 12), 4,H( 9), 2,H( 3) }, /* 18Mb/s */ 169218013Sadrian { 4,H(24), 3,H( 18), 4,H( 12), 2,H( 6) }, /* 24Mb/s */ 170218013Sadrian { 4,H(27), 3,H( 24), 4,H( 18), 2,H(12) } /* 27Mb/s */ 171218013Sadrian}; 172218013Sadrian#undef H 173218013Sadrian 174218013Sadrian#ifdef Q 175221869Sattilio#undef Q 176218013Sadrian#endif 177218013Sadrian#define Q(_r) \ 178218013Sadrian (((_r) == 1.5) ? 0 : (((_r) ==2.25) ? 1 : (((_r) == 3) ? 2 : \ 179218013Sadrian (((_r) == 4.5) ? 3 : (((_r) == 6) ? 4 : (((_r) == 9) ? 5 : \ 180218013Sadrian (((_r) == 12) ? 6 : (((_r) == 13.5)? 7 : 0)))))))) 181218013Sadrianstatic const struct txschedule series_quarter[] = { 182218013Sadrian { 3,Q( 1.5),3,Q(1.5), 0,Q(1.5), 0,Q(1.5) }, /* 1.5Mb/s */ 183218013Sadrian { 4,Q(2.25),3,Q(1.5), 4,Q(1.5), 0,Q(1.5) }, /*2.25Mb/s */ 184218013Sadrian { 4,Q( 3),3,Q(1.5), 4,Q(1.5), 0,Q(1.5) }, /* 3Mb/s */ 185218013Sadrian { 4,Q( 4.5),3,Q( 3), 4,Q(1.5), 2,Q(1.5) }, /* 4.5Mb/s */ 186218013Sadrian { 4,Q( 6),3,Q(4.5), 4,Q( 3), 2,Q(1.5) }, /* 6Mb/s */ 187218013Sadrian { 4,Q( 9),3,Q( 6), 4,Q(4.5), 2,Q(1.5) }, /* 9Mb/s */ 188218013Sadrian { 4,Q( 12),3,Q( 9), 4,Q( 6), 2,Q( 3) }, /* 12Mb/s */ 189218013Sadrian { 4,Q(13.5),3,Q( 12), 4,Q( 9), 2,Q( 6) } /*13.5Mb/s */ 190218013Sadrian}; 191218013Sadrian#undef Q 192218013Sadrian 193218013Sadrian#endif 194