A Dummy Transmission is a transmission that doesn't actually get sent. The routine has two arguments: (1) ofdm - true for OFDM packet, and (2) pa_on.
Packet Composition
The packet that is sent depends on the PHY type. The first 6 bytes are for the PLCP data, the remainder is an ACK packet (type 0b01, subtype 0b1101)
OFDM frame
CC 01 02 00 00 00 D4 00 00 00 00 00 00 00 00 01 00 00 00 00
CCK frame
6E 84 0B 00 00 00 D4 00 00 00 00 00 00 00 00 01 00 00 00 00
These values are in big endian order (i.e. as they ought to be transmitted or written to the Template Ram if that is in big endian mode).
Note that we suspect a bug in the driver because the last 4 bytes of this overwrite the PLCP header of the next packet in the Template Ram. Also, the trailing zeroes would form the FCS of the 802.11 packet which don't seem to be present in other packets in the Template Ram, and are not correct either. That no one notices this bug probably means that the next packet isn't ever used. But we don't know.
As you can easily see, these packets differ only in the PLCP part, the actual packet is the same (an ACK packet).
Performing the Dummy Transmission
Write the packet you wish to send to Template Ram, offset 0
Write 0 to Core Register 0x568
- If the Core revision is less than 11
Write 0 to Core Register 0x7C0
- Otherwise
Write 0x100 to Core Register 0x7C0
- If you are writing an OFDM packet
Write 0x41 to Core Register 0x50C
- Otherwise
Write 0x40 to Core Register 0x50C
- If this is an N PHY, an LP PHY, or an SSLPN PHY (type 6)
Write 0x1A02 to Core Register 0x514
Write 0 to Core Register 0x508
Write 0 to Core Register 0x50A
Write 0 to Core Register 0x54C
Write 0x14 to Core Register 0x56A
Write 0x826 to Core Register 0x568
Write 0 to Core Register 0x500
- If argument pa_on is false and this is an N PHY
Read PHY Register 0x91 and save the result
Read PHY Register 0x92 and save the result
- If the radio chanspec bitwise ANDed with 0xF000 equals 0x1000 (5 GHz)
- Set an override value to 0x180
- Otherwise (2.4 GHz)
- Set an override value of 0x120
Write the override value to Phy Register 0x91
Write the override value to Phy Register 0x92
- If this is a N PHY (type == 4) or an SSLPN PHY (type == 6)
- Set a mask to 0xD0
- Else if this is an LP PHY (type == 5)
- Set a mask to 0x50
- Otherwise
- Set a mask to 0x30
Write the mask to Core Register 0x502
Spinwait until Core Register 0x50E has bit 0x80 set, at most 300 usecs for OFDM packets, 2500 usecs for CCCK packets, with a delay of 10 usecs
Spinwait until Core Register 0x50E has bit 0x400 set, at most 100 usecs, with a delay of 10 usecs
Spinwait until Core Register 0x690 has bit 0x100 unset, at most 100 usecs, with a delay of 10 usecs
- If the input argument pa_on is zero and this is an N PHY
Write the saved value to PHY Register 0x91
Write the saved value to PHY Register 0x92