Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros
prph.h File Reference

Go to the source code of this file.

Macros

#define PRPH_BASE   (0x00000)
 
#define PRPH_END   (0xFFFFF)
 
#define APMG_BASE   (PRPH_BASE + 0x3000)
 
#define APMG_CLK_CTRL_REG   (APMG_BASE + 0x0000)
 
#define APMG_CLK_EN_REG   (APMG_BASE + 0x0004)
 
#define APMG_CLK_DIS_REG   (APMG_BASE + 0x0008)
 
#define APMG_PS_CTRL_REG   (APMG_BASE + 0x000c)
 
#define APMG_PCIDEV_STT_REG   (APMG_BASE + 0x0010)
 
#define APMG_RFKILL_REG   (APMG_BASE + 0x0014)
 
#define APMG_RTC_INT_STT_REG   (APMG_BASE + 0x001c)
 
#define APMG_RTC_INT_MSK_REG   (APMG_BASE + 0x0020)
 
#define APMG_DIGITAL_SVR_REG   (APMG_BASE + 0x0058)
 
#define APMG_ANALOG_SVR_REG   (APMG_BASE + 0x006C)
 
#define APMS_CLK_VAL_MRB_FUNC_MODE   (0x00000001)
 
#define APMG_CLK_VAL_DMA_CLK_RQT   (0x00000200)
 
#define APMG_CLK_VAL_BSM_CLK_RQT   (0x00000800)
 
#define APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS   (0x00400000)
 
#define APMG_PS_CTRL_VAL_RESET_REQ   (0x04000000)
 
#define APMG_PS_CTRL_MSK_PWR_SRC   (0x03000000)
 
#define APMG_PS_CTRL_VAL_PWR_SRC_VMAIN   (0x00000000)
 
#define APMG_PS_CTRL_VAL_PWR_SRC_MAX   (0x01000000) /* 3945 only */
 
#define APMG_PS_CTRL_VAL_PWR_SRC_VAUX   (0x02000000)
 
#define APMG_SVR_VOLTAGE_CONFIG_BIT_MSK   (0x000001E0) /* bit 8:5 */
 
#define APMG_SVR_DIGITAL_VOLTAGE_1_32   (0x00000060)
 
#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS   (0x00000800)
 
#define BSM_WR_CTRL_REG_BIT_START   (0x80000000) /* start boot load now */
 
#define BSM_WR_CTRL_REG_BIT_START_EN   (0x40000000) /* enable boot after pwrup */
 
#define BSM_DRAM_INST_LOAD   (0x80000000) /* start program load now */
 
#define BSM_BASE   (PRPH_BASE + 0x3400)
 
#define BSM_END   (PRPH_BASE + 0x3800)
 
#define BSM_WR_CTRL_REG   (BSM_BASE + 0x000) /* ctl and status */
 
#define BSM_WR_MEM_SRC_REG   (BSM_BASE + 0x004) /* source in BSM mem */
 
#define BSM_WR_MEM_DST_REG   (BSM_BASE + 0x008) /* dest in SRAM mem */
 
#define BSM_WR_DWCOUNT_REG   (BSM_BASE + 0x00C) /* bytes */
 
#define BSM_WR_STATUS_REG   (BSM_BASE + 0x010) /* bit 0: 1 == done */
 
#define BSM_DRAM_INST_PTR_REG   (BSM_BASE + 0x090)
 
#define BSM_DRAM_INST_BYTECOUNT_REG   (BSM_BASE + 0x094)
 
#define BSM_DRAM_DATA_PTR_REG   (BSM_BASE + 0x098)
 
#define BSM_DRAM_DATA_BYTECOUNT_REG   (BSM_BASE + 0x09C)
 
#define BSM_SRAM_LOWER_BOUND   (PRPH_BASE + 0x3800)
 
#define BSM_SRAM_SIZE   (1024) /* bytes */
 
#define ALM_SCD_BASE   (PRPH_BASE + 0x2E00)
 
#define ALM_SCD_MODE_REG   (ALM_SCD_BASE + 0x000)
 
#define ALM_SCD_ARASTAT_REG   (ALM_SCD_BASE + 0x004)
 
#define ALM_SCD_TXFACT_REG   (ALM_SCD_BASE + 0x010)
 
#define ALM_SCD_TXF4MF_REG   (ALM_SCD_BASE + 0x014)
 
