diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-23 15:23:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-23 15:23:20 -0400 |
commit | 99dff5856220a02b8711f2e8746413ea6e53ccf6 (patch) | |
tree | d8bae7ccdf8f7ad5221b053bb74a6220df996b3a /Documentation | |
parent | bb74e8ca352eecefdc5c1a9ebab01f18aa2f6f3c (diff) | |
parent | d9a0fbfd7bc5d2c42f0fa9bcbdab62c4942d0388 (diff) |
Merge branch 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6
* 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (48 commits)
serial: 8250_pci: add support for Cronyx Omega PCI multiserial board.
tty/serial: Fix break handling for PORT_TEGRA
tty/serial: Add explicit PORT_TEGRA type
n_tracerouter and n_tracesink ldisc additions.
Intel PTI implementaiton of MIPI 1149.7.
Kernel documentation for the PTI feature.
export kernel call get_task_comm().
tty: Remove to support serial for S5P6442
pch_phub: Support new device ML7223
8250_pci: Add support for the Digi/IBM PCIe 2-port Adapter
ASoC: Update cx20442 for TTY API change
pch_uart: Support new device ML7223 IOH
parport: Use request_muxed_region for IT87 probe and lock
tty/serial: add support for Xilinx PS UART
n_gsm: Use print_hex_dump_bytes
drivers/tty/moxa.c: Put correct tty value
TTY: tty_io, annotate locking functions
TTY: serial_core, remove superfluous set_task_state
TTY: serial_core, remove invalid test
Char: moxa, fix locking in moxa_write
...
Fix up trivial conflicts in drivers/bluetooth/hci_ldisc.c and
drivers/tty/serial/Makefile.
I did the hci_ldisc thing as an evil merge, cleaning things up.
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/pti/pti_intel_mid.txt | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/Documentation/pti/pti_intel_mid.txt b/Documentation/pti/pti_intel_mid.txt new file mode 100644 index 000000000000..e7a5b6d1f7a9 --- /dev/null +++ b/Documentation/pti/pti_intel_mid.txt | |||
@@ -0,0 +1,99 @@ | |||
1 | The Intel MID PTI project is HW implemented in Intel Atom | ||
2 | system-on-a-chip designs based on the Parallel Trace | ||
3 | Interface for MIPI P1149.7 cJTAG standard. The kernel solution | ||
4 | for this platform involves the following files: | ||
5 | |||
6 | ./include/linux/pti.h | ||
7 | ./drivers/.../n_tracesink.h | ||
8 | ./drivers/.../n_tracerouter.c | ||
9 | ./drivers/.../n_tracesink.c | ||
10 | ./drivers/.../pti.c | ||
11 | |||
12 | pti.c is the driver that enables various debugging features | ||
13 | popular on platforms from certain mobile manufacturers. | ||
14 | n_tracerouter.c and n_tracesink.c allow extra system information to | ||
15 | be collected and routed to the pti driver, such as trace | ||
16 | debugging data from a modem. Although n_tracerouter | ||
17 | and n_tracesink are a part of the complete PTI solution, | ||
18 | these two line disciplines can work separately from | ||
19 | pti.c and route any data stream from one /dev/tty node | ||
20 | to another /dev/tty node via kernel-space. This provides | ||
21 | a stable, reliable connection that will not break unless | ||
22 | the user-space application shuts down (plus avoids | ||
23 | kernel->user->kernel context switch overheads of routing | ||
24 | data). | ||
25 | |||
26 | An example debugging usage for this driver system: | ||
27 | *Hook /dev/ttyPTI0 to syslogd. Opening this port will also start | ||
28 | a console device to further capture debugging messages to PTI. | ||
29 | *Hook /dev/ttyPTI1 to modem debugging data to write to PTI HW. | ||
30 | This is where n_tracerouter and n_tracesink are used. | ||
31 | *Hook /dev/pti to a user-level debugging application for writing | ||
32 | to PTI HW. | ||
33 | *Use mipi_* Kernel Driver API in other device drivers for | ||
34 | debugging to PTI by first requesting a PTI write address via | ||
35 | mipi_request_masterchannel(1). | ||
36 | |||
37 | Below is example pseudo-code on how a 'privileged' application | ||
38 | can hook up n_tracerouter and n_tracesink to any tty on | ||
39 | a system. 'Privileged' means the application has enough | ||
40 | privileges to successfully manipulate the ldisc drivers | ||
41 | but is not just blindly executing as 'root'. Keep in mind | ||
42 | the use of ioctl(,TIOCSETD,) is not specific to the n_tracerouter | ||
43 | and n_tracesink line discpline drivers but is a generic | ||
44 | operation for a program to use a line discpline driver | ||
45 | on a tty port other than the default n_tty. | ||
46 | |||
47 | /////////// To hook up n_tracerouter and n_tracesink ///////// | ||
48 | |||
49 | // Note that n_tracerouter depends on n_tracesink. | ||
50 | #include <errno.h> | ||
51 | #define ONE_TTY "/dev/ttyOne" | ||
52 | #define TWO_TTY "/dev/ttyTwo" | ||
53 | |||
54 | // needed global to hand onto ldisc connection | ||
55 | static int g_fd_source = -1; | ||
56 | static int g_fd_sink = -1; | ||
57 | |||
58 | // these two vars used to grab LDISC values from loaded ldisc drivers | ||
59 | // in OS. Look at /proc/tty/ldiscs to get the right numbers from | ||
60 | // the ldiscs loaded in the system. | ||
61 | int source_ldisc_num, sink_ldisc_num = -1; | ||
62 | int retval; | ||
63 | |||
64 | g_fd_source = open(ONE_TTY, O_RDWR); // must be R/W | ||
65 | g_fd_sink = open(TWO_TTY, O_RDWR); // must be R/W | ||
66 | |||
67 | if (g_fd_source <= 0) || (g_fd_sink <= 0) { | ||
68 | // doubt you'll want to use these exact error lines of code | ||
69 | printf("Error on open(). errno: %d\n",errno); | ||
70 | return errno; | ||
71 | } | ||
72 | |||
73 | retval = ioctl(g_fd_sink, TIOCSETD, &sink_ldisc_num); | ||
74 | if (retval < 0) { | ||
75 | printf("Error on ioctl(). errno: %d\n", errno); | ||
76 | return errno; | ||
77 | } | ||
78 | |||
79 | retval = ioctl(g_fd_source, TIOCSETD, &source_ldisc_num); | ||
80 | if (retval < 0) { | ||
81 | printf("Error on ioctl(). errno: %d\n", errno); | ||
82 | return errno; | ||
83 | } | ||
84 | |||
85 | /////////// To disconnect n_tracerouter and n_tracesink //////// | ||
86 | |||
87 | // First make sure data through the ldiscs has stopped. | ||
88 | |||
89 | // Second, disconnect ldiscs. This provides a | ||
90 | // little cleaner shutdown on tty stack. | ||
91 | sink_ldisc_num = 0; | ||
92 | source_ldisc_num = 0; | ||
93 | ioctl(g_fd_uart, TIOCSETD, &sink_ldisc_num); | ||
94 | ioctl(g_fd_gadget, TIOCSETD, &source_ldisc_num); | ||
95 | |||
96 | // Three, program closes connection, and cleanup: | ||
97 | close(g_fd_uart); | ||
98 | close(g_fd_gadget); | ||
99 | g_fd_uart = g_fd_gadget = NULL; | ||