Copyright (C) ST-Ericsson AB 2010
Author: Sjur Brendeland/ sjur.brandeland@stericsson.com
License terms: GNU General Public License (GPL) version 2
---------------------------------------------------------

=== Start ===
If you have compiled CAIF for modules do:

$modprobe crc_ccitt
$modprobe caif
$modprobe caif_socket
$modprobe chnl_net


=== Preparing the setup with a STE modem ===

If you are working on integration of CAIF you should make sure
that the kernel is built with module support.

There are some things that need to be tweaked to get the host TTY correctly
set up to talk to the modem.
Since the CAIF stack is running in the kernel and we want to use the existing
TTY, we are installing our physical serial driver as a line discipline above
the TTY device.

To achieve this we need to install the N_CAIF ldisc from user space.
The benefit is that we can hook up to any TTY.

The use of Start-of-frame-extension (STX) must also be set as
module parameter "ser_use_stx".

Normally Frame Checksum is always used on UART, but this is also provided as a
module parameter "ser_use_fcs".

$ modprobe caif_serial ser_ttyname=/dev/ttyS0 ser_use_stx=yes
$ ifconfig caif_ttyS0 up

PLEASE NOTE: 	There is a limitation in Android shell.
		It only accepts one argument to insmod/modprobe!

=== Trouble shooting ===

There are debugfs parameters provided for serial communication.
/sys/kernel/debug/caif_serial/<tty-name>/

* ser_state:   Prints the bit-mask status where
  - 0x02 means SENDING, this is a transient state.
  - 0x10 means FLOW_OFF_SENT, i.e. the previous frame has not been sent
	and is blocking further send operation. Flow OFF has been propagated
	to all CAIF Channels using this TTY.

* tty_status: Prints the bit-mask tty status information
  - 0x01 - tty->warned is on.
  - 0x02 - tty->low_latency is on.
  - 0x04 - tty->packed is on.
  - 0x08 - tty->flow_stopped is on.
  - 0x10 - tty->hw_stopped is on.
  - 0x20 - tty->stopped is on.

* last_tx_msg: Binary blob Prints the last transmitted frame.
	This can be printed with
	$od --format=x1 /sys/kernel/debug/caif_serial/<tty>/last_rx_msg.
	The first two tx messages sent look like this. Note: The initial
	byte 02 is start of frame extension (STX) used for re-syncing
	upon errors.

  - Enumeration:
        0000000  02 05 00 00 03 01 d2 02
                 |  |     |  |  |  |
                 STX(1)   |  |  |  |
                    Length(2)|  |  |
                          Control Channel(1)
                             Command:Enumeration(1)
                                Link-ID(1)
                                    Checksum(2)
  - Channel Setup:
        0000000  02 07 00 00 00 21 a1 00 48 df
                 |  |     |  |  |  |  |  |
                 STX(1)   |  |  |  |  |  |
                    Length(2)|  |  |  |  |
                          Control Channel(1)
                             Command:Channel Setup(1)
                                Channel Type(1)
                                    Priority and Link-ID(1)
				      Endpoint(1)
					  Checksum(2)

* last_rx_msg: Prints the last transmitted frame.
	The RX messages for LinkSetup look almost identical but they have the
	bit 0x20 set in the command bit, and Channel Setup has added one byte
	before Checksum containing Channel ID.
	NOTE: Several CAIF Messages might be concatenated. The maximum debug
	buffer size is 128 bytes.

== Error Scenarios:
- last_tx_msg contains channel setup message and last_rx_msg is empty ->
  The host seems to be able to send over the UART, at least the CAIF ldisc get
  notified that sending is completed.

- last_tx_msg contains enumeration message and last_rx_msg is empty ->
  The host is not able to send the message from UART, the tty has not been
  able to complete the transmit operation.

- if /sys/kernel/debug/caif_serial/<tty>/tty_status is non-zero there
  might be problems transmitting over UART.
  E.g. host and modem wiring is not correct you will typically see
  tty_status = 0x10 (hw_stopped) and ser_state = 0x10 (FLOW_OFF_SENT).
  You will probably see the enumeration message in last_tx_message
  and empty last_rx_message.