#define ALM_SCD_TXF5MF_REG   (ALM_SCD_BASE + 0x020)
 
#define ALM_SCD_SBYP_MODE_1_REG   (ALM_SCD_BASE + 0x02C)
 
#define ALM_SCD_SBYP_MODE_2_REG   (ALM_SCD_BASE + 0x030)
 
#define SCD_WIN_SIZE   64
 
#define SCD_FRAME_LIMIT   64
 
#define IL49_SCD_START_OFFSET   0xa02c00
 
#define IL49_SCD_SRAM_BASE_ADDR   (IL49_SCD_START_OFFSET + 0x0)
 
#define IL49_SCD_EMPTY_BITS   (IL49_SCD_START_OFFSET + 0x4)
 
#define IL49_SCD_DRAM_BASE_ADDR   (IL49_SCD_START_OFFSET + 0x10)
 
#define IL49_SCD_TXFACT   (IL49_SCD_START_OFFSET + 0x1c)
 
#define IL49_SCD_QUEUE_WRPTR(x)   (IL49_SCD_START_OFFSET + 0x24 + (x) * 4)
 
#define IL49_SCD_QUEUE_RDPTR(x)   (IL49_SCD_START_OFFSET + 0x64 + (x) * 4)
 
#define IL49_SCD_QUEUECHAIN_SEL   (IL49_SCD_START_OFFSET + 0xd0)
 
#define IL49_SCD_INTERRUPT_MASK   (IL49_SCD_START_OFFSET + 0xe4)
 
#define IL49_SCD_QUEUE_STATUS_BITS(x)   (IL49_SCD_START_OFFSET + 0x104 + (x) * 4)
 
#define IL49_SCD_QUEUE_STTS_REG_POS_ACTIVE   (0)
 
#define IL49_SCD_QUEUE_STTS_REG_POS_TXF   (1)
 
#define IL49_SCD_QUEUE_STTS_REG_POS_WSL   (5)
 
#define IL49_SCD_QUEUE_STTS_REG_POS_SCD_ACK   (8)
 
#define IL49_SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN   (10)
 
#define IL49_SCD_QUEUE_STTS_REG_MSK   (0x0007FC00)
 
#define IL49_SCD_CONTEXT_DATA_OFFSET   0x380
 
#define IL49_SCD_CONTEXT_QUEUE_OFFSET(x)   (IL49_SCD_CONTEXT_DATA_OFFSET + ((x) * 8))
 
#define IL49_SCD_QUEUE_CTX_REG1_WIN_SIZE_POS   (0)
 
#define IL49_SCD_QUEUE_CTX_REG1_WIN_SIZE_MSK   (0x0000007F)
 
#define IL49_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS   (16)
 
#define IL49_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK   (0x007F0000)
 
#define IL49_SCD_TX_STTS_BITMAP_OFFSET   0x400
 
#define IL49_SCD_TRANSLATE_TBL_OFFSET   0x500
 
#define IL49_SCD_TRANSLATE_TBL_OFFSET_QUEUE(x)   ((IL49_SCD_TRANSLATE_TBL_OFFSET + ((x) * 2)) & 0xfffffffc)
 
#define IL_SCD_TXFIFO_POS_TID   (0)
 
#define IL_SCD_TXFIFO_POS_RA   (4)
 
#define IL_SCD_QUEUE_RA_TID_MAP_RATID_MSK   (0x01FF)
 

Macro Definition Documentation

#define ALM_SCD_ARASTAT_REG   (ALM_SCD_BASE + 0x004)

Definition at line 239 of file prph.h.

#define ALM_SCD_BASE   (PRPH_BASE + 0x2E00)

Definition at line 237 of file prph.h.

#define ALM_SCD_MODE_REG   (ALM_SCD_BASE + 0x000)

Definition at line 238 of file prph.h.

#define ALM_SCD_SBYP_MODE_1_REG   (ALM_SCD_BASE + 0x02C)

Definition at line 243 of file prph.h.

#define ALM_SCD_SBYP_MODE_2_REG   (ALM_SCD_BASE + 0x030)

Definition at line 244 of file prph.h.

#define ALM_SCD_TXF4MF_REG   (ALM_SCD_BASE + 0x014)

Definition at line 241 of file prph.h.

#define ALM_SCD_TXF5MF_REG   (ALM_SCD_BASE + 0x020)

Definition at line 242 of file prph.h.

#define ALM_SCD_TXFACT_REG   (ALM_SCD_BASE + 0x010)

Definition at line 240 of file prph.h.

#define APMG_ANALOG_SVR_REG   (APMG_BASE + 0x006C)

Definition at line 84 of file prph.h.

#define APMG_BASE   (PRPH_BASE + 0x3000)

Definition at line 74 of file prph.h.

#define APMG_CLK_CTRL_REG   (APMG_BASE + 0x0000)

Definition at line 75 of file prph.h.

#define APMG_CLK_DIS_REG   (APMG_BASE + 0x0008)

Definition at line 77 of file prph.h.

#define APMG_CLK_EN_REG   (APMG_BASE + 0x0004)

Definition at line 76 of file prph.h.

#define APMG_CLK_VAL_BSM_CLK_RQT   (0x00000800)

Definition at line 88 of file prph.h.

#define APMG_CLK_VAL_DMA_CLK_RQT   (0x00000200)

Definition at line 87 of file prph.h.

#define APMG_DIGITAL_SVR_REG   (APMG_BASE + 0x0058)

Definition at line 83 of file prph.h.

#define APMG_PCIDEV_STT_REG   (APMG_BASE + 0x0010)

Definition at line 79 of file prph.h.

#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS   (0x00000800)

Definition at line 99 of file prph.h.

#define APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS   (0x00400000)

Definition at line 90 of file prph.h.

#define APMG_PS_CTRL_MSK_PWR_SRC   (0x03000000)

Definition at line 92 of file prph.h.

#define APMG_PS_CTRL_REG   (APMG_BASE + 0x000c)

Definition at line 78 of file prph.h.

#define APMG_PS_CTRL_VAL_PWR_SRC_MAX   (0x01000000) /* 3945 only */

Definition at line 94 of file prph.h.

#define APMG_PS_CTRL_VAL_PWR_SRC_VAUX   (0x02000000)

Definition at line 95 of file prph.h.

#define APMG_PS_CTRL_VAL_PWR_SRC_VMAIN   (0x00000000)

Definition at line 93 of file prph.h.

#define APMG_PS_CTRL_VAL_RESET_REQ   (0x04000000)

Definition at line 91 of file prph.h.

#define APMG_RFKILL_REG   (APMG_BASE + 0x0014)

Definition at line 80 of file prph.h.

#define APMG_RTC_INT_MSK_REG   (APMG_BASE + 0x0020)

Definition at line 82 of file prph.h.

#define APMG_RTC_INT_STT_REG   (APMG_BASE + 0x001c)

Definition at line 81 of file prph.h.

#define APMG_SVR_DIGITAL_VOLTAGE_1_32   (0x00000060)

Definition at line 97 of file prph.h.

#define APMG_SVR_VOLTAGE_CONFIG_BIT_MSK   (0x000001E0) /* bit 8:5 */

Definition at line 96 of file prph.h.

#define APMS_CLK_VAL_MRB_FUNC_MODE   (0x00000001)

Definition at line 86 of file prph.h.

#define BSM_BASE   (PRPH_BASE + 0x3400)

Definition at line 210 of file prph.h.

#define BSM_DRAM_DATA_BYTECOUNT_REG   (BSM_BASE + 0x09C)

Definition at line 227 of file prph.h.

#define BSM_DRAM_DATA_PTR_REG   (BSM_BASE + 0x098)

Definition at line 226 of file prph.h.

#define BSM_DRAM_INST_BYTECOUNT_REG   (BSM_BASE + 0x094)

Definition at line 225 of file prph.h.

#define BSM_DRAM_INST_LOAD   (0x80000000) /* start program load now */

Definition at line 207 of file prph.h.

#define BSM_DRAM_INST_PTR_REG   (BSM_BASE + 0x090)

Definition at line 224 of file prph.h.

#define BSM_END   (PRPH_BASE + 0x3800)

Definition at line 211 of file prph.h.

#define BSM_SRAM_LOWER_BOUND   (PRPH_BASE + 0x3800)

Definition at line 233 of file prph.h.

#define BSM_SRAM_SIZE   (1024) /* bytes */

Definition at line 234 of file prph.h.

#define BSM_WR_CTRL_REG   (BSM_BASE + 0x000) /* ctl and status */

Definition at line 213 of file prph.h.

#define BSM_WR_CTRL_REG_BIT_START   (0x80000000) /* start boot load now */

BSM (Bootstrap State Machine)

