Transmit modify engine:

The transmit modify engine is used by the firmware to modify the pending frame that is ready for transmission inside the serializer. Up to 64 bytes of the original frame can be modified.
For example, let's say that you want to change the 802.11 "Address 1" header field: to do that you can simply write the value into the "Template fill value", set the corresponding bit of the "Template fill mask" and enable the modification with TXE_WMx.
It's important remember that TXE_WM0 + TXE_WM1 are 32 bits long (16 + 16). So if you put TXE_WM0 = 0x1 you enable byte 0 and byte 1 modification. If you want to modify only byte 0 you have to put the corresponding mask equal to 0x00FF. The modification of the "Address 1" to AA:BB:CC:DD:EE:FF will become:

SPR_TXE_WM0 = 0x00E0 (bit 5-6-7 set)

TXE0 Control

The register SPR_TXE0_CTL contains indication for the tx engine, and has different values for different frames. As long as we can see the SPR_TXE0_CTL has these values:

  • 0x4d95 for Beacon frames, that tells the TXE to use a PIFS
  • 0x4021 for ACK frames, that tells the TXE to use a SIFS
  • 0x4c1d for Data frames, that tells the TXE to use a DIFS
This register is used, among other things, to set different IFS in the conention mechanism that manages the transmission channel access.

FIFO Command

The tx engine can perform different operations on the frame into the FIFO queues. The number of the FIFO from where the frame must be picked and the operation that must be performed on that frame were stored on FIFO command register. There are at least 2 operations that can be performed:

  • SPR_TXE0_FIFO_CMD = SHM_TXFCUR | 0x2000 -> flush the frame in the queue indicated by SHM_TXFCUR
  • SPR_TXE0_FIFO_CMD = SHM_TXFCUR | 0x4000 -> transmit the frame in the queue indicated by SHM_TXFCUR

Transmit Select

This register tells the TXE from which source it has to pick data and where it has to put it. It is possible to specify the length of data that TXE will take. The informations about this register were still incomplete. Below there are some indications about the possible bits meaning: values are relatives to the bit mask following reported.

* 0xE000: Unknown meaning (3 bits)
* 0x1F00: Copy source (5 bits)
       - 8: Template RAM
       - 0-7: Fifos
       - ?
* 0x0060: Length (2 bits)
       - 1: as specified in SPR_TXE0_TX_COUNT
       - ?
* 0x001c: Destinaiton (3 bits)
       - 1: Serializer
       - 5: SHM
* 0x0002: Generate EOF (flag)
* 0x0001: ??

This register allows firmware to transfer frames, or parts of them, from one memory to another. This is very useful when firmware needs to analyze frame header or to modify part of the frame.

WiFi Tux



Useful links: