1 /* 2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. 3 * All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * File: rxtx.h 20 * 21 * Purpose: 22 * 23 * Author: Jerry Chen 24 * 25 * Date: Jun. 27, 2002 26 * 27 */ 28 29 #ifndef __RXTX_H__ 30 #define __RXTX_H__ 31 32 #include "device.h" 33 #include "wcmd.h" 34 35 // 36 // RTS buffer header 37 // 38 typedef struct tagSRTSDataF { 39 u16 wFrameControl; 40 u16 wDurationID; 41 u8 abyRA[ETH_ALEN]; 42 u8 abyTA[ETH_ALEN]; 43 } SRTSDataF, *PSRTSDataF; 44 45 // 46 // CTS buffer header 47 // 48 typedef struct tagSCTSDataF { 49 u16 wFrameControl; 50 u16 wDurationID; 51 u8 abyRA[ETH_ALEN]; 52 u16 wReserved; 53 } SCTSDataF, *PSCTSDataF; 54 55 // 56 // MICHDR data header 57 // 58 typedef struct tagSMICHDR { 59 u32 adwHDR0[4]; 60 u32 adwHDR1[4]; 61 u32 adwHDR2[4]; 62 } SMICHDR, *PSMICHDR; 63 64 typedef struct tagSTX_NAF_G_RTS 65 { 66 //RsvTime 67 u16 wRTSTxRrvTime_ba; 68 u16 wRTSTxRrvTime_aa; 69 u16 wRTSTxRrvTime_bb; 70 u16 wReserved2; 71 u16 wTxRrvTime_b; 72 u16 wTxRrvTime_a; 73 74 //RTS 75 u8 byRTSSignalField_b; 76 u8 byRTSServiceField_b; 77 u16 wRTSTransmitLength_b; 78 u8 byRTSSignalField_a; 79 u8 byRTSServiceField_a; 80 u16 wRTSTransmitLength_a; 81 u16 wRTSDuration_ba; 82 u16 wRTSDuration_aa; 83 u16 wRTSDuration_bb; 84 u16 wReserved3; 85 SRTSDataF sRTS; 86 87 //Data 88 u8 bySignalField_b; 89 u8 byServiceField_b; 90 u16 wTransmitLength_b; 91 u8 bySignalField_a; 92 u8 byServiceField_a; 93 u16 wTransmitLength_a; 94 u16 wDuration_b; 95 u16 wDuration_a; 96 u16 wTimeStampOff_b; 97 u16 wTimeStampOff_a; 98 99 } TX_NAF_G_RTS, *PTX_NAF_G_RTS; 100 101 typedef struct tagSTX_NAF_G_RTS_MIC 102 { 103 //RsvTime 104 u16 wRTSTxRrvTime_ba; 105 u16 wRTSTxRrvTime_aa; 106 u16 wRTSTxRrvTime_bb; 107 u16 wReserved2; 108 u16 wTxRrvTime_b; 109 u16 wTxRrvTime_a; 110 111 SMICHDR sMICHDR; 112 113 //RTS 114 u8 byRTSSignalField_b; 115 u8 byRTSServiceField_b; 116 u16 wRTSTransmitLength_b; 117 u8 byRTSSignalField_a; 118 u8 byRTSServiceField_a; 119 u16 wRTSTransmitLength_a; 120 u16 wRTSDuration_ba; 121 u16 wRTSDuration_aa; 122 u16 wRTSDuration_bb; 123 u16 wReserved3; 124 SRTSDataF sRTS; 125 126 //Data 127 u8 bySignalField_b; 128 u8 byServiceField_b; 129 u16 wTransmitLength_b; 130 u8 bySignalField_a; 131 u8 byServiceField_a; 132 u16 wTransmitLength_a; 133 u16 wDuration_b; 134 u16 wDuration_a; 135 u16 wTimeStampOff_b; 136 u16 wTimeStampOff_a; 137 138 } TX_NAF_G_RTS_MIC, *PTX_NAF_G_RTS_MIC; 139 140 typedef struct tagSTX_NAF_G_CTS 141 { 142 //RsvTime 143 u16 wCTSTxRrvTime_ba; 144 u16 wReserved2; 145 u16 wTxRrvTime_b; 146 u16 wTxRrvTime_a; 147 148 //CTS 149 u8 byCTSSignalField_b; 150 u8 byCTSServiceField_b; 151 u16 wCTSTransmitLength_b; 152 u16 wCTSDuration_ba; 153 u16 wReserved3; 154 SCTSDataF sCTS; 155 156 //Data 157 u8 bySignalField_b; 158 u8 byServiceField_b; 159 u16 wTransmitLength_b; 160 u8 bySignalField_a; 161 u8 byServiceField_a; 162 u16 wTransmitLength_a; 163 u16 wDuration_b; 164 u16 wDuration_a; 165 u16 wTimeStampOff_b; 166 u16 wTimeStampOff_a; 167 168 } TX_NAF_G_CTS, *PTX_NAF_G_CTS; 169 170 typedef struct tagSTX_NAF_G_CTS_MIC 171 { 172 //RsvTime 173 u16 wCTSTxRrvTime_ba; 174 u16 wReserved2; 175 u16 wTxRrvTime_b; 176 u16 wTxRrvTime_a; 177 178 SMICHDR sMICHDR; 179 180 //CTS 181 u8 byCTSSignalField_b; 182 u8 byCTSServiceField_b; 183 u16 wCTSTransmitLength_b; 184 u16 wCTSDuration_ba; 185 u16 wReserved3; 186 SCTSDataF sCTS; 187 188 //Data 189 u8 bySignalField_b; 190 u8 byServiceField_b; 191 u16 wTransmitLength_b; 192 u8 bySignalField_a; 193 u8 byServiceField_a; 194 u16 wTransmitLength_a; 195 u16 wDuration_b; 196 u16 wDuration_a; 197 u16 wTimeStampOff_b; 198 u16 wTimeStampOff_a; 199 200 } TX_NAF_G_CTS_MIC, *PTX_NAF_G_CTS_MIC; 201 202 typedef struct tagSTX_NAF_G_BEACON 203 { 204 u16 wFIFOCtl; 205 u16 wTimeStamp; 206 207 //CTS 208 u8 byCTSSignalField_b; 209 u8 byCTSServiceField_b; 210 u16 wCTSTransmitLength_b; 211 u16 wCTSDuration_ba; 212 u16 wReserved1; 213 SCTSDataF sCTS; 214 215 //Data 216 u8 bySignalField_a; 217 u8 byServiceField_a; 218 u16 wTransmitLength_a; 219 u16 wDuration_a; 220 u16 wTimeStampOff_a; 221 222 } TX_NAF_G_BEACON, *PTX_NAF_G_BEACON; 223 224 typedef struct tagSTX_NAF_AB_RTS 225 { 226 //RsvTime 227 u16 wRTSTxRrvTime_ab; 228 u16 wTxRrvTime_ab; 229 230 //RTS 231 u8 byRTSSignalField_ab; 232 u8 byRTSServiceField_ab; 233 u16 wRTSTransmitLength_ab; 234 u16 wRTSDuration_ab; 235 u16 wReserved2; 236 SRTSDataF sRTS; 237 238 //Data 239 u8 bySignalField_ab; 240 u8 byServiceField_ab; 241 u16 wTransmitLength_ab; 242 u16 wDuration_ab; 243 u16 wTimeStampOff_ab; 244 245 } TX_NAF_AB_RTS, *PTX_NAF_AB_RTS; 246 247 typedef struct tagSTX_NAF_AB_RTS_MIC 248 { 249 //RsvTime 250 u16 wRTSTxRrvTime_ab; 251 u16 wTxRrvTime_ab; 252 253 SMICHDR sMICHDR; 254 255 //RTS 256 u8 byRTSSignalField_ab; 257 u8 byRTSServiceField_ab; 258 u16 wRTSTransmitLength_ab; 259 u16 wRTSDuration_ab; 260 u16 wReserved2; 261 SRTSDataF sRTS; 262 263 //Data 264 u8 bySignalField_ab; 265 u8 byServiceField_ab; 266 u16 wTransmitLength_ab; 267 u16 wDuration_ab; 268 u16 wTimeStampOff_ab; 269 270 } TX_NAF_AB_RTS_MIC, *PTX_NAF_AB_RTS_MIC; 271 272 typedef struct tagSTX_NAF_AB_CTS 273 { 274 //RsvTime 275 u16 wReserved2; 276 u16 wTxRrvTime_ab; 277 278 //Data 279 u8 bySignalField_ab; 280 u8 byServiceField_ab; 281 u16 wTransmitLength_ab; 282 u16 wDuration_ab; 283 u16 wTimeStampOff_ab; 284 285 } TX_NAF_AB_CTS, *PTX_NAF_AB_CTS; 286 287 typedef struct tagSTX_NAF_AB_CTS_MIC 288 { 289 //RsvTime 290 u16 wReserved2; 291 u16 wTxRrvTime_ab; 292 293 SMICHDR sMICHDR; 294 295 //Data 296 u8 bySignalField_ab; 297 u8 byServiceField_ab; 298 u16 wTransmitLength_ab; 299 u16 wDuration_ab; 300 u16 wTimeStampOff_ab; 301 302 } TX_NAF_AB_CTS_MIC, *PTX_NAF_AB_CTS_MIC; 303 304 typedef struct tagSTX_NAF_AB_BEACON 305 { 306 u16 wFIFOCtl; 307 u16 wTimeStamp; 308 309 //Data 310 u8 bySignalField_ab; 311 u8 byServiceField_ab; 312 u16 wTransmitLength_ab; 313 u16 wDuration_ab; 314 u16 wTimeStampOff_ab; 315 316 } TX_NAF_AB_BEACON, *PTX_NAF_AB_BEACON; 317 318 typedef struct tagSTX_AF_G_RTS 319 { 320 //RsvTime 321 u16 wRTSTxRrvTime_ba; 322 u16 wRTSTxRrvTime_aa; 323 u16 wRTSTxRrvTime_bb; 324 u16 wReserved2; 325 u16 wTxRrvTime_b; 326 u16 wTxRrvTime_a; 327 328 //RTS 329 u8 byRTSSignalField_b; 330 u8 byRTSServiceField_b; 331 u16 wRTSTransmitLength_b; 332 u8 byRTSSignalField_a; 333 u8 byRTSServiceField_a; 334 u16 wRTSTransmitLength_a; 335 u16 wRTSDuration_ba; 336 u16 wRTSDuration_aa; 337 u16 wRTSDuration_bb; 338 u16 wReserved3; 339 u16 wRTSDuration_ba_f0; 340 u16 wRTSDuration_aa_f0; 341 u16 wRTSDuration_ba_f1; 342 u16 wRTSDuration_aa_f1; 343 SRTSDataF sRTS; 344 345 //Data 346 u8 bySignalField_b; 347 u8 byServiceField_b; 348 u16 wTransmitLength_b; 349 u8 bySignalField_a; 350 u8 byServiceField_a; 351 u16 wTransmitLength_a; 352 u16 wDuration_b; 353 u16 wDuration_a; 354 u16 wDuration_a_f0; 355 u16 wDuration_a_f1; 356 u16 wTimeStampOff_b; 357 u16 wTimeStampOff_a; 358 359 } TX_AF_G_RTS, *PTX_AF_G_RTS; 360 361 typedef struct tagSTX_AF_G_RTS_MIC 362 { 363 //RsvTime 364 u16 wRTSTxRrvTime_ba; 365 u16 wRTSTxRrvTime_aa; 366 u16 wRTSTxRrvTime_bb; 367 u16 wReserved2; 368 u16 wTxRrvTime_b; 369 u16 wTxRrvTime_a; 370 371 SMICHDR sMICHDR; 372 373 //RTS 374 u8 byRTSSignalField_b; 375 u8 byRTSServiceField_b; 376 u16 wRTSTransmitLength_b; 377 u8 byRTSSignalField_a; 378 u8 byRTSServiceField_a; 379 u16 wRTSTransmitLength_a; 380 u16 wRTSDuration_ba; 381 u16 wRTSDuration_aa; 382 u16 wRTSDuration_bb; 383 u16 wReserved3; 384 u16 wRTSDuration_ba_f0; 385 u16 wRTSDuration_aa_f0; 386 u16 wRTSDuration_ba_f1; 387 u16 wRTSDuration_aa_f1; 388 SRTSDataF sRTS; 389 390 //Data 391 u8 bySignalField_b; 392 u8 byServiceField_b; 393 u16 wTransmitLength_b; 394 u8 bySignalField_a; 395 u8 byServiceField_a; 396 u16 wTransmitLength_a; 397 u16 wDuration_b; 398 u16 wDuration_a; 399 u16 wDuration_a_f0; 400 u16 wDuration_a_f1; 401 u16 wTimeStampOff_b; 402 u16 wTimeStampOff_a; 403 404 } TX_AF_G_RTS_MIC, *PTX_AF_G_RTS_MIC; 405 406 typedef struct tagSTX_AF_G_CTS 407 { 408 //RsvTime 409 u16 wCTSTxRrvTime_ba; 410 u16 wReserved2; 411 u16 wTxRrvTime_b; 412 u16 wTxRrvTime_a; 413 414 //CTS 415 u8 byCTSSignalField_b; 416 u8 byCTSServiceField_b; 417 u16 wCTSTransmitLength_b; 418 u16 wCTSDuration_ba; 419 u16 wReserved3; 420 u16 wCTSDuration_ba_f0; 421 u16 wCTSDuration_ba_f1; 422 SCTSDataF sCTS; 423 424 //Data 425 u8 bySignalField_b; 426 u8 byServiceField_b; 427 u16 wTransmitLength_b; 428 u8 bySignalField_a; 429 u8 byServiceField_a; 430 u16 wTransmitLength_a; 431 u16 wDuration_b; 432 u16 wDuration_a; 433 u16 wDuration_a_f0; 434 u16 wDuration_a_f1; 435 u16 wTimeStampOff_b; 436 u16 wTimeStampOff_a; 437 438 } TX_AF_G_CTS, *PTX_AF_G_CTS; 439 440 typedef struct tagSTX_AF_G_CTS_MIC 441 { 442 //RsvTime 443 u16 wCTSTxRrvTime_ba; 444 u16 wReserved2; 445 u16 wTxRrvTime_b; 446 u16 wTxRrvTime_a; 447 448 SMICHDR sMICHDR; 449 450 //CTS 451 u8 byCTSSignalField_b; 452 u8 byCTSServiceField_b; 453 u16 wCTSTransmitLength_b; 454 u16 wCTSDuration_ba; 455 u16 wReserved3; 456 u16 wCTSDuration_ba_f0; 457 u16 wCTSDuration_ba_f1; 458 SCTSDataF sCTS; 459 460 //Data 461 u8 bySignalField_b; 462 u8 byServiceField_b; 463 u16 wTransmitLength_b; 464 u8 bySignalField_a; 465 u8 byServiceField_a; 466 u16 wTransmitLength_a; 467 u16 wDuration_b; 468 u16 wDuration_a; 469 u16 wDuration_a_f0; 470 u16 wDuration_a_f1; 471 u16 wTimeStampOff_b; 472 u16 wTimeStampOff_a; 473 474 } TX_AF_G_CTS_MIC, *PTX_AF_G_CTS_MIC; 475 476 typedef struct tagSTX_AF_A_RTS 477 { 478 //RsvTime 479 u16 wRTSTxRrvTime_a; 480 u16 wTxRrvTime_a; 481 482 //RTS 483 u8 byRTSSignalField_a; 484 u8 byRTSServiceField_a; 485 u16 wRTSTransmitLength_a; 486 u16 wRTSDuration_a; 487 u16 wReserved2; 488 u16 wRTSDuration_a_f0; 489 u16 wRTSDuration_a_f1; 490 SRTSDataF sRTS; 491 492 //Data 493 u8 bySignalField_a; 494 u8 byServiceField_a; 495 u16 wTransmitLength_a; 496 u16 wDuration_a; 497 u16 wTimeStampOff_a; 498 u16 wDuration_a_f0; 499 u16 wDuration_a_f1; 500 501 } TX_AF_A_RTS, *PTX_AF_A_RTS; 502 503 typedef struct tagSTX_AF_A_RTS_MIC 504 { 505 //RsvTime 506 u16 wRTSTxRrvTime_a; 507 u16 wTxRrvTime_a; 508 509 SMICHDR sMICHDR; 510 511 //RTS 512 u8 byRTSSignalField_a; 513 u8 byRTSServiceField_a; 514 u16 wRTSTransmitLength_a; 515 u16 wRTSDuration_a; 516 u16 wReserved2; 517 u16 wRTSDuration_a_f0; 518 u16 wRTSDuration_a_f1; 519 SRTSDataF sRTS; 520 521 //Data 522 u8 bySignalField_a; 523 u8 byServiceField_a; 524 u16 wTransmitLength_a; 525 u16 wDuration_a; 526 u16 wTimeStampOff_a; 527 u16 wDuration_a_f0; 528 u16 wDuration_a_f1; 529 530 } TX_AF_A_RTS_MIC, *PTX_AF_A_RTS_MIC; 531 532 typedef struct tagSTX_AF_A_CTS 533 { 534 //RsvTime 535 u16 wReserved2; 536 u16 wTxRrvTime_a; 537 538 //Data 539 u8 bySignalField_a; 540 u8 byServiceField_a; 541 u16 wTransmitLength_a; 542 u16 wDuration_a; 543 u16 wTimeStampOff_a; 544 u16 wDuration_a_f0; 545 u16 wDuration_a_f1; 546 547 } TX_AF_A_CTS, *PTX_AF_A_CTS; 548 549 typedef struct tagSTX_AF_A_CTS_MIC 550 { 551 //RsvTime 552 u16 wReserved2; 553 u16 wTxRrvTime_a; 554 555 SMICHDR sMICHDR; 556 557 //Data 558 u8 bySignalField_a; 559 u8 byServiceField_a; 560 u16 wTransmitLength_a; 561 u16 wDuration_a; 562 u16 wTimeStampOff_a; 563 u16 wDuration_a_f0; 564 u16 wDuration_a_f1; 565 566 } TX_AF_A_CTS_MIC, *PTX_AF_A_CTS_MIC; 567 568 // 569 // union with all of the TX Buffer Type 570 // 571 typedef union tagUTX_BUFFER_CONTAINER 572 { 573 TX_NAF_G_RTS RTS_G; 574 TX_NAF_G_RTS_MIC RTS_G_MIC; 575 TX_NAF_G_CTS CTS_G; 576 TX_NAF_G_CTS_MIC CTS_G_MIC; 577 //TX_NAF_G_BEACON Beacon_G; 578 TX_NAF_AB_RTS RTS_AB; 579 TX_NAF_AB_RTS_MIC RTS_AB_MIC; 580 TX_NAF_AB_CTS CTS_AB; 581 TX_NAF_AB_CTS_MIC CTS_AB_MIC; 582 //TX_NAF_AB_BEACON Beacon_AB; 583 TX_AF_G_RTS RTS_G_AutoFB; 584 TX_AF_G_RTS_MIC RTS_G_AutoFB_MIC; 585 TX_AF_G_CTS CTS_G_AutoFB; 586 TX_AF_G_CTS_MIC CTS_G_AutoFB_MIC; 587 TX_AF_A_RTS RTS_A_AutoFB; 588 TX_AF_A_RTS_MIC RTS_A_AutoFB_MIC; 589 TX_AF_A_CTS CTS_A_AutoFB; 590 TX_AF_A_CTS_MIC CTS_A_AutoFB_MIC; 591 592 } TX_BUFFER_CONTAINER, *PTX_BUFFER_CONTAINER; 593 594 // 595 // Remote NDIS message format 596 // 597 typedef struct tagSTX_BUFFER 598 { 599 u8 byType; 600 u8 byPKTNO; 601 u16 wTxByteCount; 602 603 u32 adwTxKey[4]; 604 u16 wFIFOCtl; 605 u16 wTimeStamp; 606 u16 wFragCtl; 607 u16 wReserved; 608 609 // Actual message 610 TX_BUFFER_CONTAINER BufferHeader; 611 612 } __packed TX_BUFFER, *PTX_BUFFER; 613 614 // 615 // Remote NDIS message format 616 // 617 typedef struct tagSBEACON_BUFFER 618 { 619 u8 byType; 620 u8 byPKTNO; 621 u16 wTxByteCount; 622 623 u16 wFIFOCtl; 624 u16 wTimeStamp; 625 626 // Actual message 627 TX_BUFFER_CONTAINER BufferHeader; 628 629 } __packed BEACON_BUFFER, *PBEACON_BUFFER; 630 631 void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb); 632 int nsDMA_tx_packet(struct vnt_private *, u32 uDMAIdx, struct sk_buff *skb); 633 CMD_STATUS csMgmt_xmit(struct vnt_private *, struct vnt_tx_mgmt *); 634 CMD_STATUS csBeacon_xmit(struct vnt_private *, struct vnt_tx_mgmt *); 635 int bRelayPacketSend(struct vnt_private *, u8 *pbySkbData, u32 uDataLen, 636 u32 uNodeIndex); 637 638 #endif /* __RXTX_H__ */ 639