The Bootstrap State Machine (BSM) stores a short bootstrap uCode program in special SRAM that does not power down when the embedded control processor is sleeping (e.g. for periodic power-saving shutdowns of radio).

When powering back up after sleeps (or during initial uCode load), the BSM internally loads the short bootstrap program from the special SRAM into the embedded processor's instruction SRAM, and starts the processor so it runs the bootstrap program.

This bootstrap program loads (via PCI busmaster DMA) instructions and data images for a uCode program from host DRAM locations. The host driver indicates DRAM locations and sizes for instruction and data images via the four BSM_DRAM_* registers. Once the bootstrap program loads the new program, the new program starts automatically.

The uCode used for open-source drivers includes two programs:

1) Initialization – performs hardware calibration and sets up some internal data, then notifies host via "initialize alive" notification (struct il_init_alive_resp) that it has completed all of its work. After signal from host, it then loads and starts the runtime program. The initialization program must be used when initially setting up the NIC after loading the driver.

2) Runtime/Protocol – performs all normal runtime operations. This notifies host via "alive" notification (struct il_alive_resp) that it is ready to be used.

When initializing the NIC, the host driver does the following procedure:

1) Load bootstrap program (instructions only, no data image for bootstrap) into bootstrap memory. Use dword writes starting at BSM_SRAM_LOWER_BOUND

2) Point (via BSM_DRAM_*) to the "initialize" uCode data and instruction images in host DRAM.

3) Set up BSM to copy from BSM SRAM into uCode instruction SRAM when asked: BSM_WR_MEM_SRC_REG = 0 BSM_WR_MEM_DST_REG = RTC_INST_LOWER_BOUND BSM_WR_MEM_DWCOUNT_REG = # dwords in bootstrap instruction image

4) Load bootstrap into instruction SRAM: BSM_WR_CTRL_REG = BSM_WR_CTRL_REG_BIT_START

5) Wait for load completion: Poll BSM_WR_CTRL_REG for BSM_WR_CTRL_REG_BIT_START = 0

6) Enable future boot loads whenever NIC's power management triggers it: BSM_WR_CTRL_REG = BSM_WR_CTRL_REG_BIT_START_EN

7) Start the NIC by removing all reset bits: CSR_RESET = 0

The bootstrap uCode (already in instruction SRAM) loads initialization uCode. Initialization uCode performs data initialization, sends "initialize alive" notification to host, and waits for a signal from host to load runtime code.

4) Point (via BSM_DRAM_*) to the "runtime" uCode data and instruction images in host DRAM. The last register loaded must be the instruction byte count register ("1" in MSbit tells initialization uCode to load the runtime uCode): BSM_DRAM_INST_BYTECOUNT_REG = byte count | BSM_DRAM_INST_LOAD

5) Wait for "alive" notification, then issue normal runtime commands.

Data caching during power-downs:

Just before the embedded controller powers down (e.g for automatic power-saving modes, or for RFKILL), uCode stores (via PCI busmaster DMA) a current snapshot of the embedded processor's data SRAM into host DRAM. This caches the data while the embedded processor's memory is powered down. Location and size are controlled by BSM_DRAM_DATA_* registers.

NOTE: Instruction SRAM does not need to be saved, since that doesn't change during operation; the original image (from uCode distribution file) can be used for reload.

When powering back up, the BSM loads the bootstrap program. Bootstrap looks at the BSM_DRAM_* registers, which now point to the runtime instruction image and the cached (modified) runtime data (not the initialization uCode). Bootstrap reloads these runtime images into SRAM, and restarts the uCode from where it left off before the power-down.

NOTE: Initialization uCode does not run as part of the save/restore procedure.

This save/restore method is mostly for autonomous power management during normal operation (result of C_POWER_TBL). Platform suspend/resume and RFKILL should use complete restarts (with total re-initialization) of uCode, allowing total shutdown (including BSM memory).

Note that, during normal operation, the host DRAM that held the initial startup data for the runtime code is now being used as a backup data cache for modified data! If you need to completely re-initialize the NIC, make sure that you use the runtime data image from the uCode distribution file, not the modified/saved runtime data. You may want to store a separate "clean" runtime data image in DRAM to avoid disk reads of distribution file.

Definition at line 205 of file prph.h.

#define BSM_WR_CTRL_REG_BIT_START_EN   (0x40000000) /* enable boot after pwrup */

