.. SPDX-License-Identifier: GPL-2.0

========================
ATM cxacru device driver
========================

Firmware is required for this device: http://accessrunner.sourceforge.net/

While it is capable of managing/maintaining the ADSL connection without the
module loaded, the device will sometimes stop responding after unloading the
driver and it is necessary to unplug/remove power to the device to fix this.

Note: support for cxacru-cf.bin has been removed. It was not loaded correctly
so it had no effect on the device configuration. Fixing it could have stopped
existing devices working when an invalid configuration is supplied.

There is a script cxacru-cf.py to convert an existing file to the sysfs form.

Detected devices will appear as ATM devices named "cxacru". In /sys/class/atm/
these are directories named cxacruN where N is the device number. A symlink
named device points to the USB interface device's directory which contains
several sysfs attribute files for retrieving device statistics:

* adsl_controller_version

* adsl_headend
* adsl_headend_environment

	- Information about the remote headend.

* adsl_config

	- Configuration writing interface.
	- Write parameters in hexadecimal format <index>=<value>,
	  separated by whitespace, e.g.:

		"1=0 a=5"

	- Up to 7 parameters at a time will be sent and the modem will restart
	  the ADSL connection when any value is set. These are logged for future
	  reference.

* downstream_attenuation (dB)
* downstream_bits_per_frame
* downstream_rate (kbps)
* downstream_snr_margin (dB)

	- Downstream stats.

* upstream_attenuation (dB)
* upstream_bits_per_frame
* upstream_rate (kbps)
* upstream_snr_margin (dB)
* transmitter_power (dBm/Hz)

	- Upstream stats.

* downstream_crc_errors
* downstream_fec_errors
* downstream_hec_errors
* upstream_crc_errors
* upstream_fec_errors
* upstream_hec_errors

	- Error counts.

* line_startable

	- Indicates that ADSL support on the device
	  is/can be enabled, see adsl_start.

* line_status

	 - "initialising"
	 - "down"
	 - "attempting to activate"
	 - "training"
	 - "channel analysis"
	 - "exchange"
	 - "waiting"
	 - "up"

	Changes between "down" and "attempting to activate"
	if there is no signal.

* link_status

	 - "not connected"
	 - "connected"
	 - "lost"

* mac_address

* modulation

	 - "" (when not connected)
	 - "ANSI T1.413"
	 - "ITU-T G.992.1 (G.DMT)"
	 - "ITU-T G.992.2 (G.LITE)"

* startup_attempts

	- Count of total attempts to initialise ADSL.

To enable/disable ADSL, the following can be written to the adsl_state file:

	 - "start"
	 - "stop
	 - "restart" (stops, waits 1.5s, then starts)
	 - "poll" (used to resume status polling if it was disabled due to failure)

Changes in adsl/line state are reported via kernel log messages::

	[4942145.150704] ATM dev 0: ADSL state: running
	[4942243.663766] ATM dev 0: ADSL line: down
	[4942249.665075] ATM dev 0: ADSL line: attempting to activate
	[4942253.654954] ATM dev 0: ADSL line: training
	[4942255.666387] ATM dev 0: ADSL line: channel analysis
	[4942259.656262] ATM dev 0: ADSL line: exchange
	[2635357.696901] ATM dev 0: ADSL line: up (8128 kb/s down | 832 kb/s up)