|
IBM made, for a while, a card called the IBM LAN Entry card. This card has made its way to the surpluss market and can be purchased cheaply (in the $25-$35 range) from surplus dealers. More information can be obtained from here. Drivers can be obtained from here. I recommend Kento for purchasing one of these cards. I've dealt with him any times and he's A-1. Also of interest is Anthony M Townsend's page. The cards have a part number of either 92G7787 or 13H5905 depending on where you look.
Since this is a cheap, wireless card, the desire has been strong to have drivers written for this card for FreeBSD, Windows NT, Linux and other operating systems. This document attempts to describe the register set and software interface to this card.
In this document, active low lines are represented with a trailing star (*). The Intel data sheets have them as an overbar, but I don't know how to do that in HTML. When quoting other documentes, I use elipsis (...) to indicate omitted material. Editorial or summary comments appear like this.
This is a work in progress. Please contribute what you can to it.
CPU --- PCMCIA BRDIGE --- PCMCIA BUS ---
CUSTOM ASIC CONTROLLER +-- Radio
|
+-- i593
BLOCK DIAGRAM
The ILE card consists of four basic parts. There is a custom ASIC on
the board, which controls the radio, ethernet chip, and memory access.
The second part is the memory of the card. It appears to be dual
ported memory rated at about 450ns. The ethernet chip is an intel
82593, with no apparent OEM modifications. The radio is built from
off the shelf FM radio hardware from Philips and operates in the
2.4GHz band.
| Offset | Name | Description |
|---|---|---|
| 0 | i593reg | Maps directly onto command port of Intel 82593 |
| 2 | dma_addr_0 | Offset in pccard for dma engine for dma channel 1 of the i593 |
| 4 | dma_addr_1 | Offset in pccard for dma engine for dma channel 2 of the i593 |
| 6 | unk_card_offset | DMA offset, or offset plus bits used to initialize the readio |
| 8 | radio_control | Radio status |
| a | radio_timer? | Timer? for next freq jump? |
| c | radio_param? | radio parameters??? |
| e | freq_tbl? | Frequency table register?? |
| 10 | radio_isr | Radio interrupt status registger |
| 12 | led? | Card LED control register? |
| 14 | card_isr | Card interrupt status register |
| Name | Description | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| i593reg |
The Intel 82593 has only one register. This is mapped into the
register space at offset 0. Only the lower 8 bits are valid. Port 0
and Port 1 of the i593's BIU are mapped to this address. See the
excerpts from the i593 datasheet below.
| ||||||||||||||||
| dma_addr_0 |
When DMA channel 0 of the i593 is to happen, the custom ASIC
will transfer the data to/from this address. The DMA here isn't
done over the PCMCIA bus, but rather is done with the ASIC to/from
the 32k of on board memory for the card. The value is the offset
from the beginning of this memory.
In the NDIS DOS driver, the macro UseDMA1Reg is used to load the offset of this register into %dx. | ||||||||||||||||
| dma_addr_1 |
When DMA channel 1 of the i593 is to happen, the custom ASIC
will transfer the data to/from this address. The DMA here isn't
done over the PCMCIA bus, but rather is done with the ASIC to/from
the 32k of on board memory for the card. The value is the offset
from the beginning of this memory.
In the NDIS DOS driver, the macro UseDMA2Reg is used to load the offset of this register into %dx. | ||||||||||||||||
| unk_card_offset |
Some unknown offset into the card. It is used twice in the ndis
driver. Once as a card diagnostics test, and once to pass the
offset of a block of memory, plus some other bits. It is 16-bits
wide.
%dx is loaded with UseDMA3?Reg in the ndis driver. | ||||||||||||||||
| radio_control |
When IntConfigDone IntMcSetupDone, this register is read, then
anded with 0xfdff, then rewritten.
During IntTransferDone, and what appears to be address matching code:
During IntStopSegHit or IntEndOfFrame:
During the recieve interrupt, it appears that we
Misc:
done through address 0x2000.
%dx is loaded with UseRadioStatReg in the ndis driver. | ||||||||||||||||
| radio_timer? |
%dx is loaded with UseRadioTimerReg? in the ndis driver. | ||||||||||||||||
| radio_param? |
%dx is loaded with UseRadioParameterReg? in the ndis driver. | ||||||||||||||||
| freq_tbl? |
%dx is loaded with UseRadioFreqReg in the ndis driver. | ||||||||||||||||
| radio_isr |
%dx is loaded with UseRadioIntReg in the ndis driver. | ||||||||||||||||
| led? |
%dx is loaded with UseLedReg in the ndis driver. | ||||||||||||||||
| card_isr |
%dx is loaded with UseCardIntMaskReg in the ndis driver. |
The BIU is composed of two I/O ports, Port 0 through which time-critical tasks and configurations are executed and Port 1, which is used for auxiliary commands. The 8-bit Port 0 command and statis registers are interfaced to the CPU via the data lines D0-D7. Operation and initialization commands such as TRANSMIT, RCV-ENABLE and CONFIGURE are issued to the 82593 via the Port 0 Command Register. The resultant status of these commands, as well as the states (Idle, Active, Ready, etc) of the 82593's RCV and EXEC units are contained in the Port 0 Status Registers.
Port 1 command and status registers are also 8 bits wide. The Port1 Command Register is used for additional commands such as POWER-DOWN and STOP-REG-UPDATET. The port 1 status registers, Status Bank 1, contain the values of the Bus Throttle Timer, the RCV Stop Register and the Power Down and Hi-Impedance status It appears that the Power Down and Hi-Z stuff isn't used on the ILE cards. At least the DOS NDIS driver never touches those values.
The DUI is compiosed of two separate DMA channels, Channel 0 and Channel 1. ... The DMA channels are 8 bits wide (configurable to 16 bits). The two DMA channels are independent of each other. Both channels can request DMA services simultaneously for operations such as transmission and reception.
Dedicated logic in the DIU enables back-to-back transmition and reception when configured to Continuous Mode. This means that continuous transmissions and receptions can be hanled by the 82593 without real time intervention of the CPU. In this mode, the DRQ and EOP* pins can be used to discriminate between successful and unsuccessful operations.
The Bus Timer Throttle controls the maximum amount of time the 82593 can actively hold the bus (via the DMA controller) during a DMA cycle... The NDIS DOS driver doesn't set this value at all, rather it allows it to remain the default.
The programmable parameters include:
The CSMS/CD unitis capableofrunning at speedsfrom dc to 20Mb/s for the S82593, and dc to 16Mb/s for the 82593SX.
The 82593 detects a collision when an active signal is driven on its CDT*/CLSN input. This signal is usually driven from the serial itnerface device ... It detects a carrier on the link when an active signal is driven on its CRS*/RENA input. The 82593 can be configured to filter active for at least 1 to 7 TXC periods before it is recognized.
When configured to its 82590 compatible mode, the 82593 FIFO length defaults to 32 bytes for both the RCV and XMT FIFO, and the FIFO threshold (the level where a DMA request is asserted or deasserted) is fixed at 16 bytes. In all other configurations, the FIFO length is 96 bytes, with the FIFO threshold programmable through configuration. The 82593 can also be configured to delay the start of transmission until the programmed XMT FIFO threshold has been reached.
Expansion of XMT FIFO to 96 bytes allows the 82593 to perform automatic transmissions from within the XMT FIFO when a collision occurs during transmission.
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Meaning |
|---|---|---|---|---|---|---|---|---|
| Int Ack | Pointer | CHNL | Opcode | |||||
| x | x | 0 | 0 | NOP | ||||
| x | x | 1 | 0 | SWT-TO-PORT-1 | ||||
| x | x | x | 1 | IA-CONFIG | ||||
| x | x | x | 2 | CONFIGURE | ||||
| x | x | x | 3 | MC-SETUP | ||||
| x | x | x | 4 | TRANSMIT | ||||
| x | x | x | 5 | TDR | ||||
| x | x | x | 6 | DUMP | ||||
| x | x | x | 7 | DIAGNOSE | ||||
| x | x | x | 8 | RCV-ENABLE | ||||
| x | x | x | 9 | TRANSMIT-NO-CRC | ||||
| x | x | x | 10 | RCV-DISABLE | ||||
| x | x | x | 11 | STOP-RCV | ||||
| x | x | x | 12 | RETRANSMIT | ||||
| x | x | x | 13 | ABORT | ||||
| x | x | x | 14 | RESET | ||||
| x | x | 0 | 15 | RLS-PTR | ||||
| x | x | 1 | 15 | FIX-PTR | ||||
| x | x | 0 | x | CHANNEL 0 | ||||
| x | x | 1 | x | CHANNEL 1 | ||||
| x | 0 | x | x | STATUS 0 | ||||
| x | 1 | x | x | STATUS 1 | ||||
| x | 2 | x | x | STATUS 2 | ||||
| x | 3 | x | x | STATUS 3 | ||||
| 0 | x | x | x | NO ACKNOWLEDGE | ||||
| 1 | x | x | x | ACKNOWLEDGE | ||||
| Figure 2. Port 0 Command Register | ||||||||
The 82593 can be configured to have 4 or 6 bytes of status registers in Port 0 (see Figures 5, 6, and 7). For the 4-byte status configuration, the first the registers (STATUS 0 through 2) contain the inforamtion about the last command executed, or the last frame received. The last stauts register, STATUS 3, contains the state of the 82593 Execution and Receive units. When the 82593 is configured to 6 bytes of status registers, the two additional bytes of status are used to report a more complete stauts of the most recently receieved frame, and also transmit chaining status (Continuous mode only).
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Meaning |
|---|---|---|---|---|---|---|---|---|
| Interrupt | Reception | Execution | CHNL | Event |   | |||
| x | x | x | x | 1 | IA-SETUP-DONE | |||
| x | x | x | x | 2 | CONFIGURE-DONE | |||
| x | x | x | x | 3 | MC-SETUP-DONE | |||
| x | x | x | x | 4 | TRANSMIT-DONE | |||
| x | x | x | x | 5 | TDR-DONE | |||
| x | x | x | x | 6 | DUMP-DONE | |||
| x | x | x | x | 7 | DIAGNOSE-PASSED | |||
| x | x | x | x | 8 | END-OF-FRAME | |||
| x | x | x | x | 9 | TRANSMIT-NO-CRC-DONE | |||
| x | x | x | x | 10 | RECEPTION-ABORTED | |||
| x | x | x | x | 11 | STOP-REG-HIT | |||
| x | x | x | x | 12 | RETRANSMIT-DONE | |||
| x | x | x | x | 13 | EXECUTION-ABORTED | |||
| x | x | x | x | 15 | DIAGNOSE-FAILED | |||
| Figure 4. Port 0 Events | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Name |
|---|---|---|---|---|---|---|---|---|
| INT | RCV | EXEC | CHNL | Event | STATUS 0 | |||
| Result 1 | STATUS 1 | |||||||
| Result 2 | STATUS 2 | |||||||
| RCV CHNL | RCV STATE | RCVING NO RSC | 0 | EXEC CHNL |
EXEC STATE | STATUS 3 | ||
| Figure 5. Port 0 Status Register: 4 Bytes | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Name |
|---|---|---|---|---|---|---|---|---|
| INT | RCV | EXEC | CHNL | Event | STATUS 0 | |||
| Result 1 | STATUS 1-0 | |||||||
| Result 2 | STATUS 1-1 | |||||||
| RCV BYTE COUNT(LOW)/FFh | STATUS 2-0 | |||||||
| RCV BYTE COUNT(HIGH)/FFh | STATUS 2-1 | |||||||
| RCV CHNL | RCV STATE | RCVING NO RSC | 0 | EXEC CHNL |
EXEC STATE | STATUS 3 | ||
| Figure 6. Port 0 Status Register: 6 Bytes, Noncontinuous Mode | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Name |
|---|---|---|---|---|---|---|---|---|
| INT | RCV | EXEC | CHNL | Event | STATUS 0 | |||
| Last XMT Result 1 | STATUS 1-0 | |||||||
| Last XMT Result 2 | STATUS 1-1 | |||||||
| RCV BYTE COUNT(LOW) | STATUS 2-0 | |||||||
| RCV BYTE COUNT(HIGH) | STATUS 2-1 | |||||||
| RCV CHNL | RCV STATE | RCVING NO RSC | STP ON NO RSC | EXEC CHNL |
EXEC STATE | STATUS 3 | ||
| Figure 7. Port 0 Status Register: 6 Bytes, Continuous Mode | ||||||||
The Port 1 status registers are called Status Bank 1. The three registers contained in Status Bank 1 are shown in Figure 11. Status Bank 1 holds the value of the Stop Register, the Bus Throttle Timer, and the power down and high impedance states.
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Meaning |
|---|---|---|---|---|---|---|---|---|
| CMD*/ STOP | Pointer | CHNL | Opcode |   | ||||
| 0 | x | 0 | 0 | NOP | ||||
| 0 | x | 0 | 1 | SWT-TO-PORT-0 | ||||
| 0 | x | 0 | 2 | INT-DISABLE | ||||
| 0 | x | 0 | 3 | INT-ENABLE | ||||
| 0 | x | 0 | 5 | SET-TS | ||||
| 0 | x | 0 | 7 | RST-TS | ||||
| 0 | x | 0 | 8 | POWER-DOWN | ||||
| 0 | x | 0 | 11 | RESET-RING-MNGMT | ||||
| 0 | x | 0 | 14 | RESET | ||||
| 0 | x | 0 | 15 | SEL-RST | ||||
| 0 | 0 | x | x | STATUS4 | ||||
| 0 | 1 | x | x | STATUS5 | ||||
| 0 | 2 | x | x | STATUS6 | ||||
| 1 | Stop Register Update Parameter | Update Stop Register | ||||||
| Figure 8. Port 1 Command Register | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Name |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | PWRDN | 0 | 0 | 0 | 0 | HI-Z | STATUS4 |
| 0 | Stop Register Value | STATUS5 | ||||||
| TC | Bus Throttle Timer Value | STATUS6 | ||||||
| Figure 11. Port 1 Status Register | ||||||||
Prior to issuing a parametric command to the 82593, the CPU creats a data structure in memory, and programs the external controller with the start address and byte count of the memory block. The ILE's ASIC is the CPU for the purposes of this paragraph. To initiate a parametric command, copy the data structure to the card memory. Then tell the ASIC which DMA channel to use. Issue the command to the '593. For commands that require no transfer of parameters to the 83593 ... the CPU issues the command to the device without creating a data structure in memory. The 82593 performs the command with no further involvement from the CPU. Any parameters or data assicauted with the command are transferred between the memory and the 82593 by the DMA controller eg the ASIC. Upon completion of the operation, the 82593 updates the appropriate status registers and asserts its INT line to the CPU The INT line is routed by the ASIC to the pcmcia bus's interrupt pin. The ASIC multiplexes the interupt with other radio events .
Following a successful transmission, the 82593 requests the command byte which follows the last data byte of a frame. EOP* is asserted druing this cycle, indicating a successful transmission. Assertion of EOP* in this mode can also be disabled.
If the command byte contains the TRANSMIT opcode, the 82593 will behave as if another TRANSMIT command has been issued by the CPU, and will attempt to trasmit the new frame as soon as deferring is completed. A NOP in the command byte indicates that the preceing frame was the last frame to be transmitted and no other frames follow.