Definition at line 206 of file prph.h.

#define BSM_WR_DWCOUNT_REG   (BSM_BASE + 0x00C) /* bytes */

Definition at line 216 of file prph.h.

#define BSM_WR_MEM_DST_REG   (BSM_BASE + 0x008) /* dest in SRAM mem */

Definition at line 215 of file prph.h.

#define BSM_WR_MEM_SRC_REG   (BSM_BASE + 0x004) /* source in BSM mem */

Definition at line 214 of file prph.h.

#define BSM_WR_STATUS_REG   (BSM_BASE + 0x010) /* bit 0: 1 == done */

Definition at line 217 of file prph.h.

#define IL49_SCD_CONTEXT_DATA_OFFSET   0x380

4965 internal SRAM structures for scheduler, shared with driver ...

Driver should clear and initialize the following areas after receiving "Alive" response from 4965 uCode, i.e. after initial uCode load, or after a uCode load done for error recovery:

SCD_CONTEXT_DATA_OFFSET (size 128 bytes) SCD_TX_STTS_BITMAP_OFFSET (size 256 bytes) SCD_TRANSLATE_TBL_OFFSET (size 32 bytes)

Driver accesses SRAM via HBUS_TARG_MEM_* registers. Driver reads base address of this scheduler area from SCD_SRAM_BASE_ADDR. All OFFSET values must be added to this base address.

Definition at line 472 of file prph.h.

#define IL49_SCD_CONTEXT_QUEUE_OFFSET (   x)    (IL49_SCD_CONTEXT_DATA_OFFSET + ((x) * 8))

Definition at line 473 of file prph.h.

#define IL49_SCD_DRAM_BASE_ADDR   (IL49_SCD_START_OFFSET + 0x10)

Definition at line 357 of file prph.h.

#define IL49_SCD_EMPTY_BITS   (IL49_SCD_START_OFFSET + 0x4)

Definition at line 345 of file prph.h.

#define IL49_SCD_INTERRUPT_MASK   (IL49_SCD_START_OFFSET + 0xe4)

Definition at line 404 of file prph.h.

#define IL49_SCD_QUEUE_CTX_REG1_WIN_SIZE_MSK   (0x0000007F)

Definition at line 477 of file prph.h.

#define IL49_SCD_QUEUE_CTX_REG1_WIN_SIZE_POS   (0)

Definition at line 476 of file prph.h.

#define IL49_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK   (0x007F0000)

Definition at line 479 of file prph.h.

#define IL49_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS   (16)

Definition at line 478 of file prph.h.

#define IL49_SCD_QUEUE_RDPTR (   x)    (IL49_SCD_START_OFFSET + 0x64 + (x) * 4)

Definition at line 382 of file prph.h.

#define IL49_SCD_QUEUE_STATUS_BITS (   x)    (IL49_SCD_START_OFFSET + 0x104 + (x) * 4)

Definition at line 425 of file prph.h.

#define IL49_SCD_QUEUE_STTS_REG_MSK   (0x0007FC00)

Definition at line 436 of file prph.h.

#define IL49_SCD_QUEUE_STTS_REG_POS_ACTIVE   (0)

Definition at line 429 of file prph.h.

#define IL49_SCD_QUEUE_STTS_REG_POS_SCD_ACK   (8)

Definition at line 432 of file prph.h.

#define IL49_SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN   (10)

Definition at line 435 of file prph.h.

#define IL49_SCD_QUEUE_STTS_REG_POS_TXF   (1)

Definition at line 430 of file prph.h.

#define IL49_SCD_QUEUE_STTS_REG_POS_WSL   (5)

Definition at line 431 of file prph.h.

#define IL49_SCD_QUEUE_WRPTR (   x)    (IL49_SCD_START_OFFSET + 0x24 + (x) * 4)

Definition at line 374 of file prph.h.

#define IL49_SCD_QUEUECHAIN_SEL   (IL49_SCD_START_OFFSET + 0xd0)

Definition at line 393 of file prph.h.

#define IL49_SCD_SRAM_BASE_ADDR   (IL49_SCD_START_OFFSET + 0x0)

Definition at line 334 of file prph.h.

#define IL49_SCD_START_OFFSET   0xa02c00

Definition at line 328 of file prph.h.

#define IL49_SCD_TRANSLATE_TBL_OFFSET   0x500

Definition at line 510 of file prph.h.

