xref: /freebsd/sys/dev/ath/ath_rate/sample/tx_schedules.h (revision 685dc743dc3b5645e34836464128e1c0558b404b)
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