#define IL49_SCD_TRANSLATE_TBL_OFFSET_QUEUE (   x)    ((IL49_SCD_TRANSLATE_TBL_OFFSET + ((x) * 2)) & 0xfffffffc)

Definition at line 513 of file prph.h.

#define IL49_SCD_TX_STTS_BITMAP_OFFSET   0x400

Definition at line 488 of file prph.h.

#define IL49_SCD_TXFACT   (IL49_SCD_START_OFFSET + 0x1c)

Definition at line 366 of file prph.h.

#define IL_SCD_QUEUE_RA_TID_MAP_RATID_MSK   (0x01FF)

Definition at line 518 of file prph.h.

#define IL_SCD_TXFIFO_POS_RA   (4)

Definition at line 517 of file prph.h.

#define IL_SCD_TXFIFO_POS_TID   (0)

Definition at line 516 of file prph.h.

#define PRPH_BASE   (0x00000)

Definition at line 70 of file prph.h.

#define PRPH_END   (0xFFFFF)

Definition at line 71 of file prph.h.

#define SCD_FRAME_LIMIT   64

Definition at line 325 of file prph.h.

#define SCD_WIN_SIZE   64

Tx Scheduler

The Tx Scheduler selects the next frame to be transmitted, choosing TFDs (Transmit Frame Descriptors) from up to 16 circular Tx queues resident in host DRAM. It steers each frame's Tx command (which contains the frame data) into one of up to 7 prioritized Tx DMA FIFO channels within the device. A queue maps to only one (selectable by driver) Tx DMA channel, but one DMA channel may take input from several queues.

Tx DMA FIFOs have dedicated purposes. For 4965, they are used as follows (cf. default_queue_to_tx_fifo in 4965.c):

0 – EDCA BK (background) frames, lowest priority 1 – EDCA BE (best effort) frames, normal priority 2 – EDCA VI (video) frames, higher priority 3 – EDCA VO (voice) and management frames, highest priority 4 – Commands (e.g. RXON, etc.) 5 – unused (HCCA) 6 – unused (HCCA) 7 – not used by driver (device-internal only)

Driver should normally map queues 0-6 to Tx DMA/FIFO channels 0-6. In addition, driver can map the remaining queues to Tx DMA/FIFO channels 0-3 to support 11n aggregation via EDCA DMA channels.

The driver sets up each queue to work in one of two modes:

1) Scheduler-Ack, in which the scheduler automatically supports a block-ack (BA) win of up to 64 TFDs. In this mode, each queue contains TFDs for a unique combination of Recipient Address (RA) and Traffic Identifier (TID), that is, traffic of a given Quality-Of-Service (QOS) priority, destined for a single station.

In scheduler-ack mode, the scheduler keeps track of the Tx status of each frame within the BA win, including whether it's been transmitted, and whether it's been acknowledged by the receiving station. The device automatically processes block-acks received from the receiving STA, and reschedules un-acked frames to be retransmitted (successful Tx completion may end up being out-of-order).

The driver must maintain the queue's Byte Count table in host DRAM (struct il4965_sched_queue_byte_cnt_tbl) for this mode. This mode does not support fragmentation.

2) FIFO (a.k.a. non-Scheduler-ACK), in which each TFD is processed in order. The device may automatically retry Tx, but will retry only one frame at a time, until receiving ACK from receiving station, or reaching retry limit and giving up.

The command queue (#4/#9) must use this mode! This mode does not require use of the Byte Count table in host DRAM.

Driver controls scheduler operation via 3 means: 1) Scheduler registers 2) Shared scheduler data base in internal 4956 SRAM 3) Shared data in host DRAM

Initialization:

When loading, driver should allocate memory for: 1) 16 TFD circular buffers, each with space for (typically) 256 TFDs. 2) 16 Byte Count circular buffers in 16 KBytes contiguous memory (1024 bytes for each queue).

After receiving "Alive" response from uCode, driver must initialize the scheduler (especially for queue #4/#9, the command queue, otherwise the driver can't issue commands!): Max Tx win size is the max number of contiguous TFDs that the scheduler can keep track of at one time when creating block-ack chains of frames. Note that "64" matches the number of ack bits in a block-ack packet. Driver should use SCD_WIN_SIZE and SCD_FRAME_LIMIT values to initialize IL49_SCD_CONTEXT_QUEUE_OFFSET(x) values.

Definition at line 324 of file prph.h.