History

Merge branch 'depends/tty-omap-serial' into next/cleanup

This part of the tty tree (unfortunately with all the preceding patches as well) is a dependency for some of the OMAP cleanups, so we've pulled it in as a dependency based on agreement with Greg.

Olof Johansson committed 14 years ago

Commit a73403d2 parents e640ca0 cdd86b2169 files · +6347 −8838Browse files

Unified · Split

169 files
  1. Documentation/ABI/testing/sysfs-tty +9 −0
  2. Documentation/devicetree/bindings/tty/serial/nxp-lpc32xx-hsuart.txt +14 −0
  3. Documentation/devicetree/bindings/tty/serial/of-serial.txt +2 −0
  4. Documentation/serial/00-INDEX +0 −2
  5. Documentation/serial/computone.txt +0 −520
  6. arch/alpha/kernel/srmcons.c +1 −0
  7. arch/arm/mach-omap2/serial.c +12 −6
  8. arch/arm/mach-ux500/board-mop500.c +0 −21
  9. arch/arm/plat-omap/include/plat/omap-serial.h +9 −41
  10. arch/ia64/hp/sim/simserial.c +2 −1
  11. arch/m68k/emu/nfcon.c +4 −0
  12. arch/mips/cavium-octeon/serial.c +15 −15
  13. arch/mips/sni/a20r.c +32 −0
  14. arch/parisc/kernel/pdc_cons.c +1 −0
  15. arch/um/drivers/line.c +2 −1
  16. arch/xtensa/platforms/iss/console.c +1 −0
  17. drivers/bluetooth/hci_ath.c +1 −1
  18. drivers/char/mwave/mwavedd.c +8 −8
  19. drivers/char/pcmcia/synclink_cs.c +60 −71
  20. drivers/char/ttyprintk.c +13 −20
  21. drivers/isdn/capi/capi.c +2 −1
  22. drivers/isdn/gigaset/interface.c +4 −3
  23. drivers/isdn/i4l/isdn_tty.c +24 −17
  24. drivers/misc/ibmasm/uart.c +8 −8
  25. drivers/misc/pti.c +59 −69
  26. drivers/mmc/card/sdio_uart.c +12 −12
  27. drivers/net/ethernet/sgi/ioc3-eth.c +12 −10
  28. drivers/net/irda/irtty-sir.c +5 −5
  29. drivers/net/usb/hso.c +9 −10
  30. drivers/parport/parport_gsc.c +1 −0
  31. drivers/parport/parport_serial.c +10 −1
  32. drivers/s390/char/con3215.c +22 −6
  33. drivers/s390/char/sclp_tty.c +1 −0
  34. drivers/s390/char/sclp_vt220.c +1 −0
  35. drivers/s390/char/tty3270.c +24 −10
  36. drivers/staging/ipack/devices/ipoctal.c +7 −7
  37. drivers/staging/serqt_usb2/serqt_usb2.c +8 −10
  38. drivers/staging/speakup/serialio.h +1 −2
  39. drivers/tty/amiserial.c +23 −22
  40. drivers/tty/bfin_jtag_comm.c +1 −0
  41. drivers/tty/cyclades.c +52 −50
  42. drivers/tty/ehv_bytechan.c +5 −4
  43. drivers/tty/hvc/hvc_console.c +25 −6
  44. drivers/tty/hvc/hvcs.c +49 −33
  45. drivers/tty/hvc/hvsi.c +2 −0
  46. drivers/tty/hvc/hvsi_lib.c +1 −1
  47. drivers/tty/ipwireless/tty.c +1 −1
  48. drivers/tty/isicom.c +7 −6
  49. drivers/tty/moxa.c +28 −11
  50. drivers/tty/mxser.c +46 −17
  51. drivers/tty/n_gsm.c +86 −56
  52. drivers/tty/n_r3964.c +5 −5
  53. drivers/tty/n_tty.c +24 −5
  54. drivers/tty/nozomi.c +2 −2
  55. drivers/tty/pty.c +122 −112
  56. drivers/tty/rocket.c +11 −11
  57. drivers/tty/serial/68328serial.c +13 −10
  58. drivers/tty/serial/8250/8250.c +33 −51
  59. drivers/tty/serial/8250/8250.h +1 −33
  60. drivers/tty/serial/8250/8250_acorn.c +11 −11
  61. drivers/tty/serial/8250/8250_dw.c +19 −19
  62. drivers/tty/serial/8250/8250_gsc.c +13 −13
  63. drivers/tty/serial/8250/8250_hp300.c +13 −13
  64. drivers/tty/serial/8250/8250_pci.c +139 −66
  65. drivers/tty/serial/8250/8250_pnp.c +14 −14
  66. drivers/tty/serial/8250/serial_cs.c +15 −15
  67. drivers/tty/serial/Kconfig +47 −3
  68. drivers/tty/serial/Makefile +3 −1
  69. drivers/tty/serial/altera_uart.c +3 −3
  70. drivers/tty/serial/amba-pl010.c +4 −11
  71. drivers/tty/serial/amba-pl011.c +57 −32
  72. drivers/tty/serial/bfin_uart.c +1 −1
  73. drivers/tty/serial/crisv10.c +24 −21
  74. drivers/tty/serial/ifx6x60.c +2 −2
  75. drivers/tty/serial/imx.c +4 −1
  76. drivers/tty/serial/ioc3_serial.c +2 −1
  77. drivers/tty/serial/ioc4_serial.c +3 −2
  78. drivers/tty/serial/jsm/jsm_tty.c +4 −4
  79. drivers/tty/serial/lpc32xx_hs.c +823 −0
  80. drivers/tty/serial/m32r_sio.c +2 −34
  81. drivers/tty/serial/max3100.c +1 −11
  82. drivers/tty/serial/max3107.c +0 −1215
  83. drivers/tty/serial/max3107.h +0 −441
  84. drivers/tty/serial/max310x.c +1260 −0
  85. drivers/tty/serial/mpc52xx_uart.c +6 −2
  86. drivers/tty/serial/msm_serial.c +1 −1
  87. drivers/tty/serial/msm_smd_tty.c +5 −3
  88. drivers/tty/serial/mxs-auart.c +4 −3
  89. drivers/tty/serial/of_serial.c +12 −1
  90. drivers/tty/serial/omap-serial.c +363 −497
  91. drivers/tty/serial/pch_uart.c +4 −0
  92. drivers/tty/serial/pxa.c +14 −0
  93. drivers/tty/serial/samsung.c +25 −21
  94. drivers/tty/serial/sc26xx.c +4 −0
  95. drivers/tty/serial/sccnxp.c +985 −0
  96. drivers/tty/serial/serial_core.c +135 −88
  97. drivers/tty/serial/sirfsoc_uart.c +2 −6
  98. drivers/tty/serial/sunsu.c +7 −1
  99. drivers/tty/synclink.c +47 −39
  100. drivers/tty/synclink_gt.c +20 −17
  101. drivers/tty/synclinkmp.c +34 −24
  102. drivers/tty/tty_io.c +250 −125
  103. drivers/tty/tty_ioctl.c +50 −50
  104. drivers/tty/tty_ldisc.c +44 −34
  105. drivers/tty/tty_mutex.c +56 −15
  106. drivers/tty/tty_port.c +88 −6
  107. drivers/tty/vt/keyboard.c +26 −24
  108. drivers/tty/vt/vt.c +54 −87
  109. drivers/usb/class/cdc-acm.c +3 −2
  110. drivers/usb/gadget/u_serial.c +2 −1
  111. drivers/usb/serial/ark3116.c +2 −2
  112. drivers/usb/serial/belkin_sa.c +1 −1
  113. drivers/usb/serial/console.c +2 −2
  114. drivers/usb/serial/cp210x.c +4 −4
  115. drivers/usb/serial/cypress_m8.c +20 −20
  116. drivers/usb/serial/digi_acceleport.c +7 −7
  117. drivers/usb/serial/empeg.c +1 −1
  118. drivers/usb/serial/f81232.c +2 −1
  119. drivers/usb/serial/ftdi_sio.c +1 −1
  120. drivers/usb/serial/io_edgeport.c +6 −6
  121. drivers/usb/serial/io_ti.c +6 −6
  122. drivers/usb/serial/ir-usb.c +1 −1
  123. drivers/usb/serial/iuu_phoenix.c +14 −14
  124. drivers/usb/serial/keyspan.c +3 −3
  125. drivers/usb/serial/keyspan_pda.c +2 −2
  126. drivers/usb/serial/kl5kusb105.c +9 −9
  127. drivers/usb/serial/kobil_sct.c +7 −7
  128. drivers/usb/serial/mct_u232.c +2 −2
  129. drivers/usb/serial/metro-usb.c +0 −6
  130. drivers/usb/serial/mos7720.c +7 −7
  131. drivers/usb/serial/mos7840.c +6 −6
  132. drivers/usb/serial/oti6858.c +5 −5
  133. drivers/usb/serial/pl2303.c +3 −3
  134. drivers/usb/serial/quatech2.c +2 −2
  135. drivers/usb/serial/sierra.c +1 −1
  136. drivers/usb/serial/spcp8x5.c +6 −6
  137. drivers/usb/serial/ssu100.c +2 −2
  138. drivers/usb/serial/ti_usb_3410_5052.c +5 −5
  139. drivers/usb/serial/usb-serial.c +3 −4
  140. drivers/usb/serial/usb_wwan.c +1 −1
  141. drivers/usb/serial/whiteheat.c +1 −1
  142. firmware/Makefile +0 −1
  143. firmware/intelliport2.bin.ihex +0 −2147
  144. include/linux/Kbuild +1 −3
  145. include/linux/amba/serial.h +0 −1
  146. include/linux/cd1400.h +0 −292
  147. include/linux/cdk.h +0 −486
  148. include/linux/comstats.h +0 −119
  149. include/linux/generic_serial.h +0 −35
  150. include/linux/istallion.h +0 −123
  151. include/linux/kbd_kern.h +0 −13
  152. include/linux/platform_data/max310x.h +67 −0
  153. include/linux/platform_data/sccnxp.h +93 −0
  154. include/linux/sc26198.h +0 −533
  155. include/linux/serial.h +3 −78
  156. include/linux/serial167.h +0 −157
  157. include/linux/serial_8250.h +30 −3
  158. include/linux/serial_core.h +2 −2
  159. include/linux/serial_reg.h +4 −0
  160. include/linux/stallion.h +0 −147
  161. include/linux/tty.h +59 −33
  162. include/linux/tty_driver.h +34 −13
  163. include/linux/tty_flags.h +78 −0
  164. include/net/irda/ircomm_tty.h +1 −16
  165. net/bluetooth/rfcomm/tty.c +5 −5
  166. net/irda/ircomm/ircomm_param.c +0 −5
  167. net/irda/ircomm/ircomm_tty.c +154 −166
  168. net/irda/ircomm/ircomm_tty_attach.c +29 −11
  169. net/irda/ircomm/ircomm_tty_ioctl.c +17 −16
Documentation/ABI/testing/sysfs-tty+9−0
@@ -17,3 +17,12 @@ Description: · 16 unmodified lines
1717 device, like 'tty1'.
1818 The file supports poll() to detect virtual
1919 console switches.
20+
21+What: /sys/class/tty/ttyS0/uartclk
22+Date: Sep 2012
23+Contact: Tomas Hlavacek <tmshlvck@gmail.com>
24+Description:
25+ Shows the current uartclk value associated with the
26+ UART port in serial_core, that is bound to TTY like ttyS0.
27+ uartclk = 16 * baud_base
28+
Documentation/devicetree/bindings/tty/serial/nxp-lpc32xx-hsuart.txt+14−0
@@ -0,0 +1,14 @@
1+* NXP LPC32xx SoC High Speed UART
2+
3+Required properties:
4+- compatible: Should be "nxp,lpc3220-hsuart"
5+- reg: Should contain registers location and length
6+- interrupts: Should contain interrupt
7+
8+Example:
9+
10+ uart1: serial@40014000 {
11+ compatible = "nxp,lpc3220-hsuart";
12+ reg = <0x40014000 0x1000>;
13+ interrupts = <26 0>;
14+ };
Documentation/devicetree/bindings/tty/serial/of-serial.txt+2−0
@@ -25,6 +25,8 @@ Optional properties: · 24 unmodified lines
2525 accesses to the UART (e.g. TI davinci).
2626 - used-by-rtas : set to indicate that the port is in use by the OpenFirmware
2727 RTAS and should not be registered.
28+- no-loopback-test: set to indicate that the port does not implements loopback
29+ test mode
2830
2931 Example:
3032
Documentation/serial/00-INDEX+0−2
@@ -2,8 +2,6 @@ · 1 unmodified line
22 - this file.
33 README.cycladesZ
44 - info on Cyclades-Z firmware loading.
5−computone.txt
6− - info on Computone Intelliport II/Plus Multiport Serial Driver.
75 digiepca.txt
86 - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
97 hayes-esp.txt
Documentation/serial/computone.txt+0−520
@@ -1,520 +0,0 @@
1−NOTE: This is an unmaintained driver. It is not guaranteed to work due to
2−changes made in the tty layer in 2.6. If you wish to take over maintenance of
3−this driver, contact Michael Warfield <mhw@wittsend.com>.
4−
5−Changelog:
6−----------
7−11-01-2001: Original Document
8−
9−10-29-2004: Minor misspelling & format fix, update status of driver.
10− James Nelson <james4765@gmail.com>
11−
12−Computone Intelliport II/Plus Multiport Serial Driver
13−-----------------------------------------------------
14−
15−Release Notes For Linux Kernel 2.2 and higher.
16−These notes are for the drivers which have already been integrated into the
17−kernel and have been tested on Linux kernels 2.0, 2.2, 2.3, and 2.4.
18−
19−Version: 1.2.14
20−Date: 11/01/2001
21−Historical Author: Andrew Manison <amanison@america.net>
22−Primary Author: Doug McNash
23−
24−This file assumes that you are using the Computone drivers which are
25−integrated into the kernel sources. For updating the drivers or installing
26−drivers into kernels which do not already have Computone drivers, please
27−refer to the instructions in the README.computone file in the driver patch.
28−
29−
30−1. INTRODUCTION
31−
32−This driver supports the entire family of Intelliport II/Plus controllers
33−with the exception of the MicroChannel controllers. It does not support
34−products previous to the Intelliport II.
35−
36−This driver was developed on the v2.0.x Linux tree and has been tested up
37−to v2.4.14; it will probably not work with earlier v1.X kernels,.
38−
39−
40−2. QUICK INSTALLATION
41−
42−Hardware - If you have an ISA card, find a free interrupt and io port.
43− List those in use with `cat /proc/interrupts` and
44− `cat /proc/ioports`. Set the card dip switches to a free
45− address. You may need to configure your BIOS to reserve an
46− irq for an ISA card. PCI and EISA parameters are set
47− automagically. Insert card into computer with the power off
48− before or after drivers installation.
49−
50− Note the hardware address from the Computone ISA cards installed into
51− the system. These are required for editing ip2.c or editing
52− /etc/modprobe.d/*.conf, or for specification on the modprobe
53− command line.
54−
55− Note that the /etc/modules.conf should be used for older (pre-2.6)
56− kernels.
57−
58−Software -
59−
60−Module installation:
61−
62−a) Determine free irq/address to use if any (configure BIOS if need be)
63−b) Run "make config" or "make menuconfig" or "make xconfig"
64− Select (m) module for CONFIG_COMPUTONE under character
65− devices. CONFIG_PCI and CONFIG_MODULES also may need to be set.
66−c) Set address on ISA cards then:
67− edit /usr/src/linux/drivers/char/ip2.c if needed
68− or
69− edit config file in /etc/modprobe.d/ if needed (module).
70− or both to match this setting.
71−d) Run "make modules"
72−e) Run "make modules_install"
73−f) Run "/sbin/depmod -a"
74−g) install driver using `modprobe ip2 <options>` (options listed below)
75−h) run ip2mkdev (either the script below or the binary version)
76−
77−
78−Kernel installation:
79−
80−a) Determine free irq/address to use if any (configure BIOS if need be)
81−b) Run "make config" or "make menuconfig" or "make xconfig"
82− Select (y) kernel for CONFIG_COMPUTONE under character
83− devices. CONFIG_PCI may need to be set if you have PCI bus.
84−c) Set address on ISA cards then:
85− edit /usr/src/linux/drivers/char/ip2.c
86− (Optional - may be specified on kernel command line now)
87−d) Run "make zImage" or whatever target you prefer.
88−e) mv /usr/src/linux/arch/x86/boot/zImage to /boot.
89−f) Add new config for this kernel into /etc/lilo.conf, run "lilo"
90− or copy to a floppy disk and boot from that floppy disk.
91−g) Reboot using this kernel
92−h) run ip2mkdev (either the script below or the binary version)
93−
94−Kernel command line options:
95−
96−When compiling the driver into the kernel, io and irq may be
97−compiled into the driver by editing ip2.c and setting the values for
98−io and irq in the appropriate array. An alternative is to specify
99−a command line parameter to the kernel at boot up.
100−
101− ip2=io0,irq0,io1,irq1,io2,irq2,io3,irq3
102−
103−Note that this order is very different from the specifications for the
104−modload parameters which have separate IRQ and IO specifiers.
105−
106−The io port also selects PCI (1) and EISA (2) boards.
107−
108− io=0 No board
109− io=1 PCI board
110− io=2 EISA board
111− else ISA board io address
112−
113−You only need to specify the boards which are present.
114−
115− Examples:
116−
117− 2 PCI boards:
118−
119− ip2=1,0,1,0
120−
121− 1 ISA board at 0x310 irq 5:
122−
123− ip2=0x310,5
124−
125−This can be added to and "append" option in lilo.conf similar to this:
126−
127− append="ip2=1,0,1,0"
128−
129−
130−3. INSTALLATION
131−
132−Previously, the driver sources were packaged with a set of patch files
133−to update the character drivers' makefile and configuration file, and other
134−kernel source files. A build script (ip2build) was included which applies
135−the patches if needed, and build any utilities needed.
136−What you receive may be a single patch file in conventional kernel
137−patch format build script. That form can also be applied by
138−running patch -p1 < ThePatchFile. Otherwise run ip2build.
139−
140−The driver can be installed as a module (recommended) or built into the
141−kernel. This is selected as for other drivers through the `make config`
142−command from the root of the Linux source tree. If the driver is built
143−into the kernel you will need to edit the file ip2.c to match the boards
144−you are installing. See that file for instructions. If the driver is
145−installed as a module the configuration can also be specified on the
146−modprobe command line as follows:
147−
148− modprobe ip2 irq=irq1,irq2,irq3,irq4 io=addr1,addr2,addr3,addr4
149−
150−where irqnum is one of the valid Intelliport II interrupts (3,4,5,7,10,11,
151−12,15) and addr1-4 are the base addresses for up to four controllers. If
152−the irqs are not specified the driver uses the default in ip2.c (which
153−selects polled mode). If no base addresses are specified the defaults in
154−ip2.c are used. If you are autoloading the driver module with kerneld or
155−kmod the base addresses and interrupt number must also be set in ip2.c
156−and recompile or just insert and options line in /etc/modprobe.d/*.conf or both.
157−The options line is equivalent to the command line and takes precedence over
158−what is in ip2.c.
159−
160−config sample to put /etc/modprobe.d/*.conf:
161− options ip2 io=1,0x328 irq=1,10
162− alias char-major-71 ip2
163− alias char-major-72 ip2
164− alias char-major-73 ip2
165−
166−The equivalent in ip2.c:
167−
168−static int io[IP2_MAX_BOARDS]= { 1, 0x328, 0, 0 };
169−static int irq[IP2_MAX_BOARDS] = { 1, 10, -1, -1 };
170−
171−The equivalent for the kernel command line (in lilo.conf):
172−
173− append="ip2=1,1,0x328,10"
174−
175−
176−Note: Both io and irq should be updated to reflect YOUR system. An "io"
177− address of 1 or 2 indicates a PCI or EISA card in the board table.
178− The PCI or EISA irq will be assigned automatically.
179−
180−Specifying an invalid or in-use irq will default the driver into
181−running in polled mode for that card. If all irq entries are 0 then
182−all cards will operate in polled mode.
183−
184−If you select the driver as part of the kernel run :
185−
186− make zlilo (or whatever you do to create a bootable kernel)
187−
188−If you selected a module run :
189−
190− make modules && make modules_install
191−
192−The utility ip2mkdev (see 5 and 7 below) creates all the device nodes
193−required by the driver. For a device to be created it must be configured
194−in the driver and the board must be installed. Only devices corresponding
195−to real IntelliPort II ports are created. With multiple boards and expansion
196−boxes this will leave gaps in the sequence of device names. ip2mkdev uses
197−Linux tty naming conventions: ttyF0 - ttyF255 for normal devices, and
198−cuf0 - cuf255 for callout devices.
199−
200−
201−4. USING THE DRIVERS
202−
203−As noted above, the driver implements the ports in accordance with Linux
204−conventions, and the devices should be interchangeable with the standard
205−serial devices. (This is a key point for problem reporting: please make
206−sure that what you are trying do works on the ttySx/cuax ports first; then
207−tell us what went wrong with the ip2 ports!)
208−
209−Higher speeds can be obtained using the setserial utility which remaps
210−38,400 bps (extb) to 57,600 bps, 115,200 bps, or a custom speed.
211−Intelliport II installations using the PowerPort expansion module can
212−use the custom speed setting to select the highest speeds: 153,600 bps,
213−230,400 bps, 307,200 bps, 460,800bps and 921,600 bps. The base for
214−custom baud rate configuration is fixed at 921,600 for cards/expansion
215−modules with ST654's and 115200 for those with Cirrus CD1400's. This
216−corresponds to the maximum bit rates those chips are capable.
217−For example if the baud base is 921600 and the baud divisor is 18 then
218−the custom rate is 921600/18 = 51200 bps. See the setserial man page for
219−complete details. Of course if stty accepts the higher rates now you can
220−use that as well as the standard ioctls().
221−
222−
223−5. ip2mkdev and assorted utilities...
224−
225−Several utilities, including the source for a binary ip2mkdev utility are
226−available under .../drivers/char/ip2. These can be build by changing to
227−that directory and typing "make" after the kernel has be built. If you do
228−not wish to compile the binary utilities, the shell script below can be
229−cut out and run as "ip2mkdev" to create the necessary device files. To
230−use the ip2mkdev script, you must have procfs enabled and the proc file
231−system mounted on /proc.
232−
233−
234−6. NOTES
235−
236−This is a release version of the driver, but it is impossible to test it
237−in all configurations of Linux. If there is any anomalous behaviour that
238−does not match the standard serial port's behaviour please let us know.
239−
240−
241−7. ip2mkdev shell script
242−
243−Previously, this script was simply attached here. It is now attached as a
244−shar archive to make it easier to extract the script from the documentation.
245−To create the ip2mkdev shell script change to a convenient directory (/tmp
246−works just fine) and run the following command:
247−
248− unshar Documentation/serial/computone.txt
249− (This file)
250−
251−You should now have a file ip2mkdev in your current working directory with
252−permissions set to execute. Running that script with then create the
253−necessary devices for the Computone boards, interfaces, and ports which
254−are present on you system at the time it is run.
255−
256−
257−#!/bin/sh
258−# This is a shell archive (produced by GNU sharutils 4.2.1).
259−# To extract the files from this archive, save it to some FILE, remove
260−# everything before the `!/bin/sh' line above, then type `sh FILE'.
261−#
262−# Made on 2001-10-29 10:32 EST by <mhw@alcove.wittsend.com>.
263−# Source directory was `/home2/src/tmp'.
264−#
265−# Existing files will *not* be overwritten unless `-c' is specified.
266−#
267−# This shar contains:
268−# length mode name
269−# ------ ---------- ------------------------------------------
270−# 4251 -rwxr-xr-x ip2mkdev
271−#
272−save_IFS="${IFS}"
273−IFS="${IFS}:"
274−gettext_dir=FAILED
275−locale_dir=FAILED
276−first_param="$1"
277−for dir in $PATH
278−do
279− if test "$gettext_dir" = FAILED && test -f $dir/gettext \
280− && ($dir/gettext --version >/dev/null 2>&1)
281− then
282− set `$dir/gettext --version 2>&1`
283− if test "$3" = GNU
284− then
285− gettext_dir=$dir
286− fi
287− fi
288− if test "$locale_dir" = FAILED && test -f $dir/shar \
289− && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
290− then
291− locale_dir=`$dir/shar --print-text-domain-dir`
292− fi
293−done
294−IFS="$save_IFS"
295−if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
296−then
297− echo=echo
298−else
299− TEXTDOMAINDIR=$locale_dir
300− export TEXTDOMAINDIR
301− TEXTDOMAIN=sharutils
302− export TEXTDOMAIN
303− echo="$gettext_dir/gettext -s"
304−fi
305−if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
306− shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
307−elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
308− shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
309−elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
310− shar_touch='touch -am $3$4$5$6$2 "$8"'
311−else
312− shar_touch=:
313− echo
314− $echo 'WARNING: not restoring timestamps. Consider getting and'
315− $echo "installing GNU \`touch', distributed in GNU File Utilities..."
316− echo
317−fi
318−rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
319−#
320−if mkdir _sh17581; then
321− $echo 'x -' 'creating lock directory'
322−else
323− $echo 'failed to create lock directory'
324− exit 1
325−fi
326−# ============= ip2mkdev ==============
327−if test -f 'ip2mkdev' && test "$first_param" != -c; then
328− $echo 'x -' SKIPPING 'ip2mkdev' '(file already exists)'
329−else
330− $echo 'x -' extracting 'ip2mkdev' '(text)'
331− sed 's/^X//' << 'SHAR_EOF' > 'ip2mkdev' &&
332−#!/bin/sh -
333−#
334−# ip2mkdev
335−#
336−# Make or remove devices as needed for Computone Intelliport drivers
337−#
338−# First rule! If the dev file exists and you need it, don't mess
339−# with it. That prevents us from screwing up open ttys, ownership
340−# and permissions on a running system!
341−#
342−# This script will NOT remove devices that no longer exist if their
343−# board or interface box has been removed. If you want to get rid
344−# of them, you can manually do an "rm -f /dev/ttyF* /dev/cuaf*"
345−# before running this script. Running this script will then recreate
346−# all the valid devices.
347−#
348−# Michael H. Warfield
349−# /\/\|=mhw=|\/\/
350−# mhw@wittsend.com
351−#
352−# Updated 10/29/2000 for version 1.2.13 naming convention
353−# under devfs. /\/\|=mhw=|\/\/
354−#
355−# Updated 03/09/2000 for devfs support in ip2 drivers. /\/\|=mhw=|\/\/
356−#
357−X
358−if test -d /dev/ip2 ; then
359−# This is devfs mode... We don't do anything except create symlinks
360−# from the real devices to the old names!
361−X cd /dev
362−X echo "Creating symbolic links to devfs devices"
363−X for i in `ls ip2` ; do
364−X if test ! -L ip2$i ; then
365−X # Remove it incase it wasn't a symlink (old device)
366−X rm -f ip2$i
367−X ln -s ip2/$i ip2$i
368−X fi
369−X done
370−X for i in `( cd tts ; ls F* )` ; do
371−X if test ! -L tty$i ; then
372−X # Remove it incase it wasn't a symlink (old device)
373−X rm -f tty$i
374−X ln -s tts/$i tty$i
375−X fi
376−X done
377−X for i in `( cd cua ; ls F* )` ; do
378−X DEVNUMBER=`expr $i : 'F\(.*\)'`
379−X if test ! -L cuf$DEVNUMBER ; then
380−X # Remove it incase it wasn't a symlink (old device)
381−X rm -f cuf$DEVNUMBER
382−X ln -s cua/$i cuf$DEVNUMBER
383−X fi
384−X done
385−X exit 0
386−fi
387−X
388−if test ! -f /proc/tty/drivers
389−then
390−X echo "\
391−Unable to check driver status.
392−Make sure proc file system is mounted."
393−X
394−X exit 255
395−fi
396−X
397−if test ! -f /proc/tty/driver/ip2
398−then
399−X echo "\
400−Unable to locate ip2 proc file.
401−Attempting to load driver"
402−X
403−X if /sbin/insmod ip2
404−X then
405−X if test ! -f /proc/tty/driver/ip2
406−X then
407−X echo "\
408−Unable to locate ip2 proc file after loading driver.
409−Driver initialization failure or driver version error.
410−"
411−X exit 255
412−X fi
413−X else
414−X echo "Unable to load ip2 driver."
415−X exit 255
416−X fi
417−fi
418−X
419−# Ok... So we got the driver loaded and we can locate the procfs files.
420−# Next we need our major numbers.
421−X
422−TTYMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/tt/!d' -e 's/.*tt[^ ]*[ ]*\([0-9]*\)[ ]*.*/\1/' < /proc/tty/drivers`
423−CUAMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/cu/!d' -e 's/.*cu[^ ]*[ ]*\([0-9]*\)[ ]*.*/\1/' < /proc/tty/drivers`
424−BRDMAJOR=`sed -e '/^Driver: /!d' -e 's/.*IMajor=\([0-9]*\)[ ]*.*/\1/' < /proc/tty/driver/ip2`
425−X
426−echo "\
427−TTYMAJOR = $TTYMAJOR
428−CUAMAJOR = $CUAMAJOR
429−BRDMAJOR = $BRDMAJOR
430−"
431−X
432−# Ok... Now we should know our major numbers, if appropriate...
433−# Now we need our boards and start the device loops.
434−X
435−grep '^Board [0-9]:' /proc/tty/driver/ip2 | while read token number type alltherest
436−do
437−X # The test for blank "type" will catch the stats lead-in lines
438−X # if they exist in the file
439−X if test "$type" = "vacant" -o "$type" = "Vacant" -o "$type" = ""
440−X then
441−X continue
442−X fi
443−X
444−X BOARDNO=`expr "$number" : '\([0-9]\):'`
445−X PORTS=`expr "$alltherest" : '.*ports=\([0-9]*\)' | tr ',' ' '`
446−X MINORS=`expr "$alltherest" : '.*minors=\([0-9,]*\)' | tr ',' ' '`
447−X
448−X if test "$BOARDNO" = "" -o "$PORTS" = ""
449−X then
450−# This may be a bug. We should at least get this much information
451−X echo "Unable to process board line"
452−X continue
453−X fi
454−X
455−X if test "$MINORS" = ""
456−X then
457−# Silently skip this one. This board seems to have no boxes
458−X continue
459−X fi
460−X
461−X echo "board $BOARDNO: $type ports = $PORTS; port numbers = $MINORS"
462−X
463−X if test "$BRDMAJOR" != ""
464−X then
465−X BRDMINOR=`expr $BOARDNO \* 4`
466−X STSMINOR=`expr $BRDMINOR + 1`
467−X if test ! -c /dev/ip2ipl$BOARDNO ; then
468−X mknod /dev/ip2ipl$BOARDNO c $BRDMAJOR $BRDMINOR
469−X fi
470−X if test ! -c /dev/ip2stat$BOARDNO ; then
471−X mknod /dev/ip2stat$BOARDNO c $BRDMAJOR $STSMINOR
472−X fi
473−X fi
474−X
475−X if test "$TTYMAJOR" != ""
476−X then
477−X PORTNO=$BOARDBASE
478−X
479−X for PORTNO in $MINORS
480−X do
481−X if test ! -c /dev/ttyF$PORTNO ; then
482−X # We got the hardware but no device - make it
483−X mknod /dev/ttyF$PORTNO c $TTYMAJOR $PORTNO
484−X fi
485−X done
486−X fi
487−X
488−X if test "$CUAMAJOR" != ""
489−X then
490−X PORTNO=$BOARDBASE
491−X
492−X for PORTNO in $MINORS
493−X do
494−X if test ! -c /dev/cuf$PORTNO ; then
495−X # We got the hardware but no device - make it
496−X mknod /dev/cuf$PORTNO c $CUAMAJOR $PORTNO
497−X fi
498−X done
499−X fi
500−done
501−X
502−Xexit 0
503−SHAR_EOF
504− (set 20 01 10 29 10 32 01 'ip2mkdev'; eval "$shar_touch") &&
505− chmod 0755 'ip2mkdev' ||
506− $echo 'restore of' 'ip2mkdev' 'failed'
507− if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
508− && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
509− md5sum -c << SHAR_EOF >/dev/null 2>&1 \
510− || $echo 'ip2mkdev:' 'MD5 check failed'
511−cb5717134509f38bad9fde6b1f79b4a4 ip2mkdev
512−SHAR_EOF
513− else
514− shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'ip2mkdev'`"
515− test 4251 -eq "$shar_count" ||
516− $echo 'ip2mkdev:' 'original size' '4251,' 'current size' "$shar_count!"
517− fi
518−fi
519−rm -fr _sh17581
520−exit 0
arch/alpha/kernel/srmcons.c+1−0
@@ -223,6 +223,7 @@ srmcons_init(void) · 222 unmodified lines
223223 driver->subtype = SYSTEM_TYPE_SYSCONS;
224224 driver->init_termios = tty_std_termios;
225225 tty_set_operations(driver, &srmcons_ops);
226+ tty_port_link_device(&srmcons_singleton.port, driver, 0);
226227 err = tty_register_driver(driver);
227228 if (err) {
228229 put_tty_driver(driver);
arch/arm/mach-omap2/serial.c+12−6
@@ -80,8 +80,9 @@ static struct omap_uart_port_info omap_serial_default_info[] __initdata = { · 79 unmodified lines
8080 };
8181
8282 #ifdef CONFIG_PM
83−static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable)
83+static void omap_uart_enable_wakeup(struct device *dev, bool enable)
8484 {
85+ struct platform_device *pdev = to_platform_device(dev);
8586 struct omap_device *od = to_omap_device(pdev);
8687
8788 if (!od)
@@ -98,15 +99,17 @@ static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable) · 10 unmodified lines
9899 * in Smartidle Mode When Configured for DMA Operations.
99100 * WA: configure uart in force idle mode.
100101 */
101−static void omap_uart_set_noidle(struct platform_device *pdev)
102+static void omap_uart_set_noidle(struct device *dev)
102103 {
104+ struct platform_device *pdev = to_platform_device(dev);
103105 struct omap_device *od = to_omap_device(pdev);
104106
105107 omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_NO);
106108 }
107109
108−static void omap_uart_set_smartidle(struct platform_device *pdev)
110+static void omap_uart_set_smartidle(struct device *dev)
109111 {
112+ struct platform_device *pdev = to_platform_device(dev);
110113 struct omap_device *od = to_omap_device(pdev);
111114 u8 idlemode;
112115
@@ -119,10 +122,10 @@ static void omap_uart_set_smartidle(struct platform_device *pdev) · 6 unmodified lines
119122 }
120123
121124 #else
122−static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable)
125+static void omap_uart_enable_wakeup(struct device *dev, bool enable)
123126 {}
124−static void omap_uart_set_noidle(struct platform_device *pdev) {}
125−static void omap_uart_set_smartidle(struct platform_device *pdev) {}
127+static void omap_uart_set_noidle(struct device *dev) {}
128+static void omap_uart_set_smartidle(struct device *dev) {}
126129 #endif /* CONFIG_PM */
127130
128131 #ifdef CONFIG_OMAP_MUX
@@ -303,6 +306,9 @@ void __init omap_serial_init_port(struct omap_board_data *bdata, · 174 unmodified lines
303306 omap_up.dma_rx_timeout = info->dma_rx_timeout;
304307 omap_up.dma_rx_poll_rate = info->dma_rx_poll_rate;
305308 omap_up.autosuspend_timeout = info->autosuspend_timeout;
309+ omap_up.DTR_gpio = info->DTR_gpio;
310+ omap_up.DTR_inverted = info->DTR_inverted;
311+ omap_up.DTR_present = info->DTR_present;
306312
307313 pdata = &omap_up;
308314 pdata_size = sizeof(struct omap_uart_port_info);
arch/arm/mach-ux500/board-mop500.c+0−21
@@ -524,33 +524,12 @@ static struct stedma40_chan_cfg uart2_dma_cfg_tx = { · 523 unmodified lines
524524 };
525525 #endif
526526
527−#define PRCC_K_SOFTRST_SET 0x18
528−#define PRCC_K_SOFTRST_CLEAR 0x1C
529−static void ux500_uart0_reset(void)
530−{
531− void __iomem *prcc_rst_set, *prcc_rst_clr;
532−
533− prcc_rst_set = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
534− PRCC_K_SOFTRST_SET);
535− prcc_rst_clr = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
536− PRCC_K_SOFTRST_CLEAR);
537−
538− /* Activate soft reset PRCC_K_SOFTRST_CLEAR */
539− writel((readl(prcc_rst_clr) | 0x1), prcc_rst_clr);
540− udelay(1);
541−
542− /* Release soft reset PRCC_K_SOFTRST_SET */
543− writel((readl(prcc_rst_set) | 0x1), prcc_rst_set);
544− udelay(1);
545−}
546−
547527 static struct amba_pl011_data uart0_plat = {
548528 #ifdef CONFIG_STE_DMA40
549529 .dma_filter = stedma40_filter,
550530 .dma_rx_param = &uart0_dma_cfg_rx,
551531 .dma_tx_param = &uart0_dma_cfg_tx,
552532 #endif
553− .reset = ux500_uart0_reset,
554533 };
555534
556535 static struct amba_pl011_data uart1_plat = {
arch/arm/plat-omap/include/plat/omap-serial.h+9−41
@@ -18,7 +18,7 @@ · 17 unmodified lines
1818 #define __OMAP_SERIAL_H__
1919
2020 #include <linux/serial_core.h>
21−#include <linux/platform_device.h>
21+#include <linux/device.h>
2222 #include <linux/pm_qos.h>
2323
2424 #include <plat/mux.h>
@@ -42,10 +42,10 @@ · 17 unmodified lines
4242 #define OMAP_UART_WER_MOD_WKUP 0X7F
4343
4444 /* Enable XON/XOFF flow control on output */
45−#define OMAP_UART_SW_TX 0x04
45+#define OMAP_UART_SW_TX 0x8
4646
4747 /* Enable XON/XOFF flow control on input */
48−#define OMAP_UART_SW_RX 0x04
48+#define OMAP_UART_SW_RX 0x2
4949
5050 #define OMAP_UART_SYSC_RESET 0X07
5151 #define OMAP_UART_TCR_TRIG 0X0F
@@ -69,11 +69,14 @@ struct omap_uart_port_info { · 17 unmodified lines
6969 unsigned int dma_rx_timeout;
7070 unsigned int autosuspend_timeout;
7171 unsigned int dma_rx_poll_rate;
72+ int DTR_gpio;
73+ int DTR_inverted;
74+ int DTR_present;
7275
7376 int (*get_context_loss_count)(struct device *);
74− void (*set_forceidle)(struct platform_device *);
75− void (*set_noidle)(struct platform_device *);
76− void (*enable_wakeup)(struct platform_device *, bool);
77+ void (*set_forceidle)(struct device *);
78+ void (*set_noidle)(struct device *);
79+ void (*enable_wakeup)(struct device *, bool);
7780 };
7881
7982 struct uart_omap_dma {
@@ -102,39 +105,4 @@ struct uart_omap_dma { · 22 unmodified lines
102105 unsigned int rx_timeout;
103106 };
104107
105−struct uart_omap_port {
106− struct uart_port port;
107− struct uart_omap_dma uart_dma;
108− struct platform_device *pdev;
109−
110− unsigned char ier;
111− unsigned char lcr;
112− unsigned char mcr;
113− unsigned char fcr;
114− unsigned char efr;
115− unsigned char dll;
116− unsigned char dlh;
117− unsigned char mdr1;
118− unsigned char scr;
119−
120− int use_dma;
121− /*
122− * Some bits in registers are cleared on a read, so they must
123− * be saved whenever the register is read but the bits will not
124− * be immediately processed.
125− */
126− unsigned int lsr_break_flag;
127− unsigned char msr_saved_flags;
128− char name[20];
129− unsigned long port_activity;
130− u32 context_loss_cnt;
131− u32 errata;
132− u8 wakeups_enabled;
133−
134− struct pm_qos_request pm_qos_request;
135− u32 latency;
136− u32 calc_latency;
137− struct work_struct qos_work;
138−};
139−
140108 #endif /* __OMAP_SERIAL_H__ */
arch/ia64/hp/sim/simserial.c+2−1
@@ -338,7 +338,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 337 unmodified lines
338338 {
339339 /* Handle turning off CRTSCTS */
340340 if ((old_termios->c_cflag & CRTSCTS) &&
341− !(tty->termios->c_cflag & CRTSCTS)) {
341+ !(tty->termios.c_cflag & CRTSCTS)) {
342342 tty->hw_stopped = 0;
343343 }
344344 }
@@ -545,6 +545,7 @@ static int __init simrs_init(void) · 200 unmodified lines
545545 /* the port is imaginary */
546546 printk(KERN_INFO "ttyS0 at 0x03f8 (irq = %d) is a 16550\n", state->irq);
547547
548+ tty_port_link_device(&state->port, hp_simserial_driver, 0);
548549 retval = tty_register_driver(hp_simserial_driver);
549550 if (retval) {
550551 printk(KERN_ERR "Couldn't register simserial driver\n");
arch/m68k/emu/nfcon.c+4−0
@@ -19,6 +19,7 @@ · 18 unmodified lines
1919 #include <asm/natfeat.h>
2020
2121 static int stderr_id;
22+static struct tty_port nfcon_tty_port;
2223 static struct tty_driver *nfcon_tty_driver;
2324
2425 static void nfputs(const char *str, unsigned int count)
@@ -119,6 +120,8 @@ static int __init nfcon_init(void) · 94 unmodified lines
119120 {
120121 int res;
121122
123+ tty_port_init(&nfcon_tty_port);
124+
122125 stderr_id = nf_get_id("NF_STDERR");
123126 if (!stderr_id)
124127 return -ENODEV;
@@ -135,6 +138,7 @@ static int __init nfcon_init(void) · 10 unmodified lines
135138 nfcon_tty_driver->flags = TTY_DRIVER_REAL_RAW;
136139
137140 tty_set_operations(nfcon_tty_driver, &nfcon_tty_ops);
141+ tty_port_link_device(&nfcon_tty_port, nfcon_tty_driver, 0);
138142 res = tty_register_driver(nfcon_tty_driver);
139143 if (res) {
140144 pr_err("failed to register nfcon tty driver\n");
arch/mips/cavium-octeon/serial.c+15−15
@@ -47,40 +47,40 @@ static int __devinit octeon_serial_probe(struct platform_device *pdev) · 46 unmodified lines
4747 {
4848 int irq, res;
4949 struct resource *res_mem;
50− struct uart_port port;
50+ struct uart_8250_port up;
5151
5252 /* All adaptors have an irq. */
5353 irq = platform_get_irq(pdev, 0);
5454 if (irq < 0)
5555 return irq;
5656
57− memset(&port, 0, sizeof(port));
57+ memset(&up, 0, sizeof(up));
5858
59− port.flags = ASYNC_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE;
60− port.type = PORT_OCTEON;
61− port.iotype = UPIO_MEM;
62− port.regshift = 3;
63− port.dev = &pdev->dev;
59+ up.port.flags = ASYNC_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE;
60+ up.port.type = PORT_OCTEON;
61+ up.port.iotype = UPIO_MEM;
62+ up.port.regshift = 3;
63+ up.port.dev = &pdev->dev;
6464
6565 if (octeon_is_simulation())
6666 /* Make simulator output fast*/
67− port.uartclk = 115200 * 16;
67+ up.port.uartclk = 115200 * 16;
6868 else
69− port.uartclk = octeon_get_io_clock_rate();
69+ up.port.uartclk = octeon_get_io_clock_rate();
7070
71− port.serial_in = octeon_serial_in;
72− port.serial_out = octeon_serial_out;
73− port.irq = irq;
71+ up.port.serial_in = octeon_serial_in;
72+ up.port.serial_out = octeon_serial_out;
73+ up.port.irq = irq;
7474
7575 res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
7676 if (res_mem == NULL) {
7777 dev_err(&pdev->dev, "found no memory resource\n");
7878 return -ENXIO;
7979 }
80− port.mapbase = res_mem->start;
81− port.membase = ioremap(res_mem->start, resource_size(res_mem));
80+ up.port.mapbase = res_mem->start;
81+ up.port.membase = ioremap(res_mem->start, resource_size(res_mem));
8282
83− res = serial8250_register_port(&port);
83+ res = serial8250_register_8250_port(&up);
8484
8585 return res >= 0 ? 0 : res;
8686 }
arch/mips/sni/a20r.c+32−0
@@ -133,6 +133,38 @@ static struct platform_device sc26xx_pdev = { · 132 unmodified lines
133133 }
134134 };
135135
136+#warning "Please try migrate to use new driver SCCNXP and report the status" \
137+ "in the linux-serial mailing list."
138+
139+/* The code bellow is a replacement of SC26XX to SCCNXP */
140+#if 0
141+#include <linux/platform_data/sccnxp.h>
142+
143+static struct sccnxp_pdata sccnxp_data = {
144+ .reg_shift = 2,
145+ .frequency = 3686400,
146+ .mctrl_cfg[0] = MCTRL_SIG(DTR_OP, LINE_OP7) |
147+ MCTRL_SIG(RTS_OP, LINE_OP3) |
148+ MCTRL_SIG(DSR_IP, LINE_IP5) |
149+ MCTRL_SIG(DCD_IP, LINE_IP6),
150+ .mctrl_cfg[1] = MCTRL_SIG(DTR_OP, LINE_OP2) |
151+ MCTRL_SIG(RTS_OP, LINE_OP1) |
152+ MCTRL_SIG(DSR_IP, LINE_IP0) |
153+ MCTRL_SIG(CTS_IP, LINE_IP1) |
154+ MCTRL_SIG(DCD_IP, LINE_IP2) |
155+ MCTRL_SIG(RNG_IP, LINE_IP3),
156+};
157+
158+static struct platform_device sc2681_pdev = {
159+ .name = "sc2681",
160+ .resource = sc2xxx_rsrc,
161+ .num_resources = ARRAY_SIZE(sc2xxx_rsrc),
162+ .dev = {
163+ .platform_data = &sccnxp_data,
164+ },
165+};
166+#endif
167+
136168 static u32 a20r_ack_hwint(void)
137169 {
138170 u32 status = read_c0_status();
arch/parisc/kernel/pdc_cons.c+1−0
@@ -202,6 +202,7 @@ static int __init pdc_console_tty_driver_init(void) · 201 unmodified lines
202202 pdc_console_tty_driver->flags = TTY_DRIVER_REAL_RAW |
203203 TTY_DRIVER_RESET_TERMIOS;
204204 tty_set_operations(pdc_console_tty_driver, &pdc_console_tty_ops);
205+ tty_port_link_device(&tty_port, pdc_console_tty_driver, 0);
205206
206207 err = tty_register_driver(pdc_console_tty_driver);
207208 if (err) {
arch/um/drivers/line.c+2−1
@@ -409,7 +409,8 @@ int setup_one_line(struct line *lines, int n, char *init, · 408 unmodified lines
409409 line->valid = 1;
410410 err = parse_chan_pair(new, line, n, opts, error_out);
411411 if (!err) {
412− struct device *d = tty_register_device(driver, n, NULL);
412+ struct device *d = tty_port_register_device(&line->port,
413+ driver, n, NULL);
413414 if (IS_ERR(d)) {
414415 *error_out = "Failed to register device";
415416 err = PTR_ERR(d);
arch/xtensa/platforms/iss/console.c+1−0
@@ -223,6 +223,7 @@ int __init rs_init(void) · 222 unmodified lines
223223 serial_driver->flags = TTY_DRIVER_REAL_RAW;
224224
225225 tty_set_operations(serial_driver, &serial_ops);
226+ tty_port_link_device(&serial_port, serial_driver, 0);
226227
227228 if (tty_register_driver(serial_driver))
228229 panic("Couldn't register serial driver\n");
drivers/bluetooth/hci_ath.c+1−1
@@ -58,7 +58,7 @@ static int ath_wakeup_ar3k(struct tty_struct *tty) · 57 unmodified lines
5858 return status;
5959
6060 /* Disable Automatic RTSCTS */
61− memcpy(&ktermios, tty->termios, sizeof(ktermios));
61+ ktermios = tty->termios;
6262 ktermios.c_cflag &= ~CRTSCTS;
6363 tty_set_termios(tty, &ktermios);
6464
drivers/char/mwave/mwavedd.c+8−8
@@ -430,7 +430,7 @@ static ssize_t mwave_write(struct file *file, const char __user *buf, · 429 unmodified lines
430430
431431 static int register_serial_portandirq(unsigned int port, int irq)
432432 {
433− struct uart_port uart;
433+ struct uart_8250_port uart;
434434
435435 switch ( port ) {
436436 case 0x3f8:
@@ -462,14 +462,14 @@ static int register_serial_portandirq(unsigned int port, int irq) · 25 unmodified lines
462462 } /* switch */
463463 /* irq is okay */
464464
465− memset(&uart, 0, sizeof(struct uart_port));
465+ memset(&uart, 0, sizeof(uart));
466466
467− uart.uartclk = 1843200;
468− uart.iobase = port;
469− uart.irq = irq;
470− uart.iotype = UPIO_PORT;
471− uart.flags = UPF_SHARE_IRQ;
472− return serial8250_register_port(&uart);
467+ uart.port.uartclk = 1843200;
468+ uart.port.iobase = port;
469+ uart.port.irq = irq;
470+ uart.port.iotype = UPIO_PORT;
471+ uart.port.flags = UPF_SHARE_IRQ;
472+ return serial8250_register_8250_port(&uart);
473473 }
474474
475475
drivers/char/pcmcia/synclink_cs.c+60−71
@@ -1050,7 +1050,7 @@ static void cts_change(MGSLPC_INFO *info, struct tty_struct *tty) · 1049 unmodified lines
10501050 wake_up_interruptible(&info->status_event_wait_q);
10511051 wake_up_interruptible(&info->event_wait_q);
10521052
1053− if (info->port.flags & ASYNC_CTS_FLOW) {
1053+ if (tty_port_cts_enabled(&info->port)) {
10541054 if (tty->hw_stopped) {
10551055 if (info->serial_signals & SerialSignal_CTS) {
10561056 if (debug_level >= DEBUG_LEVEL_ISR)
@@ -1344,7 +1344,7 @@ static void shutdown(MGSLPC_INFO * info, struct tty_struct *tty) · 287 unmodified lines
13441344 /* TODO:disable interrupts instead of reset to preserve signal states */
13451345 reset_device(info);
13461346
1347− if (!tty || tty->termios->c_cflag & HUPCL) {
1347+ if (!tty || tty->termios.c_cflag & HUPCL) {
13481348 info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS);
13491349 set_signals(info);
13501350 }
@@ -1385,7 +1385,7 @@ static void mgslpc_program_hw(MGSLPC_INFO *info, struct tty_struct *tty) · 34 unmodified lines
13851385 port_irq_enable(info, (unsigned char) PVR_DSR | PVR_RI);
13861386 get_signals(info);
13871387
1388− if (info->netcount || (tty && (tty->termios->c_cflag & CREAD)))
1388+ if (info->netcount || (tty && (tty->termios.c_cflag & CREAD)))
13891389 rx_start(info);
13901390
13911391 spin_unlock_irqrestore(&info->lock,flags);
@@ -1398,14 +1398,14 @@ static void mgslpc_change_params(MGSLPC_INFO *info, struct tty_struct *tty) · 6 unmodified lines
13981398 unsigned cflag;
13991399 int bits_per_char;
14001400
1401− if (!tty || !tty->termios)
1401+ if (!tty)
14021402 return;
14031403
14041404 if (debug_level >= DEBUG_LEVEL_INFO)
14051405 printk("%s(%d):mgslpc_change_params(%s)\n",
14061406 __FILE__,__LINE__, info->device_name );
14071407
1408− cflag = tty->termios->c_cflag;
1408+ cflag = tty->termios.c_cflag;
14091409
14101410 /* if B0 rate (hangup) specified then negate DTR and RTS */
14111411 /* otherwise assert DTR and RTS */
@@ -1728,7 +1728,7 @@ static void mgslpc_throttle(struct tty_struct * tty) · 316 unmodified lines
17281728 if (I_IXOFF(tty))
17291729 mgslpc_send_xchar(tty, STOP_CHAR(tty));
17301730
1731− if (tty->termios->c_cflag & CRTSCTS) {
1731+ if (tty->termios.c_cflag & CRTSCTS) {
17321732 spin_lock_irqsave(&info->lock,flags);
17331733 info->serial_signals &= ~SerialSignal_RTS;
17341734 set_signals(info);
@@ -1757,7 +1757,7 @@ static void mgslpc_unthrottle(struct tty_struct * tty) · 22 unmodified lines
17571757 mgslpc_send_xchar(tty, START_CHAR(tty));
17581758 }
17591759
1760− if (tty->termios->c_cflag & CRTSCTS) {
1760+ if (tty->termios.c_cflag & CRTSCTS) {
17611761 spin_lock_irqsave(&info->lock,flags);
17621762 info->serial_signals |= SerialSignal_RTS;
17631763 set_signals(info);
@@ -2293,8 +2293,8 @@ static void mgslpc_set_termios(struct tty_struct *tty, struct ktermios *old_term · 529 unmodified lines
22932293 tty->driver->name );
22942294
22952295 /* just return if nothing has changed */
2296− if ((tty->termios->c_cflag == old_termios->c_cflag)
2297− && (RELEVANT_IFLAG(tty->termios->c_iflag)
2296+ if ((tty->termios.c_cflag == old_termios->c_cflag)
2297+ && (RELEVANT_IFLAG(tty->termios.c_iflag)
22982298 == RELEVANT_IFLAG(old_termios->c_iflag)))
22992299 return;
23002300
@@ -2302,7 +2302,7 @@ static void mgslpc_set_termios(struct tty_struct *tty, struct ktermios *old_term · 1 unmodified line
23022302
23032303 /* Handle transition to B0 status */
23042304 if (old_termios->c_cflag & CBAUD &&
2305− !(tty->termios->c_cflag & CBAUD)) {
2305+ !(tty->termios.c_cflag & CBAUD)) {
23062306 info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
23072307 spin_lock_irqsave(&info->lock,flags);
23082308 set_signals(info);
@@ -2311,9 +2311,9 @@ static void mgslpc_set_termios(struct tty_struct *tty, struct ktermios *old_term · 2 unmodified lines
23112311
23122312 /* Handle transition away from B0 status */
23132313 if (!(old_termios->c_cflag & CBAUD) &&
2314− tty->termios->c_cflag & CBAUD) {
2314+ tty->termios.c_cflag & CBAUD) {
23152315 info->serial_signals |= SerialSignal_DTR;
2316− if (!(tty->termios->c_cflag & CRTSCTS) ||
2316+ if (!(tty->termios.c_cflag & CRTSCTS) ||
23172317 !test_bit(TTY_THROTTLED, &tty->flags)) {
23182318 info->serial_signals |= SerialSignal_RTS;
23192319 }
@@ -2324,7 +2324,7 @@ static void mgslpc_set_termios(struct tty_struct *tty, struct ktermios *old_term · 4 unmodified lines
23242324
23252325 /* Handle turning off CRTSCTS */
23262326 if (old_termios->c_cflag & CRTSCTS &&
2327− !(tty->termios->c_cflag & CRTSCTS)) {
2327+ !(tty->termios.c_cflag & CRTSCTS)) {
23282328 tty->hw_stopped = 0;
23292329 tx_release(tty);
23302330 }
@@ -2731,6 +2731,8 @@ static void mgslpc_add_device(MGSLPC_INFO *info) · 400 unmodified lines
27312731 #if SYNCLINK_GENERIC_HDLC
27322732 hdlcdev_init(info);
27332733 #endif
2734+ tty_port_register_device(&info->port, serial_driver, info->line,
2735+ &info->p_dev->dev);
27342736 }
27352737
27362738 static void mgslpc_remove_device(MGSLPC_INFO *remove_info)
@@ -2744,6 +2746,7 @@ static void mgslpc_remove_device(MGSLPC_INFO *remove_info) · 7 unmodified lines
27442746 last->next_device = info->next_device;
27452747 else
27462748 mgslpc_device_list = info->next_device;
2749+ tty_unregister_device(serial_driver, info->line);
27472750 #if SYNCLINK_GENERIC_HDLC
27482751 hdlcdev_exit(info);
27492752 #endif
@@ -2798,77 +2801,63 @@ static const struct tty_operations mgslpc_ops = { · 48 unmodified lines
27982801 .proc_fops = &mgslpc_proc_fops,
27992802 };
28002803
2801−static void synclink_cs_cleanup(void)
2804+static int __init synclink_cs_init(void)
28022805 {
28032806 int rc;
28042807
2805− while(mgslpc_device_list)
2806− mgslpc_remove_device(mgslpc_device_list);
2807−
2808− if (serial_driver) {
2809− if ((rc = tty_unregister_driver(serial_driver)))
2810− printk("%s(%d) failed to unregister tty driver err=%d\n",
2811− __FILE__,__LINE__,rc);
2812− put_tty_driver(serial_driver);
2808+ if (break_on_load) {
2809+ mgslpc_get_text_ptr();
2810+ BREAKPOINT();
28132811 }
28142812
2815− pcmcia_unregister_driver(&mgslpc_driver);
2816−}
2817−
2818−static int __init synclink_cs_init(void)
2819−{
2820− int rc;
2821−
2822− if (break_on_load) {
2823− mgslpc_get_text_ptr();
2824− BREAKPOINT();
2825− }
2826−
2827− if ((rc = pcmcia_register_driver(&mgslpc_driver)) < 0)
2828− return rc;
2829−
2830− serial_driver = alloc_tty_driver(MAX_DEVICE_COUNT);
2831− if (!serial_driver) {
2832− rc = -ENOMEM;
2833− goto error;
2834− }
2813+ serial_driver = tty_alloc_driver(MAX_DEVICE_COUNT,
2814+ TTY_DRIVER_REAL_RAW |
2815+ TTY_DRIVER_DYNAMIC_DEV);
2816+ if (IS_ERR(serial_driver)) {
2817+ rc = PTR_ERR(serial_driver);
2818+ goto err;
2819+ }
28352820
2836− /* Initialize the tty_driver structure */
2837−
2838− serial_driver->driver_name = "synclink_cs";
2839− serial_driver->name = "ttySLP";
2840− serial_driver->major = ttymajor;
2841− serial_driver->minor_start = 64;
2842− serial_driver->type = TTY_DRIVER_TYPE_SERIAL;
2843− serial_driver->subtype = SERIAL_TYPE_NORMAL;
2844− serial_driver->init_termios = tty_std_termios;
2845− serial_driver->init_termios.c_cflag =
2846− B9600 | CS8 | CREAD | HUPCL | CLOCAL;
2847− serial_driver->flags = TTY_DRIVER_REAL_RAW;
2848− tty_set_operations(serial_driver, &mgslpc_ops);
2849−
2850− if ((rc = tty_register_driver(serial_driver)) < 0) {
2851− printk("%s(%d):Couldn't register serial driver\n",
2852− __FILE__,__LINE__);
2853− put_tty_driver(serial_driver);
2854− serial_driver = NULL;
2855− goto error;
2856− }
2821+ /* Initialize the tty_driver structure */
2822+ serial_driver->driver_name = "synclink_cs";
2823+ serial_driver->name = "ttySLP";
2824+ serial_driver->major = ttymajor;
2825+ serial_driver->minor_start = 64;
2826+ serial_driver->type = TTY_DRIVER_TYPE_SERIAL;
2827+ serial_driver->subtype = SERIAL_TYPE_NORMAL;
2828+ serial_driver->init_termios = tty_std_termios;
2829+ serial_driver->init_termios.c_cflag =
2830+ B9600 | CS8 | CREAD | HUPCL | CLOCAL;
2831+ tty_set_operations(serial_driver, &mgslpc_ops);
2832+
2833+ rc = tty_register_driver(serial_driver);
2834+ if (rc < 0) {
2835+ printk(KERN_ERR "%s(%d):Couldn't register serial driver\n",
2836+ __FILE__, __LINE__);
2837+ goto err_put_tty;
2838+ }
28572839
2858− printk("%s %s, tty major#%d\n",
2859− driver_name, driver_version,
2860− serial_driver->major);
2840+ rc = pcmcia_register_driver(&mgslpc_driver);
2841+ if (rc < 0)
2842+ goto err_unreg_tty;
28612843
2862− return 0;
2844+ printk(KERN_INFO "%s %s, tty major#%d\n", driver_name, driver_version,
2845+ serial_driver->major);
28632846
2864−error:
2865− synclink_cs_cleanup();
2866− return rc;
2847+ return 0;
2848+err_unreg_tty:
2849+ tty_unregister_driver(serial_driver);
2850+err_put_tty:
2851+ put_tty_driver(serial_driver);
2852+err:
2853+ return rc;
28672854 }
28682855
28692856 static void __exit synclink_cs_exit(void)
28702857 {
2871− synclink_cs_cleanup();
2858+ pcmcia_unregister_driver(&mgslpc_driver);
2859+ tty_unregister_driver(serial_driver);
2860+ put_tty_driver(serial_driver);
28722861 }
28732862
28742863 module_init(synclink_cs_init);
drivers/char/ttyprintk.c+13−20
@@ -67,7 +67,7 @@ static int tpk_printk(const unsigned char *buf, int count) · 66 unmodified lines
6767 tmp[tpk_curr + 1] = '\0';
6868 printk(KERN_INFO "%s%s", tpk_tag, tmp);
6969 tpk_curr = 0;
70− if (buf[i + 1] == '\n')
70+ if ((i + 1) < count && buf[i + 1] == '\n')
7171 i++;
7272 break;
7373 case '\n':
@@ -178,11 +178,17 @@ static struct tty_driver *ttyprintk_driver; · 104 unmodified lines
178178 static int __init ttyprintk_init(void)
179179 {
180180 int ret = -ENOMEM;
181− void *rp;
182181
183− ttyprintk_driver = alloc_tty_driver(1);
184− if (!ttyprintk_driver)
185− return ret;
182+ tty_port_init(&tpk_port.port);
183+ tpk_port.port.ops = &null_ops;
184+ mutex_init(&tpk_port.port_write_mutex);
185+
186+ ttyprintk_driver = tty_alloc_driver(1,
187+ TTY_DRIVER_RESET_TERMIOS |
188+ TTY_DRIVER_REAL_RAW |
189+ TTY_DRIVER_UNNUMBERED_NODE);
190+ if (IS_ERR(ttyprintk_driver))
191+ return PTR_ERR(ttyprintk_driver);
186192
187193 ttyprintk_driver->driver_name = "ttyprintk";
188194 ttyprintk_driver->name = "ttyprintk";
@@ -191,9 +197,8 @@ static int __init ttyprintk_init(void) · 2 unmodified lines
191197 ttyprintk_driver->type = TTY_DRIVER_TYPE_CONSOLE;
192198 ttyprintk_driver->init_termios = tty_std_termios;
193199 ttyprintk_driver->init_termios.c_oflag = OPOST | OCRNL | ONOCR | ONLRET;
194− ttyprintk_driver->flags = TTY_DRIVER_RESET_TERMIOS |
195− TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
196200 tty_set_operations(ttyprintk_driver, &ttyprintk_ops);
201+ tty_port_link_device(&tpk_port.port, ttyprintk_driver, 0);
197202
198203 ret = tty_register_driver(ttyprintk_driver);
199204 if (ret < 0) {
@@ -201,22 +206,10 @@ static int __init ttyprintk_init(void) · 1 unmodified line
201206 goto error;
202207 }
203208
204− /* create our unnumbered device */
205− rp = device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 3), NULL,
206− ttyprintk_driver->name);
207− if (IS_ERR(rp)) {
208− printk(KERN_ERR "Couldn't create ttyprintk device\n");
209− ret = PTR_ERR(rp);
210− goto error;
211− }
212−
213− tty_port_init(&tpk_port.port);
214− tpk_port.port.ops = &null_ops;
215− mutex_init(&tpk_port.port_write_mutex);
216−
217209 return 0;
218210
219211 error:
212+ tty_unregister_driver(ttyprintk_driver);
220213 put_tty_driver(ttyprintk_driver);
221214 ttyprintk_driver = NULL;
222215 return ret;
drivers/isdn/capi/capi.c+2−1
@@ -234,7 +234,8 @@ static struct capiminor *capiminor_alloc(struct capi20_appl *ap, u32 ncci) · 233 unmodified lines
234234
235235 mp->minor = minor;
236236
237− dev = tty_register_device(capinc_tty_driver, minor, NULL);
237+ dev = tty_port_register_device(&mp->port, capinc_tty_driver, minor,
238+ NULL);
238239 if (IS_ERR(dev))
239240 goto err_out2;
240241
drivers/isdn/gigaset/interface.c+4−3
@@ -446,8 +446,8 @@ static void if_set_termios(struct tty_struct *tty, struct ktermios *old) · 445 unmodified lines
446446 goto out;
447447 }
448448
449− iflag = tty->termios->c_iflag;
450− cflag = tty->termios->c_cflag;
449+ iflag = tty->termios.c_iflag;
450+ cflag = tty->termios.c_cflag;
451451 old_cflag = old ? old->c_cflag : cflag;
452452 gig_dbg(DEBUG_IF, "%u: iflag %x cflag %x old %x",
453453 cs->minor_index, iflag, cflag, old_cflag);
@@ -524,7 +524,8 @@ void gigaset_if_init(struct cardstate *cs) · 70 unmodified lines
524524 tasklet_init(&cs->if_wake_tasklet, if_wake, (unsigned long) cs);
525525
526526 mutex_lock(&cs->mutex);
527− cs->tty_dev = tty_register_device(drv->tty, cs->minor_index, NULL);
527+ cs->tty_dev = tty_port_register_device(&cs->port, drv->tty,
528+ cs->minor_index, NULL);
528529
529530 if (!IS_ERR(cs->tty_dev))
530531 dev_set_drvdata(cs->tty_dev, cs);
drivers/isdn/i4l/isdn_tty.c+24−17
@@ -1009,15 +1009,15 @@ isdn_tty_change_speed(modem_info *info) · 1008 unmodified lines
10091009 quot;
10101010 int i;
10111011
1012− if (!port->tty || !port->tty->termios)
1012+ if (!port->tty)
10131013 return;
1014− cflag = port->tty->termios->c_cflag;
1014+ cflag = port->tty->termios.c_cflag;
10151015
10161016 quot = i = cflag & CBAUD;
10171017 if (i & CBAUDEX) {
10181018 i &= ~CBAUDEX;
10191019 if (i < 1 || i > 2)
1020− port->tty->termios->c_cflag &= ~CBAUDEX;
1020+ port->tty->termios.c_cflag &= ~CBAUDEX;
10211021 else
10221022 i += 15;
10231023 }
@@ -1097,7 +1097,7 @@ isdn_tty_shutdown(modem_info *info) · 73 unmodified lines
10971097 #endif
10981098 isdn_unlock_drivers();
10991099 info->msr &= ~UART_MSR_RI;
1100− if (!info->port.tty || (info->port.tty->termios->c_cflag & HUPCL)) {
1100+ if (!info->port.tty || (info->port.tty->termios.c_cflag & HUPCL)) {
11011101 info->mcr &= ~(UART_MCR_DTR | UART_MCR_RTS);
11021102 if (info->emu.mdmreg[REG_DTRHUP] & BIT_DTRHUP) {
11031103 isdn_tty_modem_reset_regs(info, 0);
@@ -1469,13 +1469,13 @@ isdn_tty_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 365 unmodified lines
14691469 if (!old_termios)
14701470 isdn_tty_change_speed(info);
14711471 else {
1472− if (tty->termios->c_cflag == old_termios->c_cflag &&
1473− tty->termios->c_ispeed == old_termios->c_ispeed &&
1474− tty->termios->c_ospeed == old_termios->c_ospeed)
1472+ if (tty->termios.c_cflag == old_termios->c_cflag &&
1473+ tty->termios.c_ispeed == old_termios->c_ispeed &&
1474+ tty->termios.c_ospeed == old_termios->c_ospeed)
14751475 return;
14761476 isdn_tty_change_speed(info);
14771477 if ((old_termios->c_cflag & CRTSCTS) &&
1478− !(tty->termios->c_cflag & CRTSCTS))
1478+ !(tty->termios.c_cflag & CRTSCTS))
14791479 tty->hw_stopped = 0;
14801480 }
14811481 }
@@ -1486,6 +1486,18 @@ isdn_tty_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 4 unmodified lines
14861486 * ------------------------------------------------------------
14871487 */
14881488
1489+static int isdn_tty_install(struct tty_driver *driver, struct tty_struct *tty)
1490+{
1491+ modem_info *info = &dev->mdm.info[tty->index];
1492+
1493+ if (isdn_tty_paranoia_check(info, tty->name, __func__))
1494+ return -ENODEV;
1495+
1496+ tty->driver_data = info;
1497+
1498+ return tty_port_install(&info->port, driver, tty);
1499+}
1500+
14891501 /*
14901502 * This routine is called whenever a serial port is opened. It
14911503 * enables interrupts for a serial port, linking in its async structure into
@@ -1495,22 +1507,16 @@ isdn_tty_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 3 unmodified lines
14951507 static int
14961508 isdn_tty_open(struct tty_struct *tty, struct file *filp)
14971509 {
1498− struct tty_port *port;
1499− modem_info *info;
1510+ modem_info *info = tty->driver_data;
1511+ struct tty_port *port = &info->port;
15001512 int retval;
15011513
1502− info = &dev->mdm.info[tty->index];
1503− if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_open"))
1504− return -ENODEV;
1505− port = &info->port;
15061514 #ifdef ISDN_DEBUG_MODEM_OPEN
15071515 printk(KERN_DEBUG "isdn_tty_open %s, count = %d\n", tty->name,
15081516 port->count);
15091517 #endif
15101518 port->count++;
1511− tty->driver_data = info;
15121519 port->tty = tty;
1513− tty->port = port;
15141520 /*
15151521 * Start up serial port
15161522 */
@@ -1738,6 +1744,7 @@ modem_write_profile(atemu *m) · 221 unmodified lines
17381744 }
17391745
17401746 static const struct tty_operations modem_ops = {
1747+ .install = isdn_tty_install,
17411748 .open = isdn_tty_open,
17421749 .close = isdn_tty_close,
17431750 .write = isdn_tty_write,
@@ -1782,7 +1789,7 @@ isdn_tty_modem_init(void) · 38 unmodified lines
17821789 m->tty_modem->subtype = SERIAL_TYPE_NORMAL;
17831790 m->tty_modem->init_termios = tty_std_termios;
17841791 m->tty_modem->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1785− m->tty_modem->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1792+ m->tty_modem->flags = TTY_DRIVER_REAL_RAW;
17861793 m->tty_modem->driver_name = "isdn_tty";
17871794 tty_set_operations(m->tty_modem, &modem_ops);
17881795 retval = tty_register_driver(m->tty_modem);
drivers/misc/ibmasm/uart.c+8−8
@@ -33,7 +33,7 @@ · 32 unmodified lines
3333
3434 void ibmasm_register_uart(struct service_processor *sp)
3535 {
36− struct uart_port uport;
36+ struct uart_8250_port uart;
3737 void __iomem *iomem_base;
3838
3939 iomem_base = sp->base_address + SCOUT_COM_B_BASE;
@@ -47,14 +47,14 @@ void ibmasm_register_uart(struct service_processor *sp) · 7 unmodified lines
4747 return;
4848 }
4949
50− memset(&uport, 0, sizeof(struct uart_port));
51− uport.irq = sp->irq;
52− uport.uartclk = 3686400;
53− uport.flags = UPF_SHARE_IRQ;
54− uport.iotype = UPIO_MEM;
55− uport.membase = iomem_base;
50+ memset(&uart, 0, sizeof(uart));
51+ uart.port.irq = sp->irq;
52+ uart.port.uartclk = 3686400;
53+ uart.port.flags = UPF_SHARE_IRQ;
54+ uart.port.iotype = UPIO_MEM;
55+ uart.port.membase = iomem_base;
5656
57− sp->serial_line = serial8250_register_port(&uport);
57+ sp->serial_line = serial8250_register_8250_port(&uart);
5858 if (sp->serial_line < 0) {
5959 dev_err(sp->dev, "Failed to register serial port\n");
6060 return;
drivers/misc/pti.c+59−69
@@ -60,7 +60,7 @@ struct pti_tty { · 59 unmodified lines
6060 };
6161
6262 struct pti_dev {
63− struct tty_port port;
63+ struct tty_port port[PTITTY_MINOR_NUM];
6464 unsigned long pti_addr;
6565 unsigned long aperture_base;
6666 void __iomem *pti_ioaddr;
@@ -76,7 +76,7 @@ struct pti_dev { · 9 unmodified lines
7676 */
7777 static DEFINE_MUTEX(alloclock);
7878
79−static struct pci_device_id pci_ids[] __devinitconst = {
79+static const struct pci_device_id pci_ids[] __devinitconst = {
8080 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x82B)},
8181 {0}
8282 };
@@ -393,25 +393,6 @@ void pti_writedata(struct pti_masterchannel *mc, u8 *buf, int count) · 310 unmodified lines
393393 }
394394 EXPORT_SYMBOL_GPL(pti_writedata);
395395
396−/**
397− * pti_pci_remove()- Driver exit method to remove PTI from
398− * PCI bus.
399− * @pdev: variable containing pci info of PTI.
400− */
401−static void __devexit pti_pci_remove(struct pci_dev *pdev)
402−{
403− struct pti_dev *drv_data;
404−
405− drv_data = pci_get_drvdata(pdev);
406− if (drv_data != NULL) {
407− pci_iounmap(pdev, drv_data->pti_ioaddr);
408− pci_set_drvdata(pdev, NULL);
409− kfree(drv_data);
410− pci_release_region(pdev, 1);
411− pci_disable_device(pdev);
412− }
413−}
414−
415396 /*
416397 * for the tty_driver_*() basic function descriptions, see tty_driver.h.
417398 * Specific header comments made for PTI-related specifics.
@@ -446,7 +427,7 @@ static int pti_tty_driver_open(struct tty_struct *tty, struct file *filp) · 28 unmodified lines
446427 * also removes a locking requirement for the actual write
447428 * procedure.
448429 */
449− return tty_port_open(&drv_data->port, tty, filp);
430+ return tty_port_open(tty->port, tty, filp);
450431 }
451432
452433 /**
@@ -462,7 +443,7 @@ static int pti_tty_driver_open(struct tty_struct *tty, struct file *filp) · 9 unmodified lines
462443 */
463444 static void pti_tty_driver_close(struct tty_struct *tty, struct file *filp)
464445 {
465− tty_port_close(&drv_data->port, tty, filp);
446+ tty_port_close(tty->port, tty, filp);
466447 }
467448
468449 /**
@@ -818,6 +799,7 @@ static const struct tty_port_operations tty_port_ops = { · 349 unmodified lines
818799 static int __devinit pti_pci_probe(struct pci_dev *pdev,
819800 const struct pci_device_id *ent)
820801 {
802+ unsigned int a;
821803 int retval = -EINVAL;
822804 int pci_bar = 1;
823805
@@ -830,7 +812,7 @@ static int __devinit pti_pci_probe(struct pci_dev *pdev, · 6 unmodified lines
830812 __func__, __LINE__);
831813 pr_err("%s(%d): Error value returned: %d\n",
832814 __func__, __LINE__, retval);
833− return retval;
815+ goto err;
834816 }
835817
836818 retval = pci_enable_device(pdev);
@@ -838,17 +820,16 @@ static int __devinit pti_pci_probe(struct pci_dev *pdev, · 1 unmodified line
838820 dev_err(&pdev->dev,
839821 "%s: pci_enable_device() returned error %d\n",
840822 __func__, retval);
841− return retval;
823+ goto err_unreg_misc;
842824 }
843825
844826 drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
845−
846827 if (drv_data == NULL) {
847828 retval = -ENOMEM;
848829 dev_err(&pdev->dev,
849830 "%s(%d): kmalloc() returned NULL memory.\n",
850831 __func__, __LINE__);
851− return retval;
832+ goto err_disable_pci;
852833 }
853834 drv_data->pti_addr = pci_resource_start(pdev, pci_bar);
854835
@@ -857,33 +838,65 @@ static int __devinit pti_pci_probe(struct pci_dev *pdev, · 2 unmodified lines
857838 dev_err(&pdev->dev,
858839 "%s(%d): pci_request_region() returned error %d\n",
859840 __func__, __LINE__, retval);
860− kfree(drv_data);
861− return retval;
841+ goto err_free_dd;
862842 }
863843 drv_data->aperture_base = drv_data->pti_addr+APERTURE_14;
864844 drv_data->pti_ioaddr =
865845 ioremap_nocache((u32)drv_data->aperture_base,
866846 APERTURE_LEN);
867847 if (!drv_data->pti_ioaddr) {
868− pci_release_region(pdev, pci_bar);
869848 retval = -ENOMEM;
870− kfree(drv_data);
871− return retval;
849+ goto err_rel_reg;
872850 }
873851
874852 pci_set_drvdata(pdev, drv_data);
875853
876− tty_port_init(&drv_data->port);
877− drv_data->port.ops = &tty_port_ops;
854+ for (a = 0; a < PTITTY_MINOR_NUM; a++) {
855+ struct tty_port *port = &drv_data->port[a];
856+ tty_port_init(port);
857+ port->ops = &tty_port_ops;
878858
879− tty_register_device(pti_tty_driver, 0, &pdev->dev);
880− tty_register_device(pti_tty_driver, 1, &pdev->dev);
859+ tty_port_register_device(port, pti_tty_driver, a, &pdev->dev);
860+ }
881861
882862 register_console(&pti_console);
883863
864+ return 0;
865+err_rel_reg:
866+ pci_release_region(pdev, pci_bar);
867+err_free_dd:
868+ kfree(drv_data);
869+err_disable_pci:
870+ pci_disable_device(pdev);
871+err_unreg_misc:
872+ misc_deregister(&pti_char_driver);
873+err:
884874 return retval;
885875 }
886876
877+/**
878+ * pti_pci_remove()- Driver exit method to remove PTI from
879+ * PCI bus.
880+ * @pdev: variable containing pci info of PTI.
881+ */
882+static void __devexit pti_pci_remove(struct pci_dev *pdev)
883+{
884+ struct pti_dev *drv_data = pci_get_drvdata(pdev);
885+
886+ unregister_console(&pti_console);
887+
888+ tty_unregister_device(pti_tty_driver, 0);
889+ tty_unregister_device(pti_tty_driver, 1);
890+
891+ iounmap(drv_data->pti_ioaddr);
892+ pci_set_drvdata(pdev, NULL);
893+ kfree(drv_data);
894+ pci_release_region(pdev, 1);
895+ pci_disable_device(pdev);
896+
897+ misc_deregister(&pti_char_driver);
898+}
899+
887900 static struct pci_driver pti_pci_driver = {
888901 .name = PCINAME,
889902 .id_table = pci_ids,
@@ -933,25 +946,24 @@ static int __init pti_init(void) · 43 unmodified lines
933946 pr_err("%s(%d): Error value returned: %d\n",
934947 __func__, __LINE__, retval);
935948
936− pti_tty_driver = NULL;
937− return retval;
949+ goto put_tty;
938950 }
939951
940952 retval = pci_register_driver(&pti_pci_driver);
941−
942953 if (retval) {
943954 pr_err("%s(%d): PCI registration failed of pti driver\n",
944955 __func__, __LINE__);
945956 pr_err("%s(%d): Error value returned: %d\n",
946957 __func__, __LINE__, retval);
947−
948− tty_unregister_driver(pti_tty_driver);
949− pr_err("%s(%d): Unregistering TTY part of pti driver\n",
950− __func__, __LINE__);
951− pti_tty_driver = NULL;
952− return retval;
958+ goto unreg_tty;
953959 }
954960
961+ return 0;
962+unreg_tty:
963+ tty_unregister_driver(pti_tty_driver);
964+put_tty:
965+ put_tty_driver(pti_tty_driver);
966+ pti_tty_driver = NULL;
955967 return retval;
956968 }
957969
@@ -960,31 +972,9 @@ static int __init pti_init(void) · 2 unmodified lines
960972 */
961973 static void __exit pti_exit(void)
962974 {
963− int retval;
964−
965− tty_unregister_device(pti_tty_driver, 0);
966− tty_unregister_device(pti_tty_driver, 1);
967−
968− retval = tty_unregister_driver(pti_tty_driver);
969− if (retval) {
970− pr_err("%s(%d): TTY unregistration failed of pti driver\n",
971− __func__, __LINE__);
972− pr_err("%s(%d): Error value returned: %d\n",
973− __func__, __LINE__, retval);
974− }
975−
975+ tty_unregister_driver(pti_tty_driver);
976976 pci_unregister_driver(&pti_pci_driver);
977−
978− retval = misc_deregister(&pti_char_driver);
979− if (retval) {
980− pr_err("%s(%d): CHAR unregistration failed of pti driver\n",
981− __func__, __LINE__);
982− pr_err("%s(%d): Error value returned: %d\n",
983− __func__, __LINE__, retval);
984− }
985−
986− unregister_console(&pti_console);
987− return;
977+ put_tty_driver(pti_tty_driver);
988978 }
989979
990980 module_init(pti_init);
drivers/mmc/card/sdio_uart.c+12−12
@@ -518,7 +518,7 @@ static void sdio_uart_check_modem_status(struct sdio_uart_port *port) · 517 unmodified lines
518518 if (status & UART_MSR_DCTS) {
519519 port->icount.cts++;
520520 tty = tty_port_tty_get(&port->port);
521− if (tty && (tty->termios->c_cflag & CRTSCTS)) {
521+ if (tty && (tty->termios.c_cflag & CRTSCTS)) {
522522 int cts = (status & UART_MSR_CTS);
523523 if (tty->hw_stopped) {
524524 if (cts) {
@@ -671,12 +671,12 @@ static int sdio_uart_activate(struct tty_port *tport, struct tty_struct *tty) · 146 unmodified lines
671671 port->ier = UART_IER_RLSI|UART_IER_RDI|UART_IER_RTOIE|UART_IER_UUE;
672672 port->mctrl = TIOCM_OUT2;
673673
674− sdio_uart_change_speed(port, tty->termios, NULL);
674+ sdio_uart_change_speed(port, &tty->termios, NULL);
675675
676− if (tty->termios->c_cflag & CBAUD)
676+ if (tty->termios.c_cflag & CBAUD)
677677 sdio_uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR);
678678
679− if (tty->termios->c_cflag & CRTSCTS)
679+ if (tty->termios.c_cflag & CRTSCTS)
680680 if (!(sdio_uart_get_mctrl(port) & TIOCM_CTS))
681681 tty->hw_stopped = 1;
682682
@@ -850,7 +850,7 @@ static void sdio_uart_throttle(struct tty_struct *tty) · 167 unmodified lines
850850 {
851851 struct sdio_uart_port *port = tty->driver_data;
852852
853− if (!I_IXOFF(tty) && !(tty->termios->c_cflag & CRTSCTS))
853+ if (!I_IXOFF(tty) && !(tty->termios.c_cflag & CRTSCTS))
854854 return;
855855
856856 if (sdio_uart_claim_func(port) != 0)
@@ -861,7 +861,7 @@ static void sdio_uart_throttle(struct tty_struct *tty) · 4 unmodified lines
861861 sdio_uart_start_tx(port);
862862 }
863863
864− if (tty->termios->c_cflag & CRTSCTS)
864+ if (tty->termios.c_cflag & CRTSCTS)
865865 sdio_uart_clear_mctrl(port, TIOCM_RTS);
866866
867867 sdio_uart_irq(port->func);
@@ -872,7 +872,7 @@ static void sdio_uart_unthrottle(struct tty_struct *tty) · 4 unmodified lines
872872 {
873873 struct sdio_uart_port *port = tty->driver_data;
874874
875− if (!I_IXOFF(tty) && !(tty->termios->c_cflag & CRTSCTS))
875+ if (!I_IXOFF(tty) && !(tty->termios.c_cflag & CRTSCTS))
876876 return;
877877
878878 if (sdio_uart_claim_func(port) != 0)
@@ -887,7 +887,7 @@ static void sdio_uart_unthrottle(struct tty_struct *tty) · 8 unmodified lines
887887 }
888888 }
889889
890− if (tty->termios->c_cflag & CRTSCTS)
890+ if (tty->termios.c_cflag & CRTSCTS)
891891 sdio_uart_set_mctrl(port, TIOCM_RTS);
892892
893893 sdio_uart_irq(port->func);
@@ -898,12 +898,12 @@ static void sdio_uart_set_termios(struct tty_struct *tty, · 4 unmodified lines
898898 struct ktermios *old_termios)
899899 {
900900 struct sdio_uart_port *port = tty->driver_data;
901− unsigned int cflag = tty->termios->c_cflag;
901+ unsigned int cflag = tty->termios.c_cflag;
902902
903903 if (sdio_uart_claim_func(port) != 0)
904904 return;
905905
906− sdio_uart_change_speed(port, tty->termios, old_termios);
906+ sdio_uart_change_speed(port, &tty->termios, old_termios);
907907
908908 /* Handle transition to B0 status */
909909 if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD))
@@ -1132,8 +1132,8 @@ static int sdio_uart_probe(struct sdio_func *func, · 222 unmodified lines
11321132 kfree(port);
11331133 } else {
11341134 struct device *dev;
1135− dev = tty_register_device(sdio_uart_tty_driver,
1136− port->index, &func->dev);
1135+ dev = tty_port_register_device(&port->port,
1136+ sdio_uart_tty_driver, port->index, &func->dev);
11371137 if (IS_ERR(dev)) {
11381138 sdio_uart_port_remove(port);
11391139 ret = PTR_ERR(dev);
drivers/net/ethernet/sgi/ioc3-eth.c+12−10
@@ -1147,15 +1147,17 @@ static void __devinit ioc3_8250_register(struct ioc3_uartregs __iomem *uart) · 1146 unmodified lines
11471147 {
11481148 #define COSMISC_CONSTANT 6
11491149
1150− struct uart_port port = {
1151− .irq = 0,
1152− .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
1153− .iotype = UPIO_MEM,
1154− .regshift = 0,
1155− .uartclk = (22000000 << 1) / COSMISC_CONSTANT,
1156−
1157− .membase = (unsigned char __iomem *) uart,
1158− .mapbase = (unsigned long) uart,
1150+ struct uart_8250_port port = {
1151+ .port = {
1152+ .irq = 0,
1153+ .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
1154+ .iotype = UPIO_MEM,
1155+ .regshift = 0,
1156+ .uartclk = (22000000 << 1) / COSMISC_CONSTANT,
1157+
1158+ .membase = (unsigned char __iomem *) uart,
1159+ .mapbase = (unsigned long) uart,
1160+ }
11591161 };
11601162 unsigned char lcr;
11611163
@@ -1164,7 +1166,7 @@ static void __devinit ioc3_8250_register(struct ioc3_uartregs __iomem *uart) · 2 unmodified lines
11641166 uart->iu_scr = COSMISC_CONSTANT,
11651167 uart->iu_lcr = lcr;
11661168 uart->iu_lcr;
1167− serial8250_register_port(&port);
1169+ serial8250_register_8250_port(&port);
11681170 }
11691171
11701172 static void __devinit ioc3_serial_probe(struct pci_dev *pdev, struct ioc3 *ioc3)
drivers/net/irda/irtty-sir.c+5−5
@@ -124,8 +124,8 @@ static int irtty_change_speed(struct sir_dev *dev, unsigned speed) · 123 unmodified lines
124124 tty = priv->tty;
125125
126126 mutex_lock(&tty->termios_mutex);
127− old_termios = *(tty->termios);
128− cflag = tty->termios->c_cflag;
127+ old_termios = tty->termios;
128+ cflag = tty->termios.c_cflag;
129129 tty_encode_baud_rate(tty, speed, speed);
130130 if (tty->ops->set_termios)
131131 tty->ops->set_termios(tty, &old_termios);
@@ -281,15 +281,15 @@ static inline void irtty_stop_receiver(struct tty_struct *tty, int stop) · 149 unmodified lines
281281 int cflag;
282282
283283 mutex_lock(&tty->termios_mutex);
284− old_termios = *(tty->termios);
285− cflag = tty->termios->c_cflag;
284+ old_termios = tty->termios;
285+ cflag = tty->termios.c_cflag;
286286
287287 if (stop)
288288 cflag &= ~CREAD;
289289 else
290290 cflag |= CREAD;
291291
292− tty->termios->c_cflag = cflag;
292+ tty->termios.c_cflag = cflag;
293293 if (tty->ops->set_termios)
294294 tty->ops->set_termios(tty, &old_termios);
295295 mutex_unlock(&tty->termios_mutex);
drivers/net/usb/hso.c+9−10
@@ -1107,7 +1107,6 @@ static void _hso_serial_set_termios(struct tty_struct *tty, · 1106 unmodified lines
11071107 struct ktermios *old)
11081108 {
11091109 struct hso_serial *serial = tty->driver_data;
1110− struct ktermios *termios;
11111110
11121111 if (!serial) {
11131112 printk(KERN_ERR "%s: no tty structures", __func__);
@@ -1119,16 +1118,15 @@ static void _hso_serial_set_termios(struct tty_struct *tty, · 5 unmodified lines
11191118 /*
11201119 * Fix up unsupported bits
11211120 */
1122− termios = tty->termios;
1123− termios->c_iflag &= ~IXON; /* disable enable XON/XOFF flow control */
1121+ tty->termios.c_iflag &= ~IXON; /* disable enable XON/XOFF flow control */
11241122
1125− termios->c_cflag &=
1123+ tty->termios.c_cflag &=
11261124 ~(CSIZE /* no size */
11271125 | PARENB /* disable parity bit */
11281126 | CBAUD /* clear current baud rate */
11291127 | CBAUDEX); /* clear current buad rate */
11301128
1131− termios->c_cflag |= CS8; /* character size 8 bits */
1129+ tty->termios.c_cflag |= CS8; /* character size 8 bits */
11321130
11331131 /* baud rate 115200 */
11341132 tty_encode_baud_rate(tty, 115200, 115200);
@@ -1425,14 +1423,14 @@ static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old) · 290 unmodified lines
14251423
14261424 if (old)
14271425 D5("Termios called with: cflags new[%d] - old[%d]",
1428− tty->termios->c_cflag, old->c_cflag);
1426+ tty->termios.c_cflag, old->c_cflag);
14291427
14301428 /* the actual setup */
14311429 spin_lock_irqsave(&serial->serial_lock, flags);
14321430 if (serial->port.count)
14331431 _hso_serial_set_termios(tty, old);
14341432 else
1435− tty->termios = old;
1433+ tty->termios = *old;
14361434 spin_unlock_irqrestore(&serial->serial_lock, flags);
14371435
14381436 /* done */
@@ -2289,9 +2287,11 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs, · 850 unmodified lines
22892287 if (minor < 0)
22902288 goto exit;
22912289
2290+ tty_port_init(&serial->port);
2291+
22922292 /* register our minor number */
2293− serial->parent->dev = tty_register_device(tty_drv, minor,
2294− &serial->parent->interface->dev);
2293+ serial->parent->dev = tty_port_register_device(&serial->port, tty_drv,
2294+ minor, &serial->parent->interface->dev);
22952295 dev = serial->parent->dev;
22962296 dev_set_drvdata(dev, serial->parent);
22972297 i = device_create_file(dev, &dev_attr_hsotype);
@@ -2300,7 +2300,6 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs, · 2 unmodified lines
23002300 serial->minor = minor;
23012301 serial->magic = HSO_SERIAL_MAGIC;
23022302 spin_lock_init(&serial->serial_lock);
2303− tty_port_init(&serial->port);
23042303 serial->num_rx_urbs = num_urbs;
23052304
23062305 /* RX, allocate urb and initialize */
drivers/parport/parport_gsc.c+1−0
@@ -271,6 +271,7 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base, · 270 unmodified lines
271271 if (!parport_SPP_supported (p)) {
272272 /* No port. */
273273 kfree (priv);
274+ kfree(ops);
274275 return NULL;
275276 }
276277 parport_PS2_supported (p);
drivers/parport/parport_serial.c+10−1
@@ -62,6 +62,7 @@ enum parport_pc_pci_cards { · 61 unmodified lines
6262 timedia_9079a,
6363 timedia_9079b,
6464 timedia_9079c,
65+ wch_ch353_2s1p,
6566 };
6667
6768 /* each element directly indexed from enum list, above */
@@ -145,6 +146,7 @@ static struct parport_pc_pci cards[] __devinitdata = { · 77 unmodified lines
145146 /* timedia_9079a */ { 1, { { 2, 3 }, } },
146147 /* timedia_9079b */ { 1, { { 2, 3 }, } },
147148 /* timedia_9079c */ { 1, { { 2, 3 }, } },
149+ /* wch_ch353_2s1p*/ { 1, { { 2, -1}, } },
148150 };
149151
150152 static struct pci_device_id parport_serial_pci_tbl[] = {
@@ -243,7 +245,8 @@ static struct pci_device_id parport_serial_pci_tbl[] = { · 92 unmodified lines
243245 { 0x1409, 0x7168, 0x1409, 0xb079, 0, 0, timedia_9079a },
244246 { 0x1409, 0x7168, 0x1409, 0xc079, 0, 0, timedia_9079b },
245247 { 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },
246−
248+ /* WCH CARDS */
249+ { 0x4348, 0x7053, 0x4348, 0x3253, 0, 0, wch_ch353_2s1p},
247250 { 0, } /* terminate list */
248251 };
249252 MODULE_DEVICE_TABLE(pci,parport_serial_pci_tbl);
@@ -460,6 +463,12 @@ static struct pciserial_board pci_parport_serial_boards[] __devinitdata = { · 210 unmodified lines
460463 .base_baud = 921600,
461464 .uart_offset = 8,
462465 },
466+ [wch_ch353_2s1p] = {
467+ .flags = FL_BASE0|FL_BASE_BARS,
468+ .num_ports = 2,
469+ .base_baud = 115200,
470+ .uart_offset = 8,
471+ },
463472 };
464473
465474 struct parport_serial_private {
drivers/s390/char/con3215.c+22−6
@@ -716,10 +716,17 @@ static int raw3215_probe (struct ccw_device *cdev) · 715 unmodified lines
716716 static void raw3215_remove (struct ccw_device *cdev)
717717 {
718718 struct raw3215_info *raw;
719+ unsigned int line;
719720
720721 ccw_device_set_offline(cdev);
721722 raw = dev_get_drvdata(&cdev->dev);
722723 if (raw) {
724+ spin_lock(&raw3215_device_lock);
725+ for (line = 0; line < NR_3215; line++)
726+ if (raw3215[line] == raw)
727+ break;
728+ raw3215[line] = NULL;
729+ spin_unlock(&raw3215_device_lock);
723730 dev_set_drvdata(&cdev->dev, NULL);
724731 raw3215_free_info(raw);
725732 }
@@ -935,6 +942,19 @@ static int __init con3215_init(void) · 209 unmodified lines
935942 console_initcall(con3215_init);
936943 #endif
937944
945+static int tty3215_install(struct tty_driver *driver, struct tty_struct *tty)
946+{
947+ struct raw3215_info *raw;
948+
949+ raw = raw3215[tty->index];
950+ if (raw == NULL)
951+ return -ENODEV;
952+
953+ tty->driver_data = raw;
954+
955+ return tty_port_install(&raw->port, driver, tty);
956+}
957+
938958 /*
939959 * tty3215_open
940960 *
@@ -942,14 +962,9 @@ console_initcall(con3215_init); · 1 unmodified line
942962 */
943963 static int tty3215_open(struct tty_struct *tty, struct file * filp)
944964 {
945− struct raw3215_info *raw;
965+ struct raw3215_info *raw = tty->driver_data;
946966 int retval;
947967
948− raw = raw3215[tty->index];
949− if (raw == NULL)
950− return -ENODEV;
951−
952− tty->driver_data = raw;
953968 tty_port_tty_set(&raw->port, tty);
954969
955970 tty->low_latency = 0; /* don't use bottom half for pushing chars */
@@ -1110,6 +1125,7 @@ static void tty3215_start(struct tty_struct *tty) · 154 unmodified lines
11101125 }
11111126
11121127 static const struct tty_operations tty3215_ops = {
1128+ .install = tty3215_install,
11131129 .open = tty3215_open,
11141130 .close = tty3215_close,
11151131 .write = tty3215_write,
drivers/s390/char/sclp_tty.c+1−0
@@ -567,6 +567,7 @@ sclp_tty_init(void) · 566 unmodified lines
567567 driver->init_termios.c_lflag = ISIG | ECHO;
568568 driver->flags = TTY_DRIVER_REAL_RAW;
569569 tty_set_operations(driver, &sclp_ops);
570+ tty_port_link_device(&sclp_port, driver, 0);
570571 rc = tty_register_driver(driver);
571572 if (rc) {
572573 put_tty_driver(driver);
drivers/s390/char/sclp_vt220.c+1−0
@@ -691,6 +691,7 @@ static int __init sclp_vt220_tty_init(void) · 690 unmodified lines
691691 driver->init_termios = tty_std_termios;
692692 driver->flags = TTY_DRIVER_REAL_RAW;
693693 tty_set_operations(driver, &sclp_vt220_ops);
694+ tty_port_link_device(&sclp_vt220_port, driver, 0);
694695
695696 rc = tty_register_driver(driver);
696697 if (rc)
drivers/s390/char/tty3270.c+24−10
@@ -842,17 +842,14 @@ static struct raw3270_fn tty3270_fn = { · 841 unmodified lines
842842 };
843843
844844 /*
845− * This routine is called whenever a 3270 tty is opened.
845+ * This routine is called whenever a 3270 tty is opened first time.
846846 */
847−static int
848−tty3270_open(struct tty_struct *tty, struct file * filp)
847+static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)
849848 {
850849 struct raw3270_view *view;
851850 struct tty3270 *tp;
852851 int i, rc;
853852
854− if (tty->count > 1)
855− return 0;
856853 /* Check if the tty3270 is already there. */
857854 view = raw3270_find_view(&tty3270_fn,
858855 tty->index + RAW3270_FIRSTMINOR);
@@ -865,7 +862,7 @@ tty3270_open(struct tty_struct *tty, struct file * filp) · 6 unmodified lines
865862 /* why to reassign? */
866863 tty_port_tty_set(&tp->port, tty);
867864 tp->inattr = TF_INPUT;
868− return 0;
865+ return tty_port_install(&tp->port, driver, tty);
869866 }
870867 if (tty3270_max_index < tty->index + 1)
871868 tty3270_max_index = tty->index + 1;
@@ -895,7 +892,6 @@ tty3270_open(struct tty_struct *tty, struct file * filp) · 23 unmodified lines
895892
896893 tty_port_tty_set(&tp->port, tty);
897894 tty->low_latency = 0;
898− tty->driver_data = tp;
899895 tty->winsize.ws_row = tp->view.rows - 2;
900896 tty->winsize.ws_col = tp->view.cols;
901897
@@ -915,6 +911,15 @@ tty3270_open(struct tty_struct *tty, struct file * filp) · 13 unmodified lines
915911 kbd_ascebc(tp->kbd, tp->view.ascebc);
916912
917913 raw3270_activate_view(&tp->view);
914+
915+ rc = tty_port_install(&tp->port, driver, tty);
916+ if (rc) {
917+ raw3270_put_view(&tp->view);
918+ return rc;
919+ }
920+
921+ tty->driver_data = tp;
922+
918923 return 0;
919924 }
920925
@@ -932,10 +937,17 @@ tty3270_close(struct tty_struct *tty, struct file * filp) · 11 unmodified lines
932937 if (tp) {
933938 tty->driver_data = NULL;
934939 tty_port_tty_set(&tp->port, NULL);
935− raw3270_put_view(&tp->view);
936940 }
937941 }
938942
943+static void tty3270_cleanup(struct tty_struct *tty)
944+{
945+ struct tty3270 *tp = tty->driver_data;
946+
947+ if (tp)
948+ raw3270_put_view(&tp->view);
949+}
950+
939951 /*
940952 * We always have room.
941953 */
@@ -1737,7 +1749,8 @@ static long tty3270_compat_ioctl(struct tty_struct *tty, · 795 unmodified lines
17371749 #endif
17381750
17391751 static const struct tty_operations tty3270_ops = {
1740− .open = tty3270_open,
1752+ .install = tty3270_install,
1753+ .cleanup = tty3270_cleanup,
17411754 .close = tty3270_close,
17421755 .write = tty3270_write,
17431756 .put_char = tty3270_put_char,
@@ -1781,7 +1794,7 @@ static int __init tty3270_init(void) · 37 unmodified lines
17811794 driver->type = TTY_DRIVER_TYPE_SYSTEM;
17821795 driver->subtype = SYSTEM_TYPE_TTY;
17831796 driver->init_termios = tty_std_termios;
1784− driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_DYNAMIC_DEV;
1797+ driver->flags = TTY_DRIVER_RESET_TERMIOS;
17851798 tty_set_operations(driver, &tty3270_ops);
17861799 ret = tty_register_driver(driver);
17871800 if (ret) {
@@ -1800,6 +1813,7 @@ tty3270_exit(void) · 12 unmodified lines
18001813 driver = tty3270_driver;
18011814 tty3270_driver = NULL;
18021815 tty_unregister_driver(driver);
1816+ put_tty_driver(driver);
18031817 tty3270_del_views();
18041818 }
18051819
drivers/staging/ipack/devices/ipoctal.c+7−7
@@ -502,7 +502,7 @@ static int ipoctal_inst_slot(struct ipoctal *ipoctal, unsigned int bus_nr, · 501 unmodified lines
502502 ipoctal->pointer_read[i] = 0;
503503 ipoctal->pointer_write[i] = 0;
504504 ipoctal->nb_bytes[i] = 0;
505− tty_register_device(tty, i, NULL);
505+ tty_port_register_device(&ipoctal->tty_port[i], tty, i, NULL);
506506
507507 /*
508508 * Enable again the RX. TX will be enabled when
@@ -617,7 +617,7 @@ static void ipoctal_set_termios(struct tty_struct *tty, · 108 unmodified lines
617617 struct ipoctal *ipoctal = tty->driver_data;
618618 speed_t baud;
619619
620− cflag = tty->termios->c_cflag;
620+ cflag = tty->termios.c_cflag;
621621
622622 /* Disable and reset everything before change the setup */
623623 ipoctal_write_io_reg(ipoctal, &ipoctal->chan_regs[channel].u.w.cr,
@@ -643,7 +643,7 @@ static void ipoctal_set_termios(struct tty_struct *tty, · 19 unmodified lines
643643 default:
644644 mr1 |= MR1_CHRL_8_BITS;
645645 /* By default, select CS8 */
646− tty->termios->c_cflag = (cflag & ~CSIZE) | CS8;
646+ tty->termios.c_cflag = (cflag & ~CSIZE) | CS8;
647647 break;
648648 }
649649
@@ -657,7 +657,7 @@ static void ipoctal_set_termios(struct tty_struct *tty, · 7 unmodified lines
657657 mr1 |= MR1_PARITY_OFF;
658658
659659 /* Mark or space parity is not supported */
660− tty->termios->c_cflag &= ~CMSPAR;
660+ tty->termios.c_cflag &= ~CMSPAR;
661661
662662 /* Set stop bits */
663663 if (cflag & CSTOPB)
@@ -690,10 +690,10 @@ static void ipoctal_set_termios(struct tty_struct *tty, · 26 unmodified lines
690690 }
691691
692692 baud = tty_get_baud_rate(tty);
693− tty_termios_encode_baud_rate(tty->termios, baud, baud);
693+ tty_termios_encode_baud_rate(&tty->termios, baud, baud);
694694
695695 /* Set baud rate */
696− switch (tty->termios->c_ospeed) {
696+ switch (baud) {
697697 case 75:
698698 csr |= TX_CLK_75 | RX_CLK_75;
699699 break;
@@ -734,7 +734,7 @@ static void ipoctal_set_termios(struct tty_struct *tty, · 34 unmodified lines
734734 default:
735735 csr |= TX_CLK_38400 | RX_CLK_38400;
736736 /* In case of default, we establish 38400 bps */
737− tty_termios_encode_baud_rate(tty->termios, 38400, 38400);
737+ tty_termios_encode_baud_rate(&tty->termios, 38400, 38400);
738738 break;
739739 }
740740
drivers/staging/serqt_usb2/serqt_usb2.c+8−10
@@ -315,10 +315,8 @@ static void qt_read_bulk_callback(struct urb *urb) · 314 unmodified lines
315315 }
316316
317317 tty = tty_port_tty_get(&port->port);
318− if (!tty) {
319− dbg("%s - bad tty pointer - exiting", __func__);
318+ if (!tty)
320319 return;
321− }
322320
323321 data = urb->transfer_buffer;
324322
@@ -364,7 +362,7 @@ static void qt_read_bulk_callback(struct urb *urb) · 39 unmodified lines
364362 goto exit;
365363 }
366364
367− if (tty && RxCount) {
365+ if (RxCount) {
368366 flag_data = 0;
369367 for (i = 0; i < RxCount; ++i) {
370368 /* Look ahead code here */
@@ -428,7 +426,7 @@ static void qt_read_bulk_callback(struct urb *urb) · 57 unmodified lines
428426 dbg("%s - failed resubmitting read urb, error %d",
429427 __func__, result);
430428 else {
431− if (tty && RxCount) {
429+ if (RxCount) {
432430 tty_flip_buffer_push(tty);
433431 tty_schedule_flip(tty);
434432 }
@@ -897,8 +895,6 @@ static int qt_open(struct tty_struct *tty, · 462 unmodified lines
897895 * Put this here to make it responsive to stty and defaults set by
898896 * the tty layer
899897 */
900− /* FIXME: is this needed? */
901− /* qt_set_termios(tty, port, NULL); */
902898
903899 /* Check to see if we've set up our endpoint info yet */
904900 if (port0->open_ports == 1) {
@@ -1195,7 +1191,7 @@ static void qt_set_termios(struct tty_struct *tty, · 290 unmodified lines
11951191 struct usb_serial_port *port,
11961192 struct ktermios *old_termios)
11971193 {
1198− struct ktermios *termios = tty->termios;
1194+ struct ktermios *termios = &tty->termios;
11991195 unsigned char new_LCR = 0;
12001196 unsigned int cflag = termios->c_cflag;
12011197 unsigned int index;
@@ -1204,7 +1200,7 @@ static void qt_set_termios(struct tty_struct *tty, · 2 unmodified lines
12041200
12051201 index = tty->index - port->serial->minor;
12061202
1207− switch (cflag) {
1203+ switch (cflag & CSIZE) {
12081204 case CS5:
12091205 new_LCR |= SERIAL_5_DATA;
12101206 break;
@@ -1215,6 +1211,8 @@ static void qt_set_termios(struct tty_struct *tty, · 4 unmodified lines
12151211 new_LCR |= SERIAL_7_DATA;
12161212 break;
12171213 default:
1214+ termios->c_cflag &= ~CSIZE;
1215+ termios->c_cflag |= CS8;
12181216 case CS8:
12191217 new_LCR |= SERIAL_8_DATA;
12201218 break;
@@ -1301,7 +1299,7 @@ static void qt_set_termios(struct tty_struct *tty, · 80 unmodified lines
13011299 dbg(__FILE__ "BoxSetSW_FlowCtrl (diabling) failed\n");
13021300
13031301 }
1304− tty->termios->c_cflag &= ~CMSPAR;
1302+ termios->c_cflag &= ~CMSPAR;
13051303 /* FIXME: Error cases should be returning the actual bits changed only */
13061304 }
13071305
drivers/staging/speakup/serialio.h+1−2
@@ -1,8 +1,7 @@
11 #ifndef _SPEAKUP_SERIAL_H
22 #define _SPEAKUP_SERIAL_H
33
4−#include <linux/serial.h> /* for rs_table, serial constants &
5− serial_uart_config */
4+#include <linux/serial.h> /* for rs_table, serial constants */
65 #include <linux/serial_reg.h> /* for more serial constants */
76 #ifndef __sparc__
87 #include <asm/serial.h>
drivers/tty/amiserial.c+23−22
@@ -420,7 +420,7 @@ static void check_modem_status(struct serial_state *info) · 419 unmodified lines
420420 tty_hangup(port->tty);
421421 }
422422 }
423− if (port->flags & ASYNC_CTS_FLOW) {
423+ if (tty_port_cts_enabled(port)) {
424424 if (port->tty->hw_stopped) {
425425 if (!(status & SER_CTS)) {
426426 #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
@@ -646,7 +646,7 @@ static void shutdown(struct tty_struct *tty, struct serial_state *info) · 219 unmodified lines
646646 custom.adkcon = AC_UARTBRK;
647647 mb();
648648
649− if (tty->termios->c_cflag & HUPCL)
649+ if (tty->termios.c_cflag & HUPCL)
650650 info->MCR &= ~(SER_DTR|SER_RTS);
651651 rtsdtr_ctrl(info->MCR);
652652
@@ -670,7 +670,7 @@ static void change_speed(struct tty_struct *tty, struct serial_state *info, · 17 unmodified lines
670670 int bits;
671671 unsigned long flags;
672672
673− cflag = tty->termios->c_cflag;
673+ cflag = tty->termios.c_cflag;
674674
675675 /* Byte size is always 8 bits plus parity bit if requested */
676676
@@ -707,8 +707,8 @@ static void change_speed(struct tty_struct *tty, struct serial_state *info, · 30 unmodified lines
707707 /* If the quotient is zero refuse the change */
708708 if (!quot && old_termios) {
709709 /* FIXME: Will need updating for new tty in the end */
710− tty->termios->c_cflag &= ~CBAUD;
711− tty->termios->c_cflag |= (old_termios->c_cflag & CBAUD);
710+ tty->termios.c_cflag &= ~CBAUD;
711+ tty->termios.c_cflag |= (old_termios->c_cflag & CBAUD);
712712 baud = tty_get_baud_rate(tty);
713713 if (!baud)
714714 baud = 9600;
@@ -984,7 +984,7 @@ static void rs_throttle(struct tty_struct * tty) · 269 unmodified lines
984984 if (I_IXOFF(tty))
985985 rs_send_xchar(tty, STOP_CHAR(tty));
986986
987− if (tty->termios->c_cflag & CRTSCTS)
987+ if (tty->termios.c_cflag & CRTSCTS)
988988 info->MCR &= ~SER_RTS;
989989
990990 local_irq_save(flags);
@@ -1012,7 +1012,7 @@ static void rs_unthrottle(struct tty_struct * tty) · 21 unmodified lines
10121012 else
10131013 rs_send_xchar(tty, START_CHAR(tty));
10141014 }
1015− if (tty->termios->c_cflag & CRTSCTS)
1015+ if (tty->termios.c_cflag & CRTSCTS)
10161016 info->MCR |= SER_RTS;
10171017 local_irq_save(flags);
10181018 rtsdtr_ctrl(info->MCR);
@@ -1033,7 +1033,7 @@ static int get_serial_info(struct tty_struct *tty, struct serial_state *state, · 14 unmodified lines
10331033 if (!retinfo)
10341034 return -EFAULT;
10351035 memset(&tmp, 0, sizeof(tmp));
1036− tty_lock();
1036+ tty_lock(tty);
10371037 tmp.line = tty->index;
10381038 tmp.port = state->port;
10391039 tmp.flags = state->tport.flags;
@@ -1042,7 +1042,7 @@ static int get_serial_info(struct tty_struct *tty, struct serial_state *state, · 2 unmodified lines
10421042 tmp.close_delay = state->tport.close_delay;
10431043 tmp.closing_wait = state->tport.closing_wait;
10441044 tmp.custom_divisor = state->custom_divisor;
1045− tty_unlock();
1045+ tty_unlock(tty);
10461046 if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
10471047 return -EFAULT;
10481048 return 0;
@@ -1059,12 +1059,12 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state, · 10 unmodified lines
10591059 if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))
10601060 return -EFAULT;
10611061
1062− tty_lock();
1062+ tty_lock(tty);
10631063 change_spd = ((new_serial.flags ^ port->flags) & ASYNC_SPD_MASK) ||
10641064 new_serial.custom_divisor != state->custom_divisor;
10651065 if (new_serial.irq || new_serial.port != state->port ||
10661066 new_serial.xmit_fifo_size != state->xmit_fifo_size) {
1067− tty_unlock();
1067+ tty_unlock(tty);
10681068 return -EINVAL;
10691069 }
10701070
@@ -1074,7 +1074,7 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state, · 3 unmodified lines
10741074 (new_serial.xmit_fifo_size != state->xmit_fifo_size) ||
10751075 ((new_serial.flags & ~ASYNC_USR_MASK) !=
10761076 (port->flags & ~ASYNC_USR_MASK))) {
1077− tty_unlock();
1077+ tty_unlock(tty);
10781078 return -EPERM;
10791079 }
10801080 port->flags = ((port->flags & ~ASYNC_USR_MASK) |
@@ -1084,7 +1084,7 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state, · 3 unmodified lines
10841084 }
10851085
10861086 if (new_serial.baud_base < 9600) {
1087− tty_unlock();
1087+ tty_unlock(tty);
10881088 return -EINVAL;
10891089 }
10901090
@@ -1116,7 +1116,7 @@ check_and_exit: · 25 unmodified lines
11161116 }
11171117 } else
11181118 retval = startup(tty, state);
1119− tty_unlock();
1119+ tty_unlock(tty);
11201120 return retval;
11211121 }
11221122
@@ -1330,7 +1330,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 207 unmodified lines
13301330 {
13311331 struct serial_state *info = tty->driver_data;
13321332 unsigned long flags;
1333− unsigned int cflag = tty->termios->c_cflag;
1333+ unsigned int cflag = tty->termios.c_cflag;
13341334
13351335 change_speed(tty, info, old_termios);
13361336
@@ -1347,7 +1347,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 10 unmodified lines
13471347 if (!(old_termios->c_cflag & CBAUD) &&
13481348 (cflag & CBAUD)) {
13491349 info->MCR |= SER_DTR;
1350− if (!(tty->termios->c_cflag & CRTSCTS) ||
1350+ if (!(tty->termios.c_cflag & CRTSCTS) ||
13511351 !test_bit(TTY_THROTTLED, &tty->flags)) {
13521352 info->MCR |= SER_RTS;
13531353 }
@@ -1358,7 +1358,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 4 unmodified lines
13581358
13591359 /* Handle turning off CRTSCTS */
13601360 if ((old_termios->c_cflag & CRTSCTS) &&
1361− !(tty->termios->c_cflag & CRTSCTS)) {
1361+ !(tty->termios.c_cflag & CRTSCTS)) {
13621362 tty->hw_stopped = 0;
13631363 rs_start(tty);
13641364 }
@@ -1371,7 +1371,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 6 unmodified lines
13711371 * or not. Hence, this may change.....
13721372 */
13731373 if (!(old_termios->c_cflag & CLOCAL) &&
1374− (tty->termios->c_cflag & CLOCAL))
1374+ (tty->termios.c_cflag & CLOCAL))
13751375 wake_up_interruptible(&info->open_wait);
13761376 #endif
13771377 }
@@ -1710,10 +1710,6 @@ static int __init amiga_serial_probe(struct platform_device *pdev) · 332 unmodified lines
17101710 serial_driver->flags = TTY_DRIVER_REAL_RAW;
17111711 tty_set_operations(serial_driver, &serial_ops);
17121712
1713− error = tty_register_driver(serial_driver);
1714− if (error)
1715− goto fail_put_tty_driver;
1716−
17171713 state = rs_table;
17181714 state->port = (int)&custom.serdatr; /* Just to give it a value */
17191715 state->custom_divisor = 0;
@@ -1724,6 +1720,11 @@ static int __init amiga_serial_probe(struct platform_device *pdev) · 4 unmodified lines
17241720 state->icount.overrun = state->icount.brk = 0;
17251721 tty_port_init(&state->tport);
17261722 state->tport.ops = &amiga_port_ops;
1723+ tty_port_link_device(&state->tport, serial_driver, 0);
1724+
1725+ error = tty_register_driver(serial_driver);
1726+ if (error)
1727+ goto fail_put_tty_driver;
17271728
17281729 printk(KERN_INFO "ttyS0 is the amiga builtin serial port\n");
17291730
drivers/tty/bfin_jtag_comm.c+1−0
@@ -263,6 +263,7 @@ static int __init bfin_jc_init(void) · 262 unmodified lines
263263 bfin_jc_driver->subtype = SERIAL_TYPE_NORMAL;
264264 bfin_jc_driver->init_termios = tty_std_termios;
265265 tty_set_operations(bfin_jc_driver, &bfin_jc_ops);
266+ tty_port_link_device(&port, bfin_jc_driver, 0);
266267
267268 ret = tty_register_driver(bfin_jc_driver);
268269 if (ret)
drivers/tty/cyclades.c+52−50
@@ -727,7 +727,7 @@ static void cyy_chip_modem(struct cyclades_card *cinfo, int chip, · 726 unmodified lines
727727 else
728728 tty_hangup(tty);
729729 }
730− if ((mdm_change & CyCTS) && (info->port.flags & ASYNC_CTS_FLOW)) {
730+ if ((mdm_change & CyCTS) && tty_port_cts_enabled(&info->port)) {
731731 if (tty->hw_stopped) {
732732 if (mdm_status & CyCTS) {
733733 /* cy_start isn't used
@@ -1459,7 +1459,7 @@ static void cy_shutdown(struct cyclades_port *info, struct tty_struct *tty) · 725 unmodified lines
14591459 info->port.xmit_buf = NULL;
14601460 free_page((unsigned long)temp);
14611461 }
1462− if (tty->termios->c_cflag & HUPCL)
1462+ if (tty->termios.c_cflag & HUPCL)
14631463 cyy_change_rts_dtr(info, 0, TIOCM_RTS | TIOCM_DTR);
14641464
14651465 cyy_issue_cmd(info, CyCHAN_CTL | CyDIS_RCVR);
@@ -1488,7 +1488,7 @@ static void cy_shutdown(struct cyclades_port *info, struct tty_struct *tty) · 22 unmodified lines
14881488 free_page((unsigned long)temp);
14891489 }
14901490
1491− if (tty->termios->c_cflag & HUPCL)
1491+ if (tty->termios.c_cflag & HUPCL)
14921492 tty_port_lower_dtr_rts(&info->port);
14931493
14941494 set_bit(TTY_IO_ERROR, &tty->flags);
@@ -1599,7 +1599,7 @@ static int cy_open(struct tty_struct *tty, struct file *filp) · 104 unmodified lines
15991599 * If the port is the middle of closing, bail out now
16001600 */
16011601 if (tty_hung_up_p(filp) || (info->port.flags & ASYNC_CLOSING)) {
1602− wait_event_interruptible_tty(info->port.close_wait,
1602+ wait_event_interruptible_tty(tty, info->port.close_wait,
16031603 !(info->port.flags & ASYNC_CLOSING));
16041604 return (info->port.flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS;
16051605 }
@@ -1999,14 +1999,11 @@ static void cy_set_line_char(struct cyclades_port *info, struct tty_struct *tty) · 393 unmodified lines
19991999 int baud, baud_rate = 0;
20002000 int i;
20012001
2002− if (!tty->termios) /* XXX can this happen at all? */
2003− return;
2004−
20052002 if (info->line == -1)
20062003 return;
20072004
2008− cflag = tty->termios->c_cflag;
2009− iflag = tty->termios->c_iflag;
2005+ cflag = tty->termios.c_cflag;
2006+ iflag = tty->termios.c_iflag;
20102007
20112008 /*
20122009 * Set up the tty->alt_speed kludge
@@ -2825,7 +2822,7 @@ static void cy_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 812 unmodified lines
28252822 cy_set_line_char(info, tty);
28262823
28272824 if ((old_termios->c_cflag & CRTSCTS) &&
2828− !(tty->termios->c_cflag & CRTSCTS)) {
2825+ !(tty->termios.c_cflag & CRTSCTS)) {
28292826 tty->hw_stopped = 0;
28302827 cy_start(tty);
28312828 }
@@ -2837,7 +2834,7 @@ static void cy_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 5 unmodified lines
28372834 * or not. Hence, this may change.....
28382835 */
28392836 if (!(old_termios->c_cflag & CLOCAL) &&
2840− (tty->termios->c_cflag & CLOCAL))
2837+ (tty->termios.c_cflag & CLOCAL))
28412838 wake_up_interruptible(&info->port.open_wait);
28422839 #endif
28432840 } /* cy_set_termios */
@@ -2899,7 +2896,7 @@ static void cy_throttle(struct tty_struct *tty) · 55 unmodified lines
28992896 info->throttle = 1;
29002897 }
29012898
2902− if (tty->termios->c_cflag & CRTSCTS) {
2899+ if (tty->termios.c_cflag & CRTSCTS) {
29032900 if (!cy_is_Z(card)) {
29042901 spin_lock_irqsave(&card->card_lock, flags);
29052902 cyy_change_rts_dtr(info, 0, TIOCM_RTS);
@@ -2938,7 +2935,7 @@ static void cy_unthrottle(struct tty_struct *tty) · 32 unmodified lines
29382935 cy_send_xchar(tty, START_CHAR(tty));
29392936 }
29402937
2941− if (tty->termios->c_cflag & CRTSCTS) {
2938+ if (tty->termios.c_cflag & CRTSCTS) {
29422939 card = info->card;
29432940 if (!cy_is_Z(card)) {
29442941 spin_lock_irqsave(&card->card_lock, flags);
@@ -3289,9 +3286,10 @@ static unsigned short __devinit cyy_init_card(void __iomem *true_base_addr, · 344 unmodified lines
32893286 static int __init cy_detect_isa(void)
32903287 {
32913288 #ifdef CONFIG_ISA
3289+ struct cyclades_card *card;
32923290 unsigned short cy_isa_irq, nboard;
32933291 void __iomem *cy_isa_address;
3294− unsigned short i, j, cy_isa_nchan;
3292+ unsigned short i, j, k, cy_isa_nchan;
32953293 int isparam = 0;
32963294
32973295 nboard = 0;
@@ -3349,7 +3347,8 @@ static int __init cy_detect_isa(void) · 51 unmodified lines
33493347 }
33503348 /* fill the next cy_card structure available */
33513349 for (j = 0; j < NR_CARDS; j++) {
3352− if (cy_card[j].base_addr == NULL)
3350+ card = &cy_card[j];
3351+ if (card->base_addr == NULL)
33533352 break;
33543353 }
33553354 if (j == NR_CARDS) { /* no more cy_cards available */
@@ -3363,7 +3362,7 @@ static int __init cy_detect_isa(void) · 7 unmodified lines
33633362
33643363 /* allocate IRQ */
33653364 if (request_irq(cy_isa_irq, cyy_interrupt,
3366− 0, "Cyclom-Y", &cy_card[j])) {
3365+ 0, "Cyclom-Y", card)) {
33673366 printk(KERN_ERR "Cyclom-Y/ISA found at 0x%lx, but "
33683367 "could not allocate IRQ#%d.\n",
33693368 (unsigned long)cy_isa_address, cy_isa_irq);
@@ -3372,16 +3371,16 @@ static int __init cy_detect_isa(void) · 2 unmodified lines
33723371 }
33733372
33743373 /* set cy_card */
3375− cy_card[j].base_addr = cy_isa_address;
3376− cy_card[j].ctl_addr.p9050 = NULL;
3377− cy_card[j].irq = (int)cy_isa_irq;
3378− cy_card[j].bus_index = 0;
3379− cy_card[j].first_line = cy_next_channel;
3380− cy_card[j].num_chips = cy_isa_nchan / CyPORTS_PER_CHIP;
3381− cy_card[j].nports = cy_isa_nchan;
3382− if (cy_init_card(&cy_card[j])) {
3383− cy_card[j].base_addr = NULL;
3384− free_irq(cy_isa_irq, &cy_card[j]);
3374+ card->base_addr = cy_isa_address;
3375+ card->ctl_addr.p9050 = NULL;
3376+ card->irq = (int)cy_isa_irq;
3377+ card->bus_index = 0;
3378+ card->first_line = cy_next_channel;
3379+ card->num_chips = cy_isa_nchan / CyPORTS_PER_CHIP;
3380+ card->nports = cy_isa_nchan;
3381+ if (cy_init_card(card)) {
3382+ card->base_addr = NULL;
3383+ free_irq(cy_isa_irq, card);
33853384 iounmap(cy_isa_address);
33863385 continue;
33873386 }
@@ -3393,9 +3392,10 @@ static int __init cy_detect_isa(void) · 5 unmodified lines
33933392 (unsigned long)(cy_isa_address + (CyISA_Ywin - 1)),
33943393 cy_isa_irq, cy_isa_nchan, cy_next_channel);
33953394
3396− for (j = cy_next_channel;
3397− j < cy_next_channel + cy_isa_nchan; j++)
3398− tty_register_device(cy_serial_driver, j, NULL);
3395+ for (k = 0, j = cy_next_channel;
3396+ j < cy_next_channel + cy_isa_nchan; j++, k++)
3397+ tty_port_register_device(&card->ports[k].port,
3398+ cy_serial_driver, j, NULL);
33993399 cy_next_channel += cy_isa_nchan;
34003400 }
34013401 return nboard;
@@ -3695,10 +3695,11 @@ err: · 293 unmodified lines
36953695 static int __devinit cy_pci_probe(struct pci_dev *pdev,
36963696 const struct pci_device_id *ent)
36973697 {
3698+ struct cyclades_card *card;
36983699 void __iomem *addr0 = NULL, *addr2 = NULL;
36993700 char *card_name = NULL;
37003701 u32 uninitialized_var(mailbox);
3701− unsigned int device_id, nchan = 0, card_no, i;
3702+ unsigned int device_id, nchan = 0, card_no, i, j;
37023703 unsigned char plx_ver;
37033704 int retval, irq;
37043705
@@ -3829,7 +3830,8 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, · 124 unmodified lines
38293830 }
38303831 /* fill the next cy_card structure available */
38313832 for (card_no = 0; card_no < NR_CARDS; card_no++) {
3832− if (cy_card[card_no].base_addr == NULL)
3833+ card = &cy_card[card_no];
3834+ if (card->base_addr == NULL)
38333835 break;
38343836 }
38353837 if (card_no == NR_CARDS) { /* no more cy_cards available */
@@ -3843,27 +3845,26 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, · 7 unmodified lines
38433845 device_id == PCI_DEVICE_ID_CYCLOM_Y_Hi) {
38443846 /* allocate IRQ */
38453847 retval = request_irq(irq, cyy_interrupt,
3846− IRQF_SHARED, "Cyclom-Y", &cy_card[card_no]);
3848+ IRQF_SHARED, "Cyclom-Y", card);
38473849 if (retval) {
38483850 dev_err(&pdev->dev, "could not allocate IRQ\n");
38493851 goto err_unmap;
38503852 }
3851− cy_card[card_no].num_chips = nchan / CyPORTS_PER_CHIP;
3853+ card->num_chips = nchan / CyPORTS_PER_CHIP;
38523854 } else {
38533855 struct FIRM_ID __iomem *firm_id = addr2 + ID_ADDRESS;
38543856 struct ZFW_CTRL __iomem *zfw_ctrl;
38553857
38563858 zfw_ctrl = addr2 + (readl(&firm_id->zfwctrl_addr) & 0xfffff);
38573859
3858− cy_card[card_no].hw_ver = mailbox;
3859− cy_card[card_no].num_chips = (unsigned int)-1;
3860− cy_card[card_no].board_ctrl = &zfw_ctrl->board_ctrl;
3860+ card->hw_ver = mailbox;
3861+ card->num_chips = (unsigned int)-1;
3862+ card->board_ctrl = &zfw_ctrl->board_ctrl;
38613863 #ifdef CONFIG_CYZ_INTR
38623864 /* allocate IRQ only if board has an IRQ */
38633865 if (irq != 0 && irq != 255) {
38643866 retval = request_irq(irq, cyz_interrupt,
3865− IRQF_SHARED, "Cyclades-Z",
3866− &cy_card[card_no]);
3867+ IRQF_SHARED, "Cyclades-Z", card);
38673868 if (retval) {
38683869 dev_err(&pdev->dev, "could not allocate IRQ\n");
38693870 goto err_unmap;
@@ -3873,17 +3874,17 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, · 3 unmodified lines
38733874 }
38743875
38753876 /* set cy_card */
3876− cy_card[card_no].base_addr = addr2;
3877− cy_card[card_no].ctl_addr.p9050 = addr0;
3878− cy_card[card_no].irq = irq;
3879− cy_card[card_no].bus_index = 1;
3880− cy_card[card_no].first_line = cy_next_channel;
3881− cy_card[card_no].nports = nchan;
3882− retval = cy_init_card(&cy_card[card_no]);
3877+ card->base_addr = addr2;
3878+ card->ctl_addr.p9050 = addr0;
3879+ card->irq = irq;
3880+ card->bus_index = 1;
3881+ card->first_line = cy_next_channel;
3882+ card->nports = nchan;
3883+ retval = cy_init_card(card);
38833884 if (retval)
38843885 goto err_null;
38853886
3886− pci_set_drvdata(pdev, &cy_card[card_no]);
3887+ pci_set_drvdata(pdev, card);
38873888
38883889 if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo ||
38893890 device_id == PCI_DEVICE_ID_CYCLOM_Y_Hi) {
@@ -3909,14 +3910,15 @@ static int __devinit cy_pci_probe(struct pci_dev *pdev, · 19 unmodified lines
39093910
39103911 dev_info(&pdev->dev, "%s/PCI #%d found: %d channels starting from "
39113912 "port %d.\n", card_name, card_no + 1, nchan, cy_next_channel);
3912− for (i = cy_next_channel; i < cy_next_channel + nchan; i++)
3913− tty_register_device(cy_serial_driver, i, &pdev->dev);
3913+ for (j = 0, i = cy_next_channel; i < cy_next_channel + nchan; i++, j++)
3914+ tty_port_register_device(&card->ports[j].port,
3915+ cy_serial_driver, i, &pdev->dev);
39143916 cy_next_channel += nchan;
39153917
39163918 return 0;
39173919 err_null:
3918− cy_card[card_no].base_addr = NULL;
3919− free_irq(irq, &cy_card[card_no]);
3920+ card->base_addr = NULL;
3921+ free_irq(irq, card);
39203922 err_unmap:
39213923 iounmap(addr0);
39223924 if (addr2)
drivers/tty/ehv_bytechan.c+5−4
@@ -738,16 +738,17 @@ static int __devinit ehv_bc_tty_probe(struct platform_device *pdev) · 737 unmodified lines
738738 goto error;
739739 }
740740
741− bc->dev = tty_register_device(ehv_bc_driver, i, &pdev->dev);
741+ tty_port_init(&bc->port);
742+ bc->port.ops = &ehv_bc_tty_port_ops;
743+
744+ bc->dev = tty_port_register_device(&bc->port, ehv_bc_driver, i,
745+ &pdev->dev);
742746 if (IS_ERR(bc->dev)) {
743747 ret = PTR_ERR(bc->dev);
744748 dev_err(&pdev->dev, "could not register tty (ret=%i)\n", ret);
745749 goto error;
746750 }
747751
748− tty_port_init(&bc->port);
749− bc->port.ops = &ehv_bc_tty_port_ops;
750−
751752 dev_set_drvdata(&pdev->dev, bc);
752753
753754 dev_info(&pdev->dev, "registered /dev/%s%u for byte channel %u\n",
drivers/tty/hvc/hvc_console.c+25−6
@@ -299,20 +299,33 @@ static void hvc_unthrottle(struct tty_struct *tty) · 298 unmodified lines
299299 hvc_kick();
300300 }
301301
302+static int hvc_install(struct tty_driver *driver, struct tty_struct *tty)
303+{
304+ struct hvc_struct *hp;
305+ int rc;
306+
307+ /* Auto increments kref reference if found. */
308+ if (!(hp = hvc_get_by_index(tty->index)))
309+ return -ENODEV;
310+
311+ tty->driver_data = hp;
312+
313+ rc = tty_port_install(&hp->port, driver, tty);
314+ if (rc)
315+ tty_port_put(&hp->port);
316+ return rc;
317+}
318+
302319 /*
303320 * The TTY interface won't be used until after the vio layer has exposed the vty
304321 * adapter to the kernel.
305322 */
306323 static int hvc_open(struct tty_struct *tty, struct file * filp)
307324 {
308− struct hvc_struct *hp;
325+ struct hvc_struct *hp = tty->driver_data;
309326 unsigned long flags;
310327 int rc = 0;
311328
312− /* Auto increments kref reference if found. */
313− if (!(hp = hvc_get_by_index(tty->index)))
314− return -ENODEV;
315−
316329 spin_lock_irqsave(&hp->port.lock, flags);
317330 /* Check and then increment for fast path open. */
318331 if (hp->port.count++ > 0) {
@@ -322,7 +335,6 @@ static int hvc_open(struct tty_struct *tty, struct file * filp) · 3 unmodified lines
322335 } /* else count == 0 */
323336 spin_unlock_irqrestore(&hp->port.lock, flags);
324337
325− tty->driver_data = hp;
326338 tty_port_tty_set(&hp->port, tty);
327339
328340 if (hp->ops->notifier_add)
@@ -389,6 +401,11 @@ static void hvc_close(struct tty_struct *tty, struct file * filp) · 60 unmodified lines
389401 hp->vtermno, hp->port.count);
390402 spin_unlock_irqrestore(&hp->port.lock, flags);
391403 }
404+}
405+
406+static void hvc_cleanup(struct tty_struct *tty)
407+{
408+ struct hvc_struct *hp = tty->driver_data;
392409
393410 tty_port_put(&hp->port);
394411 }
@@ -792,8 +809,10 @@ static void hvc_poll_put_char(struct tty_driver *driver, int line, char ch) · 397 unmodified lines
792809 #endif
793810
794811 static const struct tty_operations hvc_ops = {
812+ .install = hvc_install,
795813 .open = hvc_open,
796814 .close = hvc_close,
815+ .cleanup = hvc_cleanup,
797816 .write = hvc_write,
798817 .hangup = hvc_hangup,
799818 .unthrottle = hvc_unthrottle,
drivers/tty/hvc/hvcs.c+49−33
@@ -1102,27 +1102,20 @@ static struct hvcs_struct *hvcs_get_by_index(int index) · 1101 unmodified lines
11021102 return NULL;
11031103 }
11041104
1105−/*
1106− * This is invoked via the tty_open interface when a user app connects to the
1107− * /dev node.
1108− */
1109−static int hvcs_open(struct tty_struct *tty, struct file *filp)
1105+static int hvcs_install(struct tty_driver *driver, struct tty_struct *tty)
11101106 {
11111107 struct hvcs_struct *hvcsd;
1112− int rc, retval = 0;
1113− unsigned long flags;
1114− unsigned int irq;
11151108 struct vio_dev *vdev;
1116− unsigned long unit_address;
1117−
1118− if (tty->driver_data)
1119− goto fast_open;
1109+ unsigned long unit_address, flags;
1110+ unsigned int irq;
1111+ int retval;
11201112
11211113 /*
11221114 * Is there a vty-server that shares the same index?
11231115 * This function increments the kref index.
11241116 */
1125− if (!(hvcsd = hvcs_get_by_index(tty->index))) {
1117+ hvcsd = hvcs_get_by_index(tty->index);
1118+ if (!hvcsd) {
11261119 printk(KERN_WARNING "HVCS: open failed, no device associated"
11271120 " with tty->index %d.\n", tty->index);
11281121 return -ENODEV;
@@ -1130,11 +1123,16 @@ static int hvcs_open(struct tty_struct *tty, struct file *filp) · 1 unmodified line
11301123
11311124 spin_lock_irqsave(&hvcsd->lock, flags);
11321125
1133− if (hvcsd->connected == 0)
1134− if ((retval = hvcs_partner_connect(hvcsd)))
1135− goto error_release;
1126+ if (hvcsd->connected == 0) {
1127+ retval = hvcs_partner_connect(hvcsd);
1128+ if (retval) {
1129+ spin_unlock_irqrestore(&hvcsd->lock, flags);
1130+ printk(KERN_WARNING "HVCS: partner connect failed.\n");
1131+ goto err_put;
1132+ }
1133+ }
11361134
1137− hvcsd->port.count = 1;
1135+ hvcsd->port.count = 0;
11381136 hvcsd->port.tty = tty;
11391137 tty->driver_data = hvcsd;
11401138
@@ -1155,37 +1153,48 @@ static int hvcs_open(struct tty_struct *tty, struct file *filp) · 14 unmodified lines
11551153 * This must be done outside of the spinlock because it requests irqs
11561154 * and will grab the spinlock and free the connection if it fails.
11571155 */
1158− if (((rc = hvcs_enable_device(hvcsd, unit_address, irq, vdev)))) {
1159− tty_port_put(&hvcsd->port);
1156+ retval = hvcs_enable_device(hvcsd, unit_address, irq, vdev);
1157+ if (retval) {
11601158 printk(KERN_WARNING "HVCS: enable device failed.\n");
1161− return rc;
1159+ goto err_put;
11621160 }
11631161
1164− goto open_success;
1162+ retval = tty_port_install(&hvcsd->port, driver, tty);
1163+ if (retval)
1164+ goto err_irq;
11651165
1166−fast_open:
1167− hvcsd = tty->driver_data;
1166+ return 0;
1167+err_irq:
1168+ spin_lock_irqsave(&hvcsd->lock, flags);
1169+ vio_disable_interrupts(hvcsd->vdev);
1170+ spin_unlock_irqrestore(&hvcsd->lock, flags);
1171+ free_irq(irq, hvcsd);
1172+err_put:
1173+ tty_port_put(&hvcsd->port);
1174+
1175+ return retval;
1176+}
1177+
1178+/*
1179+ * This is invoked via the tty_open interface when a user app connects to the
1180+ * /dev node.
1181+ */
1182+static int hvcs_open(struct tty_struct *tty, struct file *filp)
1183+{
1184+ struct hvcs_struct *hvcsd = tty->driver_data;
1185+ unsigned long flags;
11681186
11691187 spin_lock_irqsave(&hvcsd->lock, flags);
1170− tty_port_get(&hvcsd->port);
11711188 hvcsd->port.count++;
11721189 hvcsd->todo_mask |= HVCS_SCHED_READ;
11731190 spin_unlock_irqrestore(&hvcsd->lock, flags);
11741191
1175−open_success:
11761192 hvcs_kick();
11771193
11781194 printk(KERN_INFO "HVCS: vty-server@%X connection opened.\n",
11791195 hvcsd->vdev->unit_address );
11801196
11811197 return 0;
1182−
1183−error_release:
1184− spin_unlock_irqrestore(&hvcsd->lock, flags);
1185− tty_port_put(&hvcsd->port);
1186−
1187− printk(KERN_WARNING "HVCS: partner connect failed.\n");
1188− return retval;
11891198 }
11901199
11911200 static void hvcs_close(struct tty_struct *tty, struct file *filp)
@@ -1236,7 +1245,6 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp) · 44 unmodified lines
12361245 tty->driver_data = NULL;
12371246
12381247 free_irq(irq, hvcsd);
1239− tty_port_put(&hvcsd->port);
12401248 return;
12411249 } else if (hvcsd->port.count < 0) {
12421250 printk(KERN_ERR "HVCS: vty-server@%X open_count: %d"
@@ -1245,6 +1253,12 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp) · 2 unmodified lines
12451253 }
12461254
12471255 spin_unlock_irqrestore(&hvcsd->lock, flags);
1256+}
1257+
1258+static void hvcs_cleanup(struct tty_struct * tty)
1259+{
1260+ struct hvcs_struct *hvcsd = tty->driver_data;
1261+
12481262 tty_port_put(&hvcsd->port);
12491263 }
12501264
@@ -1431,8 +1445,10 @@ static int hvcs_chars_in_buffer(struct tty_struct *tty) · 180 unmodified lines
14311445 }
14321446
14331447 static const struct tty_operations hvcs_ops = {
1448+ .install = hvcs_install,
14341449 .open = hvcs_open,
14351450 .close = hvcs_close,
1451+ .cleanup = hvcs_cleanup,
14361452 .hangup = hvcs_hangup,
14371453 .write = hvcs_write,
14381454 .write_room = hvcs_write_room,
drivers/tty/hvc/hvsi.c+2−0
@@ -1080,6 +1080,8 @@ static int __init hvsi_init(void) · 1079 unmodified lines
10801080 struct hvsi_struct *hp = &hvsi_ports[i];
10811081 int ret = 1;
10821082
1083+ tty_port_link_device(&hp->port, hvsi_driver, i);
1084+
10831085 ret = request_irq(hp->virq, hvsi_interrupt, 0, "hvsi", hp);
10841086 if (ret)
10851087 printk(KERN_ERR "HVSI: couldn't reserve irq 0x%x (error %i)\n",
drivers/tty/hvc/hvsi_lib.c+1−1
@@ -400,7 +400,7 @@ void hvsilib_close(struct hvsi_priv *pv, struct hvc_struct *hp) · 399 unmodified lines
400400 spin_unlock_irqrestore(&hp->lock, flags);
401401
402402 /* Clear our own DTR */
403− if (!pv->tty || (pv->tty->termios->c_cflag & HUPCL))
403+ if (!pv->tty || (pv->tty->termios.c_cflag & HUPCL))
404404 hvsilib_write_mctrl(pv, 0);
405405
406406 /* Tear down the connection */
drivers/tty/ipwireless/tty.c+1−1
@@ -476,7 +476,7 @@ static int add_tty(int j, · 475 unmodified lines
476476 mutex_init(&ttys[j]->ipw_tty_mutex);
477477 tty_port_init(&ttys[j]->port);
478478
479− tty_register_device(ipw_tty_driver, j, NULL);
479+ tty_port_register_device(&ttys[j]->port, ipw_tty_driver, j, NULL);
480480 ipwireless_associate_network_tty(network, channel_idx, ttys[j]);
481481
482482 if (secondary_channel_idx != -1)
drivers/tty/isicom.c+7−6
@@ -600,7 +600,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id) · 599 unmodified lines
600600 port->status &= ~ISI_DCD;
601601 }
602602
603− if (port->port.flags & ASYNC_CTS_FLOW) {
603+ if (tty_port_cts_enabled(&port->port)) {
604604 if (tty->hw_stopped) {
605605 if (header & ISI_CTS) {
606606 port->port.tty->hw_stopped = 0;
@@ -702,7 +702,7 @@ static void isicom_config_port(struct tty_struct *tty) · 95 unmodified lines
702702
703703 /* 1,2,3,4 => 57.6, 115.2, 230, 460 kbps resp. */
704704 if (baud < 1 || baud > 4)
705− tty->termios->c_cflag &= ~CBAUDEX;
705+ tty->termios.c_cflag &= ~CBAUDEX;
706706 else
707707 baud += 15;
708708 }
@@ -1196,8 +1196,8 @@ static void isicom_set_termios(struct tty_struct *tty, · 487 unmodified lines
11961196 if (isicom_paranoia_check(port, tty->name, "isicom_set_termios"))
11971197 return;
11981198
1199− if (tty->termios->c_cflag == old_termios->c_cflag &&
1200− tty->termios->c_iflag == old_termios->c_iflag)
1199+ if (tty->termios.c_cflag == old_termios->c_cflag &&
1200+ tty->termios.c_iflag == old_termios->c_iflag)
12011201 return;
12021202
12031203 spin_lock_irqsave(&port->card->card_lock, flags);
@@ -1205,7 +1205,7 @@ static void isicom_set_termios(struct tty_struct *tty, · 1 unmodified line
12051205 spin_unlock_irqrestore(&port->card->card_lock, flags);
12061206
12071207 if ((old_termios->c_cflag & CRTSCTS) &&
1208− !(tty->termios->c_cflag & CRTSCTS)) {
1208+ !(tty->termios.c_cflag & CRTSCTS)) {
12091209 tty->hw_stopped = 0;
12101210 isicom_start(tty);
12111211 }
@@ -1611,7 +1611,8 @@ static int __devinit isicom_probe(struct pci_dev *pdev, · 399 unmodified lines
16111611 goto errunri;
16121612
16131613 for (index = 0; index < board->port_count; index++)
1614− tty_register_device(isicom_normal, board->index * 16 + index,
1614+ tty_port_register_device(&board->ports[index].port,
1615+ isicom_normal, board->index * 16 + index,
16151616 &pdev->dev);
16161617
16171618 return 0;
drivers/tty/moxa.c+28−11
@@ -169,6 +169,7 @@ static DEFINE_SPINLOCK(moxa_lock); · 168 unmodified lines
169169 static unsigned long baseaddr[MAX_BOARDS];
170170 static unsigned int type[MAX_BOARDS];
171171 static unsigned int numports[MAX_BOARDS];
172+static struct tty_port moxa_service_port;
172173
173174 MODULE_AUTHOR("William Chen");
174175 MODULE_DESCRIPTION("MOXA Intellio Family Multiport Board Device Driver");
@@ -367,10 +368,10 @@ static int moxa_ioctl(struct tty_struct *tty, · 192 unmodified lines
367368 tmp.dcd = 1;
368369
369370 ttyp = tty_port_tty_get(&p->port);
370− if (!ttyp || !ttyp->termios)
371+ if (!ttyp)
371372 tmp.cflag = p->cflag;
372373 else
373− tmp.cflag = ttyp->termios->c_cflag;
374+ tmp.cflag = ttyp->termios.c_cflag;
374375 tty_kref_put(ttyp);
375376 copy:
376377 if (copy_to_user(argm, &tmp, sizeof(tmp)))
@@ -834,7 +835,7 @@ static int moxa_init_board(struct moxa_board_conf *brd, struct device *dev) · 457 unmodified lines
834835 const struct firmware *fw;
835836 const char *file;
836837 struct moxa_port *p;
837− unsigned int i;
838+ unsigned int i, first_idx;
838839 int ret;
839840
840841 brd->ports = kcalloc(MAX_PORTS_PER_BOARD, sizeof(*brd->ports),
@@ -887,6 +888,11 @@ static int moxa_init_board(struct moxa_board_conf *brd, struct device *dev) · 46 unmodified lines
887888 mod_timer(&moxaTimer, jiffies + HZ / 50);
888889 spin_unlock_bh(&moxa_lock);
889890
891+ first_idx = (brd - moxa_boards) * MAX_PORTS_PER_BOARD;
892+ for (i = 0; i < brd->numPorts; i++)
893+ tty_port_register_device(&brd->ports[i].port, moxaDriver,
894+ first_idx + i, dev);
895+
890896 return 0;
891897 err_free:
892898 kfree(brd->ports);
@@ -896,7 +902,7 @@ err: · 3 unmodified lines
896902
897903 static void moxa_board_deinit(struct moxa_board_conf *brd)
898904 {
899− unsigned int a, opened;
905+ unsigned int a, opened, first_idx;
900906
901907 mutex_lock(&moxa_openlock);
902908 spin_lock_bh(&moxa_lock);
@@ -925,6 +931,10 @@ static void moxa_board_deinit(struct moxa_board_conf *brd) · 22 unmodified lines
925931 mutex_lock(&moxa_openlock);
926932 }
927933
934+ first_idx = (brd - moxa_boards) * MAX_PORTS_PER_BOARD;
935+ for (a = 0; a < brd->numPorts; a++)
936+ tty_unregister_device(moxaDriver, first_idx + a);
937+
928938 iounmap(brd->basemem);
929939 brd->basemem = NULL;
930940 kfree(brd->ports);
@@ -967,6 +977,7 @@ static int __devinit moxa_pci_probe(struct pci_dev *pdev, · 36 unmodified lines
967977 board->basemem = ioremap_nocache(pci_resource_start(pdev, 2), 0x4000);
968978 if (board->basemem == NULL) {
969979 dev_err(&pdev->dev, "can't remap io space 2\n");
980+ retval = -ENOMEM;
970981 goto err_reg;
971982 }
972983
@@ -1031,9 +1042,14 @@ static int __init moxa_init(void) · 58 unmodified lines
10311042
10321043 printk(KERN_INFO "MOXA Intellio family driver version %s\n",
10331044 MOXA_VERSION);
1034− moxaDriver = alloc_tty_driver(MAX_PORTS + 1);
1035− if (!moxaDriver)
1036− return -ENOMEM;
1045+
1046+ tty_port_init(&moxa_service_port);
1047+
1048+ moxaDriver = tty_alloc_driver(MAX_PORTS + 1,
1049+ TTY_DRIVER_REAL_RAW |
1050+ TTY_DRIVER_DYNAMIC_DEV);
1051+ if (IS_ERR(moxaDriver))
1052+ return PTR_ERR(moxaDriver);
10371053
10381054 moxaDriver->name = "ttyMX";
10391055 moxaDriver->major = ttymajor;
@@ -1044,8 +1060,9 @@ static int __init moxa_init(void) · 4 unmodified lines
10441060 moxaDriver->init_termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL | HUPCL;
10451061 moxaDriver->init_termios.c_ispeed = 9600;
10461062 moxaDriver->init_termios.c_ospeed = 9600;
1047− moxaDriver->flags = TTY_DRIVER_REAL_RAW;
10481063 tty_set_operations(moxaDriver, &moxa_ops);
1064+ /* Having one more port only for ioctls is ugly */
1065+ tty_port_link_device(&moxa_service_port, moxaDriver, MAX_PORTS);
10491066
10501067 if (tty_register_driver(moxaDriver)) {
10511068 printk(KERN_ERR "can't register MOXA Smartio tty driver!\n");
@@ -1178,7 +1195,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp) · 126 unmodified lines
11781195 mutex_lock(&ch->port.mutex);
11791196 if (!(ch->port.flags & ASYNC_INITIALIZED)) {
11801197 ch->statusflags = 0;
1181− moxa_set_tty_param(tty, tty->termios);
1198+ moxa_set_tty_param(tty, &tty->termios);
11821199 MoxaPortLineCtrl(ch, 1, 1);
11831200 MoxaPortEnable(ch);
11841201 MoxaSetFifo(ch, ch->type == PORT_16550A);
@@ -1193,7 +1210,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp) · 8 unmodified lines
11931210 static void moxa_close(struct tty_struct *tty, struct file *filp)
11941211 {
11951212 struct moxa_port *ch = tty->driver_data;
1196− ch->cflag = tty->termios->c_cflag;
1213+ ch->cflag = tty->termios.c_cflag;
11971214 tty_port_close(&ch->port, tty, filp);
11981215 }
11991216
@@ -1464,7 +1481,7 @@ static void moxa_poll(unsigned long ignored) · 264 unmodified lines
14641481
14651482 static void moxa_set_tty_param(struct tty_struct *tty, struct ktermios *old_termios)
14661483 {
1467− register struct ktermios *ts = tty->termios;
1484+ register struct ktermios *ts = &tty->termios;
14681485 struct moxa_port *ch = tty->driver_data;
14691486 int rts, cts, txflow, rxflow, xany, baud;
14701487
drivers/tty/mxser.c+46−17
@@ -643,7 +643,7 @@ static int mxser_change_speed(struct tty_struct *tty, · 642 unmodified lines
643643 int ret = 0;
644644 unsigned char status;
645645
646− cflag = tty->termios->c_cflag;
646+ cflag = tty->termios.c_cflag;
647647 if (!info->ioaddr)
648648 return ret;
649649
@@ -830,7 +830,7 @@ static void mxser_check_modem_status(struct tty_struct *tty, · 180 unmodified lines
830830 wake_up_interruptible(&port->port.open_wait);
831831 }
832832
833− if (port->port.flags & ASYNC_CTS_FLOW) {
833+ if (tty_port_cts_enabled(&port->port)) {
834834 if (tty->hw_stopped) {
835835 if (status & UART_MSR_CTS) {
836836 tty->hw_stopped = 0;
@@ -1520,10 +1520,10 @@ static int mxser_ioctl_special(unsigned int cmd, void __user *argp) · 683 unmodified lines
15201520
15211521 tty = tty_port_tty_get(port);
15221522
1523− if (!tty || !tty->termios)
1523+ if (!tty)
15241524 ms.cflag = ip->normal_termios.c_cflag;
15251525 else
1526− ms.cflag = tty->termios->c_cflag;
1526+ ms.cflag = tty->termios.c_cflag;
15271527 tty_kref_put(tty);
15281528 spin_lock_irq(&ip->slock);
15291529 status = inb(ip->ioaddr + UART_MSR);
@@ -1589,13 +1589,13 @@ static int mxser_ioctl_special(unsigned int cmd, void __user *argp) · 59 unmodified lines
15891589
15901590 tty = tty_port_tty_get(&ip->port);
15911591
1592− if (!tty || !tty->termios) {
1592+ if (!tty) {
15931593 cflag = ip->normal_termios.c_cflag;
15941594 iflag = ip->normal_termios.c_iflag;
15951595 me->baudrate[p] = tty_termios_baud_rate(&ip->normal_termios);
15961596 } else {
1597− cflag = tty->termios->c_cflag;
1598− iflag = tty->termios->c_iflag;
1597+ cflag = tty->termios.c_cflag;
1598+ iflag = tty->termios.c_iflag;
15991599 me->baudrate[p] = tty_get_baud_rate(tty);
16001600 }
16011601 tty_kref_put(tty);
@@ -1853,7 +1853,7 @@ static void mxser_stoprx(struct tty_struct *tty) · 251 unmodified lines
18531853 }
18541854 }
18551855
1856− if (tty->termios->c_cflag & CRTSCTS) {
1856+ if (tty->termios.c_cflag & CRTSCTS) {
18571857 info->MCR &= ~UART_MCR_RTS;
18581858 outb(info->MCR, info->ioaddr + UART_MCR);
18591859 }
@@ -1890,7 +1890,7 @@ static void mxser_unthrottle(struct tty_struct *tty) · 30 unmodified lines
18901890 }
18911891 }
18921892
1893− if (tty->termios->c_cflag & CRTSCTS) {
1893+ if (tty->termios.c_cflag & CRTSCTS) {
18941894 info->MCR |= UART_MCR_RTS;
18951895 outb(info->MCR, info->ioaddr + UART_MCR);
18961896 }
@@ -1939,14 +1939,14 @@ static void mxser_set_termios(struct tty_struct *tty, struct ktermios *old_termi · 42 unmodified lines
19391939 spin_unlock_irqrestore(&info->slock, flags);
19401940
19411941 if ((old_termios->c_cflag & CRTSCTS) &&
1942− !(tty->termios->c_cflag & CRTSCTS)) {
1942+ !(tty->termios.c_cflag & CRTSCTS)) {
19431943 tty->hw_stopped = 0;
19441944 mxser_start(tty);
19451945 }
19461946
19471947 /* Handle sw stopped */
19481948 if ((old_termios->c_iflag & IXON) &&
1949− !(tty->termios->c_iflag & IXON)) {
1949+ !(tty->termios.c_iflag & IXON)) {
19501950 tty->stopped = 0;
19511951
19521952 if (info->board->chip_flag) {
@@ -2337,11 +2337,36 @@ static struct tty_port_operations mxser_port_ops = { · 384 unmodified lines
23372337 * The MOXA Smartio/Industio serial driver boot-time initialization code!
23382338 */
23392339
2340+static bool allow_overlapping_vector;
2341+module_param(allow_overlapping_vector, bool, S_IRUGO);
2342+MODULE_PARM_DESC(allow_overlapping_vector, "whether we allow ISA cards to be configured such that vector overlabs IO ports (default=no)");
2343+
2344+static bool mxser_overlapping_vector(struct mxser_board *brd)
2345+{
2346+ return allow_overlapping_vector &&
2347+ brd->vector >= brd->ports[0].ioaddr &&
2348+ brd->vector < brd->ports[0].ioaddr + 8 * brd->info->nports;
2349+}
2350+
2351+static int mxser_request_vector(struct mxser_board *brd)
2352+{
2353+ if (mxser_overlapping_vector(brd))
2354+ return 0;
2355+ return request_region(brd->vector, 1, "mxser(vector)") ? 0 : -EIO;
2356+}
2357+
2358+static void mxser_release_vector(struct mxser_board *brd)
2359+{
2360+ if (mxser_overlapping_vector(brd))
2361+ return;
2362+ release_region(brd->vector, 1);
2363+}
2364+
23402365 static void mxser_release_ISA_res(struct mxser_board *brd)
23412366 {
23422367 free_irq(brd->irq, brd);
23432368 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports);
2344− release_region(brd->vector, 1);
2369+ mxser_release_vector(brd);
23452370 }
23462371
23472372 static int __devinit mxser_initbrd(struct mxser_board *brd,
@@ -2396,7 +2421,7 @@ static int __devinit mxser_initbrd(struct mxser_board *brd, · 48 unmodified lines
23962421
23972422 static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd)
23982423 {
2399− int id, i, bits;
2424+ int id, i, bits, ret;
24002425 unsigned short regs[16], irq;
24012426 unsigned char scratch, scratch2;
24022427
@@ -2492,13 +2517,15 @@ static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd) · 89 unmodified lines
24922517 8 * brd->info->nports - 1);
24932518 return -EIO;
24942519 }
2495− if (!request_region(brd->vector, 1, "mxser(vector)")) {
2520+
2521+ ret = mxser_request_vector(brd);
2522+ if (ret) {
24962523 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports);
24972524 printk(KERN_ERR "mxser: can't request interrupt vector region: "
24982525 "0x%.8lx-0x%.8lx\n",
24992526 brd->ports[0].ioaddr, brd->ports[0].ioaddr +
25002527 8 * brd->info->nports - 1);
2501− return -EIO;
2528+ return ret;
25022529 }
25032530 return brd->info->nports;
25042531
@@ -2598,7 +2625,8 @@ static int __devinit mxser_probe(struct pci_dev *pdev, · 93 unmodified lines
25982625 goto err_rel3;
25992626
26002627 for (i = 0; i < brd->info->nports; i++)
2601− tty_register_device(mxvar_sdriver, brd->idx + i, &pdev->dev);
2628+ tty_port_register_device(&brd->ports[i].port, mxvar_sdriver,
2629+ brd->idx + i, &pdev->dev);
26022630
26032631 pci_set_drvdata(pdev, brd);
26042632
@@ -2695,7 +2723,8 @@ static int __init mxser_module_init(void) · 90 unmodified lines
26952723
26962724 brd->idx = m * MXSER_PORTS_PER_BOARD;
26972725 for (i = 0; i < brd->info->nports; i++)
2698− tty_register_device(mxvar_sdriver, brd->idx + i, NULL);
2726+ tty_port_register_device(&brd->ports[i].port,
2727+ mxvar_sdriver, brd->idx + i, NULL);
26992728
27002729 m++;
27012730 }
drivers/tty/n_gsm.c+86−56
@@ -108,7 +108,7 @@ struct gsm_mux_net { · 107 unmodified lines
108108 */
109109
110110 struct gsm_msg {
111− struct gsm_msg *next;
111+ struct list_head list;
112112 u8 addr; /* DLCI address + flags */
113113 u8 ctrl; /* Control byte + flags */
114114 unsigned int len; /* Length of data block (can be zero) */
@@ -245,8 +245,7 @@ struct gsm_mux { · 130 unmodified lines
245245 unsigned int tx_bytes; /* TX data outstanding */
246246 #define TX_THRESH_HI 8192
247247 #define TX_THRESH_LO 2048
248− struct gsm_msg *tx_head; /* Pending data packets */
249− struct gsm_msg *tx_tail;
248+ struct list_head tx_list; /* Pending data packets */
250249
251250 /* Control messages */
252251 struct timer_list t2_timer; /* Retransmit timer for commands */
@@ -663,7 +662,7 @@ static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len, · 410 unmodified lines
663662 m->len = len;
664663 m->addr = addr;
665664 m->ctrl = ctrl;
666− m->next = NULL;
665+ INIT_LIST_HEAD(&m->list);
667666 return m;
668667 }
669668
@@ -673,22 +672,21 @@ static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len, · 3 unmodified lines
673672 *
674673 * The tty device has called us to indicate that room has appeared in
675674 * the transmit queue. Ram more data into the pipe if we have any
675+ * If we have been flow-stopped by a CMD_FCOFF, then we can only
676+ * send messages on DLCI0 until CMD_FCON
676677 *
677678 * FIXME: lock against link layer control transmissions
678679 */
679680
680681 static void gsm_data_kick(struct gsm_mux *gsm)
681682 {
682− struct gsm_msg *msg = gsm->tx_head;
683+ struct gsm_msg *msg, *nmsg;
683684 int len;
684685 int skip_sof = 0;
685686
686− /* FIXME: We need to apply this solely to data messages */
687− if (gsm->constipated)
688− return;
689−
690− while (gsm->tx_head != NULL) {
691− msg = gsm->tx_head;
687+ list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) {
688+ if (gsm->constipated && msg->addr)
689+ continue;
692690 if (gsm->encoding != 0) {
693691 gsm->txframe[0] = GSM1_SOF;
694692 len = gsm_stuff_frame(msg->data,
@@ -711,14 +709,13 @@ static void gsm_data_kick(struct gsm_mux *gsm) · 16 unmodified lines
711709 len - skip_sof) < 0)
712710 break;
713711 /* FIXME: Can eliminate one SOF in many more cases */
714− gsm->tx_head = msg->next;
715− if (gsm->tx_head == NULL)
716− gsm->tx_tail = NULL;
717712 gsm->tx_bytes -= msg->len;
718− kfree(msg);
719713 /* For a burst of frames skip the extra SOF within the
720714 burst */
721715 skip_sof = 1;
716+
717+ list_del(&msg->list);
718+ kfree(msg);
722719 }
723720 }
724721
@@ -768,11 +765,7 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) · 43 unmodified lines
768765 msg->data = dp;
769766
770767 /* Add to the actual output queue */
771− if (gsm->tx_tail)
772− gsm->tx_tail->next = msg;
773− else
774− gsm->tx_head = msg;
775− gsm->tx_tail = msg;
768+ list_add_tail(&msg->list, &gsm->tx_list);
776769 gsm->tx_bytes += msg->len;
777770 gsm_data_kick(gsm);
778771 }
@@ -875,7 +868,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, · 96 unmodified lines
875868
876869 /* dlci->skb is locked by tx_lock */
877870 if (dlci->skb == NULL) {
878− dlci->skb = skb_dequeue(&dlci->skb_list);
871+ dlci->skb = skb_dequeue_tail(&dlci->skb_list);
879872 if (dlci->skb == NULL)
880873 return 0;
881874 first = 1;
@@ -886,7 +879,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, · 4 unmodified lines
886879 if (len > gsm->mtu) {
887880 if (dlci->adaption == 3) {
888881 /* Over long frame, bin it */
889− kfree_skb(dlci->skb);
882+ dev_kfree_skb_any(dlci->skb);
890883 dlci->skb = NULL;
891884 return 0;
892885 }
@@ -899,8 +892,11 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, · 6 unmodified lines
899892
900893 /* FIXME: need a timer or something to kick this so it can't
901894 get stuck with no work outstanding and no buffer free */
902− if (msg == NULL)
895+ if (msg == NULL) {
896+ skb_queue_tail(&dlci->skb_list, dlci->skb);
897+ dlci->skb = NULL;
903898 return -ENOMEM;
899+ }
904900 dp = msg->data;
905901
906902 if (dlci->adaption == 4) { /* Interruptible framed (Packetised Data) */
@@ -912,7 +908,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, · 5 unmodified lines
912908 skb_pull(dlci->skb, len);
913909 __gsm_data_queue(dlci, msg);
914910 if (last) {
915− kfree_skb(dlci->skb);
911+ dev_kfree_skb_any(dlci->skb);
916912 dlci->skb = NULL;
917913 }
918914 return size;
@@ -971,16 +967,22 @@ static void gsm_dlci_data_sweep(struct gsm_mux *gsm) · 52 unmodified lines
971967 static void gsm_dlci_data_kick(struct gsm_dlci *dlci)
972968 {
973969 unsigned long flags;
970+ int sweep;
971+
972+ if (dlci->constipated)
973+ return;
974974
975975 spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
976976 /* If we have nothing running then we need to fire up */
977+ sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO);
977978 if (dlci->gsm->tx_bytes == 0) {
978979 if (dlci->net)
979980 gsm_dlci_data_output_framed(dlci->gsm, dlci);
980981 else
981982 gsm_dlci_data_output(dlci->gsm, dlci);
982− } else if (dlci->gsm->tx_bytes < TX_THRESH_LO)
983− gsm_dlci_data_sweep(dlci->gsm);
983+ }
984+ if (sweep)
985+ gsm_dlci_data_sweep(dlci->gsm);
984986 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
985987 }
986988
@@ -1027,6 +1029,7 @@ static void gsm_process_modem(struct tty_struct *tty, struct gsm_dlci *dlci, · 40 unmodified lines
10271029 {
10281030 int mlines = 0;
10291031 u8 brk = 0;
1032+ int fc;
10301033
10311034 /* The modem status command can either contain one octet (v.24 signals)
10321035 or two octets (v.24 signals + break signals). The length field will
@@ -1038,19 +1041,21 @@ static void gsm_process_modem(struct tty_struct *tty, struct gsm_dlci *dlci, · 5 unmodified lines
10381041 else {
10391042 brk = modem & 0x7f;
10401043 modem = (modem >> 7) & 0x7f;
1041− };
1044+ }
10421045
10431046 /* Flow control/ready to communicate */
1044− if (modem & MDM_FC) {
1047+ fc = (modem & MDM_FC) || !(modem & MDM_RTR);
1048+ if (fc && !dlci->constipated) {
10451049 /* Need to throttle our output on this device */
10461050 dlci->constipated = 1;
1047− }
1048− if (modem & MDM_RTC) {
1049− mlines |= TIOCM_DSR | TIOCM_DTR;
1051+ } else if (!fc && dlci->constipated) {
10501052 dlci->constipated = 0;
10511053 gsm_dlci_data_kick(dlci);
10521054 }
1055+
10531056 /* Map modem bits */
1057+ if (modem & MDM_RTC)
1058+ mlines |= TIOCM_DSR | TIOCM_DTR;
10541059 if (modem & MDM_RTR)
10551060 mlines |= TIOCM_RTS | TIOCM_CTS;
10561061 if (modem & MDM_IC)
@@ -1061,7 +1066,7 @@ static void gsm_process_modem(struct tty_struct *tty, struct gsm_dlci *dlci, · 4 unmodified lines
10611066 /* Carrier drop -> hangup */
10621067 if (tty) {
10631068 if ((mlines & TIOCM_CD) == 0 && (dlci->modem_rx & TIOCM_CD))
1064− if (!(tty->termios->c_cflag & CLOCAL))
1069+ if (!(tty->termios.c_cflag & CLOCAL))
10651070 tty_hangup(tty);
10661071 if (brk & 0x01)
10671072 tty_insert_flip_char(tty, 0, TTY_BREAK);
@@ -1190,6 +1195,8 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, · 122 unmodified lines
11901195 u8 *data, int clen)
11911196 {
11921197 u8 buf[1];
1198+ unsigned long flags;
1199+
11931200 switch (command) {
11941201 case CMD_CLD: {
11951202 struct gsm_dlci *dlci = gsm->dlci[0];
@@ -1206,16 +1213,18 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, · 10 unmodified lines
12061213 gsm_control_reply(gsm, CMD_TEST, data, clen);
12071214 break;
12081215 case CMD_FCON:
1209− /* Modem wants us to STFU */
1210− gsm->constipated = 1;
1211− gsm_control_reply(gsm, CMD_FCON, NULL, 0);
1212− break;
1213− case CMD_FCOFF:
12141216 /* Modem can accept data again */
12151217 gsm->constipated = 0;
1216− gsm_control_reply(gsm, CMD_FCOFF, NULL, 0);
1218+ gsm_control_reply(gsm, CMD_FCON, NULL, 0);
12171219 /* Kick the link in case it is idling */
1220+ spin_lock_irqsave(&gsm->tx_lock, flags);
12181221 gsm_data_kick(gsm);
1222+ spin_unlock_irqrestore(&gsm->tx_lock, flags);
1223+ break;
1224+ case CMD_FCOFF:
1225+ /* Modem wants us to STFU */
1226+ gsm->constipated = 1;
1227+ gsm_control_reply(gsm, CMD_FCOFF, NULL, 0);
12191228 break;
12201229 case CMD_MSC:
12211230 /* Out of band modem line change indicator for a DLCI */
@@ -1668,7 +1677,7 @@ static void gsm_dlci_free(struct kref *ref) · 446 unmodified lines
16681677 dlci->gsm->dlci[dlci->addr] = NULL;
16691678 kfifo_free(dlci->fifo);
16701679 while ((dlci->skb = skb_dequeue(&dlci->skb_list)))
1671− kfree_skb(dlci->skb);
1680+ dev_kfree_skb(dlci->skb);
16721681 kfree(dlci);
16731682 }
16741683
@@ -2007,7 +2016,7 @@ void gsm_cleanup_mux(struct gsm_mux *gsm) · 332 unmodified lines
20072016 {
20082017 int i;
20092018 struct gsm_dlci *dlci = gsm->dlci[0];
2010− struct gsm_msg *txq;
2019+ struct gsm_msg *txq, *ntxq;
20112020 struct gsm_control *gc;
20122021
20132022 gsm->dead = 1;
@@ -2042,11 +2051,9 @@ void gsm_cleanup_mux(struct gsm_mux *gsm) · 28 unmodified lines
20422051 if (gsm->dlci[i])
20432052 gsm_dlci_release(gsm->dlci[i]);
20442053 /* Now wipe the queues */
2045− for (txq = gsm->tx_head; txq != NULL; txq = gsm->tx_head) {
2046− gsm->tx_head = txq->next;
2054+ list_for_each_entry_safe(txq, ntxq, &gsm->tx_list, list)
20472055 kfree(txq);
2048− }
2049− gsm->tx_tail = NULL;
2056+ INIT_LIST_HEAD(&gsm->tx_list);
20502057 }
20512058 EXPORT_SYMBOL_GPL(gsm_cleanup_mux);
20522059
@@ -2157,6 +2164,7 @@ struct gsm_mux *gsm_alloc_mux(void) · 104 unmodified lines
21572164 }
21582165 spin_lock_init(&gsm->lock);
21592166 kref_init(&gsm->ref);
2167+ INIT_LIST_HEAD(&gsm->tx_list);
21602168
21612169 gsm->t1 = T1;
21622170 gsm->t2 = T2;
@@ -2273,7 +2281,7 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp, · 110 unmodified lines
22732281 gsm->error(gsm, *dp, flags);
22742282 break;
22752283 default:
2276− WARN_ONCE("%s: unknown flag %d\n",
2284+ WARN_ONCE(1, "%s: unknown flag %d\n",
22772285 tty_name(tty, buf), flags);
22782286 break;
22792287 }
@@ -2377,12 +2385,12 @@ static void gsmld_write_wakeup(struct tty_struct *tty) · 97 unmodified lines
23772385
23782386 /* Queue poll */
23792387 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2388+ spin_lock_irqsave(&gsm->tx_lock, flags);
23802389 gsm_data_kick(gsm);
23812390 if (gsm->tx_bytes < TX_THRESH_LO) {
2382− spin_lock_irqsave(&gsm->tx_lock, flags);
23832391 gsm_dlci_data_sweep(gsm);
2384− spin_unlock_irqrestore(&gsm->tx_lock, flags);
23852392 }
2393+ spin_unlock_irqrestore(&gsm->tx_lock, flags);
23862394 }
23872395
23882396 /**
@@ -2868,14 +2876,14 @@ static const struct tty_port_operations gsm_port_ops = { · 479 unmodified lines
28682876 .dtr_rts = gsm_dtr_rts,
28692877 };
28702878
2871−
2872−static int gsmtty_open(struct tty_struct *tty, struct file *filp)
2879+static int gsmtty_install(struct tty_driver *driver, struct tty_struct *tty)
28732880 {
28742881 struct gsm_mux *gsm;
28752882 struct gsm_dlci *dlci;
2876− struct tty_port *port;
28772883 unsigned int line = tty->index;
28782884 unsigned int mux = line >> 6;
2885+ bool alloc = false;
2886+ int ret;
28792887
28802888 line = line & 0x3F;
28812889
@@ -2889,14 +2897,35 @@ static int gsmtty_open(struct tty_struct *tty, struct file *filp) · 7 unmodified lines
28892897 gsm = gsm_mux[mux];
28902898 if (gsm->dead)
28912899 return -EL2HLT;
2900+ /* If DLCI 0 is not yet fully open return an error. This is ok from a locking
2901+ perspective as we don't have to worry about this if DLCI0 is lost */
2902+ if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN)
2903+ return -EL2NSYNC;
28922904 dlci = gsm->dlci[line];
2893− if (dlci == NULL)
2905+ if (dlci == NULL) {
2906+ alloc = true;
28942907 dlci = gsm_dlci_alloc(gsm, line);
2908+ }
28952909 if (dlci == NULL)
28962910 return -ENOMEM;
2897− port = &dlci->port;
2898− port->count++;
2911+ ret = tty_port_install(&dlci->port, driver, tty);
2912+ if (ret) {
2913+ if (alloc)
2914+ dlci_put(dlci);
2915+ return ret;
2916+ }
2917+
28992918 tty->driver_data = dlci;
2919+
2920+ return 0;
2921+}
2922+
2923+static int gsmtty_open(struct tty_struct *tty, struct file *filp)
2924+{
2925+ struct gsm_dlci *dlci = tty->driver_data;
2926+ struct tty_port *port = &dlci->port;
2927+
2928+ port->count++;
29002929 dlci_get(dlci);
29012930 dlci_get(dlci->gsm->dlci[0]);
29022931 mux_get(dlci->gsm);
@@ -3043,13 +3072,13 @@ static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old) · 140 unmodified lines
30433072 the RPN control message. This however rapidly gets nasty as we
30443073 then have to remap modem signals each way according to whether
30453074 our virtual cable is null modem etc .. */
3046− tty_termios_copy_hw(tty->termios, old);
3075+ tty_termios_copy_hw(&tty->termios, old);
30473076 }
30483077
30493078 static void gsmtty_throttle(struct tty_struct *tty)
30503079 {
30513080 struct gsm_dlci *dlci = tty->driver_data;
3052− if (tty->termios->c_cflag & CRTSCTS)
3081+ if (tty->termios.c_cflag & CRTSCTS)
30533082 dlci->modem_tx &= ~TIOCM_DTR;
30543083 dlci->throttled = 1;
30553084 /* Send an MSC with DTR cleared */
@@ -3059,7 +3088,7 @@ static void gsmtty_throttle(struct tty_struct *tty) · 3 unmodified lines
30593088 static void gsmtty_unthrottle(struct tty_struct *tty)
30603089 {
30613090 struct gsm_dlci *dlci = tty->driver_data;
3062− if (tty->termios->c_cflag & CRTSCTS)
3091+ if (tty->termios.c_cflag & CRTSCTS)
30633092 dlci->modem_tx |= TIOCM_DTR;
30643093 dlci->throttled = 0;
30653094 /* Send an MSC with DTR set */
@@ -3085,6 +3114,7 @@ static int gsmtty_break_ctl(struct tty_struct *tty, int state) · 19 unmodified lines
30853114
30863115 /* Virtual ttys for the demux */
30873116 static const struct tty_operations gsmtty_ops = {
3117+ .install = gsmtty_install,
30883118 .open = gsmtty_open,
30893119 .close = gsmtty_close,
30903120 .write = gsmtty_write,
drivers/tty/n_r3964.c+5−5
@@ -1065,7 +1065,7 @@ static ssize_t r3964_read(struct tty_struct *tty, struct file *file, · 1064 unmodified lines
10651065
10661066 TRACE_L("read()");
10671067
1068− tty_lock();
1068+ tty_lock(tty);
10691069
10701070 pClient = findClient(pInfo, task_pid(current));
10711071 if (pClient) {
@@ -1077,7 +1077,7 @@ static ssize_t r3964_read(struct tty_struct *tty, struct file *file, · 5 unmodified lines
10771077 goto unlock;
10781078 }
10791079 /* block until there is a message: */
1080− wait_event_interruptible_tty(pInfo->read_wait,
1080+ wait_event_interruptible_tty(tty, pInfo->read_wait,
10811081 (pMsg = remove_msg(pInfo, pClient)));
10821082 }
10831083
@@ -1107,7 +1107,7 @@ static ssize_t r3964_read(struct tty_struct *tty, struct file *file, · 23 unmodified lines
11071107 }
11081108 ret = -EPERM;
11091109 unlock:
1110− tty_unlock();
1110+ tty_unlock(tty);
11111111 return ret;
11121112 }
11131113
@@ -1156,7 +1156,7 @@ static ssize_t r3964_write(struct tty_struct *tty, struct file *file, · 42 unmodified lines
11561156 pHeader->locks = 0;
11571157 pHeader->owner = NULL;
11581158
1159− tty_lock();
1159+ tty_lock(tty);
11601160
11611161 pClient = findClient(pInfo, task_pid(current));
11621162 if (pClient) {
@@ -1175,7 +1175,7 @@ static ssize_t r3964_write(struct tty_struct *tty, struct file *file, · 12 unmodified lines
11751175 add_tx_queue(pInfo, pHeader);
11761176 trigger_transmit(pInfo);
11771177
1178− tty_unlock();
1178+ tty_unlock(tty);
11791179
11801180 return 0;
11811181 }
drivers/tty/n_tty.c+24−5
@@ -92,10 +92,18 @@ static inline int tty_put_user(struct tty_struct *tty, unsigned char x, · 91 unmodified lines
9292
9393 static void n_tty_set_room(struct tty_struct *tty)
9494 {
95− /* tty->read_cnt is not read locked ? */
96− int left = N_TTY_BUF_SIZE - tty->read_cnt - 1;
95+ int left;
9796 int old_left;
9897
98+ /* tty->read_cnt is not read locked ? */
99+ if (I_PARMRK(tty)) {
100+ /* Multiply read_cnt by 3, since each byte might take up to
101+ * three times as many spaces when PARMRK is set (depending on
102+ * its flags, e.g. parity error). */
103+ left = N_TTY_BUF_SIZE - tty->read_cnt * 3 - 1;
104+ } else
105+ left = N_TTY_BUF_SIZE - tty->read_cnt - 1;
106+
99107 /*
100108 * If we are doing input canonicalization, and there are no
101109 * pending newlines, let characters through without limit, so
@@ -1432,6 +1440,12 @@ static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp, · 1330 unmodified lines
14321440 */
14331441 if (tty->receive_room < TTY_THRESHOLD_THROTTLE)
14341442 tty_throttle(tty);
1443+
1444+ /* FIXME: there is a tiny race here if the receive room check runs
1445+ before the other work executes and empties the buffer (upping
1446+ the receiving room and unthrottling. We then throttle and get
1447+ stuck. This has been observed and traced down by Vincent Pillet/
1448+ We need to address this when we sort out out the rx path locking */
14351449 }
14361450
14371451 int is_ignored(int sig)
@@ -1460,7 +1474,7 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old) · 22 unmodified lines
14601474 BUG_ON(!tty);
14611475
14621476 if (old)
1463− canon_change = (old->c_lflag ^ tty->termios->c_lflag) & ICANON;
1477+ canon_change = (old->c_lflag ^ tty->termios.c_lflag) & ICANON;
14641478 if (canon_change) {
14651479 memset(&tty->read_flags, 0, sizeof tty->read_flags);
14661480 tty->canon_head = tty->read_tail;
@@ -1728,7 +1742,8 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file, · 261 unmodified lines
17281742
17291743 do_it_again:
17301744
1731− BUG_ON(!tty->read_buf);
1745+ if (WARN_ON(!tty->read_buf))
1746+ return -EAGAIN;
17321747
17331748 c = job_control(tty, file);
17341749 if (c < 0)
@@ -1832,13 +1847,13 @@ do_it_again: · 97 unmodified lines
18321847
18331848 if (tty->icanon && !L_EXTPROC(tty)) {
18341849 /* N.B. avoid overrun if nr == 0 */
1850+ spin_lock_irqsave(&tty->read_lock, flags);
18351851 while (nr && tty->read_cnt) {
18361852 int eol;
18371853
18381854 eol = test_and_clear_bit(tty->read_tail,
18391855 tty->read_flags);
18401856 c = tty->read_buf[tty->read_tail];
1841− spin_lock_irqsave(&tty->read_lock, flags);
18421857 tty->read_tail = ((tty->read_tail+1) &
18431858 (N_TTY_BUF_SIZE-1));
18441859 tty->read_cnt--;
@@ -1856,15 +1871,19 @@ do_it_again: · 11 unmodified lines
18561871 if (tty_put_user(tty, c, b++)) {
18571872 retval = -EFAULT;
18581873 b--;
1874+ spin_lock_irqsave(&tty->read_lock, flags);
18591875 break;
18601876 }
18611877 nr--;
18621878 }
18631879 if (eol) {
18641880 tty_audit_push(tty);
1881+ spin_lock_irqsave(&tty->read_lock, flags);
18651882 break;
18661883 }
1884+ spin_lock_irqsave(&tty->read_lock, flags);
18671885 }
1886+ spin_unlock_irqrestore(&tty->read_lock, flags);
18681887 if (retval)
18691888 break;
18701889 } else {
drivers/tty/nozomi.c+2−2
@@ -1473,8 +1473,8 @@ static int __devinit nozomi_card_init(struct pci_dev *pdev, · 1472 unmodified lines
14731473 port->dc = dc;
14741474 tty_port_init(&port->port);
14751475 port->port.ops = &noz_tty_port_ops;
1476− tty_dev = tty_register_device(ntty_driver, dc->index_start + i,
1477− &pdev->dev);
1476+ tty_dev = tty_port_register_device(&port->port, ntty_driver,
1477+ dc->index_start + i, &pdev->dev);
14781478
14791479 if (IS_ERR(tty_dev)) {
14801480 ret = PTR_ERR(tty_dev);
drivers/tty/pty.c+122−112
@@ -47,6 +47,7 @@ static void pty_close(struct tty_struct *tty, struct file *filp) · 46 unmodified lines
4747 wake_up_interruptible(&tty->read_wait);
4848 wake_up_interruptible(&tty->write_wait);
4949 tty->packet = 0;
50+ /* Review - krefs on tty_link ?? */
5051 if (!tty->link)
5152 return;
5253 tty->link->packet = 0;
@@ -62,9 +63,9 @@ static void pty_close(struct tty_struct *tty, struct file *filp) · 9 unmodified lines
6263 mutex_unlock(&devpts_mutex);
6364 }
6465 #endif
65− tty_unlock();
66+ tty_unlock(tty);
6667 tty_vhangup(tty->link);
67− tty_lock();
68+ tty_lock(tty);
6869 }
6970 }
7071
@@ -231,8 +232,8 @@ out: · 160 unmodified lines
231232 static void pty_set_termios(struct tty_struct *tty,
232233 struct ktermios *old_termios)
233234 {
234− tty->termios->c_cflag &= ~(CSIZE | PARENB);
235− tty->termios->c_cflag |= (CS8 | CREAD);
235+ tty->termios.c_cflag &= ~(CSIZE | PARENB);
236+ tty->termios.c_cflag |= (CS8 | CREAD);
236237 }
237238
238239 /**
@@ -282,60 +283,110 @@ done: · 43 unmodified lines
282283 return 0;
283284 }
284285
285−/* Traditional BSD devices */
286−#ifdef CONFIG_LEGACY_PTYS
287−
288−static int pty_install(struct tty_driver *driver, struct tty_struct *tty)
286+/**
287+ * pty_common_install - set up the pty pair
288+ * @driver: the pty driver
289+ * @tty: the tty being instantiated
290+ * @bool: legacy, true if this is BSD style
291+ *
292+ * Perform the initial set up for the tty/pty pair. Called from the
293+ * tty layer when the port is first opened.
294+ *
295+ * Locking: the caller must hold the tty_mutex
296+ */
297+static int pty_common_install(struct tty_driver *driver, struct tty_struct *tty,
298+ bool legacy)
289299 {
290300 struct tty_struct *o_tty;
301+ struct tty_port *ports[2];
291302 int idx = tty->index;
292− int retval;
303+ int retval = -ENOMEM;
293304
294305 o_tty = alloc_tty_struct();
295306 if (!o_tty)
296− return -ENOMEM;
307+ goto err;
308+ ports[0] = kmalloc(sizeof **ports, GFP_KERNEL);
309+ ports[1] = kmalloc(sizeof **ports, GFP_KERNEL);
310+ if (!ports[0] || !ports[1])
311+ goto err_free_tty;
297312 if (!try_module_get(driver->other->owner)) {
298313 /* This cannot in fact currently happen */
299− retval = -ENOMEM;
300314 goto err_free_tty;
301315 }
302316 initialize_tty_struct(o_tty, driver->other, idx);
303317
304− /* We always use new tty termios data so we can do this
305− the easy way .. */
306− retval = tty_init_termios(tty);
307− if (retval)
308− goto err_deinit_tty;
309−
310− retval = tty_init_termios(o_tty);
311− if (retval)
312− goto err_free_termios;
318+ if (legacy) {
319+ /* We always use new tty termios data so we can do this
320+ the easy way .. */
321+ retval = tty_init_termios(tty);
322+ if (retval)
323+ goto err_deinit_tty;
324+
325+ retval = tty_init_termios(o_tty);
326+ if (retval)
327+ goto err_free_termios;
328+
329+ driver->other->ttys[idx] = o_tty;
330+ driver->ttys[idx] = tty;
331+ } else {
332+ memset(&tty->termios_locked, 0, sizeof(tty->termios_locked));
333+ tty->termios = driver->init_termios;
334+ memset(&o_tty->termios_locked, 0, sizeof(tty->termios_locked));
335+ o_tty->termios = driver->other->init_termios;
336+ }
313337
314338 /*
315339 * Everything allocated ... set up the o_tty structure.
316340 */
317− driver->other->ttys[idx] = o_tty;
318341 tty_driver_kref_get(driver->other);
319342 if (driver->subtype == PTY_TYPE_MASTER)
320343 o_tty->count++;
321344 /* Establish the links in both directions */
322345 tty->link = o_tty;
323346 o_tty->link = tty;
347+ tty_port_init(ports[0]);
348+ tty_port_init(ports[1]);
349+ o_tty->port = ports[0];
350+ tty->port = ports[1];
324351
325352 tty_driver_kref_get(driver);
326353 tty->count++;
327− driver->ttys[idx] = tty;
328354 return 0;
329355 err_free_termios:
330− tty_free_termios(tty);
356+ if (legacy)
357+ tty_free_termios(tty);
331358 err_deinit_tty:
332359 deinitialize_tty_struct(o_tty);
333360 module_put(o_tty->driver->owner);
334361 err_free_tty:
362+ kfree(ports[0]);
363+ kfree(ports[1]);
335364 free_tty_struct(o_tty);
365+err:
336366 return retval;
337367 }
338368
369+static void pty_cleanup(struct tty_struct *tty)
370+{
371+ kfree(tty->port);
372+}
373+
374+/* Traditional BSD devices */
375+#ifdef CONFIG_LEGACY_PTYS
376+
377+static int pty_install(struct tty_driver *driver, struct tty_struct *tty)
378+{
379+ return pty_common_install(driver, tty, true);
380+}
381+
382+static void pty_remove(struct tty_driver *driver, struct tty_struct *tty)
383+{
384+ struct tty_struct *pair = tty->link;
385+ driver->ttys[tty->index] = NULL;
386+ if (pair)
387+ pair->driver->ttys[pair->index] = NULL;
388+}
389+
339390 static int pty_bsd_ioctl(struct tty_struct *tty,
340391 unsigned int cmd, unsigned long arg)
341392 {
@@ -366,7 +417,9 @@ static const struct tty_operations master_pty_ops_bsd = { · 24 unmodified lines
366417 .unthrottle = pty_unthrottle,
367418 .set_termios = pty_set_termios,
368419 .ioctl = pty_bsd_ioctl,
369− .resize = pty_resize
420+ .cleanup = pty_cleanup,
421+ .resize = pty_resize,
422+ .remove = pty_remove
370423 };
371424
372425 static const struct tty_operations slave_pty_ops_bsd = {
@@ -379,7 +432,9 @@ static const struct tty_operations slave_pty_ops_bsd = { · 6 unmodified lines
379432 .chars_in_buffer = pty_chars_in_buffer,
380433 .unthrottle = pty_unthrottle,
381434 .set_termios = pty_set_termios,
382− .resize = pty_resize
435+ .cleanup = pty_cleanup,
436+ .resize = pty_resize,
437+ .remove = pty_remove
383438 };
384439
385440 static void __init legacy_pty_init(void)
@@ -389,12 +444,18 @@ static void __init legacy_pty_init(void) · 3 unmodified lines
389444 if (legacy_count <= 0)
390445 return;
391446
392− pty_driver = alloc_tty_driver(legacy_count);
393− if (!pty_driver)
447+ pty_driver = tty_alloc_driver(legacy_count,
448+ TTY_DRIVER_RESET_TERMIOS |
449+ TTY_DRIVER_REAL_RAW |
450+ TTY_DRIVER_DYNAMIC_ALLOC);
451+ if (IS_ERR(pty_driver))
394452 panic("Couldn't allocate pty driver");
395453
396− pty_slave_driver = alloc_tty_driver(legacy_count);
397− if (!pty_slave_driver)
454+ pty_slave_driver = tty_alloc_driver(legacy_count,
455+ TTY_DRIVER_RESET_TERMIOS |
456+ TTY_DRIVER_REAL_RAW |
457+ TTY_DRIVER_DYNAMIC_ALLOC);
458+ if (IS_ERR(pty_slave_driver))
398459 panic("Couldn't allocate pty slave driver");
399460
400461 pty_driver->driver_name = "pty_master";
@@ -410,7 +471,6 @@ static void __init legacy_pty_init(void) · 9 unmodified lines
410471 pty_driver->init_termios.c_lflag = 0;
411472 pty_driver->init_termios.c_ispeed = 38400;
412473 pty_driver->init_termios.c_ospeed = 38400;
413− pty_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
414474 pty_driver->other = pty_slave_driver;
415475 tty_set_operations(pty_driver, &master_pty_ops_bsd);
416476
@@ -424,8 +484,6 @@ static void __init legacy_pty_init(void) · 7 unmodified lines
424484 pty_slave_driver->init_termios.c_cflag = B38400 | CS8 | CREAD;
425485 pty_slave_driver->init_termios.c_ispeed = 38400;
426486 pty_slave_driver->init_termios.c_ospeed = 38400;
427− pty_slave_driver->flags = TTY_DRIVER_RESET_TERMIOS |
428− TTY_DRIVER_REAL_RAW;
429487 pty_slave_driver->other = pty_driver;
430488 tty_set_operations(pty_slave_driver, &slave_pty_ops_bsd);
431489
@@ -497,78 +555,22 @@ static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver, · 65 unmodified lines
497555 return tty;
498556 }
499557
500−static void pty_unix98_shutdown(struct tty_struct *tty)
501−{
502− tty_driver_remove_tty(tty->driver, tty);
503− /* We have our own method as we don't use the tty index */
504− kfree(tty->termios);
505−}
506−
507558 /* We have no need to install and remove our tty objects as devpts does all
508559 the work for us */
509560
510561 static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty)
511562 {
512− struct tty_struct *o_tty;
513− int idx = tty->index;
514−
515− o_tty = alloc_tty_struct();
516− if (!o_tty)
517− return -ENOMEM;
518− if (!try_module_get(driver->other->owner)) {
519− /* This cannot in fact currently happen */
520− goto err_free_tty;
521− }
522− initialize_tty_struct(o_tty, driver->other, idx);
523−
524− tty->termios = kzalloc(sizeof(struct ktermios[2]), GFP_KERNEL);
525− if (tty->termios == NULL)
526− goto err_free_mem;
527− *tty->termios = driver->init_termios;
528− tty->termios_locked = tty->termios + 1;
529−
530− o_tty->termios = kzalloc(sizeof(struct ktermios[2]), GFP_KERNEL);
531− if (o_tty->termios == NULL)
532− goto err_free_mem;
533− *o_tty->termios = driver->other->init_termios;
534− o_tty->termios_locked = o_tty->termios + 1;
535−
536− tty_driver_kref_get(driver->other);
537− if (driver->subtype == PTY_TYPE_MASTER)
538− o_tty->count++;
539− /* Establish the links in both directions */
540− tty->link = o_tty;
541− o_tty->link = tty;
542− /*
543− * All structures have been allocated, so now we install them.
544− * Failures after this point use release_tty to clean up, so
545− * there's no need to null out the local pointers.
546− */
547− tty_driver_kref_get(driver);
548− tty->count++;
549− return 0;
550−err_free_mem:
551− deinitialize_tty_struct(o_tty);
552− kfree(o_tty->termios);
553− kfree(tty->termios);
554− module_put(o_tty->driver->owner);
555−err_free_tty:
556− free_tty_struct(o_tty);
557− return -ENOMEM;
558−}
559−
560−static void ptm_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)
561−{
563+ return pty_common_install(driver, tty, false);
562564 }
563565
564−static void pts_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)
566+static void pty_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)
565567 {
566568 }
567569
568570 static const struct tty_operations ptm_unix98_ops = {
569571 .lookup = ptm_unix98_lookup,
570572 .install = pty_unix98_install,
571− .remove = ptm_unix98_remove,
573+ .remove = pty_unix98_remove,
572574 .open = pty_open,
573575 .close = pty_close,
574576 .write = pty_write,
@@ -578,14 +580,14 @@ static const struct tty_operations ptm_unix98_ops = { · 3 unmodified lines
578580 .unthrottle = pty_unthrottle,
579581 .set_termios = pty_set_termios,
580582 .ioctl = pty_unix98_ioctl,
581− .shutdown = pty_unix98_shutdown,
582− .resize = pty_resize
583+ .resize = pty_resize,
584+ .cleanup = pty_cleanup
583585 };
584586
585587 static const struct tty_operations pty_unix98_ops = {
586588 .lookup = pts_unix98_lookup,
587589 .install = pty_unix98_install,
588− .remove = pts_unix98_remove,
590+ .remove = pty_unix98_remove,
589591 .open = pty_open,
590592 .close = pty_close,
591593 .write = pty_write,
@@ -594,7 +596,7 @@ static const struct tty_operations pty_unix98_ops = { · 2 unmodified lines
594596 .chars_in_buffer = pty_chars_in_buffer,
595597 .unthrottle = pty_unthrottle,
596598 .set_termios = pty_set_termios,
597− .shutdown = pty_unix98_shutdown
599+ .cleanup = pty_cleanup,
598600 };
599601
600602 /**
@@ -622,26 +624,27 @@ static int ptmx_open(struct inode *inode, struct file *filp) · 21 unmodified lines
622624 return retval;
623625
624626 /* find a device that is not in use. */
625− tty_lock();
627+ mutex_lock(&devpts_mutex);
626628 index = devpts_new_index(inode);
627− tty_unlock();
628629 if (index < 0) {
629630 retval = index;
630631 goto err_file;
631632 }
632633
634+ mutex_unlock(&devpts_mutex);
635+
633636 mutex_lock(&tty_mutex);
634− mutex_lock(&devpts_mutex);
635637 tty = tty_init_dev(ptm_driver, index);
636− mutex_unlock(&devpts_mutex);
637− tty_lock();
638− mutex_unlock(&tty_mutex);
639638
640639 if (IS_ERR(tty)) {
641640 retval = PTR_ERR(tty);
642641 goto out;
643642 }
644643
644+ /* The tty returned here is locked so we can safely
645+ drop the mutex */
646+ mutex_unlock(&tty_mutex);
647+
645648 set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
646649
647650 tty_add_file(tty, filp);
@@ -654,16 +657,17 @@ static int ptmx_open(struct inode *inode, struct file *filp) · 6 unmodified lines
654657 if (retval)
655658 goto err_release;
656659
657− tty_unlock();
660+ tty_unlock(tty);
658661 return 0;
659662 err_release:
660− tty_unlock();
663+ tty_unlock(tty);
661664 tty_release(inode, filp);
662665 return retval;
663666 out:
667+ mutex_unlock(&tty_mutex);
664668 devpts_kill_index(inode, index);
665− tty_unlock();
666669 err_file:
670+ mutex_unlock(&devpts_mutex);
667671 tty_free_file(filp);
668672 return retval;
669673 }
@@ -672,11 +676,21 @@ static struct file_operations ptmx_fops; · 2 unmodified lines
672676
673677 static void __init unix98_pty_init(void)
674678 {
675− ptm_driver = alloc_tty_driver(NR_UNIX98_PTY_MAX);
676− if (!ptm_driver)
679+ ptm_driver = tty_alloc_driver(NR_UNIX98_PTY_MAX,
680+ TTY_DRIVER_RESET_TERMIOS |
681+ TTY_DRIVER_REAL_RAW |
682+ TTY_DRIVER_DYNAMIC_DEV |
683+ TTY_DRIVER_DEVPTS_MEM |
684+ TTY_DRIVER_DYNAMIC_ALLOC);
685+ if (IS_ERR(ptm_driver))
677686 panic("Couldn't allocate Unix98 ptm driver");
678− pts_driver = alloc_tty_driver(NR_UNIX98_PTY_MAX);
679− if (!pts_driver)
687+ pts_driver = tty_alloc_driver(NR_UNIX98_PTY_MAX,
688+ TTY_DRIVER_RESET_TERMIOS |
689+ TTY_DRIVER_REAL_RAW |
690+ TTY_DRIVER_DYNAMIC_DEV |
691+ TTY_DRIVER_DEVPTS_MEM |
692+ TTY_DRIVER_DYNAMIC_ALLOC);
693+ if (IS_ERR(pts_driver))
680694 panic("Couldn't allocate Unix98 pts driver");
681695
682696 ptm_driver->driver_name = "pty_master";
@@ -692,8 +706,6 @@ static void __init unix98_pty_init(void) · 9 unmodified lines
692706 ptm_driver->init_termios.c_lflag = 0;
693707 ptm_driver->init_termios.c_ispeed = 38400;
694708 ptm_driver->init_termios.c_ospeed = 38400;
695− ptm_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW |
696− TTY_DRIVER_DYNAMIC_DEV | TTY_DRIVER_DEVPTS_MEM;
697709 ptm_driver->other = pts_driver;
698710 tty_set_operations(ptm_driver, &ptm_unix98_ops);
699711
@@ -707,8 +719,6 @@ static void __init unix98_pty_init(void) · 7 unmodified lines
707719 pts_driver->init_termios.c_cflag = B38400 | CS8 | CREAD;
708720 pts_driver->init_termios.c_ispeed = 38400;
709721 pts_driver->init_termios.c_ospeed = 38400;
710− pts_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW |
711− TTY_DRIVER_DYNAMIC_DEV | TTY_DRIVER_DEVPTS_MEM;
712722 pts_driver->other = ptm_driver;
713723 tty_set_operations(pts_driver, &pty_unix98_ops);
714724
drivers/tty/rocket.c+11−11
@@ -704,8 +704,8 @@ static void init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) · 703 unmodified lines
704704 spin_lock_init(&info->slock);
705705 mutex_init(&info->write_mtx);
706706 rp_table[line] = info;
707− tty_register_device(rocket_driver, line, pci_dev ? &pci_dev->dev :
708− NULL);
707+ tty_port_register_device(&info->port, rocket_driver, line,
708+ pci_dev ? &pci_dev->dev : NULL);
709709 }
710710
711711 /*
@@ -720,7 +720,7 @@ static void configure_r_port(struct tty_struct *tty, struct r_port *info, · 8 unmodified lines
720720 unsigned rocketMode;
721721 int bits, baud, divisor;
722722 CHANNEL_t *cp;
723− struct ktermios *t = tty->termios;
723+ struct ktermios *t = &tty->termios;
724724
725725 cp = &info->channel;
726726 cflag = t->c_cflag;
@@ -978,7 +978,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp) · 251 unmodified lines
978978 tty->alt_speed = 460800;
979979
980980 configure_r_port(tty, info, NULL);
981− if (tty->termios->c_cflag & CBAUD) {
981+ if (tty->termios.c_cflag & CBAUD) {
982982 sSetDTR(cp);
983983 sSetRTS(cp);
984984 }
@@ -1089,35 +1089,35 @@ static void rp_set_termios(struct tty_struct *tty, · 104 unmodified lines
10891089 if (rocket_paranoia_check(info, "rp_set_termios"))
10901090 return;
10911091
1092− cflag = tty->termios->c_cflag;
1092+ cflag = tty->termios.c_cflag;
10931093
10941094 /*
10951095 * This driver doesn't support CS5 or CS6
10961096 */
10971097 if (((cflag & CSIZE) == CS5) || ((cflag & CSIZE) == CS6))
1098− tty->termios->c_cflag =
1098+ tty->termios.c_cflag =
10991099 ((cflag & ~CSIZE) | (old_termios->c_cflag & CSIZE));
11001100 /* Or CMSPAR */
1101− tty->termios->c_cflag &= ~CMSPAR;
1101+ tty->termios.c_cflag &= ~CMSPAR;
11021102
11031103 configure_r_port(tty, info, old_termios);
11041104
11051105 cp = &info->channel;
11061106
11071107 /* Handle transition to B0 status */
1108− if ((old_termios->c_cflag & CBAUD) && !(tty->termios->c_cflag & CBAUD)) {
1108+ if ((old_termios->c_cflag & CBAUD) && !(tty->termios.c_cflag & CBAUD)) {
11091109 sClrDTR(cp);
11101110 sClrRTS(cp);
11111111 }
11121112
11131113 /* Handle transition away from B0 status */
1114− if (!(old_termios->c_cflag & CBAUD) && (tty->termios->c_cflag & CBAUD)) {
1115− if (!tty->hw_stopped || !(tty->termios->c_cflag & CRTSCTS))
1114+ if (!(old_termios->c_cflag & CBAUD) && (tty->termios.c_cflag & CBAUD)) {
1115+ if (!tty->hw_stopped || !(tty->termios.c_cflag & CRTSCTS))
11161116 sSetRTS(cp);
11171117 sSetDTR(cp);
11181118 }
11191119
1120− if ((old_termios->c_cflag & CRTSCTS) && !(tty->termios->c_cflag & CRTSCTS)) {
1120+ if ((old_termios->c_cflag & CRTSCTS) && !(tty->termios.c_cflag & CRTSCTS)) {
11211121 tty->hw_stopped = 0;
11221122 rp_start(tty);
11231123 }
drivers/tty/serial/68328serial.c+13−10
@@ -515,7 +515,7 @@ static void change_speed(struct m68k_serial *info, struct tty_struct *tty) · 514 unmodified lines
515515 unsigned cflag;
516516 int i;
517517
518− cflag = tty->termios->c_cflag;
518+ cflag = tty->termios.c_cflag;
519519 if (!(port = info->port))
520520 return;
521521
@@ -617,7 +617,7 @@ static void rs_set_ldisc(struct tty_struct *tty) · 95 unmodified lines
617617 if (serial_paranoia_check(info, tty->name, "rs_set_ldisc"))
618618 return;
619619
620− info->is_cons = (tty->termios->c_line == N_TTY);
620+ info->is_cons = (tty->termios.c_line == N_TTY);
621621
622622 printk("ttyS%d console mode %s\n", info->line, info->is_cons ? "on" : "off");
623623 }
@@ -985,7 +985,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 361 unmodified lines
985985 change_speed(info, tty);
986986
987987 if ((old_termios->c_cflag & CRTSCTS) &&
988− !(tty->termios->c_cflag & CRTSCTS)) {
988+ !(tty->termios.c_cflag & CRTSCTS)) {
989989 tty->hw_stopped = 0;
990990 rs_start(tty);
991991 }
@@ -1070,7 +1070,7 @@ static void rs_close(struct tty_struct *tty, struct file * filp) · 78 unmodified lines
10701070 if (tty->ldisc.close)
10711071 (tty->ldisc.close)(tty);
10721072 tty->ldisc = ldiscs[N_TTY];
1073− tty->termios->c_line = N_TTY;
1073+ tty->termios.c_line = N_TTY;
10741074 if (tty->ldisc.open)
10751075 (tty->ldisc.open)(tty);
10761076 }
@@ -1189,12 +1189,6 @@ rs68328_init(void) · 112 unmodified lines
11891189 serial_driver->flags = TTY_DRIVER_REAL_RAW;
11901190 tty_set_operations(serial_driver, &rs_ops);
11911191
1192− if (tty_register_driver(serial_driver)) {
1193− put_tty_driver(serial_driver);
1194− printk(KERN_ERR "Couldn't register serial driver\n");
1195− return -ENOMEM;
1196− }
1197−
11981192 local_irq_save(flags);
11991193
12001194 for(i=0;i<NR_PORTS;i++) {
@@ -1224,8 +1218,17 @@ rs68328_init(void) · 23 unmodified lines
12241218 0,
12251219 "M68328_UART", info))
12261220 panic("Unable to attach 68328 serial interrupt\n");
1221+
1222+ tty_port_link_device(&info->tport, serial_driver, i);
12271223 }
12281224 local_irq_restore(flags);
1225+
1226+ if (tty_register_driver(serial_driver)) {
1227+ put_tty_driver(serial_driver);
1228+ printk(KERN_ERR "Couldn't register serial driver\n");
1229+ return -ENOMEM;
1230+ }
1231+
12291232 return 0;
12301233 }
12311234
drivers/tty/serial/8250/8250.c+33−51
@@ -2202,6 +2202,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, · 2201 unmodified lines
22022202 unsigned char cval, fcr = 0;
22032203 unsigned long flags;
22042204 unsigned int baud, quot;
2205+ int fifo_bug = 0;
22052206
22062207 switch (termios->c_cflag & CSIZE) {
22072208 case CS5:
@@ -2221,8 +2222,11 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, · 13 unmodified lines
22212222
22222223 if (termios->c_cflag & CSTOPB)
22232224 cval |= UART_LCR_STOP;
2224− if (termios->c_cflag & PARENB)
2225+ if (termios->c_cflag & PARENB) {
22252226 cval |= UART_LCR_PARITY;
2227+ if (up->bugs & UART_BUG_PARITY)
2228+ fifo_bug = 1;
2229+ }
22262230 if (!(termios->c_cflag & PARODD))
22272231 cval |= UART_LCR_EPAR;
22282232 #ifdef CMSPAR
@@ -2246,7 +2250,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, · 17 unmodified lines
22462250
22472251 if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) {
22482252 fcr = uart_config[port->type].fcr;
2249− if (baud < 2400) {
2253+ if (baud < 2400 || fifo_bug) {
22502254 fcr &= ~UART_FCR_TRIGGER_MASK;
22512255 fcr |= UART_FCR_TRIGGER_1;
22522256 }
@@ -2336,7 +2340,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, · 83 unmodified lines
23362340 serial_port_out(port, UART_EFR, efr);
23372341 }
23382342
2339−#ifdef CONFIG_ARCH_OMAP
2343+#ifdef CONFIG_ARCH_OMAP1
23402344 /* Workaround to enable 115200 baud on OMAP1510 internal ports */
23412345 if (cpu_is_omap1510() && is_omap_port(up)) {
23422346 if (baud == 115200) {
@@ -2426,7 +2430,7 @@ static unsigned int serial8250_port_size(struct uart_8250_port *pt) · 83 unmodified lines
24262430 {
24272431 if (pt->port.iotype == UPIO_AU)
24282432 return 0x1000;
2429−#ifdef CONFIG_ARCH_OMAP
2433+#ifdef CONFIG_ARCH_OMAP1
24302434 if (is_omap_port(pt))
24312435 return 0x16 << pt->port.regshift;
24322436 #endif
@@ -2979,36 +2983,36 @@ void serial8250_resume_port(int line) · 546 unmodified lines
29792983 static int __devinit serial8250_probe(struct platform_device *dev)
29802984 {
29812985 struct plat_serial8250_port *p = dev->dev.platform_data;
2982− struct uart_port port;
2986+ struct uart_8250_port uart;
29832987 int ret, i, irqflag = 0;
29842988
2985− memset(&port, 0, sizeof(struct uart_port));
2989+ memset(&uart, 0, sizeof(uart));
29862990
29872991 if (share_irqs)
29882992 irqflag = IRQF_SHARED;
29892993
29902994 for (i = 0; p && p->flags != 0; p++, i++) {
2991− port.iobase = p->iobase;
2992− port.membase = p->membase;
2993− port.irq = p->irq;
2994− port.irqflags = p->irqflags;
2995− port.uartclk = p->uartclk;
2996− port.regshift = p->regshift;
2997− port.iotype = p->iotype;
2998− port.flags = p->flags;
2999− port.mapbase = p->mapbase;
3000− port.hub6 = p->hub6;
3001− port.private_data = p->private_data;
3002− port.type = p->type;
3003− port.serial_in = p->serial_in;
3004− port.serial_out = p->serial_out;
3005− port.handle_irq = p->handle_irq;
3006− port.handle_break = p->handle_break;
3007− port.set_termios = p->set_termios;
3008− port.pm = p->pm;
3009− port.dev = &dev->dev;
3010− port.irqflags |= irqflag;
3011− ret = serial8250_register_port(&port);
2995+ uart.port.iobase = p->iobase;
2996+ uart.port.membase = p->membase;
2997+ uart.port.irq = p->irq;
2998+ uart.port.irqflags = p->irqflags;
2999+ uart.port.uartclk = p->uartclk;
3000+ uart.port.regshift = p->regshift;
3001+ uart.port.iotype = p->iotype;
3002+ uart.port.flags = p->flags;
3003+ uart.port.mapbase = p->mapbase;
3004+ uart.port.hub6 = p->hub6;
3005+ uart.port.private_data = p->private_data;
3006+ uart.port.type = p->type;
3007+ uart.port.serial_in = p->serial_in;
3008+ uart.port.serial_out = p->serial_out;
3009+ uart.port.handle_irq = p->handle_irq;
3010+ uart.port.handle_break = p->handle_break;
3011+ uart.port.set_termios = p->set_termios;
3012+ uart.port.pm = p->pm;
3013+ uart.port.dev = &dev->dev;
3014+ uart.port.irqflags |= irqflag;
3015+ ret = serial8250_register_8250_port(&uart);
30123016 if (ret < 0) {
30133017 dev_err(&dev->dev, "unable to register port at index %d "
30143018 "(IO%lx MEM%llx IRQ%d): %d\n", i,
@@ -3081,7 +3085,7 @@ static struct platform_driver serial8250_isa_driver = { · 66 unmodified lines
30813085 static struct platform_device *serial8250_isa_devs;
30823086
30833087 /*
3084− * serial8250_register_port and serial8250_unregister_port allows for
3088+ * serial8250_register_8250_port and serial8250_unregister_port allows for
30853089 * 16x50 serial ports to be configured at run-time, to support PCMCIA
30863090 * modems and PCI multiport cards.
30873091 */
@@ -3155,6 +3159,7 @@ int serial8250_register_8250_port(struct uart_8250_port *up) · 67 unmodified lines
31553159 uart->port.regshift = up->port.regshift;
31563160 uart->port.iotype = up->port.iotype;
31573161 uart->port.flags = up->port.flags | UPF_BOOT_AUTOCONF;
3162+ uart->bugs = up->bugs;
31583163 uart->port.mapbase = up->port.mapbase;
31593164 uart->port.private_data = up->port.private_data;
31603165 if (up->port.dev)
@@ -3197,29 +3202,6 @@ int serial8250_register_8250_port(struct uart_8250_port *up) · 36 unmodified lines
31973202 }
31983203 EXPORT_SYMBOL(serial8250_register_8250_port);
31993204
3200−/**
3201− * serial8250_register_port - register a serial port
3202− * @port: serial port template
3203− *
3204− * Configure the serial port specified by the request. If the
3205− * port exists and is in use, it is hung up and unregistered
3206− * first.
3207− *
3208− * The port is then probed and if necessary the IRQ is autodetected
3209− * If this fails an error is returned.
3210− *
3211− * On success the port is ready to use and the line number is returned.
3212− */
3213−int serial8250_register_port(struct uart_port *port)
3214−{
3215− struct uart_8250_port up;
3216−
3217− memset(&up, 0, sizeof(up));
3218− memcpy(&up.port, port, sizeof(*port));
3219− return serial8250_register_8250_port(&up);
3220−}
3221−EXPORT_SYMBOL(serial8250_register_port);
3222−
32233205 /**
32243206 * serial8250_unregister_port - remove a 16x50 serial port at runtime
32253207 * @line: serial line number
drivers/tty/serial/8250/8250.h+1−33
@@ -13,36 +13,6 @@ · 12 unmodified lines
1313
1414 #include <linux/serial_8250.h>
1515
16−struct uart_8250_port {
17− struct uart_port port;
18− struct timer_list timer; /* "no irq" timer */
19− struct list_head list; /* ports on this IRQ */
20− unsigned short capabilities; /* port capabilities */
21− unsigned short bugs; /* port bugs */
22− unsigned int tx_loadsz; /* transmit fifo load size */
23− unsigned char acr;
24− unsigned char ier;
25− unsigned char lcr;
26− unsigned char mcr;
27− unsigned char mcr_mask; /* mask of user bits */
28− unsigned char mcr_force; /* mask of forced bits */
29− unsigned char cur_iotype; /* Running I/O type */
30−
31− /*
32− * Some bits in registers are cleared on a read, so they must
33− * be saved whenever the register is read but the bits will not
34− * be immediately processed.
35− */
36−#define LSR_SAVE_FLAGS UART_LSR_BRK_ERROR_BITS
37− unsigned char lsr_saved_flags;
38−#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
39− unsigned char msr_saved_flags;
40−
41− /* 8250 specific callbacks */
42− int (*dl_read)(struct uart_8250_port *);
43− void (*dl_write)(struct uart_8250_port *, int);
44−};
45−
4616 struct old_serial_port {
4717 unsigned int uart;
4818 unsigned int baud_base;
@@ -56,9 +26,6 @@ struct old_serial_port { · 7 unmodified lines
5626 unsigned long irqflags;
5727 };
5828
59−/*
60− * This replaces serial_uart_config in include/linux/serial.h
61− */
6229 struct serial8250_config {
6330 const char *name;
6431 unsigned short fifo_size;
@@ -78,6 +45,7 @@ struct serial8250_config { · 13 unmodified lines
7845 #define UART_BUG_TXEN (1 << 1) /* UART has buggy TX IIR status */
7946 #define UART_BUG_NOMSR (1 << 2) /* UART has buggy MSR status bits (Au1x00) */
8047 #define UART_BUG_THRE (1 << 3) /* UART has buggy THRE reassertion */
48+#define UART_BUG_PARITY (1 << 4) /* UART mishandles parity if FIFO enabled */
8149
8250 #define PROBE_RSA (1 << 0)
8351 #define PROBE_ANY (~0)
drivers/tty/serial/8250/8250_acorn.c+11−11
@@ -43,7 +43,7 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id) · 42 unmodified lines
4343 {
4444 struct serial_card_info *info;
4545 struct serial_card_type *type = id->data;
46− struct uart_port port;
46+ struct uart_8250_port uart;
4747 unsigned long bus_addr;
4848 unsigned int i;
4949
@@ -62,19 +62,19 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id) · 12 unmodified lines
6262
6363 ecard_set_drvdata(ec, info);
6464
65− memset(&port, 0, sizeof(struct uart_port));
66− port.irq = ec->irq;
67− port.flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
68− port.uartclk = type->uartclk;
69− port.iotype = UPIO_MEM;
70− port.regshift = 2;
71− port.dev = &ec->dev;
65+ memset(&uart, 0, sizeof(struct uart_8250_port));
66+ uart.port.irq = ec->irq;
67+ uart.port.flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
68+ uart.port.uartclk = type->uartclk;
69+ uart.port.iotype = UPIO_MEM;
70+ uart.port.regshift = 2;
71+ uart.port.dev = &ec->dev;
7272
7373 for (i = 0; i < info->num_ports; i ++) {
74− port.membase = info->vaddr + type->offset[i];
75− port.mapbase = bus_addr + type->offset[i];
74+ uart.port.membase = info->vaddr + type->offset[i];
75+ uart.port.mapbase = bus_addr + type->offset[i];
7676
77− info->ports[i] = serial8250_register_port(&port);
77+ info->ports[i] = serial8250_register_8250_port(&uart);
7878 }
7979
8080 return 0;
drivers/tty/serial/8250/8250_dw.c+19−19
@@ -89,7 +89,7 @@ static int dw8250_handle_irq(struct uart_port *p) · 88 unmodified lines
8989
9090 static int __devinit dw8250_probe(struct platform_device *pdev)
9191 {
92− struct uart_port port = {};
92+ struct uart_8250_port uart = {};
9393 struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
9494 struct resource *irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
9595 struct device_node *np = pdev->dev.of_node;
@@ -104,28 +104,28 @@ static int __devinit dw8250_probe(struct platform_device *pdev) · 8 unmodified lines
104104 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
105105 if (!data)
106106 return -ENOMEM;
107− port.private_data = data;
108−
109− spin_lock_init(&port.lock);
110− port.mapbase = regs->start;
111− port.irq = irq->start;
112− port.handle_irq = dw8250_handle_irq;
113− port.type = PORT_8250;
114− port.flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP |
107+ uart.port.private_data = data;
108+
109+ spin_lock_init(&uart.port.lock);
110+ uart.port.mapbase = regs->start;
111+ uart.port.irq = irq->start;
112+ uart.port.handle_irq = dw8250_handle_irq;
113+ uart.port.type = PORT_8250;
114+ uart.port.flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP |
115115 UPF_FIXED_PORT | UPF_FIXED_TYPE;
116− port.dev = &pdev->dev;
116+ uart.port.dev = &pdev->dev;
117117
118− port.iotype = UPIO_MEM;
119− port.serial_in = dw8250_serial_in;
120− port.serial_out = dw8250_serial_out;
118+ uart.port.iotype = UPIO_MEM;
119+ uart.port.serial_in = dw8250_serial_in;
120+ uart.port.serial_out = dw8250_serial_out;
121121 if (!of_property_read_u32(np, "reg-io-width", &val)) {
122122 switch (val) {
123123 case 1:
124124 break;
125125 case 4:
126− port.iotype = UPIO_MEM32;
127− port.serial_in = dw8250_serial_in32;
128− port.serial_out = dw8250_serial_out32;
126+ uart.port.iotype = UPIO_MEM32;
127+ uart.port.serial_in = dw8250_serial_in32;
128+ uart.port.serial_out = dw8250_serial_out32;
129129 break;
130130 default:
131131 dev_err(&pdev->dev, "unsupported reg-io-width (%u)\n",
@@ -135,15 +135,15 @@ static int __devinit dw8250_probe(struct platform_device *pdev) · 3 unmodified lines
135135 }
136136
137137 if (!of_property_read_u32(np, "reg-shift", &val))
138− port.regshift = val;
138+ uart.port.regshift = val;
139139
140140 if (of_property_read_u32(np, "clock-frequency", &val)) {
141141 dev_err(&pdev->dev, "no clock-frequency property set\n");
142142 return -EINVAL;
143143 }
144− port.uartclk = val;
144+ uart.port.uartclk = val;
145145
146− data->line = serial8250_register_port(&port);
146+ data->line = serial8250_register_8250_port(&uart);
147147 if (data->line < 0)
148148 return data->line;
149149
drivers/tty/serial/8250/8250_gsc.c+13−13
@@ -26,7 +26,7 @@ · 25 unmodified lines
2626
2727 static int __init serial_init_chip(struct parisc_device *dev)
2828 {
29− struct uart_port port;
29+ struct uart_8250_port uart;
3030 unsigned long address;
3131 int err;
3232
@@ -48,21 +48,21 @@ static int __init serial_init_chip(struct parisc_device *dev) · 15 unmodified lines
4848 if (dev->id.sversion != 0x8d)
4949 address += 0x800;
5050
51− memset(&port, 0, sizeof(port));
52− port.iotype = UPIO_MEM;
51+ memset(&uart, 0, sizeof(uart));
52+ uart.port.iotype = UPIO_MEM;
5353 /* 7.272727MHz on Lasi. Assumed the same for Dino, Wax and Timi. */
54− port.uartclk = 7272727;
55− port.mapbase = address;
56− port.membase = ioremap_nocache(address, 16);
57− port.irq = dev->irq;
58− port.flags = UPF_BOOT_AUTOCONF;
59− port.dev = &dev->dev;
60−
61− err = serial8250_register_port(&port);
54+ uart.port.uartclk = 7272727;
55+ uart.port.mapbase = address;
56+ uart.port.membase = ioremap_nocache(address, 16);
57+ uart.port.irq = dev->irq;
58+ uart.port.flags = UPF_BOOT_AUTOCONF;
59+ uart.port.dev = &dev->dev;
60+
61+ err = serial8250_register_8250_port(&uart);
6262 if (err < 0) {
6363 printk(KERN_WARNING
64− "serial8250_register_port returned error %d\n", err);
65− iounmap(port.membase);
64+ "serial8250_register_8250_port returned error %d\n", err);
65+ iounmap(uart.port.membase);
6666 return err;
6767 }
6868
drivers/tty/serial/8250/8250_hp300.c+13−13
@@ -171,7 +171,7 @@ static int __devinit hpdca_init_one(struct dio_dev *d, · 170 unmodified lines
171171 return 0;
172172 }
173173 #endif
174− memset(&port, 0, sizeof(struct uart_port));
174+ memset(&uart, 0, sizeof(uart));
175175
176176 /* Memory mapped I/O */
177177 port.iotype = UPIO_MEM;
@@ -182,7 +182,7 @@ static int __devinit hpdca_init_one(struct dio_dev *d, · 4 unmodified lines
182182 port.membase = (char *)(port.mapbase + DIO_VIRADDRBASE);
183183 port.regshift = 1;
184184 port.dev = &d->dev;
185− line = serial8250_register_port(&port);
185+ line = serial8250_register_8250_port(&uart);
186186
187187 if (line < 0) {
188188 printk(KERN_NOTICE "8250_hp300: register_serial() DCA scode %d"
@@ -210,7 +210,7 @@ static int __init hp300_8250_init(void) · 21 unmodified lines
210210 #ifdef CONFIG_HPAPCI
211211 int line;
212212 unsigned long base;
213− struct uart_port uport;
213+ struct uart_8250_port uart;
214214 struct hp300_port *port;
215215 int i;
216216 #endif
@@ -248,26 +248,26 @@ static int __init hp300_8250_init(void) · 31 unmodified lines
248248 if (!port)
249249 return -ENOMEM;
250250
251− memset(&uport, 0, sizeof(struct uart_port));
251+ memset(&uart, 0, sizeof(uart));
252252
253253 base = (FRODO_BASE + FRODO_APCI_OFFSET(i));
254254
255255 /* Memory mapped I/O */
256− uport.iotype = UPIO_MEM;
257− uport.flags = UPF_SKIP_TEST | UPF_SHARE_IRQ \
256+ uart.port.iotype = UPIO_MEM;
257+ uart.port.flags = UPF_SKIP_TEST | UPF_SHARE_IRQ \
258258 | UPF_BOOT_AUTOCONF;
259259 /* XXX - no interrupt support yet */
260− uport.irq = 0;
261− uport.uartclk = HPAPCI_BAUD_BASE * 16;
262− uport.mapbase = base;
263− uport.membase = (char *)(base + DIO_VIRADDRBASE);
264− uport.regshift = 2;
260+ uart.port.irq = 0;
261+ uart.port.uartclk = HPAPCI_BAUD_BASE * 16;
262+ uart.port.mapbase = base;
263+ uart.port.membase = (char *)(base + DIO_VIRADDRBASE);
264+ uart.port.regshift = 2;
265265
266− line = serial8250_register_port(&uport);
266+ line = serial8250_register_8250_port(&uart);
267267
268268 if (line < 0) {
269269 printk(KERN_NOTICE "8250_hp300: register_serial() APCI"
270− " %d irq %d failed\n", i, uport.irq);
270+ " %d irq %d failed\n", i, uart.port.irq);
271271 kfree(port);
272272 continue;
273273 }
drivers/tty/serial/8250/8250_pci.c+139−66
@@ -44,7 +44,7 @@ struct pci_serial_quirk { · 43 unmodified lines
4444 int (*init)(struct pci_dev *dev);
4545 int (*setup)(struct serial_private *,
4646 const struct pciserial_board *,
47− struct uart_port *, int);
47+ struct uart_8250_port *, int);
4848 void (*exit)(struct pci_dev *dev);
4949 };
5050
@@ -59,7 +59,7 @@ struct serial_private { · 8 unmodified lines
5959 };
6060
6161 static int pci_default_setup(struct serial_private*,
62− const struct pciserial_board*, struct uart_port*, int);
62+ const struct pciserial_board*, struct uart_8250_port *, int);
6363
6464 static void moan_device(const char *str, struct pci_dev *dev)
6565 {
@@ -74,7 +74,7 @@ static void moan_device(const char *str, struct pci_dev *dev) · 8 unmodified lines
7474 }
7575
7676 static int
77−setup_port(struct serial_private *priv, struct uart_port *port,
77+setup_port(struct serial_private *priv, struct uart_8250_port *port,
7878 int bar, int offset, int regshift)
7979 {
8080 struct pci_dev *dev = priv->dev;
@@ -93,17 +93,17 @@ setup_port(struct serial_private *priv, struct uart_port *port, · 12 unmodified lines
9393 if (!priv->remapped_bar[bar])
9494 return -ENOMEM;
9595
96− port->iotype = UPIO_MEM;
97− port->iobase = 0;
98− port->mapbase = base + offset;
99− port->membase = priv->remapped_bar[bar] + offset;
100− port->regshift = regshift;
96+ port->port.iotype = UPIO_MEM;
97+ port->port.iobase = 0;
98+ port->port.mapbase = base + offset;
99+ port->port.membase = priv->remapped_bar[bar] + offset;
100+ port->port.regshift = regshift;
101101 } else {
102− port->iotype = UPIO_PORT;
103− port->iobase = base + offset;
104− port->mapbase = 0;
105− port->membase = NULL;
106− port->regshift = 0;
102+ port->port.iotype = UPIO_PORT;
103+ port->port.iobase = base + offset;
104+ port->port.mapbase = 0;
105+ port->port.membase = NULL;
106+ port->port.regshift = 0;
107107 }
108108 return 0;
109109 }
@@ -113,7 +113,7 @@ setup_port(struct serial_private *priv, struct uart_port *port, · 3 unmodified lines
113113 */
114114 static int addidata_apci7800_setup(struct serial_private *priv,
115115 const struct pciserial_board *board,
116− struct uart_port *port, int idx)
116+ struct uart_8250_port *port, int idx)
117117 {
118118 unsigned int bar = 0, offset = board->first_offset;
119119 bar = FL_GET_BASE(board->flags);
@@ -140,7 +140,7 @@ static int addidata_apci7800_setup(struct serial_private *priv, · 20 unmodified lines
140140 */
141141 static int
142142 afavlab_setup(struct serial_private *priv, const struct pciserial_board *board,
143− struct uart_port *port, int idx)
143+ struct uart_8250_port *port, int idx)
144144 {
145145 unsigned int bar, offset = board->first_offset;
146146
@@ -195,7 +195,7 @@ static int pci_hp_diva_init(struct pci_dev *dev) · 48 unmodified lines
195195 static int
196196 pci_hp_diva_setup(struct serial_private *priv,
197197 const struct pciserial_board *board,
198− struct uart_port *port, int idx)
198+ struct uart_8250_port *port, int idx)
199199 {
200200 unsigned int offset = board->first_offset;
201201 unsigned int bar = FL_GET_BASE(board->flags);
@@ -370,7 +370,7 @@ static void __devexit pci_ni8430_exit(struct pci_dev *dev) · 168 unmodified lines
370370 /* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */
371371 static int
372372 sbs_setup(struct serial_private *priv, const struct pciserial_board *board,
373− struct uart_port *port, int idx)
373+ struct uart_8250_port *port, int idx)
374374 {
375375 unsigned int bar, offset = board->first_offset;
376376
@@ -525,7 +525,7 @@ static int pci_siig_init(struct pci_dev *dev) · 148 unmodified lines
525525
526526 static int pci_siig_setup(struct serial_private *priv,
527527 const struct pciserial_board *board,
528− struct uart_port *port, int idx)
528+ struct uart_8250_port *port, int idx)
529529 {
530530 unsigned int bar = FL_GET_BASE(board->flags) + idx, offset = 0;
531531
@@ -619,7 +619,7 @@ static int pci_timedia_init(struct pci_dev *dev) · 87 unmodified lines
619619 static int
620620 pci_timedia_setup(struct serial_private *priv,
621621 const struct pciserial_board *board,
622− struct uart_port *port, int idx)
622+ struct uart_8250_port *port, int idx)
623623 {
624624 unsigned int bar = 0, offset = board->first_offset;
625625
@@ -653,7 +653,7 @@ pci_timedia_setup(struct serial_private *priv, · 27 unmodified lines
653653 static int
654654 titan_400l_800l_setup(struct serial_private *priv,
655655 const struct pciserial_board *board,
656− struct uart_port *port, int idx)
656+ struct uart_8250_port *port, int idx)
657657 {
658658 unsigned int bar, offset = board->first_offset;
659659
@@ -754,7 +754,7 @@ static int pci_ni8430_init(struct pci_dev *dev) · 94 unmodified lines
754754 static int
755755 pci_ni8430_setup(struct serial_private *priv,
756756 const struct pciserial_board *board,
757− struct uart_port *port, int idx)
757+ struct uart_8250_port *port, int idx)
758758 {
759759 void __iomem *p;
760760 unsigned long base, len;
@@ -781,7 +781,7 @@ pci_ni8430_setup(struct serial_private *priv, · 20 unmodified lines
781781
782782 static int pci_netmos_9900_setup(struct serial_private *priv,
783783 const struct pciserial_board *board,
784− struct uart_port *port, int idx)
784+ struct uart_8250_port *port, int idx)
785785 {
786786 unsigned int bar;
787787
@@ -1032,10 +1032,17 @@ static int pci_oxsemi_tornado_init(struct pci_dev *dev) · 244 unmodified lines
10321032 return number_uarts;
10331033 }
10341034
1035−static int
1036−pci_default_setup(struct serial_private *priv,
1035+static int pci_asix_setup(struct serial_private *priv,
10371036 const struct pciserial_board *board,
1038− struct uart_port *port, int idx)
1037+ struct uart_8250_port *port, int idx)
1038+{
1039+ port->bugs |= UART_BUG_PARITY;
1040+ return pci_default_setup(priv, board, port, idx);
1041+}
1042+
1043+static int pci_default_setup(struct serial_private *priv,
1044+ const struct pciserial_board *board,
1045+ struct uart_8250_port *port, int idx)
10391046 {
10401047 unsigned int bar, offset = board->first_offset, maxnr;
10411048
@@ -1057,15 +1064,15 @@ pci_default_setup(struct serial_private *priv, · 15 unmodified lines
10571064 static int
10581065 ce4100_serial_setup(struct serial_private *priv,
10591066 const struct pciserial_board *board,
1060− struct uart_port *port, int idx)
1067+ struct uart_8250_port *port, int idx)
10611068 {
10621069 int ret;
10631070
10641071 ret = setup_port(priv, port, 0, 0, board->reg_shift);
1065− port->iotype = UPIO_MEM32;
1066− port->type = PORT_XSCALE;
1067− port->flags = (port->flags | UPF_FIXED_PORT | UPF_FIXED_TYPE);
1068− port->regshift = 2;
1072+ port->port.iotype = UPIO_MEM32;
1073+ port->port.type = PORT_XSCALE;
1074+ port->port.flags = (port->port.flags | UPF_FIXED_PORT | UPF_FIXED_TYPE);
1075+ port->port.regshift = 2;
10691076
10701077 return ret;
10711078 }
@@ -1073,16 +1080,16 @@ ce4100_serial_setup(struct serial_private *priv, · 1 unmodified line
10731080 static int
10741081 pci_omegapci_setup(struct serial_private *priv,
10751082 const struct pciserial_board *board,
1076− struct uart_port *port, int idx)
1083+ struct uart_8250_port *port, int idx)
10771084 {
10781085 return setup_port(priv, port, 2, idx * 8, 0);
10791086 }
10801087
10811088 static int skip_tx_en_setup(struct serial_private *priv,
10821089 const struct pciserial_board *board,
1083− struct uart_port *port, int idx)
1090+ struct uart_8250_port *port, int idx)
10841091 {
1085− port->flags |= UPF_NO_TXEN_TEST;
1092+ port->port.flags |= UPF_NO_TXEN_TEST;
10861093 printk(KERN_DEBUG "serial8250: skipping TxEn test for device "
10871094 "[%04x:%04x] subsystem [%04x:%04x]\n",
10881095 priv->dev->vendor,
@@ -1131,11 +1138,11 @@ static unsigned int kt_serial_in(struct uart_port *p, int offset) · 42 unmodified lines
11311138
11321139 static int kt_serial_setup(struct serial_private *priv,
11331140 const struct pciserial_board *board,
1134− struct uart_port *port, int idx)
1141+ struct uart_8250_port *port, int idx)
11351142 {
1136− port->flags |= UPF_BUG_THRE;
1137− port->serial_in = kt_serial_in;
1138− port->handle_break = kt_handle_break;
1143+ port->port.flags |= UPF_BUG_THRE;
1144+ port->port.serial_in = kt_serial_in;
1145+ port->port.handle_break = kt_handle_break;
11391146 return skip_tx_en_setup(priv, board, port, idx);
11401147 }
11411148
@@ -1151,9 +1158,19 @@ static int pci_eg20t_init(struct pci_dev *dev) · 9 unmodified lines
11511158 static int
11521159 pci_xr17c154_setup(struct serial_private *priv,
11531160 const struct pciserial_board *board,
1154− struct uart_port *port, int idx)
1161+ struct uart_8250_port *port, int idx)
1162+{
1163+ port->port.flags |= UPF_EXAR_EFR;
1164+ return pci_default_setup(priv, board, port, idx);
1165+}
1166+
1167+static int
1168+pci_wch_ch353_setup(struct serial_private *priv,
1169+ const struct pciserial_board *board,
1170+ struct uart_8250_port *port, int idx)
11551171 {
1156− port->flags |= UPF_EXAR_EFR;
1172+ port->port.flags |= UPF_FIXED_TYPE;
1173+ port->port.type = PORT_16550A;
11571174 return pci_default_setup(priv, board, port, idx);
11581175 }
11591176
@@ -1187,6 +1204,13 @@ pci_xr17c154_setup(struct serial_private *priv, · 27 unmodified lines
11871204 #define PCIE_DEVICE_ID_NEO_2_OX_IBM 0x00F6
11881205 #define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001
11891206 #define PCI_DEVICE_ID_INTEL_PATSBURG_KT 0x1d3d
1207+#define PCI_VENDOR_ID_WCH 0x4348
1208+#define PCI_DEVICE_ID_WCH_CH353_4S 0x3453
1209+#define PCI_DEVICE_ID_WCH_CH353_2S1PF 0x5046
1210+#define PCI_DEVICE_ID_WCH_CH353_2S1P 0x7053
1211+#define PCI_VENDOR_ID_AGESTAR 0x5372
1212+#define PCI_DEVICE_ID_AGESTAR_9375 0x6872
1213+#define PCI_VENDOR_ID_ASIX 0x9710
11901214
11911215 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
11921216 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
@@ -1726,7 +1750,41 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { · 533 unmodified lines
17261750 .subvendor = PCI_ANY_ID,
17271751 .subdevice = PCI_ANY_ID,
17281752 .setup = pci_omegapci_setup,
1729− },
1753+ },
1754+ /* WCH CH353 2S1P card (16550 clone) */
1755+ {
1756+ .vendor = PCI_VENDOR_ID_WCH,
1757+ .device = PCI_DEVICE_ID_WCH_CH353_2S1P,
1758+ .subvendor = PCI_ANY_ID,
1759+ .subdevice = PCI_ANY_ID,
1760+ .setup = pci_wch_ch353_setup,
1761+ },
1762+ /* WCH CH353 4S card (16550 clone) */
1763+ {
1764+ .vendor = PCI_VENDOR_ID_WCH,
1765+ .device = PCI_DEVICE_ID_WCH_CH353_4S,
1766+ .subvendor = PCI_ANY_ID,
1767+ .subdevice = PCI_ANY_ID,
1768+ .setup = pci_wch_ch353_setup,
1769+ },
1770+ /* WCH CH353 2S1PF card (16550 clone) */
1771+ {
1772+ .vendor = PCI_VENDOR_ID_WCH,
1773+ .device = PCI_DEVICE_ID_WCH_CH353_2S1PF,
1774+ .subvendor = PCI_ANY_ID,
1775+ .subdevice = PCI_ANY_ID,
1776+ .setup = pci_wch_ch353_setup,
1777+ },
1778+ /*
1779+ * ASIX devices with FIFO bug
1780+ */
1781+ {
1782+ .vendor = PCI_VENDOR_ID_ASIX,
1783+ .device = PCI_ANY_ID,
1784+ .subvendor = PCI_ANY_ID,
1785+ .subdevice = PCI_ANY_ID,
1786+ .setup = pci_asix_setup,
1787+ },
17301788 /*
17311789 * Default "match everything" terminator entry
17321790 */
@@ -1887,7 +1945,6 @@ enum pci_board_num_t { · 154 unmodified lines
18871945 pbn_panacom,
18881946 pbn_panacom2,
18891947 pbn_panacom4,
1890− pbn_exsys_4055,
18911948 pbn_plx_romulus,
18921949 pbn_oxsemi,
18931950 pbn_oxsemi_1_4000000,
@@ -2393,13 +2450,6 @@ static struct pciserial_board pci_boards[] __devinitdata = { · 499 unmodified lines
23932450 .reg_shift = 7,
23942451 },
23952452
2396− [pbn_exsys_4055] = {
2397− .flags = FL_BASE2,
2398− .num_ports = 4,
2399− .base_baud = 115200,
2400− .uart_offset = 8,
2401− },
2402−
24032453 /* I think this entry is broken - the first_offset looks wrong --rmk */
24042454 [pbn_plx_romulus] = {
24052455 .flags = FL_BASE2,
@@ -2624,10 +2674,14 @@ static struct pciserial_board pci_boards[] __devinitdata = { · 218 unmodified lines
26242674 },
26252675 };
26262676
2627−static const struct pci_device_id softmodem_blacklist[] = {
2677+static const struct pci_device_id blacklist[] = {
2678+ /* softmodems */
26282679 { PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */
26292680 { PCI_VDEVICE(MOTOROLA, 0x3052), }, /* Motorola Si3052-based modem */
26302681 { PCI_DEVICE(0x1543, 0x3052), }, /* Si3052-based modem, default IDs */
2682+
2683+ /* multi-io cards handled by parport_serial */
2684+ { PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */
26312685 };
26322686
26332687 /*
@@ -2638,7 +2692,7 @@ static const struct pci_device_id softmodem_blacklist[] = { · 4 unmodified lines
26382692 static int __devinit
26392693 serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
26402694 {
2641− const struct pci_device_id *blacklist;
2695+ const struct pci_device_id *bldev;
26422696 int num_iomem, num_port, first_port = -1, i;
26432697
26442698 /*
@@ -2655,13 +2709,13 @@ serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board) · 10 unmodified lines
26552709
26562710 /*
26572711 * Do not access blacklisted devices that are known not to
2658− * feature serial ports.
2712+ * feature serial ports or are handled by other modules.
26592713 */
2660− for (blacklist = softmodem_blacklist;
2661− blacklist < softmodem_blacklist + ARRAY_SIZE(softmodem_blacklist);
2662− blacklist++) {
2663− if (dev->vendor == blacklist->vendor &&
2664− dev->device == blacklist->device)
2714+ for (bldev = blacklist;
2715+ bldev < blacklist + ARRAY_SIZE(blacklist);
2716+ bldev++) {
2717+ if (dev->vendor == bldev->vendor &&
2718+ dev->device == bldev->device)
26652719 return -ENODEV;
26662720 }
26672721
@@ -2728,7 +2782,7 @@ serial_pci_matches(const struct pciserial_board *board, · 60 unmodified lines
27282782 struct serial_private *
27292783 pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)
27302784 {
2731− struct uart_port serial_port;
2785+ struct uart_8250_port uart;
27322786 struct serial_private *priv;
27332787 struct pci_serial_quirk *quirk;
27342788 int rc, nr_ports, i;
@@ -2768,22 +2822,22 @@ pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board) · 33 unmodified lines
27682822 priv->dev = dev;
27692823 priv->quirk = quirk;
27702824
2771− memset(&serial_port, 0, sizeof(struct uart_port));
2772− serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
2773− serial_port.uartclk = board->base_baud * 16;
2774− serial_port.irq = get_pci_irq(dev, board);
2775− serial_port.dev = &dev->dev;
2825+ memset(&uart, 0, sizeof(uart));
2826+ uart.port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
2827+ uart.port.uartclk = board->base_baud * 16;
2828+ uart.port.irq = get_pci_irq(dev, board);
2829+ uart.port.dev = &dev->dev;
27762830
27772831 for (i = 0; i < nr_ports; i++) {
2778− if (quirk->setup(priv, board, &serial_port, i))
2832+ if (quirk->setup(priv, board, &uart, i))
27792833 break;
27802834
27812835 #ifdef SERIAL_DEBUG_PCI
27822836 printk(KERN_DEBUG "Setup PCI port: port %lx, irq %d, type %d\n",
2783− serial_port.iobase, serial_port.irq, serial_port.iotype);
2837+ uart.port.iobase, uart.port.irq, uart.port.iotype);
27842838 #endif
27852839
2786− priv->line[i] = serial8250_register_port(&serial_port);
2840+ priv->line[i] = serial8250_register_8250_port(&uart);
27872841 if (priv->line[i] < 0) {
27882842 printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);
27892843 break;
@@ -3193,7 +3247,7 @@ static struct pci_device_id serial_pci_tbl[] = { · 403 unmodified lines
31933247 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
31943248 PCI_SUBVENDOR_ID_EXSYS,
31953249 PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
3196− pbn_exsys_4055 },
3250+ pbn_b2_4_115200 },
31973251 /*
31983252 * Megawolf Romulus PCI Serial Card, from Mike Hudson
31993253 * (Exoray@isys.ca)
@@ -4178,6 +4232,25 @@ static struct pci_device_id serial_pci_tbl[] = { · 978 unmodified lines
41784232 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
41794233 pbn_omegapci },
41804234
4235+ /*
4236+ * AgeStar as-prs2-009
4237+ */
4238+ { PCI_VENDOR_ID_AGESTAR, PCI_DEVICE_ID_AGESTAR_9375,
4239+ PCI_ANY_ID, PCI_ANY_ID,
4240+ 0, 0, pbn_b0_bt_2_115200 },
4241+
4242+ /*
4243+ * WCH CH353 series devices: The 2S1P is handled by parport_serial
4244+ * so not listed here.
4245+ */
4246+ { PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH353_4S,
4247+ PCI_ANY_ID, PCI_ANY_ID,
4248+ 0, 0, pbn_b0_bt_4_115200 },
4249+
4250+ { PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH353_2S1PF,
4251+ PCI_ANY_ID, PCI_ANY_ID,
4252+ 0, 0, pbn_b0_bt_2_115200 },
4253+
41814254 /*
41824255 * These entries match devices with class COMMUNICATION_SERIAL,
41834256 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
drivers/tty/serial/8250/8250_pnp.c+14−14
@@ -424,7 +424,7 @@ static int __devinit serial_pnp_guess_board(struct pnp_dev *dev, int *flags) · 423 unmodified lines
424424 static int __devinit
425425 serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
426426 {
427− struct uart_port port;
427+ struct uart_8250_port uart;
428428 int ret, line, flags = dev_id->driver_data;
429429
430430 if (flags & UNKNOWN_DEV) {
@@ -433,32 +433,32 @@ serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) · 2 unmodified lines
433433 return ret;
434434 }
435435
436− memset(&port, 0, sizeof(struct uart_port));
436+ memset(&uart, 0, sizeof(uart));
437437 if (pnp_irq_valid(dev, 0))
438− port.irq = pnp_irq(dev, 0);
438+ uart.port.irq = pnp_irq(dev, 0);
439439 if (pnp_port_valid(dev, 0)) {
440− port.iobase = pnp_port_start(dev, 0);
441− port.iotype = UPIO_PORT;
440+ uart.port.iobase = pnp_port_start(dev, 0);
441+ uart.port.iotype = UPIO_PORT;
442442 } else if (pnp_mem_valid(dev, 0)) {
443− port.mapbase = pnp_mem_start(dev, 0);
444− port.iotype = UPIO_MEM;
445− port.flags = UPF_IOREMAP;
443+ uart.port.mapbase = pnp_mem_start(dev, 0);
444+ uart.port.iotype = UPIO_MEM;
445+ uart.port.flags = UPF_IOREMAP;
446446 } else
447447 return -ENODEV;
448448
449449 #ifdef SERIAL_DEBUG_PNP
450450 printk(KERN_DEBUG
451451 "Setup PNP port: port %x, mem 0x%lx, irq %d, type %d\n",
452− port.iobase, port.mapbase, port.irq, port.iotype);
452+ uart.port.iobase, uart.port.mapbase, uart.port.irq, uart.port.iotype);
453453 #endif
454454
455− port.flags |= UPF_SKIP_TEST | UPF_BOOT_AUTOCONF;
455+ uart.port.flags |= UPF_SKIP_TEST | UPF_BOOT_AUTOCONF;
456456 if (pnp_irq_flags(dev, 0) & IORESOURCE_IRQ_SHAREABLE)
457− port.flags |= UPF_SHARE_IRQ;
458− port.uartclk = 1843200;
459− port.dev = &dev->dev;
457+ uart.port.flags |= UPF_SHARE_IRQ;
458+ uart.port.uartclk = 1843200;
459+ uart.port.dev = &dev->dev;
460460
461− line = serial8250_register_port(&port);
461+ line = serial8250_register_8250_port(&uart);
462462 if (line < 0)
463463 return -ENODEV;
464464
drivers/tty/serial/8250/serial_cs.c+15−15
@@ -73,7 +73,7 @@ struct serial_quirk { · 72 unmodified lines
7373 unsigned int prodid;
7474 int multi; /* 1 = multifunction, > 1 = # ports */
7575 void (*config)(struct pcmcia_device *);
76− void (*setup)(struct pcmcia_device *, struct uart_port *);
76+ void (*setup)(struct pcmcia_device *, struct uart_8250_port *);
7777 void (*wakeup)(struct pcmcia_device *);
7878 int (*post)(struct pcmcia_device *);
7979 };
@@ -105,9 +105,9 @@ struct serial_cfg_mem { · 25 unmodified lines
105105 * Elan VPU16551 UART with 14.7456MHz oscillator
106106 * manfid 0x015D, 0x4C45
107107 */
108−static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port)
108+static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_8250_port *uart)
109109 {
110− port->uartclk = 14745600;
110+ uart->port.uartclk = 14745600;
111111 }
112112
113113 static int quirk_post_ibm(struct pcmcia_device *link)
@@ -343,25 +343,25 @@ static void serial_detach(struct pcmcia_device *link) · 229 unmodified lines
343343 static int setup_serial(struct pcmcia_device *handle, struct serial_info * info,
344344 unsigned int iobase, int irq)
345345 {
346− struct uart_port port;
346+ struct uart_8250_port uart;
347347 int line;
348348
349− memset(&port, 0, sizeof (struct uart_port));
350− port.iobase = iobase;
351− port.irq = irq;
352− port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ;
353− port.uartclk = 1843200;
354− port.dev = &handle->dev;
349+ memset(&uart, 0, sizeof(uart));
350+ uart.port.iobase = iobase;
351+ uart.port.irq = irq;
352+ uart.port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ;
353+ uart.port.uartclk = 1843200;
354+ uart.port.dev = &handle->dev;
355355 if (buggy_uart)
356− port.flags |= UPF_BUGGY_UART;
356+ uart.port.flags |= UPF_BUGGY_UART;
357357
358358 if (info->quirk && info->quirk->setup)
359− info->quirk->setup(handle, &port);
359+ info->quirk->setup(handle, &uart);
360360
361− line = serial8250_register_port(&port);
361+ line = serial8250_register_8250_port(&uart);
362362 if (line < 0) {
363− printk(KERN_NOTICE "serial_cs: serial8250_register_port() at "
364− "0x%04lx, irq %d failed\n", (u_long)iobase, irq);
363+ pr_err("serial_cs: serial8250_register_8250_port() at 0x%04lx, irq %d failed\n",
364+ (unsigned long)iobase, irq);
365365 return -EINVAL;
366366 }
367367
drivers/tty/serial/Kconfig+47−3
@@ -257,12 +257,19 @@ config SERIAL_MAX3100 · 256 unmodified lines
257257 help
258258 MAX3100 chip support
259259
260−config SERIAL_MAX3107
261− tristate "MAX3107 support"
260+config SERIAL_MAX310X
261+ bool "MAX310X support"
262262 depends on SPI
263263 select SERIAL_CORE
264+ select REGMAP_SPI if SPI
265+ default n
264266 help
265− MAX3107 chip support
267+ This selects support for an advanced UART from Maxim (Dallas).
268+ Supported ICs are MAX3107, MAX3108.
269+ Each IC contains 128 words each of receive and transmit FIFO
270+ that can be controlled through I2C or high-speed SPI.
271+
272+ Say Y here if you want to support this ICs.
266273
267274 config SERIAL_DZ
268275 bool "DECstation DZ serial driver"
@@ -704,6 +711,25 @@ config SERIAL_PNX8XXX_CONSOLE · 435 unmodified lines
704711 If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330
705712 and you want to use serial console, say Y. Otherwise, say N.
706713
714+config SERIAL_HS_LPC32XX
715+ tristate "LPC32XX high speed serial port support"
716+ depends on ARCH_LPC32XX && OF
717+ select SERIAL_CORE
718+ help
719+ Support for the LPC32XX high speed serial ports (up to 900kbps).
720+ Those are UARTs completely different from the Standard UARTs on the
721+ LPC32XX SoC.
722+ Choose M or Y here to build this driver.
723+
724+config SERIAL_HS_LPC32XX_CONSOLE
725+ bool "Enable LPC32XX high speed UART serial console"
726+ depends on SERIAL_HS_LPC32XX
727+ select SERIAL_CORE_CONSOLE
728+ help
729+ If you would like to be able to use one of the high speed serial
730+ ports on the LPC32XX as the console, you can do so by answering
731+ Y to this option.
732+
707733 config SERIAL_CORE
708734 tristate
709735
@@ -1104,6 +1130,24 @@ config SERIAL_SC26XX_CONSOLE · 394 unmodified lines
11041130 help
11051131 Support for Console on SC2681/SC2692 serial ports.
11061132
1133+config SERIAL_SCCNXP
1134+ bool "SCCNXP serial port support"
1135+ depends on !SERIAL_SC26XX
1136+ select SERIAL_CORE
1137+ default n
1138+ help
1139+ This selects support for an advanced UART from NXP (Philips).
1140+ Supported ICs are SCC2681, SCC2691, SCC2692, SC28L91, SC28L92,
1141+ SC28L202, SCC68681 and SCC68692.
1142+ Positioned as a replacement for the driver SC26XX.
1143+
1144+config SERIAL_SCCNXP_CONSOLE
1145+ bool "Console on SCCNXP serial port"
1146+ depends on SERIAL_SCCNXP
1147+ select SERIAL_CORE_CONSOLE
1148+ help
1149+ Support for console on SCCNXP serial ports.
1150+
11071151 config SERIAL_BFIN_SPORT
11081152 tristate "Blackfin SPORT emulate UART"
11091153 depends on BLACKFIN
drivers/tty/serial/Makefile+3−1
@@ -28,12 +28,13 @@ obj-$(CONFIG_SERIAL_BFIN) += bfin_uart.o · 27 unmodified lines
2828 obj-$(CONFIG_SERIAL_BFIN_SPORT) += bfin_sport_uart.o
2929 obj-$(CONFIG_SERIAL_SAMSUNG) += samsung.o
3030 obj-$(CONFIG_SERIAL_MAX3100) += max3100.o
31−obj-$(CONFIG_SERIAL_MAX3107) += max3107.o
31+obj-$(CONFIG_SERIAL_MAX310X) += max310x.o
3232 obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o
3333 obj-$(CONFIG_SERIAL_MUX) += mux.o
3434 obj-$(CONFIG_SERIAL_68328) += 68328serial.o
3535 obj-$(CONFIG_SERIAL_MCF) += mcf.o
3636 obj-$(CONFIG_SERIAL_PMACZILOG) += pmac_zilog.o
37+obj-$(CONFIG_SERIAL_HS_LPC32XX) += lpc32xx_hs.o
3738 obj-$(CONFIG_SERIAL_DZ) += dz.o
3839 obj-$(CONFIG_SERIAL_ZS) += zs.o
3940 obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o
@@ -47,6 +48,7 @@ obj-$(CONFIG_SERIAL_MPSC) += mpsc.o · 7 unmodified lines
4748 obj-$(CONFIG_SERIAL_SB1250_DUART) += sb1250-duart.o
4849 obj-$(CONFIG_ETRAX_SERIAL) += crisv10.o
4950 obj-$(CONFIG_SERIAL_SC26XX) += sc26xx.o
51+obj-$(CONFIG_SERIAL_SCCNXP) += sccnxp.o
5052 obj-$(CONFIG_SERIAL_JSM) += jsm/
5153 obj-$(CONFIG_SERIAL_TXX9) += serial_txx9.o
5254 obj-$(CONFIG_SERIAL_VR41XX) += vr41xx_siu.o
drivers/tty/serial/altera_uart.c+3−3
@@ -591,7 +591,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev) · 590 unmodified lines
591591 port->ops = &altera_uart_ops;
592592 port->flags = UPF_BOOT_AUTOCONF;
593593
594− dev_set_drvdata(&pdev->dev, port);
594+ platform_set_drvdata(pdev, port);
595595
596596 uart_add_one_port(&altera_uart_driver, port);
597597
@@ -600,11 +600,11 @@ static int __devinit altera_uart_probe(struct platform_device *pdev) · 2 unmodified lines
600600
601601 static int __devexit altera_uart_remove(struct platform_device *pdev)
602602 {
603− struct uart_port *port = dev_get_drvdata(&pdev->dev);
603+ struct uart_port *port = platform_get_drvdata(pdev);
604604
605605 if (port) {
606606 uart_remove_one_port(&altera_uart_driver, port);
607− dev_set_drvdata(&pdev->dev, NULL);
607+ platform_set_drvdata(pdev, NULL);
608608 port->mapbase = 0;
609609 }
610610
drivers/tty/serial/amba-pl010.c+4−11
@@ -312,16 +312,12 @@ static int pl010_startup(struct uart_port *port) · 311 unmodified lines
312312 struct uart_amba_port *uap = (struct uart_amba_port *)port;
313313 int retval;
314314
315− retval = clk_prepare(uap->clk);
316− if (retval)
317− goto out;
318−
319315 /*
320316 * Try to enable the clock producer.
321317 */
322− retval = clk_enable(uap->clk);
318+ retval = clk_prepare_enable(uap->clk);
323319 if (retval)
324− goto clk_unprep;
320+ goto out;
325321
326322 uap->port.uartclk = clk_get_rate(uap->clk);
327323
@@ -346,9 +342,7 @@ static int pl010_startup(struct uart_port *port) · 18 unmodified lines
346342 return 0;
347343
348344 clk_dis:
349− clk_disable(uap->clk);
350− clk_unprep:
351− clk_unprepare(uap->clk);
345+ clk_disable_unprepare(uap->clk);
352346 out:
353347 return retval;
354348 }
@@ -375,8 +369,7 @@ static void pl010_shutdown(struct uart_port *port) · 20 unmodified lines
375369 /*
376370 * Shut down the clock producer
377371 */
378− clk_disable(uap->clk);
379− clk_unprepare(uap->clk);
372+ clk_disable_unprepare(uap->clk);
380373 }
381374
382375 static void
drivers/tty/serial/amba-pl011.c+57−32
@@ -52,6 +52,8 @@ · 51 unmodified lines
5252 #include <linux/scatterlist.h>
5353 #include <linux/delay.h>
5454 #include <linux/types.h>
55+#include <linux/of.h>
56+#include <linux/of_device.h>
5557 #include <linux/pinctrl/consumer.h>
5658 #include <linux/sizes.h>
5759
@@ -75,7 +77,6 @@ struct vendor_data { · 17 unmodified lines
7577 unsigned int lcrh_tx;
7678 unsigned int lcrh_rx;
7779 bool oversampling;
78− bool interrupt_may_hang; /* vendor-specific */
7980 bool dma_threshold;
8081 bool cts_event_workaround;
8182 };
@@ -96,7 +97,6 @@ static struct vendor_data vendor_st = { · 14 unmodified lines
9697 .lcrh_tx = ST_UART011_LCRH_TX,
9798 .lcrh_rx = ST_UART011_LCRH_RX,
9899 .oversampling = true,
99− .interrupt_may_hang = true,
100100 .dma_threshold = true,
101101 .cts_event_workaround = true,
102102 };
@@ -147,7 +147,6 @@ struct uart_amba_port { · 44 unmodified lines
147147 unsigned int old_cr; /* state during shutdown */
148148 bool autorts;
149149 char type[12];
150− bool interrupt_may_hang; /* vendor-specific */
151150 #ifdef CONFIG_DMA_ENGINE
152151 /* DMA stuff */
153152 bool using_tx_dma;
@@ -1215,14 +1214,14 @@ static irqreturn_t pl011_int(int irq, void *dev_id) · 1061 unmodified lines
12151214 return IRQ_RETVAL(handled);
12161215 }
12171216
1218−static unsigned int pl01x_tx_empty(struct uart_port *port)
1217+static unsigned int pl011_tx_empty(struct uart_port *port)
12191218 {
12201219 struct uart_amba_port *uap = (struct uart_amba_port *)port;
12211220 unsigned int status = readw(uap->port.membase + UART01x_FR);
12221221 return status & (UART01x_FR_BUSY|UART01x_FR_TXFF) ? 0 : TIOCSER_TEMT;
12231222 }
12241223
1225−static unsigned int pl01x_get_mctrl(struct uart_port *port)
1224+static unsigned int pl011_get_mctrl(struct uart_port *port)
12261225 {
12271226 struct uart_amba_port *uap = (struct uart_amba_port *)port;
12281227 unsigned int result = 0;
@@ -1285,7 +1284,7 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) · 56 unmodified lines
12851284 }
12861285
12871286 #ifdef CONFIG_CONSOLE_POLL
1288−static int pl010_get_poll_char(struct uart_port *port)
1287+static int pl011_get_poll_char(struct uart_port *port)
12891288 {
12901289 struct uart_amba_port *uap = (struct uart_amba_port *)port;
12911290 unsigned int status;
@@ -1297,7 +1296,7 @@ static int pl010_get_poll_char(struct uart_port *port) · 5 unmodified lines
12971296 return readw(uap->port.membase + UART01x_DR);
12981297 }
12991298
1300−static void pl010_put_poll_char(struct uart_port *port,
1299+static void pl011_put_poll_char(struct uart_port *port,
13011300 unsigned char ch)
13021301 {
13031302 struct uart_amba_port *uap = (struct uart_amba_port *)port;
@@ -1324,16 +1323,12 @@ static int pl011_startup(struct uart_port *port) · 20 unmodified lines
13241323 "could not set default pins\n");
13251324 }
13261325
1327− retval = clk_prepare(uap->clk);
1328− if (retval)
1329− goto out;
1330−
13311326 /*
13321327 * Try to enable the clock producer.
13331328 */
1334− retval = clk_enable(uap->clk);
1329+ retval = clk_prepare_enable(uap->clk);
13351330 if (retval)
1336− goto clk_unprep;
1331+ goto out;
13371332
13381333 uap->port.uartclk = clk_get_rate(uap->clk);
13391334
@@ -1411,9 +1406,7 @@ static int pl011_startup(struct uart_port *port) · 71 unmodified lines
14111406 return 0;
14121407
14131408 clk_dis:
1414− clk_disable(uap->clk);
1415− clk_unprep:
1416− clk_unprepare(uap->clk);
1409+ clk_disable_unprepare(uap->clk);
14171410 out:
14181411 return retval;
14191412 }
@@ -1473,8 +1466,7 @@ static void pl011_shutdown(struct uart_port *port) · 53 unmodified lines
14731466 /*
14741467 * Shut down the clock producer
14751468 */
1476− clk_disable(uap->clk);
1477− clk_unprepare(uap->clk);
1469+ clk_disable_unprepare(uap->clk);
14781470 /* Optionally let pins go into sleep states */
14791471 if (!IS_ERR(uap->pins_sleep)) {
14801472 retval = pinctrl_select_state(uap->pinctrl, uap->pins_sleep);
@@ -1637,7 +1629,7 @@ static const char *pl011_type(struct uart_port *port) · 156 unmodified lines
16371629 /*
16381630 * Release the memory region(s) being used by 'port'
16391631 */
1640−static void pl010_release_port(struct uart_port *port)
1632+static void pl011_release_port(struct uart_port *port)
16411633 {
16421634 release_mem_region(port->mapbase, SZ_4K);
16431635 }
@@ -1645,7 +1637,7 @@ static void pl010_release_port(struct uart_port *port) · 1 unmodified line
16451637 /*
16461638 * Request the memory region(s) being used by 'port'
16471639 */
1648−static int pl010_request_port(struct uart_port *port)
1640+static int pl011_request_port(struct uart_port *port)
16491641 {
16501642 return request_mem_region(port->mapbase, SZ_4K, "uart-pl011")
16511643 != NULL ? 0 : -EBUSY;
@@ -1654,18 +1646,18 @@ static int pl010_request_port(struct uart_port *port) · 2 unmodified lines
16541646 /*
16551647 * Configure/autoconfigure the port.
16561648 */
1657−static void pl010_config_port(struct uart_port *port, int flags)
1649+static void pl011_config_port(struct uart_port *port, int flags)
16581650 {
16591651 if (flags & UART_CONFIG_TYPE) {
16601652 port->type = PORT_AMBA;
1661− pl010_request_port(port);
1653+ pl011_request_port(port);
16621654 }
16631655 }
16641656
16651657 /*
16661658 * verify the new serial_struct (for TIOCSSERIAL).
16671659 */
1668−static int pl010_verify_port(struct uart_port *port, struct serial_struct *ser)
1660+static int pl011_verify_port(struct uart_port *port, struct serial_struct *ser)
16691661 {
16701662 int ret = 0;
16711663 if (ser->type != PORT_UNKNOWN && ser->type != PORT_AMBA)
@@ -1678,9 +1670,9 @@ static int pl010_verify_port(struct uart_port *port, struct serial_struct *ser) · 6 unmodified lines
16781670 }
16791671
16801672 static struct uart_ops amba_pl011_pops = {
1681− .tx_empty = pl01x_tx_empty,
1673+ .tx_empty = pl011_tx_empty,
16821674 .set_mctrl = pl011_set_mctrl,
1683− .get_mctrl = pl01x_get_mctrl,
1675+ .get_mctrl = pl011_get_mctrl,
16841676 .stop_tx = pl011_stop_tx,
16851677 .start_tx = pl011_start_tx,
16861678 .stop_rx = pl011_stop_rx,
@@ -1691,13 +1683,13 @@ static struct uart_ops amba_pl011_pops = { · 4 unmodified lines
16911683 .flush_buffer = pl011_dma_flush_buffer,
16921684 .set_termios = pl011_set_termios,
16931685 .type = pl011_type,
1694− .release_port = pl010_release_port,
1695− .request_port = pl010_request_port,
1696− .config_port = pl010_config_port,
1697− .verify_port = pl010_verify_port,
1686+ .release_port = pl011_release_port,
1687+ .request_port = pl011_request_port,
1688+ .config_port = pl011_config_port,
1689+ .verify_port = pl011_verify_port,
16981690 #ifdef CONFIG_CONSOLE_POLL
1699− .poll_get_char = pl010_get_poll_char,
1700− .poll_put_char = pl010_put_poll_char,
1691+ .poll_get_char = pl011_get_poll_char,
1692+ .poll_put_char = pl011_put_poll_char,
17011693 #endif
17021694 };
17031695
@@ -1869,6 +1861,38 @@ static struct uart_driver amba_reg = { · 165 unmodified lines
18691861 .cons = AMBA_CONSOLE,
18701862 };
18711863
1864+static int pl011_probe_dt_alias(int index, struct device *dev)
1865+{
1866+ struct device_node *np;
1867+ static bool seen_dev_with_alias = false;
1868+ static bool seen_dev_without_alias = false;
1869+ int ret = index;
1870+
1871+ if (!IS_ENABLED(CONFIG_OF))
1872+ return ret;
1873+
1874+ np = dev->of_node;
1875+ if (!np)
1876+ return ret;
1877+
1878+ ret = of_alias_get_id(np, "serial");
1879+ if (IS_ERR_VALUE(ret)) {
1880+ seen_dev_without_alias = true;
1881+ ret = index;
1882+ } else {
1883+ seen_dev_with_alias = true;
1884+ if (ret >= ARRAY_SIZE(amba_ports) || amba_ports[ret] != NULL) {
1885+ dev_warn(dev, "requested serial port %d not available.\n", ret);
1886+ ret = index;
1887+ }
1888+ }
1889+
1890+ if (seen_dev_with_alias && seen_dev_without_alias)
1891+ dev_warn(dev, "aliased and non-aliased serial devices found in device tree. Serial port enumeration may be unpredictable.\n");
1892+
1893+ return ret;
1894+}
1895+
18721896 static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
18731897 {
18741898 struct uart_amba_port *uap;
@@ -1891,6 +1915,8 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) · 16 unmodified lines
18911915 goto out;
18921916 }
18931917
1918+ i = pl011_probe_dt_alias(i, &dev->dev);
1919+
18941920 base = ioremap(dev->res.start, resource_size(&dev->res));
18951921 if (!base) {
18961922 ret = -ENOMEM;
@@ -1923,7 +1949,6 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) · 26 unmodified lines
19231949 uap->lcrh_tx = vendor->lcrh_tx;
19241950 uap->old_cr = 0;
19251951 uap->fifosize = vendor->fifosize;
1926− uap->interrupt_may_hang = vendor->interrupt_may_hang;
19271952 uap->port.dev = &dev->dev;
19281953 uap->port.mapbase = dev->res.start;
19291954 uap->port.membase = base;
drivers/tty/serial/bfin_uart.c+1−1
@@ -182,7 +182,7 @@ static void bfin_serial_start_tx(struct uart_port *port) · 181 unmodified lines
182182 * To avoid losting RX interrupt, we reset IR function
183183 * before sending data.
184184 */
185− if (tty->termios->c_line == N_IRDA)
185+ if (tty->termios.c_line == N_IRDA)
186186 bfin_serial_reset_irda(port);
187187
188188 #ifdef CONFIG_SERIAL_BFIN_DMA
drivers/tty/serial/crisv10.c+24−21
@@ -955,7 +955,7 @@ static const struct control_pins e100_modem_pins[NR_PORTS] = · 954 unmodified lines
955955 /* Calculate the chartime depending on baudrate, numbor of bits etc. */
956956 static void update_char_time(struct e100_serial * info)
957957 {
958− tcflag_t cflags = info->port.tty->termios->c_cflag;
958+ tcflag_t cflags = info->port.tty->termios.c_cflag;
959959 int bits;
960960
961961 /* calc. number of bits / data byte */
@@ -1473,7 +1473,7 @@ rs_stop(struct tty_struct *tty) · 511 unmodified lines
14731473 xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char,
14741474 STOP_CHAR(info->port.tty));
14751475 xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, stop);
1476− if (tty->termios->c_iflag & IXON ) {
1476+ if (tty->termios.c_iflag & IXON ) {
14771477 xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);
14781478 }
14791479
@@ -1496,7 +1496,7 @@ rs_start(struct tty_struct *tty) · 16 unmodified lines
14961496 info->xmit.tail,SERIAL_XMIT_SIZE)));
14971497 xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(tty));
14981498 xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable);
1499− if (tty->termios->c_iflag & IXON ) {
1499+ if (tty->termios.c_iflag & IXON ) {
15001500 xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);
15011501 }
15021502
@@ -2929,7 +2929,7 @@ shutdown(struct e100_serial * info) · 1426 unmodified lines
29292929 descr[i].buf = 0;
29302930 }
29312931
2932− if (!info->port.tty || (info->port.tty->termios->c_cflag & HUPCL)) {
2932+ if (!info->port.tty || (info->port.tty->termios.c_cflag & HUPCL)) {
29332933 /* hang up DTR and RTS if HUPCL is enabled */
29342934 e100_dtr(info, 0);
29352935 e100_rts(info, 0); /* could check CRTSCTS before doing this */
@@ -2953,12 +2953,12 @@ change_speed(struct e100_serial *info) · 17 unmodified lines
29532953 unsigned long flags;
29542954 /* first some safety checks */
29552955
2956− if (!info->port.tty || !info->port.tty->termios)
2956+ if (!info->port.tty)
29572957 return;
29582958 if (!info->ioport)
29592959 return;
29602960
2961− cflag = info->port.tty->termios->c_cflag;
2961+ cflag = info->port.tty->termios.c_cflag;
29622962
29632963 /* possibly, the tx/rx should be disabled first to do this safely */
29642964
@@ -3088,7 +3088,7 @@ change_speed(struct e100_serial *info) · 123 unmodified lines
30883088 info->ioport[REG_REC_CTRL] = info->rx_ctrl;
30893089 xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->port.tty));
30903090 xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable);
3091− if (info->port.tty->termios->c_iflag & IXON ) {
3091+ if (info->port.tty->termios.c_iflag & IXON ) {
30923092 DFLOW(DEBUG_LOG(info->line, "FLOW XOFF enabled 0x%02X\n",
30933093 STOP_CHAR(info->port.tty)));
30943094 xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);
@@ -3355,7 +3355,7 @@ rs_throttle(struct tty_struct * tty) · 260 unmodified lines
33553355 DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty)));
33563356
33573357 /* Do RTS before XOFF since XOFF might take some time */
3358− if (tty->termios->c_cflag & CRTSCTS) {
3358+ if (tty->termios.c_cflag & CRTSCTS) {
33593359 /* Turn off RTS line */
33603360 e100_rts(info, 0);
33613361 }
@@ -3377,7 +3377,7 @@ rs_unthrottle(struct tty_struct * tty) · 15 unmodified lines
33773377 DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty)));
33783378 DFLOW(DEBUG_LOG(info->line,"rs_unthrottle flip.count: %i\n", tty->flip.count));
33793379 /* Do RTS before XOFF since XOFF might take some time */
3380− if (tty->termios->c_cflag & CRTSCTS) {
3380+ if (tty->termios.c_cflag & CRTSCTS) {
33813381 /* Assert RTS line */
33823382 e100_rts(info, 1);
33833383 }
@@ -3748,7 +3748,7 @@ rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 364 unmodified lines
37483748
37493749 /* Handle turning off CRTSCTS */
37503750 if ((old_termios->c_cflag & CRTSCTS) &&
3751− !(tty->termios->c_cflag & CRTSCTS)) {
3751+ !(tty->termios.c_cflag & CRTSCTS)) {
37523752 tty->hw_stopped = 0;
37533753 rs_start(tty);
37543754 }
@@ -3815,7 +3815,7 @@ rs_close(struct tty_struct *tty, struct file * filp) · 60 unmodified lines
38153815 * separate termios for callout and dialin.
38163816 */
38173817 if (info->flags & ASYNC_NORMAL_ACTIVE)
3818− info->normal_termios = *tty->termios;
3818+ info->normal_termios = tty->termios;
38193819 /*
38203820 * Now we wait for the transmit buffer to clear; and we notify
38213821 * the line discipline to only process XON/XOFF characters.
@@ -3976,7 +3976,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp, · 154 unmodified lines
39763976 */
39773977 if (tty_hung_up_p(filp) ||
39783978 (info->flags & ASYNC_CLOSING)) {
3979− wait_event_interruptible_tty(info->close_wait,
3979+ wait_event_interruptible_tty(tty, info->close_wait,
39803980 !(info->flags & ASYNC_CLOSING));
39813981 #ifdef SERIAL_DO_RESTART
39823982 if (info->flags & ASYNC_HUP_NOTIFY)
@@ -3998,7 +3998,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp, · 15 unmodified lines
39983998 return 0;
39993999 }
40004000
4001− if (tty->termios->c_cflag & CLOCAL) {
4001+ if (tty->termios.c_cflag & CLOCAL) {
40024002 do_clocal = 1;
40034003 }
40044004
@@ -4052,9 +4052,9 @@ block_til_ready(struct tty_struct *tty, struct file * filp, · 47 unmodified lines
40524052 printk("block_til_ready blocking: ttyS%d, count = %d\n",
40534053 info->line, info->count);
40544054 #endif
4055− tty_unlock();
4055+ tty_unlock(tty);
40564056 schedule();
4057− tty_lock();
4057+ tty_lock(tty);
40584058 }
40594059 set_current_state(TASK_RUNNING);
40604060 remove_wait_queue(&info->open_wait, &wait);
@@ -4115,7 +4115,7 @@ rs_open(struct tty_struct *tty, struct file * filp) · 54 unmodified lines
41154115 */
41164116 if (tty_hung_up_p(filp) ||
41174117 (info->flags & ASYNC_CLOSING)) {
4118− wait_event_interruptible_tty(info->close_wait,
4118+ wait_event_interruptible_tty(tty, info->close_wait,
41194119 !(info->flags & ASYNC_CLOSING));
41204120 #ifdef SERIAL_DO_RESTART
41214121 return ((info->flags & ASYNC_HUP_NOTIFY) ?
@@ -4219,7 +4219,7 @@ rs_open(struct tty_struct *tty, struct file * filp) · 97 unmodified lines
42194219 }
42204220
42214221 if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) {
4222− *tty->termios = info->normal_termios;
4222+ tty->termios = info->normal_termios;
42234223 change_speed(info);
42244224 }
42254225
@@ -4443,14 +4443,12 @@ static int __init rs_init(void) · 217 unmodified lines
44434443 B115200 | CS8 | CREAD | HUPCL | CLOCAL; /* is normally B9600 default... */
44444444 driver->init_termios.c_ispeed = 115200;
44454445 driver->init_termios.c_ospeed = 115200;
4446− driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
4446+ driver->flags = TTY_DRIVER_REAL_RAW;
44474447
44484448 tty_set_operations(driver, &rs_ops);
44494449 serial_driver = driver;
4450− if (tty_register_driver(driver))
4451− panic("Couldn't register serial driver\n");
4452− /* do some initializing for the separate ports */
44534450
4451+ /* do some initializing for the separate ports */
44544452 for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) {
44554453 if (info->enabled) {
44564454 if (cris_request_io_interface(info->io_if,
@@ -4502,7 +4500,12 @@ static int __init rs_init(void) · 45 unmodified lines
45024500 printk(KERN_INFO "%s%d at %p is a builtin UART with DMA\n",
45034501 serial_driver->name, info->line, info->ioport);
45044502 }
4503+ tty_port_link_device(&info->port, driver, i);
45054504 }
4505+
4506+ if (tty_register_driver(driver))
4507+ panic("Couldn't register serial driver\n");
4508+
45064509 #ifdef CONFIG_ETRAX_FAST_TIMER
45074510 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
45084511 memset(fast_timers, 0, sizeof(fast_timers));
drivers/tty/serial/ifx6x60.c+2−2
@@ -800,8 +800,8 @@ static int ifx_spi_create_port(struct ifx_spi_device *ifx_dev) · 799 unmodified lines
800800 tty_port_init(pport);
801801 pport->ops = &ifx_tty_port_ops;
802802 ifx_dev->minor = IFX_SPI_TTY_ID;
803− ifx_dev->tty_dev = tty_register_device(tty_drv, ifx_dev->minor,
804− &ifx_dev->spi_dev->dev);
803+ ifx_dev->tty_dev = tty_port_register_device(pport, tty_drv,
804+ ifx_dev->minor, &ifx_dev->spi_dev->dev);
805805 if (IS_ERR(ifx_dev->tty_dev)) {
806806 dev_dbg(&ifx_dev->spi_dev->dev,
807807 "%s: registering tty device failed", __func__);
drivers/tty/serial/imx.c+4−1
@@ -206,7 +206,7 @@ struct imx_port { · 205 unmodified lines
206206 unsigned short trcv_delay; /* transceiver delay */
207207 struct clk *clk_ipg;
208208 struct clk *clk_per;
209− struct imx_uart_data *devdata;
209+ const struct imx_uart_data *devdata;
210210 };
211211
212212 struct imx_port_ucrs {
@@ -1505,18 +1505,21 @@ static int serial_imx_probe(struct platform_device *pdev) · 1292 unmodified lines
15051505 pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
15061506 if (IS_ERR(pinctrl)) {
15071507 ret = PTR_ERR(pinctrl);
1508+ dev_err(&pdev->dev, "failed to get default pinctrl: %d\n", ret);
15081509 goto unmap;
15091510 }
15101511
15111512 sport->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
15121513 if (IS_ERR(sport->clk_ipg)) {
15131514 ret = PTR_ERR(sport->clk_ipg);
1515+ dev_err(&pdev->dev, "failed to get ipg clk: %d\n", ret);
15141516 goto unmap;
15151517 }
15161518
15171519 sport->clk_per = devm_clk_get(&pdev->dev, "per");
15181520 if (IS_ERR(sport->clk_per)) {
15191521 ret = PTR_ERR(sport->clk_per);
1522+ dev_err(&pdev->dev, "failed to get per clk: %d\n", ret);
15201523 goto unmap;
15211524 }
15221525
drivers/tty/serial/ioc3_serial.c+2−1
@@ -1120,13 +1120,14 @@ static inline int do_read(struct uart_port *the_port, char *buf, int len) · 1119 unmodified lines
11201120 struct ioc3_port *port = get_ioc3_port(the_port);
11211121 struct ring *inring;
11221122 struct ring_entry *entry;
1123− struct port_hooks *hooks = port->ip_hooks;
1123+ struct port_hooks *hooks;
11241124 int byte_num;
11251125 char *sc;
11261126 int loop_counter;
11271127
11281128 BUG_ON(!(len >= 0));
11291129 BUG_ON(!port);
1130+ hooks = port->ip_hooks;
11301131
11311132 /* There is a nasty timing issue in the IOC3. When the rx_timer
11321133 * expires or the rx_high condition arises, we take an interrupt.
drivers/tty/serial/ioc4_serial.c+3−2
@@ -1803,7 +1803,7 @@ static inline int ic4_startup_local(struct uart_port *the_port) · 1802 unmodified lines
18031803 ioc4_set_proto(port, the_port->mapbase);
18041804
18051805 /* set the speed of the serial port */
1806− ioc4_change_speed(the_port, state->port.tty->termios,
1806+ ioc4_change_speed(the_port, &state->port.tty->termios,
18071807 (struct ktermios *)0);
18081808
18091809 return 0;
@@ -2069,13 +2069,14 @@ static inline int do_read(struct uart_port *the_port, unsigned char *buf, · 259 unmodified lines
20692069 struct ioc4_port *port = get_ioc4_port(the_port, 0);
20702070 struct ring *inring;
20712071 struct ring_entry *entry;
2072− struct hooks *hooks = port->ip_hooks;
2072+ struct hooks *hooks;
20732073 int byte_num;
20742074 char *sc;
20752075 int loop_counter;
20762076
20772077 BUG_ON(!(len >= 0));
20782078 BUG_ON(!port);
2079+ hooks = port->ip_hooks;
20792080
20802081 /* There is a nasty timing issue in the IOC4. When the rx_timer
20812082 * expires or the rx_high condition arises, we take an interrupt.
drivers/tty/serial/jsm/jsm_tty.c+4−4
@@ -161,7 +161,7 @@ static void jsm_tty_send_xchar(struct uart_port *port, char ch) · 160 unmodified lines
161161 struct ktermios *termios;
162162
163163 spin_lock_irqsave(&port->lock, lock_flags);
164− termios = port->state->port.tty->termios;
164+ termios = &port->state->port.tty->termios;
165165 if (ch == termios->c_cc[VSTART])
166166 channel->ch_bd->bd_ops->send_start_character(channel);
167167
@@ -250,7 +250,7 @@ static int jsm_tty_open(struct uart_port *port) · 82 unmodified lines
250250 channel->ch_cached_lsr = 0;
251251 channel->ch_stops_sent = 0;
252252
253− termios = port->state->port.tty->termios;
253+ termios = &port->state->port.tty->termios;
254254 channel->ch_c_cflag = termios->c_cflag;
255255 channel->ch_c_iflag = termios->c_iflag;
256256 channel->ch_c_oflag = termios->c_oflag;
@@ -283,7 +283,7 @@ static void jsm_tty_close(struct uart_port *port) · 26 unmodified lines
283283 jsm_printk(CLOSE, INFO, &channel->ch_bd->pci_dev, "start\n");
284284
285285 bd = channel->ch_bd;
286− ts = port->state->port.tty->termios;
286+ ts = &port->state->port.tty->termios;
287287
288288 channel->ch_flags &= ~(CH_STOPI);
289289
@@ -567,7 +567,7 @@ void jsm_input(struct jsm_channel *ch) · 277 unmodified lines
567567 *input data and return immediately.
568568 */
569569 if (!tp ||
570− !(tp->termios->c_cflag & CREAD) ) {
570+ !(tp->termios.c_cflag & CREAD) ) {
571571
572572 jsm_printk(READ, INFO, &ch->ch_bd->pci_dev,
573573 "input. dropping %d bytes on port %d...\n", data_len, ch->ch_portnum);
drivers/tty/serial/lpc32xx_hs.c+823−0
@@ -0,0 +1,823 @@
1+/*
2+ * High Speed Serial Ports on NXP LPC32xx SoC
3+ *
4+ * Authors: Kevin Wells <kevin.wells@nxp.com>
5+ * Roland Stigge <stigge@antcom.de>
6+ *
7+ * Copyright (C) 2010 NXP Semiconductors
8+ * Copyright (C) 2012 Roland Stigge
9+ *
10+ * This program is free software; you can redistribute it and/or modify
11+ * it under the terms of the GNU General Public License as published by
12+ * the Free Software Foundation; either version 2 of the License, or
13+ * (at your option) any later version.
14+ *
15+ * This program is distributed in the hope that it will be useful,
16+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+ * GNU General Public License for more details.
19+ */
20+
21+#include <linux/module.h>
22+#include <linux/ioport.h>
23+#include <linux/init.h>
24+#include <linux/console.h>
25+#include <linux/sysrq.h>
26+#include <linux/tty.h>
27+#include <linux/tty_flip.h>
28+#include <linux/serial_core.h>
29+#include <linux/serial.h>
30+#include <linux/platform_device.h>
31+#include <linux/delay.h>
32+#include <linux/nmi.h>
33+#include <linux/io.h>
34+#include <linux/irq.h>
35+#include <linux/gpio.h>
36+#include <linux/of.h>
37+#include <mach/platform.h>
38+#include <mach/hardware.h>
39+
40+/*
41+ * High Speed UART register offsets
42+ */
43+#define LPC32XX_HSUART_FIFO(x) ((x) + 0x00)
44+#define LPC32XX_HSUART_LEVEL(x) ((x) + 0x04)
45+#define LPC32XX_HSUART_IIR(x) ((x) + 0x08)
46+#define LPC32XX_HSUART_CTRL(x) ((x) + 0x0C)
47+#define LPC32XX_HSUART_RATE(x) ((x) + 0x10)
48+
49+#define LPC32XX_HSU_BREAK_DATA (1 << 10)
50+#define LPC32XX_HSU_ERROR_DATA (1 << 9)
51+#define LPC32XX_HSU_RX_EMPTY (1 << 8)
52+
53+#define LPC32XX_HSU_TX_LEV(n) (((n) >> 8) & 0xFF)
54+#define LPC32XX_HSU_RX_LEV(n) ((n) & 0xFF)
55+
56+#define LPC32XX_HSU_TX_INT_SET (1 << 6)
57+#define LPC32XX_HSU_RX_OE_INT (1 << 5)
58+#define LPC32XX_HSU_BRK_INT (1 << 4)
59+#define LPC32XX_HSU_FE_INT (1 << 3)
60+#define LPC32XX_HSU_RX_TIMEOUT_INT (1 << 2)
61+#define LPC32XX_HSU_RX_TRIG_INT (1 << 1)
62+#define LPC32XX_HSU_TX_INT (1 << 0)
63+
64+#define LPC32XX_HSU_HRTS_INV (1 << 21)
65+#define LPC32XX_HSU_HRTS_TRIG_8B (0x0 << 19)
66+#define LPC32XX_HSU_HRTS_TRIG_16B (0x1 << 19)
67+#define LPC32XX_HSU_HRTS_TRIG_32B (0x2 << 19)
68+#define LPC32XX_HSU_HRTS_TRIG_48B (0x3 << 19)
69+#define LPC32XX_HSU_HRTS_EN (1 << 18)
70+#define LPC32XX_HSU_TMO_DISABLED (0x0 << 16)
71+#define LPC32XX_HSU_TMO_INACT_4B (0x1 << 16)
72+#define LPC32XX_HSU_TMO_INACT_8B (0x2 << 16)
73+#define LPC32XX_HSU_TMO_INACT_16B (0x3 << 16)
74+#define LPC32XX_HSU_HCTS_INV (1 << 15)
75+#define LPC32XX_HSU_HCTS_EN (1 << 14)
76+#define LPC32XX_HSU_OFFSET(n) ((n) << 9)
77+#define LPC32XX_HSU_BREAK (1 << 8)
78+#define LPC32XX_HSU_ERR_INT_EN (1 << 7)
79+#define LPC32XX_HSU_RX_INT_EN (1 << 6)
80+#define LPC32XX_HSU_TX_INT_EN (1 << 5)
81+#define LPC32XX_HSU_RX_TL1B (0x0 << 2)
82+#define LPC32XX_HSU_RX_TL4B (0x1 << 2)
83+#define LPC32XX_HSU_RX_TL8B (0x2 << 2)
84+#define LPC32XX_HSU_RX_TL16B (0x3 << 2)
85+#define LPC32XX_HSU_RX_TL32B (0x4 << 2)
86+#define LPC32XX_HSU_RX_TL48B (0x5 << 2)
87+#define LPC32XX_HSU_TX_TLEMPTY (0x0 << 0)
88+#define LPC32XX_HSU_TX_TL0B (0x0 << 0)
89+#define LPC32XX_HSU_TX_TL4B (0x1 << 0)
90+#define LPC32XX_HSU_TX_TL8B (0x2 << 0)
91+#define LPC32XX_HSU_TX_TL16B (0x3 << 0)
92+
93+#define MODNAME "lpc32xx_hsuart"
94+
95+struct lpc32xx_hsuart_port {
96+ struct uart_port port;
97+};
98+
99+#define FIFO_READ_LIMIT 128
100+#define MAX_PORTS 3
101+#define LPC32XX_TTY_NAME "ttyTX"
102+static struct lpc32xx_hsuart_port lpc32xx_hs_ports[MAX_PORTS];
103+
104+#ifdef CONFIG_SERIAL_HS_LPC32XX_CONSOLE
105+static void wait_for_xmit_empty(struct uart_port *port)
106+{
107+ unsigned int timeout = 10000;
108+
109+ do {
110+ if (LPC32XX_HSU_TX_LEV(readl(LPC32XX_HSUART_LEVEL(
111+ port->membase))) == 0)
112+ break;
113+ if (--timeout == 0)
114+ break;
115+ udelay(1);
116+ } while (1);
117+}
118+
119+static void wait_for_xmit_ready(struct uart_port *port)
120+{
121+ unsigned int timeout = 10000;
122+
123+ while (1) {
124+ if (LPC32XX_HSU_TX_LEV(readl(LPC32XX_HSUART_LEVEL(
125+ port->membase))) < 32)
126+ break;
127+ if (--timeout == 0)
128+ break;
129+ udelay(1);
130+ }
131+}
132+
133+static void lpc32xx_hsuart_console_putchar(struct uart_port *port, int ch)
134+{
135+ wait_for_xmit_ready(port);
136+ writel((u32)ch, LPC32XX_HSUART_FIFO(port->membase));
137+}
138+
139+static void lpc32xx_hsuart_console_write(struct console *co, const char *s,
140+ unsigned int count)
141+{
142+ struct lpc32xx_hsuart_port *up = &lpc32xx_hs_ports[co->index];
143+ unsigned long flags;
144+ int locked = 1;
145+
146+ touch_nmi_watchdog();
147+ local_irq_save(flags);
148+ if (up->port.sysrq)
149+ locked = 0;
150+ else if (oops_in_progress)
151+ locked = spin_trylock(&up->port.lock);
152+ else
153+ spin_lock(&up->port.lock);
154+
155+ uart_console_write(&up->port, s, count, lpc32xx_hsuart_console_putchar);
156+ wait_for_xmit_empty(&up->port);
157+
158+ if (locked)
159+ spin_unlock(&up->port.lock);
160+ local_irq_restore(flags);
161+}
162+
163+static int __init lpc32xx_hsuart_console_setup(struct console *co,
164+ char *options)
165+{
166+ struct uart_port *port;
167+ int baud = 115200;
168+ int bits = 8;
169+ int parity = 'n';
170+ int flow = 'n';
171+
172+ if (co->index >= MAX_PORTS)
173+ co->index = 0;
174+
175+ port = &lpc32xx_hs_ports[co->index].port;
176+ if (!port->membase)
177+ return -ENODEV;
178+
179+ if (options)
180+ uart_parse_options(options, &baud, &parity, &bits, &flow);
181+
182+ return uart_set_options(port, co, baud, parity, bits, flow);
183+}
184+
185+static struct uart_driver lpc32xx_hsuart_reg;
186+static struct console lpc32xx_hsuart_console = {
187+ .name = LPC32XX_TTY_NAME,
188+ .write = lpc32xx_hsuart_console_write,
189+ .device = uart_console_device,
190+ .setup = lpc32xx_hsuart_console_setup,
191+ .flags = CON_PRINTBUFFER,
192+ .index = -1,
193+ .data = &lpc32xx_hsuart_reg,
194+};
195+
196+static int __init lpc32xx_hsuart_console_init(void)
197+{
198+ register_console(&lpc32xx_hsuart_console);
199+ return 0;
200+}
201+console_initcall(lpc32xx_hsuart_console_init);
202+
203+#define LPC32XX_HSUART_CONSOLE (&lpc32xx_hsuart_console)
204+#else
205+#define LPC32XX_HSUART_CONSOLE NULL
206+#endif
207+
208+static struct uart_driver lpc32xx_hs_reg = {
209+ .owner = THIS_MODULE,
210+ .driver_name = MODNAME,
211+ .dev_name = LPC32XX_TTY_NAME,
212+ .nr = MAX_PORTS,
213+ .cons = LPC32XX_HSUART_CONSOLE,
214+};
215+static int uarts_registered;
216+
217+static unsigned int __serial_get_clock_div(unsigned long uartclk,
218+ unsigned long rate)
219+{
220+ u32 div, goodrate, hsu_rate, l_hsu_rate, comprate;
221+ u32 rate_diff;
222+
223+ /* Find the closest divider to get the desired clock rate */
224+ div = uartclk / rate;
225+ goodrate = hsu_rate = (div / 14) - 1;
226+ if (hsu_rate != 0)
227+ hsu_rate--;
228+
229+ /* Tweak divider */
230+ l_hsu_rate = hsu_rate + 3;
231+ rate_diff = 0xFFFFFFFF;
232+
233+ while (hsu_rate < l_hsu_rate) {
234+ comprate = uartclk / ((hsu_rate + 1) * 14);
235+ if (abs(comprate - rate) < rate_diff) {
236+ goodrate = hsu_rate;
237+ rate_diff = abs(comprate - rate);
238+ }
239+
240+ hsu_rate++;
241+ }
242+ if (hsu_rate > 0xFF)
243+ hsu_rate = 0xFF;
244+
245+ return goodrate;
246+}
247+
248+static void __serial_uart_flush(struct uart_port *port)
249+{
250+ u32 tmp;
251+ int cnt = 0;
252+
253+ while ((readl(LPC32XX_HSUART_LEVEL(port->membase)) > 0) &&
254+ (cnt++ < FIFO_READ_LIMIT))
255+ tmp = readl(LPC32XX_HSUART_FIFO(port->membase));
256+}
257+
258+static void __serial_lpc32xx_rx(struct uart_port *port)
259+{
260+ unsigned int tmp, flag;
261+ struct tty_struct *tty = tty_port_tty_get(&port->state->port);
262+
263+ if (!tty) {
264+ /* Discard data: no tty available */
265+ while (!(readl(LPC32XX_HSUART_FIFO(port->membase)) &
266+ LPC32XX_HSU_RX_EMPTY))
267+ ;
268+
269+ return;
270+ }
271+
272+ /* Read data from FIFO and push into terminal */
273+ tmp = readl(LPC32XX_HSUART_FIFO(port->membase));
274+ while (!(tmp & LPC32XX_HSU_RX_EMPTY)) {
275+ flag = TTY_NORMAL;
276+ port->icount.rx++;
277+
278+ if (tmp & LPC32XX_HSU_ERROR_DATA) {
279+ /* Framing error */
280+ writel(LPC32XX_HSU_FE_INT,
281+ LPC32XX_HSUART_IIR(port->membase));
282+ port->icount.frame++;
283+ flag = TTY_FRAME;
284+ tty_insert_flip_char(tty, 0, TTY_FRAME);
285+ }
286+
287+ tty_insert_flip_char(tty, (tmp & 0xFF), flag);
288+
289+ tmp = readl(LPC32XX_HSUART_FIFO(port->membase));
290+ }
291+ tty_flip_buffer_push(tty);
292+ tty_kref_put(tty);
293+}
294+
295+static void __serial_lpc32xx_tx(struct uart_port *port)
296+{
297+ struct circ_buf *xmit = &port->state->xmit;
298+ unsigned int tmp;
299+
300+ if (port->x_char) {
301+ writel((u32)port->x_char, LPC32XX_HSUART_FIFO(port->membase));
302+ port->icount.tx++;
303+ port->x_char = 0;
304+ return;
305+ }
306+
307+ if (uart_circ_empty(xmit) || uart_tx_stopped(port))
308+ goto exit_tx;
309+
310+ /* Transfer data */
311+ while (LPC32XX_HSU_TX_LEV(readl(
312+ LPC32XX_HSUART_LEVEL(port->membase))) < 64) {
313+ writel((u32) xmit->buf[xmit->tail],
314+ LPC32XX_HSUART_FIFO(port->membase));
315+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
316+ port->icount.tx++;
317+ if (uart_circ_empty(xmit))
318+ break;
319+ }
320+
321+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
322+ uart_write_wakeup(port);
323+
324+exit_tx:
325+ if (uart_circ_empty(xmit)) {
326+ tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
327+ tmp &= ~LPC32XX_HSU_TX_INT_EN;
328+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
329+ }
330+}
331+
332+static irqreturn_t serial_lpc32xx_interrupt(int irq, void *dev_id)
333+{
334+ struct uart_port *port = dev_id;
335+ struct tty_struct *tty = tty_port_tty_get(&port->state->port);
336+ u32 status;
337+
338+ spin_lock(&port->lock);
339+
340+ /* Read UART status and clear latched interrupts */
341+ status = readl(LPC32XX_HSUART_IIR(port->membase));
342+
343+ if (status & LPC32XX_HSU_BRK_INT) {
344+ /* Break received */
345+ writel(LPC32XX_HSU_BRK_INT, LPC32XX_HSUART_IIR(port->membase));
346+ port->icount.brk++;
347+ uart_handle_break(port);
348+ }
349+
350+ /* Framing error */
351+ if (status & LPC32XX_HSU_FE_INT)
352+ writel(LPC32XX_HSU_FE_INT, LPC32XX_HSUART_IIR(port->membase));
353+
354+ if (status & LPC32XX_HSU_RX_OE_INT) {
355+ /* Receive FIFO overrun */
356+ writel(LPC32XX_HSU_RX_OE_INT,
357+ LPC32XX_HSUART_IIR(port->membase));
358+ port->icount.overrun++;
359+ if (tty) {
360+ tty_insert_flip_char(tty, 0, TTY_OVERRUN);
361+ tty_schedule_flip(tty);
362+ }
363+ }
364+
365+ /* Data received? */
366+ if (status & (LPC32XX_HSU_RX_TIMEOUT_INT | LPC32XX_HSU_RX_TRIG_INT)) {
367+ __serial_lpc32xx_rx(port);
368+ if (tty)
369+ tty_flip_buffer_push(tty);
370+ }
371+
372+ /* Transmit data request? */
373+ if ((status & LPC32XX_HSU_TX_INT) && (!uart_tx_stopped(port))) {
374+ writel(LPC32XX_HSU_TX_INT, LPC32XX_HSUART_IIR(port->membase));
375+ __serial_lpc32xx_tx(port);
376+ }
377+
378+ spin_unlock(&port->lock);
379+ tty_kref_put(tty);
380+
381+ return IRQ_HANDLED;
382+}
383+
384+/* port->lock is not held. */
385+static unsigned int serial_lpc32xx_tx_empty(struct uart_port *port)
386+{
387+ unsigned int ret = 0;
388+
389+ if (LPC32XX_HSU_TX_LEV(readl(LPC32XX_HSUART_LEVEL(port->membase))) == 0)
390+ ret = TIOCSER_TEMT;
391+
392+ return ret;
393+}
394+
395+/* port->lock held by caller. */
396+static void serial_lpc32xx_set_mctrl(struct uart_port *port,
397+ unsigned int mctrl)
398+{
399+ /* No signals are supported on HS UARTs */
400+}
401+
402+/* port->lock is held by caller and interrupts are disabled. */
403+static unsigned int serial_lpc32xx_get_mctrl(struct uart_port *port)
404+{
405+ /* No signals are supported on HS UARTs */
406+ return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
407+}
408+
409+/* port->lock held by caller. */
410+static void serial_lpc32xx_stop_tx(struct uart_port *port)
411+{
412+ u32 tmp;
413+
414+ tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
415+ tmp &= ~LPC32XX_HSU_TX_INT_EN;
416+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
417+}
418+
419+/* port->lock held by caller. */
420+static void serial_lpc32xx_start_tx(struct uart_port *port)
421+{
422+ u32 tmp;
423+
424+ __serial_lpc32xx_tx(port);
425+ tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
426+ tmp |= LPC32XX_HSU_TX_INT_EN;
427+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
428+}
429+
430+/* port->lock held by caller. */
431+static void serial_lpc32xx_stop_rx(struct uart_port *port)
432+{
433+ u32 tmp;
434+
435+ tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
436+ tmp &= ~(LPC32XX_HSU_RX_INT_EN | LPC32XX_HSU_ERR_INT_EN);
437+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
438+
439+ writel((LPC32XX_HSU_BRK_INT | LPC32XX_HSU_RX_OE_INT |
440+ LPC32XX_HSU_FE_INT), LPC32XX_HSUART_IIR(port->membase));
441+}
442+
443+/* port->lock held by caller. */
444+static void serial_lpc32xx_enable_ms(struct uart_port *port)
445+{
446+ /* Modem status is not supported */
447+}
448+
449+/* port->lock is not held. */
450+static void serial_lpc32xx_break_ctl(struct uart_port *port,
451+ int break_state)
452+{
453+ unsigned long flags;
454+ u32 tmp;
455+
456+ spin_lock_irqsave(&port->lock, flags);
457+ tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
458+ if (break_state != 0)
459+ tmp |= LPC32XX_HSU_BREAK;
460+ else
461+ tmp &= ~LPC32XX_HSU_BREAK;
462+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
463+ spin_unlock_irqrestore(&port->lock, flags);
464+}
465+
466+/* LPC3250 Errata HSUART.1: Hang workaround via loopback mode on inactivity */
467+static void lpc32xx_loopback_set(resource_size_t mapbase, int state)
468+{
469+ int bit;
470+ u32 tmp;
471+
472+ switch (mapbase) {
473+ case LPC32XX_HS_UART1_BASE:
474+ bit = 0;
475+ break;
476+ case LPC32XX_HS_UART2_BASE:
477+ bit = 1;
478+ break;
479+ case LPC32XX_HS_UART7_BASE:
480+ bit = 6;
481+ break;
482+ default:
483+ WARN(1, "lpc32xx_hs: Warning: Unknown port at %08x\n", mapbase);
484+ return;
485+ }
486+
487+ tmp = readl(LPC32XX_UARTCTL_CLOOP);
488+ if (state)
489+ tmp |= (1 << bit);
490+ else
491+ tmp &= ~(1 << bit);
492+ writel(tmp, LPC32XX_UARTCTL_CLOOP);
493+}
494+
495+/* port->lock is not held. */
496+static int serial_lpc32xx_startup(struct uart_port *port)
497+{
498+ int retval;
499+ unsigned long flags;
500+ u32 tmp;
501+
502+ spin_lock_irqsave(&port->lock, flags);
503+
504+ __serial_uart_flush(port);
505+
506+ writel((LPC32XX_HSU_TX_INT | LPC32XX_HSU_FE_INT |
507+ LPC32XX_HSU_BRK_INT | LPC32XX_HSU_RX_OE_INT),
508+ LPC32XX_HSUART_IIR(port->membase));
509+
510+ writel(0xFF, LPC32XX_HSUART_RATE(port->membase));
511+
512+ /*
513+ * Set receiver timeout, HSU offset of 20, no break, no interrupts,
514+ * and default FIFO trigger levels
515+ */
516+ tmp = LPC32XX_HSU_TX_TL8B | LPC32XX_HSU_RX_TL32B |
517+ LPC32XX_HSU_OFFSET(20) | LPC32XX_HSU_TMO_INACT_4B;
518+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
519+
520+ lpc32xx_loopback_set(port->mapbase, 0); /* get out of loopback mode */
521+
522+ spin_unlock_irqrestore(&port->lock, flags);
523+
524+ retval = request_irq(port->irq, serial_lpc32xx_interrupt,
525+ 0, MODNAME, port);
526+ if (!retval)
527+ writel((tmp | LPC32XX_HSU_RX_INT_EN | LPC32XX_HSU_ERR_INT_EN),
528+ LPC32XX_HSUART_CTRL(port->membase));
529+
530+ return retval;
531+}
532+
533+/* port->lock is not held. */
534+static void serial_lpc32xx_shutdown(struct uart_port *port)
535+{
536+ u32 tmp;
537+ unsigned long flags;
538+
539+ spin_lock_irqsave(&port->lock, flags);
540+
541+ tmp = LPC32XX_HSU_TX_TL8B | LPC32XX_HSU_RX_TL32B |
542+ LPC32XX_HSU_OFFSET(20) | LPC32XX_HSU_TMO_INACT_4B;
543+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
544+
545+ lpc32xx_loopback_set(port->mapbase, 1); /* go to loopback mode */
546+
547+ spin_unlock_irqrestore(&port->lock, flags);
548+
549+ free_irq(port->irq, port);
550+}
551+
552+/* port->lock is not held. */
553+static void serial_lpc32xx_set_termios(struct uart_port *port,
554+ struct ktermios *termios,
555+ struct ktermios *old)
556+{
557+ unsigned long flags;
558+ unsigned int baud, quot;
559+ u32 tmp;
560+
561+ /* Always 8-bit, no parity, 1 stop bit */
562+ termios->c_cflag &= ~(CSIZE | CSTOPB | PARENB | PARODD);
563+ termios->c_cflag |= CS8;
564+
565+ termios->c_cflag &= ~(HUPCL | CMSPAR | CLOCAL | CRTSCTS);
566+
567+ baud = uart_get_baud_rate(port, termios, old, 0,
568+ port->uartclk / 14);
569+
570+ quot = __serial_get_clock_div(port->uartclk, baud);
571+
572+ spin_lock_irqsave(&port->lock, flags);
573+
574+ /* Ignore characters? */
575+ tmp = readl(LPC32XX_HSUART_CTRL(port->membase));
576+ if ((termios->c_cflag & CREAD) == 0)
577+ tmp &= ~(LPC32XX_HSU_RX_INT_EN | LPC32XX_HSU_ERR_INT_EN);
578+ else
579+ tmp |= LPC32XX_HSU_RX_INT_EN | LPC32XX_HSU_ERR_INT_EN;
580+ writel(tmp, LPC32XX_HSUART_CTRL(port->membase));
581+
582+ writel(quot, LPC32XX_HSUART_RATE(port->membase));
583+
584+ uart_update_timeout(port, termios->c_cflag, baud);
585+
586+ spin_unlock_irqrestore(&port->lock, flags);
587+
588+ /* Don't rewrite B0 */
589+ if (tty_termios_baud_rate(termios))
590+ tty_termios_encode_baud_rate(termios, baud, baud);
591+}
592+
593+static const char *serial_lpc32xx_type(struct uart_port *port)
594+{
595+ return MODNAME;
596+}
597+
598+static void serial_lpc32xx_release_port(struct uart_port *port)
599+{
600+ if ((port->iotype == UPIO_MEM32) && (port->mapbase)) {
601+ if (port->flags & UPF_IOREMAP) {
602+ iounmap(port->membase);
603+ port->membase = NULL;
604+ }
605+
606+ release_mem_region(port->mapbase, SZ_4K);
607+ }
608+}
609+
610+static int serial_lpc32xx_request_port(struct uart_port *port)
611+{
612+ int ret = -ENODEV;
613+
614+ if ((port->iotype == UPIO_MEM32) && (port->mapbase)) {
615+ ret = 0;
616+
617+ if (!request_mem_region(port->mapbase, SZ_4K, MODNAME))
618+ ret = -EBUSY;
619+ else if (port->flags & UPF_IOREMAP) {
620+ port->membase = ioremap(port->mapbase, SZ_4K);
621+ if (!port->membase) {
622+ release_mem_region(port->mapbase, SZ_4K);
623+ ret = -ENOMEM;
624+ }
625+ }
626+ }
627+
628+ return ret;
629+}
630+
631+static void serial_lpc32xx_config_port(struct uart_port *port, int uflags)
632+{
633+ int ret;
634+
635+ ret = serial_lpc32xx_request_port(port);
636+ if (ret < 0)
637+ return;
638+ port->type = PORT_UART00;
639+ port->fifosize = 64;
640+
641+ __serial_uart_flush(port);
642+
643+ writel((LPC32XX_HSU_TX_INT | LPC32XX_HSU_FE_INT |
644+ LPC32XX_HSU_BRK_INT | LPC32XX_HSU_RX_OE_INT),
645+ LPC32XX_HSUART_IIR(port->membase));
646+
647+ writel(0xFF, LPC32XX_HSUART_RATE(port->membase));
648+
649+ /* Set receiver timeout, HSU offset of 20, no break, no interrupts,
650+ and default FIFO trigger levels */
651+ writel(LPC32XX_HSU_TX_TL8B | LPC32XX_HSU_RX_TL32B |
652+ LPC32XX_HSU_OFFSET(20) | LPC32XX_HSU_TMO_INACT_4B,
653+ LPC32XX_HSUART_CTRL(port->membase));
654+}
655+
656+static int serial_lpc32xx_verify_port(struct uart_port *port,
657+ struct serial_struct *ser)
658+{
659+ int ret = 0;
660+
661+ if (ser->type != PORT_UART00)
662+ ret = -EINVAL;
663+
664+ return ret;
665+}
666+
667+static struct uart_ops serial_lpc32xx_pops = {
668+ .tx_empty = serial_lpc32xx_tx_empty,
669+ .set_mctrl = serial_lpc32xx_set_mctrl,
670+ .get_mctrl = serial_lpc32xx_get_mctrl,
671+ .stop_tx = serial_lpc32xx_stop_tx,
672+ .start_tx = serial_lpc32xx_start_tx,
673+ .stop_rx = serial_lpc32xx_stop_rx,
674+ .enable_ms = serial_lpc32xx_enable_ms,
675+ .break_ctl = serial_lpc32xx_break_ctl,
676+ .startup = serial_lpc32xx_startup,
677+ .shutdown = serial_lpc32xx_shutdown,
678+ .set_termios = serial_lpc32xx_set_termios,
679+ .type = serial_lpc32xx_type,
680+ .release_port = serial_lpc32xx_release_port,
681+ .request_port = serial_lpc32xx_request_port,
682+ .config_port = serial_lpc32xx_config_port,
683+ .verify_port = serial_lpc32xx_verify_port,
684+};
685+
686+/*
687+ * Register a set of serial devices attached to a platform device
688+ */
689+static int __devinit serial_hs_lpc32xx_probe(struct platform_device *pdev)
690+{
691+ struct lpc32xx_hsuart_port *p = &lpc32xx_hs_ports[uarts_registered];
692+ int ret = 0;
693+ struct resource *res;
694+
695+ if (uarts_registered >= MAX_PORTS) {
696+ dev_err(&pdev->dev,
697+ "Error: Number of possible ports exceeded (%d)!\n",
698+ uarts_registered + 1);
699+ return -ENXIO;
700+ }
701+
702+ memset(p, 0, sizeof(*p));
703+
704+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
705+ if (!res) {
706+ dev_err(&pdev->dev,
707+ "Error getting mem resource for HS UART port %d\n",
708+ uarts_registered);
709+ return -ENXIO;
710+ }
711+ p->port.mapbase = res->start;
712+ p->port.membase = NULL;
713+
714+ p->port.irq = platform_get_irq(pdev, 0);
715+ if (p->port.irq < 0) {
716+ dev_err(&pdev->dev, "Error getting irq for HS UART port %d\n",
717+ uarts_registered);
718+ return p->port.irq;
719+ }
720+
721+ p->port.iotype = UPIO_MEM32;
722+ p->port.uartclk = LPC32XX_MAIN_OSC_FREQ;
723+ p->port.regshift = 2;
724+ p->port.flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_IOREMAP;
725+ p->port.dev = &pdev->dev;
726+ p->port.ops = &serial_lpc32xx_pops;
727+ p->port.line = uarts_registered++;
728+ spin_lock_init(&p->port.lock);
729+
730+ /* send port to loopback mode by default */
731+ lpc32xx_loopback_set(p->port.mapbase, 1);
732+
733+ ret = uart_add_one_port(&lpc32xx_hs_reg, &p->port);
734+
735+ platform_set_drvdata(pdev, p);
736+
737+ return ret;
738+}
739+
740+/*
741+ * Remove serial ports registered against a platform device.
742+ */
743+static int __devexit serial_hs_lpc32xx_remove(struct platform_device *pdev)
744+{
745+ struct lpc32xx_hsuart_port *p = platform_get_drvdata(pdev);
746+
747+ uart_remove_one_port(&lpc32xx_hs_reg, &p->port);
748+
749+ return 0;
750+}
751+
752+
753+#ifdef CONFIG_PM
754+static int serial_hs_lpc32xx_suspend(struct platform_device *pdev,
755+ pm_message_t state)
756+{
757+ struct lpc32xx_hsuart_port *p = platform_get_drvdata(pdev);
758+
759+ uart_suspend_port(&lpc32xx_hs_reg, &p->port);
760+
761+ return 0;
762+}
763+
764+static int serial_hs_lpc32xx_resume(struct platform_device *pdev)
765+{
766+ struct lpc32xx_hsuart_port *p = platform_get_drvdata(pdev);
767+
768+ uart_resume_port(&lpc32xx_hs_reg, &p->port);
769+
770+ return 0;
771+}
772+#else
773+#define serial_hs_lpc32xx_suspend NULL
774+#define serial_hs_lpc32xx_resume NULL
775+#endif
776+
777+static const struct of_device_id serial_hs_lpc32xx_dt_ids[] = {
778+ { .compatible = "nxp,lpc3220-hsuart" },
779+ { /* sentinel */ }
780+};
781+
782+MODULE_DEVICE_TABLE(of, serial_hs_lpc32xx_dt_ids);
783+
784+static struct platform_driver serial_hs_lpc32xx_driver = {
785+ .probe = serial_hs_lpc32xx_probe,
786+ .remove = __devexit_p(serial_hs_lpc32xx_remove),
787+ .suspend = serial_hs_lpc32xx_suspend,
788+ .resume = serial_hs_lpc32xx_resume,
789+ .driver = {
790+ .name = MODNAME,
791+ .owner = THIS_MODULE,
792+ .of_match_table = serial_hs_lpc32xx_dt_ids,
793+ },
794+};
795+
796+static int __init lpc32xx_hsuart_init(void)
797+{
798+ int ret;
799+
800+ ret = uart_register_driver(&lpc32xx_hs_reg);
801+ if (ret)
802+ return ret;
803+
804+ ret = platform_driver_register(&serial_hs_lpc32xx_driver);
805+ if (ret)
806+ uart_unregister_driver(&lpc32xx_hs_reg);
807+
808+ return ret;
809+}
810+
811+static void __exit lpc32xx_hsuart_exit(void)
812+{
813+ platform_driver_unregister(&serial_hs_lpc32xx_driver);
814+ uart_unregister_driver(&lpc32xx_hs_reg);
815+}
816+
817+module_init(lpc32xx_hsuart_init);
818+module_exit(lpc32xx_hsuart_exit);
819+
820+MODULE_AUTHOR("Kevin Wells <kevin.wells@nxp.com>");
821+MODULE_AUTHOR("Roland Stigge <stigge@antcom.de>");
822+MODULE_DESCRIPTION("NXP LPC32XX High Speed UART driver");
823+MODULE_LICENSE("GPL");
drivers/tty/serial/m32r_sio.c+2−34
@@ -44,8 +44,6 @@ · 43 unmodified lines
4444 #include <asm/io.h>
4545 #include <asm/irq.h>
4646
47−#define PORT_M32R_BASE PORT_M32R_SIO
48−#define PORT_INDEX(x) (x - PORT_M32R_BASE + 1)
4947 #define BAUD_RATE 115200
5048
5149 #include <linux/serial_core.h>
@@ -132,22 +130,6 @@ struct irq_info { · 80 unmodified lines
132130
133131 static struct irq_info irq_lists[NR_IRQS];
134132
135−/*
136− * Here we define the default xmit fifo size used for each type of UART.
137− */
138−static const struct serial_uart_config uart_config[] = {
139− [PORT_UNKNOWN] = {
140− .name = "unknown",
141− .dfl_xmit_fifo_size = 1,
142− .flags = 0,
143− },
144− [PORT_INDEX(PORT_M32R_SIO)] = {
145− .name = "M32RSIO",
146− .dfl_xmit_fifo_size = 1,
147− .flags = 0,
148− },
149−};
150−
151133 #ifdef CONFIG_SERIAL_M32R_PLDSIO
152134
153135 #define __sio_in(x) inw((unsigned long)(x))
@@ -907,8 +889,7 @@ static void m32r_sio_config_port(struct uart_port *port, int unused) · 753 unmodified lines
907889
908890 spin_lock_irqsave(&up->port.lock, flags);
909891
910− up->port.type = (PORT_M32R_SIO - PORT_M32R_BASE + 1);
911− up->port.fifosize = uart_config[up->port.type].dfl_xmit_fifo_size;
892+ up->port.fifosize = 1;
912893
913894 spin_unlock_irqrestore(&up->port.lock, flags);
914895 }
@@ -916,23 +897,11 @@ static void m32r_sio_config_port(struct uart_port *port, int unused) · 1 unmodified line
916897 static int
917898 m32r_sio_verify_port(struct uart_port *port, struct serial_struct *ser)
918899 {
919− if (ser->irq >= nr_irqs || ser->irq < 0 ||
920− ser->baud_base < 9600 || ser->type < PORT_UNKNOWN ||
921− ser->type >= ARRAY_SIZE(uart_config))
900+ if (ser->irq >= nr_irqs || ser->irq < 0 || ser->baud_base < 9600)
922901 return -EINVAL;
923902 return 0;
924903 }
925904
926−static const char *
927−m32r_sio_type(struct uart_port *port)
928−{
929− int type = port->type;
930−
931− if (type >= ARRAY_SIZE(uart_config))
932− type = 0;
933− return uart_config[type].name;
934−}
935−
936905 static struct uart_ops m32r_sio_pops = {
937906 .tx_empty = m32r_sio_tx_empty,
938907 .set_mctrl = m32r_sio_set_mctrl,
@@ -946,7 +915,6 @@ static struct uart_ops m32r_sio_pops = { · 7 unmodified lines
946915 .shutdown = m32r_sio_shutdown,
947916 .set_termios = m32r_sio_set_termios,
948917 .pm = m32r_sio_pm,
949− .type = m32r_sio_type,
950918 .release_port = m32r_sio_release_port,
951919 .request_port = m32r_sio_request_port,
952920 .config_port = m32r_sio_config_port,
drivers/tty/serial/max3100.c+1−11
@@ -910,17 +910,7 @@ static struct spi_driver max3100_driver = { · 909 unmodified lines
910910 .resume = max3100_resume,
911911 };
912912
913−static int __init max3100_init(void)
914−{
915− return spi_register_driver(&max3100_driver);
916−}
917−module_init(max3100_init);
918−
919−static void __exit max3100_exit(void)
920−{
921− spi_unregister_driver(&max3100_driver);
922−}
923−module_exit(max3100_exit);
913+module_spi_driver(max3100_driver);
924914
925915 MODULE_DESCRIPTION("MAX3100 driver");
926916 MODULE_AUTHOR("Christian Pellegrin <chripell@evolware.org>");
drivers/tty/serial/max3107.c+0−1215
@@ -1,1215 +0,0 @@
1−/*
2− * max3107.c - spi uart protocol driver for Maxim 3107
3− * Based on max3100.c
4− * by Christian Pellegrin <chripell@evolware.org>
5− * and max3110.c
6− * by Feng Tang <feng.tang@intel.com>
7− *
8− * Copyright (C) Aavamobile 2009
9− *
10− * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11− *
12− * This program is free software; you can redistribute it and/or modify
13− * it under the terms of the GNU General Public License as published by
14− * the Free Software Foundation; either version 2 of the License, or
15− * (at your option) any later version.
16− *
17− * This program is distributed in the hope that it will be useful,
18− * but WITHOUT ANY WARRANTY; without even the implied warranty of
19− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20− * GNU General Public License for more details.
21− *
22− * You should have received a copy of the GNU General Public License
23− * along with this program; if not, write to the Free Software
24− * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25− *
26− * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27− *
28− */
29−
30−#include <linux/delay.h>
31−#include <linux/device.h>
32−#include <linux/serial_core.h>
33−#include <linux/serial.h>
34−#include <linux/tty.h>
35−#include <linux/tty_flip.h>
36−#include <linux/gpio.h>
37−#include <linux/spi/spi.h>
38−#include <linux/freezer.h>
39−#include <linux/module.h>
40−#include "max3107.h"
41−
42−static const struct baud_table brg26_ext[] = {
43− { 300, MAX3107_BRG26_B300 },
44− { 600, MAX3107_BRG26_B600 },
45− { 1200, MAX3107_BRG26_B1200 },
46− { 2400, MAX3107_BRG26_B2400 },
47− { 4800, MAX3107_BRG26_B4800 },
48− { 9600, MAX3107_BRG26_B9600 },
49− { 19200, MAX3107_BRG26_B19200 },
50− { 57600, MAX3107_BRG26_B57600 },
51− { 115200, MAX3107_BRG26_B115200 },
52− { 230400, MAX3107_BRG26_B230400 },
53− { 460800, MAX3107_BRG26_B460800 },
54− { 921600, MAX3107_BRG26_B921600 },
55− { 0, 0 }
56−};
57−
58−static const struct baud_table brg13_int[] = {
59− { 300, MAX3107_BRG13_IB300 },
60− { 600, MAX3107_BRG13_IB600 },
61− { 1200, MAX3107_BRG13_IB1200 },
62− { 2400, MAX3107_BRG13_IB2400 },
63− { 4800, MAX3107_BRG13_IB4800 },
64− { 9600, MAX3107_BRG13_IB9600 },
65− { 19200, MAX3107_BRG13_IB19200 },
66− { 57600, MAX3107_BRG13_IB57600 },
67− { 115200, MAX3107_BRG13_IB115200 },
68− { 230400, MAX3107_BRG13_IB230400 },
69− { 460800, MAX3107_BRG13_IB460800 },
70− { 921600, MAX3107_BRG13_IB921600 },
71− { 0, 0 }
72−};
73−
74−static u32 get_new_brg(int baud, struct max3107_port *s)
75−{
76− int i;
77− const struct baud_table *baud_tbl = s->baud_tbl;
78−
79− for (i = 0; i < 13; i++) {
80− if (baud == baud_tbl[i].baud)
81− return baud_tbl[i].new_brg;
82− }
83−
84− return 0;
85−}
86−
87−/* Perform SPI transfer for write/read of device register(s) */
88−int max3107_rw(struct max3107_port *s, u8 *tx, u8 *rx, int len)
89−{
90− struct spi_message spi_msg;
91− struct spi_transfer spi_xfer;
92−
93− /* Initialize SPI ,message */
94− spi_message_init(&spi_msg);
95−
96− /* Initialize SPI transfer */
97− memset(&spi_xfer, 0, sizeof spi_xfer);
98− spi_xfer.len = len;
99− spi_xfer.tx_buf = tx;
100− spi_xfer.rx_buf = rx;
101− spi_xfer.speed_hz = MAX3107_SPI_SPEED;
102−
103− /* Add SPI transfer to SPI message */
104− spi_message_add_tail(&spi_xfer, &spi_msg);
105−
106−#ifdef DBG_TRACE_SPI_DATA
107− {
108− int i;
109− pr_info("tx len %d:\n", spi_xfer.len);
110− for (i = 0 ; i < spi_xfer.len && i < 32 ; i++)
111− pr_info(" %x", ((u8 *)spi_xfer.tx_buf)[i]);
112− pr_info("\n");
113− }
114−#endif
115−
116− /* Perform synchronous SPI transfer */
117− if (spi_sync(s->spi, &spi_msg)) {
118− dev_err(&s->spi->dev, "spi_sync failure\n");
119− return -EIO;
120− }
121−
122−#ifdef DBG_TRACE_SPI_DATA
123− if (spi_xfer.rx_buf) {
124− int i;
125− pr_info("rx len %d:\n", spi_xfer.len);
126− for (i = 0 ; i < spi_xfer.len && i < 32 ; i++)
127− pr_info(" %x", ((u8 *)spi_xfer.rx_buf)[i]);
128− pr_info("\n");
129− }
130−#endif
131− return 0;
132−}
133−EXPORT_SYMBOL_GPL(max3107_rw);
134−
135−/* Puts received data to circular buffer */
136−static void put_data_to_circ_buf(struct max3107_port *s, unsigned char *data,
137− int len)
138−{
139− struct uart_port *port = &s->port;
140− struct tty_struct *tty;
141−
142− if (!port->state)
143− return;
144−
145− tty = port->state->port.tty;
146− if (!tty)
147− return;
148−
149− /* Insert received data */
150− tty_insert_flip_string(tty, data, len);
151− /* Update RX counter */
152− port->icount.rx += len;
153−}
154−
155−/* Handle data receiving */
156−static void max3107_handlerx(struct max3107_port *s, u16 rxlvl)
157−{
158− int i;
159− int j;
160− int len; /* SPI transfer buffer length */
161− u16 *buf;
162− u8 *valid_str;
163−
164− if (!s->rx_enabled)
165− /* RX is disabled */
166− return;
167−
168− if (rxlvl == 0) {
169− /* RX fifo is empty */
170− return;
171− } else if (rxlvl >= MAX3107_RX_FIFO_SIZE) {
172− dev_warn(&s->spi->dev, "Possible RX FIFO overrun %d\n", rxlvl);
173− /* Ensure sanity of RX level */
174− rxlvl = MAX3107_RX_FIFO_SIZE;
175− }
176− if ((s->rxbuf == 0) || (s->rxstr == 0)) {
177− dev_warn(&s->spi->dev, "Rx buffer/str isn't ready\n");
178− return;
179− }
180− buf = s->rxbuf;
181− valid_str = s->rxstr;
182− while (rxlvl) {
183− pr_debug("rxlvl %d\n", rxlvl);
184− /* Clear buffer */
185− memset(buf, 0, sizeof(u16) * (MAX3107_RX_FIFO_SIZE + 2));
186− len = 0;
187− if (s->irqen_reg & MAX3107_IRQ_RXFIFO_BIT) {
188− /* First disable RX FIFO interrupt */
189− pr_debug("Disabling RX INT\n");
190− buf[0] = (MAX3107_WRITE_BIT | MAX3107_IRQEN_REG);
191− s->irqen_reg &= ~MAX3107_IRQ_RXFIFO_BIT;
192− buf[0] |= s->irqen_reg;
193− len++;
194− }
195− /* Just increase the length by amount of words in FIFO since
196− * buffer was zeroed and SPI transfer of 0x0000 means reading
197− * from RX FIFO
198− */
199− len += rxlvl;
200− /* Append RX level query */
201− buf[len] = MAX3107_RXFIFOLVL_REG;
202− len++;
203−
204− /* Perform the SPI transfer */
205− if (max3107_rw(s, (u8 *)buf, (u8 *)buf, len * 2)) {
206− dev_err(&s->spi->dev, "SPI transfer for RX h failed\n");
207− return;
208− }
209−
210− /* Skip RX FIFO interrupt disabling word if it was added */
211− j = ((len - 1) - rxlvl);
212− /* Read received words */
213− for (i = 0; i < rxlvl; i++, j++)
214− valid_str[i] = (u8)buf[j];
215− put_data_to_circ_buf(s, valid_str, rxlvl);
216− /* Get new RX level */
217− rxlvl = (buf[len - 1] & MAX3107_SPI_RX_DATA_MASK);
218− }
219−
220− if (s->rx_enabled) {
221− /* RX still enabled, re-enable RX FIFO interrupt */
222− pr_debug("Enabling RX INT\n");
223− buf[0] = (MAX3107_WRITE_BIT | MAX3107_IRQEN_REG);
224− s->irqen_reg |= MAX3107_IRQ_RXFIFO_BIT;
225− buf[0] |= s->irqen_reg;
226− if (max3107_rw(s, (u8 *)buf, NULL, 2))
227− dev_err(&s->spi->dev, "RX FIFO INT enabling failed\n");
228− }
229−
230− /* Push the received data to receivers */
231− if (s->port.state->port.tty)
232− tty_flip_buffer_push(s->port.state->port.tty);
233−}
234−
235−
236−/* Handle data sending */
237−static void max3107_handletx(struct max3107_port *s)
238−{
239− struct circ_buf *xmit = &s->port.state->xmit;
240− int i;
241− unsigned long flags;
242− int len; /* SPI transfer buffer length */
243− u16 *buf;
244−
245− if (!s->tx_fifo_empty)
246− /* Don't send more data before previous data is sent */
247− return;
248−
249− if (uart_circ_empty(xmit) || uart_tx_stopped(&s->port))
250− /* No data to send or TX is stopped */
251− return;
252−
253− if (!s->txbuf) {
254− dev_warn(&s->spi->dev, "Txbuf isn't ready\n");
255− return;
256− }
257− buf = s->txbuf;
258− /* Get length of data pending in circular buffer */
259− len = uart_circ_chars_pending(xmit);
260− if (len) {
261− /* Limit to size of TX FIFO */
262− if (len > MAX3107_TX_FIFO_SIZE)
263− len = MAX3107_TX_FIFO_SIZE;
264−
265− pr_debug("txlen %d\n", len);
266−
267− /* Update TX counter */
268− s->port.icount.tx += len;
269−
270− /* TX FIFO will no longer be empty */
271− s->tx_fifo_empty = 0;
272−
273− i = 0;
274− if (s->irqen_reg & MAX3107_IRQ_TXEMPTY_BIT) {
275− /* First disable TX empty interrupt */
276− pr_debug("Disabling TE INT\n");
277− buf[i] = (MAX3107_WRITE_BIT | MAX3107_IRQEN_REG);
278− s->irqen_reg &= ~MAX3107_IRQ_TXEMPTY_BIT;
279− buf[i] |= s->irqen_reg;
280− i++;
281− len++;
282− }
283− /* Add data to send */
284− spin_lock_irqsave(&s->port.lock, flags);
285− for ( ; i < len ; i++) {
286− buf[i] = (MAX3107_WRITE_BIT | MAX3107_THR_REG);
287− buf[i] |= ((u16)xmit->buf[xmit->tail] &
288− MAX3107_SPI_TX_DATA_MASK);
289− xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
290− }
291− spin_unlock_irqrestore(&s->port.lock, flags);
292− if (!(s->irqen_reg & MAX3107_IRQ_TXEMPTY_BIT)) {
293− /* Enable TX empty interrupt */
294− pr_debug("Enabling TE INT\n");
295− buf[i] = (MAX3107_WRITE_BIT | MAX3107_IRQEN_REG);
296− s->irqen_reg |= MAX3107_IRQ_TXEMPTY_BIT;
297− buf[i] |= s->irqen_reg;
298− i++;
299− len++;
300− }
301− if (!s->tx_enabled) {
302− /* Enable TX */
303− pr_debug("Enable TX\n");
304− buf[i] = (MAX3107_WRITE_BIT | MAX3107_MODE1_REG);
305− spin_lock_irqsave(&s->data_lock, flags);
306− s->mode1_reg &= ~MAX3107_MODE1_TXDIS_BIT;
307− buf[i] |= s->mode1_reg;
308− spin_unlock_irqrestore(&s->data_lock, flags);
309− s->tx_enabled = 1;
310− i++;
311− len++;
312− }
313−
314− /* Perform the SPI transfer */
315− if (max3107_rw(s, (u8 *)buf, NULL, len*2)) {
316− dev_err(&s->spi->dev,
317− "SPI transfer TX handling failed\n");
318− return;
319− }
320− }
321−
322− /* Indicate wake up if circular buffer is getting low on data */
323− if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
324− uart_write_wakeup(&s->port);
325−
326−}
327−
328−/* Handle interrupts
329− * Also reads and returns current RX FIFO level
330− */
331−static u16 handle_interrupt(struct max3107_port *s)
332−{
333− u16 buf[4]; /* Buffer for SPI transfers */
334− u8 irq_status;
335− u16 rx_level;
336− unsigned long flags;
337−
338− /* Read IRQ status register */
339− buf[0] = MAX3107_IRQSTS_REG;
340− /* Read status IRQ status register */
341− buf[1] = MAX3107_STS_IRQSTS_REG;
342− /* Read LSR IRQ status register */
343− buf[2] = MAX3107_LSR_IRQSTS_REG;
344− /* Query RX level */
345− buf[3] = MAX3107_RXFIFOLVL_REG;
346−
347− if (max3107_rw(s, (u8 *)buf, (u8 *)buf, 8)) {
348− dev_err(&s->spi->dev,
349− "SPI transfer for INTR handling failed\n");
350− return 0;
351− }
352−
353− irq_status = (u8)buf[0];
354− pr_debug("IRQSTS %x\n", irq_status);
355− rx_level = (buf[3] & MAX3107_SPI_RX_DATA_MASK);
356−
357− if (irq_status & MAX3107_IRQ_LSR_BIT) {
358− /* LSR interrupt */
359− if (buf[2] & MAX3107_LSR_RXTO_BIT)
360− /* RX timeout interrupt,
361− * handled by normal RX handling
362− */
363− pr_debug("RX TO INT\n");
364− }
365−
366− if (irq_status & MAX3107_IRQ_TXEMPTY_BIT) {
367− /* Tx empty interrupt,
368− * disable TX and set tx_fifo_empty flag
369− */
370− pr_debug("TE INT, disabling TX\n");
371− buf[0] = (MAX3107_WRITE_BIT | MAX3107_MODE1_REG);
372− spin_lock_irqsave(&s->data_lock, flags);
373− s->mode1_reg |= MAX3107_MODE1_TXDIS_BIT;
374− buf[0] |= s->mode1_reg;
375− spin_unlock_irqrestore(&s->data_lock, flags);
376− if (max3107_rw(s, (u8 *)buf, NULL, 2))
377− dev_err(&s->spi->dev, "SPI transfer TX dis failed\n");
378− s->tx_enabled = 0;
379− s->tx_fifo_empty = 1;
380− }
381−
382− if (irq_status & MAX3107_IRQ_RXFIFO_BIT)
383− /* RX FIFO interrupt,
384− * handled by normal RX handling
385− */
386− pr_debug("RFIFO INT\n");
387−
388− /* Return RX level */
389− return rx_level;
390−}
391−
392−/* Trigger work thread*/
393−static void max3107_dowork(struct max3107_port *s)
394−{
395− if (!work_pending(&s->work) && !freezing(current) && !s->suspended)
396− queue_work(s->workqueue, &s->work);
397− else
398− dev_warn(&s->spi->dev, "interrup isn't serviced normally!\n");
399−}
400−
401−/* Work thread */
402−static void max3107_work(struct work_struct *w)
403−{
404− struct max3107_port *s = container_of(w, struct max3107_port, work);
405− u16 rxlvl = 0;
406− int len; /* SPI transfer buffer length */
407− u16 buf[5]; /* Buffer for SPI transfers */
408− unsigned long flags;
409−
410− /* Start by reading current RX FIFO level */
411− buf[0] = MAX3107_RXFIFOLVL_REG;
412− if (max3107_rw(s, (u8 *)buf, (u8 *)buf, 2)) {
413− dev_err(&s->spi->dev, "SPI transfer RX lev failed\n");
414− rxlvl = 0;
415− } else {
416− rxlvl = (buf[0] & MAX3107_SPI_RX_DATA_MASK);
417− }
418−
419− do {
420− pr_debug("rxlvl %d\n", rxlvl);
421−
422− /* Handle RX */
423− max3107_handlerx(s, rxlvl);
424− rxlvl = 0;
425−
426− if (s->handle_irq) {
427− /* Handle pending interrupts
428− * We also get new RX FIFO level since new data may
429− * have been received while pushing received data to
430− * receivers
431− */
432− s->handle_irq = 0;
433− rxlvl = handle_interrupt(s);
434− }
435−
436− /* Handle TX */
437− max3107_handletx(s);
438−
439− /* Handle configuration changes */
440− len = 0;
441− spin_lock_irqsave(&s->data_lock, flags);
442− if (s->mode1_commit) {
443− pr_debug("mode1_commit\n");
444− buf[len] = (MAX3107_WRITE_BIT | MAX3107_MODE1_REG);
445− buf[len++] |= s->mode1_reg;
446− s->mode1_commit = 0;
447− }
448− if (s->lcr_commit) {
449− pr_debug("lcr_commit\n");
450− buf[len] = (MAX3107_WRITE_BIT | MAX3107_LCR_REG);
451− buf[len++] |= s->lcr_reg;
452− s->lcr_commit = 0;
453− }
454− if (s->brg_commit) {
455− pr_debug("brg_commit\n");
456− buf[len] = (MAX3107_WRITE_BIT | MAX3107_BRGDIVMSB_REG);
457− buf[len++] |= ((s->brg_cfg >> 16) &
458− MAX3107_SPI_TX_DATA_MASK);
459− buf[len] = (MAX3107_WRITE_BIT | MAX3107_BRGDIVLSB_REG);
460− buf[len++] |= ((s->brg_cfg >> 8) &
461− MAX3107_SPI_TX_DATA_MASK);
462− buf[len] = (MAX3107_WRITE_BIT | MAX3107_BRGCFG_REG);
463− buf[len++] |= ((s->brg_cfg) & 0xff);
464− s->brg_commit = 0;
465− }
466− spin_unlock_irqrestore(&s->data_lock, flags);
467−
468− if (len > 0) {
469− if (max3107_rw(s, (u8 *)buf, NULL, len * 2))
470− dev_err(&s->spi->dev,
471− "SPI transfer config failed\n");
472− }
473−
474− /* Reloop if interrupt handling indicated data in RX FIFO */
475− } while (rxlvl);
476−
477−}
478−
479−/* Set sleep mode */
480−static void max3107_set_sleep(struct max3107_port *s, int mode)
481−{
482− u16 buf[1]; /* Buffer for SPI transfer */
483− unsigned long flags;
484− pr_debug("enter, mode %d\n", mode);
485−
486− buf[0] = (MAX3107_WRITE_BIT | MAX3107_MODE1_REG);
487− spin_lock_irqsave(&s->data_lock, flags);
488− switch (mode) {
489− case MAX3107_DISABLE_FORCED_SLEEP:
490− s->mode1_reg &= ~MAX3107_MODE1_FORCESLEEP_BIT;
491− break;
492− case MAX3107_ENABLE_FORCED_SLEEP:
493− s->mode1_reg |= MAX3107_MODE1_FORCESLEEP_BIT;
494− break;
495− case MAX3107_DISABLE_AUTOSLEEP:
496− s->mode1_reg &= ~MAX3107_MODE1_AUTOSLEEP_BIT;
497− break;
498− case MAX3107_ENABLE_AUTOSLEEP:
499− s->mode1_reg |= MAX3107_MODE1_AUTOSLEEP_BIT;
500− break;
501− default:
502− spin_unlock_irqrestore(&s->data_lock, flags);
503− dev_warn(&s->spi->dev, "invalid sleep mode\n");
504− return;
505− }
506− buf[0] |= s->mode1_reg;
507− spin_unlock_irqrestore(&s->data_lock, flags);
508−
509− if (max3107_rw(s, (u8 *)buf, NULL, 2))
510− dev_err(&s->spi->dev, "SPI transfer sleep mode failed\n");
511−
512− if (mode == MAX3107_DISABLE_AUTOSLEEP ||
513− mode == MAX3107_DISABLE_FORCED_SLEEP)
514− msleep(MAX3107_WAKEUP_DELAY);
515−}
516−
517−/* Perform full register initialization */
518−static void max3107_register_init(struct max3107_port *s)
519−{
520− u16 buf[11]; /* Buffer for SPI transfers */
521−
522− /* 1. Configure baud rate, 9600 as default */
523− s->baud = 9600;
524− /* the below is default*/
525− if (s->ext_clk) {
526− s->brg_cfg = MAX3107_BRG26_B9600;
527− s->baud_tbl = (struct baud_table *)brg26_ext;
528− } else {
529− s->brg_cfg = MAX3107_BRG13_IB9600;
530− s->baud_tbl = (struct baud_table *)brg13_int;
531− }
532−
533− if (s->pdata->init)
534− s->pdata->init(s);
535−
536− buf[0] = (MAX3107_WRITE_BIT | MAX3107_BRGDIVMSB_REG)
537− | ((s->brg_cfg >> 16) & MAX3107_SPI_TX_DATA_MASK);
538− buf[1] = (MAX3107_WRITE_BIT | MAX3107_BRGDIVLSB_REG)
539− | ((s->brg_cfg >> 8) & MAX3107_SPI_TX_DATA_MASK);
540− buf[2] = (MAX3107_WRITE_BIT | MAX3107_BRGCFG_REG)
541− | ((s->brg_cfg) & 0xff);
542−
543− /* 2. Configure LCR register, 8N1 mode by default */
544− s->lcr_reg = MAX3107_LCR_WORD_LEN_8;
545− buf[3] = (MAX3107_WRITE_BIT | MAX3107_LCR_REG)
546− | s->lcr_reg;
547−
548− /* 3. Configure MODE 1 register */
549− s->mode1_reg = 0;
550− /* Enable IRQ pin */
551− s->mode1_reg |= MAX3107_MODE1_IRQSEL_BIT;
552− /* Disable TX */
553− s->mode1_reg |= MAX3107_MODE1_TXDIS_BIT;
554− s->tx_enabled = 0;
555− /* RX is enabled */
556− s->rx_enabled = 1;
557− buf[4] = (MAX3107_WRITE_BIT | MAX3107_MODE1_REG)
558− | s->mode1_reg;
559−
560− /* 4. Configure MODE 2 register */
561− buf[5] = (MAX3107_WRITE_BIT | MAX3107_MODE2_REG);
562− if (s->loopback) {
563− /* Enable loopback */
564− buf[5] |= MAX3107_MODE2_LOOPBACK_BIT;
565− }
566− /* Reset FIFOs */
567− buf[5] |= MAX3107_MODE2_FIFORST_BIT;
568− s->tx_fifo_empty = 1;
569−
570− /* 5. Configure FIFO trigger level register */
571− buf[6] = (MAX3107_WRITE_BIT | MAX3107_FIFOTRIGLVL_REG);
572− /* RX FIFO trigger for 16 words, TX FIFO trigger not used */
573− buf[6] |= (MAX3107_FIFOTRIGLVL_RX(16) | MAX3107_FIFOTRIGLVL_TX(0));
574−
575− /* 6. Configure flow control levels */
576− buf[7] = (MAX3107_WRITE_BIT | MAX3107_FLOWLVL_REG);
577− /* Flow control halt level 96, resume level 48 */
578− buf[7] |= (MAX3107_FLOWLVL_RES(48) | MAX3107_FLOWLVL_HALT(96));
579−
580− /* 7. Configure flow control */
581− buf[8] = (MAX3107_WRITE_BIT | MAX3107_FLOWCTRL_REG);
582− /* Enable auto CTS and auto RTS flow control */
583− buf[8] |= (MAX3107_FLOWCTRL_AUTOCTS_BIT | MAX3107_FLOWCTRL_AUTORTS_BIT);
584−
585− /* 8. Configure RX timeout register */
586− buf[9] = (MAX3107_WRITE_BIT | MAX3107_RXTO_REG);
587− /* Timeout after 48 character intervals */
588− buf[9] |= 0x0030;
589−
590− /* 9. Configure LSR interrupt enable register */
591− buf[10] = (MAX3107_WRITE_BIT | MAX3107_LSR_IRQEN_REG);
592− /* Enable RX timeout interrupt */
593− buf[10] |= MAX3107_LSR_RXTO_BIT;
594−
595− /* Perform SPI transfer */
596− if (max3107_rw(s, (u8 *)buf, NULL, 22))
597− dev_err(&s->spi->dev, "SPI transfer for init failed\n");
598−
599− /* 10. Clear IRQ status register by reading it */
600− buf[0] = MAX3107_IRQSTS_REG;
601−
602− /* 11. Configure interrupt enable register */
603− /* Enable LSR interrupt */
604− s->irqen_reg = MAX3107_IRQ_LSR_BIT;
605− /* Enable RX FIFO interrupt */
606− s->irqen_reg |= MAX3107_IRQ_RXFIFO_BIT;
607− buf[1] = (MAX3107_WRITE_BIT | MAX3107_IRQEN_REG)
608− | s->irqen_reg;
609−
610− /* 12. Clear FIFO reset that was set in step 6 */
611− buf[2] = (MAX3107_WRITE_BIT | MAX3107_MODE2_REG);
612− if (s->loopback) {
613− /* Keep loopback enabled */
614− buf[2] |= MAX3107_MODE2_LOOPBACK_BIT;
615− }
616−
617− /* Perform SPI transfer */
618− if (max3107_rw(s, (u8 *)buf, (u8 *)buf, 6))
619− dev_err(&s->spi->dev, "SPI transfer for init failed\n");
620−
621−}
622−
623−/* IRQ handler */
624−static irqreturn_t max3107_irq(int irqno, void *dev_id)
625−{
626− struct max3107_port *s = dev_id;
627−
628− if (irqno != s->spi->irq) {
629− /* Unexpected IRQ */
630− return IRQ_NONE;
631− }
632−
633− /* Indicate irq */
634− s->handle_irq = 1;
635−
636− /* Trigger work thread */
637− max3107_dowork(s);
638−
639− return IRQ_HANDLED;
640−}
641−
642−/* HW suspension function
643− *
644− * Currently autosleep is used to decrease current consumption, alternative
645− * approach would be to set the chip to reset mode if UART is not being
646− * used but that would mess the GPIOs
647− *
648− */
649−void max3107_hw_susp(struct max3107_port *s, int suspend)
650−{
651− pr_debug("enter, suspend %d\n", suspend);
652−
653− if (suspend) {
654− /* Suspend requested,
655− * enable autosleep to decrease current consumption
656− */
657− s->suspended = 1;
658− max3107_set_sleep(s, MAX3107_ENABLE_AUTOSLEEP);
659− } else {
660− /* Resume requested,
661− * disable autosleep
662− */
663− s->suspended = 0;
664− max3107_set_sleep(s, MAX3107_DISABLE_AUTOSLEEP);
665− }
666−}
667−EXPORT_SYMBOL_GPL(max3107_hw_susp);
668−
669−/* Modem status IRQ enabling */
670−static void max3107_enable_ms(struct uart_port *port)
671−{
672− /* Modem status not supported */
673−}
674−
675−/* Data send function */
676−static void max3107_start_tx(struct uart_port *port)
677−{
678− struct max3107_port *s = container_of(port, struct max3107_port, port);
679−
680− /* Trigger work thread for sending data */
681− max3107_dowork(s);
682−}
683−
684−/* Function for checking that there is no pending transfers */
685−static unsigned int max3107_tx_empty(struct uart_port *port)
686−{
687− struct max3107_port *s = container_of(port, struct max3107_port, port);
688−
689− pr_debug("returning %d\n",
690− (s->tx_fifo_empty && uart_circ_empty(&s->port.state->xmit)));
691− return s->tx_fifo_empty && uart_circ_empty(&s->port.state->xmit);
692−}
693−
694−/* Function for stopping RX */
695−static void max3107_stop_rx(struct uart_port *port)
696−{
697− struct max3107_port *s = container_of(port, struct max3107_port, port);
698− unsigned long flags;
699−
700− /* Set RX disabled in MODE 1 register */
701− spin_lock_irqsave(&s->data_lock, flags);
702− s->mode1_reg |= MAX3107_MODE1_RXDIS_BIT;
703− s->mode1_commit = 1;
704− spin_unlock_irqrestore(&s->data_lock, flags);
705− /* Set RX disabled */
706− s->rx_enabled = 0;
707− /* Trigger work thread for doing the actual configuration change */
708− max3107_dowork(s);
709−}
710−
711−/* Function for returning control pin states */
712−static unsigned int max3107_get_mctrl(struct uart_port *port)
713−{
714− /* DCD and DSR are not wired and CTS/RTS is handled automatically
715− * so just indicate DSR and CAR asserted
716− */
717− return TIOCM_DSR | TIOCM_CAR;
718−}
719−
720−/* Function for setting control pin states */
721−static void max3107_set_mctrl(struct uart_port *port, unsigned int mctrl)
722−{
723− /* DCD and DSR are not wired and CTS/RTS is hadnled automatically
724− * so do nothing
725− */
726−}
727−
728−/* Function for configuring UART parameters */
729−static void max3107_set_termios(struct uart_port *port,
730− struct ktermios *termios,
731− struct ktermios *old)
732−{
733− struct max3107_port *s = container_of(port, struct max3107_port, port);
734− struct tty_struct *tty;
735− int baud;
736− u16 new_lcr = 0;
737− u32 new_brg = 0;
738− unsigned long flags;
739−
740− if (!port->state)
741− return;
742−
743− tty = port->state->port.tty;
744− if (!tty)
745− return;
746−
747− /* Get new LCR register values */
748− /* Word size */
749− if ((termios->c_cflag & CSIZE) == CS7)
750− new_lcr |= MAX3107_LCR_WORD_LEN_7;
751− else
752− new_lcr |= MAX3107_LCR_WORD_LEN_8;
753−
754− /* Parity */
755− if (termios->c_cflag & PARENB) {
756− new_lcr |= MAX3107_LCR_PARITY_BIT;
757− if (!(termios->c_cflag & PARODD))
758− new_lcr |= MAX3107_LCR_EVENPARITY_BIT;
759− }
760−
761− /* Stop bits */
762− if (termios->c_cflag & CSTOPB) {
763− /* 2 stop bits */
764− new_lcr |= MAX3107_LCR_STOPLEN_BIT;
765− }
766−
767− /* Mask termios capabilities we don't support */
768− termios->c_cflag &= ~CMSPAR;
769−
770− /* Set status ignore mask */
771− s->port.ignore_status_mask = 0;
772− if (termios->c_iflag & IGNPAR)
773− s->port.ignore_status_mask |= MAX3107_ALL_ERRORS;
774−
775− /* Set low latency to immediately handle pushed data */
776− s->port.state->port.tty->low_latency = 1;
777−
778− /* Get new baud rate generator configuration */
779− baud = tty_get_baud_rate(tty);
780−
781− spin_lock_irqsave(&s->data_lock, flags);
782− new_brg = get_new_brg(baud, s);
783− /* if can't find the corrent config, use previous */
784− if (!new_brg) {
785− baud = s->baud;
786− new_brg = s->brg_cfg;
787− }
788− spin_unlock_irqrestore(&s->data_lock, flags);
789− tty_termios_encode_baud_rate(termios, baud, baud);
790− s->baud = baud;
791−
792− /* Update timeout according to new baud rate */
793− uart_update_timeout(port, termios->c_cflag, baud);
794−
795− spin_lock_irqsave(&s->data_lock, flags);
796− if (s->lcr_reg != new_lcr) {
797− s->lcr_reg = new_lcr;
798− s->lcr_commit = 1;
799− }
800− if (s->brg_cfg != new_brg) {
801− s->brg_cfg = new_brg;
802− s->brg_commit = 1;
803− }
804− spin_unlock_irqrestore(&s->data_lock, flags);
805−
806− /* Trigger work thread for doing the actual configuration change */
807− max3107_dowork(s);
808−}
809−
810−/* Port shutdown function */
811−static void max3107_shutdown(struct uart_port *port)
812−{
813− struct max3107_port *s = container_of(port, struct max3107_port, port);
814−
815− if (s->suspended && s->pdata->hw_suspend)
816− s->pdata->hw_suspend(s, 0);
817−
818− /* Free the interrupt */
819− free_irq(s->spi->irq, s);
820−
821− if (s->workqueue) {
822− /* Flush and destroy work queue */
823− flush_workqueue(s->workqueue);
824− destroy_workqueue(s->workqueue);
825− s->workqueue = NULL;
826− }
827−
828− /* Suspend HW */
829− if (s->pdata->hw_suspend)
830− s->pdata->hw_suspend(s, 1);
831−}
832−
833−/* Port startup function */
834−static int max3107_startup(struct uart_port *port)
835−{
836− struct max3107_port *s = container_of(port, struct max3107_port, port);
837−
838− /* Initialize work queue */
839− s->workqueue = create_freezable_workqueue("max3107");
840− if (!s->workqueue) {
841− dev_err(&s->spi->dev, "Workqueue creation failed\n");
842− return -EBUSY;
843− }
844− INIT_WORK(&s->work, max3107_work);
845−
846− /* Setup IRQ */
847− if (request_irq(s->spi->irq, max3107_irq, IRQF_TRIGGER_FALLING,
848− "max3107", s)) {
849− dev_err(&s->spi->dev, "IRQ reguest failed\n");
850− destroy_workqueue(s->workqueue);
851− s->workqueue = NULL;
852− return -EBUSY;
853− }
854−
855− /* Resume HW */
856− if (s->pdata->hw_suspend)
857− s->pdata->hw_suspend(s, 0);
858−
859− /* Init registers */
860− max3107_register_init(s);
861−
862− return 0;
863−}
864−
865−/* Port type function */
866−static const char *max3107_type(struct uart_port *port)
867−{
868− struct max3107_port *s = container_of(port, struct max3107_port, port);
869− return s->spi->modalias;
870−}
871−
872−/* Port release function */
873−static void max3107_release_port(struct uart_port *port)
874−{
875− /* Do nothing */
876−}
877−
878−/* Port request function */
879−static int max3107_request_port(struct uart_port *port)
880−{
881− /* Do nothing */
882− return 0;
883−}
884−
885−/* Port config function */
886−static void max3107_config_port(struct uart_port *port, int flags)
887−{
888− struct max3107_port *s = container_of(port, struct max3107_port, port);
889− s->port.type = PORT_MAX3107;
890−}
891−
892−/* Port verify function */
893−static int max3107_verify_port(struct uart_port *port,
894− struct serial_struct *ser)
895−{
896− if (ser->type == PORT_UNKNOWN || ser->type == PORT_MAX3107)
897− return 0;
898−
899− return -EINVAL;
900−}
901−
902−/* Port stop TX function */
903−static void max3107_stop_tx(struct uart_port *port)
904−{
905− /* Do nothing */
906−}
907−
908−/* Port break control function */
909−static void max3107_break_ctl(struct uart_port *port, int break_state)
910−{
911− /* We don't support break control, do nothing */
912−}
913−
914−
915−/* Port functions */
916−static struct uart_ops max3107_ops = {
917− .tx_empty = max3107_tx_empty,
918− .set_mctrl = max3107_set_mctrl,
919− .get_mctrl = max3107_get_mctrl,
920− .stop_tx = max3107_stop_tx,
921− .start_tx = max3107_start_tx,
922− .stop_rx = max3107_stop_rx,
923− .enable_ms = max3107_enable_ms,
924− .break_ctl = max3107_break_ctl,
925− .startup = max3107_startup,
926− .shutdown = max3107_shutdown,
927− .set_termios = max3107_set_termios,
928− .type = max3107_type,
929− .release_port = max3107_release_port,
930− .request_port = max3107_request_port,
931− .config_port = max3107_config_port,
932− .verify_port = max3107_verify_port,
933−};
934−
935−/* UART driver data */
936−static struct uart_driver max3107_uart_driver = {
937− .owner = THIS_MODULE,
938− .driver_name = "ttyMAX",
939− .dev_name = "ttyMAX",
940− .nr = 1,
941−};
942−
943−static int driver_registered = 0;
944−
945−
946−
947−/* 'Generic' platform data */
948−static struct max3107_plat generic_plat_data = {
949− .loopback = 0,
950− .ext_clk = 1,
951− .hw_suspend = max3107_hw_susp,
952− .polled_mode = 0,
953− .poll_time = 0,
954−};
955−
956−
957−/*******************************************************************/
958−
959−/**
960− * max3107_probe - SPI bus probe entry point
961− * @spi: the spi device
962− *
963− * SPI wants us to probe this device and if appropriate claim it.
964− * Perform any platform specific requirements and then initialise
965− * the device.
966− */
967−
968−int max3107_probe(struct spi_device *spi, struct max3107_plat *pdata)
969−{
970− struct max3107_port *s;
971− u16 buf[2]; /* Buffer for SPI transfers */
972− int retval;
973−
974− pr_info("enter max3107 probe\n");
975−
976− /* Allocate port structure */
977− s = kzalloc(sizeof(*s), GFP_KERNEL);
978− if (!s) {
979− pr_err("Allocating port structure failed\n");
980− return -ENOMEM;
981− }
982−
983− s->pdata = pdata;
984−
985− /* SPI Rx buffer
986− * +2 for RX FIFO interrupt
987− * disabling and RX level query
988− */
989− s->rxbuf = kzalloc(sizeof(u16) * (MAX3107_RX_FIFO_SIZE+2), GFP_KERNEL);
990− if (!s->rxbuf) {
991− pr_err("Allocating RX buffer failed\n");
992− retval = -ENOMEM;
993− goto err_free4;
994− }
995− s->rxstr = kzalloc(sizeof(u8) * MAX3107_RX_FIFO_SIZE, GFP_KERNEL);
996− if (!s->rxstr) {
997− pr_err("Allocating RX buffer failed\n");
998− retval = -ENOMEM;
999− goto err_free3;
1000− }
1001− /* SPI Tx buffer
1002− * SPI transfer buffer
1003− * +3 for TX FIFO empty
1004− * interrupt disabling and
1005− * enabling and TX enabling
1006− */
1007− s->txbuf = kzalloc(sizeof(u16) * MAX3107_TX_FIFO_SIZE + 3, GFP_KERNEL);
1008− if (!s->txbuf) {
1009− pr_err("Allocating TX buffer failed\n");
1010− retval = -ENOMEM;
1011− goto err_free2;
1012− }
1013− /* Initialize shared data lock */
1014− spin_lock_init(&s->data_lock);
1015−
1016− /* SPI intializations */
1017− dev_set_drvdata(&spi->dev, s);
1018− spi->mode = SPI_MODE_0;
1019− spi->dev.platform_data = pdata;
1020− spi->bits_per_word = 16;
1021− s->ext_clk = pdata->ext_clk;
1022− s->loopback = pdata->loopback;
1023− spi_setup(spi);
1024− s->spi = spi;
1025−
1026− /* Check REV ID to ensure we are talking to what we expect */
1027− buf[0] = MAX3107_REVID_REG;
1028− if (max3107_rw(s, (u8 *)buf, (u8 *)buf, 2)) {
1029− dev_err(&s->spi->dev, "SPI transfer for REVID read failed\n");
1030− retval = -EIO;
1031− goto err_free1;
1032− }
1033− if ((buf[0] & MAX3107_SPI_RX_DATA_MASK) != MAX3107_REVID1 &&
1034− (buf[0] & MAX3107_SPI_RX_DATA_MASK) != MAX3107_REVID2) {
1035− dev_err(&s->spi->dev, "REVID %x does not match\n",
1036− (buf[0] & MAX3107_SPI_RX_DATA_MASK));
1037− retval = -ENODEV;
1038− goto err_free1;
1039− }
1040−
1041− /* Disable all interrupts */
1042− buf[0] = (MAX3107_WRITE_BIT | MAX3107_IRQEN_REG | 0x0000);
1043− buf[0] |= 0x0000;
1044−
1045− /* Configure clock source */
1046− buf[1] = (MAX3107_WRITE_BIT | MAX3107_CLKSRC_REG);
1047− if (s->ext_clk) {
1048− /* External clock */
1049− buf[1] |= MAX3107_CLKSRC_EXTCLK_BIT;
1050− }
1051−
1052− /* PLL bypass ON */
1053− buf[1] |= MAX3107_CLKSRC_PLLBYP_BIT;
1054−
1055− /* Perform SPI transfer */
1056− if (max3107_rw(s, (u8 *)buf, NULL, 4)) {
1057− dev_err(&s->spi->dev, "SPI transfer for init failed\n");
1058− retval = -EIO;
1059− goto err_free1;
1060− }
1061−
1062− /* Register UART driver */
1063− if (!driver_registered) {
1064− retval = uart_register_driver(&max3107_uart_driver);
1065− if (retval) {
1066− dev_err(&s->spi->dev, "Registering UART driver failed\n");
1067− goto err_free1;
1068− }
1069− driver_registered = 1;
1070− }
1071−
1072− /* Initialize UART port data */
1073− s->port.fifosize = 128;
1074− s->port.ops = &max3107_ops;
1075− s->port.line = 0;
1076− s->port.dev = &spi->dev;
1077− s->port.uartclk = 9600;
1078− s->port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF;
1079− s->port.irq = s->spi->irq;
1080− s->port.type = PORT_MAX3107;
1081−
1082− /* Add UART port */
1083− retval = uart_add_one_port(&max3107_uart_driver, &s->port);
1084− if (retval < 0) {
1085− dev_err(&s->spi->dev, "Adding UART port failed\n");
1086− goto err_free1;
1087− }
1088−
1089− if (pdata->configure) {
1090− retval = pdata->configure(s);
1091− if (retval < 0)
1092− goto err_free1;
1093− }
1094−
1095− /* Go to suspend mode */
1096− if (pdata->hw_suspend)
1097− pdata->hw_suspend(s, 1);
1098−
1099− return 0;
1100−
1101−err_free1:
1102− kfree(s->txbuf);
1103−err_free2:
1104− kfree(s->rxstr);
1105−err_free3:
1106− kfree(s->rxbuf);
1107−err_free4:
1108− kfree(s);
1109− return retval;
1110−}
1111−EXPORT_SYMBOL_GPL(max3107_probe);
1112−
1113−/* Driver remove function */
1114−int max3107_remove(struct spi_device *spi)
1115−{
1116− struct max3107_port *s = dev_get_drvdata(&spi->dev);
1117−
1118− pr_info("enter max3107 remove\n");
1119−
1120− /* Remove port */
1121− if (uart_remove_one_port(&max3107_uart_driver, &s->port))
1122− dev_warn(&s->spi->dev, "Removing UART port failed\n");
1123−
1124−
1125− /* Free TxRx buffer */
1126− kfree(s->rxbuf);
1127− kfree(s->rxstr);
1128− kfree(s->txbuf);
1129−
1130− /* Free port structure */
1131− kfree(s);
1132−
1133− return 0;
1134−}
1135−EXPORT_SYMBOL_GPL(max3107_remove);
1136−
1137−/* Driver suspend function */
1138−int max3107_suspend(struct spi_device *spi, pm_message_t state)
1139−{
1140−#ifdef CONFIG_PM
1141− struct max3107_port *s = dev_get_drvdata(&spi->dev);
1142−
1143− pr_debug("enter suspend\n");
1144−
1145− /* Suspend UART port */
1146− uart_suspend_port(&max3107_uart_driver, &s->port);
1147−
1148− /* Go to suspend mode */
1149− if (s->pdata->hw_suspend)
1150− s->pdata->hw_suspend(s, 1);
1151−#endif /* CONFIG_PM */
1152− return 0;
1153−}
1154−EXPORT_SYMBOL_GPL(max3107_suspend);
1155−
1156−/* Driver resume function */
1157−int max3107_resume(struct spi_device *spi)
1158−{
1159−#ifdef CONFIG_PM
1160− struct max3107_port *s = dev_get_drvdata(&spi->dev);
1161−
1162− pr_debug("enter resume\n");
1163−
1164− /* Resume from suspend */
1165− if (s->pdata->hw_suspend)
1166− s->pdata->hw_suspend(s, 0);
1167−
1168− /* Resume UART port */
1169− uart_resume_port(&max3107_uart_driver, &s->port);
1170−#endif /* CONFIG_PM */
1171− return 0;
1172−}
1173−EXPORT_SYMBOL_GPL(max3107_resume);
1174−
1175−static int max3107_probe_generic(struct spi_device *spi)
1176−{
1177− return max3107_probe(spi, &generic_plat_data);
1178−}
1179−
1180−/* Spi driver data */
1181−static struct spi_driver max3107_driver = {
1182− .driver = {
1183− .name = "max3107",
1184− .owner = THIS_MODULE,
1185− },
1186− .probe = max3107_probe_generic,
1187− .remove = __devexit_p(max3107_remove),
1188− .suspend = max3107_suspend,
1189− .resume = max3107_resume,
1190−};
1191−
1192−/* Driver init function */
1193−static int __init max3107_init(void)
1194−{
1195− pr_info("enter max3107 init\n");
1196− return spi_register_driver(&max3107_driver);
1197−}
1198−
1199−/* Driver exit function */
1200−static void __exit max3107_exit(void)
1201−{
1202− pr_info("enter max3107 exit\n");
1203− /* Unregister UART driver */
1204− if (driver_registered)
1205− uart_unregister_driver(&max3107_uart_driver);
1206− spi_unregister_driver(&max3107_driver);
1207−}
1208−
1209−module_init(max3107_init);
1210−module_exit(max3107_exit);
1211−
1212−MODULE_DESCRIPTION("MAX3107 driver");
1213−MODULE_AUTHOR("Aavamobile");
1214−MODULE_ALIAS("spi:max3107");
1215−MODULE_LICENSE("GPL v2");
drivers/tty/serial/max3107.h+0−441
@@ -1,441 +0,0 @@
1−/*
2− * max3107.h - spi uart protocol driver header for Maxim 3107
3− *
4− * Copyright (C) Aavamobile 2009
5− * Based on serial_max3100.h by Christian Pellegrin
6− *
7− * This program is free software; you can redistribute it and/or modify
8− * it under the terms of the GNU General Public License as published by
9− * the Free Software Foundation; either version 2 of the License, or
10− * (at your option) any later version.
11− */
12−
13−#ifndef _MAX3107_H
14−#define _MAX3107_H
15−
16−/* Serial error status definitions */
17−#define MAX3107_PARITY_ERROR 1
18−#define MAX3107_FRAME_ERROR 2
19−#define MAX3107_OVERRUN_ERROR 4
20−#define MAX3107_ALL_ERRORS (MAX3107_PARITY_ERROR | \
21− MAX3107_FRAME_ERROR | \
22− MAX3107_OVERRUN_ERROR)
23−
24−/* GPIO definitions */
25−#define MAX3107_GPIO_BASE 88
26−#define MAX3107_GPIO_COUNT 4
27−
28−
29−/* GPIO connected to chip's reset pin */
30−#define MAX3107_RESET_GPIO 87
31−
32−
33−/* Chip reset delay */
34−#define MAX3107_RESET_DELAY 10
35−
36−/* Chip wakeup delay */
37−#define MAX3107_WAKEUP_DELAY 50
38−
39−
40−/* Sleep mode definitions */
41−#define MAX3107_DISABLE_FORCED_SLEEP 0
42−#define MAX3107_ENABLE_FORCED_SLEEP 1
43−#define MAX3107_DISABLE_AUTOSLEEP 2
44−#define MAX3107_ENABLE_AUTOSLEEP 3
45−
46−
47−/* Definitions for register access with SPI transfers
48− *
49− * SPI transfer format:
50− *
51− * Master to slave bits xzzzzzzzyyyyyyyy
52− * Slave to master bits aaaaaaaabbbbbbbb
53− *
54− * where:
55− * x = 0 for reads, 1 for writes
56− * z = register address
57− * y = new register value if write, 0 if read
58− * a = unspecified
59− * b = register value if read, unspecified if write
60− */
61−
62−/* SPI speed */
63−#define MAX3107_SPI_SPEED (3125000 * 2)
64−
65−/* Write bit */
66−#define MAX3107_WRITE_BIT (1 << 15)
67−
68−/* SPI TX data mask */
69−#define MAX3107_SPI_RX_DATA_MASK (0x00ff)
70−
71−/* SPI RX data mask */
72−#define MAX3107_SPI_TX_DATA_MASK (0x00ff)
73−
74−/* Register access masks */
75−#define MAX3107_RHR_REG (0x0000) /* RX FIFO */
76−#define MAX3107_THR_REG (0x0000) /* TX FIFO */
77−#define MAX3107_IRQEN_REG (0x0100) /* IRQ enable */
78−#define MAX3107_IRQSTS_REG (0x0200) /* IRQ status */
79−#define MAX3107_LSR_IRQEN_REG (0x0300) /* LSR IRQ enable */
80−#define MAX3107_LSR_IRQSTS_REG (0x0400) /* LSR IRQ status */
81−#define MAX3107_SPCHR_IRQEN_REG (0x0500) /* Special char IRQ enable */
82−#define MAX3107_SPCHR_IRQSTS_REG (0x0600) /* Special char IRQ status */
83−#define MAX3107_STS_IRQEN_REG (0x0700) /* Status IRQ enable */
84−#define MAX3107_STS_IRQSTS_REG (0x0800) /* Status IRQ status */
85−#define MAX3107_MODE1_REG (0x0900) /* MODE1 */
86−#define MAX3107_MODE2_REG (0x0a00) /* MODE2 */
87−#define MAX3107_LCR_REG (0x0b00) /* LCR */
88−#define MAX3107_RXTO_REG (0x0c00) /* RX timeout */
89−#define MAX3107_HDPIXDELAY_REG (0x0d00) /* Auto transceiver delays */
90−#define MAX3107_IRDA_REG (0x0e00) /* IRDA settings */
91−#define MAX3107_FLOWLVL_REG (0x0f00) /* Flow control levels */
92−#define MAX3107_FIFOTRIGLVL_REG (0x1000) /* FIFO IRQ trigger levels */
93−#define MAX3107_TXFIFOLVL_REG (0x1100) /* TX FIFO level */
94−#define MAX3107_RXFIFOLVL_REG (0x1200) /* RX FIFO level */
95−#define MAX3107_FLOWCTRL_REG (0x1300) /* Flow control */
96−#define MAX3107_XON1_REG (0x1400) /* XON1 character */
97−#define MAX3107_XON2_REG (0x1500) /* XON2 character */
98−#define MAX3107_XOFF1_REG (0x1600) /* XOFF1 character */
99−#define MAX3107_XOFF2_REG (0x1700) /* XOFF2 character */
100−#define MAX3107_GPIOCFG_REG (0x1800) /* GPIO config */
101−#define MAX3107_GPIODATA_REG (0x1900) /* GPIO data */
102−#define MAX3107_PLLCFG_REG (0x1a00) /* PLL config */
103−#define MAX3107_BRGCFG_REG (0x1b00) /* Baud rate generator conf */
104−#define MAX3107_BRGDIVLSB_REG (0x1c00) /* Baud rate divisor LSB */
105−#define MAX3107_BRGDIVMSB_REG (0x1d00) /* Baud rate divisor MSB */
106−#define MAX3107_CLKSRC_REG (0x1e00) /* Clock source */
107−#define MAX3107_REVID_REG (0x1f00) /* Revision identification */
108−
109−/* IRQ register bits */
110−#define MAX3107_IRQ_LSR_BIT (1 << 0) /* LSR interrupt */
111−#define MAX3107_IRQ_SPCHR_BIT (1 << 1) /* Special char interrupt */
112−#define MAX3107_IRQ_STS_BIT (1 << 2) /* Status interrupt */
113−#define MAX3107_IRQ_RXFIFO_BIT (1 << 3) /* RX FIFO interrupt */
114−#define MAX3107_IRQ_TXFIFO_BIT (1 << 4) /* TX FIFO interrupt */
115−#define MAX3107_IRQ_TXEMPTY_BIT (1 << 5) /* TX FIFO empty interrupt */
116−#define MAX3107_IRQ_RXEMPTY_BIT (1 << 6) /* RX FIFO empty interrupt */
117−#define MAX3107_IRQ_CTS_BIT (1 << 7) /* CTS interrupt */
118−
119−/* LSR register bits */
120−#define MAX3107_LSR_RXTO_BIT (1 << 0) /* RX timeout */
121−#define MAX3107_LSR_RXOVR_BIT (1 << 1) /* RX overrun */
122−#define MAX3107_LSR_RXPAR_BIT (1 << 2) /* RX parity error */
123−#define MAX3107_LSR_FRERR_BIT (1 << 3) /* Frame error */
124−#define MAX3107_LSR_RXBRK_BIT (1 << 4) /* RX break */
125−#define MAX3107_LSR_RXNOISE_BIT (1 << 5) /* RX noise */
126−#define MAX3107_LSR_UNDEF6_BIT (1 << 6) /* Undefined/not used */
127−#define MAX3107_LSR_CTS_BIT (1 << 7) /* CTS pin state */
128−
129−/* Special character register bits */
130−#define MAX3107_SPCHR_XON1_BIT (1 << 0) /* XON1 character */
131−#define MAX3107_SPCHR_XON2_BIT (1 << 1) /* XON2 character */
132−#define MAX3107_SPCHR_XOFF1_BIT (1 << 2) /* XOFF1 character */
133−#define MAX3107_SPCHR_XOFF2_BIT (1 << 3) /* XOFF2 character */
134−#define MAX3107_SPCHR_BREAK_BIT (1 << 4) /* RX break */
135−#define MAX3107_SPCHR_MULTIDROP_BIT (1 << 5) /* 9-bit multidrop addr char */
136−#define MAX3107_SPCHR_UNDEF6_BIT (1 << 6) /* Undefined/not used */
137−#define MAX3107_SPCHR_UNDEF7_BIT (1 << 7) /* Undefined/not used */
138−
139−/* Status register bits */
140−#define MAX3107_STS_GPIO0_BIT (1 << 0) /* GPIO 0 interrupt */
141−#define MAX3107_STS_GPIO1_BIT (1 << 1) /* GPIO 1 interrupt */
142−#define MAX3107_STS_GPIO2_BIT (1 << 2) /* GPIO 2 interrupt */
143−#define MAX3107_STS_GPIO3_BIT (1 << 3) /* GPIO 3 interrupt */
144−#define MAX3107_STS_UNDEF4_BIT (1 << 4) /* Undefined/not used */
145−#define MAX3107_STS_CLKREADY_BIT (1 << 5) /* Clock ready */
146−#define MAX3107_STS_SLEEP_BIT (1 << 6) /* Sleep interrupt */
147−#define MAX3107_STS_UNDEF7_BIT (1 << 7) /* Undefined/not used */
148−
149−/* MODE1 register bits */
150−#define MAX3107_MODE1_RXDIS_BIT (1 << 0) /* RX disable */
151−#define MAX3107_MODE1_TXDIS_BIT (1 << 1) /* TX disable */
152−#define MAX3107_MODE1_TXHIZ_BIT (1 << 2) /* TX pin three-state */
153−#define MAX3107_MODE1_RTSHIZ_BIT (1 << 3) /* RTS pin three-state */
154−#define MAX3107_MODE1_TRNSCVCTRL_BIT (1 << 4) /* Transceiver ctrl enable */
155−#define MAX3107_MODE1_FORCESLEEP_BIT (1 << 5) /* Force sleep mode */
156−#define MAX3107_MODE1_AUTOSLEEP_BIT (1 << 6) /* Auto sleep enable */
157−#define MAX3107_MODE1_IRQSEL_BIT (1 << 7) /* IRQ pin enable */
158−
159−/* MODE2 register bits */
160−#define MAX3107_MODE2_RST_BIT (1 << 0) /* Chip reset */
161−#define MAX3107_MODE2_FIFORST_BIT (1 << 1) /* FIFO reset */
162−#define MAX3107_MODE2_RXTRIGINV_BIT (1 << 2) /* RX FIFO INT invert */
163−#define MAX3107_MODE2_RXEMPTINV_BIT (1 << 3) /* RX FIFO empty INT invert */
164−#define MAX3107_MODE2_SPCHR_BIT (1 << 4) /* Special chr detect enable */
165−#define MAX3107_MODE2_LOOPBACK_BIT (1 << 5) /* Internal loopback enable */
166−#define MAX3107_MODE2_MULTIDROP_BIT (1 << 6) /* 9-bit multidrop enable */
167−#define MAX3107_MODE2_ECHOSUPR_BIT (1 << 7) /* ECHO suppression enable */
168−
169−/* LCR register bits */
170−#define MAX3107_LCR_LENGTH0_BIT (1 << 0) /* Word length bit 0 */
171−#define MAX3107_LCR_LENGTH1_BIT (1 << 1) /* Word length bit 1
172− *
173− * Word length bits table:
174− * 00 -> 5 bit words
175− * 01 -> 6 bit words
176− * 10 -> 7 bit words
177− * 11 -> 8 bit words
178− */
179−#define MAX3107_LCR_STOPLEN_BIT (1 << 2) /* STOP length bit
180− *
181− * STOP length bit table:
182− * 0 -> 1 stop bit
183− * 1 -> 1-1.5 stop bits if
184− * word length is 5,
185− * 2 stop bits otherwise
186− */
187−#define MAX3107_LCR_PARITY_BIT (1 << 3) /* Parity bit enable */
188−#define MAX3107_LCR_EVENPARITY_BIT (1 << 4) /* Even parity bit enable */
189−#define MAX3107_LCR_FORCEPARITY_BIT (1 << 5) /* 9-bit multidrop parity */
190−#define MAX3107_LCR_TXBREAK_BIT (1 << 6) /* TX break enable */
191−#define MAX3107_LCR_RTS_BIT (1 << 7) /* RTS pin control */
192−#define MAX3107_LCR_WORD_LEN_5 (0x0000)
193−#define MAX3107_LCR_WORD_LEN_6 (0x0001)
194−#define MAX3107_LCR_WORD_LEN_7 (0x0002)
195−#define MAX3107_LCR_WORD_LEN_8 (0x0003)
196−
197−
198−/* IRDA register bits */
199−#define MAX3107_IRDA_IRDAEN_BIT (1 << 0) /* IRDA mode enable */
200−#define MAX3107_IRDA_SIR_BIT (1 << 1) /* SIR mode enable */
201−#define MAX3107_IRDA_SHORTIR_BIT (1 << 2) /* Short SIR mode enable */
202−#define MAX3107_IRDA_MIR_BIT (1 << 3) /* MIR mode enable */
203−#define MAX3107_IRDA_RXINV_BIT (1 << 4) /* RX logic inversion enable */
204−#define MAX3107_IRDA_TXINV_BIT (1 << 5) /* TX logic inversion enable */
205−#define MAX3107_IRDA_UNDEF6_BIT (1 << 6) /* Undefined/not used */
206−#define MAX3107_IRDA_UNDEF7_BIT (1 << 7) /* Undefined/not used */
207−
208−/* Flow control trigger level register masks */
209−#define MAX3107_FLOWLVL_HALT_MASK (0x000f) /* Flow control halt level */
210−#define MAX3107_FLOWLVL_RES_MASK (0x00f0) /* Flow control resume level */
211−#define MAX3107_FLOWLVL_HALT(words) ((words/8) & 0x000f)
212−#define MAX3107_FLOWLVL_RES(words) (((words/8) & 0x000f) << 4)
213−
214−/* FIFO interrupt trigger level register masks */
215−#define MAX3107_FIFOTRIGLVL_TX_MASK (0x000f) /* TX FIFO trigger level */
216−#define MAX3107_FIFOTRIGLVL_RX_MASK (0x00f0) /* RX FIFO trigger level */
217−#define MAX3107_FIFOTRIGLVL_TX(words) ((words/8) & 0x000f)
218−#define MAX3107_FIFOTRIGLVL_RX(words) (((words/8) & 0x000f) << 4)
219−
220−/* Flow control register bits */
221−#define MAX3107_FLOWCTRL_AUTORTS_BIT (1 << 0) /* Auto RTS flow ctrl enable */
222−#define MAX3107_FLOWCTRL_AUTOCTS_BIT (1 << 1) /* Auto CTS flow ctrl enable */
223−#define MAX3107_FLOWCTRL_GPIADDR_BIT (1 << 2) /* Enables that GPIO inputs
224− * are used in conjunction with
225− * XOFF2 for definition of
226− * special character */
227−#define MAX3107_FLOWCTRL_SWFLOWEN_BIT (1 << 3) /* Auto SW flow ctrl enable */
228−#define MAX3107_FLOWCTRL_SWFLOW0_BIT (1 << 4) /* SWFLOW bit 0 */
229−#define MAX3107_FLOWCTRL_SWFLOW1_BIT (1 << 5) /* SWFLOW bit 1
230− *
231− * SWFLOW bits 1 & 0 table:
232− * 00 -> no transmitter flow
233− * control
234− * 01 -> receiver compares
235− * XON2 and XOFF2
236− * and controls
237− * transmitter
238− * 10 -> receiver compares
239− * XON1 and XOFF1
240− * and controls
241− * transmitter
242− * 11 -> receiver compares
243− * XON1, XON2, XOFF1 and
244− * XOFF2 and controls
245− * transmitter
246− */
247−#define MAX3107_FLOWCTRL_SWFLOW2_BIT (1 << 6) /* SWFLOW bit 2 */
248−#define MAX3107_FLOWCTRL_SWFLOW3_BIT (1 << 7) /* SWFLOW bit 3
249− *
250− * SWFLOW bits 3 & 2 table:
251− * 00 -> no received flow
252− * control
253− * 01 -> transmitter generates
254− * XON2 and XOFF2
255− * 10 -> transmitter generates
256− * XON1 and XOFF1
257− * 11 -> transmitter generates
258− * XON1, XON2, XOFF1 and
259− * XOFF2
260− */
261−
262−/* GPIO configuration register bits */
263−#define MAX3107_GPIOCFG_GP0OUT_BIT (1 << 0) /* GPIO 0 output enable */
264−#define MAX3107_GPIOCFG_GP1OUT_BIT (1 << 1) /* GPIO 1 output enable */
265−#define MAX3107_GPIOCFG_GP2OUT_BIT (1 << 2) /* GPIO 2 output enable */
266−#define MAX3107_GPIOCFG_GP3OUT_BIT (1 << 3) /* GPIO 3 output enable */
267−#define MAX3107_GPIOCFG_GP0OD_BIT (1 << 4) /* GPIO 0 open-drain enable */
268−#define MAX3107_GPIOCFG_GP1OD_BIT (1 << 5) /* GPIO 1 open-drain enable */
269−#define MAX3107_GPIOCFG_GP2OD_BIT (1 << 6) /* GPIO 2 open-drain enable */
270−#define MAX3107_GPIOCFG_GP3OD_BIT (1 << 7) /* GPIO 3 open-drain enable */
271−
272−/* GPIO DATA register bits */
273−#define MAX3107_GPIODATA_GP0OUT_BIT (1 << 0) /* GPIO 0 output value */
274−#define MAX3107_GPIODATA_GP1OUT_BIT (1 << 1) /* GPIO 1 output value */
275−#define MAX3107_GPIODATA_GP2OUT_BIT (1 << 2) /* GPIO 2 output value */
276−#define MAX3107_GPIODATA_GP3OUT_BIT (1 << 3) /* GPIO 3 output value */
277−#define MAX3107_GPIODATA_GP0IN_BIT (1 << 4) /* GPIO 0 input value */
278−#define MAX3107_GPIODATA_GP1IN_BIT (1 << 5) /* GPIO 1 input value */
279−#define MAX3107_GPIODATA_GP2IN_BIT (1 << 6) /* GPIO 2 input value */
280−#define MAX3107_GPIODATA_GP3IN_BIT (1 << 7) /* GPIO 3 input value */
281−
282−/* PLL configuration register masks */
283−#define MAX3107_PLLCFG_PREDIV_MASK (0x003f) /* PLL predivision value */
284−#define MAX3107_PLLCFG_PLLFACTOR_MASK (0x00c0) /* PLL multiplication factor */
285−
286−/* Baud rate generator configuration register masks and bits */
287−#define MAX3107_BRGCFG_FRACT_MASK (0x000f) /* Fractional portion of
288− * Baud rate generator divisor
289− */
290−#define MAX3107_BRGCFG_2XMODE_BIT (1 << 4) /* Double baud rate */
291−#define MAX3107_BRGCFG_4XMODE_BIT (1 << 5) /* Quadruple baud rate */
292−#define MAX3107_BRGCFG_UNDEF6_BIT (1 << 6) /* Undefined/not used */
293−#define MAX3107_BRGCFG_UNDEF7_BIT (1 << 7) /* Undefined/not used */
294−
295−/* Clock source register bits */
296−#define MAX3107_CLKSRC_INTOSC_BIT (1 << 0) /* Internal osc enable */
297−#define MAX3107_CLKSRC_CRYST_BIT (1 << 1) /* Crystal osc enable */
298−#define MAX3107_CLKSRC_PLL_BIT (1 << 2) /* PLL enable */
299−#define MAX3107_CLKSRC_PLLBYP_BIT (1 << 3) /* PLL bypass */
300−#define MAX3107_CLKSRC_EXTCLK_BIT (1 << 4) /* External clock enable */
301−#define MAX3107_CLKSRC_UNDEF5_BIT (1 << 5) /* Undefined/not used */
302−#define MAX3107_CLKSRC_UNDEF6_BIT (1 << 6) /* Undefined/not used */
303−#define MAX3107_CLKSRC_CLK2RTS_BIT (1 << 7) /* Baud clk to RTS pin */
304−
305−
306−/* HW definitions */
307−#define MAX3107_RX_FIFO_SIZE 128
308−#define MAX3107_TX_FIFO_SIZE 128
309−#define MAX3107_REVID1 0x00a0
310−#define MAX3107_REVID2 0x00a1
311−
312−
313−/* Baud rate generator configuration values for external clock 13MHz */
314−#define MAX3107_BRG13_B300 (0x0A9400 | 0x05)
315−#define MAX3107_BRG13_B600 (0x054A00 | 0x03)
316−#define MAX3107_BRG13_B1200 (0x02A500 | 0x01)
317−#define MAX3107_BRG13_B2400 (0x015200 | 0x09)
318−#define MAX3107_BRG13_B4800 (0x00A900 | 0x04)
319−#define MAX3107_BRG13_B9600 (0x005400 | 0x0A)
320−#define MAX3107_BRG13_B19200 (0x002A00 | 0x05)
321−#define MAX3107_BRG13_B38400 (0x001500 | 0x03)
322−#define MAX3107_BRG13_B57600 (0x000E00 | 0x02)
323−#define MAX3107_BRG13_B115200 (0x000700 | 0x01)
324−#define MAX3107_BRG13_B230400 (0x000300 | 0x08)
325−#define MAX3107_BRG13_B460800 (0x000100 | 0x0c)
326−#define MAX3107_BRG13_B921600 (0x000100 | 0x1c)
327−
328−/* Baud rate generator configuration values for external clock 26MHz */
329−#define MAX3107_BRG26_B300 (0x152800 | 0x0A)
330−#define MAX3107_BRG26_B600 (0x0A9400 | 0x05)
331−#define MAX3107_BRG26_B1200 (0x054A00 | 0x03)
332−#define MAX3107_BRG26_B2400 (0x02A500 | 0x01)
333−#define MAX3107_BRG26_B4800 (0x015200 | 0x09)
334−#define MAX3107_BRG26_B9600 (0x00A900 | 0x04)
335−#define MAX3107_BRG26_B19200 (0x005400 | 0x0A)
336−#define MAX3107_BRG26_B38400 (0x002A00 | 0x05)
337−#define MAX3107_BRG26_B57600 (0x001C00 | 0x03)
338−#define MAX3107_BRG26_B115200 (0x000E00 | 0x02)
339−#define MAX3107_BRG26_B230400 (0x000700 | 0x01)
340−#define MAX3107_BRG26_B460800 (0x000300 | 0x08)
341−#define MAX3107_BRG26_B921600 (0x000100 | 0x0C)
342−
343−/* Baud rate generator configuration values for internal clock */
344−#define MAX3107_BRG13_IB300 (0x008000 | 0x00)
345−#define MAX3107_BRG13_IB600 (0x004000 | 0x00)
346−#define MAX3107_BRG13_IB1200 (0x002000 | 0x00)
347−#define MAX3107_BRG13_IB2400 (0x001000 | 0x00)
348−#define MAX3107_BRG13_IB4800 (0x000800 | 0x00)
349−#define MAX3107_BRG13_IB9600 (0x000400 | 0x00)
350−#define MAX3107_BRG13_IB19200 (0x000200 | 0x00)
351−#define MAX3107_BRG13_IB38400 (0x000100 | 0x00)
352−#define MAX3107_BRG13_IB57600 (0x000000 | 0x0B)
353−#define MAX3107_BRG13_IB115200 (0x000000 | 0x05)
354−#define MAX3107_BRG13_IB230400 (0x000000 | 0x03)
355−#define MAX3107_BRG13_IB460800 (0x000000 | 0x00)
356−#define MAX3107_BRG13_IB921600 (0x000000 | 0x00)
357−
358−
359−struct baud_table {
360− int baud;
361− u32 new_brg;
362−};
363−
364−struct max3107_port {
365− /* UART port structure */
366− struct uart_port port;
367−
368− /* SPI device structure */
369− struct spi_device *spi;
370−
371−#if defined(CONFIG_GPIOLIB)
372− /* GPIO chip structure */
373− struct gpio_chip chip;
374−#endif
375−
376− /* Workqueue that does all the magic */
377− struct workqueue_struct *workqueue;
378− struct work_struct work;
379−
380− /* Lock for shared data */
381− spinlock_t data_lock;
382−
383− /* Device configuration */
384− int ext_clk; /* 1 if external clock used */
385− int loopback; /* Current loopback mode state */
386− int baud; /* Current baud rate */
387−
388− /* State flags */
389− int suspended; /* Indicates suspend mode */
390− int tx_fifo_empty; /* Flag for TX FIFO state */
391− int rx_enabled; /* Flag for receiver state */
392− int tx_enabled; /* Flag for transmitter state */
393−
394− u16 irqen_reg; /* Current IRQ enable register value */
395− /* Shared data */
396− u16 mode1_reg; /* Current mode1 register value*/
397− int mode1_commit; /* Flag for setting new mode1 register value */
398− u16 lcr_reg; /* Current LCR register value */
399− int lcr_commit; /* Flag for setting new LCR register value */
400− u32 brg_cfg; /* Current Baud rate generator config */
401− int brg_commit; /* Flag for setting new baud rate generator
402− * config
403− */
404− struct baud_table *baud_tbl;
405− int handle_irq; /* Indicates that IRQ should be handled */
406−
407− /* Rx buffer and str*/
408− u16 *rxbuf;
409− u8 *rxstr;
410− /* Tx buffer*/
411− u16 *txbuf;
412−
413− struct max3107_plat *pdata; /* Platform data */
414−};
415−
416−/* Platform data structure */
417−struct max3107_plat {
418− /* Loopback mode enable */
419− int loopback;
420− /* External clock enable */
421− int ext_clk;
422− /* Called during the register initialisation */
423− void (*init)(struct max3107_port *s);
424− /* Called when the port is found and configured */
425− int (*configure)(struct max3107_port *s);
426− /* HW suspend function */
427− void (*hw_suspend) (struct max3107_port *s, int suspend);
428− /* Polling mode enable */
429− int polled_mode;
430− /* Polling period if polling mode enabled */
431− int poll_time;
432−};
433−
434−extern int max3107_rw(struct max3107_port *s, u8 *tx, u8 *rx, int len);
435−extern void max3107_hw_susp(struct max3107_port *s, int suspend);
436−extern int max3107_probe(struct spi_device *spi, struct max3107_plat *pdata);
437−extern int max3107_remove(struct spi_device *spi);
438−extern int max3107_suspend(struct spi_device *spi, pm_message_t state);
439−extern int max3107_resume(struct spi_device *spi);
440−
441−#endif /* _LINUX_SERIAL_MAX3107_H */
drivers/tty/serial/max310x.c+1260−0
@@ -0,0 +1,1260 @@
1+/*
2+ * Maxim (Dallas) MAX3107/8 serial driver
3+ *
4+ * Copyright (C) 2012 Alexander Shiyan <shc_work@mail.ru>
5+ *
6+ * Based on max3100.c, by Christian Pellegrin <chripell@evolware.org>
7+ * Based on max3110.c, by Feng Tang <feng.tang@intel.com>
8+ * Based on max3107.c, by Aavamobile
9+ *
10+ * This program is free software; you can redistribute it and/or modify
11+ * it under the terms of the GNU General Public License as published by
12+ * the Free Software Foundation; either version 2 of the License, or
13+ * (at your option) any later version.
14+ */
15+
16+/* TODO: MAX3109 support (Dual) */
17+/* TODO: MAX14830 support (Quad) */
18+
19+#include <linux/module.h>
20+#include <linux/device.h>
21+#include <linux/serial_core.h>
22+#include <linux/serial.h>
23+#include <linux/tty.h>
24+#include <linux/tty_flip.h>
25+#include <linux/regmap.h>
26+#include <linux/gpio.h>
27+#include <linux/spi/spi.h>
28+#include <linux/platform_data/max310x.h>
29+
30+#define MAX310X_MAJOR 204
31+#define MAX310X_MINOR 209
32+
33+/* MAX310X register definitions */
34+#define MAX310X_RHR_REG (0x00) /* RX FIFO */
35+#define MAX310X_THR_REG (0x00) /* TX FIFO */
36+#define MAX310X_IRQEN_REG (0x01) /* IRQ enable */
37+#define MAX310X_IRQSTS_REG (0x02) /* IRQ status */
38+#define MAX310X_LSR_IRQEN_REG (0x03) /* LSR IRQ enable */
39+#define MAX310X_LSR_IRQSTS_REG (0x04) /* LSR IRQ status */
40+#define MAX310X_SPCHR_IRQEN_REG (0x05) /* Special char IRQ enable */
41+#define MAX310X_SPCHR_IRQSTS_REG (0x06) /* Special char IRQ status */
42+#define MAX310X_STS_IRQEN_REG (0x07) /* Status IRQ enable */
43+#define MAX310X_STS_IRQSTS_REG (0x08) /* Status IRQ status */
44+#define MAX310X_MODE1_REG (0x09) /* MODE1 */
45+#define MAX310X_MODE2_REG (0x0a) /* MODE2 */
46+#define MAX310X_LCR_REG (0x0b) /* LCR */
47+#define MAX310X_RXTO_REG (0x0c) /* RX timeout */
48+#define MAX310X_HDPIXDELAY_REG (0x0d) /* Auto transceiver delays */
49+#define MAX310X_IRDA_REG (0x0e) /* IRDA settings */
50+#define MAX310X_FLOWLVL_REG (0x0f) /* Flow control levels */
51+#define MAX310X_FIFOTRIGLVL_REG (0x10) /* FIFO IRQ trigger levels */
52+#define MAX310X_TXFIFOLVL_REG (0x11) /* TX FIFO level */
53+#define MAX310X_RXFIFOLVL_REG (0x12) /* RX FIFO level */
54+#define MAX310X_FLOWCTRL_REG (0x13) /* Flow control */
55+#define MAX310X_XON1_REG (0x14) /* XON1 character */
56+#define MAX310X_XON2_REG (0x15) /* XON2 character */
57+#define MAX310X_XOFF1_REG (0x16) /* XOFF1 character */
58+#define MAX310X_XOFF2_REG (0x17) /* XOFF2 character */
59+#define MAX310X_GPIOCFG_REG (0x18) /* GPIO config */
60+#define MAX310X_GPIODATA_REG (0x19) /* GPIO data */
61+#define MAX310X_PLLCFG_REG (0x1a) /* PLL config */
62+#define MAX310X_BRGCFG_REG (0x1b) /* Baud rate generator conf */
63+#define MAX310X_BRGDIVLSB_REG (0x1c) /* Baud rate divisor LSB */
64+#define MAX310X_BRGDIVMSB_REG (0x1d) /* Baud rate divisor MSB */
65+#define MAX310X_CLKSRC_REG (0x1e) /* Clock source */
66+/* Only present in MAX3107 */
67+#define MAX3107_REVID_REG (0x1f) /* Revision identification */
68+
69+/* IRQ register bits */
70+#define MAX310X_IRQ_LSR_BIT (1 << 0) /* LSR interrupt */
71+#define MAX310X_IRQ_SPCHR_BIT (1 << 1) /* Special char interrupt */
72+#define MAX310X_IRQ_STS_BIT (1 << 2) /* Status interrupt */
73+#define MAX310X_IRQ_RXFIFO_BIT (1 << 3) /* RX FIFO interrupt */
74+#define MAX310X_IRQ_TXFIFO_BIT (1 << 4) /* TX FIFO interrupt */
75+#define MAX310X_IRQ_TXEMPTY_BIT (1 << 5) /* TX FIFO empty interrupt */
76+#define MAX310X_IRQ_RXEMPTY_BIT (1 << 6) /* RX FIFO empty interrupt */
77+#define MAX310X_IRQ_CTS_BIT (1 << 7) /* CTS interrupt */
78+
79+/* LSR register bits */
80+#define MAX310X_LSR_RXTO_BIT (1 << 0) /* RX timeout */
81+#define MAX310X_LSR_RXOVR_BIT (1 << 1) /* RX overrun */
82+#define MAX310X_LSR_RXPAR_BIT (1 << 2) /* RX parity error */
83+#define MAX310X_LSR_FRERR_BIT (1 << 3) /* Frame error */
84+#define MAX310X_LSR_RXBRK_BIT (1 << 4) /* RX break */
85+#define MAX310X_LSR_RXNOISE_BIT (1 << 5) /* RX noise */
86+#define MAX310X_LSR_CTS_BIT (1 << 7) /* CTS pin state */
87+
88+/* Special character register bits */
89+#define MAX310X_SPCHR_XON1_BIT (1 << 0) /* XON1 character */
90+#define MAX310X_SPCHR_XON2_BIT (1 << 1) /* XON2 character */
91+#define MAX310X_SPCHR_XOFF1_BIT (1 << 2) /* XOFF1 character */
92+#define MAX310X_SPCHR_XOFF2_BIT (1 << 3) /* XOFF2 character */
93+#define MAX310X_SPCHR_BREAK_BIT (1 << 4) /* RX break */
94+#define MAX310X_SPCHR_MULTIDROP_BIT (1 << 5) /* 9-bit multidrop addr char */
95+
96+/* Status register bits */
97+#define MAX310X_STS_GPIO0_BIT (1 << 0) /* GPIO 0 interrupt */
98+#define MAX310X_STS_GPIO1_BIT (1 << 1) /* GPIO 1 interrupt */
99+#define MAX310X_STS_GPIO2_BIT (1 << 2) /* GPIO 2 interrupt */
100+#define MAX310X_STS_GPIO3_BIT (1 << 3) /* GPIO 3 interrupt */
101+#define MAX310X_STS_CLKREADY_BIT (1 << 5) /* Clock ready */
102+#define MAX310X_STS_SLEEP_BIT (1 << 6) /* Sleep interrupt */
103+
104+/* MODE1 register bits */
105+#define MAX310X_MODE1_RXDIS_BIT (1 << 0) /* RX disable */
106+#define MAX310X_MODE1_TXDIS_BIT (1 << 1) /* TX disable */
107+#define MAX310X_MODE1_TXHIZ_BIT (1 << 2) /* TX pin three-state */
108+#define MAX310X_MODE1_RTSHIZ_BIT (1 << 3) /* RTS pin three-state */
109+#define MAX310X_MODE1_TRNSCVCTRL_BIT (1 << 4) /* Transceiver ctrl enable */
110+#define MAX310X_MODE1_FORCESLEEP_BIT (1 << 5) /* Force sleep mode */
111+#define MAX310X_MODE1_AUTOSLEEP_BIT (1 << 6) /* Auto sleep enable */
112+#define MAX310X_MODE1_IRQSEL_BIT (1 << 7) /* IRQ pin enable */
113+
114+/* MODE2 register bits */
115+#define MAX310X_MODE2_RST_BIT (1 << 0) /* Chip reset */
116+#define MAX310X_MODE2_FIFORST_BIT (1 << 1) /* FIFO reset */
117+#define MAX310X_MODE2_RXTRIGINV_BIT (1 << 2) /* RX FIFO INT invert */
118+#define MAX310X_MODE2_RXEMPTINV_BIT (1 << 3) /* RX FIFO empty INT invert */
119+#define MAX310X_MODE2_SPCHR_BIT (1 << 4) /* Special chr detect enable */
120+#define MAX310X_MODE2_LOOPBACK_BIT (1 << 5) /* Internal loopback enable */
121+#define MAX310X_MODE2_MULTIDROP_BIT (1 << 6) /* 9-bit multidrop enable */
122+#define MAX310X_MODE2_ECHOSUPR_BIT (1 << 7) /* ECHO suppression enable */
123+
124+/* LCR register bits */
125+#define MAX310X_LCR_LENGTH0_BIT (1 << 0) /* Word length bit 0 */
126+#define MAX310X_LCR_LENGTH1_BIT (1 << 1) /* Word length bit 1
127+ *
128+ * Word length bits table:
129+ * 00 -> 5 bit words
130+ * 01 -> 6 bit words
131+ * 10 -> 7 bit words
132+ * 11 -> 8 bit words
133+ */
134+#define MAX310X_LCR_STOPLEN_BIT (1 << 2) /* STOP length bit
135+ *
136+ * STOP length bit table:
137+ * 0 -> 1 stop bit
138+ * 1 -> 1-1.5 stop bits if
139+ * word length is 5,
140+ * 2 stop bits otherwise
141+ */
142+#define MAX310X_LCR_PARITY_BIT (1 << 3) /* Parity bit enable */
143+#define MAX310X_LCR_EVENPARITY_BIT (1 << 4) /* Even parity bit enable */
144+#define MAX310X_LCR_FORCEPARITY_BIT (1 << 5) /* 9-bit multidrop parity */
145+#define MAX310X_LCR_TXBREAK_BIT (1 << 6) /* TX break enable */
146+#define MAX310X_LCR_RTS_BIT (1 << 7) /* RTS pin control */
147+#define MAX310X_LCR_WORD_LEN_5 (0x00)
148+#define MAX310X_LCR_WORD_LEN_6 (0x01)
149+#define MAX310X_LCR_WORD_LEN_7 (0x02)
150+#define MAX310X_LCR_WORD_LEN_8 (0x03)
151+
152+/* IRDA register bits */
153+#define MAX310X_IRDA_IRDAEN_BIT (1 << 0) /* IRDA mode enable */
154+#define MAX310X_IRDA_SIR_BIT (1 << 1) /* SIR mode enable */
155+#define MAX310X_IRDA_SHORTIR_BIT (1 << 2) /* Short SIR mode enable */
156+#define MAX310X_IRDA_MIR_BIT (1 << 3) /* MIR mode enable */
157+#define MAX310X_IRDA_RXINV_BIT (1 << 4) /* RX logic inversion enable */
158+#define MAX310X_IRDA_TXINV_BIT (1 << 5) /* TX logic inversion enable */
159+
160+/* Flow control trigger level register masks */
161+#define MAX310X_FLOWLVL_HALT_MASK (0x000f) /* Flow control halt level */
162+#define MAX310X_FLOWLVL_RES_MASK (0x00f0) /* Flow control resume level */
163+#define MAX310X_FLOWLVL_HALT(words) ((words / 8) & 0x0f)
164+#define MAX310X_FLOWLVL_RES(words) (((words / 8) & 0x0f) << 4)
165+
166+/* FIFO interrupt trigger level register masks */
167+#define MAX310X_FIFOTRIGLVL_TX_MASK (0x0f) /* TX FIFO trigger level */
168+#define MAX310X_FIFOTRIGLVL_RX_MASK (0xf0) /* RX FIFO trigger level */
169+#define MAX310X_FIFOTRIGLVL_TX(words) ((words / 8) & 0x0f)
170+#define MAX310X_FIFOTRIGLVL_RX(words) (((words / 8) & 0x0f) << 4)
171+
172+/* Flow control register bits */
173+#define MAX310X_FLOWCTRL_AUTORTS_BIT (1 << 0) /* Auto RTS flow ctrl enable */
174+#define MAX310X_FLOWCTRL_AUTOCTS_BIT (1 << 1) /* Auto CTS flow ctrl enable */
175+#define MAX310X_FLOWCTRL_GPIADDR_BIT (1 << 2) /* Enables that GPIO inputs
176+ * are used in conjunction with
177+ * XOFF2 for definition of
178+ * special character */
179+#define MAX310X_FLOWCTRL_SWFLOWEN_BIT (1 << 3) /* Auto SW flow ctrl enable */
180+#define MAX310X_FLOWCTRL_SWFLOW0_BIT (1 << 4) /* SWFLOW bit 0 */
181+#define MAX310X_FLOWCTRL_SWFLOW1_BIT (1 << 5) /* SWFLOW bit 1
182+ *
183+ * SWFLOW bits 1 & 0 table:
184+ * 00 -> no transmitter flow
185+ * control
186+ * 01 -> receiver compares
187+ * XON2 and XOFF2
188+ * and controls
189+ * transmitter
190+ * 10 -> receiver compares
191+ * XON1 and XOFF1
192+ * and controls
193+ * transmitter
194+ * 11 -> receiver compares
195+ * XON1, XON2, XOFF1 and
196+ * XOFF2 and controls
197+ * transmitter
198+ */
199+#define MAX310X_FLOWCTRL_SWFLOW2_BIT (1 << 6) /* SWFLOW bit 2 */
200+#define MAX310X_FLOWCTRL_SWFLOW3_BIT (1 << 7) /* SWFLOW bit 3
201+ *
202+ * SWFLOW bits 3 & 2 table:
203+ * 00 -> no received flow
204+ * control
205+ * 01 -> transmitter generates
206+ * XON2 and XOFF2
207+ * 10 -> transmitter generates
208+ * XON1 and XOFF1
209+ * 11 -> transmitter generates
210+ * XON1, XON2, XOFF1 and
211+ * XOFF2
212+ */
213+
214+/* GPIO configuration register bits */
215+#define MAX310X_GPIOCFG_GP0OUT_BIT (1 << 0) /* GPIO 0 output enable */
216+#define MAX310X_GPIOCFG_GP1OUT_BIT (1 << 1) /* GPIO 1 output enable */
217+#define MAX310X_GPIOCFG_GP2OUT_BIT (1 << 2) /* GPIO 2 output enable */
218+#define MAX310X_GPIOCFG_GP3OUT_BIT (1 << 3) /* GPIO 3 output enable */
219+#define MAX310X_GPIOCFG_GP0OD_BIT (1 << 4) /* GPIO 0 open-drain enable */
220+#define MAX310X_GPIOCFG_GP1OD_BIT (1 << 5) /* GPIO 1 open-drain enable */
221+#define MAX310X_GPIOCFG_GP2OD_BIT (1 << 6) /* GPIO 2 open-drain enable */
222+#define MAX310X_GPIOCFG_GP3OD_BIT (1 << 7) /* GPIO 3 open-drain enable */
223+
224+/* GPIO DATA register bits */
225+#define MAX310X_GPIODATA_GP0OUT_BIT (1 << 0) /* GPIO 0 output value */
226+#define MAX310X_GPIODATA_GP1OUT_BIT (1 << 1) /* GPIO 1 output value */
227+#define MAX310X_GPIODATA_GP2OUT_BIT (1 << 2) /* GPIO 2 output value */
228+#define MAX310X_GPIODATA_GP3OUT_BIT (1 << 3) /* GPIO 3 output value */
229+#define MAX310X_GPIODATA_GP0IN_BIT (1 << 4) /* GPIO 0 input value */
230+#define MAX310X_GPIODATA_GP1IN_BIT (1 << 5) /* GPIO 1 input value */
231+#define MAX310X_GPIODATA_GP2IN_BIT (1 << 6) /* GPIO 2 input value */
232+#define MAX310X_GPIODATA_GP3IN_BIT (1 << 7) /* GPIO 3 input value */
233+
234+/* PLL configuration register masks */
235+#define MAX310X_PLLCFG_PREDIV_MASK (0x3f) /* PLL predivision value */
236+#define MAX310X_PLLCFG_PLLFACTOR_MASK (0xc0) /* PLL multiplication factor */
237+
238+/* Baud rate generator configuration register bits */
239+#define MAX310X_BRGCFG_2XMODE_BIT (1 << 4) /* Double baud rate */
240+#define MAX310X_BRGCFG_4XMODE_BIT (1 << 5) /* Quadruple baud rate */
241+
242+/* Clock source register bits */
243+#define MAX310X_CLKSRC_CRYST_BIT (1 << 1) /* Crystal osc enable */
244+#define MAX310X_CLKSRC_PLL_BIT (1 << 2) /* PLL enable */
245+#define MAX310X_CLKSRC_PLLBYP_BIT (1 << 3) /* PLL bypass */
246+#define MAX310X_CLKSRC_EXTCLK_BIT (1 << 4) /* External clock enable */
247+#define MAX310X_CLKSRC_CLK2RTS_BIT (1 << 7) /* Baud clk to RTS pin */
248+
249+/* Misc definitions */
250+#define MAX310X_FIFO_SIZE (128)
251+
252+/* MAX3107 specific */
253+#define MAX3107_REV_ID (0xa0)
254+#define MAX3107_REV_MASK (0xfe)
255+
256+/* IRQ status bits definitions */
257+#define MAX310X_IRQ_TX (MAX310X_IRQ_TXFIFO_BIT | \
258+ MAX310X_IRQ_TXEMPTY_BIT)
259+#define MAX310X_IRQ_RX (MAX310X_IRQ_RXFIFO_BIT | \
260+ MAX310X_IRQ_RXEMPTY_BIT)
261+
262+/* Supported chip types */
263+enum {
264+ MAX310X_TYPE_MAX3107 = 3107,
265+ MAX310X_TYPE_MAX3108 = 3108,
266+};
267+
268+struct max310x_port {
269+ struct uart_driver uart;
270+ struct uart_port port;
271+
272+ const char *name;
273+ int uartclk;
274+
275+ unsigned int nr_gpio;
276+#ifdef CONFIG_GPIOLIB
277+ struct gpio_chip gpio;
278+#endif
279+
280+ struct regmap *regmap;
281+ struct regmap_config regcfg;
282+
283+ struct workqueue_struct *wq;
284+ struct work_struct tx_work;
285+
286+ struct mutex max310x_mutex;
287+
288+ struct max310x_pdata *pdata;
289+};
290+
291+static bool max3107_8_reg_writeable(struct device *dev, unsigned int reg)
292+{
293+ switch (reg) {
294+ case MAX310X_IRQSTS_REG:
295+ case MAX310X_LSR_IRQSTS_REG:
296+ case MAX310X_SPCHR_IRQSTS_REG:
297+ case MAX310X_STS_IRQSTS_REG:
298+ case MAX310X_TXFIFOLVL_REG:
299+ case MAX310X_RXFIFOLVL_REG:
300+ case MAX3107_REVID_REG: /* Only available on MAX3107 */
301+ return false;
302+ default:
303+ break;
304+ }
305+
306+ return true;
307+}
308+
309+static bool max310x_reg_volatile(struct device *dev, unsigned int reg)
310+{
311+ switch (reg) {
312+ case MAX310X_RHR_REG:
313+ case MAX310X_IRQSTS_REG:
314+ case MAX310X_LSR_IRQSTS_REG:
315+ case MAX310X_SPCHR_IRQSTS_REG:
316+ case MAX310X_STS_IRQSTS_REG:
317+ case MAX310X_TXFIFOLVL_REG:
318+ case MAX310X_RXFIFOLVL_REG:
319+ case MAX310X_GPIODATA_REG:
320+ return true;
321+ default:
322+ break;
323+ }
324+
325+ return false;
326+}
327+
328+static bool max310x_reg_precious(struct device *dev, unsigned int reg)
329+{
330+ switch (reg) {
331+ case MAX310X_RHR_REG:
332+ case MAX310X_IRQSTS_REG:
333+ case MAX310X_SPCHR_IRQSTS_REG:
334+ case MAX310X_STS_IRQSTS_REG:
335+ return true;
336+ default:
337+ break;
338+ }
339+
340+ return false;
341+}
342+
343+static void max310x_set_baud(struct max310x_port *s, int baud)
344+{
345+ unsigned int mode = 0, div = s->uartclk / baud;
346+
347+ if (!(div / 16)) {
348+ /* Mode x2 */
349+ mode = MAX310X_BRGCFG_2XMODE_BIT;
350+ div = (s->uartclk * 2) / baud;
351+ }
352+
353+ if (!(div / 16)) {
354+ /* Mode x4 */
355+ mode = MAX310X_BRGCFG_4XMODE_BIT;
356+ div = (s->uartclk * 4) / baud;
357+ }
358+
359+ regmap_write(s->regmap, MAX310X_BRGDIVMSB_REG,
360+ ((div / 16) >> 8) & 0xff);
361+ regmap_write(s->regmap, MAX310X_BRGDIVLSB_REG, (div / 16) & 0xff);
362+ regmap_write(s->regmap, MAX310X_BRGCFG_REG, (div % 16) | mode);
363+}
364+
365+static void max310x_wait_pll(struct max310x_port *s)
366+{
367+ int tryes = 1000;
368+
369+ /* Wait for PLL only if crystal is used */
370+ if (!(s->pdata->driver_flags & MAX310X_EXT_CLK)) {
371+ unsigned int sts = 0;
372+
373+ while (tryes--) {
374+ regmap_read(s->regmap, MAX310X_STS_IRQSTS_REG, &sts);
375+ if (sts & MAX310X_STS_CLKREADY_BIT)
376+ break;
377+ }
378+ }
379+}
380+
381+static int __devinit max310x_update_best_err(unsigned long f, long *besterr)
382+{
383+ /* Use baudrate 115200 for calculate error */
384+ long err = f % (115200 * 16);
385+
386+ if ((*besterr < 0) || (*besterr > err)) {
387+ *besterr = err;
388+ return 0;
389+ }
390+
391+ return 1;
392+}
393+
394+static int __devinit max310x_set_ref_clk(struct max310x_port *s)
395+{
396+ unsigned int div, clksrc, pllcfg = 0;
397+ long besterr = -1;
398+ unsigned long fdiv, fmul, bestfreq = s->pdata->frequency;
399+
400+ /* First, update error without PLL */
401+ max310x_update_best_err(s->pdata->frequency, &besterr);
402+
403+ /* Try all possible PLL dividers */
404+ for (div = 1; (div <= 63) && besterr; div++) {
405+ fdiv = DIV_ROUND_CLOSEST(s->pdata->frequency, div);
406+
407+ /* Try multiplier 6 */
408+ fmul = fdiv * 6;
409+ if ((fdiv >= 500000) && (fdiv <= 800000))
410+ if (!max310x_update_best_err(fmul, &besterr)) {
411+ pllcfg = (0 << 6) | div;
412+ bestfreq = fmul;
413+ }
414+ /* Try multiplier 48 */
415+ fmul = fdiv * 48;
416+ if ((fdiv >= 850000) && (fdiv <= 1200000))
417+ if (!max310x_update_best_err(fmul, &besterr)) {
418+ pllcfg = (1 << 6) | div;
419+ bestfreq = fmul;
420+ }
421+ /* Try multiplier 96 */
422+ fmul = fdiv * 96;
423+ if ((fdiv >= 425000) && (fdiv <= 1000000))
424+ if (!max310x_update_best_err(fmul, &besterr)) {
425+ pllcfg = (2 << 6) | div;
426+ bestfreq = fmul;
427+ }
428+ /* Try multiplier 144 */
429+ fmul = fdiv * 144;
430+ if ((fdiv >= 390000) && (fdiv <= 667000))
431+ if (!max310x_update_best_err(fmul, &besterr)) {
432+ pllcfg = (3 << 6) | div;
433+ bestfreq = fmul;
434+ }
435+ }
436+
437+ /* Configure clock source */
438+ if (s->pdata->driver_flags & MAX310X_EXT_CLK)
439+ clksrc = MAX310X_CLKSRC_EXTCLK_BIT;
440+ else
441+ clksrc = MAX310X_CLKSRC_CRYST_BIT;
442+
443+ /* Configure PLL */
444+ if (pllcfg) {
445+ clksrc |= MAX310X_CLKSRC_PLL_BIT;
446+ regmap_write(s->regmap, MAX310X_PLLCFG_REG, pllcfg);
447+ } else
448+ clksrc |= MAX310X_CLKSRC_PLLBYP_BIT;
449+
450+ regmap_write(s->regmap, MAX310X_CLKSRC_REG, clksrc);
451+
452+ if (pllcfg)
453+ max310x_wait_pll(s);
454+
455+ dev_dbg(s->port.dev, "Reference clock set to %lu Hz\n", bestfreq);
456+
457+ return (int)bestfreq;
458+}
459+
460+static void max310x_handle_rx(struct max310x_port *s, unsigned int rxlen)
461+{
462+ unsigned int sts = 0, ch = 0, flag;
463+ struct tty_struct *tty = tty_port_tty_get(&s->port.state->port);
464+
465+ if (!tty)
466+ return;
467+
468+ if (unlikely(rxlen >= MAX310X_FIFO_SIZE)) {
469+ dev_warn(s->port.dev, "Possible RX FIFO overrun %d\n", rxlen);
470+ /* Ensure sanity of RX level */
471+ rxlen = MAX310X_FIFO_SIZE;
472+ }
473+
474+ dev_dbg(s->port.dev, "RX Len = %u\n", rxlen);
475+
476+ while (rxlen--) {
477+ regmap_read(s->regmap, MAX310X_RHR_REG, &ch);
478+ regmap_read(s->regmap, MAX310X_LSR_IRQSTS_REG, &sts);
479+
480+ sts &= MAX310X_LSR_RXPAR_BIT | MAX310X_LSR_FRERR_BIT |
481+ MAX310X_LSR_RXOVR_BIT | MAX310X_LSR_RXBRK_BIT;
482+
483+ s->port.icount.rx++;
484+ flag = TTY_NORMAL;
485+
486+ if (unlikely(sts)) {
487+ if (sts & MAX310X_LSR_RXBRK_BIT) {
488+ s->port.icount.brk++;
489+ if (uart_handle_break(&s->port))
490+ continue;
491+ } else if (sts & MAX310X_LSR_RXPAR_BIT)
492+ s->port.icount.parity++;
493+ else if (sts & MAX310X_LSR_FRERR_BIT)
494+ s->port.icount.frame++;
495+ else if (sts & MAX310X_LSR_RXOVR_BIT)
496+ s->port.icount.overrun++;
497+
498+ sts &= s->port.read_status_mask;
499+ if (sts & MAX310X_LSR_RXBRK_BIT)
500+ flag = TTY_BREAK;
501+ else if (sts & MAX310X_LSR_RXPAR_BIT)
502+ flag = TTY_PARITY;
503+ else if (sts & MAX310X_LSR_FRERR_BIT)
504+ flag = TTY_FRAME;
505+ else if (sts & MAX310X_LSR_RXOVR_BIT)
506+ flag = TTY_OVERRUN;
507+ }
508+
509+ if (uart_handle_sysrq_char(s->port, ch))
510+ continue;
511+
512+ if (sts & s->port.ignore_status_mask)
513+ continue;
514+
515+ uart_insert_char(&s->port, sts, MAX310X_LSR_RXOVR_BIT,
516+ ch, flag);
517+ }
518+
519+ tty_flip_buffer_push(tty);
520+
521+ tty_kref_put(tty);
522+}
523+
524+static void max310x_handle_tx(struct max310x_port *s)
525+{
526+ struct circ_buf *xmit = &s->port.state->xmit;
527+ unsigned int txlen = 0, to_send;
528+
529+ if (unlikely(s->port.x_char)) {
530+ regmap_write(s->regmap, MAX310X_THR_REG, s->port.x_char);
531+ s->port.icount.tx++;
532+ s->port.x_char = 0;
533+ return;
534+ }
535+
536+ if (uart_circ_empty(xmit) || uart_tx_stopped(&s->port))
537+ return;
538+
539+ /* Get length of data pending in circular buffer */
540+ to_send = uart_circ_chars_pending(xmit);
541+ if (likely(to_send)) {
542+ /* Limit to size of TX FIFO */
543+ regmap_read(s->regmap, MAX310X_TXFIFOLVL_REG, &txlen);
544+ txlen = MAX310X_FIFO_SIZE - txlen;
545+ to_send = (to_send > txlen) ? txlen : to_send;
546+
547+ dev_dbg(s->port.dev, "TX Len = %u\n", to_send);
548+
549+ /* Add data to send */
550+ s->port.icount.tx += to_send;
551+ while (to_send--) {
552+ regmap_write(s->regmap, MAX310X_THR_REG,
553+ xmit->buf[xmit->tail]);
554+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
555+ };
556+ }
557+
558+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
559+ uart_write_wakeup(&s->port);
560+}
561+
562+static irqreturn_t max310x_ist(int irq, void *dev_id)
563+{
564+ struct max310x_port *s = (struct max310x_port *)dev_id;
565+ unsigned int ists = 0, lsr = 0, rxlen = 0;
566+
567+ mutex_lock(&s->max310x_mutex);
568+
569+ for (;;) {
570+ /* Read IRQ status & RX FIFO level */
571+ regmap_read(s->regmap, MAX310X_IRQSTS_REG, &ists);
572+ regmap_read(s->regmap, MAX310X_LSR_IRQSTS_REG, &lsr);
573+ regmap_read(s->regmap, MAX310X_RXFIFOLVL_REG, &rxlen);
574+ if (!ists && !(lsr & MAX310X_LSR_RXTO_BIT) && !rxlen)
575+ break;
576+
577+ dev_dbg(s->port.dev, "IRQ status: 0x%02x\n", ists);
578+
579+ if (rxlen)
580+ max310x_handle_rx(s, rxlen);
581+ if (ists & MAX310X_IRQ_TX)
582+ max310x_handle_tx(s);
583+ if (ists & MAX310X_IRQ_CTS_BIT)
584+ uart_handle_cts_change(&s->port,
585+ !!(lsr & MAX310X_LSR_CTS_BIT));
586+ }
587+
588+ mutex_unlock(&s->max310x_mutex);
589+
590+ return IRQ_HANDLED;
591+}
592+
593+static void max310x_wq_proc(struct work_struct *ws)
594+{
595+ struct max310x_port *s = container_of(ws, struct max310x_port, tx_work);
596+
597+ mutex_lock(&s->max310x_mutex);
598+ max310x_handle_tx(s);
599+ mutex_unlock(&s->max310x_mutex);
600+}
601+
602+static void max310x_start_tx(struct uart_port *port)
603+{
604+ struct max310x_port *s = container_of(port, struct max310x_port, port);
605+
606+ queue_work(s->wq, &s->tx_work);
607+}
608+
609+static void max310x_stop_tx(struct uart_port *port)
610+{
611+ /* Do nothing */
612+}
613+
614+static void max310x_stop_rx(struct uart_port *port)
615+{
616+ /* Do nothing */
617+}
618+
619+static unsigned int max310x_tx_empty(struct uart_port *port)
620+{
621+ unsigned int val = 0;
622+ struct max310x_port *s = container_of(port, struct max310x_port, port);
623+
624+ mutex_lock(&s->max310x_mutex);
625+ regmap_read(s->regmap, MAX310X_TXFIFOLVL_REG, &val);
626+ mutex_unlock(&s->max310x_mutex);
627+
628+ return val ? 0 : TIOCSER_TEMT;
629+}
630+
631+static void max310x_enable_ms(struct uart_port *port)
632+{
633+ /* Modem status not supported */
634+}
635+
636+static unsigned int max310x_get_mctrl(struct uart_port *port)
637+{
638+ /* DCD and DSR are not wired and CTS/RTS is handled automatically
639+ * so just indicate DSR and CAR asserted
640+ */
641+ return TIOCM_DSR | TIOCM_CAR;
642+}
643+
644+static void max310x_set_mctrl(struct uart_port *port, unsigned int mctrl)
645+{
646+ /* DCD and DSR are not wired and CTS/RTS is hadnled automatically
647+ * so do nothing
648+ */
649+}
650+
651+static void max310x_break_ctl(struct uart_port *port, int break_state)
652+{
653+ struct max310x_port *s = container_of(port, struct max310x_port, port);
654+
655+ mutex_lock(&s->max310x_mutex);
656+ regmap_update_bits(s->regmap, MAX310X_LCR_REG,
657+ MAX310X_LCR_TXBREAK_BIT,
658+ break_state ? MAX310X_LCR_TXBREAK_BIT : 0);
659+ mutex_unlock(&s->max310x_mutex);
660+}
661+
662+static void max310x_set_termios(struct uart_port *port,
663+ struct ktermios *termios,
664+ struct ktermios *old)
665+{
666+ struct max310x_port *s = container_of(port, struct max310x_port, port);
667+ unsigned int lcr, flow = 0;
668+ int baud;
669+
670+ mutex_lock(&s->max310x_mutex);
671+
672+ /* Mask termios capabilities we don't support */
673+ termios->c_cflag &= ~CMSPAR;
674+ termios->c_iflag &= ~IXANY;
675+
676+ /* Word size */
677+ switch (termios->c_cflag & CSIZE) {
678+ case CS5:
679+ lcr = MAX310X_LCR_WORD_LEN_5;
680+ break;
681+ case CS6:
682+ lcr = MAX310X_LCR_WORD_LEN_6;
683+ break;
684+ case CS7:
685+ lcr = MAX310X_LCR_WORD_LEN_7;
686+ break;
687+ case CS8:
688+ default:
689+ lcr = MAX310X_LCR_WORD_LEN_8;
690+ break;
691+ }
692+
693+ /* Parity */
694+ if (termios->c_cflag & PARENB) {
695+ lcr |= MAX310X_LCR_PARITY_BIT;
696+ if (!(termios->c_cflag & PARODD))
697+ lcr |= MAX310X_LCR_EVENPARITY_BIT;
698+ }
699+
700+ /* Stop bits */
701+ if (termios->c_cflag & CSTOPB)
702+ lcr |= MAX310X_LCR_STOPLEN_BIT; /* 2 stops */
703+
704+ /* Update LCR register */
705+ regmap_write(s->regmap, MAX310X_LCR_REG, lcr);
706+
707+ /* Set read status mask */
708+ port->read_status_mask = MAX310X_LSR_RXOVR_BIT;
709+ if (termios->c_iflag & INPCK)
710+ port->read_status_mask |= MAX310X_LSR_RXPAR_BIT |
711+ MAX310X_LSR_FRERR_BIT;
712+ if (termios->c_iflag & (BRKINT | PARMRK))
713+ port->read_status_mask |= MAX310X_LSR_RXBRK_BIT;
714+
715+ /* Set status ignore mask */
716+ port->ignore_status_mask = 0;
717+ if (termios->c_iflag & IGNBRK)
718+ port->ignore_status_mask |= MAX310X_LSR_RXBRK_BIT;
719+ if (!(termios->c_cflag & CREAD))
720+ port->ignore_status_mask |= MAX310X_LSR_RXPAR_BIT |
721+ MAX310X_LSR_RXOVR_BIT |
722+ MAX310X_LSR_FRERR_BIT |
723+ MAX310X_LSR_RXBRK_BIT;
724+
725+ /* Configure flow control */
726+ regmap_write(s->regmap, MAX310X_XON1_REG, termios->c_cc[VSTART]);
727+ regmap_write(s->regmap, MAX310X_XOFF1_REG, termios->c_cc[VSTOP]);
728+ if (termios->c_cflag & CRTSCTS)
729+ flow |= MAX310X_FLOWCTRL_AUTOCTS_BIT |
730+ MAX310X_FLOWCTRL_AUTORTS_BIT;
731+ if (termios->c_iflag & IXON)
732+ flow |= MAX310X_FLOWCTRL_SWFLOW3_BIT |
733+ MAX310X_FLOWCTRL_SWFLOWEN_BIT;
734+ if (termios->c_iflag & IXOFF)
735+ flow |= MAX310X_FLOWCTRL_SWFLOW1_BIT |
736+ MAX310X_FLOWCTRL_SWFLOWEN_BIT;
737+ regmap_write(s->regmap, MAX310X_FLOWCTRL_REG, flow);
738+
739+ /* Get baud rate generator configuration */
740+ baud = uart_get_baud_rate(port, termios, old,
741+ port->uartclk / 16 / 0xffff,
742+ port->uartclk / 4);
743+
744+ /* Setup baudrate generator */
745+ max310x_set_baud(s, baud);
746+
747+ /* Update timeout according to new baud rate */
748+ uart_update_timeout(port, termios->c_cflag, baud);
749+
750+ mutex_unlock(&s->max310x_mutex);
751+}
752+
753+static int max310x_startup(struct uart_port *port)
754+{
755+ unsigned int val, line = port->line;
756+ struct max310x_port *s = container_of(port, struct max310x_port, port);
757+
758+ if (s->pdata->suspend)
759+ s->pdata->suspend(0);
760+
761+ mutex_lock(&s->max310x_mutex);
762+
763+ /* Configure baud rate, 9600 as default */
764+ max310x_set_baud(s, 9600);
765+
766+ /* Configure LCR register, 8N1 mode by default */
767+ val = MAX310X_LCR_WORD_LEN_8;
768+ regmap_write(s->regmap, MAX310X_LCR_REG, val);
769+
770+ /* Configure MODE1 register */
771+ regmap_update_bits(s->regmap, MAX310X_MODE1_REG,
772+ MAX310X_MODE1_TRNSCVCTRL_BIT,
773+ (s->pdata->uart_flags[line] & MAX310X_AUTO_DIR_CTRL)
774+ ? MAX310X_MODE1_TRNSCVCTRL_BIT : 0);
775+
776+ /* Configure MODE2 register */
777+ val = MAX310X_MODE2_RXEMPTINV_BIT;
778+ if (s->pdata->uart_flags[line] & MAX310X_LOOPBACK)
779+ val |= MAX310X_MODE2_LOOPBACK_BIT;
780+ if (s->pdata->uart_flags[line] & MAX310X_ECHO_SUPRESS)
781+ val |= MAX310X_MODE2_ECHOSUPR_BIT;
782+
783+ /* Reset FIFOs */
784+ val |= MAX310X_MODE2_FIFORST_BIT;
785+ regmap_write(s->regmap, MAX310X_MODE2_REG, val);
786+
787+ /* Configure FIFO trigger level register */
788+ /* RX FIFO trigger for 16 words, TX FIFO trigger for 64 words */
789+ val = MAX310X_FIFOTRIGLVL_RX(16) | MAX310X_FIFOTRIGLVL_TX(64);
790+ regmap_write(s->regmap, MAX310X_FIFOTRIGLVL_REG, val);
791+
792+ /* Configure flow control levels */
793+ /* Flow control halt level 96, resume level 48 */
794+ val = MAX310X_FLOWLVL_RES(48) | MAX310X_FLOWLVL_HALT(96);
795+ regmap_write(s->regmap, MAX310X_FLOWLVL_REG, val);
796+
797+ /* Clear timeout register */
798+ regmap_write(s->regmap, MAX310X_RXTO_REG, 0);
799+
800+ /* Configure LSR interrupt enable register */
801+ /* Enable RX timeout interrupt */
802+ val = MAX310X_LSR_RXTO_BIT;
803+ regmap_write(s->regmap, MAX310X_LSR_IRQEN_REG, val);
804+
805+ /* Clear FIFO reset */
806+ regmap_update_bits(s->regmap, MAX310X_MODE2_REG,
807+ MAX310X_MODE2_FIFORST_BIT, 0);
808+
809+ /* Clear IRQ status register by reading it */
810+ regmap_read(s->regmap, MAX310X_IRQSTS_REG, &val);
811+
812+ /* Configure interrupt enable register */
813+ /* Enable CTS change interrupt */
814+ val = MAX310X_IRQ_CTS_BIT;
815+ /* Enable RX, TX interrupts */
816+ val |= MAX310X_IRQ_RX | MAX310X_IRQ_TX;
817+ regmap_write(s->regmap, MAX310X_IRQEN_REG, val);
818+
819+ mutex_unlock(&s->max310x_mutex);
820+
821+ return 0;
822+}
823+
824+static void max310x_shutdown(struct uart_port *port)
825+{
826+ struct max310x_port *s = container_of(port, struct max310x_port, port);
827+
828+ /* Disable all interrupts */
829+ mutex_lock(&s->max310x_mutex);
830+ regmap_write(s->regmap, MAX310X_IRQEN_REG, 0);
831+ mutex_unlock(&s->max310x_mutex);
832+
833+ if (s->pdata->suspend)
834+ s->pdata->suspend(1);
835+}
836+
837+static const char *max310x_type(struct uart_port *port)
838+{
839+ struct max310x_port *s = container_of(port, struct max310x_port, port);
840+
841+ return (port->type == PORT_MAX310X) ? s->name : NULL;
842+}
843+
844+static int max310x_request_port(struct uart_port *port)
845+{
846+ /* Do nothing */
847+ return 0;
848+}
849+
850+static void max310x_release_port(struct uart_port *port)
851+{
852+ /* Do nothing */
853+}
854+
855+static void max310x_config_port(struct uart_port *port, int flags)
856+{
857+ if (flags & UART_CONFIG_TYPE)
858+ port->type = PORT_MAX310X;
859+}
860+
861+static int max310x_verify_port(struct uart_port *port, struct serial_struct *ser)
862+{
863+ if ((ser->type == PORT_UNKNOWN) || (ser->type == PORT_MAX310X))
864+ return 0;
865+ if (ser->irq == port->irq)
866+ return 0;
867+
868+ return -EINVAL;
869+}
870+
871+static struct uart_ops max310x_ops = {
872+ .tx_empty = max310x_tx_empty,
873+ .set_mctrl = max310x_set_mctrl,
874+ .get_mctrl = max310x_get_mctrl,
875+ .stop_tx = max310x_stop_tx,
876+ .start_tx = max310x_start_tx,
877+ .stop_rx = max310x_stop_rx,
878+ .enable_ms = max310x_enable_ms,
879+ .break_ctl = max310x_break_ctl,
880+ .startup = max310x_startup,
881+ .shutdown = max310x_shutdown,
882+ .set_termios = max310x_set_termios,
883+ .type = max310x_type,
884+ .request_port = max310x_request_port,
885+ .release_port = max310x_release_port,
886+ .config_port = max310x_config_port,
887+ .verify_port = max310x_verify_port,
888+};
889+
890+static int max310x_suspend(struct spi_device *spi, pm_message_t state)
891+{
892+ int ret;
893+ struct max310x_port *s = dev_get_drvdata(&spi->dev);
894+
895+ dev_dbg(&spi->dev, "Suspend\n");
896+
897+ ret = uart_suspend_port(&s->uart, &s->port);
898+
899+ mutex_lock(&s->max310x_mutex);
900+
901+ /* Enable sleep mode */
902+ regmap_update_bits(s->regmap, MAX310X_MODE1_REG,
903+ MAX310X_MODE1_FORCESLEEP_BIT,
904+ MAX310X_MODE1_FORCESLEEP_BIT);
905+
906+ mutex_unlock(&s->max310x_mutex);
907+
908+ if (s->pdata->suspend)
909+ s->pdata->suspend(1);
910+
911+ return ret;
912+}
913+
914+static int max310x_resume(struct spi_device *spi)
915+{
916+ struct max310x_port *s = dev_get_drvdata(&spi->dev);
917+
918+ dev_dbg(&spi->dev, "Resume\n");
919+
920+ if (s->pdata->suspend)
921+ s->pdata->suspend(0);
922+
923+ mutex_lock(&s->max310x_mutex);
924+
925+ /* Disable sleep mode */
926+ regmap_update_bits(s->regmap, MAX310X_MODE1_REG,
927+ MAX310X_MODE1_FORCESLEEP_BIT,
928+ 0);
929+
930+ max310x_wait_pll(s);
931+
932+ mutex_unlock(&s->max310x_mutex);
933+
934+ return uart_resume_port(&s->uart, &s->port);
935+}
936+
937+#ifdef CONFIG_GPIOLIB
938+static int max310x_gpio_get(struct gpio_chip *chip, unsigned offset)
939+{
940+ unsigned int val = 0;
941+ struct max310x_port *s = container_of(chip, struct max310x_port, gpio);
942+
943+ mutex_lock(&s->max310x_mutex);
944+ regmap_read(s->regmap, MAX310X_GPIODATA_REG, &val);
945+ mutex_unlock(&s->max310x_mutex);
946+
947+ return !!((val >> 4) & (1 << offset));
948+}
949+
950+static void max310x_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
951+{
952+ struct max310x_port *s = container_of(chip, struct max310x_port, gpio);
953+
954+ mutex_lock(&s->max310x_mutex);
955+ regmap_update_bits(s->regmap, MAX310X_GPIODATA_REG, 1 << offset, value ?
956+ 1 << offset : 0);
957+ mutex_unlock(&s->max310x_mutex);
958+}
959+
960+static int max310x_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
961+{
962+ struct max310x_port *s = container_of(chip, struct max310x_port, gpio);
963+
964+ mutex_lock(&s->max310x_mutex);
965+
966+ regmap_update_bits(s->regmap, MAX310X_GPIOCFG_REG, 1 << offset, 0);
967+
968+ mutex_unlock(&s->max310x_mutex);
969+
970+ return 0;
971+}
972+
973+static int max310x_gpio_direction_output(struct gpio_chip *chip,
974+ unsigned offset, int value)
975+{
976+ struct max310x_port *s = container_of(chip, struct max310x_port, gpio);
977+
978+ mutex_lock(&s->max310x_mutex);
979+
980+ regmap_update_bits(s->regmap, MAX310X_GPIOCFG_REG, 1 << offset,
981+ 1 << offset);
982+ regmap_update_bits(s->regmap, MAX310X_GPIODATA_REG, 1 << offset, value ?
983+ 1 << offset : 0);
984+
985+ mutex_unlock(&s->max310x_mutex);
986+
987+ return 0;
988+}
989+#endif
990+
991+/* Generic platform data */
992+static struct max310x_pdata generic_plat_data = {
993+ .driver_flags = MAX310X_EXT_CLK,
994+ .uart_flags[0] = MAX310X_ECHO_SUPRESS,
995+ .frequency = 26000000,
996+};
997+
998+static int __devinit max310x_probe(struct spi_device *spi)
999+{
1000+ struct max310x_port *s;
1001+ struct device *dev = &spi->dev;
1002+ int chiptype = spi_get_device_id(spi)->driver_data;
1003+ struct max310x_pdata *pdata = dev->platform_data;
1004+ unsigned int val = 0;
1005+ int ret;
1006+
1007+ /* Check for IRQ */
1008+ if (spi->irq <= 0) {
1009+ dev_err(dev, "No IRQ specified\n");
1010+ return -ENOTSUPP;
1011+ }
1012+
1013+ /* Alloc port structure */
1014+ s = devm_kzalloc(dev, sizeof(struct max310x_port), GFP_KERNEL);
1015+ if (!s) {
1016+ dev_err(dev, "Error allocating port structure\n");
1017+ return -ENOMEM;
1018+ }
1019+ dev_set_drvdata(dev, s);
1020+
1021+ if (!pdata) {
1022+ dev_warn(dev, "No platform data supplied, using defaults\n");
1023+ pdata = &generic_plat_data;
1024+ }
1025+ s->pdata = pdata;
1026+
1027+ /* Individual chip settings */
1028+ switch (chiptype) {
1029+ case MAX310X_TYPE_MAX3107:
1030+ s->name = "MAX3107";
1031+ s->nr_gpio = 4;
1032+ s->uart.nr = 1;
1033+ s->regcfg.max_register = 0x1f;
1034+ break;
1035+ case MAX310X_TYPE_MAX3108:
1036+ s->name = "MAX3108";
1037+ s->nr_gpio = 4;
1038+ s->uart.nr = 1;
1039+ s->regcfg.max_register = 0x1e;
1040+ break;
1041+ default:
1042+ dev_err(dev, "Unsupported chip type %i\n", chiptype);
1043+ return -ENOTSUPP;
1044+ }
1045+
1046+ /* Check input frequency */
1047+ if ((pdata->driver_flags & MAX310X_EXT_CLK) &&
1048+ ((pdata->frequency < 500000) || (pdata->frequency > 35000000)))
1049+ goto err_freq;
1050+ /* Check frequency for quartz */
1051+ if (!(pdata->driver_flags & MAX310X_EXT_CLK) &&
1052+ ((pdata->frequency < 1000000) || (pdata->frequency > 4000000)))
1053+ goto err_freq;
1054+
1055+ mutex_init(&s->max310x_mutex);
1056+
1057+ /* Setup SPI bus */
1058+ spi->mode = SPI_MODE_0;
1059+ spi->bits_per_word = 8;
1060+ spi->max_speed_hz = 26000000;
1061+ spi_setup(spi);
1062+
1063+ /* Setup regmap */
1064+ s->regcfg.reg_bits = 8;
1065+ s->regcfg.val_bits = 8;
1066+ s->regcfg.read_flag_mask = 0x00;
1067+ s->regcfg.write_flag_mask = 0x80;
1068+ s->regcfg.cache_type = REGCACHE_RBTREE;
1069+ s->regcfg.writeable_reg = max3107_8_reg_writeable;
1070+ s->regcfg.volatile_reg = max310x_reg_volatile;
1071+ s->regcfg.precious_reg = max310x_reg_precious;
1072+ s->regmap = devm_regmap_init_spi(spi, &s->regcfg);
1073+ if (IS_ERR(s->regmap)) {
1074+ ret = PTR_ERR(s->regmap);
1075+ dev_err(dev, "Failed to initialize register map\n");
1076+ goto err_out;
1077+ }
1078+
1079+ /* Reset chip & check SPI function */
1080+ ret = regmap_write(s->regmap, MAX310X_MODE2_REG, MAX310X_MODE2_RST_BIT);
1081+ if (ret) {
1082+ dev_err(dev, "SPI transfer failed\n");
1083+ goto err_out;
1084+ }
1085+ /* Clear chip reset */
1086+ regmap_write(s->regmap, MAX310X_MODE2_REG, 0);
1087+
1088+ switch (chiptype) {
1089+ case MAX310X_TYPE_MAX3107:
1090+ /* Check REV ID to ensure we are talking to what we expect */
1091+ regmap_read(s->regmap, MAX3107_REVID_REG, &val);
1092+ if (((val & MAX3107_REV_MASK) != MAX3107_REV_ID)) {
1093+ dev_err(dev, "%s ID 0x%02x does not match\n",
1094+ s->name, val);
1095+ ret = -ENODEV;
1096+ goto err_out;
1097+ }
1098+ break;
1099+ case MAX310X_TYPE_MAX3108:
1100+ /* MAX3108 have not REV ID register, we just check default value
1101+ * from clocksource register to make sure everything works.
1102+ */
1103+ regmap_read(s->regmap, MAX310X_CLKSRC_REG, &val);
1104+ if (val != (MAX310X_CLKSRC_EXTCLK_BIT |
1105+ MAX310X_CLKSRC_PLLBYP_BIT)) {
1106+ dev_err(dev, "%s not present\n", s->name);
1107+ ret = -ENODEV;
1108+ goto err_out;
1109+ }
1110+ break;
1111+ }
1112+
1113+ /* Board specific configure */
1114+ if (pdata->init)
1115+ pdata->init();
1116+ if (pdata->suspend)
1117+ pdata->suspend(0);
1118+
1119+ /* Calculate referecne clock */
1120+ s->uartclk = max310x_set_ref_clk(s);
1121+
1122+ /* Disable all interrupts */
1123+ regmap_write(s->regmap, MAX310X_IRQEN_REG, 0);
1124+
1125+ /* Setup MODE1 register */
1126+ val = MAX310X_MODE1_IRQSEL_BIT; /* Enable IRQ pin */
1127+ if (pdata->driver_flags & MAX310X_AUTOSLEEP)
1128+ val = MAX310X_MODE1_AUTOSLEEP_BIT;
1129+ regmap_write(s->regmap, MAX310X_MODE1_REG, val);
1130+
1131+ /* Setup interrupt */
1132+ ret = devm_request_threaded_irq(dev, spi->irq, NULL, max310x_ist,
1133+ IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
1134+ dev_name(dev), s);
1135+ if (ret) {
1136+ dev_err(dev, "Unable to reguest IRQ %i\n", spi->irq);
1137+ goto err_out;
1138+ }
1139+
1140+ /* Register UART driver */
1141+ s->uart.owner = THIS_MODULE;
1142+ s->uart.driver_name = dev_name(dev);
1143+ s->uart.dev_name = "ttyMAX";
1144+ s->uart.major = MAX310X_MAJOR;
1145+ s->uart.minor = MAX310X_MINOR;
1146+ ret = uart_register_driver(&s->uart);
1147+ if (ret) {
1148+ dev_err(dev, "Registering UART driver failed\n");
1149+ goto err_out;
1150+ }
1151+
1152+ /* Initialize workqueue for start TX */
1153+ s->wq = create_freezable_workqueue(dev_name(dev));
1154+ INIT_WORK(&s->tx_work, max310x_wq_proc);
1155+
1156+ /* Initialize UART port data */
1157+ s->port.line = 0;
1158+ s->port.dev = dev;
1159+ s->port.irq = spi->irq;
1160+ s->port.type = PORT_MAX310X;
1161+ s->port.fifosize = MAX310X_FIFO_SIZE;
1162+ s->port.flags = UPF_SKIP_TEST | UPF_FIXED_TYPE;
1163+ s->port.iotype = UPIO_PORT;
1164+ s->port.membase = (void __iomem *)0xffffffff; /* Bogus value */
1165+ s->port.uartclk = s->uartclk;
1166+ s->port.ops = &max310x_ops;
1167+ uart_add_one_port(&s->uart, &s->port);
1168+
1169+#ifdef CONFIG_GPIOLIB
1170+ /* Setup GPIO cotroller */
1171+ if (pdata->gpio_base) {
1172+ s->gpio.owner = THIS_MODULE;
1173+ s->gpio.dev = dev;
1174+ s->gpio.label = dev_name(dev);
1175+ s->gpio.direction_input = max310x_gpio_direction_input;
1176+ s->gpio.get = max310x_gpio_get;
1177+ s->gpio.direction_output= max310x_gpio_direction_output;
1178+ s->gpio.set = max310x_gpio_set;
1179+ s->gpio.base = pdata->gpio_base;
1180+ s->gpio.ngpio = s->nr_gpio;
1181+ if (gpiochip_add(&s->gpio)) {
1182+ /* Indicate that we should not call gpiochip_remove */
1183+ s->gpio.base = 0;
1184+ }
1185+ } else
1186+ dev_info(dev, "GPIO support not enabled\n");
1187+#endif
1188+
1189+ /* Go to suspend mode */
1190+ if (pdata->suspend)
1191+ pdata->suspend(1);
1192+
1193+ return 0;
1194+
1195+err_freq:
1196+ dev_err(dev, "Frequency parameter incorrect\n");
1197+ ret = -EINVAL;
1198+
1199+err_out:
1200+ dev_set_drvdata(dev, NULL);
1201+
1202+ return ret;
1203+}
1204+
1205+static int __devexit max310x_remove(struct spi_device *spi)
1206+{
1207+ struct device *dev = &spi->dev;
1208+ struct max310x_port *s = dev_get_drvdata(dev);
1209+ int ret = 0;
1210+
1211+ dev_dbg(dev, "Removing port\n");
1212+
1213+ devm_free_irq(dev, s->port.irq, s);
1214+
1215+ destroy_workqueue(s->wq);
1216+
1217+ uart_remove_one_port(&s->uart, &s->port);
1218+
1219+ uart_unregister_driver(&s->uart);
1220+
1221+#ifdef CONFIG_GPIOLIB
1222+ if (s->pdata->gpio_base) {
1223+ ret = gpiochip_remove(&s->gpio);
1224+ if (ret)
1225+ dev_err(dev, "Failed to remove gpio chip: %d\n", ret);
1226+ }
1227+#endif
1228+
1229+ dev_set_drvdata(dev, NULL);
1230+
1231+ if (s->pdata->suspend)
1232+ s->pdata->suspend(1);
1233+ if (s->pdata->exit)
1234+ s->pdata->exit();
1235+
1236+ return ret;
1237+}
1238+
1239+static const struct spi_device_id max310x_id_table[] = {
1240+ { "max3107", MAX310X_TYPE_MAX3107 },
1241+ { "max3108", MAX310X_TYPE_MAX3108 },
1242+};
1243+MODULE_DEVICE_TABLE(spi, max310x_id_table);
1244+
1245+static struct spi_driver max310x_driver = {
1246+ .driver = {
1247+ .name = "max310x",
1248+ .owner = THIS_MODULE,
1249+ },
1250+ .probe = max310x_probe,
1251+ .remove = __devexit_p(max310x_remove),
1252+ .suspend = max310x_suspend,
1253+ .resume = max310x_resume,
1254+ .id_table = max310x_id_table,
1255+};
1256+module_spi_driver(max310x_driver);
1257+
1258+MODULE_LICENSE("GPL v2");
1259+MODULE_AUTHOR("Alexander Shiyan <shc_work@mail.ru>");
1260+MODULE_DESCRIPTION("MAX310X serial driver");
drivers/tty/serial/mpc52xx_uart.c+6−2
@@ -775,11 +775,15 @@ mpc52xx_uart_set_termios(struct uart_port *port, struct ktermios *new, · 774 unmodified lines
775775 }
776776
777777 if (new->c_cflag & PARENB) {
778+ if (new->c_cflag & CMSPAR)
779+ mr1 |= MPC52xx_PSC_MODE_PARFORCE;
780+
781+ /* With CMSPAR, PARODD also means high parity (same as termios) */
778782 mr1 |= (new->c_cflag & PARODD) ?
779783 MPC52xx_PSC_MODE_PARODD : MPC52xx_PSC_MODE_PAREVEN;
780− } else
784+ } else {
781785 mr1 |= MPC52xx_PSC_MODE_PARNONE;
782−
786+ }
783787
784788 mr2 = 0;
785789
drivers/tty/serial/msm_serial.c+1−1
@@ -896,7 +896,7 @@ static int __init msm_serial_probe(struct platform_device *pdev) · 895 unmodified lines
896896 return PTR_ERR(msm_port->clk);
897897
898898 if (msm_port->is_uartdm)
899− clk_set_rate(msm_port->clk, 7372800);
899+ clk_set_rate(msm_port->clk, 1843200);
900900
901901 port->uartclk = clk_get_rate(msm_port->clk);
902902 printk(KERN_INFO "uartclk = %d\n", port->uartclk);
drivers/tty/serial/msm_smd_tty.c+5−3
@@ -223,9 +223,11 @@ static int __init smd_tty_init(void) · 222 unmodified lines
223223 return ret;
224224
225225 for (i = 0; i < smd_tty_channels_len; i++) {
226− tty_port_init(&smd_tty[smd_tty_channels[i].id].port);
227− smd_tty[smd_tty_channels[i].id].port.ops = &smd_tty_port_ops;
228− tty_register_device(smd_tty_driver, smd_tty_channels[i].id, 0);
226+ struct tty_port *port = &smd_tty[smd_tty_channels[i].id].port;
227+ tty_port_init(port);
228+ port->ops = &smd_tty_port_ops;
229+ tty_port_register_device(port, smd_tty_driver,
230+ smd_tty_channels[i].id, NULL);
229231 }
230232
231233 return 0;
drivers/tty/serial/mxs-auart.c+4−3
@@ -262,7 +262,7 @@ static void mxs_auart_set_mctrl(struct uart_port *u, unsigned mctrl) · 261 unmodified lines
262262
263263 ctrl &= ~AUART_CTRL2_RTSEN;
264264 if (mctrl & TIOCM_RTS) {
265− if (u->state->port.flags & ASYNC_CTS_FLOW)
265+ if (tty_port_cts_enabled(&u->state->port))
266266 ctrl |= AUART_CTRL2_RTSEN;
267267 }
268268
@@ -457,11 +457,11 @@ static void mxs_auart_shutdown(struct uart_port *u) · 188 unmodified lines
457457
458458 writel(AUART_CTRL2_UARTEN, u->membase + AUART_CTRL2_CLR);
459459
460− writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_SET);
461−
462460 writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
463461 u->membase + AUART_INTR_CLR);
464462
463+ writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_SET);
464+
465465 clk_disable_unprepare(s->clk);
466466 }
467467
@@ -796,6 +796,7 @@ static int __devexit mxs_auart_remove(struct platform_device *pdev) · 328 unmodified lines
796796
797797 auart_port[pdev->id] = NULL;
798798
799+ put_device(s->dev);
799800 clk_put(s->clk);
800801 free_irq(s->irq, s);
801802 kfree(s);
drivers/tty/serial/of_serial.c+12−1
@@ -105,6 +105,10 @@ static int __devinit of_platform_serial_setup(struct platform_device *ofdev, · 104 unmodified lines
105105 port->uartclk = clk;
106106 port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP
107107 | UPF_FIXED_PORT | UPF_FIXED_TYPE;
108+
109+ if (of_find_property(np, "no-loopback-test", NULL))
110+ port->flags |= UPF_SKIP_TEST;
111+
108112 port->dev = &ofdev->dev;
109113
110114 if (type == PORT_TEGRA)
@@ -144,8 +148,15 @@ static int __devinit of_platform_serial_probe(struct platform_device *ofdev) · 33 unmodified lines
144148 switch (port_type) {
145149 #ifdef CONFIG_SERIAL_8250
146150 case PORT_8250 ... PORT_MAX_8250:
147− ret = serial8250_register_port(&port);
151+ {
152+ /* For now the of bindings don't support the extra
153+ 8250 specific bits */
154+ struct uart_8250_port port8250;
155+ memset(&port8250, 0, sizeof(port8250));
156+ port8250.port = port;
157+ ret = serial8250_register_8250_port(&port8250);
148158 break;
159+ }
149160 #endif
150161 #ifdef CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL
151162 case PORT_NWPSERIAL:
drivers/tty/serial/omap-serial.c+363−497
@@ -32,16 +32,16 @@ · 31 unmodified lines
3232 #include <linux/slab.h>
3333 #include <linux/tty.h>
3434 #include <linux/tty_flip.h>
35+#include <linux/platform_device.h>
3536 #include <linux/io.h>
36−#include <linux/dma-mapping.h>
3737 #include <linux/clk.h>
3838 #include <linux/serial_core.h>
3939 #include <linux/irq.h>
4040 #include <linux/pm_runtime.h>
4141 #include <linux/of.h>
42+#include <linux/gpio.h>
43+#include <linux/pinctrl/consumer.h>
4244
43−#include <plat/dma.h>
44−#include <plat/dmtimer.h>
4545 #include <plat/omap-serial.h>
4646
4747 #define UART_BUILD_REVISION(x, y) (((x) << 8) | (y))
@@ -57,8 +57,8 @@ · 9 unmodified lines
5757 #define OMAP_UART_SCR_RX_TRIG_GRANU1_MASK (1 << 7)
5858
5959 /* FCR register bitmasks */
60−#define OMAP_UART_FCR_RX_FIFO_TRIG_SHIFT 6
6160 #define OMAP_UART_FCR_RX_FIFO_TRIG_MASK (0x3 << 6)
61+#define OMAP_UART_FCR_TX_FIFO_TRIG_MASK (0x3 << 4)
6262
6363 /* MVR register bitmasks */
6464 #define OMAP_UART_MVR_SCHEME_SHIFT 30
@@ -71,12 +71,52 @@ · 6 unmodified lines
7171 #define OMAP_UART_MVR_MAJ_SHIFT 8
7272 #define OMAP_UART_MVR_MIN_MASK 0x3f
7373
74+struct uart_omap_port {
75+ struct uart_port port;
76+ struct uart_omap_dma uart_dma;
77+ struct device *dev;
78+
79+ unsigned char ier;
80+ unsigned char lcr;
81+ unsigned char mcr;
82+ unsigned char fcr;
83+ unsigned char efr;
84+ unsigned char dll;
85+ unsigned char dlh;
86+ unsigned char mdr1;
87+ unsigned char scr;
88+
89+ int use_dma;
90+ /*
91+ * Some bits in registers are cleared on a read, so they must
92+ * be saved whenever the register is read but the bits will not
93+ * be immediately processed.
94+ */
95+ unsigned int lsr_break_flag;
96+ unsigned char msr_saved_flags;
97+ char name[20];
98+ unsigned long port_activity;
99+ u32 context_loss_cnt;
100+ u32 errata;
101+ u8 wakeups_enabled;
102+ unsigned int irq_pending:1;
103+
104+ int DTR_gpio;
105+ int DTR_inverted;
106+ int DTR_active;
107+
108+ struct pm_qos_request pm_qos_request;
109+ u32 latency;
110+ u32 calc_latency;
111+ struct work_struct qos_work;
112+ struct pinctrl *pins;
113+};
114+
115+#define to_uart_omap_port(p) ((container_of((p), struct uart_omap_port, port)))
116+
74117 static struct uart_omap_port *ui[OMAP_MAX_HSUART_PORTS];
75118
76119 /* Forward declaration of functions */
77−static void uart_tx_dma_callback(int lch, u16 ch_status, void *data);
78−static void serial_omap_rxdma_poll(unsigned long uart_no);
79−static int serial_omap_start_rxdma(struct uart_omap_port *up);
80120 static void serial_omap_mdr1_errataset(struct uart_omap_port *up, u8 mdr1);
81121
82122 static struct workqueue_struct *serial_omap_uart_wq;
@@ -101,6 +141,46 @@ static inline void serial_omap_clear_fifos(struct uart_omap_port *up) · 18 unmodified lines
101141 serial_out(up, UART_FCR, 0);
102142 }
103143
144+static int serial_omap_get_context_loss_count(struct uart_omap_port *up)
145+{
146+ struct omap_uart_port_info *pdata = up->dev->platform_data;
147+
148+ if (!pdata || !pdata->get_context_loss_count)
149+ return 0;
150+
151+ return pdata->get_context_loss_count(up->dev);
152+}
153+
154+static void serial_omap_set_forceidle(struct uart_omap_port *up)
155+{
156+ struct omap_uart_port_info *pdata = up->dev->platform_data;
157+
158+ if (!pdata || !pdata->set_forceidle)
159+ return;
160+
161+ pdata->set_forceidle(up->dev);
162+}
163+
164+static void serial_omap_set_noidle(struct uart_omap_port *up)
165+{
166+ struct omap_uart_port_info *pdata = up->dev->platform_data;
167+
168+ if (!pdata || !pdata->set_noidle)
169+ return;
170+
171+ pdata->set_noidle(up->dev);
172+}
173+
174+static void serial_omap_enable_wakeup(struct uart_omap_port *up, bool enable)
175+{
176+ struct omap_uart_port_info *pdata = up->dev->platform_data;
177+
178+ if (!pdata || !pdata->enable_wakeup)
179+ return;
180+
181+ pdata->enable_wakeup(up->dev, enable);
182+}
183+
104184 /*
105185 * serial_omap_get_divisor - calculate divisor value
106186 * @port: uart port info
@@ -126,151 +206,55 @@ serial_omap_get_divisor(struct uart_port *port, unsigned int baud) · 19 unmodified lines
126206 return port->uartclk/(baud * divisor);
127207 }
128208
129−static void serial_omap_stop_rxdma(struct uart_omap_port *up)
130−{
131− if (up->uart_dma.rx_dma_used) {
132− del_timer(&up->uart_dma.rx_timer);
133− omap_stop_dma(up->uart_dma.rx_dma_channel);
134− omap_free_dma(up->uart_dma.rx_dma_channel);
135− up->uart_dma.rx_dma_channel = OMAP_UART_DMA_CH_FREE;
136− up->uart_dma.rx_dma_used = false;
137− pm_runtime_mark_last_busy(&up->pdev->dev);
138− pm_runtime_put_autosuspend(&up->pdev->dev);
139− }
140−}
141−
142209 static void serial_omap_enable_ms(struct uart_port *port)
143210 {
144− struct uart_omap_port *up = (struct uart_omap_port *)port;
211+ struct uart_omap_port *up = to_uart_omap_port(port);
145212
146213 dev_dbg(up->port.dev, "serial_omap_enable_ms+%d\n", up->port.line);
147214
148− pm_runtime_get_sync(&up->pdev->dev);
215+ pm_runtime_get_sync(up->dev);
149216 up->ier |= UART_IER_MSI;
150217 serial_out(up, UART_IER, up->ier);
151− pm_runtime_put(&up->pdev->dev);
218+ pm_runtime_mark_last_busy(up->dev);
219+ pm_runtime_put_autosuspend(up->dev);
152220 }
153221
154222 static void serial_omap_stop_tx(struct uart_port *port)
155223 {
156− struct uart_omap_port *up = (struct uart_omap_port *)port;
157− struct omap_uart_port_info *pdata = up->pdev->dev.platform_data;
224+ struct uart_omap_port *up = to_uart_omap_port(port);
158225
159− if (up->use_dma &&
160− up->uart_dma.tx_dma_channel != OMAP_UART_DMA_CH_FREE) {
161− /*
162− * Check if dma is still active. If yes do nothing,
163− * return. Else stop dma
164− */
165− if (omap_get_dma_active_status(up->uart_dma.tx_dma_channel))
166− return;
167− omap_stop_dma(up->uart_dma.tx_dma_channel);
168− omap_free_dma(up->uart_dma.tx_dma_channel);
169− up->uart_dma.tx_dma_channel = OMAP_UART_DMA_CH_FREE;
170− pm_runtime_mark_last_busy(&up->pdev->dev);
171− pm_runtime_put_autosuspend(&up->pdev->dev);
172− }
173−
174− pm_runtime_get_sync(&up->pdev->dev);
226+ pm_runtime_get_sync(up->dev);
175227 if (up->ier & UART_IER_THRI) {
176228 up->ier &= ~UART_IER_THRI;
177229 serial_out(up, UART_IER, up->ier);
178230 }
179231
180− if (!up->use_dma && pdata && pdata->set_forceidle)
181− pdata->set_forceidle(up->pdev);
232+ serial_omap_set_forceidle(up);
182233
183− pm_runtime_mark_last_busy(&up->pdev->dev);
184− pm_runtime_put_autosuspend(&up->pdev->dev);
234+ pm_runtime_mark_last_busy(up->dev);
235+ pm_runtime_put_autosuspend(up->dev);
185236 }
186237
187238 static void serial_omap_stop_rx(struct uart_port *port)
188239 {
189− struct uart_omap_port *up = (struct uart_omap_port *)port;
240+ struct uart_omap_port *up = to_uart_omap_port(port);
190241
191− pm_runtime_get_sync(&up->pdev->dev);
192− if (up->use_dma)
193− serial_omap_stop_rxdma(up);
242+ pm_runtime_get_sync(up->dev);
194243 up->ier &= ~UART_IER_RLSI;
195244 up->port.read_status_mask &= ~UART_LSR_DR;
196245 serial_out(up, UART_IER, up->ier);
197− pm_runtime_mark_last_busy(&up->pdev->dev);
198− pm_runtime_put_autosuspend(&up->pdev->dev);
199−}
200−
201−static inline void receive_chars(struct uart_omap_port *up,
202− unsigned int *status)
203−{
204− struct tty_struct *tty = up->port.state->port.tty;
205− unsigned int flag, lsr = *status;
206− unsigned char ch = 0;
207− int max_count = 256;
208−
209− do {
210− if (likely(lsr & UART_LSR_DR))
211− ch = serial_in(up, UART_RX);
212− flag = TTY_NORMAL;
213− up->port.icount.rx++;
214−
215− if (unlikely(lsr & UART_LSR_BRK_ERROR_BITS)) {
216− /*
217− * For statistics only
218− */
219− if (lsr & UART_LSR_BI) {
220− lsr &= ~(UART_LSR_FE | UART_LSR_PE);
221− up->port.icount.brk++;
222− /*
223− * We do the SysRQ and SAK checking
224− * here because otherwise the break
225− * may get masked by ignore_status_mask
226− * or read_status_mask.
227− */
228− if (uart_handle_break(&up->port))
229− goto ignore_char;
230− } else if (lsr & UART_LSR_PE) {
231− up->port.icount.parity++;
232− } else if (lsr & UART_LSR_FE) {
233− up->port.icount.frame++;
234− }
235−
236− if (lsr & UART_LSR_OE)
237− up->port.icount.overrun++;
238−
239− /*
240− * Mask off conditions which should be ignored.
241− */
242− lsr &= up->port.read_status_mask;
243−
244−#ifdef CONFIG_SERIAL_OMAP_CONSOLE
245− if (up->port.line == up->port.cons->index) {
246− /* Recover the break flag from console xmit */
247− lsr |= up->lsr_break_flag;
248− }
249−#endif
250− if (lsr & UART_LSR_BI)
251− flag = TTY_BREAK;
252− else if (lsr & UART_LSR_PE)
253− flag = TTY_PARITY;
254− else if (lsr & UART_LSR_FE)
255− flag = TTY_FRAME;
256− }
257−
258− if (uart_handle_sysrq_char(&up->port, ch))
259− goto ignore_char;
260− uart_insert_char(&up->port, lsr, UART_LSR_OE, ch, flag);
261−ignore_char:
262− lsr = serial_in(up, UART_LSR);
263− } while ((lsr & (UART_LSR_DR | UART_LSR_BI)) && (max_count-- > 0));
264− spin_unlock(&up->port.lock);
265− tty_flip_buffer_push(tty);
266− spin_lock(&up->port.lock);
246+ pm_runtime_mark_last_busy(up->dev);
247+ pm_runtime_put_autosuspend(up->dev);
267248 }
268249
269−static void transmit_chars(struct uart_omap_port *up)
250+static void transmit_chars(struct uart_omap_port *up, unsigned int lsr)
270251 {
271252 struct circ_buf *xmit = &up->port.state->xmit;
272253 int count;
273254
255+ if (!(lsr & UART_LSR_THRE))
256+ return;
257+
274258 if (up->port.x_char) {
275259 serial_out(up, UART_TX, up->port.x_char);
276260 up->port.icount.tx++;
@@ -290,8 +274,11 @@ static void transmit_chars(struct uart_omap_port *up) · 13 unmodified lines
290274 break;
291275 } while (--count > 0);
292276
293− if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
277+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
278+ spin_unlock(&up->port.lock);
294279 uart_write_wakeup(&up->port);
280+ spin_lock(&up->port.lock);
281+ }
295282
296283 if (uart_circ_empty(xmit))
297284 serial_omap_stop_tx(&up->port);
@@ -307,70 +294,13 @@ static inline void serial_omap_enable_ier_thri(struct uart_omap_port *up) · 9 unmodified lines
307294
308295 static void serial_omap_start_tx(struct uart_port *port)
309296 {
310− struct uart_omap_port *up = (struct uart_omap_port *)port;
311− struct omap_uart_port_info *pdata = up->pdev->dev.platform_data;
312− struct circ_buf *xmit;
313− unsigned int start;
314− int ret = 0;
315−
316− if (!up->use_dma) {
317− pm_runtime_get_sync(&up->pdev->dev);
318− serial_omap_enable_ier_thri(up);
319− if (pdata && pdata->set_noidle)
320− pdata->set_noidle(up->pdev);
321− pm_runtime_mark_last_busy(&up->pdev->dev);
322− pm_runtime_put_autosuspend(&up->pdev->dev);
323− return;
324− }
325−
326− if (up->uart_dma.tx_dma_used)
327− return;
328−
329− xmit = &up->port.state->xmit;
330−
331− if (up->uart_dma.tx_dma_channel == OMAP_UART_DMA_CH_FREE) {
332− pm_runtime_get_sync(&up->pdev->dev);
333− ret = omap_request_dma(up->uart_dma.uart_dma_tx,
334− "UART Tx DMA",
335− (void *)uart_tx_dma_callback, up,
336− &(up->uart_dma.tx_dma_channel));
297+ struct uart_omap_port *up = to_uart_omap_port(port);
337298
338− if (ret < 0) {
339− serial_omap_enable_ier_thri(up);
340− return;
341− }
342− }
343− spin_lock(&(up->uart_dma.tx_lock));
344− up->uart_dma.tx_dma_used = true;
345− spin_unlock(&(up->uart_dma.tx_lock));
346−
347− start = up->uart_dma.tx_buf_dma_phys +
348− (xmit->tail & (UART_XMIT_SIZE - 1));
349−
350− up->uart_dma.tx_buf_size = uart_circ_chars_pending(xmit);
351− /*
352− * It is a circular buffer. See if the buffer has wounded back.
353− * If yes it will have to be transferred in two separate dma
354− * transfers
355− */
356− if (start + up->uart_dma.tx_buf_size >=
357− up->uart_dma.tx_buf_dma_phys + UART_XMIT_SIZE)
358− up->uart_dma.tx_buf_size =
359− (up->uart_dma.tx_buf_dma_phys +
360− UART_XMIT_SIZE) - start;
361−
362− omap_set_dma_dest_params(up->uart_dma.tx_dma_channel, 0,
363− OMAP_DMA_AMODE_CONSTANT,
364− up->uart_dma.uart_base, 0, 0);
365− omap_set_dma_src_params(up->uart_dma.tx_dma_channel, 0,
366− OMAP_DMA_AMODE_POST_INC, start, 0, 0);
367− omap_set_dma_transfer_params(up->uart_dma.tx_dma_channel,
368− OMAP_DMA_DATA_TYPE_S8,
369− up->uart_dma.tx_buf_size, 1,
370− OMAP_DMA_SYNC_ELEMENT,
371− up->uart_dma.uart_dma_tx, 0);
372− /* FIXME: Cache maintenance needed here? */
373− omap_start_dma(up->uart_dma.tx_dma_channel);
299+ pm_runtime_get_sync(up->dev);
300+ serial_omap_enable_ier_thri(up);
301+ serial_omap_set_noidle(up);
302+ pm_runtime_mark_last_busy(up->dev);
303+ pm_runtime_put_autosuspend(up->dev);
374304 }
375305
376306 static unsigned int check_modem_status(struct uart_omap_port *up)
@@ -401,76 +331,158 @@ static unsigned int check_modem_status(struct uart_omap_port *up) · 24 unmodified lines
401331 return status;
402332 }
403333
334+static void serial_omap_rlsi(struct uart_omap_port *up, unsigned int lsr)
335+{
336+ unsigned int flag;
337+
338+ up->port.icount.rx++;
339+ flag = TTY_NORMAL;
340+
341+ if (lsr & UART_LSR_BI) {
342+ flag = TTY_BREAK;
343+ lsr &= ~(UART_LSR_FE | UART_LSR_PE);
344+ up->port.icount.brk++;
345+ /*
346+ * We do the SysRQ and SAK checking
347+ * here because otherwise the break
348+ * may get masked by ignore_status_mask
349+ * or read_status_mask.
350+ */
351+ if (uart_handle_break(&up->port))
352+ return;
353+
354+ }
355+
356+ if (lsr & UART_LSR_PE) {
357+ flag = TTY_PARITY;
358+ up->port.icount.parity++;
359+ }
360+
361+ if (lsr & UART_LSR_FE) {
362+ flag = TTY_FRAME;
363+ up->port.icount.frame++;
364+ }
365+
366+ if (lsr & UART_LSR_OE)
367+ up->port.icount.overrun++;
368+
369+#ifdef CONFIG_SERIAL_OMAP_CONSOLE
370+ if (up->port.line == up->port.cons->index) {
371+ /* Recover the break flag from console xmit */
372+ lsr |= up->lsr_break_flag;
373+ }
374+#endif
375+ uart_insert_char(&up->port, lsr, UART_LSR_OE, 0, flag);
376+}
377+
378+static void serial_omap_rdi(struct uart_omap_port *up, unsigned int lsr)
379+{
380+ unsigned char ch = 0;
381+ unsigned int flag;
382+
383+ if (!(lsr & UART_LSR_DR))
384+ return;
385+
386+ ch = serial_in(up, UART_RX);
387+ flag = TTY_NORMAL;
388+ up->port.icount.rx++;
389+
390+ if (uart_handle_sysrq_char(&up->port, ch))
391+ return;
392+
393+ uart_insert_char(&up->port, lsr, UART_LSR_OE, ch, flag);
394+}
395+
404396 /**
405397 * serial_omap_irq() - This handles the interrupt from one port
406398 * @irq: uart port irq number
407399 * @dev_id: uart port info
408400 */
409−static inline irqreturn_t serial_omap_irq(int irq, void *dev_id)
401+static irqreturn_t serial_omap_irq(int irq, void *dev_id)
410402 {
411403 struct uart_omap_port *up = dev_id;
404+ struct tty_struct *tty = up->port.state->port.tty;
412405 unsigned int iir, lsr;
413− unsigned long flags;
406+ unsigned int type;
407+ irqreturn_t ret = IRQ_NONE;
408+ int max_count = 256;
414409
415− pm_runtime_get_sync(&up->pdev->dev);
416− iir = serial_in(up, UART_IIR);
417− if (iir & UART_IIR_NO_INT) {
418− pm_runtime_mark_last_busy(&up->pdev->dev);
419− pm_runtime_put_autosuspend(&up->pdev->dev);
420− return IRQ_NONE;
421− }
410+ spin_lock(&up->port.lock);
411+ pm_runtime_get_sync(up->dev);
422412
423− spin_lock_irqsave(&up->port.lock, flags);
424− lsr = serial_in(up, UART_LSR);
425− if (iir & UART_IIR_RLSI) {
426− if (!up->use_dma) {
427− if (lsr & UART_LSR_DR)
428− receive_chars(up, &lsr);
429− } else {
430− up->ier &= ~(UART_IER_RDI | UART_IER_RLSI);
431− serial_out(up, UART_IER, up->ier);
432− if ((serial_omap_start_rxdma(up) != 0) &&
433− (lsr & UART_LSR_DR))
434− receive_chars(up, &lsr);
413+ do {
414+ iir = serial_in(up, UART_IIR);
415+ if (iir & UART_IIR_NO_INT)
416+ break;
417+
418+ ret = IRQ_HANDLED;
419+ lsr = serial_in(up, UART_LSR);
420+
421+ /* extract IRQ type from IIR register */
422+ type = iir & 0x3e;
423+
424+ switch (type) {
425+ case UART_IIR_MSI:
426+ check_modem_status(up);
427+ break;
428+ case UART_IIR_THRI:
429+ transmit_chars(up, lsr);
430+ break;
431+ case UART_IIR_RX_TIMEOUT:
432+ /* FALLTHROUGH */
433+ case UART_IIR_RDI:
434+ serial_omap_rdi(up, lsr);
435+ break;
436+ case UART_IIR_RLSI:
437+ serial_omap_rlsi(up, lsr);
438+ break;
439+ case UART_IIR_CTS_RTS_DSR:
440+ /* simply try again */
441+ break;
442+ case UART_IIR_XOFF:
443+ /* FALLTHROUGH */
444+ default:
445+ break;
435446 }
436− }
447+ } while (!(iir & UART_IIR_NO_INT) && max_count--);
437448
438− check_modem_status(up);
439− if ((lsr & UART_LSR_THRE) && (iir & UART_IIR_THRI))
440− transmit_chars(up);
449+ spin_unlock(&up->port.lock);
441450
442− spin_unlock_irqrestore(&up->port.lock, flags);
443− pm_runtime_mark_last_busy(&up->pdev->dev);
444− pm_runtime_put_autosuspend(&up->pdev->dev);
451+ tty_flip_buffer_push(tty);
445452
453+ pm_runtime_mark_last_busy(up->dev);
454+ pm_runtime_put_autosuspend(up->dev);
446455 up->port_activity = jiffies;
447− return IRQ_HANDLED;
456+
457+ return ret;
448458 }
449459
450460 static unsigned int serial_omap_tx_empty(struct uart_port *port)
451461 {
452− struct uart_omap_port *up = (struct uart_omap_port *)port;
462+ struct uart_omap_port *up = to_uart_omap_port(port);
453463 unsigned long flags = 0;
454464 unsigned int ret = 0;
455465
456− pm_runtime_get_sync(&up->pdev->dev);
466+ pm_runtime_get_sync(up->dev);
457467 dev_dbg(up->port.dev, "serial_omap_tx_empty+%d\n", up->port.line);
458468 spin_lock_irqsave(&up->port.lock, flags);
459469 ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;
460470 spin_unlock_irqrestore(&up->port.lock, flags);
461− pm_runtime_put(&up->pdev->dev);
471+ pm_runtime_mark_last_busy(up->dev);
472+ pm_runtime_put_autosuspend(up->dev);
462473 return ret;
463474 }
464475
465476 static unsigned int serial_omap_get_mctrl(struct uart_port *port)
466477 {
467− struct uart_omap_port *up = (struct uart_omap_port *)port;
478+ struct uart_omap_port *up = to_uart_omap_port(port);
468479 unsigned int status;
469480 unsigned int ret = 0;
470481
471− pm_runtime_get_sync(&up->pdev->dev);
482+ pm_runtime_get_sync(up->dev);
472483 status = check_modem_status(up);
473− pm_runtime_put(&up->pdev->dev);
484+ pm_runtime_mark_last_busy(up->dev);
485+ pm_runtime_put_autosuspend(up->dev);
474486
475487 dev_dbg(up->port.dev, "serial_omap_get_mctrl+%d\n", up->port.line);
476488
@@ -487,7 +499,7 @@ static unsigned int serial_omap_get_mctrl(struct uart_port *port) · 10 unmodified lines
487499
488500 static void serial_omap_set_mctrl(struct uart_port *port, unsigned int mctrl)
489501 {
490− struct uart_omap_port *up = (struct uart_omap_port *)port;
502+ struct uart_omap_port *up = to_uart_omap_port(port);
491503 unsigned char mcr = 0;
492504
493505 dev_dbg(up->port.dev, "serial_omap_set_mctrl+%d\n", up->port.line);
@@ -502,20 +514,31 @@ static void serial_omap_set_mctrl(struct uart_port *port, unsigned int mctrl) · 8 unmodified lines
502514 if (mctrl & TIOCM_LOOP)
503515 mcr |= UART_MCR_LOOP;
504516
505− pm_runtime_get_sync(&up->pdev->dev);
517+ pm_runtime_get_sync(up->dev);
506518 up->mcr = serial_in(up, UART_MCR);
507519 up->mcr |= mcr;
508520 serial_out(up, UART_MCR, up->mcr);
509− pm_runtime_put(&up->pdev->dev);
521+ pm_runtime_mark_last_busy(up->dev);
522+ pm_runtime_put_autosuspend(up->dev);
523+
524+ if (gpio_is_valid(up->DTR_gpio) &&
525+ !!(mctrl & TIOCM_DTR) != up->DTR_active) {
526+ up->DTR_active = !up->DTR_active;
527+ if (gpio_cansleep(up->DTR_gpio))
528+ schedule_work(&up->qos_work);
529+ else
530+ gpio_set_value(up->DTR_gpio,
531+ up->DTR_active != up->DTR_inverted);
532+ }
510533 }
511534
512535 static void serial_omap_break_ctl(struct uart_port *port, int break_state)
513536 {
514− struct uart_omap_port *up = (struct uart_omap_port *)port;
537+ struct uart_omap_port *up = to_uart_omap_port(port);
515538 unsigned long flags = 0;
516539
517540 dev_dbg(up->port.dev, "serial_omap_break_ctl+%d\n", up->port.line);
518− pm_runtime_get_sync(&up->pdev->dev);
541+ pm_runtime_get_sync(up->dev);
519542 spin_lock_irqsave(&up->port.lock, flags);
520543 if (break_state == -1)
521544 up->lcr |= UART_LCR_SBC;
@@ -523,12 +546,13 @@ static void serial_omap_break_ctl(struct uart_port *port, int break_state) · 1 unmodified line
523546 up->lcr &= ~UART_LCR_SBC;
524547 serial_out(up, UART_LCR, up->lcr);
525548 spin_unlock_irqrestore(&up->port.lock, flags);
526− pm_runtime_put(&up->pdev->dev);
549+ pm_runtime_mark_last_busy(up->dev);
550+ pm_runtime_put_autosuspend(up->dev);
527551 }
528552
529553 static int serial_omap_startup(struct uart_port *port)
530554 {
531− struct uart_omap_port *up = (struct uart_omap_port *)port;
555+ struct uart_omap_port *up = to_uart_omap_port(port);
532556 unsigned long flags = 0;
533557 int retval;
534558
@@ -542,7 +566,7 @@ static int serial_omap_startup(struct uart_port *port) · 7 unmodified lines
542566
543567 dev_dbg(up->port.dev, "serial_omap_startup+%d\n", up->port.line);
544568
545− pm_runtime_get_sync(&up->pdev->dev);
569+ pm_runtime_get_sync(up->dev);
546570 /*
547571 * Clear the FIFO buffers and disable them.
548572 * (they will be reenabled in set_termios())
@@ -573,20 +597,6 @@ static int serial_omap_startup(struct uart_port *port) · 24 unmodified lines
573597 spin_unlock_irqrestore(&up->port.lock, flags);
574598
575599 up->msr_saved_flags = 0;
576− if (up->use_dma) {
577− free_page((unsigned long)up->port.state->xmit.buf);
578− up->port.state->xmit.buf = dma_alloc_coherent(NULL,
579− UART_XMIT_SIZE,
580− (dma_addr_t *)&(up->uart_dma.tx_buf_dma_phys),
581− 0);
582− init_timer(&(up->uart_dma.rx_timer));
583− up->uart_dma.rx_timer.function = serial_omap_rxdma_poll;
584− up->uart_dma.rx_timer.data = up->port.line;
585− /* Currently the buffer size is 4KB. Can increase it */
586− up->uart_dma.rx_buf = dma_alloc_coherent(NULL,
587− up->uart_dma.rx_buf_size,
588− (dma_addr_t *)&(up->uart_dma.rx_buf_dma_phys), 0);
589− }
590600 /*
591601 * Finally, enable interrupts. Note: Modem status interrupts
592602 * are set via set_termios(), which will be occurring imminently
@@ -598,20 +608,20 @@ static int serial_omap_startup(struct uart_port *port) · 5 unmodified lines
598608 /* Enable module level wake up */
599609 serial_out(up, UART_OMAP_WER, OMAP_UART_WER_MOD_WKUP);
600610
601− pm_runtime_mark_last_busy(&up->pdev->dev);
602− pm_runtime_put_autosuspend(&up->pdev->dev);
611+ pm_runtime_mark_last_busy(up->dev);
612+ pm_runtime_put_autosuspend(up->dev);
603613 up->port_activity = jiffies;
604614 return 0;
605615 }
606616
607617 static void serial_omap_shutdown(struct uart_port *port)
608618 {
609− struct uart_omap_port *up = (struct uart_omap_port *)port;
619+ struct uart_omap_port *up = to_uart_omap_port(port);
610620 unsigned long flags = 0;
611621
612622 dev_dbg(up->port.dev, "serial_omap_shutdown+%d\n", up->port.line);
613623
614− pm_runtime_get_sync(&up->pdev->dev);
624+ pm_runtime_get_sync(up->dev);
615625 /*
616626 * Disable interrupts from this port
617627 */
@@ -634,19 +644,9 @@ static void serial_omap_shutdown(struct uart_port *port) · 16 unmodified lines
634644 */
635645 if (serial_in(up, UART_LSR) & UART_LSR_DR)
636646 (void) serial_in(up, UART_RX);
637− if (up->use_dma) {
638− dma_free_coherent(up->port.dev,
639− UART_XMIT_SIZE, up->port.state->xmit.buf,
640− up->uart_dma.tx_buf_dma_phys);
641− up->port.state->xmit.buf = NULL;
642− serial_omap_stop_rx(port);
643− dma_free_coherent(up->port.dev,
644− up->uart_dma.rx_buf_size, up->uart_dma.rx_buf,
645− up->uart_dma.rx_buf_dma_phys);
646− up->uart_dma.rx_buf = NULL;
647− }
648647
649− pm_runtime_put(&up->pdev->dev);
648+ pm_runtime_mark_last_busy(up->dev);
649+ pm_runtime_put_autosuspend(up->dev);
650650 free_irq(up->port.irq, up);
651651 }
652652
@@ -667,19 +667,19 @@ serial_omap_configure_xonxoff · 14 unmodified lines
667667
668668 /*
669669 * IXON Flag:
670− * Enable XON/XOFF flow control on output.
671− * Transmit XON1, XOFF1
670+ * Flow control for OMAP.TX
671+ * OMAP.RX should listen for XON/XOFF
672672 */
673673 if (termios->c_iflag & IXON)
674− up->efr |= OMAP_UART_SW_TX;
674+ up->efr |= OMAP_UART_SW_RX;
675675
676676 /*
677677 * IXOFF Flag:
678− * Enable XON/XOFF flow control on input.
679− * Receiver compares XON1, XOFF1.
678+ * Flow control for OMAP.RX
679+ * OMAP.TX should send XON/XOFF
680680 */
681681 if (termios->c_iflag & IXOFF)
682− up->efr |= OMAP_UART_SW_RX;
682+ up->efr |= OMAP_UART_SW_TX;
683683
684684 serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
685685 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
@@ -715,13 +715,16 @@ static void serial_omap_uart_qos_work(struct work_struct *work) · 29 unmodified lines
715715 qos_work);
716716
717717 pm_qos_update_request(&up->pm_qos_request, up->latency);
718+ if (gpio_is_valid(up->DTR_gpio))
719+ gpio_set_value_cansleep(up->DTR_gpio,
720+ up->DTR_active != up->DTR_inverted);
718721 }
719722
720723 static void
721724 serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
722725 struct ktermios *old)
723726 {
724− struct uart_omap_port *up = (struct uart_omap_port *)port;
727+ struct uart_omap_port *up = to_uart_omap_port(port);
725728 unsigned char cval = 0;
726729 unsigned char efr = 0;
727730 unsigned long flags = 0;
@@ -768,14 +771,12 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios, · 40 unmodified lines
768771
769772 up->fcr = UART_FCR_R_TRIG_01 | UART_FCR_T_TRIG_01 |
770773 UART_FCR_ENABLE_FIFO;
771− if (up->use_dma)
772− up->fcr |= UART_FCR_DMA_SELECT;
773774
774775 /*
775776 * Ok, we're now changing the port state. Do it with
776777 * interrupts disabled.
777778 */
778− pm_runtime_get_sync(&up->pdev->dev);
779+ pm_runtime_get_sync(up->dev);
779780 spin_lock_irqsave(&up->port.lock, flags);
780781
781782 /*
@@ -845,14 +846,13 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios, · 63 unmodified lines
845846
846847 up->scr |= OMAP_UART_SCR_RX_TRIG_GRANU1_MASK;
847848
848− if (up->use_dma) {
849− serial_out(up, UART_TI752_TLR, 0);
850− up->scr |= UART_FCR_TRIGGER_4;
851− } else {
852− /* Set receive FIFO threshold to 1 byte */
853− up->fcr &= ~OMAP_UART_FCR_RX_FIFO_TRIG_MASK;
854− up->fcr |= (0x1 << OMAP_UART_FCR_RX_FIFO_TRIG_SHIFT);
855− }
849+ /* Set receive FIFO threshold to 16 characters and
850+ * transmit FIFO threshold to 16 spaces
851+ */
852+ up->fcr &= ~OMAP_UART_FCR_RX_FIFO_TRIG_MASK;
853+ up->fcr &= ~OMAP_UART_FCR_TX_FIFO_TRIG_MASK;
854+ up->fcr |= UART_FCR6_R_TRIGGER_16 | UART_FCR6_T_TRIGGER_24 |
855+ UART_FCR_ENABLE_FIFO;
856856
857857 serial_out(up, UART_FCR, up->fcr);
858858 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
@@ -924,20 +924,30 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios, · 65 unmodified lines
924924 serial_omap_configure_xonxoff(up, termios);
925925
926926 spin_unlock_irqrestore(&up->port.lock, flags);
927− pm_runtime_put(&up->pdev->dev);
927+ pm_runtime_mark_last_busy(up->dev);
928+ pm_runtime_put_autosuspend(up->dev);
928929 dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->port.line);
929930 }
930931
932+static int serial_omap_set_wake(struct uart_port *port, unsigned int state)
933+{
934+ struct uart_omap_port *up = to_uart_omap_port(port);
935+
936+ serial_omap_enable_wakeup(up, state);
937+
938+ return 0;
939+}
940+
931941 static void
932942 serial_omap_pm(struct uart_port *port, unsigned int state,
933943 unsigned int oldstate)
934944 {
935− struct uart_omap_port *up = (struct uart_omap_port *)port;
945+ struct uart_omap_port *up = to_uart_omap_port(port);
936946 unsigned char efr;
937947
938948 dev_dbg(up->port.dev, "serial_omap_pm+%d\n", up->port.line);
939949
940− pm_runtime_get_sync(&up->pdev->dev);
950+ pm_runtime_get_sync(up->dev);
941951 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
942952 efr = serial_in(up, UART_EFR);
943953 serial_out(up, UART_EFR, efr | UART_EFR_ECB);
@@ -948,14 +958,15 @@ serial_omap_pm(struct uart_port *port, unsigned int state, · 4 unmodified lines
948958 serial_out(up, UART_EFR, efr);
949959 serial_out(up, UART_LCR, 0);
950960
951− if (!device_may_wakeup(&up->pdev->dev)) {
961+ if (!device_may_wakeup(up->dev)) {
952962 if (!state)
953− pm_runtime_forbid(&up->pdev->dev);
963+ pm_runtime_forbid(up->dev);
954964 else
955− pm_runtime_allow(&up->pdev->dev);
965+ pm_runtime_allow(up->dev);
956966 }
957967
958− pm_runtime_put(&up->pdev->dev);
968+ pm_runtime_mark_last_busy(up->dev);
969+ pm_runtime_put_autosuspend(up->dev);
959970 }
960971
961972 static void serial_omap_release_port(struct uart_port *port)
@@ -971,7 +982,7 @@ static int serial_omap_request_port(struct uart_port *port) · 9 unmodified lines
971982
972983 static void serial_omap_config_port(struct uart_port *port, int flags)
973984 {
974− struct uart_omap_port *up = (struct uart_omap_port *)port;
985+ struct uart_omap_port *up = to_uart_omap_port(port);
975986
976987 dev_dbg(up->port.dev, "serial_omap_config_port+%d\n",
977988 up->port.line);
@@ -989,7 +1000,7 @@ serial_omap_verify_port(struct uart_port *port, struct serial_struct *ser) · 11 unmodified lines
9891000 static const char *
9901001 serial_omap_type(struct uart_port *port)
9911002 {
992− struct uart_omap_port *up = (struct uart_omap_port *)port;
1003+ struct uart_omap_port *up = to_uart_omap_port(port);
9931004
9941005 dev_dbg(up->port.dev, "serial_omap_type+%d\n", up->port.line);
9951006 return up->name;
@@ -1032,26 +1043,33 @@ static inline void wait_for_xmitr(struct uart_omap_port *up) · 36 unmodified lines
10321043
10331044 static void serial_omap_poll_put_char(struct uart_port *port, unsigned char ch)
10341045 {
1035− struct uart_omap_port *up = (struct uart_omap_port *)port;
1046+ struct uart_omap_port *up = to_uart_omap_port(port);
10361047
1037− pm_runtime_get_sync(&up->pdev->dev);
1048+ pm_runtime_get_sync(up->dev);
10381049 wait_for_xmitr(up);
10391050 serial_out(up, UART_TX, ch);
1040− pm_runtime_put(&up->pdev->dev);
1051+ pm_runtime_mark_last_busy(up->dev);
1052+ pm_runtime_put_autosuspend(up->dev);
10411053 }
10421054
10431055 static int serial_omap_poll_get_char(struct uart_port *port)
10441056 {
1045− struct uart_omap_port *up = (struct uart_omap_port *)port;
1057+ struct uart_omap_port *up = to_uart_omap_port(port);
10461058 unsigned int status;
10471059
1048− pm_runtime_get_sync(&up->pdev->dev);
1060+ pm_runtime_get_sync(up->dev);
10491061 status = serial_in(up, UART_LSR);
1050− if (!(status & UART_LSR_DR))
1051− return NO_POLL_CHAR;
1062+ if (!(status & UART_LSR_DR)) {
1063+ status = NO_POLL_CHAR;
1064+ goto out;
1065+ }
10521066
10531067 status = serial_in(up, UART_RX);
1054− pm_runtime_put(&up->pdev->dev);
1068+
1069+out:
1070+ pm_runtime_mark_last_busy(up->dev);
1071+ pm_runtime_put_autosuspend(up->dev);
1072+
10551073 return status;
10561074 }
10571075
@@ -1065,7 +1083,7 @@ static struct uart_driver serial_omap_reg; · 7 unmodified lines
10651083
10661084 static void serial_omap_console_putchar(struct uart_port *port, int ch)
10671085 {
1068− struct uart_omap_port *up = (struct uart_omap_port *)port;
1086+ struct uart_omap_port *up = to_uart_omap_port(port);
10691087
10701088 wait_for_xmitr(up);
10711089 serial_out(up, UART_TX, ch);
@@ -1080,7 +1098,7 @@ serial_omap_console_write(struct console *co, const char *s, · 8 unmodified lines
10801098 unsigned int ier;
10811099 int locked = 1;
10821100
1083− pm_runtime_get_sync(&up->pdev->dev);
1101+ pm_runtime_get_sync(up->dev);
10841102
10851103 local_irq_save(flags);
10861104 if (up->port.sysrq)
@@ -1114,8 +1132,8 @@ serial_omap_console_write(struct console *co, const char *s, · 27 unmodified lines
11141132 if (up->msr_saved_flags)
11151133 check_modem_status(up);
11161134
1117− pm_runtime_mark_last_busy(&up->pdev->dev);
1118− pm_runtime_put_autosuspend(&up->pdev->dev);
1135+ pm_runtime_mark_last_busy(up->dev);
1136+ pm_runtime_put_autosuspend(up->dev);
11191137 if (locked)
11201138 spin_unlock(&up->port.lock);
11211139 local_irq_restore(flags);
@@ -1179,6 +1197,7 @@ static struct uart_ops serial_omap_pops = { · 57 unmodified lines
11791197 .shutdown = serial_omap_shutdown,
11801198 .set_termios = serial_omap_set_termios,
11811199 .pm = serial_omap_pm,
1200+ .set_wake = serial_omap_set_wake,
11821201 .type = serial_omap_type,
11831202 .release_port = serial_omap_release_port,
11841203 .request_port = serial_omap_request_port,
@@ -1221,150 +1240,7 @@ static int serial_omap_resume(struct device *dev) · 36 unmodified lines
12211240 }
12221241 #endif
12231242
1224−static void serial_omap_rxdma_poll(unsigned long uart_no)
1225−{
1226− struct uart_omap_port *up = ui[uart_no];
1227− unsigned int curr_dma_pos, curr_transmitted_size;
1228− int ret = 0;
1229−
1230− curr_dma_pos = omap_get_dma_dst_pos(up->uart_dma.rx_dma_channel);
1231− if ((curr_dma_pos == up->uart_dma.prev_rx_dma_pos) ||
1232− (curr_dma_pos == 0)) {
1233− if (jiffies_to_msecs(jiffies - up->port_activity) <
1234− up->uart_dma.rx_timeout) {
1235− mod_timer(&up->uart_dma.rx_timer, jiffies +
1236− usecs_to_jiffies(up->uart_dma.rx_poll_rate));
1237− } else {
1238− serial_omap_stop_rxdma(up);
1239− up->ier |= (UART_IER_RDI | UART_IER_RLSI);
1240− serial_out(up, UART_IER, up->ier);
1241− }
1242− return;
1243− }
1244−
1245− curr_transmitted_size = curr_dma_pos -
1246− up->uart_dma.prev_rx_dma_pos;
1247− up->port.icount.rx += curr_transmitted_size;
1248− tty_insert_flip_string(up->port.state->port.tty,
1249− up->uart_dma.rx_buf +
1250− (up->uart_dma.prev_rx_dma_pos -
1251− up->uart_dma.rx_buf_dma_phys),
1252− curr_transmitted_size);
1253− tty_flip_buffer_push(up->port.state->port.tty);
1254− up->uart_dma.prev_rx_dma_pos = curr_dma_pos;
1255− if (up->uart_dma.rx_buf_size +
1256− up->uart_dma.rx_buf_dma_phys == curr_dma_pos) {
1257− ret = serial_omap_start_rxdma(up);
1258− if (ret < 0) {
1259− serial_omap_stop_rxdma(up);
1260− up->ier |= (UART_IER_RDI | UART_IER_RLSI);
1261− serial_out(up, UART_IER, up->ier);
1262− }
1263− } else {
1264− mod_timer(&up->uart_dma.rx_timer, jiffies +
1265− usecs_to_jiffies(up->uart_dma.rx_poll_rate));
1266− }
1267− up->port_activity = jiffies;
1268−}
1269−
1270−static void uart_rx_dma_callback(int lch, u16 ch_status, void *data)
1271−{
1272− return;
1273−}
1274−
1275−static int serial_omap_start_rxdma(struct uart_omap_port *up)
1276−{
1277− int ret = 0;
1278−
1279− if (up->uart_dma.rx_dma_channel == -1) {
1280− pm_runtime_get_sync(&up->pdev->dev);
1281− ret = omap_request_dma(up->uart_dma.uart_dma_rx,
1282− "UART Rx DMA",
1283− (void *)uart_rx_dma_callback, up,
1284− &(up->uart_dma.rx_dma_channel));
1285− if (ret < 0)
1286− return ret;
1287−
1288− omap_set_dma_src_params(up->uart_dma.rx_dma_channel, 0,
1289− OMAP_DMA_AMODE_CONSTANT,
1290− up->uart_dma.uart_base, 0, 0);
1291− omap_set_dma_dest_params(up->uart_dma.rx_dma_channel, 0,
1292− OMAP_DMA_AMODE_POST_INC,
1293− up->uart_dma.rx_buf_dma_phys, 0, 0);
1294− omap_set_dma_transfer_params(up->uart_dma.rx_dma_channel,
1295− OMAP_DMA_DATA_TYPE_S8,
1296− up->uart_dma.rx_buf_size, 1,
1297− OMAP_DMA_SYNC_ELEMENT,
1298− up->uart_dma.uart_dma_rx, 0);
1299− }
1300− up->uart_dma.prev_rx_dma_pos = up->uart_dma.rx_buf_dma_phys;
1301− /* FIXME: Cache maintenance needed here? */
1302− omap_start_dma(up->uart_dma.rx_dma_channel);
1303− mod_timer(&up->uart_dma.rx_timer, jiffies +
1304− usecs_to_jiffies(up->uart_dma.rx_poll_rate));
1305− up->uart_dma.rx_dma_used = true;
1306− return ret;
1307−}
1308−
1309−static void serial_omap_continue_tx(struct uart_omap_port *up)
1310−{
1311− struct circ_buf *xmit = &up->port.state->xmit;
1312− unsigned int start = up->uart_dma.tx_buf_dma_phys
1313− + (xmit->tail & (UART_XMIT_SIZE - 1));
1314−
1315− if (uart_circ_empty(xmit))
1316− return;
1317−
1318− up->uart_dma.tx_buf_size = uart_circ_chars_pending(xmit);
1319− /*
1320− * It is a circular buffer. See if the buffer has wounded back.
1321− * If yes it will have to be transferred in two separate dma
1322− * transfers
1323− */
1324− if (start + up->uart_dma.tx_buf_size >=
1325− up->uart_dma.tx_buf_dma_phys + UART_XMIT_SIZE)
1326− up->uart_dma.tx_buf_size =
1327− (up->uart_dma.tx_buf_dma_phys + UART_XMIT_SIZE) - start;
1328− omap_set_dma_dest_params(up->uart_dma.tx_dma_channel, 0,
1329− OMAP_DMA_AMODE_CONSTANT,
1330− up->uart_dma.uart_base, 0, 0);
1331− omap_set_dma_src_params(up->uart_dma.tx_dma_channel, 0,
1332− OMAP_DMA_AMODE_POST_INC, start, 0, 0);
1333− omap_set_dma_transfer_params(up->uart_dma.tx_dma_channel,
1334− OMAP_DMA_DATA_TYPE_S8,
1335− up->uart_dma.tx_buf_size, 1,
1336− OMAP_DMA_SYNC_ELEMENT,
1337− up->uart_dma.uart_dma_tx, 0);
1338− /* FIXME: Cache maintenance needed here? */
1339− omap_start_dma(up->uart_dma.tx_dma_channel);
1340−}
1341−
1342−static void uart_tx_dma_callback(int lch, u16 ch_status, void *data)
1343−{
1344− struct uart_omap_port *up = (struct uart_omap_port *)data;
1345− struct circ_buf *xmit = &up->port.state->xmit;
1346−
1347− xmit->tail = (xmit->tail + up->uart_dma.tx_buf_size) & \
1348− (UART_XMIT_SIZE - 1);
1349− up->port.icount.tx += up->uart_dma.tx_buf_size;
1350−
1351− if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
1352− uart_write_wakeup(&up->port);
1353−
1354− if (uart_circ_empty(xmit)) {
1355− spin_lock(&(up->uart_dma.tx_lock));
1356− serial_omap_stop_tx(&up->port);
1357− up->uart_dma.tx_dma_used = false;
1358− spin_unlock(&(up->uart_dma.tx_lock));
1359− } else {
1360− omap_stop_dma(up->uart_dma.tx_dma_channel);
1361− serial_omap_continue_tx(up);
1362− }
1363− up->port_activity = jiffies;
1364− return;
1365−}
1366−
1367−static void omap_serial_fill_features_erratas(struct uart_omap_port *up)
1243+static void __devinit omap_serial_fill_features_erratas(struct uart_omap_port *up)
13681244 {
13691245 u32 mvr, scheme;
13701246 u16 revision, major, minor;
@@ -1389,7 +1265,7 @@ static void omap_serial_fill_features_erratas(struct uart_omap_port *up) · 18 unmodified lines
13891265 minor = (mvr & OMAP_UART_MVR_MIN_MASK);
13901266 break;
13911267 default:
1392− dev_warn(&up->pdev->dev,
1268+ dev_warn(up->dev,
13931269 "Unknown %s revision, defaulting to highest\n",
13941270 up->name);
13951271 /* highest possible revision */
@@ -1417,7 +1293,7 @@ static void omap_serial_fill_features_erratas(struct uart_omap_port *up) · 21 unmodified lines
14171293 }
14181294 }
14191295
1420−static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
1296+static __devinit struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
14211297 {
14221298 struct omap_uart_port_info *omap_up_info;
14231299
@@ -1430,12 +1306,12 @@ static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev) · 6 unmodified lines
14301306 return omap_up_info;
14311307 }
14321308
1433−static int serial_omap_probe(struct platform_device *pdev)
1309+static int __devinit serial_omap_probe(struct platform_device *pdev)
14341310 {
14351311 struct uart_omap_port *up;
1436− struct resource *mem, *irq, *dma_tx, *dma_rx;
1312+ struct resource *mem, *irq;
14371313 struct omap_uart_port_info *omap_up_info = pdev->dev.platform_data;
1438− int ret = -ENOSPC;
1314+ int ret;
14391315
14401316 if (pdev->dev.of_node)
14411317 omap_up_info = of_get_uart_port_info(&pdev->dev);
@@ -1458,19 +1334,30 @@ static int serial_omap_probe(struct platform_device *pdev) · 16 unmodified lines
14581334 return -EBUSY;
14591335 }
14601336
1461− dma_rx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
1462− if (!dma_rx)
1463− return -ENXIO;
1464−
1465− dma_tx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
1466− if (!dma_tx)
1467− return -ENXIO;
1337+ if (gpio_is_valid(omap_up_info->DTR_gpio) &&
1338+ omap_up_info->DTR_present) {
1339+ ret = gpio_request(omap_up_info->DTR_gpio, "omap-serial");
1340+ if (ret < 0)
1341+ return ret;
1342+ ret = gpio_direction_output(omap_up_info->DTR_gpio,
1343+ omap_up_info->DTR_inverted);
1344+ if (ret < 0)
1345+ return ret;
1346+ }
14681347
14691348 up = devm_kzalloc(&pdev->dev, sizeof(*up), GFP_KERNEL);
14701349 if (!up)
14711350 return -ENOMEM;
14721351
1473− up->pdev = pdev;
1352+ if (gpio_is_valid(omap_up_info->DTR_gpio) &&
1353+ omap_up_info->DTR_present) {
1354+ up->DTR_gpio = omap_up_info->DTR_gpio;
1355+ up->DTR_inverted = omap_up_info->DTR_inverted;
1356+ } else
1357+ up->DTR_gpio = -EINVAL;
1358+ up->DTR_active = 0;
1359+
1360+ up->dev = &pdev->dev;
14741361 up->port.dev = &pdev->dev;
14751362 up->port.type = PORT_OMAP;
14761363 up->port.iotype = UPIO_MEM;
@@ -1492,6 +1379,13 @@ static int serial_omap_probe(struct platform_device *pdev) · 15 unmodified lines
14921379 goto err_port_line;
14931380 }
14941381
1382+ up->pins = devm_pinctrl_get_select_default(&pdev->dev);
1383+ if (IS_ERR(up->pins)) {
1384+ dev_warn(&pdev->dev, "did not get pins for uart%i error: %li\n",
1385+ up->port.line, PTR_ERR(up->pins));
1386+ up->pins = NULL;
1387+ }
1388+
14951389 sprintf(up->name, "OMAP UART%d", up->port.line);
14961390 up->port.mapbase = mem->start;
14971391 up->port.membase = devm_ioremap(&pdev->dev, mem->start,
@@ -1509,20 +1403,6 @@ static int serial_omap_probe(struct platform_device *pdev) · 11 unmodified lines
15091403 dev_warn(&pdev->dev, "No clock speed specified: using default:"
15101404 "%d\n", DEFAULT_CLK_SPEED);
15111405 }
1512− up->uart_dma.uart_base = mem->start;
1513−
1514− if (omap_up_info->dma_enabled) {
1515− up->uart_dma.uart_dma_tx = dma_tx->start;
1516− up->uart_dma.uart_dma_rx = dma_rx->start;
1517− up->use_dma = 1;
1518− up->uart_dma.rx_buf_size = omap_up_info->dma_rx_buf_size;
1519− up->uart_dma.rx_timeout = omap_up_info->dma_rx_timeout;
1520− up->uart_dma.rx_poll_rate = omap_up_info->dma_rx_poll_rate;
1521− spin_lock_init(&(up->uart_dma.tx_lock));
1522− spin_lock_init(&(up->uart_dma.rx_lock));
1523− up->uart_dma.tx_dma_channel = OMAP_UART_DMA_CH_FREE;
1524− up->uart_dma.rx_dma_channel = OMAP_UART_DMA_CH_FREE;
1525− }
15261406
15271407 up->latency = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE;
15281408 up->calc_latency = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE;
@@ -1531,12 +1411,13 @@ static int serial_omap_probe(struct platform_device *pdev) · 2 unmodified lines
15311411 serial_omap_uart_wq = create_singlethread_workqueue(up->name);
15321412 INIT_WORK(&up->qos_work, serial_omap_uart_qos_work);
15331413
1414+ platform_set_drvdata(pdev, up);
1415+ pm_runtime_enable(&pdev->dev);
15341416 pm_runtime_use_autosuspend(&pdev->dev);
15351417 pm_runtime_set_autosuspend_delay(&pdev->dev,
15361418 omap_up_info->autosuspend_timeout);
15371419
15381420 pm_runtime_irq_safe(&pdev->dev);
1539− pm_runtime_enable(&pdev->dev);
15401421 pm_runtime_get_sync(&pdev->dev);
15411422
15421423 omap_serial_fill_features_erratas(up);
@@ -1548,8 +1429,8 @@ static int serial_omap_probe(struct platform_device *pdev) · 5 unmodified lines
15481429 if (ret != 0)
15491430 goto err_add_port;
15501431
1551− pm_runtime_put(&pdev->dev);
1552− platform_set_drvdata(pdev, up);
1432+ pm_runtime_mark_last_busy(up->dev);
1433+ pm_runtime_put_autosuspend(up->dev);
15531434 return 0;
15541435
15551436 err_add_port:
@@ -1562,17 +1443,15 @@ err_port_line: · 6 unmodified lines
15621443 return ret;
15631444 }
15641445
1565−static int serial_omap_remove(struct platform_device *dev)
1446+static int __devexit serial_omap_remove(struct platform_device *dev)
15661447 {
15671448 struct uart_omap_port *up = platform_get_drvdata(dev);
15681449
1569− if (up) {
1570− pm_runtime_disable(&up->pdev->dev);
1571− uart_remove_one_port(&serial_omap_reg, &up->port);
1572− pm_qos_remove_request(&up->pm_qos_request);
1573− }
1450+ pm_runtime_put_sync(up->dev);
1451+ pm_runtime_disable(up->dev);
1452+ uart_remove_one_port(&serial_omap_reg, &up->port);
1453+ pm_qos_remove_request(&up->pm_qos_request);
15741454
1575− platform_set_drvdata(dev, NULL);
15761455 return 0;
15771456 }
15781457
@@ -1602,7 +1481,7 @@ static void serial_omap_mdr1_errataset(struct uart_omap_port *up, u8 mdr1) · 23 unmodified lines
16021481 timeout--;
16031482 if (!timeout) {
16041483 /* Should *never* happen. we warn and carry on */
1605− dev_crit(&up->pdev->dev, "Errata i202: timedout %x\n",
1484+ dev_crit(up->dev, "Errata i202: timedout %x\n",
16061485 serial_in(up, UART_LSR));
16071486 break;
16081487 }
@@ -1648,29 +1527,23 @@ static int serial_omap_runtime_suspend(struct device *dev) · 39 unmodified lines
16481527 if (!up)
16491528 return -EINVAL;
16501529
1651− if (!pdata || !pdata->enable_wakeup)
1530+ if (!pdata)
16521531 return 0;
16531532
1654− if (pdata->get_context_loss_count)
1655− up->context_loss_cnt = pdata->get_context_loss_count(dev);
1533+ up->context_loss_cnt = serial_omap_get_context_loss_count(up);
16561534
16571535 if (device_may_wakeup(dev)) {
16581536 if (!up->wakeups_enabled) {
1659− pdata->enable_wakeup(up->pdev, true);
1537+ serial_omap_enable_wakeup(up, true);
16601538 up->wakeups_enabled = true;
16611539 }
16621540 } else {
16631541 if (up->wakeups_enabled) {
1664− pdata->enable_wakeup(up->pdev, false);
1542+ serial_omap_enable_wakeup(up, false);
16651543 up->wakeups_enabled = false;
16661544 }
16671545 }
16681546
1669− /* Errata i291 */
1670− if (up->use_dma && pdata->set_forceidle &&
1671− (up->errata & UART_ERRATA_i291_DMA_FORCEIDLE))
1672− pdata->set_forceidle(up->pdev);
1673−
16741547 up->latency = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE;
16751548 schedule_work(&up->qos_work);
16761549
@@ -1683,17 +1556,10 @@ static int serial_omap_runtime_resume(struct device *dev) · 6 unmodified lines
16831556 struct omap_uart_port_info *pdata = dev->platform_data;
16841557
16851558 if (up && pdata) {
1686− if (pdata->get_context_loss_count) {
1687− u32 loss_cnt = pdata->get_context_loss_count(dev);
1559+ u32 loss_cnt = serial_omap_get_context_loss_count(up);
16881560
16891561 if (up->context_loss_cnt != loss_cnt)
16901562 serial_omap_restore_context(up);
1691− }
1692−
1693− /* Errata i291 */
1694− if (up->use_dma && pdata->set_noidle &&
1695− (up->errata & UART_ERRATA_i291_DMA_FORCEIDLE))
1696− pdata->set_noidle(up->pdev);
16971563
16981564 up->latency = up->calc_latency;
16991565 schedule_work(&up->qos_work);
@@ -1721,7 +1587,7 @@ MODULE_DEVICE_TABLE(of, omap_serial_of_match); · 21 unmodified lines
17211587
17221588 static struct platform_driver serial_omap_driver = {
17231589 .probe = serial_omap_probe,
1724− .remove = serial_omap_remove,
1590+ .remove = __devexit_p(serial_omap_remove),
17251591 .driver = {
17261592 .name = DRIVER_NAME,
17271593 .pm = &serial_omap_dev_pm_ops,
drivers/tty/serial/pch_uart.c+4−0
@@ -979,6 +979,10 @@ static unsigned int dma_handle_tx(struct eg20t_port *priv) · 978 unmodified lines
979979 priv->tx_dma_use = 1;
980980
981981 priv->sg_tx_p = kzalloc(sizeof(struct scatterlist)*num, GFP_ATOMIC);
982+ if (!priv->sg_tx_p) {
983+ dev_err(priv->port.dev, "%s:kzalloc Failed\n", __func__);
984+ return 0;
985+ }
982986
983987 sg_init_table(priv->sg_tx_p, num); /* Initialize SG table */
984988 sg = priv->sg_tx_p;
drivers/tty/serial/pxa.c+14−0
@@ -670,9 +670,19 @@ serial_pxa_console_write(struct console *co, const char *s, unsigned int count) · 669 unmodified lines
670670 {
671671 struct uart_pxa_port *up = serial_pxa_ports[co->index];
672672 unsigned int ier;
673+ unsigned long flags;
674+ int locked = 1;
673675
674676 clk_prepare_enable(up->clk);
675677
678+ local_irq_save(flags);
679+ if (up->port.sysrq)
680+ locked = 0;
681+ else if (oops_in_progress)
682+ locked = spin_trylock(&up->port.lock);
683+ else
684+ spin_lock(&up->port.lock);
685+
676686 /*
677687 * First save the IER then disable the interrupts
678688 */
@@ -688,6 +698,10 @@ serial_pxa_console_write(struct console *co, const char *s, unsigned int count) · 9 unmodified lines
688698 wait_for_xmitr(up);
689699 serial_out(up, UART_IER, ier);
690700
701+ if (locked)
702+ spin_unlock(&up->port.lock);
703+ local_irq_restore(flags);
704+
691705 clk_disable_unprepare(up->clk);
692706 }
693707
drivers/tty/serial/samsung.c+25−21
@@ -82,7 +82,7 @@ static inline const char *s3c24xx_serial_portname(struct uart_port *port) · 81 unmodified lines
8282
8383 static int s3c24xx_serial_txempty_nofifo(struct uart_port *port)
8484 {
85− return (rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE);
85+ return rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE;
8686 }
8787
8888 /*
@@ -268,7 +268,7 @@ s3c24xx_serial_rx_chars(int irq, void *dev_id) · 179 unmodified lines
268268 dbg("break!\n");
269269 port->icount.brk++;
270270 if (uart_handle_break(port))
271− goto ignore_char;
271+ goto ignore_char;
272272 }
273273
274274 if (uerstat & S3C2410_UERSTAT_FRAME)
@@ -459,7 +459,7 @@ static int s3c24xx_serial_startup(struct uart_port *port) · 184 unmodified lines
459459 s3c24xx_serial_portname(port), ourport);
460460
461461 if (ret != 0) {
462− printk(KERN_ERR "cannot get irq %d\n", ourport->rx_irq);
462+ dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq);
463463 return ret;
464464 }
465465
@@ -473,7 +473,7 @@ static int s3c24xx_serial_startup(struct uart_port *port) · 7 unmodified lines
473473 s3c24xx_serial_portname(port), ourport);
474474
475475 if (ret) {
476− printk(KERN_ERR "cannot get irq %d\n", ourport->tx_irq);
476+ dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq);
477477 goto err;
478478 }
479479
@@ -502,7 +502,7 @@ static int s3c64xx_serial_startup(struct uart_port *port) · 22 unmodified lines
502502 ret = request_irq(port->irq, s3c64xx_serial_handle_irq, IRQF_SHARED,
503503 s3c24xx_serial_portname(port), ourport);
504504 if (ret) {
505− printk(KERN_ERR "cannot get irq %d\n", port->irq);
505+ dev_err(port->dev, "cannot get irq %d\n", port->irq);
506506 return ret;
507507 }
508508
@@ -529,7 +529,7 @@ static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level, · 20 unmodified lines
529529
530530 switch (level) {
531531 case 3:
532− if (!IS_ERR(ourport->baudclk) && ourport->baudclk != NULL)
532+ if (!IS_ERR(ourport->baudclk))
533533 clk_disable(ourport->baudclk);
534534
535535 clk_disable(ourport->clk);
@@ -538,12 +538,12 @@ static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level, · 2 unmodified lines
538538 case 0:
539539 clk_enable(ourport->clk);
540540
541− if (!IS_ERR(ourport->baudclk) && ourport->baudclk != NULL)
541+ if (!IS_ERR(ourport->baudclk))
542542 clk_enable(ourport->baudclk);
543543
544544 break;
545545 default:
546− printk(KERN_ERR "s3c24xx_serial: unknown pm %d\n", level);
546+ dev_err(port->dev, "s3c24xx_serial: unknown pm %d\n", level);
547547 }
548548 }
549549
@@ -604,7 +604,6 @@ static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport, · 54 unmodified lines
604604 char clkname[MAX_CLK_NAME_LENGTH];
605605 int calc_deviation, deviation = (1 << 30) - 1;
606606
607− *best_clk = NULL;
608607 clk_sel = (ourport->cfg->clk_sel) ? ourport->cfg->clk_sel :
609608 ourport->info->def_clk_sel;
610609 for (cnt = 0; cnt < info->num_clks; cnt++) {
@@ -613,7 +612,7 @@ static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport, · 2 unmodified lines
613612
614613 sprintf(clkname, "clk_uart_baud%d", cnt);
615614 clk = clk_get(ourport->port.dev, clkname);
616− if (IS_ERR_OR_NULL(clk))
615+ if (IS_ERR(clk))
617616 continue;
618617
619618 rate = clk_get_rate(clk);
@@ -684,7 +683,7 @@ static void s3c24xx_serial_set_termios(struct uart_port *port, · 64 unmodified lines
684683 {
685684 struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port);
686685 struct s3c24xx_uart_port *ourport = to_ourport(port);
687− struct clk *clk = NULL;
686+ struct clk *clk = ERR_PTR(-EINVAL);
688687 unsigned long flags;
689688 unsigned int baud, quot, clk_sel = 0;
690689 unsigned int ulcon;
@@ -705,7 +704,7 @@ static void s3c24xx_serial_set_termios(struct uart_port *port, · 14 unmodified lines
705704 quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel);
706705 if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
707706 quot = port->custom_divisor;
708− if (!clk)
707+ if (IS_ERR(clk))
709708 return;
710709
711710 /* check to see if we need to change clock source */
@@ -713,9 +712,9 @@ static void s3c24xx_serial_set_termios(struct uart_port *port, · 1 unmodified line
713712 if (ourport->baudclk != clk) {
714713 s3c24xx_serial_setsource(port, clk_sel);
715714
716− if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) {
715+ if (!IS_ERR(ourport->baudclk)) {
717716 clk_disable(ourport->baudclk);
718− ourport->baudclk = NULL;
717+ ourport->baudclk = ERR_PTR(-EINVAL);
719718 }
720719
721720 clk_enable(clk);
@@ -1036,10 +1035,10 @@ static int s3c24xx_serial_cpufreq_transition(struct notifier_block *nb, · 314 unmodified lines
10361035 if (tty == NULL)
10371036 goto exit;
10381037
1039− termios = tty->termios;
1038+ termios = &tty->termios;
10401039
10411040 if (termios == NULL) {
1042− printk(KERN_WARNING "%s: no termios?\n", __func__);
1041+ dev_warn(uport->dev, "%s: no termios?\n", __func__);
10431042 goto exit;
10441043 }
10451044
@@ -1114,7 +1113,7 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, · 68 unmodified lines
11141113
11151114 res = platform_get_resource(platdev, IORESOURCE_MEM, 0);
11161115 if (res == NULL) {
1117− printk(KERN_ERR "failed to find memory resource for uart\n");
1116+ dev_err(port->dev, "failed to find memory resource for uart\n");
11181117 return -EINVAL;
11191118 }
11201119
@@ -1130,7 +1129,7 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, · 9 unmodified lines
11301129 ourport->rx_irq = ret;
11311130 ourport->tx_irq = ret + 1;
11321131 }
1133−
1132+
11341133 ret = platform_get_irq(platdev, 1);
11351134 if (ret > 0)
11361135 ourport->tx_irq = ret;
@@ -1160,7 +1159,11 @@ static ssize_t s3c24xx_serial_show_clksrc(struct device *dev, · 23 unmodified lines
11601159 struct uart_port *port = s3c24xx_dev_to_port(dev);
11611160 struct s3c24xx_uart_port *ourport = to_ourport(port);
11621161
1163− return snprintf(buf, PAGE_SIZE, "* %s\n", ourport->baudclk->name);
1162+ if (IS_ERR(ourport->baudclk))
1163+ return -EINVAL;
1164+
1165+ return snprintf(buf, PAGE_SIZE, "* %s\n",
1166+ ourport->baudclk->name ?: "(null)");
11641167 }
11651168
11661169 static DEVICE_ATTR(clock_source, S_IRUGO, s3c24xx_serial_show_clksrc, NULL);
@@ -1200,6 +1203,7 @@ static int s3c24xx_serial_probe(struct platform_device *pdev) · 33 unmodified lines
12001203 return -ENODEV;
12011204 }
12021205
1206+ ourport->baudclk = ERR_PTR(-EINVAL);
12031207 ourport->info = ourport->drv_data->info;
12041208 ourport->cfg = (pdev->dev.platform_data) ?
12051209 (struct s3c2410_uartcfg *)pdev->dev.platform_data :
@@ -1387,7 +1391,7 @@ s3c24xx_serial_get_options(struct uart_port *port, int *baud, · 181 unmodified lines
13871391 sprintf(clk_name, "clk_uart_baud%d", clk_sel);
13881392
13891393 clk = clk_get(port->dev, clk_name);
1390− if (!IS_ERR(clk) && clk != NULL)
1394+ if (!IS_ERR(clk))
13911395 rate = clk_get_rate(clk);
13921396 else
13931397 rate = 1;
@@ -1679,7 +1683,7 @@ static int __init s3c24xx_serial_modinit(void) · 285 unmodified lines
16791683
16801684 ret = uart_register_driver(&s3c24xx_uart_drv);
16811685 if (ret < 0) {
1682− printk(KERN_ERR "failed to register UART driver\n");
1686+ pr_err("Failed to register Samsung UART driver\n");
16831687 return -1;
16841688 }
16851689
drivers/tty/serial/sc26xx.c+4−0
@@ -20,6 +20,10 @@ · 19 unmodified lines
2020 #include <linux/init.h>
2121 #include <linux/platform_device.h>
2222 #include <linux/irq.h>
23+#include <linux/io.h>
24+
25+#warning "Please try migrate to use new driver SCCNXP and report the status" \
26+ "in the linux-serial mailing list."
2327
2428 #if defined(CONFIG_MAGIC_SYSRQ)
2529 #define SUPPORT_SYSRQ
drivers/tty/serial/sccnxp.c+985−0
@@ -0,0 +1,985 @@
1+/*
2+ * NXP (Philips) SCC+++(SCN+++) serial driver
3+ *
4+ * Copyright (C) 2012 Alexander Shiyan <shc_work@mail.ru>
5+ *
6+ * Based on sc26xx.c, by Thomas Bogendörfer (tsbogend@alpha.franken.de)
7+ *
8+ * This program is free software; you can redistribute it and/or modify
9+ * it under the terms of the GNU General Public License as published by
10+ * the Free Software Foundation; either version 2 of the License, or
11+ * (at your option) any later version.
12+ */
13+
14+#if defined(CONFIG_SERIAL_SCCNXP_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
15+#define SUPPORT_SYSRQ
16+#endif
17+
18+#include <linux/module.h>
19+#include <linux/device.h>
20+#include <linux/console.h>
21+#include <linux/serial_core.h>
22+#include <linux/serial.h>
23+#include <linux/io.h>
24+#include <linux/tty.h>
25+#include <linux/tty_flip.h>
26+#include <linux/platform_device.h>
27+#include <linux/platform_data/sccnxp.h>
28+
29+#define SCCNXP_NAME "uart-sccnxp"
30+#define SCCNXP_MAJOR 204
31+#define SCCNXP_MINOR 205
32+
33+#define SCCNXP_MR_REG (0x00)
34+# define MR0_BAUD_NORMAL (0 << 0)
35+# define MR0_BAUD_EXT1 (1 << 0)
36+# define MR0_BAUD_EXT2 (5 << 0)
37+# define MR0_FIFO (1 << 3)
38+# define MR0_TXLVL (1 << 4)
39+# define MR1_BITS_5 (0 << 0)
40+# define MR1_BITS_6 (1 << 0)
41+# define MR1_BITS_7 (2 << 0)
42+# define MR1_BITS_8 (3 << 0)
43+# define MR1_PAR_EVN (0 << 2)
44+# define MR1_PAR_ODD (1 << 2)
45+# define MR1_PAR_NO (4 << 2)
46+# define MR2_STOP1 (7 << 0)
47+# define MR2_STOP2 (0xf << 0)
48+#define SCCNXP_SR_REG (0x01)
49+#define SCCNXP_CSR_REG SCCNXP_SR_REG
50+# define SR_RXRDY (1 << 0)
51+# define SR_FULL (1 << 1)
52+# define SR_TXRDY (1 << 2)
53+# define SR_TXEMT (1 << 3)
54+# define SR_OVR (1 << 4)
55+# define SR_PE (1 << 5)
56+# define SR_FE (1 << 6)
57+# define SR_BRK (1 << 7)
58+#define SCCNXP_CR_REG (0x02)
59+# define CR_RX_ENABLE (1 << 0)
60+# define CR_RX_DISABLE (1 << 1)
61+# define CR_TX_ENABLE (1 << 2)
62+# define CR_TX_DISABLE (1 << 3)
63+# define CR_CMD_MRPTR1 (0x01 << 4)
64+# define CR_CMD_RX_RESET (0x02 << 4)
65+# define CR_CMD_TX_RESET (0x03 << 4)
66+# define CR_CMD_STATUS_RESET (0x04 << 4)
67+# define CR_CMD_BREAK_RESET (0x05 << 4)
68+# define CR_CMD_START_BREAK (0x06 << 4)
69+# define CR_CMD_STOP_BREAK (0x07 << 4)
70+# define CR_CMD_MRPTR0 (0x0b << 4)
71+#define SCCNXP_RHR_REG (0x03)
72+#define SCCNXP_THR_REG SCCNXP_RHR_REG
73+#define SCCNXP_IPCR_REG (0x04)
74+#define SCCNXP_ACR_REG SCCNXP_IPCR_REG
75+# define ACR_BAUD0 (0 << 7)
76+# define ACR_BAUD1 (1 << 7)
77+# define ACR_TIMER_MODE (6 << 4)
78+#define SCCNXP_ISR_REG (0x05)
79+#define SCCNXP_IMR_REG SCCNXP_ISR_REG
80+# define IMR_TXRDY (1 << 0)
81+# define IMR_RXRDY (1 << 1)
82+# define ISR_TXRDY(x) (1 << ((x * 4) + 0))
83+# define ISR_RXRDY(x) (1 << ((x * 4) + 1))
84+#define SCCNXP_IPR_REG (0x0d)
85+#define SCCNXP_OPCR_REG SCCNXP_IPR_REG
86+#define SCCNXP_SOP_REG (0x0e)
87+#define SCCNXP_ROP_REG (0x0f)
88+
89+/* Route helpers */
90+#define MCTRL_MASK(sig) (0xf << (sig))
91+#define MCTRL_IBIT(cfg, sig) ((((cfg) >> (sig)) & 0xf) - LINE_IP0)
92+#define MCTRL_OBIT(cfg, sig) ((((cfg) >> (sig)) & 0xf) - LINE_OP0)
93+
94+/* Supported chip types */
95+enum {
96+ SCCNXP_TYPE_SC2681 = 2681,
97+ SCCNXP_TYPE_SC2691 = 2691,
98+ SCCNXP_TYPE_SC2692 = 2692,
99+ SCCNXP_TYPE_SC2891 = 2891,
100+ SCCNXP_TYPE_SC2892 = 2892,
101+ SCCNXP_TYPE_SC28202 = 28202,
102+ SCCNXP_TYPE_SC68681 = 68681,
103+ SCCNXP_TYPE_SC68692 = 68692,
104+};
105+
106+struct sccnxp_port {
107+ struct uart_driver uart;
108+ struct uart_port port[SCCNXP_MAX_UARTS];
109+
110+ const char *name;
111+ int irq;
112+
113+ u8 imr;
114+ u8 addr_mask;
115+ int freq_std;
116+
117+ int flags;
118+#define SCCNXP_HAVE_IO 0x00000001
119+#define SCCNXP_HAVE_MR0 0x00000002
120+
121+#ifdef CONFIG_SERIAL_SCCNXP_CONSOLE
122+ struct console console;
123+#endif
124+
125+ struct mutex sccnxp_mutex;
126+
127+ struct sccnxp_pdata pdata;
128+};
129+
130+static inline u8 sccnxp_raw_read(void __iomem *base, u8 reg, u8 shift)
131+{
132+ return readb(base + (reg << shift));
133+}
134+
135+static inline void sccnxp_raw_write(void __iomem *base, u8 reg, u8 shift, u8 v)
136+{
137+ writeb(v, base + (reg << shift));
138+}
139+
140+static inline u8 sccnxp_read(struct uart_port *port, u8 reg)
141+{
142+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
143+
144+ return sccnxp_raw_read(port->membase, reg & s->addr_mask,
145+ port->regshift);
146+}
147+
148+static inline void sccnxp_write(struct uart_port *port, u8 reg, u8 v)
149+{
150+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
151+
152+ sccnxp_raw_write(port->membase, reg & s->addr_mask, port->regshift, v);
153+}
154+
155+static inline u8 sccnxp_port_read(struct uart_port *port, u8 reg)
156+{
157+ return sccnxp_read(port, (port->line << 3) + reg);
158+}
159+
160+static inline void sccnxp_port_write(struct uart_port *port, u8 reg, u8 v)
161+{
162+ sccnxp_write(port, (port->line << 3) + reg, v);
163+}
164+
165+static int sccnxp_update_best_err(int a, int b, int *besterr)
166+{
167+ int err = abs(a - b);
168+
169+ if ((*besterr < 0) || (*besterr > err)) {
170+ *besterr = err;
171+ return 0;
172+ }
173+
174+ return 1;
175+}
176+
177+struct baud_table {
178+ u8 csr;
179+ u8 acr;
180+ u8 mr0;
181+ int baud;
182+};
183+
184+const struct baud_table baud_std[] = {
185+ { 0, ACR_BAUD0, MR0_BAUD_NORMAL, 50, },
186+ { 0, ACR_BAUD1, MR0_BAUD_NORMAL, 75, },
187+ { 1, ACR_BAUD0, MR0_BAUD_NORMAL, 110, },
188+ { 2, ACR_BAUD0, MR0_BAUD_NORMAL, 134, },
189+ { 3, ACR_BAUD1, MR0_BAUD_NORMAL, 150, },
190+ { 3, ACR_BAUD0, MR0_BAUD_NORMAL, 200, },
191+ { 4, ACR_BAUD0, MR0_BAUD_NORMAL, 300, },
192+ { 0, ACR_BAUD1, MR0_BAUD_EXT1, 450, },
193+ { 1, ACR_BAUD0, MR0_BAUD_EXT2, 880, },
194+ { 3, ACR_BAUD1, MR0_BAUD_EXT1, 900, },
195+ { 5, ACR_BAUD0, MR0_BAUD_NORMAL, 600, },
196+ { 7, ACR_BAUD0, MR0_BAUD_NORMAL, 1050, },
197+ { 2, ACR_BAUD0, MR0_BAUD_EXT2, 1076, },
198+ { 6, ACR_BAUD0, MR0_BAUD_NORMAL, 1200, },
199+ { 10, ACR_BAUD1, MR0_BAUD_NORMAL, 1800, },
200+ { 7, ACR_BAUD1, MR0_BAUD_NORMAL, 2000, },
201+ { 8, ACR_BAUD0, MR0_BAUD_NORMAL, 2400, },
202+ { 5, ACR_BAUD1, MR0_BAUD_EXT1, 3600, },
203+ { 9, ACR_BAUD0, MR0_BAUD_NORMAL, 4800, },
204+ { 10, ACR_BAUD0, MR0_BAUD_NORMAL, 7200, },
205+ { 11, ACR_BAUD0, MR0_BAUD_NORMAL, 9600, },
206+ { 8, ACR_BAUD0, MR0_BAUD_EXT1, 14400, },
207+ { 12, ACR_BAUD1, MR0_BAUD_NORMAL, 19200, },
208+ { 9, ACR_BAUD0, MR0_BAUD_EXT1, 28800, },
209+ { 12, ACR_BAUD0, MR0_BAUD_NORMAL, 38400, },
210+ { 11, ACR_BAUD0, MR0_BAUD_EXT1, 57600, },
211+ { 12, ACR_BAUD1, MR0_BAUD_EXT1, 115200, },
212+ { 12, ACR_BAUD0, MR0_BAUD_EXT1, 230400, },
213+ { 0, 0, 0, 0 }
214+};
215+
216+static void sccnxp_set_baud(struct uart_port *port, int baud)
217+{
218+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
219+ int div_std, tmp_baud, bestbaud = baud, besterr = -1;
220+ u8 i, acr = 0, csr = 0, mr0 = 0;
221+
222+ /* Find best baud from table */
223+ for (i = 0; baud_std[i].baud && besterr; i++) {
224+ if (baud_std[i].mr0 && !(s->flags & SCCNXP_HAVE_MR0))
225+ continue;
226+ div_std = DIV_ROUND_CLOSEST(s->freq_std, baud_std[i].baud);
227+ tmp_baud = DIV_ROUND_CLOSEST(port->uartclk, div_std);
228+ if (!sccnxp_update_best_err(baud, tmp_baud, &besterr)) {
229+ acr = baud_std[i].acr;
230+ csr = baud_std[i].csr;
231+ mr0 = baud_std[i].mr0;
232+ bestbaud = tmp_baud;
233+ }
234+ }
235+
236+ if (s->flags & SCCNXP_HAVE_MR0) {
237+ /* Enable FIFO, set half level for TX */
238+ mr0 |= MR0_FIFO | MR0_TXLVL;
239+ /* Update MR0 */
240+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_MRPTR0);
241+ sccnxp_port_write(port, SCCNXP_MR_REG, mr0);
242+ }
243+
244+ sccnxp_port_write(port, SCCNXP_ACR_REG, acr | ACR_TIMER_MODE);
245+ sccnxp_port_write(port, SCCNXP_CSR_REG, (csr << 4) | csr);
246+
247+ dev_dbg(port->dev, "Baudrate desired: %i, calculated: %i\n",
248+ baud, bestbaud);
249+}
250+
251+static void sccnxp_enable_irq(struct uart_port *port, int mask)
252+{
253+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
254+
255+ s->imr |= mask << (port->line * 4);
256+ sccnxp_write(port, SCCNXP_IMR_REG, s->imr);
257+}
258+
259+static void sccnxp_disable_irq(struct uart_port *port, int mask)
260+{
261+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
262+
263+ s->imr &= ~(mask << (port->line * 4));
264+ sccnxp_write(port, SCCNXP_IMR_REG, s->imr);
265+}
266+
267+static void sccnxp_set_bit(struct uart_port *port, int sig, int state)
268+{
269+ u8 bitmask;
270+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
271+
272+ if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(sig)) {
273+ bitmask = 1 << MCTRL_OBIT(s->pdata.mctrl_cfg[port->line], sig);
274+ if (state)
275+ sccnxp_write(port, SCCNXP_SOP_REG, bitmask);
276+ else
277+ sccnxp_write(port, SCCNXP_ROP_REG, bitmask);
278+ }
279+}
280+
281+static void sccnxp_handle_rx(struct uart_port *port)
282+{
283+ u8 sr;
284+ unsigned int ch, flag;
285+ struct tty_struct *tty = tty_port_tty_get(&port->state->port);
286+
287+ if (!tty)
288+ return;
289+
290+ for (;;) {
291+ sr = sccnxp_port_read(port, SCCNXP_SR_REG);
292+ if (!(sr & SR_RXRDY))
293+ break;
294+ sr &= SR_PE | SR_FE | SR_OVR | SR_BRK;
295+
296+ ch = sccnxp_port_read(port, SCCNXP_RHR_REG);
297+
298+ port->icount.rx++;
299+ flag = TTY_NORMAL;
300+
301+ if (unlikely(sr)) {
302+ if (sr & SR_BRK) {
303+ port->icount.brk++;
304+ if (uart_handle_break(port))
305+ continue;
306+ } else if (sr & SR_PE)
307+ port->icount.parity++;
308+ else if (sr & SR_FE)
309+ port->icount.frame++;
310+ else if (sr & SR_OVR)
311+ port->icount.overrun++;
312+
313+ sr &= port->read_status_mask;
314+ if (sr & SR_BRK)
315+ flag = TTY_BREAK;
316+ else if (sr & SR_PE)
317+ flag = TTY_PARITY;
318+ else if (sr & SR_FE)
319+ flag = TTY_FRAME;
320+ else if (sr & SR_OVR)
321+ flag = TTY_OVERRUN;
322+ }
323+
324+ if (uart_handle_sysrq_char(port, ch))
325+ continue;
326+
327+ if (sr & port->ignore_status_mask)
328+ continue;
329+
330+ uart_insert_char(port, sr, SR_OVR, ch, flag);
331+ }
332+
333+ tty_flip_buffer_push(tty);
334+
335+ tty_kref_put(tty);
336+}
337+
338+static void sccnxp_handle_tx(struct uart_port *port)
339+{
340+ u8 sr;
341+ struct circ_buf *xmit = &port->state->xmit;
342+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
343+
344+ if (unlikely(port->x_char)) {
345+ sccnxp_port_write(port, SCCNXP_THR_REG, port->x_char);
346+ port->icount.tx++;
347+ port->x_char = 0;
348+ return;
349+ }
350+
351+ if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
352+ /* Disable TX if FIFO is empty */
353+ if (sccnxp_port_read(port, SCCNXP_SR_REG) & SR_TXEMT) {
354+ sccnxp_disable_irq(port, IMR_TXRDY);
355+
356+ /* Set direction to input */
357+ if (s->flags & SCCNXP_HAVE_IO)
358+ sccnxp_set_bit(port, DIR_OP, 0);
359+ }
360+ return;
361+ }
362+
363+ while (!uart_circ_empty(xmit)) {
364+ sr = sccnxp_port_read(port, SCCNXP_SR_REG);
365+ if (!(sr & SR_TXRDY))
366+ break;
367+
368+ sccnxp_port_write(port, SCCNXP_THR_REG, xmit->buf[xmit->tail]);
369+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
370+ port->icount.tx++;
371+ }
372+
373+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
374+ uart_write_wakeup(port);
375+}
376+
377+static irqreturn_t sccnxp_ist(int irq, void *dev_id)
378+{
379+ int i;
380+ u8 isr;
381+ struct sccnxp_port *s = (struct sccnxp_port *)dev_id;
382+
383+ mutex_lock(&s->sccnxp_mutex);
384+
385+ for (;;) {
386+ isr = sccnxp_read(&s->port[0], SCCNXP_ISR_REG);
387+ isr &= s->imr;
388+ if (!isr)
389+ break;
390+
391+ dev_dbg(s->port[0].dev, "IRQ status: 0x%02x\n", isr);
392+
393+ for (i = 0; i < s->uart.nr; i++) {
394+ if (isr & ISR_RXRDY(i))
395+ sccnxp_handle_rx(&s->port[i]);
396+ if (isr & ISR_TXRDY(i))
397+ sccnxp_handle_tx(&s->port[i]);
398+ }
399+ }
400+
401+ mutex_unlock(&s->sccnxp_mutex);
402+
403+ return IRQ_HANDLED;
404+}
405+
406+static void sccnxp_start_tx(struct uart_port *port)
407+{
408+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
409+
410+ mutex_lock(&s->sccnxp_mutex);
411+
412+ /* Set direction to output */
413+ if (s->flags & SCCNXP_HAVE_IO)
414+ sccnxp_set_bit(port, DIR_OP, 1);
415+
416+ sccnxp_enable_irq(port, IMR_TXRDY);
417+
418+ mutex_unlock(&s->sccnxp_mutex);
419+}
420+
421+static void sccnxp_stop_tx(struct uart_port *port)
422+{
423+ /* Do nothing */
424+}
425+
426+static void sccnxp_stop_rx(struct uart_port *port)
427+{
428+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
429+
430+ mutex_lock(&s->sccnxp_mutex);
431+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_RX_DISABLE);
432+ mutex_unlock(&s->sccnxp_mutex);
433+}
434+
435+static unsigned int sccnxp_tx_empty(struct uart_port *port)
436+{
437+ u8 val;
438+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
439+
440+ mutex_lock(&s->sccnxp_mutex);
441+ val = sccnxp_port_read(port, SCCNXP_SR_REG);
442+ mutex_unlock(&s->sccnxp_mutex);
443+
444+ return (val & SR_TXEMT) ? TIOCSER_TEMT : 0;
445+}
446+
447+static void sccnxp_enable_ms(struct uart_port *port)
448+{
449+ /* Do nothing */
450+}
451+
452+static void sccnxp_set_mctrl(struct uart_port *port, unsigned int mctrl)
453+{
454+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
455+
456+ if (!(s->flags & SCCNXP_HAVE_IO))
457+ return;
458+
459+ mutex_lock(&s->sccnxp_mutex);
460+
461+ sccnxp_set_bit(port, DTR_OP, mctrl & TIOCM_DTR);
462+ sccnxp_set_bit(port, RTS_OP, mctrl & TIOCM_RTS);
463+
464+ mutex_unlock(&s->sccnxp_mutex);
465+}
466+
467+static unsigned int sccnxp_get_mctrl(struct uart_port *port)
468+{
469+ u8 bitmask, ipr;
470+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
471+ unsigned int mctrl = TIOCM_DSR | TIOCM_CTS | TIOCM_CAR;
472+
473+ if (!(s->flags & SCCNXP_HAVE_IO))
474+ return mctrl;
475+
476+ mutex_lock(&s->sccnxp_mutex);
477+
478+ ipr = ~sccnxp_read(port, SCCNXP_IPCR_REG);
479+
480+ if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(DSR_IP)) {
481+ bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line],
482+ DSR_IP);
483+ mctrl &= ~TIOCM_DSR;
484+ mctrl |= (ipr & bitmask) ? TIOCM_DSR : 0;
485+ }
486+ if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(CTS_IP)) {
487+ bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line],
488+ CTS_IP);
489+ mctrl &= ~TIOCM_CTS;
490+ mctrl |= (ipr & bitmask) ? TIOCM_CTS : 0;
491+ }
492+ if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(DCD_IP)) {
493+ bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line],
494+ DCD_IP);
495+ mctrl &= ~TIOCM_CAR;
496+ mctrl |= (ipr & bitmask) ? TIOCM_CAR : 0;
497+ }
498+ if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(RNG_IP)) {
499+ bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line],
500+ RNG_IP);
501+ mctrl &= ~TIOCM_RNG;
502+ mctrl |= (ipr & bitmask) ? TIOCM_RNG : 0;
503+ }
504+
505+ mutex_unlock(&s->sccnxp_mutex);
506+
507+ return mctrl;
508+}
509+
510+static void sccnxp_break_ctl(struct uart_port *port, int break_state)
511+{
512+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
513+
514+ mutex_lock(&s->sccnxp_mutex);
515+ sccnxp_port_write(port, SCCNXP_CR_REG, break_state ?
516+ CR_CMD_START_BREAK : CR_CMD_STOP_BREAK);
517+ mutex_unlock(&s->sccnxp_mutex);
518+}
519+
520+static void sccnxp_set_termios(struct uart_port *port,
521+ struct ktermios *termios, struct ktermios *old)
522+{
523+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
524+ u8 mr1, mr2;
525+ int baud;
526+
527+ mutex_lock(&s->sccnxp_mutex);
528+
529+ /* Mask termios capabilities we don't support */
530+ termios->c_cflag &= ~CMSPAR;
531+ termios->c_iflag &= ~(IXON | IXOFF | IXANY);
532+
533+ /* Disable RX & TX, reset break condition, status and FIFOs */
534+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_RX_RESET |
535+ CR_RX_DISABLE | CR_TX_DISABLE);
536+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_TX_RESET);
537+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_STATUS_RESET);
538+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_BREAK_RESET);
539+
540+ /* Word size */
541+ switch (termios->c_cflag & CSIZE) {
542+ case CS5:
543+ mr1 = MR1_BITS_5;
544+ break;
545+ case CS6:
546+ mr1 = MR1_BITS_6;
547+ break;
548+ case CS7:
549+ mr1 = MR1_BITS_7;
550+ break;
551+ default:
552+ case CS8:
553+ mr1 = MR1_BITS_8;
554+ break;
555+ }
556+
557+ /* Parity */
558+ if (termios->c_cflag & PARENB) {
559+ if (termios->c_cflag & PARODD)
560+ mr1 |= MR1_PAR_ODD;
561+ } else
562+ mr1 |= MR1_PAR_NO;
563+
564+ /* Stop bits */
565+ mr2 = (termios->c_cflag & CSTOPB) ? MR2_STOP2 : MR2_STOP1;
566+
567+ /* Update desired format */
568+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_MRPTR1);
569+ sccnxp_port_write(port, SCCNXP_MR_REG, mr1);
570+ sccnxp_port_write(port, SCCNXP_MR_REG, mr2);
571+
572+ /* Set read status mask */
573+ port->read_status_mask = SR_OVR;
574+ if (termios->c_iflag & INPCK)
575+ port->read_status_mask |= SR_PE | SR_FE;
576+ if (termios->c_iflag & (BRKINT | PARMRK))
577+ port->read_status_mask |= SR_BRK;
578+
579+ /* Set status ignore mask */
580+ port->ignore_status_mask = 0;
581+ if (termios->c_iflag & IGNBRK)
582+ port->ignore_status_mask |= SR_BRK;
583+ if (!(termios->c_cflag & CREAD))
584+ port->ignore_status_mask |= SR_PE | SR_OVR | SR_FE | SR_BRK;
585+
586+ /* Setup baudrate */
587+ baud = uart_get_baud_rate(port, termios, old, 50,
588+ (s->flags & SCCNXP_HAVE_MR0) ?
589+ 230400 : 38400);
590+ sccnxp_set_baud(port, baud);
591+
592+ /* Update timeout according to new baud rate */
593+ uart_update_timeout(port, termios->c_cflag, baud);
594+
595+ /* Enable RX & TX */
596+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_RX_ENABLE | CR_TX_ENABLE);
597+
598+ mutex_unlock(&s->sccnxp_mutex);
599+}
600+
601+static int sccnxp_startup(struct uart_port *port)
602+{
603+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
604+
605+ mutex_lock(&s->sccnxp_mutex);
606+
607+ if (s->flags & SCCNXP_HAVE_IO) {
608+ /* Outputs are controlled manually */
609+ sccnxp_write(port, SCCNXP_OPCR_REG, 0);
610+ }
611+
612+ /* Reset break condition, status and FIFOs */
613+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_RX_RESET);
614+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_TX_RESET);
615+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_STATUS_RESET);
616+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_CMD_BREAK_RESET);
617+
618+ /* Enable RX & TX */
619+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_RX_ENABLE | CR_TX_ENABLE);
620+
621+ /* Enable RX interrupt */
622+ sccnxp_enable_irq(port, IMR_RXRDY);
623+
624+ mutex_unlock(&s->sccnxp_mutex);
625+
626+ return 0;
627+}
628+
629+static void sccnxp_shutdown(struct uart_port *port)
630+{
631+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
632+
633+ mutex_lock(&s->sccnxp_mutex);
634+
635+ /* Disable interrupts */
636+ sccnxp_disable_irq(port, IMR_TXRDY | IMR_RXRDY);
637+
638+ /* Disable TX & RX */
639+ sccnxp_port_write(port, SCCNXP_CR_REG, CR_RX_DISABLE | CR_TX_DISABLE);
640+
641+ /* Leave direction to input */
642+ if (s->flags & SCCNXP_HAVE_IO)
643+ sccnxp_set_bit(port, DIR_OP, 0);
644+
645+ mutex_unlock(&s->sccnxp_mutex);
646+}
647+
648+static const char *sccnxp_type(struct uart_port *port)
649+{
650+ struct sccnxp_port *s = dev_get_drvdata(port->dev);
651+
652+ return (port->type == PORT_SC26XX) ? s->name : NULL;
653+}
654+
655+static void sccnxp_release_port(struct uart_port *port)
656+{
657+ /* Do nothing */
658+}
659+
660+static int sccnxp_request_port(struct uart_port *port)
661+{
662+ /* Do nothing */
663+ return 0;
664+}
665+
666+static void sccnxp_config_port(struct uart_port *port, int flags)
667+{
668+ if (flags & UART_CONFIG_TYPE)
669+ port->type = PORT_SC26XX;
670+}
671+
672+static int sccnxp_verify_port(struct uart_port *port, struct serial_struct *s)
673+{
674+ if ((s->type == PORT_UNKNOWN) || (s->type == PORT_SC26XX))
675+ return 0;
676+ if (s->irq == port->irq)
677+ return 0;
678+
679+ return -EINVAL;
680+}
681+
682+static const struct uart_ops sccnxp_ops = {
683+ .tx_empty = sccnxp_tx_empty,
684+ .set_mctrl = sccnxp_set_mctrl,
685+ .get_mctrl = sccnxp_get_mctrl,
686+ .stop_tx = sccnxp_stop_tx,
687+ .start_tx = sccnxp_start_tx,
688+ .stop_rx = sccnxp_stop_rx,
689+ .enable_ms = sccnxp_enable_ms,
690+ .break_ctl = sccnxp_break_ctl,
691+ .startup = sccnxp_startup,
692+ .shutdown = sccnxp_shutdown,
693+ .set_termios = sccnxp_set_termios,
694+ .type = sccnxp_type,
695+ .release_port = sccnxp_release_port,
696+ .request_port = sccnxp_request_port,
697+ .config_port = sccnxp_config_port,
698+ .verify_port = sccnxp_verify_port,
699+};
700+
701+#ifdef CONFIG_SERIAL_SCCNXP_CONSOLE
702+static void sccnxp_console_putchar(struct uart_port *port, int c)
703+{
704+ int tryes = 100000;
705+
706+ while (tryes--) {
707+ if (sccnxp_port_read(port, SCCNXP_SR_REG) & SR_TXRDY) {
708+ sccnxp_port_write(port, SCCNXP_THR_REG, c);
709+ break;
710+ }
711+ barrier();
712+ }
713+}
714+
715+static void sccnxp_console_write(struct console *co, const char *c, unsigned n)
716+{
717+ struct sccnxp_port *s = (struct sccnxp_port *)co->data;
718+ struct uart_port *port = &s->port[co->index];
719+
720+ mutex_lock(&s->sccnxp_mutex);
721+ uart_console_write(port, c, n, sccnxp_console_putchar);
722+ mutex_unlock(&s->sccnxp_mutex);
723+}
724+
725+static int sccnxp_console_setup(struct console *co, char *options)
726+{
727+ struct sccnxp_port *s = (struct sccnxp_port *)co->data;
728+ struct uart_port *port = &s->port[(co->index > 0) ? co->index : 0];
729+ int baud = 9600, bits = 8, parity = 'n', flow = 'n';
730+
731+ if (options)
732+ uart_parse_options(options, &baud, &parity, &bits, &flow);
733+
734+ return uart_set_options(port, co, baud, parity, bits, flow);
735+}
736+#endif
737+
738+static int __devinit sccnxp_probe(struct platform_device *pdev)
739+{
740+ struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
741+ int chiptype = pdev->id_entry->driver_data;
742+ struct sccnxp_pdata *pdata = dev_get_platdata(&pdev->dev);
743+ int i, ret, fifosize, freq_min, freq_max;
744+ struct sccnxp_port *s;
745+ void __iomem *membase;
746+
747+ if (!res) {
748+ dev_err(&pdev->dev, "Missing memory resource data\n");
749+ return -EADDRNOTAVAIL;
750+ }
751+
752+ dev_set_name(&pdev->dev, SCCNXP_NAME);
753+
754+ s = devm_kzalloc(&pdev->dev, sizeof(struct sccnxp_port), GFP_KERNEL);
755+ if (!s) {
756+ dev_err(&pdev->dev, "Error allocating port structure\n");
757+ return -ENOMEM;
758+ }
759+ platform_set_drvdata(pdev, s);
760+
761+ mutex_init(&s->sccnxp_mutex);
762+
763+ /* Individual chip settings */
764+ switch (chiptype) {
765+ case SCCNXP_TYPE_SC2681:
766+ s->name = "SC2681";
767+ s->uart.nr = 2;
768+ s->freq_std = 3686400;
769+ s->addr_mask = 0x0f;
770+ s->flags = SCCNXP_HAVE_IO;
771+ fifosize = 3;
772+ freq_min = 1000000;
773+ freq_max = 4000000;
774+ break;
775+ case SCCNXP_TYPE_SC2691:
776+ s->name = "SC2691";
777+ s->uart.nr = 1;
778+ s->freq_std = 3686400;
779+ s->addr_mask = 0x07;
780+ s->flags = 0;
781+ fifosize = 3;
782+ freq_min = 1000000;
783+ freq_max = 4000000;
784+ break;
785+ case SCCNXP_TYPE_SC2692:
786+ s->name = "SC2692";
787+ s->uart.nr = 2;
788+ s->freq_std = 3686400;
789+ s->addr_mask = 0x0f;
790+ s->flags = SCCNXP_HAVE_IO;
791+ fifosize = 3;
792+ freq_min = 1000000;
793+ freq_max = 4000000;
794+ break;
795+ case SCCNXP_TYPE_SC2891:
796+ s->name = "SC2891";
797+ s->uart.nr = 1;
798+ s->freq_std = 3686400;
799+ s->addr_mask = 0x0f;
800+ s->flags = SCCNXP_HAVE_IO | SCCNXP_HAVE_MR0;
801+ fifosize = 16;
802+ freq_min = 100000;
803+ freq_max = 8000000;
804+ break;
805+ case SCCNXP_TYPE_SC2892:
806+ s->name = "SC2892";
807+ s->uart.nr = 2;
808+ s->freq_std = 3686400;
809+ s->addr_mask = 0x0f;
810+ s->flags = SCCNXP_HAVE_IO | SCCNXP_HAVE_MR0;
811+ fifosize = 16;
812+ freq_min = 100000;
813+ freq_max = 8000000;
814+ break;
815+ case SCCNXP_TYPE_SC28202:
816+ s->name = "SC28202";
817+ s->uart.nr = 2;
818+ s->freq_std = 14745600;
819+ s->addr_mask = 0x7f;
820+ s->flags = SCCNXP_HAVE_IO | SCCNXP_HAVE_MR0;
821+ fifosize = 256;
822+ freq_min = 1000000;
823+ freq_max = 50000000;
824+ break;
825+ case SCCNXP_TYPE_SC68681:
826+ s->name = "SC68681";
827+ s->uart.nr = 2;
828+ s->freq_std = 3686400;
829+ s->addr_mask = 0x0f;
830+ s->flags = SCCNXP_HAVE_IO;
831+ fifosize = 3;
832+ freq_min = 1000000;
833+ freq_max = 4000000;
834+ break;
835+ case SCCNXP_TYPE_SC68692:
836+ s->name = "SC68692";
837+ s->uart.nr = 2;
838+ s->freq_std = 3686400;
839+ s->addr_mask = 0x0f;
840+ s->flags = SCCNXP_HAVE_IO;
841+ fifosize = 3;
842+ freq_min = 1000000;
843+ freq_max = 4000000;
844+ break;
845+ default:
846+ dev_err(&pdev->dev, "Unsupported chip type %i\n", chiptype);
847+ ret = -ENOTSUPP;
848+ goto err_out;
849+ }
850+
851+ if (!pdata) {
852+ dev_warn(&pdev->dev,
853+ "No platform data supplied, using defaults\n");
854+ s->pdata.frequency = s->freq_std;
855+ } else
856+ memcpy(&s->pdata, pdata, sizeof(struct sccnxp_pdata));
857+
858+ s->irq = platform_get_irq(pdev, 0);
859+ if (s->irq <= 0) {
860+ dev_err(&pdev->dev, "Missing irq resource data\n");
861+ ret = -ENXIO;
862+ goto err_out;
863+ }
864+
865+ /* Check input frequency */
866+ if ((s->pdata.frequency < freq_min) ||
867+ (s->pdata.frequency > freq_max)) {
868+ dev_err(&pdev->dev, "Frequency out of bounds\n");
869+ ret = -EINVAL;
870+ goto err_out;
871+ }
872+
873+ membase = devm_request_and_ioremap(&pdev->dev, res);
874+ if (!membase) {
875+ dev_err(&pdev->dev, "Failed to ioremap\n");
876+ ret = -EIO;
877+ goto err_out;
878+ }
879+
880+ s->uart.owner = THIS_MODULE;
881+ s->uart.dev_name = "ttySC";
882+ s->uart.major = SCCNXP_MAJOR;
883+ s->uart.minor = SCCNXP_MINOR;
884+#ifdef CONFIG_SERIAL_SCCNXP_CONSOLE
885+ s->uart.cons = &s->console;
886+ s->uart.cons->device = uart_console_device;
887+ s->uart.cons->write = sccnxp_console_write;
888+ s->uart.cons->setup = sccnxp_console_setup;
889+ s->uart.cons->flags = CON_PRINTBUFFER;
890+ s->uart.cons->index = -1;
891+ s->uart.cons->data = s;
892+ strcpy(s->uart.cons->name, "ttySC");
893+#endif
894+ ret = uart_register_driver(&s->uart);
895+ if (ret) {
896+ dev_err(&pdev->dev, "Registering UART driver failed\n");
897+ goto err_out;
898+ }
899+
900+ for (i = 0; i < s->uart.nr; i++) {
901+ s->port[i].line = i;
902+ s->port[i].dev = &pdev->dev;
903+ s->port[i].irq = s->irq;
904+ s->port[i].type = PORT_SC26XX;
905+ s->port[i].fifosize = fifosize;
906+ s->port[i].flags = UPF_SKIP_TEST | UPF_FIXED_TYPE;
907+ s->port[i].iotype = UPIO_MEM;
908+ s->port[i].mapbase = res->start;
909+ s->port[i].membase = membase;
910+ s->port[i].regshift = s->pdata.reg_shift;
911+ s->port[i].uartclk = s->pdata.frequency;
912+ s->port[i].ops = &sccnxp_ops;
913+ uart_add_one_port(&s->uart, &s->port[i]);
914+ /* Set direction to input */
915+ if (s->flags & SCCNXP_HAVE_IO)
916+ sccnxp_set_bit(&s->port[i], DIR_OP, 0);
917+ }
918+
919+ /* Disable interrupts */
920+ s->imr = 0;
921+ sccnxp_write(&s->port[0], SCCNXP_IMR_REG, 0);
922+
923+ /* Board specific configure */
924+ if (s->pdata.init)
925+ s->pdata.init();
926+
927+ ret = devm_request_threaded_irq(&pdev->dev, s->irq, NULL, sccnxp_ist,
928+ IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
929+ dev_name(&pdev->dev), s);
930+ if (!ret)
931+ return 0;
932+
933+ dev_err(&pdev->dev, "Unable to reguest IRQ %i\n", s->irq);
934+
935+err_out:
936+ platform_set_drvdata(pdev, NULL);
937+
938+ return ret;
939+}
940+
941+static int __devexit sccnxp_remove(struct platform_device *pdev)
942+{
943+ int i;
944+ struct sccnxp_port *s = platform_get_drvdata(pdev);
945+
946+ devm_free_irq(&pdev->dev, s->irq, s);
947+
948+ for (i = 0; i < s->uart.nr; i++)
949+ uart_remove_one_port(&s->uart, &s->port[i]);
950+
951+ uart_unregister_driver(&s->uart);
952+ platform_set_drvdata(pdev, NULL);
953+
954+ if (s->pdata.exit)
955+ s->pdata.exit();
956+
957+ return 0;
958+}
959+
960+static const struct platform_device_id sccnxp_id_table[] = {
961+ { "sc2681", SCCNXP_TYPE_SC2681 },
962+ { "sc2691", SCCNXP_TYPE_SC2691 },
963+ { "sc2692", SCCNXP_TYPE_SC2692 },
964+ { "sc2891", SCCNXP_TYPE_SC2891 },
965+ { "sc2892", SCCNXP_TYPE_SC2892 },
966+ { "sc28202", SCCNXP_TYPE_SC28202 },
967+ { "sc68681", SCCNXP_TYPE_SC68681 },
968+ { "sc68692", SCCNXP_TYPE_SC68692 },
969+};
970+MODULE_DEVICE_TABLE(platform, sccnxp_id_table);
971+
972+static struct platform_driver sccnxp_uart_driver = {
973+ .driver = {
974+ .name = SCCNXP_NAME,
975+ .owner = THIS_MODULE,
976+ },
977+ .probe = sccnxp_probe,
978+ .remove = __devexit_p(sccnxp_remove),
979+ .id_table = sccnxp_id_table,
980+};
981+module_platform_driver(sccnxp_uart_driver);
982+
983+MODULE_LICENSE("GPL v2");
984+MODULE_AUTHOR("Alexander Shiyan <shc_work@mail.ru>");
985+MODULE_DESCRIPTION("SCCNXP serial driver");
drivers/tty/serial/serial_core.c+135−88
@@ -159,7 +159,7 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state, · 158 unmodified lines
159159 retval = uport->ops->startup(uport);
160160 if (retval == 0) {
161161 if (uart_console(uport) && uport->cons->cflag) {
162− tty->termios->c_cflag = uport->cons->cflag;
162+ tty->termios.c_cflag = uport->cons->cflag;
163163 uport->cons->cflag = 0;
164164 }
165165 /*
@@ -172,11 +172,11 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state, · 6 unmodified lines
172172 * Setup the RTS and DTR signals once the
173173 * port is open and ready to respond.
174174 */
175− if (tty->termios->c_cflag & CBAUD)
175+ if (tty->termios.c_cflag & CBAUD)
176176 uart_set_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
177177 }
178178
179− if (port->flags & ASYNC_CTS_FLOW) {
179+ if (tty_port_cts_enabled(port)) {
180180 spin_lock_irq(&uport->lock);
181181 if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
182182 tty->hw_stopped = 1;
@@ -240,7 +240,7 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state) · 57 unmodified lines
240240 /*
241241 * Turn off DTR and RTS early.
242242 */
243− if (!tty || (tty->termios->c_cflag & HUPCL))
243+ if (!tty || (tty->termios.c_cflag & HUPCL))
244244 uart_clear_mctrl(uport, TIOCM_DTR | TIOCM_RTS);
245245
246246 uart_port_shutdown(port);
@@ -440,10 +440,10 @@ static void uart_change_speed(struct tty_struct *tty, struct uart_state *state, · 193 unmodified lines
440440 * If we have no tty, termios, or the port does not exist,
441441 * then we can't set the parameters for this port.
442442 */
443− if (!tty || !tty->termios || uport->type == PORT_UNKNOWN)
443+ if (!tty || uport->type == PORT_UNKNOWN)
444444 return;
445445
446− termios = tty->termios;
446+ termios = &tty->termios;
447447
448448 /*
449449 * Set flags based on termios cflag
@@ -614,7 +614,7 @@ static void uart_throttle(struct tty_struct *tty) · 164 unmodified lines
614614 if (I_IXOFF(tty))
615615 uart_send_xchar(tty, STOP_CHAR(tty));
616616
617− if (tty->termios->c_cflag & CRTSCTS)
617+ if (tty->termios.c_cflag & CRTSCTS)
618618 uart_clear_mctrl(state->uart_port, TIOCM_RTS);
619619 }
620620
@@ -630,42 +630,48 @@ static void uart_unthrottle(struct tty_struct *tty) · 9 unmodified lines
630630 uart_send_xchar(tty, START_CHAR(tty));
631631 }
632632
633− if (tty->termios->c_cflag & CRTSCTS)
633+ if (tty->termios.c_cflag & CRTSCTS)
634634 uart_set_mctrl(port, TIOCM_RTS);
635635 }
636636
637−static int uart_get_info(struct uart_state *state,
638− struct serial_struct __user *retinfo)
637+static void uart_get_info(struct tty_port *port,
638+ struct uart_state *state,
639+ struct serial_struct *retinfo)
639640 {
640641 struct uart_port *uport = state->uart_port;
641− struct tty_port *port = &state->port;
642− struct serial_struct tmp;
643−
644− memset(&tmp, 0, sizeof(tmp));
645642
646− /* Ensure the state we copy is consistent and no hardware changes
647− occur as we go */
648− mutex_lock(&port->mutex);
643+ memset(retinfo, 0, sizeof(*retinfo));
649644
650− tmp.type = uport->type;
651− tmp.line = uport->line;
652− tmp.port = uport->iobase;
645+ retinfo->type = uport->type;
646+ retinfo->line = uport->line;
647+ retinfo->port = uport->iobase;
653648 if (HIGH_BITS_OFFSET)
654− tmp.port_high = (long) uport->iobase >> HIGH_BITS_OFFSET;
655− tmp.irq = uport->irq;
656− tmp.flags = uport->flags;
657− tmp.xmit_fifo_size = uport->fifosize;
658− tmp.baud_base = uport->uartclk / 16;
659− tmp.close_delay = jiffies_to_msecs(port->close_delay) / 10;
660− tmp.closing_wait = port->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
649+ retinfo->port_high = (long) uport->iobase >> HIGH_BITS_OFFSET;
650+ retinfo->irq = uport->irq;
651+ retinfo->flags = uport->flags;
652+ retinfo->xmit_fifo_size = uport->fifosize;
653+ retinfo->baud_base = uport->uartclk / 16;
654+ retinfo->close_delay = jiffies_to_msecs(port->close_delay) / 10;
655+ retinfo->closing_wait = port->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
661656 ASYNC_CLOSING_WAIT_NONE :
662657 jiffies_to_msecs(port->closing_wait) / 10;
663− tmp.custom_divisor = uport->custom_divisor;
664− tmp.hub6 = uport->hub6;
665− tmp.io_type = uport->iotype;
666− tmp.iomem_reg_shift = uport->regshift;
667− tmp.iomem_base = (void *)(unsigned long)uport->mapbase;
658+ retinfo->custom_divisor = uport->custom_divisor;
659+ retinfo->hub6 = uport->hub6;
660+ retinfo->io_type = uport->iotype;
661+ retinfo->iomem_reg_shift = uport->regshift;
662+ retinfo->iomem_base = (void *)(unsigned long)uport->mapbase;
663+}
668664
665+static int uart_get_info_user(struct uart_state *state,
666+ struct serial_struct __user *retinfo)
667+{
668+ struct tty_port *port = &state->port;
669+ struct serial_struct tmp;
670+
671+ /* Ensure the state we copy is consistent and no hardware changes
672+ occur as we go */
673+ mutex_lock(&port->mutex);
674+ uart_get_info(port, state, &tmp);
669675 mutex_unlock(&port->mutex);
670676
671677 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
@@ -673,42 +679,30 @@ static int uart_get_info(struct uart_state *state, · 1 unmodified line
673679 return 0;
674680 }
675681
676−static int uart_set_info(struct tty_struct *tty, struct uart_state *state,
677− struct serial_struct __user *newinfo)
682+static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
683+ struct uart_state *state,
684+ struct serial_struct *new_info)
678685 {
679− struct serial_struct new_serial;
680686 struct uart_port *uport = state->uart_port;
681− struct tty_port *port = &state->port;
682687 unsigned long new_port;
683688 unsigned int change_irq, change_port, closing_wait;
684689 unsigned int old_custom_divisor, close_delay;
685690 upf_t old_flags, new_flags;
686691 int retval = 0;
687692
688− if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
689− return -EFAULT;
690−
691− new_port = new_serial.port;
693+ new_port = new_info->port;
692694 if (HIGH_BITS_OFFSET)
693− new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;
695+ new_port += (unsigned long) new_info->port_high << HIGH_BITS_OFFSET;
694696
695− new_serial.irq = irq_canonicalize(new_serial.irq);
696− close_delay = msecs_to_jiffies(new_serial.close_delay * 10);
697− closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
697+ new_info->irq = irq_canonicalize(new_info->irq);
698+ close_delay = msecs_to_jiffies(new_info->close_delay * 10);
699+ closing_wait = new_info->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
698700 ASYNC_CLOSING_WAIT_NONE :
699− msecs_to_jiffies(new_serial.closing_wait * 10);
701+ msecs_to_jiffies(new_info->closing_wait * 10);
700702
701− /*
702− * This semaphore protects port->count. It is also
703− * very useful to prevent opens. Also, take the
704− * port configuration semaphore to make sure that a
705− * module insertion/removal doesn't change anything
706− * under us.
707− */
708− mutex_lock(&port->mutex);
709703
710704 change_irq = !(uport->flags & UPF_FIXED_PORT)
711− && new_serial.irq != uport->irq;
705+ && new_info->irq != uport->irq;
712706
713707 /*
714708 * Since changing the 'type' of the port changes its resource
@@ -717,29 +711,29 @@ static int uart_set_info(struct tty_struct *tty, struct uart_state *state, · 2 unmodified lines
717711 */
718712 change_port = !(uport->flags & UPF_FIXED_PORT)
719713 && (new_port != uport->iobase ||
720− (unsigned long)new_serial.iomem_base != uport->mapbase ||
721− new_serial.hub6 != uport->hub6 ||
722− new_serial.io_type != uport->iotype ||
723− new_serial.iomem_reg_shift != uport->regshift ||
724− new_serial.type != uport->type);
714+ (unsigned long)new_info->iomem_base != uport->mapbase ||
715+ new_info->hub6 != uport->hub6 ||
716+ new_info->io_type != uport->iotype ||
717+ new_info->iomem_reg_shift != uport->regshift ||
718+ new_info->type != uport->type);
725719
726720 old_flags = uport->flags;
727− new_flags = new_serial.flags;
721+ new_flags = new_info->flags;
728722 old_custom_divisor = uport->custom_divisor;
729723
730724 if (!capable(CAP_SYS_ADMIN)) {
731725 retval = -EPERM;
732726 if (change_irq || change_port ||
733− (new_serial.baud_base != uport->uartclk / 16) ||
727+ (new_info->baud_base != uport->uartclk / 16) ||
734728 (close_delay != port->close_delay) ||
735729 (closing_wait != port->closing_wait) ||
736− (new_serial.xmit_fifo_size &&
737− new_serial.xmit_fifo_size != uport->fifosize) ||
730+ (new_info->xmit_fifo_size &&
731+ new_info->xmit_fifo_size != uport->fifosize) ||
738732 (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))
739733 goto exit;
740734 uport->flags = ((uport->flags & ~UPF_USR_MASK) |
741735 (new_flags & UPF_USR_MASK));
742− uport->custom_divisor = new_serial.custom_divisor;
736+ uport->custom_divisor = new_info->custom_divisor;
743737 goto check_and_exit;
744738 }
745739
@@ -747,10 +741,10 @@ static int uart_set_info(struct tty_struct *tty, struct uart_state *state, · 1 unmodified line
747741 * Ask the low level driver to verify the settings.
748742 */
749743 if (uport->ops->verify_port)
750− retval = uport->ops->verify_port(uport, &new_serial);
744+ retval = uport->ops->verify_port(uport, new_info);
751745
752− if ((new_serial.irq >= nr_irqs) || (new_serial.irq < 0) ||
753− (new_serial.baud_base < 9600))
746+ if ((new_info->irq >= nr_irqs) || (new_info->irq < 0) ||
747+ (new_info->baud_base < 9600))
754748 retval = -EINVAL;
755749
756750 if (retval)
@@ -790,11 +784,11 @@ static int uart_set_info(struct tty_struct *tty, struct uart_state *state, · 33 unmodified lines
790784 uport->ops->release_port(uport);
791785
792786 uport->iobase = new_port;
793− uport->type = new_serial.type;
794− uport->hub6 = new_serial.hub6;
795− uport->iotype = new_serial.io_type;
796− uport->regshift = new_serial.iomem_reg_shift;
797− uport->mapbase = (unsigned long)new_serial.iomem_base;
787+ uport->type = new_info->type;
788+ uport->hub6 = new_info->hub6;
789+ uport->iotype = new_info->io_type;
790+ uport->regshift = new_info->iomem_reg_shift;
791+ uport->mapbase = (unsigned long)new_info->iomem_base;
798792
799793 /*
800794 * Claim and map the new regions
@@ -835,16 +829,16 @@ static int uart_set_info(struct tty_struct *tty, struct uart_state *state, · 34 unmodified lines
835829 }
836830
837831 if (change_irq)
838− uport->irq = new_serial.irq;
832+ uport->irq = new_info->irq;
839833 if (!(uport->flags & UPF_FIXED_PORT))
840− uport->uartclk = new_serial.baud_base * 16;
834+ uport->uartclk = new_info->baud_base * 16;
841835 uport->flags = (uport->flags & ~UPF_CHANGE_MASK) |
842836 (new_flags & UPF_CHANGE_MASK);
843− uport->custom_divisor = new_serial.custom_divisor;
837+ uport->custom_divisor = new_info->custom_divisor;
844838 port->close_delay = close_delay;
845839 port->closing_wait = closing_wait;
846− if (new_serial.xmit_fifo_size)
847− uport->fifosize = new_serial.xmit_fifo_size;
840+ if (new_info->xmit_fifo_size)
841+ uport->fifosize = new_info->xmit_fifo_size;
848842 if (port->tty)
849843 port->tty->low_latency =
850844 (uport->flags & UPF_LOW_LATENCY) ? 1 : 0;
@@ -873,6 +867,28 @@ static int uart_set_info(struct tty_struct *tty, struct uart_state *state, · 22 unmodified lines
873867 } else
874868 retval = uart_startup(tty, state, 1);
875869 exit:
870+ return retval;
871+}
872+
873+static int uart_set_info_user(struct tty_struct *tty, struct uart_state *state,
874+ struct serial_struct __user *newinfo)
875+{
876+ struct serial_struct new_serial;
877+ struct tty_port *port = &state->port;
878+ int retval;
879+
880+ if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
881+ return -EFAULT;
882+
883+ /*
884+ * This semaphore protects port->count. It is also
885+ * very useful to prevent opens. Also, take the
886+ * port configuration semaphore to make sure that a
887+ * module insertion/removal doesn't change anything
888+ * under us.
889+ */
890+ mutex_lock(&port->mutex);
891+ retval = uart_set_info(tty, port, state, &new_serial);
876892 mutex_unlock(&port->mutex);
877893 return retval;
878894 }
@@ -1115,11 +1131,11 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd, · 236 unmodified lines
11151131 */
11161132 switch (cmd) {
11171133 case TIOCGSERIAL:
1118− ret = uart_get_info(state, uarg);
1134+ ret = uart_get_info_user(state, uarg);
11191135 break;
11201136
11211137 case TIOCSSERIAL:
1122− ret = uart_set_info(tty, state, uarg);
1138+ ret = uart_set_info_user(tty, state, uarg);
11231139 break;
11241140
11251141 case TIOCSERCONFIG:
@@ -1187,7 +1203,7 @@ static void uart_set_ldisc(struct tty_struct *tty) · 61 unmodified lines
11871203 struct uart_port *uport = state->uart_port;
11881204
11891205 if (uport->ops->set_ldisc)
1190− uport->ops->set_ldisc(uport, tty->termios->c_line);
1206+ uport->ops->set_ldisc(uport, tty->termios.c_line);
11911207 }
11921208
11931209 static void uart_set_termios(struct tty_struct *tty,
@@ -1195,7 +1211,7 @@ static void uart_set_termios(struct tty_struct *tty, · 1 unmodified line
11951211 {
11961212 struct uart_state *state = tty->driver_data;
11971213 unsigned long flags;
1198− unsigned int cflag = tty->termios->c_cflag;
1214+ unsigned int cflag = tty->termios.c_cflag;
11991215
12001216
12011217 /*
@@ -1206,9 +1222,9 @@ static void uart_set_termios(struct tty_struct *tty, · 4 unmodified lines
12061222 */
12071223 #define RELEVANT_IFLAG(iflag) ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
12081224 if ((cflag ^ old_termios->c_cflag) == 0 &&
1209− tty->termios->c_ospeed == old_termios->c_ospeed &&
1210− tty->termios->c_ispeed == old_termios->c_ispeed &&
1211− RELEVANT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0) {
1225+ tty->termios.c_ospeed == old_termios->c_ospeed &&
1226+ tty->termios.c_ispeed == old_termios->c_ispeed &&
1227+ RELEVANT_IFLAG(tty->termios.c_iflag ^ old_termios->c_iflag) == 0) {
12121228 return;
12131229 }
12141230
@@ -1960,8 +1976,8 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *uport) · 745 unmodified lines
19601976 /*
19611977 * If that's unset, use the tty termios setting.
19621978 */
1963− if (port->tty && port->tty->termios && termios.c_cflag == 0)
1964− termios = *(port->tty->termios);
1979+ if (port->tty && termios.c_cflag == 0)
1980+ termios = port->tty->termios;
19651981
19661982 if (console_suspend_enabled)
19671983 uart_change_pm(state, 0);
@@ -2293,6 +2309,36 @@ struct tty_driver *uart_console_device(struct console *co, int *index) · 325 unmodified lines
22932309 return p->tty_driver;
22942310 }
22952311
2312+static ssize_t uart_get_attr_uartclk(struct device *dev,
2313+ struct device_attribute *attr, char *buf)
2314+{
2315+ int ret;
2316+ struct tty_port *port = dev_get_drvdata(dev);
2317+ struct uart_state *state = container_of(port, struct uart_state, port);
2318+
2319+ mutex_lock(&state->port.mutex);
2320+ ret = snprintf(buf, PAGE_SIZE, "%d\n", state->uart_port->uartclk);
2321+ mutex_unlock(&state->port.mutex);
2322+
2323+ return ret;
2324+}
2325+
2326+static DEVICE_ATTR(uartclk, S_IRUSR | S_IRGRP, uart_get_attr_uartclk, NULL);
2327+
2328+static struct attribute *tty_dev_attrs[] = {
2329+ &dev_attr_uartclk.attr,
2330+ NULL,
2331+ };
2332+
2333+static const struct attribute_group tty_dev_attr_group = {
2334+ .attrs = tty_dev_attrs,
2335+ };
2336+
2337+static const struct attribute_group *tty_dev_attr_groups[] = {
2338+ &tty_dev_attr_group,
2339+ NULL
2340+ };
2341+
22962342 /**
22972343 * uart_add_one_port - attach a driver-defined port structure
22982344 * @drv: pointer to the uart low level driver structure for this port
@@ -2346,7 +2392,8 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport) · 47 unmodified lines
23462392 * Register the port whether it's detected or not. This allows
23472393 * setserial to be used to alter this ports parameters.
23482394 */
2349− tty_dev = tty_register_device(drv->tty_driver, uport->line, uport->dev);
2395+ tty_dev = tty_port_register_device_attr(port, drv->tty_driver,
2396+ uport->line, uport->dev, port, tty_dev_attr_groups);
23502397 if (likely(!IS_ERR(tty_dev))) {
23512398 device_set_wakeup_capable(tty_dev, 1);
23522399 } else {
@@ -2492,7 +2539,7 @@ void uart_handle_cts_change(struct uart_port *uport, unsigned int status) · 139 unmodified lines
24922539
24932540 uport->icount.cts++;
24942541
2495− if (port->flags & ASYNC_CTS_FLOW) {
2542+ if (tty_port_cts_enabled(port)) {
24962543 if (tty->hw_stopped) {
24972544 if (status) {
24982545 tty->hw_stopped = 0;
drivers/tty/serial/sirfsoc_uart.c+2−6
@@ -668,7 +668,7 @@ int sirfsoc_uart_probe(struct platform_device *pdev) · 667 unmodified lines
668668 if (res == NULL) {
669669 dev_err(&pdev->dev, "Insufficient resources.\n");
670670 ret = -EFAULT;
671− goto irq_err;
671+ goto err;
672672 }
673673 port->irq = res->start;
674674
@@ -676,7 +676,7 @@ int sirfsoc_uart_probe(struct platform_device *pdev) · 1 unmodified line
676676 sirfport->p = pinctrl_get_select_default(&pdev->dev);
677677 ret = IS_ERR(sirfport->p);
678678 if (ret)
679− goto pin_err;
679+ goto err;
680680 }
681681
682682 port->ops = &sirfsoc_uart_ops;
@@ -695,9 +695,6 @@ port_err: · 12 unmodified lines
695695 platform_set_drvdata(pdev, NULL);
696696 if (sirfport->hw_flow_ctrl)
697697 pinctrl_put(sirfport->p);
698−pin_err:
699−irq_err:
700− devm_iounmap(&pdev->dev, port->membase);
701698 err:
702699 return ret;
703700 }
@@ -709,7 +706,6 @@ static int sirfsoc_uart_remove(struct platform_device *pdev) · 5 unmodified lines
709706 platform_set_drvdata(pdev, NULL);
710707 if (sirfport->hw_flow_ctrl)
711708 pinctrl_put(sirfport->p);
712− devm_iounmap(&pdev->dev, port->membase);
713709 uart_remove_one_port(&sirfsoc_uart_drv, port);
714710 return 0;
715711 }
drivers/tty/serial/sunsu.c+7−1
@@ -58,10 +58,16 @@ · 57 unmodified lines
5858 enum su_type { SU_PORT_NONE, SU_PORT_MS, SU_PORT_KBD, SU_PORT_PORT };
5959 static char *su_typev[] = { "su(???)", "su(mouse)", "su(kbd)", "su(serial)" };
6060
61+struct serial_uart_config {
62+ char *name;
63+ int dfl_xmit_fifo_size;
64+ int flags;
65+};
66+
6167 /*
6268 * Here we define the default xmit fifo size used for each type of UART.
6369 */
64−static const struct serial_uart_config uart_config[PORT_MAX_8250+1] = {
70+static const struct serial_uart_config uart_config[] = {
6571 { "unknown", 1, 0 },
6672 { "8250", 1, 0 },
6773 { "16450", 1, 0 },
drivers/tty/synclink.c+47−39
@@ -1359,7 +1359,7 @@ static void mgsl_isr_io_pin( struct mgsl_struct *info ) · 1358 unmodified lines
13591359 }
13601360 }
13611361
1362− if ( (info->port.flags & ASYNC_CTS_FLOW) &&
1362+ if (tty_port_cts_enabled(&info->port) &&
13631363 (status & MISCSTATUS_CTS_LATCHED) ) {
13641364 if (info->port.tty->hw_stopped) {
13651365 if (status & MISCSTATUS_CTS) {
@@ -1840,22 +1840,22 @@ static void shutdown(struct mgsl_struct * info) · 474 unmodified lines
18401840 usc_DisableInterrupts(info,RECEIVE_DATA + RECEIVE_STATUS +
18411841 TRANSMIT_DATA + TRANSMIT_STATUS + IO_PIN + MISC );
18421842 usc_DisableDmaInterrupts(info,DICR_MASTER + DICR_TRANSMIT + DICR_RECEIVE);
1843−
1843+
18441844 /* Disable DMAEN (Port 7, Bit 14) */
18451845 /* This disconnects the DMA request signal from the ISA bus */
18461846 /* on the ISA adapter. This has no effect for the PCI adapter */
18471847 usc_OutReg(info, PCR, (u16)((usc_InReg(info, PCR) | BIT15) | BIT14));
1848−
1848+
18491849 /* Disable INTEN (Port 6, Bit12) */
18501850 /* This disconnects the IRQ request signal to the ISA bus */
18511851 /* on the ISA adapter. This has no effect for the PCI adapter */
18521852 usc_OutReg(info, PCR, (u16)((usc_InReg(info, PCR) | BIT13) | BIT12));
1853−
1854− if (!info->port.tty || info->port.tty->termios->c_cflag & HUPCL) {
1853+
1854+ if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) {
18551855 info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS);
18561856 usc_set_serial_signals(info);
18571857 }
1858−
1858+
18591859 spin_unlock_irqrestore(&info->irq_spinlock,flags);
18601860
18611861 mgsl_release_resources(info);
@@ -1895,7 +1895,7 @@ static void mgsl_program_hw(struct mgsl_struct *info) · 33 unmodified lines
18951895 usc_EnableInterrupts(info, IO_PIN);
18961896 usc_get_serial_signals(info);
18971897
1898− if (info->netcount || info->port.tty->termios->c_cflag & CREAD)
1898+ if (info->netcount || info->port.tty->termios.c_cflag & CREAD)
18991899 usc_start_receiver(info);
19001900
19011901 spin_unlock_irqrestore(&info->irq_spinlock,flags);
@@ -1908,14 +1908,14 @@ static void mgsl_change_params(struct mgsl_struct *info) · 6 unmodified lines
19081908 unsigned cflag;
19091909 int bits_per_char;
19101910
1911− if (!info->port.tty || !info->port.tty->termios)
1911+ if (!info->port.tty)
19121912 return;
19131913
19141914 if (debug_level >= DEBUG_LEVEL_INFO)
19151915 printk("%s(%d):mgsl_change_params(%s)\n",
19161916 __FILE__,__LINE__, info->device_name );
19171917
1918− cflag = info->port.tty->termios->c_cflag;
1918+ cflag = info->port.tty->termios.c_cflag;
19191919
19201920 /* if B0 rate (hangup) specified then negate DTR and RTS */
19211921 /* otherwise assert DTR and RTS */
@@ -2367,8 +2367,8 @@ static void mgsl_throttle(struct tty_struct * tty) · 445 unmodified lines
23672367
23682368 if (I_IXOFF(tty))
23692369 mgsl_send_xchar(tty, STOP_CHAR(tty));
2370−
2371− if (tty->termios->c_cflag & CRTSCTS) {
2370+
2371+ if (tty->termios.c_cflag & CRTSCTS) {
23722372 spin_lock_irqsave(&info->irq_spinlock,flags);
23732373 info->serial_signals &= ~SerialSignal_RTS;
23742374 usc_set_serial_signals(info);
@@ -2401,8 +2401,8 @@ static void mgsl_unthrottle(struct tty_struct * tty) · 26 unmodified lines
24012401 else
24022402 mgsl_send_xchar(tty, START_CHAR(tty));
24032403 }
2404−
2405− if (tty->termios->c_cflag & CRTSCTS) {
2404+
2405+ if (tty->termios.c_cflag & CRTSCTS) {
24062406 spin_lock_irqsave(&info->irq_spinlock,flags);
24072407 info->serial_signals |= SerialSignal_RTS;
24082408 usc_set_serial_signals(info);
@@ -3045,7 +3045,7 @@ static void mgsl_set_termios(struct tty_struct *tty, struct ktermios *old_termio · 636 unmodified lines
30453045
30463046 /* Handle transition to B0 status */
30473047 if (old_termios->c_cflag & CBAUD &&
3048− !(tty->termios->c_cflag & CBAUD)) {
3048+ !(tty->termios.c_cflag & CBAUD)) {
30493049 info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
30503050 spin_lock_irqsave(&info->irq_spinlock,flags);
30513051 usc_set_serial_signals(info);
@@ -3054,9 +3054,9 @@ static void mgsl_set_termios(struct tty_struct *tty, struct ktermios *old_termio · 2 unmodified lines
30543054
30553055 /* Handle transition away from B0 status */
30563056 if (!(old_termios->c_cflag & CBAUD) &&
3057− tty->termios->c_cflag & CBAUD) {
3057+ tty->termios.c_cflag & CBAUD) {
30583058 info->serial_signals |= SerialSignal_DTR;
3059− if (!(tty->termios->c_cflag & CRTSCTS) ||
3059+ if (!(tty->termios.c_cflag & CRTSCTS) ||
30603060 !test_bit(TTY_THROTTLED, &tty->flags)) {
30613061 info->serial_signals |= SerialSignal_RTS;
30623062 }
@@ -3067,7 +3067,7 @@ static void mgsl_set_termios(struct tty_struct *tty, struct ktermios *old_termio · 4 unmodified lines
30673067
30683068 /* Handle turning off CRTSCTS */
30693069 if (old_termios->c_cflag & CRTSCTS &&
3070− !(tty->termios->c_cflag & CRTSCTS)) {
3070+ !(tty->termios.c_cflag & CRTSCTS)) {
30713071 tty->hw_stopped = 0;
30723072 mgsl_start(tty);
30733073 }
@@ -3287,7 +3287,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, · 213 unmodified lines
32873287 return 0;
32883288 }
32893289
3290− if (tty->termios->c_cflag & CLOCAL)
3290+ if (tty->termios.c_cflag & CLOCAL)
32913291 do_clocal = true;
32923292
32933293 /* Wait for carrier detect and the line to become
@@ -3313,7 +3313,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, · 19 unmodified lines
33133313 port->blocked_open++;
33143314
33153315 while (1) {
3316− if (tty->termios->c_cflag & CBAUD)
3316+ if (tty->termios.c_cflag & CBAUD)
33173317 tty_port_raise_dtr_rts(port);
33183318
33193319 set_current_state(TASK_INTERRUPTIBLE);
@@ -3338,9 +3338,9 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, · 18 unmodified lines
33383338 printk("%s(%d):block_til_ready blocking on %s count=%d\n",
33393339 __FILE__,__LINE__, tty->driver->name, port->count );
33403340
3341− tty_unlock();
3341+ tty_unlock(tty);
33423342 schedule();
3343− tty_lock();
3343+ tty_lock(tty);
33443344 }
33453345
33463346 set_current_state(TASK_RUNNING);
@@ -3362,6 +3362,29 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, · 15 unmodified lines
33623362
33633363 } /* end of block_til_ready() */
33643364
3365+static int mgsl_install(struct tty_driver *driver, struct tty_struct *tty)
3366+{
3367+ struct mgsl_struct *info;
3368+ int line = tty->index;
3369+
3370+ /* verify range of specified line number */
3371+ if (line >= mgsl_device_count) {
3372+ printk("%s(%d):mgsl_open with invalid line #%d.\n",
3373+ __FILE__, __LINE__, line);
3374+ return -ENODEV;
3375+ }
3376+
3377+ /* find the info structure for the specified line */
3378+ info = mgsl_device_list;
3379+ while (info && info->line != line)
3380+ info = info->next_device;
3381+ if (mgsl_paranoia_check(info, tty->name, "mgsl_open"))
3382+ return -ENODEV;
3383+ tty->driver_data = info;
3384+
3385+ return tty_port_install(&info->port, driver, tty);
3386+}
3387+
33653388 /* mgsl_open()
33663389 *
33673390 * Called when a port is opened. Init and enable port.
@@ -3374,26 +3397,10 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, · 6 unmodified lines
33743397 */
33753398 static int mgsl_open(struct tty_struct *tty, struct file * filp)
33763399 {
3377− struct mgsl_struct *info;
3378− int retval, line;
3400+ struct mgsl_struct *info = tty->driver_data;
33793401 unsigned long flags;
3402+ int retval;
33803403
3381− /* verify range of specified line number */
3382− line = tty->index;
3383− if (line >= mgsl_device_count) {
3384− printk("%s(%d):mgsl_open with invalid line #%d.\n",
3385− __FILE__,__LINE__,line);
3386− return -ENODEV;
3387− }
3388−
3389− /* find the info structure for the specified line */
3390− info = mgsl_device_list;
3391− while(info && info->line != line)
3392− info = info->next_device;
3393− if (mgsl_paranoia_check(info, tty->name, "mgsl_open"))
3394− return -ENODEV;
3395−
3396− tty->driver_data = info;
33973404 info->port.tty = tty;
33983405
33993406 if (debug_level >= DEBUG_LEVEL_INFO)
@@ -4297,6 +4304,7 @@ static struct mgsl_struct* mgsl_allocate_device(void) · 897 unmodified lines
42974304 } /* end of mgsl_allocate_device()*/
42984305
42994306 static const struct tty_operations mgsl_ops = {
4307+ .install = mgsl_install,
43004308 .open = mgsl_open,
43014309 .close = mgsl_close,
43024310 .write = mgsl_write,
drivers/tty/synclink_gt.c+20−17
@@ -785,7 +785,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 784 unmodified lines
785785
786786 /* Handle transition to B0 status */
787787 if (old_termios->c_cflag & CBAUD &&
788− !(tty->termios->c_cflag & CBAUD)) {
788+ !(tty->termios.c_cflag & CBAUD)) {
789789 info->signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
790790 spin_lock_irqsave(&info->lock,flags);
791791 set_signals(info);
@@ -794,9 +794,9 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 2 unmodified lines
794794
795795 /* Handle transition away from B0 status */
796796 if (!(old_termios->c_cflag & CBAUD) &&
797− tty->termios->c_cflag & CBAUD) {
797+ tty->termios.c_cflag & CBAUD) {
798798 info->signals |= SerialSignal_DTR;
799− if (!(tty->termios->c_cflag & CRTSCTS) ||
799+ if (!(tty->termios.c_cflag & CRTSCTS) ||
800800 !test_bit(TTY_THROTTLED, &tty->flags)) {
801801 info->signals |= SerialSignal_RTS;
802802 }
@@ -807,7 +807,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 4 unmodified lines
807807
808808 /* Handle turning off CRTSCTS */
809809 if (old_termios->c_cflag & CRTSCTS &&
810− !(tty->termios->c_cflag & CRTSCTS)) {
810+ !(tty->termios.c_cflag & CRTSCTS)) {
811811 tty->hw_stopped = 0;
812812 tx_release(tty);
813813 }
@@ -1372,7 +1372,7 @@ static void throttle(struct tty_struct * tty) · 558 unmodified lines
13721372 DBGINFO(("%s throttle\n", info->device_name));
13731373 if (I_IXOFF(tty))
13741374 send_xchar(tty, STOP_CHAR(tty));
1375− if (tty->termios->c_cflag & CRTSCTS) {
1375+ if (tty->termios.c_cflag & CRTSCTS) {
13761376 spin_lock_irqsave(&info->lock,flags);
13771377 info->signals &= ~SerialSignal_RTS;
13781378 set_signals(info);
@@ -1397,7 +1397,7 @@ static void unthrottle(struct tty_struct * tty) · 18 unmodified lines
13971397 else
13981398 send_xchar(tty, START_CHAR(tty));
13991399 }
1400− if (tty->termios->c_cflag & CRTSCTS) {
1400+ if (tty->termios.c_cflag & CRTSCTS) {
14011401 spin_lock_irqsave(&info->lock,flags);
14021402 info->signals |= SerialSignal_RTS;
14031403 set_signals(info);
@@ -2053,7 +2053,7 @@ static void cts_change(struct slgt_info *info, unsigned short status) · 649 unmodified lines
20532053 wake_up_interruptible(&info->event_wait_q);
20542054 info->pending_bh |= BH_STATUS;
20552055
2056− if (info->port.flags & ASYNC_CTS_FLOW) {
2056+ if (tty_port_cts_enabled(&info->port)) {
20572057 if (info->port.tty) {
20582058 if (info->port.tty->hw_stopped) {
20592059 if (info->signals & SerialSignal_CTS) {
@@ -2493,7 +2493,7 @@ static void shutdown(struct slgt_info *info) · 433 unmodified lines
24932493
24942494 slgt_irq_off(info, IRQ_ALL | IRQ_MASTER);
24952495
2496− if (!info->port.tty || info->port.tty->termios->c_cflag & HUPCL) {
2496+ if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) {
24972497 info->signals &= ~(SerialSignal_DTR + SerialSignal_RTS);
24982498 set_signals(info);
24992499 }
@@ -2534,7 +2534,7 @@ static void program_hw(struct slgt_info *info) · 34 unmodified lines
25342534 get_signals(info);
25352535
25362536 if (info->netcount ||
2537− (info->port.tty && info->port.tty->termios->c_cflag & CREAD))
2537+ (info->port.tty && info->port.tty->termios.c_cflag & CREAD))
25382538 rx_start(info);
25392539
25402540 spin_unlock_irqrestore(&info->lock,flags);
@@ -2548,11 +2548,11 @@ static void change_params(struct slgt_info *info) · 7 unmodified lines
25482548 unsigned cflag;
25492549 int bits_per_char;
25502550
2551− if (!info->port.tty || !info->port.tty->termios)
2551+ if (!info->port.tty)
25522552 return;
25532553 DBGINFO(("%s change_params\n", info->device_name));
25542554
2555− cflag = info->port.tty->termios->c_cflag;
2555+ cflag = info->port.tty->termios.c_cflag;
25562556
25572557 /* if B0 rate (hangup) specified then negate DTR and RTS */
25582558 /* otherwise assert DTR and RTS */
@@ -3292,7 +3292,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, · 733 unmodified lines
32923292 return 0;
32933293 }
32943294
3295− if (tty->termios->c_cflag & CLOCAL)
3295+ if (tty->termios.c_cflag & CLOCAL)
32963296 do_clocal = true;
32973297
32983298 /* Wait for carrier detect and the line to become
@@ -3314,7 +3314,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, · 15 unmodified lines
33143314 port->blocked_open++;
33153315
33163316 while (1) {
3317− if ((tty->termios->c_cflag & CBAUD))
3317+ if ((tty->termios.c_cflag & CBAUD))
33183318 tty_port_raise_dtr_rts(port);
33193319
33203320 set_current_state(TASK_INTERRUPTIBLE);
@@ -3336,9 +3336,9 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, · 15 unmodified lines
33363336 }
33373337
33383338 DBGINFO(("%s block_til_ready wait\n", tty->driver->name));
3339− tty_unlock();
3339+ tty_unlock(tty);
33403340 schedule();
3341− tty_lock();
3341+ tty_lock(tty);
33423342 }
33433343
33443344 set_current_state(TASK_RUNNING);
@@ -3689,8 +3689,11 @@ static void device_init(int adapter_num, struct pci_dev *pdev) · 344 unmodified lines
36893689 }
36903690 }
36913691
3692− for (i=0; i < port_count; ++i)
3693− tty_register_device(serial_driver, port_array[i]->line, &(port_array[i]->pdev->dev));
3692+ for (i = 0; i < port_count; ++i) {
3693+ struct slgt_info *info = port_array[i];
3694+ tty_port_register_device(&info->port, serial_driver, info->line,
3695+ &info->pdev->dev);
3696+ }
36943697 }
36953698
36963699 static int __devinit init_one(struct pci_dev *dev,
drivers/tty/synclinkmp.c+34−24
@@ -711,15 +711,11 @@ static void ldisc_receive_buf(struct tty_struct *tty, · 710 unmodified lines
711711
712712 /* tty callbacks */
713713
714−/* Called when a port is opened. Init and enable port.
715− */
716−static int open(struct tty_struct *tty, struct file *filp)
714+static int install(struct tty_driver *driver, struct tty_struct *tty)
717715 {
718716 SLMP_INFO *info;
719− int retval, line;
720− unsigned long flags;
717+ int line = tty->index;
721718
722− line = tty->index;
723719 if (line >= synclinkmp_device_count) {
724720 printk("%s(%d): open with invalid line #%d.\n",
725721 __FILE__,__LINE__,line);
@@ -727,17 +723,30 @@ static int open(struct tty_struct *tty, struct file *filp) · 1 unmodified line
727723 }
728724
729725 info = synclinkmp_device_list;
730− while(info && info->line != line)
726+ while (info && info->line != line)
731727 info = info->next_device;
732728 if (sanity_check(info, tty->name, "open"))
733729 return -ENODEV;
734− if ( info->init_error ) {
730+ if (info->init_error) {
735731 printk("%s(%d):%s device is not allocated, init error=%d\n",
736− __FILE__,__LINE__,info->device_name,info->init_error);
732+ __FILE__, __LINE__, info->device_name,
733+ info->init_error);
737734 return -ENODEV;
738735 }
739736
740737 tty->driver_data = info;
738+
739+ return tty_port_install(&info->port, driver, tty);
740+}
741+
742+/* Called when a port is opened. Init and enable port.
743+ */
744+static int open(struct tty_struct *tty, struct file *filp)
745+{
746+ SLMP_INFO *info = tty->driver_data;
747+ unsigned long flags;
748+ int retval;
749+
741750 info->port.tty = tty;
742751
743752 if (debug_level >= DEBUG_LEVEL_INFO)
@@ -873,7 +882,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 129 unmodified lines
873882
874883 /* Handle transition to B0 status */
875884 if (old_termios->c_cflag & CBAUD &&
876− !(tty->termios->c_cflag & CBAUD)) {
885+ !(tty->termios.c_cflag & CBAUD)) {
877886 info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
878887 spin_lock_irqsave(&info->lock,flags);
879888 set_signals(info);
@@ -882,9 +891,9 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 2 unmodified lines
882891
883892 /* Handle transition away from B0 status */
884893 if (!(old_termios->c_cflag & CBAUD) &&
885− tty->termios->c_cflag & CBAUD) {
894+ tty->termios.c_cflag & CBAUD) {
886895 info->serial_signals |= SerialSignal_DTR;
887− if (!(tty->termios->c_cflag & CRTSCTS) ||
896+ if (!(tty->termios.c_cflag & CRTSCTS) ||
888897 !test_bit(TTY_THROTTLED, &tty->flags)) {
889898 info->serial_signals |= SerialSignal_RTS;
890899 }
@@ -895,7 +904,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) · 4 unmodified lines
895904
896905 /* Handle turning off CRTSCTS */
897906 if (old_termios->c_cflag & CRTSCTS &&
898− !(tty->termios->c_cflag & CRTSCTS)) {
907+ !(tty->termios.c_cflag & CRTSCTS)) {
899908 tty->hw_stopped = 0;
900909 tx_release(tty);
901910 }
@@ -1473,7 +1482,7 @@ static void throttle(struct tty_struct * tty) · 571 unmodified lines
14731482 if (I_IXOFF(tty))
14741483 send_xchar(tty, STOP_CHAR(tty));
14751484
1476− if (tty->termios->c_cflag & CRTSCTS) {
1485+ if (tty->termios.c_cflag & CRTSCTS) {
14771486 spin_lock_irqsave(&info->lock,flags);
14781487 info->serial_signals &= ~SerialSignal_RTS;
14791488 set_signals(info);
@@ -1502,7 +1511,7 @@ static void unthrottle(struct tty_struct * tty) · 22 unmodified lines
15021511 send_xchar(tty, START_CHAR(tty));
15031512 }
15041513
1505− if (tty->termios->c_cflag & CRTSCTS) {
1514+ if (tty->termios.c_cflag & CRTSCTS) {
15061515 spin_lock_irqsave(&info->lock,flags);
15071516 info->serial_signals |= SerialSignal_RTS;
15081517 set_signals(info);
@@ -2491,7 +2500,7 @@ static void isr_io_pin( SLMP_INFO *info, u16 status ) · 982 unmodified lines
24912500 }
24922501 }
24932502
2494− if ( (info->port.flags & ASYNC_CTS_FLOW) &&
2503+ if (tty_port_cts_enabled(&info->port) &&
24952504 (status & MISCSTATUS_CTS_LATCHED) ) {
24962505 if ( info->port.tty ) {
24972506 if (info->port.tty->hw_stopped) {
@@ -2708,7 +2717,7 @@ static void shutdown(SLMP_INFO * info) · 210 unmodified lines
27082717
27092718 reset_port(info);
27102719
2711− if (!info->port.tty || info->port.tty->termios->c_cflag & HUPCL) {
2720+ if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) {
27122721 info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS);
27132722 set_signals(info);
27142723 }
@@ -2749,7 +2758,7 @@ static void program_hw(SLMP_INFO *info) · 34 unmodified lines
27492758
27502759 get_signals(info);
27512760
2752− if (info->netcount || (info->port.tty && info->port.tty->termios->c_cflag & CREAD) )
2761+ if (info->netcount || (info->port.tty && info->port.tty->termios.c_cflag & CREAD) )
27532762 rx_start(info);
27542763
27552764 spin_unlock_irqrestore(&info->lock,flags);
@@ -2762,14 +2771,14 @@ static void change_params(SLMP_INFO *info) · 6 unmodified lines
27622771 unsigned cflag;
27632772 int bits_per_char;
27642773
2765− if (!info->port.tty || !info->port.tty->termios)
2774+ if (!info->port.tty)
27662775 return;
27672776
27682777 if (debug_level >= DEBUG_LEVEL_INFO)
27692778 printk("%s(%d):%s change_params()\n",
27702779 __FILE__,__LINE__, info->device_name );
27712780
2772− cflag = info->port.tty->termios->c_cflag;
2781+ cflag = info->port.tty->termios.c_cflag;
27732782
27742783 /* if B0 rate (hangup) specified then negate DTR and RTS */
27752784 /* otherwise assert DTR and RTS */
@@ -3306,7 +3315,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, · 530 unmodified lines
33063315 return 0;
33073316 }
33083317
3309− if (tty->termios->c_cflag & CLOCAL)
3318+ if (tty->termios.c_cflag & CLOCAL)
33103319 do_clocal = true;
33113320
33123321 /* Wait for carrier detect and the line to become
@@ -3332,7 +3341,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, · 19 unmodified lines
33323341 port->blocked_open++;
33333342
33343343 while (1) {
3335− if (tty->termios->c_cflag & CBAUD)
3344+ if (tty->termios.c_cflag & CBAUD)
33363345 tty_port_raise_dtr_rts(port);
33373346
33383347 set_current_state(TASK_INTERRUPTIBLE);
@@ -3357,9 +3366,9 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, · 18 unmodified lines
33573366 printk("%s(%d):%s block_til_ready() count=%d\n",
33583367 __FILE__,__LINE__, tty->driver->name, port->count );
33593368
3360− tty_unlock();
3369+ tty_unlock(tty);
33613370 schedule();
3362− tty_lock();
3371+ tty_lock(tty);
33633372 }
33643373
33653374 set_current_state(TASK_RUNNING);
@@ -3881,6 +3890,7 @@ static void device_init(int adapter_num, struct pci_dev *pdev) · 515 unmodified lines
38813890 }
38823891
38833892 static const struct tty_operations ops = {
3893+ .install = install,
38843894 .open = open,
38853895 .close = close,
38863896 .write = write,
drivers/tty/tty_io.c+250−125
@@ -181,10 +181,13 @@ struct tty_struct *alloc_tty_struct(void) · 180 unmodified lines
181181
182182 void free_tty_struct(struct tty_struct *tty)
183183 {
184+ if (!tty)
185+ return;
184186 if (tty->dev)
185187 put_device(tty->dev);
186188 kfree(tty->write_buf);
187189 tty_buffer_free_all(tty);
190+ tty->magic = 0xDEADDEAD;
188191 kfree(tty);
189192 }
190193
@@ -573,7 +576,7 @@ void __tty_hangup(struct tty_struct *tty) · 382 unmodified lines
573576 }
574577 spin_unlock(&redirect_lock);
575578
576− tty_lock();
579+ tty_lock(tty);
577580
578581 /* some functions below drop BTM, so we need this bit */
579582 set_bit(TTY_HUPPING, &tty->flags);
@@ -666,7 +669,7 @@ void __tty_hangup(struct tty_struct *tty) · 86 unmodified lines
666669 clear_bit(TTY_HUPPING, &tty->flags);
667670 tty_ldisc_enable(tty);
668671
669− tty_unlock();
672+ tty_unlock(tty);
670673
671674 if (f)
672675 fput(f);
@@ -1103,12 +1106,12 @@ void tty_write_message(struct tty_struct *tty, char *msg) · 430 unmodified lines
11031106 {
11041107 if (tty) {
11051108 mutex_lock(&tty->atomic_write_lock);
1106− tty_lock();
1109+ tty_lock(tty);
11071110 if (tty->ops->write && !test_bit(TTY_CLOSING, &tty->flags)) {
1108− tty_unlock();
1111+ tty_unlock(tty);
11091112 tty->ops->write(tty, msg, strlen(msg));
11101113 } else
1111− tty_unlock();
1114+ tty_unlock(tty);
11121115 tty_write_unlock(tty);
11131116 }
11141117 return;
@@ -1213,7 +1216,10 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p) · 98 unmodified lines
12131216 */
12141217 static void tty_line_name(struct tty_driver *driver, int index, char *p)
12151218 {
1216− sprintf(p, "%s%d", driver->name, index + driver->name_base);
1219+ if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1220+ strcpy(p, driver->name);
1221+ else
1222+ sprintf(p, "%s%d", driver->name, index + driver->name_base);
12171223 }
12181224
12191225 /**
@@ -1249,21 +1255,19 @@ int tty_init_termios(struct tty_struct *tty) · 29 unmodified lines
12491255 struct ktermios *tp;
12501256 int idx = tty->index;
12511257
1252− tp = tty->driver->termios[idx];
1253− if (tp == NULL) {
1254− tp = kzalloc(sizeof(struct ktermios[2]), GFP_KERNEL);
1255− if (tp == NULL)
1256− return -ENOMEM;
1257− memcpy(tp, &tty->driver->init_termios,
1258− sizeof(struct ktermios));
1259− tty->driver->termios[idx] = tp;
1258+ if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1259+ tty->termios = tty->driver->init_termios;
1260+ else {
1261+ /* Check for lazy saved data */
1262+ tp = tty->driver->termios[idx];
1263+ if (tp != NULL)
1264+ tty->termios = *tp;
1265+ else
1266+ tty->termios = tty->driver->init_termios;
12601267 }
1261− tty->termios = tp;
1262− tty->termios_locked = tp + 1;
1263−
12641268 /* Compatibility until drivers always set this */
1265− tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
1266− tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
1269+ tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
1270+ tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
12671271 return 0;
12681272 }
12691273 EXPORT_SYMBOL_GPL(tty_init_termios);
@@ -1403,10 +1407,18 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) · 133 unmodified lines
14031407 }
14041408 initialize_tty_struct(tty, driver, idx);
14051409
1410+ tty_lock(tty);
14061411 retval = tty_driver_install_tty(driver, tty);
14071412 if (retval < 0)
14081413 goto err_deinit_tty;
14091414
1415+ if (!tty->port)
1416+ tty->port = driver->ports[idx];
1417+
1418+ WARN_RATELIMIT(!tty->port,
1419+ "%s: %s driver does not set tty->port. This will crash the kernel later. Fix the driver!\n",
1420+ __func__, tty->driver->name);
1421+
14101422 /*
14111423 * Structures all installed ... call the ldisc open routines.
14121424 * If we fail here just call release_tty to clean up. No need
@@ -1415,9 +1427,11 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) · 2 unmodified lines
14151427 retval = tty_ldisc_setup(tty, tty->link);
14161428 if (retval)
14171429 goto err_release_tty;
1430+ /* Return the tty locked so that it cannot vanish under the caller */
14181431 return tty;
14191432
14201433 err_deinit_tty:
1434+ tty_unlock(tty);
14211435 deinitialize_tty_struct(tty);
14221436 free_tty_struct(tty);
14231437 err_module_put:
@@ -1426,6 +1440,7 @@ err_module_put: · 2 unmodified lines
14261440
14271441 /* call the tty release_tty routine to clean out this slot */
14281442 err_release_tty:
1443+ tty_unlock(tty);
14291444 printk_ratelimited(KERN_INFO "tty_init_dev: ldisc open failed, "
14301445 "clearing slot %d\n", idx);
14311446 release_tty(tty, idx);
@@ -1436,22 +1451,25 @@ void tty_free_termios(struct tty_struct *tty) · 4 unmodified lines
14361451 {
14371452 struct ktermios *tp;
14381453 int idx = tty->index;
1439− /* Kill this flag and push into drivers for locking etc */
1440− if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
1441− /* FIXME: Locking on ->termios array */
1442− tp = tty->termios;
1443− tty->driver->termios[idx] = NULL;
1444− kfree(tp);
1454+
1455+ /* If the port is going to reset then it has no termios to save */
1456+ if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1457+ return;
1458+
1459+ /* Stash the termios data */
1460+ tp = tty->driver->termios[idx];
1461+ if (tp == NULL) {
1462+ tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1463+ if (tp == NULL) {
1464+ pr_warn("tty: no memory to save termios state.\n");
1465+ return;
1466+ }
1467+ tty->driver->termios[idx] = tp;
14451468 }
1469+ *tp = tty->termios;
14461470 }
14471471 EXPORT_SYMBOL(tty_free_termios);
14481472
1449−void tty_shutdown(struct tty_struct *tty)
1450−{
1451− tty_driver_remove_tty(tty->driver, tty);
1452− tty_free_termios(tty);
1453−}
1454−EXPORT_SYMBOL(tty_shutdown);
14551473
14561474 /**
14571475 * release_one_tty - release tty structure memory
@@ -1462,7 +1480,6 @@ EXPORT_SYMBOL(tty_shutdown); · 4 unmodified lines
14621480 * in use. It also gets called when setup of a device fails.
14631481 *
14641482 * Locking:
1465− * tty_mutex - sometimes only
14661483 * takes the file list lock internally when working on the list
14671484 * of ttys that the driver keeps.
14681485 *
@@ -1495,11 +1512,6 @@ static void queue_release_one_tty(struct kref *kref) · 26 unmodified lines
14951512 {
14961513 struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
14971514
1498− if (tty->ops->shutdown)
1499− tty->ops->shutdown(tty);
1500− else
1501− tty_shutdown(tty);
1502−
15031515 /* The hangup queue is now free so we can reuse it rather than
15041516 waste a chunk of memory for each port */
15051517 INIT_WORK(&tty->hangup_work, release_one_tty);
@@ -1528,16 +1540,20 @@ EXPORT_SYMBOL(tty_kref_put); · 22 unmodified lines
15281540 * and decrement the refcount of the backing module.
15291541 *
15301542 * Locking:
1531− * tty_mutex - sometimes only
1543+ * tty_mutex
15321544 * takes the file list lock internally when working on the list
15331545 * of ttys that the driver keeps.
1534− * FIXME: should we require tty_mutex is held here ??
15351546 *
15361547 */
15371548 static void release_tty(struct tty_struct *tty, int idx)
15381549 {
15391550 /* This should always be true but check for the moment */
15401551 WARN_ON(tty->index != idx);
1552+ WARN_ON(!mutex_is_locked(&tty_mutex));
1553+ if (tty->ops->shutdown)
1554+ tty->ops->shutdown(tty);
1555+ tty_free_termios(tty);
1556+ tty_driver_remove_tty(tty->driver, tty);
15411557
15421558 if (tty->link)
15431559 tty_kref_put(tty->link);
@@ -1572,22 +1588,12 @@ static int tty_release_checks(struct tty_struct *tty, struct tty_struct *o_tty, · 28 unmodified lines
15721588 __func__, idx, tty->name);
15731589 return -1;
15741590 }
1575− if (tty->termios != tty->driver->termios[idx]) {
1576− printk(KERN_DEBUG "%s: driver.termios[%d] not termios for (%s)\n",
1577− __func__, idx, tty->name);
1578− return -1;
1579− }
15801591 if (tty->driver->other) {
15811592 if (o_tty != tty->driver->other->ttys[idx]) {
15821593 printk(KERN_DEBUG "%s: other->table[%d] not o_tty for (%s)\n",
15831594 __func__, idx, tty->name);
15841595 return -1;
15851596 }
1586− if (o_tty->termios != tty->driver->other->termios[idx]) {
1587− printk(KERN_DEBUG "%s: other->termios[%d] not o_termios for (%s)\n",
1588− __func__, idx, tty->name);
1589− return -1;
1590− }
15911597 if (o_tty->link != tty) {
15921598 printk(KERN_DEBUG "%s: bad pty pointers\n", __func__);
15931599 return -1;
@@ -1628,7 +1634,7 @@ int tty_release(struct inode *inode, struct file *filp) · 34 unmodified lines
16281634 if (tty_paranoia_check(tty, inode, __func__))
16291635 return 0;
16301636
1631− tty_lock();
1637+ tty_lock(tty);
16321638 check_tty_count(tty, __func__);
16331639
16341640 __tty_fasync(-1, filp, 0);
@@ -1637,10 +1643,11 @@ int tty_release(struct inode *inode, struct file *filp) · 2 unmodified lines
16371643 pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
16381644 tty->driver->subtype == PTY_TYPE_MASTER);
16391645 devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
1646+ /* Review: parallel close */
16401647 o_tty = tty->link;
16411648
16421649 if (tty_release_checks(tty, o_tty, idx)) {
1643− tty_unlock();
1650+ tty_unlock(tty);
16441651 return 0;
16451652 }
16461653
@@ -1652,7 +1659,7 @@ int tty_release(struct inode *inode, struct file *filp) · 5 unmodified lines
16521659 if (tty->ops->close)
16531660 tty->ops->close(tty, filp);
16541661
1655− tty_unlock();
1662+ tty_unlock(tty);
16561663 /*
16571664 * Sanity check: if tty->count is going to zero, there shouldn't be
16581665 * any waiters on tty->read_wait or tty->write_wait. We test the
@@ -1675,7 +1682,7 @@ int tty_release(struct inode *inode, struct file *filp) · 16 unmodified lines
16751682 opens on /dev/tty */
16761683
16771684 mutex_lock(&tty_mutex);
1678− tty_lock();
1685+ tty_lock_pair(tty, o_tty);
16791686 tty_closing = tty->count <= 1;
16801687 o_tty_closing = o_tty &&
16811688 (o_tty->count <= (pty_master ? 1 : 0));
@@ -1706,7 +1713,7 @@ int tty_release(struct inode *inode, struct file *filp) · 24 unmodified lines
17061713
17071714 printk(KERN_WARNING "%s: %s: read/write wait queue active!\n",
17081715 __func__, tty_name(tty, buf));
1709− tty_unlock();
1716+ tty_unlock_pair(tty, o_tty);
17101717 mutex_unlock(&tty_mutex);
17111718 schedule();
17121719 }
@@ -1715,6 +1722,9 @@ int tty_release(struct inode *inode, struct file *filp) · 2 unmodified lines
17151722 * The closing flags are now consistent with the open counts on
17161723 * both sides, and we've completed the last operation that could
17171724 * block, so it's safe to proceed with closing.
1725+ *
1726+ * We must *not* drop the tty_mutex until we ensure that a further
1727+ * entry into tty_open can not pick up this tty.
17181728 */
17191729 if (pty_master) {
17201730 if (--o_tty->count < 0) {
@@ -1766,12 +1776,13 @@ int tty_release(struct inode *inode, struct file *filp) · 45 unmodified lines
17661776 }
17671777
17681778 mutex_unlock(&tty_mutex);
1779+ tty_unlock_pair(tty, o_tty);
1780+ /* At this point the TTY_CLOSING flag should ensure a dead tty
1781+ cannot be re-opened by a racing opener */
17691782
17701783 /* check whether both sides are closing ... */
1771− if (!tty_closing || (o_tty && !o_tty_closing)) {
1772− tty_unlock();
1784+ if (!tty_closing || (o_tty && !o_tty_closing))
17731785 return 0;
1774− }
17751786
17761787 #ifdef TTY_DEBUG_HANGUP
17771788 printk(KERN_DEBUG "%s: freeing tty structure...\n", __func__);
@@ -1782,14 +1793,17 @@ int tty_release(struct inode *inode, struct file *filp) · 4 unmodified lines
17821793 tty_ldisc_release(tty, o_tty);
17831794 /*
17841795 * The release_tty function takes care of the details of clearing
1785− * the slots and preserving the termios structure.
1796+ * the slots and preserving the termios structure. The tty_unlock_pair
1797+ * should be safe as we keep a kref while the tty is locked (so the
1798+ * unlock never unlocks a freed tty).
17861799 */
1800+ mutex_lock(&tty_mutex);
17871801 release_tty(tty, idx);
1802+ mutex_unlock(&tty_mutex);
17881803
17891804 /* Make this pty number available for reallocation */
17901805 if (devpts)
17911806 devpts_kill_index(inode, idx);
1792− tty_unlock();
17931807 return 0;
17941808 }
17951809
@@ -1893,6 +1907,9 @@ static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp, · 97 unmodified lines
18931907 * Locking: tty_mutex protects tty, tty_lookup_driver and tty_init_dev.
18941908 * tty->count should protect the rest.
18951909 * ->siglock protects ->signal/->sighand
1910+ *
1911+ * Note: the tty_unlock/lock cases without a ref are only safe due to
1912+ * tty_mutex
18961913 */
18971914
18981915 static int tty_open(struct inode *inode, struct file *filp)
@@ -1916,8 +1933,7 @@ retry_open: · 17 unmodified lines
19161933 retval = 0;
19171934
19181935 mutex_lock(&tty_mutex);
1919− tty_lock();
1920−
1936+ /* This is protected by the tty_mutex */
19211937 tty = tty_open_current_tty(device, filp);
19221938 if (IS_ERR(tty)) {
19231939 retval = PTR_ERR(tty);
@@ -1938,17 +1954,19 @@ retry_open: · 14 unmodified lines
19381954 }
19391955
19401956 if (tty) {
1957+ tty_lock(tty);
19411958 retval = tty_reopen(tty);
1942− if (retval)
1959+ if (retval < 0) {
1960+ tty_unlock(tty);
19431961 tty = ERR_PTR(retval);
1944− } else
1962+ }
1963+ } else /* Returns with the tty_lock held for now */
19451964 tty = tty_init_dev(driver, index);
19461965
19471966 mutex_unlock(&tty_mutex);
19481967 if (driver)
19491968 tty_driver_kref_put(driver);
19501969 if (IS_ERR(tty)) {
1951− tty_unlock();
19521970 retval = PTR_ERR(tty);
19531971 goto err_file;
19541972 }
@@ -1977,7 +1995,7 @@ retry_open: · 22 unmodified lines
19771995 printk(KERN_DEBUG "%s: error %d in opening %s...\n", __func__,
19781996 retval, tty->name);
19791997 #endif
1980− tty_unlock(); /* need to call tty_release without BTM */
1998+ tty_unlock(tty); /* need to call tty_release without BTM */
19811999 tty_release(inode, filp);
19822000 if (retval != -ERESTARTSYS)
19832001 return retval;
@@ -1989,17 +2007,15 @@ retry_open: · 5 unmodified lines
19892007 /*
19902008 * Need to reset f_op in case a hangup happened.
19912009 */
1992− tty_lock();
19932010 if (filp->f_op == &hung_up_tty_fops)
19942011 filp->f_op = &tty_fops;
1995− tty_unlock();
19962012 goto retry_open;
19972013 }
1998− tty_unlock();
2014+ tty_unlock(tty);
19992015
20002016
20012017 mutex_lock(&tty_mutex);
2002− tty_lock();
2018+ tty_lock(tty);
20032019 spin_lock_irq(&current->sighand->siglock);
20042020 if (!noctty &&
20052021 current->signal->leader &&
@@ -2007,11 +2023,10 @@ retry_open: · 1 unmodified line
20072023 tty->session == NULL)
20082024 __proc_set_tty(current, tty);
20092025 spin_unlock_irq(&current->sighand->siglock);
2010− tty_unlock();
2026+ tty_unlock(tty);
20112027 mutex_unlock(&tty_mutex);
20122028 return 0;
20132029 err_unlock:
2014− tty_unlock();
20152030 mutex_unlock(&tty_mutex);
20162031 /* after locks to avoid deadlock */
20172032 if (!IS_ERR_OR_NULL(driver))
@@ -2094,10 +2109,13 @@ out: · 76 unmodified lines
20942109
20952110 static int tty_fasync(int fd, struct file *filp, int on)
20962111 {
2112+ struct tty_struct *tty = file_tty(filp);
20972113 int retval;
2098− tty_lock();
2114+
2115+ tty_lock(tty);
20992116 retval = __tty_fasync(fd, filp, on);
2100− tty_unlock();
2117+ tty_unlock(tty);
2118+
21012119 return retval;
21022120 }
21032121
@@ -2756,7 +2774,7 @@ long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg) · 652 unmodified lines
27562774 if (ld->ops->ioctl) {
27572775 retval = ld->ops->ioctl(tty, file, cmd, arg);
27582776 if (retval == -ENOIOCTLCMD)
2759− retval = -EINVAL;
2777+ retval = -ENOTTY;
27602778 }
27612779 tty_ldisc_deref(ld);
27622780 return retval;
@@ -2934,6 +2952,7 @@ void initialize_tty_struct(struct tty_struct *tty, · 171 unmodified lines
29342952 tty->pgrp = NULL;
29352953 tty->overrun_time = jiffies;
29362954 tty_buffer_init(tty);
2955+ mutex_init(&tty->legacy_mutex);
29372956 mutex_init(&tty->termios_mutex);
29382957 mutex_init(&tty->ldisc_mutex);
29392958 init_waitqueue_head(&tty->write_wait);
@@ -2991,6 +3010,15 @@ EXPORT_SYMBOL_GPL(tty_put_char); · 51 unmodified lines
29913010
29923011 struct class *tty_class;
29933012
3013+static int tty_cdev_add(struct tty_driver *driver, dev_t dev,
3014+ unsigned int index, unsigned int count)
3015+{
3016+ /* init here, since reused cdevs cause crashes */
3017+ cdev_init(&driver->cdevs[index], &tty_fops);
3018+ driver->cdevs[index].owner = driver->owner;
3019+ return cdev_add(&driver->cdevs[index], dev, count);
3020+}
3021+
29943022 /**
29953023 * tty_register_device - register a tty device
29963024 * @driver: the tty driver that describes the tty device
@@ -3012,9 +3040,47 @@ struct class *tty_class; · 15 unmodified lines
30123040
30133041 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
30143042 struct device *device)
3043+{
3044+ return tty_register_device_attr(driver, index, device, NULL, NULL);
3045+}
3046+EXPORT_SYMBOL(tty_register_device);
3047+
3048+static void tty_device_create_release(struct device *dev)
3049+{
3050+ pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
3051+ kfree(dev);
3052+}
3053+
3054+/**
3055+ * tty_register_device_attr - register a tty device
3056+ * @driver: the tty driver that describes the tty device
3057+ * @index: the index in the tty driver for this tty device
3058+ * @device: a struct device that is associated with this tty device.
3059+ * This field is optional, if there is no known struct device
3060+ * for this tty device it can be set to NULL safely.
3061+ * @drvdata: Driver data to be set to device.
3062+ * @attr_grp: Attribute group to be set on device.
3063+ *
3064+ * Returns a pointer to the struct device for this tty device
3065+ * (or ERR_PTR(-EFOO) on error).
3066+ *
3067+ * This call is required to be made to register an individual tty device
3068+ * if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
3069+ * that bit is not set, this function should not be called by a tty
3070+ * driver.
3071+ *
3072+ * Locking: ??
3073+ */
3074+struct device *tty_register_device_attr(struct tty_driver *driver,
3075+ unsigned index, struct device *device,
3076+ void *drvdata,
3077+ const struct attribute_group **attr_grp)
30153078 {
30163079 char name[64];
3017− dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
3080+ dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
3081+ struct device *dev = NULL;
3082+ int retval = -ENODEV;
3083+ bool cdev = false;
30183084
30193085 if (index >= driver->num) {
30203086 printk(KERN_ERR "Attempt to register invalid tty line number "
@@ -3027,9 +3093,40 @@ struct device *tty_register_device(struct tty_driver *driver, unsigned index, · 6 unmodified lines
30273093 else
30283094 tty_line_name(driver, index, name);
30293095
3030− return device_create(tty_class, device, dev, NULL, name);
3096+ if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3097+ retval = tty_cdev_add(driver, devt, index, 1);
3098+ if (retval)
3099+ goto error;
3100+ cdev = true;
3101+ }
3102+
3103+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3104+ if (!dev) {
3105+ retval = -ENOMEM;
3106+ goto error;
3107+ }
3108+
3109+ dev->devt = devt;
3110+ dev->class = tty_class;
3111+ dev->parent = device;
3112+ dev->release = tty_device_create_release;
3113+ dev_set_name(dev, "%s", name);
3114+ dev->groups = attr_grp;
3115+ dev_set_drvdata(dev, drvdata);
3116+
3117+ retval = device_register(dev);
3118+ if (retval)
3119+ goto error;
3120+
3121+ return dev;
3122+
3123+error:
3124+ put_device(dev);
3125+ if (cdev)
3126+ cdev_del(&driver->cdevs[index]);
3127+ return ERR_PTR(retval);
30313128 }
3032−EXPORT_SYMBOL(tty_register_device);
3129+EXPORT_SYMBOL_GPL(tty_register_device_attr);
30333130
30343131 /**
30353132 * tty_unregister_device - unregister a tty device
@@ -3046,31 +3143,82 @@ void tty_unregister_device(struct tty_driver *driver, unsigned index) · 10 unmodified lines
30463143 {
30473144 device_destroy(tty_class,
30483145 MKDEV(driver->major, driver->minor_start) + index);
3146+ if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC))
3147+ cdev_del(&driver->cdevs[index]);
30493148 }
30503149 EXPORT_SYMBOL(tty_unregister_device);
30513150
3052−struct tty_driver *__alloc_tty_driver(int lines, struct module *owner)
3151+/**
3152+ * __tty_alloc_driver -- allocate tty driver
3153+ * @lines: count of lines this driver can handle at most
3154+ * @owner: module which is repsonsible for this driver
3155+ * @flags: some of TTY_DRIVER_* flags, will be set in driver->flags
3156+ *
3157+ * This should not be called directly, some of the provided macros should be
3158+ * used instead. Use IS_ERR and friends on @retval.
3159+ */
3160+struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
3161+ unsigned long flags)
30533162 {
30543163 struct tty_driver *driver;
3164+ unsigned int cdevs = 1;
3165+ int err;
3166+
3167+ if (!lines || (flags & TTY_DRIVER_UNNUMBERED_NODE && lines > 1))
3168+ return ERR_PTR(-EINVAL);
30553169
30563170 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
3057− if (driver) {
3058− kref_init(&driver->kref);
3059− driver->magic = TTY_DRIVER_MAGIC;
3060− driver->num = lines;
3061− driver->owner = owner;
3062− /* later we'll move allocation of tables here */
3171+ if (!driver)
3172+ return ERR_PTR(-ENOMEM);
3173+
3174+ kref_init(&driver->kref);
3175+ driver->magic = TTY_DRIVER_MAGIC;
3176+ driver->num = lines;
3177+ driver->owner = owner;
3178+ driver->flags = flags;
3179+
3180+ if (!(flags & TTY_DRIVER_DEVPTS_MEM)) {
3181+ driver->ttys = kcalloc(lines, sizeof(*driver->ttys),
3182+ GFP_KERNEL);
3183+ driver->termios = kcalloc(lines, sizeof(*driver->termios),
3184+ GFP_KERNEL);
3185+ if (!driver->ttys || !driver->termios) {
3186+ err = -ENOMEM;
3187+ goto err_free_all;
3188+ }
30633189 }
3190+
3191+ if (!(flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3192+ driver->ports = kcalloc(lines, sizeof(*driver->ports),
3193+ GFP_KERNEL);
3194+ if (!driver->ports) {
3195+ err = -ENOMEM;
3196+ goto err_free_all;
3197+ }
3198+ cdevs = lines;
3199+ }
3200+
3201+ driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL);
3202+ if (!driver->cdevs) {
3203+ err = -ENOMEM;
3204+ goto err_free_all;
3205+ }
3206+
30643207 return driver;
3208+err_free_all:
3209+ kfree(driver->ports);
3210+ kfree(driver->ttys);
3211+ kfree(driver->termios);
3212+ kfree(driver);
3213+ return ERR_PTR(err);
30653214 }
3066−EXPORT_SYMBOL(__alloc_tty_driver);
3215+EXPORT_SYMBOL(__tty_alloc_driver);
30673216
30683217 static void destruct_tty_driver(struct kref *kref)
30693218 {
30703219 struct tty_driver *driver = container_of(kref, struct tty_driver, kref);
30713220 int i;
30723221 struct ktermios *tp;
3073− void *p;
30743222
30753223 if (driver->flags & TTY_DRIVER_INSTALLED) {
30763224 /*
@@ -3087,13 +3235,14 @@ static void destruct_tty_driver(struct kref *kref) · 10 unmodified lines
30873235 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
30883236 tty_unregister_device(driver, i);
30893237 }
3090− p = driver->ttys;
30913238 proc_tty_unregister_driver(driver);
3092− driver->ttys = NULL;
3093− driver->termios = NULL;
3094− kfree(p);
3095− cdev_del(&driver->cdev);
3239+ if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)
3240+ cdev_del(&driver->cdevs[0]);
30963241 }
3242+ kfree(driver->cdevs);
3243+ kfree(driver->ports);
3244+ kfree(driver->termios);
3245+ kfree(driver->ttys);
30973246 kfree(driver);
30983247 }
30993248
@@ -3124,15 +3273,8 @@ int tty_register_driver(struct tty_driver *driver) · 24 unmodified lines
31243273 int error;
31253274 int i;
31263275 dev_t dev;
3127− void **p = NULL;
31283276 struct device *d;
31293277
3130− if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM) && driver->num) {
3131− p = kzalloc(driver->num * 2 * sizeof(void *), GFP_KERNEL);
3132− if (!p)
3133− return -ENOMEM;
3134− }
3135−
31363278 if (!driver->major) {
31373279 error = alloc_chrdev_region(&dev, driver->minor_start,
31383280 driver->num, driver->name);
@@ -3144,28 +3286,13 @@ int tty_register_driver(struct tty_driver *driver) · 5 unmodified lines
31443286 dev = MKDEV(driver->major, driver->minor_start);
31453287 error = register_chrdev_region(dev, driver->num, driver->name);
31463288 }
3147− if (error < 0) {
3148− kfree(p);
3149− return error;
3150− }
3289+ if (error < 0)
3290+ goto err;
31513291
3152− if (p) {
3153− driver->ttys = (struct tty_struct **)p;
3154− driver->termios = (struct ktermios **)(p + driver->num);
3155− } else {
3156− driver->ttys = NULL;
3157− driver->termios = NULL;
3158− }
3159−
3160− cdev_init(&driver->cdev, &tty_fops);
3161− driver->cdev.owner = driver->owner;
3162− error = cdev_add(&driver->cdev, dev, driver->num);
3163− if (error) {
3164− unregister_chrdev_region(dev, driver->num);
3165− driver->ttys = NULL;
3166− driver->termios = NULL;
3167− kfree(p);
3168− return error;
3292+ if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) {
3293+ error = tty_cdev_add(driver, dev, 0, driver->num);
3294+ if (error)
3295+ goto err_unreg_char;
31693296 }
31703297
31713298 mutex_lock(&tty_mutex);
@@ -3177,7 +3304,7 @@ int tty_register_driver(struct tty_driver *driver) · 5 unmodified lines
31773304 d = tty_register_device(driver, i, NULL);
31783305 if (IS_ERR(d)) {
31793306 error = PTR_ERR(d);
3180− goto err;
3307+ goto err_unreg_devs;
31813308 }
31823309 }
31833310 }
@@ -3185,7 +3312,7 @@ int tty_register_driver(struct tty_driver *driver) · 1 unmodified line
31853312 driver->flags |= TTY_DRIVER_INSTALLED;
31863313 return 0;
31873314
3188−err:
3315+err_unreg_devs:
31893316 for (i--; i >= 0; i--)
31903317 tty_unregister_device(driver, i);
31913318
@@ -3193,13 +3320,11 @@ err: · 1 unmodified line
31933320 list_del(&driver->tty_drivers);
31943321 mutex_unlock(&tty_mutex);
31953322
3323+err_unreg_char:
31963324 unregister_chrdev_region(dev, driver->num);
3197− driver->ttys = NULL;
3198− driver->termios = NULL;
3199− kfree(p);
3325+err:
32003326 return error;
32013327 }
3202−
32033328 EXPORT_SYMBOL(tty_register_driver);
32043329
32053330 /*
drivers/tty/tty_ioctl.c+50−50
@@ -410,7 +410,7 @@ EXPORT_SYMBOL_GPL(tty_termios_encode_baud_rate); · 409 unmodified lines
410410
411411 void tty_encode_baud_rate(struct tty_struct *tty, speed_t ibaud, speed_t obaud)
412412 {
413− tty_termios_encode_baud_rate(tty->termios, ibaud, obaud);
413+ tty_termios_encode_baud_rate(&tty->termios, ibaud, obaud);
414414 }
415415 EXPORT_SYMBOL_GPL(tty_encode_baud_rate);
416416
@@ -427,7 +427,7 @@ EXPORT_SYMBOL_GPL(tty_encode_baud_rate); · 10 unmodified lines
427427
428428 speed_t tty_get_baud_rate(struct tty_struct *tty)
429429 {
430− speed_t baud = tty_termios_baud_rate(tty->termios);
430+ speed_t baud = tty_termios_baud_rate(&tty->termios);
431431
432432 if (baud == 38400 && tty->alt_speed) {
433433 if (!tty->warned) {
@@ -509,14 +509,14 @@ int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) · 75 unmodified lines
509509 /* FIXME: we need to decide on some locking/ordering semantics
510510 for the set_termios notification eventually */
511511 mutex_lock(&tty->termios_mutex);
512− old_termios = *tty->termios;
513− *tty->termios = *new_termios;
514− unset_locked_termios(tty->termios, &old_termios, tty->termios_locked);
512+ old_termios = tty->termios;
513+ tty->termios = *new_termios;
514+ unset_locked_termios(&tty->termios, &old_termios, &tty->termios_locked);
515515
516516 /* See if packet mode change of state. */
517517 if (tty->link && tty->link->packet) {
518518 int extproc = (old_termios.c_lflag & EXTPROC) |
519− (tty->termios->c_lflag & EXTPROC);
519+ (tty->termios.c_lflag & EXTPROC);
520520 int old_flow = ((old_termios.c_iflag & IXON) &&
521521 (old_termios.c_cc[VSTOP] == '\023') &&
522522 (old_termios.c_cc[VSTART] == '\021'));
@@ -542,7 +542,7 @@ int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) · 19 unmodified lines
542542 if (tty->ops->set_termios)
543543 (*tty->ops->set_termios)(tty, &old_termios);
544544 else
545− tty_termios_copy_hw(tty->termios, &old_termios);
545+ tty_termios_copy_hw(&tty->termios, &old_termios);
546546
547547 ld = tty_ldisc_ref(tty);
548548 if (ld != NULL) {
@@ -578,7 +578,7 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt) · 29 unmodified lines
578578 return retval;
579579
580580 mutex_lock(&tty->termios_mutex);
581− memcpy(&tmp_termios, tty->termios, sizeof(struct ktermios));
581+ tmp_termios = tty->termios;
582582 mutex_unlock(&tty->termios_mutex);
583583
584584 if (opt & TERMIOS_TERMIO) {
@@ -632,14 +632,14 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt) · 47 unmodified lines
632632 static void copy_termios(struct tty_struct *tty, struct ktermios *kterm)
633633 {
634634 mutex_lock(&tty->termios_mutex);
635− memcpy(kterm, tty->termios, sizeof(struct ktermios));
635+ *kterm = tty->termios;
636636 mutex_unlock(&tty->termios_mutex);
637637 }
638638
639639 static void copy_termios_locked(struct tty_struct *tty, struct ktermios *kterm)
640640 {
641641 mutex_lock(&tty->termios_mutex);
642− memcpy(kterm, tty->termios_locked, sizeof(struct ktermios));
642+ *kterm = tty->termios_locked;
643643 mutex_unlock(&tty->termios_mutex);
644644 }
645645
@@ -707,16 +707,16 @@ static int get_sgflags(struct tty_struct *tty) · 61 unmodified lines
707707 {
708708 int flags = 0;
709709
710− if (!(tty->termios->c_lflag & ICANON)) {
711− if (tty->termios->c_lflag & ISIG)
710+ if (!(tty->termios.c_lflag & ICANON)) {
711+ if (tty->termios.c_lflag & ISIG)
712712 flags |= 0x02; /* cbreak */
713713 else
714714 flags |= 0x20; /* raw */
715715 }
716− if (tty->termios->c_lflag & ECHO)
716+ if (tty->termios.c_lflag & ECHO)
717717 flags |= 0x08; /* echo */
718− if (tty->termios->c_oflag & OPOST)
719− if (tty->termios->c_oflag & ONLCR)
718+ if (tty->termios.c_oflag & OPOST)
719+ if (tty->termios.c_oflag & ONLCR)
720720 flags |= 0x10; /* crmod */
721721 return flags;
722722 }
@@ -726,10 +726,10 @@ static int get_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb) · 3 unmodified lines
726726 struct sgttyb tmp;
727727
728728 mutex_lock(&tty->termios_mutex);
729− tmp.sg_ispeed = tty->termios->c_ispeed;
730− tmp.sg_ospeed = tty->termios->c_ospeed;
731− tmp.sg_erase = tty->termios->c_cc[VERASE];
732− tmp.sg_kill = tty->termios->c_cc[VKILL];
729+ tmp.sg_ispeed = tty->termios.c_ispeed;
730+ tmp.sg_ospeed = tty->termios.c_ospeed;
731+ tmp.sg_erase = tty->termios.c_cc[VERASE];
732+ tmp.sg_kill = tty->termios.c_cc[VKILL];
733733 tmp.sg_flags = get_sgflags(tty);
734734 mutex_unlock(&tty->termios_mutex);
735735
@@ -787,7 +787,7 @@ static int set_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb) · 51 unmodified lines
787787 return -EFAULT;
788788
789789 mutex_lock(&tty->termios_mutex);
790− termios = *tty->termios;
790+ termios = tty->termios;
791791 termios.c_cc[VERASE] = tmp.sg_erase;
792792 termios.c_cc[VKILL] = tmp.sg_kill;
793793 set_sgflags(&termios, tmp.sg_flags);
@@ -808,12 +808,12 @@ static int get_tchars(struct tty_struct *tty, struct tchars __user *tchars) · 14 unmodified lines
808808 struct tchars tmp;
809809
810810 mutex_lock(&tty->termios_mutex);
811− tmp.t_intrc = tty->termios->c_cc[VINTR];
812− tmp.t_quitc = tty->termios->c_cc[VQUIT];
813− tmp.t_startc = tty->termios->c_cc[VSTART];
814− tmp.t_stopc = tty->termios->c_cc[VSTOP];
815− tmp.t_eofc = tty->termios->c_cc[VEOF];
816− tmp.t_brkc = tty->termios->c_cc[VEOL2]; /* what is brkc anyway? */
811+ tmp.t_intrc = tty->termios.c_cc[VINTR];
812+ tmp.t_quitc = tty->termios.c_cc[VQUIT];
813+ tmp.t_startc = tty->termios.c_cc[VSTART];
814+ tmp.t_stopc = tty->termios.c_cc[VSTOP];
815+ tmp.t_eofc = tty->termios.c_cc[VEOF];
816+ tmp.t_brkc = tty->termios.c_cc[VEOL2]; /* what is brkc anyway? */
817817 mutex_unlock(&tty->termios_mutex);
818818 return copy_to_user(tchars, &tmp, sizeof(tmp)) ? -EFAULT : 0;
819819 }
@@ -825,12 +825,12 @@ static int set_tchars(struct tty_struct *tty, struct tchars __user *tchars) · 5 unmodified lines
825825 if (copy_from_user(&tmp, tchars, sizeof(tmp)))
826826 return -EFAULT;
827827 mutex_lock(&tty->termios_mutex);
828− tty->termios->c_cc[VINTR] = tmp.t_intrc;
829− tty->termios->c_cc[VQUIT] = tmp.t_quitc;
830− tty->termios->c_cc[VSTART] = tmp.t_startc;
831− tty->termios->c_cc[VSTOP] = tmp.t_stopc;
832− tty->termios->c_cc[VEOF] = tmp.t_eofc;
833− tty->termios->c_cc[VEOL2] = tmp.t_brkc; /* what is brkc anyway? */
828+ tty->termios.c_cc[VINTR] = tmp.t_intrc;
829+ tty->termios.c_cc[VQUIT] = tmp.t_quitc;
830+ tty->termios.c_cc[VSTART] = tmp.t_startc;
831+ tty->termios.c_cc[VSTOP] = tmp.t_stopc;
832+ tty->termios.c_cc[VEOF] = tmp.t_eofc;
833+ tty->termios.c_cc[VEOL2] = tmp.t_brkc; /* what is brkc anyway? */
834834 mutex_unlock(&tty->termios_mutex);
835835 return 0;
836836 }
@@ -842,14 +842,14 @@ static int get_ltchars(struct tty_struct *tty, struct ltchars __user *ltchars) · 5 unmodified lines
842842 struct ltchars tmp;
843843
844844 mutex_lock(&tty->termios_mutex);
845− tmp.t_suspc = tty->termios->c_cc[VSUSP];
845+ tmp.t_suspc = tty->termios.c_cc[VSUSP];
846846 /* what is dsuspc anyway? */
847− tmp.t_dsuspc = tty->termios->c_cc[VSUSP];
848− tmp.t_rprntc = tty->termios->c_cc[VREPRINT];
847+ tmp.t_dsuspc = tty->termios.c_cc[VSUSP];
848+ tmp.t_rprntc = tty->termios.c_cc[VREPRINT];
849849 /* what is flushc anyway? */
850− tmp.t_flushc = tty->termios->c_cc[VEOL2];
851− tmp.t_werasc = tty->termios->c_cc[VWERASE];
852− tmp.t_lnextc = tty->termios->c_cc[VLNEXT];
850+ tmp.t_flushc = tty->termios.c_cc[VEOL2];
851+ tmp.t_werasc = tty->termios.c_cc[VWERASE];
852+ tmp.t_lnextc = tty->termios.c_cc[VLNEXT];
853853 mutex_unlock(&tty->termios_mutex);
854854 return copy_to_user(ltchars, &tmp, sizeof(tmp)) ? -EFAULT : 0;
855855 }
@@ -862,14 +862,14 @@ static int set_ltchars(struct tty_struct *tty, struct ltchars __user *ltchars) · 6 unmodified lines
862862 return -EFAULT;
863863
864864 mutex_lock(&tty->termios_mutex);
865− tty->termios->c_cc[VSUSP] = tmp.t_suspc;
865+ tty->termios.c_cc[VSUSP] = tmp.t_suspc;
866866 /* what is dsuspc anyway? */
867− tty->termios->c_cc[VEOL2] = tmp.t_dsuspc;
868− tty->termios->c_cc[VREPRINT] = tmp.t_rprntc;
867+ tty->termios.c_cc[VEOL2] = tmp.t_dsuspc;
868+ tty->termios.c_cc[VREPRINT] = tmp.t_rprntc;
869869 /* what is flushc anyway? */
870− tty->termios->c_cc[VEOL2] = tmp.t_flushc;
871− tty->termios->c_cc[VWERASE] = tmp.t_werasc;
872− tty->termios->c_cc[VLNEXT] = tmp.t_lnextc;
870+ tty->termios.c_cc[VEOL2] = tmp.t_flushc;
871+ tty->termios.c_cc[VWERASE] = tmp.t_werasc;
872+ tty->termios.c_cc[VLNEXT] = tmp.t_lnextc;
873873 mutex_unlock(&tty->termios_mutex);
874874 return 0;
875875 }
@@ -920,12 +920,12 @@ static int tty_change_softcar(struct tty_struct *tty, int arg) · 44 unmodified lines
920920 struct ktermios old;
921921
922922 mutex_lock(&tty->termios_mutex);
923− old = *tty->termios;
924− tty->termios->c_cflag &= ~CLOCAL;
925− tty->termios->c_cflag |= bit;
923+ old = tty->termios;
924+ tty->termios.c_cflag &= ~CLOCAL;
925+ tty->termios.c_cflag |= bit;
926926 if (tty->ops->set_termios)
927927 tty->ops->set_termios(tty, &old);
928− if ((tty->termios->c_cflag & CLOCAL) != bit)
928+ if ((tty->termios.c_cflag & CLOCAL) != bit)
929929 ret = -EINVAL;
930930 mutex_unlock(&tty->termios_mutex);
931931 return ret;
@@ -1031,7 +1031,7 @@ int tty_mode_ioctl(struct tty_struct *tty, struct file *file, · 99 unmodified lines
10311031 (struct termios __user *) arg))
10321032 return -EFAULT;
10331033 mutex_lock(&real_tty->termios_mutex);
1034− memcpy(real_tty->termios_locked, &kterm, sizeof(struct ktermios));
1034+ real_tty->termios_locked = kterm;
10351035 mutex_unlock(&real_tty->termios_mutex);
10361036 return 0;
10371037 #else
@@ -1048,7 +1048,7 @@ int tty_mode_ioctl(struct tty_struct *tty, struct file *file, · 10 unmodified lines
10481048 (struct termios __user *) arg))
10491049 return -EFAULT;
10501050 mutex_lock(&real_tty->termios_mutex);
1051− memcpy(real_tty->termios_locked, &kterm, sizeof(struct ktermios));
1051+ real_tty->termios_locked = kterm;
10521052 mutex_unlock(&real_tty->termios_mutex);
10531053 return ret;
10541054 #endif
drivers/tty/tty_ldisc.c+44−34
@@ -413,7 +413,7 @@ EXPORT_SYMBOL_GPL(tty_ldisc_flush); · 412 unmodified lines
413413 static void tty_set_termios_ldisc(struct tty_struct *tty, int num)
414414 {
415415 mutex_lock(&tty->termios_mutex);
416− tty->termios->c_line = num;
416+ tty->termios.c_line = num;
417417 mutex_unlock(&tty->termios_mutex);
418418 }
419419
@@ -568,7 +568,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) · 148 unmodified lines
568568 if (IS_ERR(new_ldisc))
569569 return PTR_ERR(new_ldisc);
570570
571− tty_lock();
571+ tty_lock(tty);
572572 /*
573573 * We need to look at the tty locking here for pty/tty pairs
574574 * when both sides try to change in parallel.
@@ -582,12 +582,12 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) · 7 unmodified lines
582582 */
583583
584584 if (tty->ldisc->ops->num == ldisc) {
585− tty_unlock();
585+ tty_unlock(tty);
586586 tty_ldisc_put(new_ldisc);
587587 return 0;
588588 }
589589
590− tty_unlock();
590+ tty_unlock(tty);
591591 /*
592592 * Problem: What do we do if this blocks ?
593593 * We could deadlock here
@@ -595,7 +595,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) · 1 unmodified line
595595
596596 tty_wait_until_sent(tty, 0);
597597
598− tty_lock();
598+ tty_lock(tty);
599599 mutex_lock(&tty->ldisc_mutex);
600600
601601 /*
@@ -605,10 +605,10 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) · 3 unmodified lines
605605
606606 while (test_bit(TTY_LDISC_CHANGING, &tty->flags)) {
607607 mutex_unlock(&tty->ldisc_mutex);
608− tty_unlock();
608+ tty_unlock(tty);
609609 wait_event(tty_ldisc_wait,
610610 test_bit(TTY_LDISC_CHANGING, &tty->flags) == 0);
611− tty_lock();
611+ tty_lock(tty);
612612 mutex_lock(&tty->ldisc_mutex);
613613 }
614614
@@ -623,7 +623,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) · 8 unmodified lines
623623
624624 o_ldisc = tty->ldisc;
625625
626− tty_unlock();
626+ tty_unlock(tty);
627627 /*
628628 * Make sure we don't change while someone holds a
629629 * reference to the line discipline. The TTY_LDISC bit
@@ -650,7 +650,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) · 20 unmodified lines
650650
651651 retval = tty_ldisc_wait_idle(tty, 5 * HZ);
652652
653− tty_lock();
653+ tty_lock(tty);
654654 mutex_lock(&tty->ldisc_mutex);
655655
656656 /* handle wait idle failure locked */
@@ -665,7 +665,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) · 8 unmodified lines
665665 clear_bit(TTY_LDISC_CHANGING, &tty->flags);
666666 mutex_unlock(&tty->ldisc_mutex);
667667 tty_ldisc_put(new_ldisc);
668− tty_unlock();
668+ tty_unlock(tty);
669669 return -EIO;
670670 }
671671
@@ -708,7 +708,7 @@ enable: · 36 unmodified lines
708708 if (o_work)
709709 schedule_work(&o_tty->buf.work);
710710 mutex_unlock(&tty->ldisc_mutex);
711− tty_unlock();
711+ tty_unlock(tty);
712712 return retval;
713713 }
714714
@@ -722,9 +722,9 @@ enable: · 7 unmodified lines
722722 static void tty_reset_termios(struct tty_struct *tty)
723723 {
724724 mutex_lock(&tty->termios_mutex);
725− *tty->termios = tty->driver->init_termios;
726− tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
727− tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
725+ tty->termios = tty->driver->init_termios;
726+ tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
727+ tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
728728 mutex_unlock(&tty->termios_mutex);
729729 }
730730
@@ -816,11 +816,11 @@ void tty_ldisc_hangup(struct tty_struct *tty) · 85 unmodified lines
816816 * need to wait for another function taking the BTM
817817 */
818818 clear_bit(TTY_LDISC, &tty->flags);
819− tty_unlock();
819+ tty_unlock(tty);
820820 cancel_work_sync(&tty->buf.work);
821821 mutex_unlock(&tty->ldisc_mutex);
822822 retry:
823− tty_lock();
823+ tty_lock(tty);
824824 mutex_lock(&tty->ldisc_mutex);
825825
826826 /* At this point we have a closed ldisc and we want to
@@ -831,7 +831,7 @@ retry: · 4 unmodified lines
831831 if (atomic_read(&tty->ldisc->users) != 1) {
832832 char cur_n[TASK_COMM_LEN], tty_n[64];
833833 long timeout = 3 * HZ;
834− tty_unlock();
834+ tty_unlock(tty);
835835
836836 while (tty_ldisc_wait_idle(tty, timeout) == -EBUSY) {
837837 timeout = MAX_SCHEDULE_TIMEOUT;
@@ -846,7 +846,7 @@ retry: · 8 unmodified lines
846846
847847 if (reset == 0) {
848848
849− if (!tty_ldisc_reinit(tty, tty->termios->c_line))
849+ if (!tty_ldisc_reinit(tty, tty->termios.c_line))
850850 err = tty_ldisc_open(tty, tty->ldisc);
851851 else
852852 err = 1;
@@ -894,6 +894,23 @@ int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty) · 41 unmodified lines
894894 tty_ldisc_enable(tty);
895895 return 0;
896896 }
897+
898+static void tty_ldisc_kill(struct tty_struct *tty)
899+{
900+ mutex_lock(&tty->ldisc_mutex);
901+ /*
902+ * Now kill off the ldisc
903+ */
904+ tty_ldisc_close(tty, tty->ldisc);
905+ tty_ldisc_put(tty->ldisc);
906+ /* Force an oops if we mess this up */
907+ tty->ldisc = NULL;
908+
909+ /* Ensure the next open requests the N_TTY ldisc */
910+ tty_set_termios_ldisc(tty, N_TTY);
911+ mutex_unlock(&tty->ldisc_mutex);
912+}
913+
897914 /**
898915 * tty_ldisc_release - release line discipline
899916 * @tty: tty being shut down
@@ -912,28 +929,21 @@ void tty_ldisc_release(struct tty_struct *tty, struct tty_struct *o_tty) · 12 unmodified lines
912929 * race with the set_ldisc code path.
913930 */
914931
915− tty_unlock();
932+ tty_lock_pair(tty, o_tty);
916933 tty_ldisc_halt(tty);
917934 tty_ldisc_flush_works(tty);
918− tty_lock();
919−
920− mutex_lock(&tty->ldisc_mutex);
921− /*
922− * Now kill off the ldisc
923− */
924− tty_ldisc_close(tty, tty->ldisc);
925− tty_ldisc_put(tty->ldisc);
926− /* Force an oops if we mess this up */
927− tty->ldisc = NULL;
928−
929− /* Ensure the next open requests the N_TTY ldisc */
930− tty_set_termios_ldisc(tty, N_TTY);
931− mutex_unlock(&tty->ldisc_mutex);
935+ if (o_tty) {
936+ tty_ldisc_halt(o_tty);
937+ tty_ldisc_flush_works(o_tty);
938+ }
932939
933940 /* This will need doing differently if we need to lock */
941+ tty_ldisc_kill(tty);
942+
934943 if (o_tty)
935− tty_ldisc_release(o_tty, NULL);
944+ tty_ldisc_kill(o_tty);
936945
946+ tty_unlock_pair(tty, o_tty);
937947 /* And the memory resources remaining (buffers, termios) will be
938948 disposed of when the kref hits zero */
939949 }
drivers/tty/tty_mutex.c+56−15
@@ -4,29 +4,70 @@ · 3 unmodified lines
44 #include <linux/semaphore.h>
55 #include <linux/sched.h>
66
7−/*
8− * The 'big tty mutex'
9− *
10− * This mutex is taken and released by tty_lock() and tty_unlock(),
11− * replacing the older big kernel lock.
12− * It can no longer be taken recursively, and does not get
13− * released implicitly while sleeping.
14− *
15− * Don't use in new code.
16− */
17−static DEFINE_MUTEX(big_tty_mutex);
7+/* Legacy tty mutex glue */
8+
9+enum {
10+ TTY_MUTEX_NORMAL,
11+ TTY_MUTEX_NESTED,
12+};
1813
1914 /*
2015 * Getting the big tty mutex.
2116 */
22−void __lockfunc tty_lock(void)
17+
18+static void __lockfunc tty_lock_nested(struct tty_struct *tty,
19+ unsigned int subclass)
2320 {
24− mutex_lock(&big_tty_mutex);
21+ if (tty->magic != TTY_MAGIC) {
22+ printk(KERN_ERR "L Bad %p\n", tty);
23+ WARN_ON(1);
24+ return;
25+ }
26+ tty_kref_get(tty);
27+ mutex_lock_nested(&tty->legacy_mutex, subclass);
28+}
29+
30+void __lockfunc tty_lock(struct tty_struct *tty)
31+{
32+ return tty_lock_nested(tty, TTY_MUTEX_NORMAL);
2533 }
2634 EXPORT_SYMBOL(tty_lock);
2735
28−void __lockfunc tty_unlock(void)
36+void __lockfunc tty_unlock(struct tty_struct *tty)
2937 {
30− mutex_unlock(&big_tty_mutex);
38+ if (tty->magic != TTY_MAGIC) {
39+ printk(KERN_ERR "U Bad %p\n", tty);
40+ WARN_ON(1);
41+ return;
42+ }
43+ mutex_unlock(&tty->legacy_mutex);
44+ tty_kref_put(tty);
3145 }
3246 EXPORT_SYMBOL(tty_unlock);
47+
48+/*
49+ * Getting the big tty mutex for a pair of ttys with lock ordering
50+ * On a non pty/tty pair tty2 can be NULL which is just fine.
51+ */
52+void __lockfunc tty_lock_pair(struct tty_struct *tty,
53+ struct tty_struct *tty2)
54+{
55+ if (tty < tty2) {
56+ tty_lock(tty);
57+ tty_lock_nested(tty2, TTY_MUTEX_NESTED);
58+ } else {
59+ if (tty2 && tty2 != tty)
60+ tty_lock(tty2);
61+ tty_lock_nested(tty, TTY_MUTEX_NESTED);
62+ }
63+}
64+EXPORT_SYMBOL(tty_lock_pair);
65+
66+void __lockfunc tty_unlock_pair(struct tty_struct *tty,
67+ struct tty_struct *tty2)
68+{
69+ tty_unlock(tty);
70+ if (tty2 && tty2 != tty)
71+ tty_unlock(tty2);
72+}
73+EXPORT_SYMBOL(tty_unlock_pair);
drivers/tty/tty_port.c+88−6
@@ -33,6 +33,70 @@ void tty_port_init(struct tty_port *port) · 32 unmodified lines
3333 }
3434 EXPORT_SYMBOL(tty_port_init);
3535
36+/**
37+ * tty_port_link_device - link tty and tty_port
38+ * @port: tty_port of the device
39+ * @driver: tty_driver for this device
40+ * @index: index of the tty
41+ *
42+ * Provide the tty layer wit ha link from a tty (specified by @index) to a
43+ * tty_port (@port). Use this only if neither tty_port_register_device nor
44+ * tty_port_install is used in the driver. If used, this has to be called before
45+ * tty_register_driver.
46+ */
47+void tty_port_link_device(struct tty_port *port,
48+ struct tty_driver *driver, unsigned index)
49+{
50+ if (WARN_ON(index >= driver->num))
51+ return;
52+ driver->ports[index] = port;
53+}
54+EXPORT_SYMBOL_GPL(tty_port_link_device);
55+
56+/**
57+ * tty_port_register_device - register tty device
58+ * @port: tty_port of the device
59+ * @driver: tty_driver for this device
60+ * @index: index of the tty
61+ * @device: parent if exists, otherwise NULL
62+ *
63+ * It is the same as tty_register_device except the provided @port is linked to
64+ * a concrete tty specified by @index. Use this or tty_port_install (or both).
65+ * Call tty_port_link_device as a last resort.
66+ */
67+struct device *tty_port_register_device(struct tty_port *port,
68+ struct tty_driver *driver, unsigned index,
69+ struct device *device)
70+{
71+ tty_port_link_device(port, driver, index);
72+ return tty_register_device(driver, index, device);
73+}
74+EXPORT_SYMBOL_GPL(tty_port_register_device);
75+
76+/**
77+ * tty_port_register_device_attr - register tty device
78+ * @port: tty_port of the device
79+ * @driver: tty_driver for this device
80+ * @index: index of the tty
81+ * @device: parent if exists, otherwise NULL
82+ * @drvdata: Driver data to be set to device.
83+ * @attr_grp: Attribute group to be set on device.
84+ *
85+ * It is the same as tty_register_device_attr except the provided @port is
86+ * linked to a concrete tty specified by @index. Use this or tty_port_install
87+ * (or both). Call tty_port_link_device as a last resort.
88+ */
89+struct device *tty_port_register_device_attr(struct tty_port *port,
90+ struct tty_driver *driver, unsigned index,
91+ struct device *device, void *drvdata,
92+ const struct attribute_group **attr_grp)
93+{
94+ tty_port_link_device(port, driver, index);
95+ return tty_register_device_attr(driver, index, device, drvdata,
96+ attr_grp);
97+}
98+EXPORT_SYMBOL_GPL(tty_port_register_device_attr);
99+
36100 int tty_port_alloc_xmit_buf(struct tty_port *port)
37101 {
38102 /* We may sleep in get_zeroed_page() */
@@ -230,7 +294,7 @@ int tty_port_block_til_ready(struct tty_port *port, · 191 unmodified lines
230294
231295 /* block if port is in the process of being closed */
232296 if (tty_hung_up_p(filp) || port->flags & ASYNC_CLOSING) {
233− wait_event_interruptible_tty(port->close_wait,
297+ wait_event_interruptible_tty(tty, port->close_wait,
234298 !(port->flags & ASYNC_CLOSING));
235299 if (port->flags & ASYNC_HUP_NOTIFY)
236300 return -EAGAIN;
@@ -246,7 +310,7 @@ int tty_port_block_til_ready(struct tty_port *port, · 9 unmodified lines
246310 }
247311 if (filp->f_flags & O_NONBLOCK) {
248312 /* Indicate we are open */
249− if (tty->termios->c_cflag & CBAUD)
313+ if (tty->termios.c_cflag & CBAUD)
250314 tty_port_raise_dtr_rts(port);
251315 port->flags |= ASYNC_NORMAL_ACTIVE;
252316 return 0;
@@ -270,7 +334,7 @@ int tty_port_block_til_ready(struct tty_port *port, · 17 unmodified lines
270334
271335 while (1) {
272336 /* Indicate we are open */
273− if (tty->termios->c_cflag & CBAUD)
337+ if (tty->termios.c_cflag & CBAUD)
274338 tty_port_raise_dtr_rts(port);
275339
276340 prepare_to_wait(&port->open_wait, &wait, TASK_INTERRUPTIBLE);
@@ -296,9 +360,9 @@ int tty_port_block_til_ready(struct tty_port *port, · 19 unmodified lines
296360 retval = -ERESTARTSYS;
297361 break;
298362 }
299− tty_unlock();
363+ tty_unlock(tty);
300364 schedule();
301− tty_lock();
365+ tty_lock(tty);
302366 }
303367 finish_wait(&port->open_wait, &wait);
304368
@@ -369,7 +433,7 @@ int tty_port_close_start(struct tty_port *port, · 64 unmodified lines
369433
370434 /* Drop DTR/RTS if HUPCL is set. This causes any attached modem to
371435 hang up the line */
372− if (tty->termios->c_cflag & HUPCL)
436+ if (tty->termios.c_cflag & HUPCL)
373437 tty_port_lower_dtr_rts(port);
374438
375439 /* Don't call port->drop for the last reference. Callers will want
@@ -413,6 +477,24 @@ void tty_port_close(struct tty_port *port, struct tty_struct *tty, · 37 unmodified lines
413477 }
414478 EXPORT_SYMBOL(tty_port_close);
415479
480+/**
481+ * tty_port_install - generic tty->ops->install handler
482+ * @port: tty_port of the device
483+ * @driver: tty_driver for this device
484+ * @tty: tty to be installed
485+ *
486+ * It is the same as tty_standard_install except the provided @port is linked
487+ * to a concrete tty specified by @tty. Use this or tty_port_register_device
488+ * (or both). Call tty_port_link_device as a last resort.
489+ */
490+int tty_port_install(struct tty_port *port, struct tty_driver *driver,
491+ struct tty_struct *tty)
492+{
493+ tty->port = port;
494+ return tty_standard_install(driver, tty);
495+}
496+EXPORT_SYMBOL_GPL(tty_port_install);
497+
416498 int tty_port_open(struct tty_port *port, struct tty_struct *tty,
417499 struct file *filp)
418500 {
drivers/tty/vt/keyboard.c+26−24
@@ -119,6 +119,7 @@ static const int NR_TYPES = ARRAY_SIZE(max_vals); · 118 unmodified lines
119119
120120 static struct input_handler kbd_handler;
121121 static DEFINE_SPINLOCK(kbd_event_lock);
122+static DEFINE_SPINLOCK(led_lock);
122123 static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)]; /* keyboard key bitmap */
123124 static unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */
124125 static bool dead_key_next;
@@ -310,7 +311,7 @@ static void put_queue(struct vc_data *vc, int ch) · 185 unmodified lines
310311
311312 if (tty) {
312313 tty_insert_flip_char(tty, ch, 0);
313− con_schedule_flip(tty);
314+ tty_schedule_flip(tty);
314315 }
315316 }
316317
@@ -325,7 +326,7 @@ static void puts_queue(struct vc_data *vc, char *cp) · 8 unmodified lines
325326 tty_insert_flip_char(tty, *cp, 0);
326327 cp++;
327328 }
328− con_schedule_flip(tty);
329+ tty_schedule_flip(tty);
329330 }
330331
331332 static void applkey(struct vc_data *vc, int key, char mode)
@@ -586,7 +587,7 @@ static void fn_send_intr(struct vc_data *vc) · 254 unmodified lines
586587 if (!tty)
587588 return;
588589 tty_insert_flip_char(tty, 0, TTY_BREAK);
589− con_schedule_flip(tty);
590+ tty_schedule_flip(tty);
590591 }
591592
592593 static void fn_scroll_forw(struct vc_data *vc)
@@ -984,7 +985,7 @@ static void k_brl(struct vc_data *vc, unsigned char value, char up_flag) · 391 unmodified lines
984985 * or (ii) whatever pattern of lights people want to show using KDSETLED,
985986 * or (iii) specified bits of specified words in kernel memory.
986987 */
987−unsigned char getledstate(void)
988+static unsigned char getledstate(void)
988989 {
989990 return ledstate;
990991 }
@@ -992,7 +993,7 @@ unsigned char getledstate(void) · 1 unmodified line
992993 void setledstate(struct kbd_struct *kbd, unsigned int led)
993994 {
994995 unsigned long flags;
995− spin_lock_irqsave(&kbd_event_lock, flags);
996+ spin_lock_irqsave(&led_lock, flags);
996997 if (!(led & ~7)) {
997998 ledioctl = led;
998999 kbd->ledmode = LED_SHOW_IOCTL;
@@ -1000,7 +1001,7 @@ void setledstate(struct kbd_struct *kbd, unsigned int led) · 1 unmodified line
10001001 kbd->ledmode = LED_SHOW_FLAGS;
10011002
10021003 set_leds();
1003− spin_unlock_irqrestore(&kbd_event_lock, flags);
1004+ spin_unlock_irqrestore(&led_lock, flags);
10041005 }
10051006
10061007 static inline unsigned char getleds(void)
@@ -1049,13 +1050,13 @@ static int kbd_update_leds_helper(struct input_handle *handle, void *data) · 42 unmodified lines
10491050 */
10501051 int vt_get_leds(int console, int flag)
10511052 {
1052− unsigned long flags;
10531053 struct kbd_struct * kbd = kbd_table + console;
10541054 int ret;
1055+ unsigned long flags;
10551056
1056− spin_lock_irqsave(&kbd_event_lock, flags);
1057+ spin_lock_irqsave(&led_lock, flags);
10571058 ret = vc_kbd_led(kbd, flag);
1058− spin_unlock_irqrestore(&kbd_event_lock, flags);
1059+ spin_unlock_irqrestore(&led_lock, flags);
10591060
10601061 return ret;
10611062 }
@@ -1091,11 +1092,11 @@ void vt_set_led_state(int console, int leds) · 29 unmodified lines
10911092 void vt_kbd_con_start(int console)
10921093 {
10931094 struct kbd_struct * kbd = kbd_table + console;
1094−/* unsigned long flags; */
1095−/* spin_lock_irqsave(&kbd_event_lock, flags); */
1095+ unsigned long flags;
1096+ spin_lock_irqsave(&led_lock, flags);
10961097 clr_vc_kbd_led(kbd, VC_SCROLLOCK);
10971098 set_leds();
1098−/* spin_unlock_irqrestore(&kbd_event_lock, flags); */
1099+ spin_unlock_irqrestore(&led_lock, flags);
10991100 }
11001101
11011102 /**
@@ -1104,21 +1105,15 @@ void vt_kbd_con_start(int console) · 2 unmodified lines
11041105 *
11051106 * Handle console stop. This is a wrapper for the VT layer
11061107 * so that we can keep kbd knowledge internal
1107− *
1108− * FIXME: We eventually need to hold the kbd lock here to protect
1109− * the LED updating. We can't do it yet because fn_hold calls stop_tty
1110− * and start_tty under the kbd_event_lock, while normal tty paths
1111− * don't hold the lock. We probably need to split out an LED lock
1112− * but not during an -rc release!
11131108 */
11141109 void vt_kbd_con_stop(int console)
11151110 {
11161111 struct kbd_struct * kbd = kbd_table + console;
1117−/* unsigned long flags; */
1118−/* spin_lock_irqsave(&kbd_event_lock, flags); */
1112+ unsigned long flags;
1113+ spin_lock_irqsave(&led_lock, flags);
11191114 set_vc_kbd_led(kbd, VC_SCROLLOCK);
11201115 set_leds();
1121−/* spin_unlock_irqrestore(&kbd_event_lock, flags); */
1116+ spin_unlock_irqrestore(&led_lock, flags);
11221117 }
11231118
11241119 /*
@@ -1130,7 +1125,12 @@ void vt_kbd_con_stop(int console) · 5 unmodified lines
11301125 */
11311126 static void kbd_bh(unsigned long dummy)
11321127 {
1133− unsigned char leds = getleds();
1128+ unsigned char leds;
1129+ unsigned long flags;
1130+
1131+ spin_lock_irqsave(&led_lock, flags);
1132+ leds = getleds();
1133+ spin_unlock_irqrestore(&led_lock, flags);
11341134
11351135 if (leds != ledstate) {
11361136 input_handler_for_each_handle(&kbd_handler, &leds,
@@ -2035,11 +2035,11 @@ int vt_do_kdskled(int console, int cmd, unsigned long arg, int perm) · 898 unmodified lines
20352035 return -EPERM;
20362036 if (arg & ~0x77)
20372037 return -EINVAL;
2038− spin_lock_irqsave(&kbd_event_lock, flags);
2038+ spin_lock_irqsave(&led_lock, flags);
20392039 kbd->ledflagstate = (arg & 7);
20402040 kbd->default_ledflagstate = ((arg >> 4) & 7);
20412041 set_leds();
2042− spin_unlock_irqrestore(&kbd_event_lock, flags);
2042+ spin_unlock_irqrestore(&led_lock, flags);
20432043 return 0;
20442044
20452045 /* the ioctls below only set the lights, not the functions */
@@ -2134,8 +2134,10 @@ void vt_reset_keyboard(int console) · 88 unmodified lines
21342134 clr_vc_kbd_mode(kbd, VC_CRLF);
21352135 kbd->lockstate = 0;
21362136 kbd->slockstate = 0;
2137+ spin_lock(&led_lock);
21372138 kbd->ledmode = LED_SHOW_FLAGS;
21382139 kbd->ledflagstate = kbd->default_ledflagstate;
2140+ spin_unlock(&led_lock);
21392141 /* do not do set_leds here because this causes an endless tasklet loop
21402142 when the keyboard hasn't been initialized yet */
21412143 spin_unlock_irqrestore(&kbd_event_lock, flags);
drivers/tty/vt/vt.c+54−87
@@ -537,45 +537,27 @@ void complement_pos(struct vc_data *vc, int offset) · 536 unmodified lines
537537
538538 static void insert_char(struct vc_data *vc, unsigned int nr)
539539 {
540− unsigned short *p, *q = (unsigned short *)vc->vc_pos;
540+ unsigned short *p = (unsigned short *) vc->vc_pos;
541541
542− p = q + vc->vc_cols - nr - vc->vc_x;
543− while (--p >= q)
544− scr_writew(scr_readw(p), p + nr);
545− scr_memsetw(q, vc->vc_video_erase_char, nr * 2);
542+ scr_memmovew(p + nr, p, vc->vc_cols - vc->vc_x);
543+ scr_memsetw(p, vc->vc_video_erase_char, nr * 2);
546544 vc->vc_need_wrap = 0;
547− if (DO_UPDATE(vc)) {
548− unsigned short oldattr = vc->vc_attr;
549− vc->vc_sw->con_bmove(vc, vc->vc_y, vc->vc_x, vc->vc_y, vc->vc_x + nr, 1,
550− vc->vc_cols - vc->vc_x - nr);
551− vc->vc_attr = vc->vc_video_erase_char >> 8;
552− while (nr--)
553− vc->vc_sw->con_putc(vc, vc->vc_video_erase_char, vc->vc_y, vc->vc_x + nr);
554− vc->vc_attr = oldattr;
555− }
545+ if (DO_UPDATE(vc))
546+ do_update_region(vc, (unsigned long) p,
547+ (vc->vc_cols - vc->vc_x) / 2 + 1);
556548 }
557549
558550 static void delete_char(struct vc_data *vc, unsigned int nr)
559551 {
560− unsigned int i = vc->vc_x;
561− unsigned short *p = (unsigned short *)vc->vc_pos;
552+ unsigned short *p = (unsigned short *) vc->vc_pos;
562553
563− while (++i <= vc->vc_cols - nr) {
564− scr_writew(scr_readw(p+nr), p);
565− p++;
566− }
567− scr_memsetw(p, vc->vc_video_erase_char, nr * 2);
554+ scr_memcpyw(p, p + nr, vc->vc_cols - vc->vc_x - nr);
555+ scr_memsetw(p + vc->vc_cols - vc->vc_x - nr, vc->vc_video_erase_char,
556+ nr * 2);
568557 vc->vc_need_wrap = 0;
569− if (DO_UPDATE(vc)) {
570− unsigned short oldattr = vc->vc_attr;
571− vc->vc_sw->con_bmove(vc, vc->vc_y, vc->vc_x + nr, vc->vc_y, vc->vc_x, 1,
572− vc->vc_cols - vc->vc_x - nr);
573− vc->vc_attr = vc->vc_video_erase_char >> 8;
574− while (nr--)
575− vc->vc_sw->con_putc(vc, vc->vc_video_erase_char, vc->vc_y,
576− vc->vc_cols - 1 - nr);
577− vc->vc_attr = oldattr;
578− }
558+ if (DO_UPDATE(vc))
559+ do_update_region(vc, (unsigned long) p,
560+ (vc->vc_cols - vc->vc_x) / 2);
579561 }
580562
581563 static int softcursor_original;
@@ -1172,45 +1154,26 @@ static void csi_J(struct vc_data *vc, int vpar) · 590 unmodified lines
11721154 case 0: /* erase from cursor to end of display */
11731155 count = (vc->vc_scr_end - vc->vc_pos) >> 1;
11741156 start = (unsigned short *)vc->vc_pos;
1175− if (DO_UPDATE(vc)) {
1176− /* do in two stages */
1177− vc->vc_sw->con_clear(vc, vc->vc_y, vc->vc_x, 1,
1178− vc->vc_cols - vc->vc_x);
1179− vc->vc_sw->con_clear(vc, vc->vc_y + 1, 0,
1180− vc->vc_rows - vc->vc_y - 1,
1181− vc->vc_cols);
1182− }
11831157 break;
11841158 case 1: /* erase from start to cursor */
11851159 count = ((vc->vc_pos - vc->vc_origin) >> 1) + 1;
11861160 start = (unsigned short *)vc->vc_origin;
1187− if (DO_UPDATE(vc)) {
1188− /* do in two stages */
1189− vc->vc_sw->con_clear(vc, 0, 0, vc->vc_y,
1190− vc->vc_cols);
1191− vc->vc_sw->con_clear(vc, vc->vc_y, 0, 1,
1192− vc->vc_x + 1);
1193− }
11941161 break;
11951162 case 3: /* erase scroll-back buffer (and whole display) */
11961163 scr_memsetw(vc->vc_screenbuf, vc->vc_video_erase_char,
11971164 vc->vc_screenbuf_size >> 1);
11981165 set_origin(vc);
1199− if (CON_IS_VISIBLE(vc))
1200− update_screen(vc);
12011166 /* fall through */
12021167 case 2: /* erase whole display */
12031168 count = vc->vc_cols * vc->vc_rows;
12041169 start = (unsigned short *)vc->vc_origin;
1205− if (DO_UPDATE(vc))
1206− vc->vc_sw->con_clear(vc, 0, 0,
1207− vc->vc_rows,
1208− vc->vc_cols);
12091170 break;
12101171 default:
12111172 return;
12121173 }
12131174 scr_memsetw(start, vc->vc_video_erase_char, 2 * count);
1175+ if (DO_UPDATE(vc))
1176+ do_update_region(vc, (unsigned long) start, count);
12141177 vc->vc_need_wrap = 0;
12151178 }
12161179
@@ -1223,29 +1186,22 @@ static void csi_K(struct vc_data *vc, int vpar) · 6 unmodified lines
12231186 case 0: /* erase from cursor to end of line */
12241187 count = vc->vc_cols - vc->vc_x;
12251188 start = (unsigned short *)vc->vc_pos;
1226− if (DO_UPDATE(vc))
1227− vc->vc_sw->con_clear(vc, vc->vc_y, vc->vc_x, 1,
1228− vc->vc_cols - vc->vc_x);
12291189 break;
12301190 case 1: /* erase from start of line to cursor */
12311191 start = (unsigned short *)(vc->vc_pos - (vc->vc_x << 1));
12321192 count = vc->vc_x + 1;
1233− if (DO_UPDATE(vc))
1234− vc->vc_sw->con_clear(vc, vc->vc_y, 0, 1,
1235− vc->vc_x + 1);
12361193 break;
12371194 case 2: /* erase whole line */
12381195 start = (unsigned short *)(vc->vc_pos - (vc->vc_x << 1));
12391196 count = vc->vc_cols;
1240− if (DO_UPDATE(vc))
1241− vc->vc_sw->con_clear(vc, vc->vc_y, 0, 1,
1242− vc->vc_cols);
12431197 break;
12441198 default:
12451199 return;
12461200 }
12471201 scr_memsetw(start, vc->vc_video_erase_char, 2 * count);
12481202 vc->vc_need_wrap = 0;
1203+ if (DO_UPDATE(vc))
1204+ do_update_region(vc, (unsigned long) start, count);
12491205 }
12501206
12511207 static void csi_X(struct vc_data *vc, int vpar) /* erase the following vpar positions */
@@ -1380,7 +1336,7 @@ static void respond_string(const char *p, struct tty_struct *tty) · 128 unmodified lines
13801336 tty_insert_flip_char(tty, *p, 0);
13811337 p++;
13821338 }
1383− con_schedule_flip(tty);
1339+ tty_schedule_flip(tty);
13841340 }
13851341
13861342 static void cursor_report(struct vc_data *vc, struct tty_struct *tty)
@@ -2792,41 +2748,52 @@ static void con_flush_chars(struct tty_struct *tty) · 1405 unmodified lines
27922748 /*
27932749 * Allocate the console screen memory.
27942750 */
2795−static int con_open(struct tty_struct *tty, struct file *filp)
2751+static int con_install(struct tty_driver *driver, struct tty_struct *tty)
27962752 {
27972753 unsigned int currcons = tty->index;
2798− int ret = 0;
2754+ struct vc_data *vc;
2755+ int ret;
27992756
28002757 console_lock();
2801− if (tty->driver_data == NULL) {
2802− ret = vc_allocate(currcons);
2803− if (ret == 0) {
2804− struct vc_data *vc = vc_cons[currcons].d;
2758+ ret = vc_allocate(currcons);
2759+ if (ret)
2760+ goto unlock;
28052761
2806− /* Still being freed */
2807− if (vc->port.tty) {
2808− console_unlock();
2809− return -ERESTARTSYS;
2810− }
2811− tty->driver_data = vc;
2812− vc->port.tty = tty;
2762+ vc = vc_cons[currcons].d;
28132763
2814− if (!tty->winsize.ws_row && !tty->winsize.ws_col) {
2815− tty->winsize.ws_row = vc_cons[currcons].d->vc_rows;
2816− tty->winsize.ws_col = vc_cons[currcons].d->vc_cols;
2817− }
2818− if (vc->vc_utf)
2819− tty->termios->c_iflag |= IUTF8;
2820− else
2821− tty->termios->c_iflag &= ~IUTF8;
2822− console_unlock();
2823− return ret;
2824− }
2764+ /* Still being freed */
2765+ if (vc->port.tty) {
2766+ ret = -ERESTARTSYS;
2767+ goto unlock;
28252768 }
2769+
2770+ ret = tty_port_install(&vc->port, driver, tty);
2771+ if (ret)
2772+ goto unlock;
2773+
2774+ tty->driver_data = vc;
2775+ vc->port.tty = tty;
2776+
2777+ if (!tty->winsize.ws_row && !tty->winsize.ws_col) {
2778+ tty->winsize.ws_row = vc_cons[currcons].d->vc_rows;
2779+ tty->winsize.ws_col = vc_cons[currcons].d->vc_cols;
2780+ }
2781+ if (vc->vc_utf)
2782+ tty->termios.c_iflag |= IUTF8;
2783+ else
2784+ tty->termios.c_iflag &= ~IUTF8;
2785+unlock:
28262786 console_unlock();
28272787 return ret;
28282788 }
28292789
2790+static int con_open(struct tty_struct *tty, struct file *filp)
2791+{
2792+ /* everything done in install */
2793+ return 0;
2794+}
2795+
2796+
28302797 static void con_close(struct tty_struct *tty, struct file *filp)
28312798 {
28322799 /* Nothing to do - we defer to shutdown */
@@ -2839,7 +2806,6 @@ static void con_shutdown(struct tty_struct *tty) · 6 unmodified lines
28392806 console_lock();
28402807 vc->port.tty = NULL;
28412808 console_unlock();
2842− tty_shutdown(tty);
28432809 }
28442810
28452811 static int default_italic_color = 2; // green (ASCII)
@@ -2947,6 +2913,7 @@ static int __init con_init(void) · 101 unmodified lines
29472913 console_initcall(con_init);
29482914
29492915 static const struct tty_operations con_ops = {
2916+ .install = con_install,
29502917 .open = con_open,
29512918 .close = con_close,
29522919 .write = con_write,
drivers/usb/class/cdc-acm.c+3−2
@@ -826,7 +826,7 @@ static void acm_tty_set_termios(struct tty_struct *tty, · 825 unmodified lines
826826 struct ktermios *termios_old)
827827 {
828828 struct acm *acm = tty->driver_data;
829− struct ktermios *termios = tty->termios;
829+ struct ktermios *termios = &tty->termios;
830830 struct usb_cdc_line_coding newline;
831831 int newctrl = acm->ctrlout;
832832
@@ -1299,7 +1299,8 @@ skip_countries: · 466 unmodified lines
12991299 usb_set_intfdata(data_interface, acm);
13001300
13011301 usb_get_intf(control_interface);
1302− tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1302+ tty_port_register_device(&acm->port, acm_tty_driver, minor,
1303+ &control_interface->dev);
13031304
13041305 return 0;
13051306 alloc_fail7:
drivers/usb/gadget/u_serial.c+2−1
@@ -1129,7 +1129,8 @@ int gserial_setup(struct usb_gadget *g, unsigned count) · 1128 unmodified lines
11291129 for (i = 0; i < count; i++) {
11301130 struct device *tty_dev;
11311131
1132− tty_dev = tty_register_device(gs_tty_driver, i, &g->dev);
1132+ tty_dev = tty_port_register_device(&ports[i].port->port,
1133+ gs_tty_driver, i, &g->dev);
11331134 if (IS_ERR(tty_dev))
11341135 pr_warning("%s: no classdev for port %d, err %ld\n",
11351136 __func__, i, PTR_ERR(tty_dev));
drivers/usb/serial/ark3116.c+2−2
@@ -215,7 +215,7 @@ static void ark3116_release(struct usb_serial *serial) · 214 unmodified lines
215215
216216 static void ark3116_init_termios(struct tty_struct *tty)
217217 {
218− struct ktermios *termios = tty->termios;
218+ struct ktermios *termios = &tty->termios;
219219 *termios = tty_std_termios;
220220 termios->c_cflag = B9600 | CS8
221221 | CREAD | HUPCL | CLOCAL;
@@ -229,7 +229,7 @@ static void ark3116_set_termios(struct tty_struct *tty, · 7 unmodified lines
229229 {
230230 struct usb_serial *serial = port->serial;
231231 struct ark3116_private *priv = usb_get_serial_port_data(port);
232− struct ktermios *termios = tty->termios;
232+ struct ktermios *termios = &tty->termios;
233233 unsigned int cflag = termios->c_cflag;
234234 int bps = tty_get_baud_rate(tty);
235235 int quot;
drivers/usb/serial/belkin_sa.c+1−1
@@ -307,7 +307,7 @@ static void belkin_sa_set_termios(struct tty_struct *tty, · 306 unmodified lines
307307 unsigned long control_state;
308308 int bad_flow_control;
309309 speed_t baud;
310− struct ktermios *termios = tty->termios;
310+ struct ktermios *termios = &tty->termios;
311311
312312 iflag = termios->c_iflag;
313313 cflag = termios->c_cflag;
drivers/usb/serial/console.c+2−2
@@ -165,8 +165,8 @@ static int usb_console_setup(struct console *co, char *options) · 164 unmodified lines
165165 }
166166
167167 if (serial->type->set_termios) {
168− tty->termios->c_cflag = cflag;
169− tty_termios_encode_baud_rate(tty->termios, baud, baud);
168+ tty->termios.c_cflag = cflag;
169+ tty_termios_encode_baud_rate(&tty->termios, baud, baud);
170170 memset(&dummy, 0, sizeof(struct ktermios));
171171 serial->type->set_termios(tty, port, &dummy);
172172
drivers/usb/serial/cp210x.c+4−4
@@ -469,7 +469,7 @@ static void cp210x_get_termios(struct tty_struct *tty, · 468 unmodified lines
469469
470470 if (tty) {
471471 cp210x_get_termios_port(tty->driver_data,
472− &tty->termios->c_cflag, &baud);
472+ &tty->termios.c_cflag, &baud);
473473 tty_encode_baud_rate(tty, baud, baud);
474474 }
475475
@@ -631,7 +631,7 @@ static void cp210x_change_speed(struct tty_struct *tty, · 155 unmodified lines
631631 {
632632 u32 baud;
633633
634− baud = tty->termios->c_ospeed;
634+ baud = tty->termios.c_ospeed;
635635
636636 /* This maps the requested rate to a rate valid on cp2102 or cp2103,
637637 * or to an arbitrary rate in [1M,2M].
@@ -665,10 +665,10 @@ static void cp210x_set_termios(struct tty_struct *tty, · 27 unmodified lines
665665 if (!tty)
666666 return;
667667
668− cflag = tty->termios->c_cflag;
668+ cflag = tty->termios.c_cflag;
669669 old_cflag = old_termios->c_cflag;
670670
671− if (tty->termios->c_ospeed != old_termios->c_ospeed)
671+ if (tty->termios.c_ospeed != old_termios->c_ospeed)
672672 cp210x_change_speed(tty, port, old_termios);
673673
674674 /* If the number of data bits is to be updated */
drivers/usb/serial/cypress_m8.c+20−20
@@ -922,38 +922,38 @@ static void cypress_set_termios(struct tty_struct *tty, · 921 unmodified lines
922922 early enough */
923923 if (!priv->termios_initialized) {
924924 if (priv->chiptype == CT_EARTHMATE) {
925− *(tty->termios) = tty_std_termios;
926− tty->termios->c_cflag = B4800 | CS8 | CREAD | HUPCL |
925+ tty->termios = tty_std_termios;
926+ tty->termios.c_cflag = B4800 | CS8 | CREAD | HUPCL |
927927 CLOCAL;
928− tty->termios->c_ispeed = 4800;
929− tty->termios->c_ospeed = 4800;
928+ tty->termios.c_ispeed = 4800;
929+ tty->termios.c_ospeed = 4800;
930930 } else if (priv->chiptype == CT_CYPHIDCOM) {
931− *(tty->termios) = tty_std_termios;
932− tty->termios->c_cflag = B9600 | CS8 | CREAD | HUPCL |
931+ tty->termios = tty_std_termios;
932+ tty->termios.c_cflag = B9600 | CS8 | CREAD | HUPCL |
933933 CLOCAL;
934− tty->termios->c_ispeed = 9600;
935− tty->termios->c_ospeed = 9600;
934+ tty->termios.c_ispeed = 9600;
935+ tty->termios.c_ospeed = 9600;
936936 } else if (priv->chiptype == CT_CA42V2) {
937− *(tty->termios) = tty_std_termios;
938− tty->termios->c_cflag = B9600 | CS8 | CREAD | HUPCL |
937+ tty->termios = tty_std_termios;
938+ tty->termios.c_cflag = B9600 | CS8 | CREAD | HUPCL |
939939 CLOCAL;
940− tty->termios->c_ispeed = 9600;
941− tty->termios->c_ospeed = 9600;
940+ tty->termios.c_ispeed = 9600;
941+ tty->termios.c_ospeed = 9600;
942942 }
943943 priv->termios_initialized = 1;
944944 }
945945 spin_unlock_irqrestore(&priv->lock, flags);
946946
947947 /* Unsupported features need clearing */
948− tty->termios->c_cflag &= ~(CMSPAR|CRTSCTS);
948+ tty->termios.c_cflag &= ~(CMSPAR|CRTSCTS);
949949
950− cflag = tty->termios->c_cflag;
951− iflag = tty->termios->c_iflag;
950+ cflag = tty->termios.c_cflag;
951+ iflag = tty->termios.c_iflag;
952952
953953 /* check if there are new settings */
954954 if (old_termios) {
955955 spin_lock_irqsave(&priv->lock, flags);
956− priv->tmp_termios = *(tty->termios);
956+ priv->tmp_termios = tty->termios;
957957 spin_unlock_irqrestore(&priv->lock, flags);
958958 }
959959
@@ -1021,7 +1021,7 @@ static void cypress_set_termios(struct tty_struct *tty, · 61 unmodified lines
10211021 "4800bps.");
10221022 /* define custom termios settings for NMEA protocol */
10231023
1024− tty->termios->c_iflag /* input modes - */
1024+ tty->termios.c_iflag /* input modes - */
10251025 &= ~(IGNBRK /* disable ignore break */
10261026 | BRKINT /* disable break causes interrupt */
10271027 | PARMRK /* disable mark parity errors */
@@ -1031,10 +1031,10 @@ static void cypress_set_termios(struct tty_struct *tty, · 3 unmodified lines
10311031 | ICRNL /* disable translate CR to NL */
10321032 | IXON); /* disable enable XON/XOFF flow control */
10331033
1034− tty->termios->c_oflag /* output modes */
1034+ tty->termios.c_oflag /* output modes */
10351035 &= ~OPOST; /* disable postprocess output char */
10361036
1037− tty->termios->c_lflag /* line discipline modes */
1037+ tty->termios.c_lflag /* line discipline modes */
10381038 &= ~(ECHO /* disable echo input characters */
10391039 | ECHONL /* disable echo new line */
10401040 | ICANON /* disable erase, kill, werase, and rprnt
@@ -1200,7 +1200,7 @@ static void cypress_read_int_callback(struct urb *urb) · 159 unmodified lines
12001200
12011201 /* hangup, as defined in acm.c... this might be a bad place for it
12021202 * though */
1203− if (tty && !(tty->termios->c_cflag & CLOCAL) &&
1203+ if (tty && !(tty->termios.c_cflag & CLOCAL) &&
12041204 !(priv->current_status & UART_CD)) {
12051205 dbg("%s - calling hangup", __func__);
12061206 tty_hangup(tty);
drivers/usb/serial/digi_acceleport.c+7−7
@@ -687,8 +687,8 @@ static void digi_set_termios(struct tty_struct *tty, · 686 unmodified lines
687687 struct usb_serial_port *port, struct ktermios *old_termios)
688688 {
689689 struct digi_port *priv = usb_get_serial_port_data(port);
690− unsigned int iflag = tty->termios->c_iflag;
691− unsigned int cflag = tty->termios->c_cflag;
690+ unsigned int iflag = tty->termios.c_iflag;
691+ unsigned int cflag = tty->termios.c_cflag;
692692 unsigned int old_iflag = old_termios->c_iflag;
693693 unsigned int old_cflag = old_termios->c_cflag;
694694 unsigned char buf[32];
@@ -709,7 +709,7 @@ static void digi_set_termios(struct tty_struct *tty, · 14 unmodified lines
709709 /* don't set RTS if using hardware flow control */
710710 /* and throttling input */
711711 modem_signals = TIOCM_DTR;
712− if (!(tty->termios->c_cflag & CRTSCTS) ||
712+ if (!(tty->termios.c_cflag & CRTSCTS) ||
713713 !test_bit(TTY_THROTTLED, &tty->flags))
714714 modem_signals |= TIOCM_RTS;
715715 digi_set_modem_signals(port, modem_signals, 1);
@@ -748,7 +748,7 @@ static void digi_set_termios(struct tty_struct *tty, · 32 unmodified lines
748748 }
749749 }
750750 /* set parity */
751− tty->termios->c_cflag &= ~CMSPAR;
751+ tty->termios.c_cflag &= ~CMSPAR;
752752
753753 if ((cflag&(PARENB|PARODD)) != (old_cflag&(PARENB|PARODD))) {
754754 if (cflag&PARENB) {
@@ -1124,8 +1124,8 @@ static int digi_open(struct tty_struct *tty, struct usb_serial_port *port) · 369 unmodified lines
11241124
11251125 /* set termios settings */
11261126 if (tty) {
1127− not_termios.c_cflag = ~tty->termios->c_cflag;
1128− not_termios.c_iflag = ~tty->termios->c_iflag;
1127+ not_termios.c_cflag = ~tty->termios.c_cflag;
1128+ not_termios.c_iflag = ~tty->termios.c_iflag;
11291129 digi_set_termios(tty, port, &not_termios);
11301130 }
11311131 return 0;
@@ -1500,7 +1500,7 @@ static int digi_read_oob_callback(struct urb *urb) · 368 unmodified lines
15001500
15011501 rts = 0;
15021502 if (tty)
1503− rts = tty->termios->c_cflag & CRTSCTS;
1503+ rts = tty->termios.c_cflag & CRTSCTS;
15041504
15051505 if (tty && opcode == DIGI_CMD_READ_INPUT_SIGNALS) {
15061506 spin_lock(&priv->dp_port_lock);
drivers/usb/serial/empeg.c+1−1
@@ -87,7 +87,7 @@ static int empeg_startup(struct usb_serial *serial) · 86 unmodified lines
8787
8888 static void empeg_init_termios(struct tty_struct *tty)
8989 {
90− struct ktermios *termios = tty->termios;
90+ struct ktermios *termios = &tty->termios;
9191
9292 /*
9393 * The empeg-car player wants these particular tty settings.
drivers/usb/serial/f81232.c+2−1
@@ -173,10 +173,11 @@ static void f81232_set_termios(struct tty_struct *tty, · 172 unmodified lines
173173 /* FIXME - Stubbed out for now */
174174
175175 /* Don't change anything if nothing has changed */
176− if (!tty_termios_hw_change(tty->termios, old_termios))
176+ if (!tty_termios_hw_change(&tty->termios, old_termios))
177177 return;
178178
179179 /* Do the real work here... */
180+ tty_termios_copy_hw(&tty->termios, old_termios);
180181 }
181182
182183 static int f81232_tiocmget(struct tty_struct *tty)
drivers/usb/serial/ftdi_sio.c+1−1
@@ -2082,7 +2082,7 @@ static void ftdi_set_termios(struct tty_struct *tty, · 2081 unmodified lines
20822082 {
20832083 struct usb_device *dev = port->serial->dev;
20842084 struct ftdi_private *priv = usb_get_serial_port_data(port);
2085− struct ktermios *termios = tty->termios;
2085+ struct ktermios *termios = &tty->termios;
20862086 unsigned int cflag = termios->c_cflag;
20872087 __u16 urb_value; /* will hold the new flags */
20882088
drivers/usb/serial/io_edgeport.c+6−6
@@ -1458,7 +1458,7 @@ static void edge_throttle(struct tty_struct *tty) · 1457 unmodified lines
14581458 }
14591459
14601460 /* if we are implementing RTS/CTS, toggle that line */
1461− if (tty->termios->c_cflag & CRTSCTS) {
1461+ if (tty->termios.c_cflag & CRTSCTS) {
14621462 edge_port->shadowMCR &= ~MCR_RTS;
14631463 status = send_cmd_write_uart_register(edge_port, MCR,
14641464 edge_port->shadowMCR);
@@ -1497,7 +1497,7 @@ static void edge_unthrottle(struct tty_struct *tty) · 32 unmodified lines
14971497 return;
14981498 }
14991499 /* if we are implementing RTS/CTS, toggle that line */
1500− if (tty->termios->c_cflag & CRTSCTS) {
1500+ if (tty->termios.c_cflag & CRTSCTS) {
15011501 edge_port->shadowMCR |= MCR_RTS;
15021502 send_cmd_write_uart_register(edge_port, MCR,
15031503 edge_port->shadowMCR);
@@ -1516,9 +1516,9 @@ static void edge_set_termios(struct tty_struct *tty, · 12 unmodified lines
15161516 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
15171517 unsigned int cflag;
15181518
1519− cflag = tty->termios->c_cflag;
1519+ cflag = tty->termios.c_cflag;
15201520 dbg("%s - clfag %08x iflag %08x", __func__,
1521− tty->termios->c_cflag, tty->termios->c_iflag);
1521+ tty->termios.c_cflag, tty->termios.c_iflag);
15221522 dbg("%s - old clfag %08x old iflag %08x", __func__,
15231523 old_termios->c_cflag, old_termios->c_iflag);
15241524
@@ -1987,7 +1987,7 @@ static void process_rcvd_status(struct edgeport_serial *edge_serial, · 462 unmodified lines
19871987 tty = tty_port_tty_get(&edge_port->port->port);
19881988 if (tty) {
19891989 change_port_settings(tty,
1990− edge_port, tty->termios);
1990+ edge_port, &tty->termios);
19911991 tty_kref_put(tty);
19921992 }
19931993
@@ -2570,7 +2570,7 @@ static void change_port_settings(struct tty_struct *tty, · 576 unmodified lines
25702570 return;
25712571 }
25722572
2573− cflag = tty->termios->c_cflag;
2573+ cflag = tty->termios.c_cflag;
25742574
25752575 switch (cflag & CSIZE) {
25762576 case CS5:
drivers/usb/serial/io_ti.c+6−6
@@ -1870,7 +1870,7 @@ static int edge_open(struct tty_struct *tty, struct usb_serial_port *port) · 1869 unmodified lines
18701870
18711871 /* set up the port settings */
18721872 if (tty)
1873− edge_set_termios(tty, port, tty->termios);
1873+ edge_set_termios(tty, port, &tty->termios);
18741874
18751875 /* open up the port */
18761876
@@ -2272,13 +2272,13 @@ static void change_port_settings(struct tty_struct *tty, · 395 unmodified lines
22722272
22732273 config = kmalloc (sizeof (*config), GFP_KERNEL);
22742274 if (!config) {
2275− *tty->termios = *old_termios;
2275+ tty->termios = *old_termios;
22762276 dev_err(&edge_port->port->dev, "%s - out of memory\n",
22772277 __func__);
22782278 return;
22792279 }
22802280
2281− cflag = tty->termios->c_cflag;
2281+ cflag = tty->termios.c_cflag;
22822282
22832283 config->wFlags = 0;
22842284
@@ -2362,7 +2362,7 @@ static void change_port_settings(struct tty_struct *tty, · 77 unmodified lines
23622362 } else
23632363 dbg("%s - OUTBOUND XON/XOFF is disabled", __func__);
23642364
2365− tty->termios->c_cflag &= ~CMSPAR;
2365+ tty->termios.c_cflag &= ~CMSPAR;
23662366
23672367 /* Round the baud rate */
23682368 baud = tty_get_baud_rate(tty);
@@ -2408,10 +2408,10 @@ static void edge_set_termios(struct tty_struct *tty, · 39 unmodified lines
24082408 struct edgeport_port *edge_port = usb_get_serial_port_data(port);
24092409 unsigned int cflag;
24102410
2411− cflag = tty->termios->c_cflag;
2411+ cflag = tty->termios.c_cflag;
24122412
24132413 dbg("%s - clfag %08x iflag %08x", __func__,
2414− tty->termios->c_cflag, tty->termios->c_iflag);
2414+ tty->termios.c_cflag, tty->termios.c_iflag);
24152415 dbg("%s - old clfag %08x old iflag %08x", __func__,
24162416 old_termios->c_cflag, old_termios->c_iflag);
24172417 dbg("%s - port %d", __func__, port->number);
drivers/usb/serial/ir-usb.c+1−1
@@ -381,7 +381,7 @@ static void ir_set_termios(struct tty_struct *tty, · 380 unmodified lines
381381 ir_xbof = ir_xbof_change(xbof) ;
382382
383383 /* Only speed changes are supported */
384− tty_termios_copy_hw(tty->termios, old_termios);
384+ tty_termios_copy_hw(&tty->termios, old_termios);
385385 tty_encode_baud_rate(tty, baud, baud);
386386
387387 /*
drivers/usb/serial/iuu_phoenix.c+14−14
@@ -921,7 +921,7 @@ static void iuu_set_termios(struct tty_struct *tty, · 920 unmodified lines
921921 {
922922 const u32 supported_mask = CMSPAR|PARENB|PARODD;
923923 struct iuu_private *priv = usb_get_serial_port_data(port);
924− unsigned int cflag = tty->termios->c_cflag;
924+ unsigned int cflag = tty->termios.c_cflag;
925925 int status;
926926 u32 actual;
927927 u32 parity;
@@ -930,7 +930,7 @@ static void iuu_set_termios(struct tty_struct *tty, · 2 unmodified lines
930930 u32 newval = cflag & supported_mask;
931931
932932 /* Just use the ospeed. ispeed should be the same. */
933− baud = tty->termios->c_ospeed;
933+ baud = tty->termios.c_ospeed;
934934
935935 dbg("%s - enter c_ospeed or baud=%d", __func__, baud);
936936
@@ -961,13 +961,13 @@ static void iuu_set_termios(struct tty_struct *tty, · 24 unmodified lines
961961 * settings back over and then adjust them
962962 */
963963 if (old_termios)
964− tty_termios_copy_hw(tty->termios, old_termios);
964+ tty_termios_copy_hw(&tty->termios, old_termios);
965965 if (status != 0) /* Set failed - return old bits */
966966 return;
967967 /* Re-encode speed, parity and csize */
968968 tty_encode_baud_rate(tty, baud, baud);
969− tty->termios->c_cflag &= ~(supported_mask|CSIZE);
970− tty->termios->c_cflag |= newval | csize;
969+ tty->termios.c_cflag &= ~(supported_mask|CSIZE);
970+ tty->termios.c_cflag |= newval | csize;
971971 }
972972
973973 static void iuu_close(struct usb_serial_port *port)
@@ -993,14 +993,14 @@ static void iuu_close(struct usb_serial_port *port) · 19 unmodified lines
993993
994994 static void iuu_init_termios(struct tty_struct *tty)
995995 {
996− *(tty->termios) = tty_std_termios;
997− tty->termios->c_cflag = CLOCAL | CREAD | CS8 | B9600
996+ tty->termios = tty_std_termios;
997+ tty->termios.c_cflag = CLOCAL | CREAD | CS8 | B9600
998998 | TIOCM_CTS | CSTOPB | PARENB;
999− tty->termios->c_ispeed = 9600;
1000− tty->termios->c_ospeed = 9600;
1001− tty->termios->c_lflag = 0;
1002− tty->termios->c_oflag = 0;
1003− tty->termios->c_iflag = 0;
999+ tty->termios.c_ispeed = 9600;
1000+ tty->termios.c_ospeed = 9600;
1001+ tty->termios.c_lflag = 0;
1002+ tty->termios.c_oflag = 0;
1003+ tty->termios.c_iflag = 0;
10041004 }
10051005
10061006 static int iuu_open(struct tty_struct *tty, struct usb_serial_port *port)
@@ -1012,8 +1012,8 @@ static int iuu_open(struct tty_struct *tty, struct usb_serial_port *port) · 5 unmodified lines
10121012 u32 actual;
10131013 struct iuu_private *priv = usb_get_serial_port_data(port);
10141014
1015− baud = tty->termios->c_ospeed;
1016− tty->termios->c_ispeed = baud;
1015+ baud = tty->termios.c_ospeed;
1016+ tty->termios.c_ispeed = baud;
10171017 /* Re-encode speed */
10181018 tty_encode_baud_rate(tty, baud, baud);
10191019
drivers/usb/serial/keyspan.c+3−3
@@ -158,7 +158,7 @@ static void keyspan_set_termios(struct tty_struct *tty, · 157 unmodified lines
158158
159159 p_priv = usb_get_serial_port_data(port);
160160 d_details = p_priv->device_details;
161− cflag = tty->termios->c_cflag;
161+ cflag = tty->termios.c_cflag;
162162 device_port = port->number - port->serial->minor;
163163
164164 /* Baud rate calculation takes baud rate as an integer
@@ -179,7 +179,7 @@ static void keyspan_set_termios(struct tty_struct *tty, · 14 unmodified lines
179179 p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none;
180180
181181 /* Mark/Space not supported */
182− tty->termios->c_cflag &= ~CMSPAR;
182+ tty->termios.c_cflag &= ~CMSPAR;
183183
184184 keyspan_send_setup(port, 0);
185185 }
@@ -1086,7 +1086,7 @@ static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port) · 900 unmodified lines
10861086
10871087 device_port = port->number - port->serial->minor;
10881088 if (tty) {
1089− cflag = tty->termios->c_cflag;
1089+ cflag = tty->termios.c_cflag;
10901090 /* Baud rate calculation takes baud rate as an integer
10911091 so other rates can be generated if desired. */
10921092 baud_rate = tty_get_baud_rate(tty);
drivers/usb/serial/keyspan_pda.c+2−2
@@ -338,7 +338,7 @@ static void keyspan_pda_set_termios(struct tty_struct *tty, · 337 unmodified lines
338338 7[EOMS]1: 10 bit, b0/b7 is parity
339339 7[EOMS]2: 11 bit, b0/b7 is parity, extra bit always (mark?)
340340
341− HW flow control is dictated by the tty->termios->c_cflags & CRTSCTS
341+ HW flow control is dictated by the tty->termios.c_cflags & CRTSCTS
342342 bit.
343343
344344 For now, just do baud. */
@@ -353,7 +353,7 @@ static void keyspan_pda_set_termios(struct tty_struct *tty, · 8 unmodified lines
353353 }
354354 /* Only speed can change so copy the old h/w parameters
355355 then encode the new speed */
356− tty_termios_copy_hw(tty->termios, old_termios);
356+ tty_termios_copy_hw(&tty->termios, old_termios);
357357 tty_encode_baud_rate(tty, speed, speed);
358358 }
359359
drivers/usb/serial/kl5kusb105.c+9−9
@@ -311,12 +311,12 @@ static int klsi_105_open(struct tty_struct *tty, struct usb_serial_port *port) · 310 unmodified lines
311311
312312 /* set up termios structure */
313313 spin_lock_irqsave(&priv->lock, flags);
314− priv->termios.c_iflag = tty->termios->c_iflag;
315− priv->termios.c_oflag = tty->termios->c_oflag;
316− priv->termios.c_cflag = tty->termios->c_cflag;
317− priv->termios.c_lflag = tty->termios->c_lflag;
314+ priv->termios.c_iflag = tty->termios.c_iflag;
315+ priv->termios.c_oflag = tty->termios.c_oflag;
316+ priv->termios.c_cflag = tty->termios.c_cflag;
317+ priv->termios.c_lflag = tty->termios.c_lflag;
318318 for (i = 0; i < NCCS; i++)
319− priv->termios.c_cc[i] = tty->termios->c_cc[i];
319+ priv->termios.c_cc[i] = tty->termios.c_cc[i];
320320 priv->cfg.pktlen = cfg->pktlen;
321321 priv->cfg.baudrate = cfg->baudrate;
322322 priv->cfg.databits = cfg->databits;
@@ -445,9 +445,9 @@ static void klsi_105_set_termios(struct tty_struct *tty, · 122 unmodified lines
445445 struct ktermios *old_termios)
446446 {
447447 struct klsi_105_private *priv = usb_get_serial_port_data(port);
448− unsigned int iflag = tty->termios->c_iflag;
448+ unsigned int iflag = tty->termios.c_iflag;
449449 unsigned int old_iflag = old_termios->c_iflag;
450− unsigned int cflag = tty->termios->c_cflag;
450+ unsigned int cflag = tty->termios.c_cflag;
451451 unsigned int old_cflag = old_termios->c_cflag;
452452 struct klsi_105_port_settings *cfg;
453453 unsigned long flags;
@@ -560,7 +560,7 @@ static void klsi_105_set_termios(struct tty_struct *tty, · 106 unmodified lines
560560 if ((cflag & (PARENB|PARODD)) != (old_cflag & (PARENB|PARODD))
561561 || (cflag & CSTOPB) != (old_cflag & CSTOPB)) {
562562 /* Not currently supported */
563− tty->termios->c_cflag &= ~(PARENB|PARODD|CSTOPB);
563+ tty->termios.c_cflag &= ~(PARENB|PARODD|CSTOPB);
564564 #if 0
565565 priv->last_lcr = 0;
566566
@@ -587,7 +587,7 @@ static void klsi_105_set_termios(struct tty_struct *tty, · 20 unmodified lines
587587 || (iflag & IXON) != (old_iflag & IXON)
588588 || (cflag & CRTSCTS) != (old_cflag & CRTSCTS)) {
589589 /* Not currently supported */
590− tty->termios->c_cflag &= ~CRTSCTS;
590+ tty->termios.c_cflag &= ~CRTSCTS;
591591 /* Drop DTR/RTS if no flow control otherwise assert */
592592 #if 0
593593 if ((iflag & IXOFF) || (iflag & IXON) || (cflag & CRTSCTS))
drivers/usb/serial/kobil_sct.c+7−7
@@ -191,11 +191,11 @@ static void kobil_release(struct usb_serial *serial) · 190 unmodified lines
191191 static void kobil_init_termios(struct tty_struct *tty)
192192 {
193193 /* Default to echo off and other sane device settings */
194− tty->termios->c_lflag = 0;
195− tty->termios->c_lflag &= ~(ISIG | ICANON | ECHO | IEXTEN | XCASE);
196− tty->termios->c_iflag = IGNBRK | IGNPAR | IXOFF;
194+ tty->termios.c_lflag = 0;
195+ tty->termios.c_iflag &= ~(ISIG | ICANON | ECHO | IEXTEN | XCASE);
196+ tty->termios.c_iflag |= IGNBRK | IGNPAR | IXOFF;
197197 /* do NOT translate CR to CR-NL (0x0A -> 0x0A 0x0D) */
198− tty->termios->c_oflag &= ~ONLCR;
198+ tty->termios.c_oflag &= ~ONLCR;
199199 }
200200
201201 static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port)
@@ -581,14 +581,14 @@ static void kobil_set_termios(struct tty_struct *tty, · 379 unmodified lines
581581 struct kobil_private *priv;
582582 int result;
583583 unsigned short urb_val = 0;
584− int c_cflag = tty->termios->c_cflag;
584+ int c_cflag = tty->termios.c_cflag;
585585 speed_t speed;
586586
587587 priv = usb_get_serial_port_data(port);
588588 if (priv->device_type == KOBIL_USBTWIN_PRODUCT_ID ||
589589 priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID) {
590590 /* This device doesn't support ioctl calls */
591− *tty->termios = *old;
591+ tty_termios_copy_hw(&tty->termios, old);
592592 return;
593593 }
594594
@@ -612,7 +612,7 @@ static void kobil_set_termios(struct tty_struct *tty, · 17 unmodified lines
612612 urb_val |= SUSBCR_SPASB_EvenParity;
613613 } else
614614 urb_val |= SUSBCR_SPASB_NoParity;
615− tty->termios->c_cflag &= ~CMSPAR;
615+ tty->termios.c_cflag &= ~CMSPAR;
616616 tty_encode_baud_rate(tty, speed, speed);
617617
618618 result = usb_control_msg(port->serial->dev,
drivers/usb/serial/mct_u232.c+2−2
@@ -454,7 +454,7 @@ static int mct_u232_open(struct tty_struct *tty, struct usb_serial_port *port) · 453 unmodified lines
454454 * either.
455455 */
456456 spin_lock_irqsave(&priv->lock, flags);
457− if (tty && (tty->termios->c_cflag & CBAUD))
457+ if (tty && (tty->termios.c_cflag & CBAUD))
458458 priv->control_state = TIOCM_DTR | TIOCM_RTS;
459459 else
460460 priv->control_state = 0;
@@ -634,7 +634,7 @@ static void mct_u232_set_termios(struct tty_struct *tty, · 173 unmodified lines
634634 {
635635 struct usb_serial *serial = port->serial;
636636 struct mct_u232_private *priv = usb_get_serial_port_data(port);
637− struct ktermios *termios = tty->termios;
637+ struct ktermios *termios = &tty->termios;
638638 unsigned int cflag = termios->c_cflag;
639639 unsigned int old_cflag = old_termios->c_cflag;
640640 unsigned long flags;
drivers/usb/serial/metro-usb.c+0−6
@@ -130,12 +130,6 @@ static void metrousb_read_int_callback(struct urb *urb) · 129 unmodified lines
130130
131131 /* Set the data read from the usb port into the serial port buffer. */
132132 tty = tty_port_tty_get(&port->port);
133− if (!tty) {
134− dev_err(&port->dev, "%s - bad tty pointer - exiting\n",
135− __func__);
136− return;
137− }
138−
139133 if (tty && urb->actual_length) {
140134 /* Loop through the data copying each byte to the tty layer. */
141135 tty_insert_flip_string(tty, data, urb->actual_length);
drivers/usb/serial/mos7720.c+7−7
@@ -1349,7 +1349,7 @@ static void mos7720_throttle(struct tty_struct *tty) · 1348 unmodified lines
13491349 }
13501350
13511351 /* if we are implementing RTS/CTS, toggle that line */
1352− if (tty->termios->c_cflag & CRTSCTS) {
1352+ if (tty->termios.c_cflag & CRTSCTS) {
13531353 mos7720_port->shadowMCR &= ~UART_MCR_RTS;
13541354 write_mos_reg(port->serial, port->number - port->serial->minor,
13551355 MCR, mos7720_port->shadowMCR);
@@ -1383,7 +1383,7 @@ static void mos7720_unthrottle(struct tty_struct *tty) · 27 unmodified lines
13831383 }
13841384
13851385 /* if we are implementing RTS/CTS, toggle that line */
1386− if (tty->termios->c_cflag & CRTSCTS) {
1386+ if (tty->termios.c_cflag & CRTSCTS) {
13871387 mos7720_port->shadowMCR |= UART_MCR_RTS;
13881388 write_mos_reg(port->serial, port->number - port->serial->minor,
13891389 MCR, mos7720_port->shadowMCR);
@@ -1604,8 +1604,8 @@ static void change_port_settings(struct tty_struct *tty, · 214 unmodified lines
16041604 lStop = 0x00; /* 1 stop bit */
16051605 lParity = 0x00; /* No parity */
16061606
1607− cflag = tty->termios->c_cflag;
1608− iflag = tty->termios->c_iflag;
1607+ cflag = tty->termios.c_cflag;
1608+ iflag = tty->termios.c_iflag;
16091609
16101610 /* Change the number of bits */
16111611 switch (cflag & CSIZE) {
@@ -1753,11 +1753,11 @@ static void mos7720_set_termios(struct tty_struct *tty, · 141 unmodified lines
17531753
17541754 dbg("%s\n", "setting termios - ASPIRE");
17551755
1756− cflag = tty->termios->c_cflag;
1756+ cflag = tty->termios.c_cflag;
17571757
17581758 dbg("%s - cflag %08x iflag %08x", __func__,
1759− tty->termios->c_cflag,
1760− RELEVANT_IFLAG(tty->termios->c_iflag));
1759+ tty->termios.c_cflag,
1760+ RELEVANT_IFLAG(tty->termios.c_iflag));
17611761
17621762 dbg("%s - old cflag %08x old iflag %08x", __func__,
17631763 old_termios->c_cflag,
drivers/usb/serial/mos7840.c+6−6
@@ -1651,7 +1651,7 @@ static void mos7840_throttle(struct tty_struct *tty) · 1650 unmodified lines
16511651 return;
16521652 }
16531653 /* if we are implementing RTS/CTS, toggle that line */
1654− if (tty->termios->c_cflag & CRTSCTS) {
1654+ if (tty->termios.c_cflag & CRTSCTS) {
16551655 mos7840_port->shadowMCR &= ~MCR_RTS;
16561656 status = mos7840_set_uart_reg(port, MODEM_CONTROL_REGISTER,
16571657 mos7840_port->shadowMCR);
@@ -1694,7 +1694,7 @@ static void mos7840_unthrottle(struct tty_struct *tty) · 36 unmodified lines
16941694 }
16951695
16961696 /* if we are implementing RTS/CTS, toggle that line */
1697− if (tty->termios->c_cflag & CRTSCTS) {
1697+ if (tty->termios.c_cflag & CRTSCTS) {
16981698 mos7840_port->shadowMCR |= MCR_RTS;
16991699 status = mos7840_set_uart_reg(port, MODEM_CONTROL_REGISTER,
17001700 mos7840_port->shadowMCR);
@@ -2000,8 +2000,8 @@ static void mos7840_change_port_settings(struct tty_struct *tty, · 299 unmodified lines
20002000 lStop = LCR_STOP_1;
20012001 lParity = LCR_PAR_NONE;
20022002
2003− cflag = tty->termios->c_cflag;
2004− iflag = tty->termios->c_iflag;
2003+ cflag = tty->termios.c_cflag;
2004+ iflag = tty->termios.c_iflag;
20052005
20062006 /* Change the number of bits */
20072007 if (cflag & CSIZE) {
@@ -2161,10 +2161,10 @@ static void mos7840_set_termios(struct tty_struct *tty, · 153 unmodified lines
21612161
21622162 dbg("%s", "setting termios - ");
21632163
2164− cflag = tty->termios->c_cflag;
2164+ cflag = tty->termios.c_cflag;
21652165
21662166 dbg("%s - clfag %08x iflag %08x", __func__,
2167− tty->termios->c_cflag, RELEVANT_IFLAG(tty->termios->c_iflag));
2167+ tty->termios.c_cflag, RELEVANT_IFLAG(tty->termios.c_iflag));
21682168 dbg("%s - old clfag %08x old iflag %08x", __func__,
21692169 old_termios->c_cflag, RELEVANT_IFLAG(old_termios->c_iflag));
21702170 dbg("%s - port %d", __func__, port->number);
drivers/usb/serial/oti6858.c+5−5
@@ -404,10 +404,10 @@ static int oti6858_chars_in_buffer(struct tty_struct *tty) · 403 unmodified lines
404404
405405 static void oti6858_init_termios(struct tty_struct *tty)
406406 {
407− *(tty->termios) = tty_std_termios;
408− tty->termios->c_cflag = B38400 | CS8 | CREAD | HUPCL | CLOCAL;
409− tty->termios->c_ispeed = 38400;
410− tty->termios->c_ospeed = 38400;
407+ tty->termios = tty_std_termios;
408+ tty->termios.c_cflag = B38400 | CS8 | CREAD | HUPCL | CLOCAL;
409+ tty->termios.c_ispeed = 38400;
410+ tty->termios.c_ospeed = 38400;
411411 }
412412
413413 static void oti6858_set_termios(struct tty_struct *tty,
@@ -425,7 +425,7 @@ static void oti6858_set_termios(struct tty_struct *tty, · 11 unmodified lines
425425 return;
426426 }
427427
428− cflag = tty->termios->c_cflag;
428+ cflag = tty->termios.c_cflag;
429429
430430 spin_lock_irqsave(&priv->lock, flags);
431431 divisor = priv->pending_setup.divisor;
drivers/usb/serial/pl2303.c+3−3
@@ -260,16 +260,16 @@ static void pl2303_set_termios(struct tty_struct *tty, · 259 unmodified lines
260260 serial settings even to the same values as before. Thus
261261 we actually need to filter in this specific case */
262262
263− if (!tty_termios_hw_change(tty->termios, old_termios))
263+ if (!tty_termios_hw_change(&tty->termios, old_termios))
264264 return;
265265
266− cflag = tty->termios->c_cflag;
266+ cflag = tty->termios.c_cflag;
267267
268268 buf = kzalloc(7, GFP_KERNEL);
269269 if (!buf) {
270270 dev_err(&port->dev, "%s - out of memory.\n", __func__);
271271 /* Report back no change occurred */
272− *tty->termios = *old_termios;
272+ tty->termios = *old_termios;
273273 return;
274274 }
275275
drivers/usb/serial/quatech2.c+2−2
@@ -275,7 +275,7 @@ static void qt2_set_termios(struct tty_struct *tty, · 274 unmodified lines
275275 {
276276 struct usb_device *dev = port->serial->dev;
277277 struct qt2_port_private *port_priv;
278− struct ktermios *termios = tty->termios;
278+ struct ktermios *termios = &tty->termios;
279279 u16 baud;
280280 unsigned int cflag = termios->c_cflag;
281281 u16 new_lcr = 0;
@@ -406,7 +406,7 @@ static int qt2_open(struct tty_struct *tty, struct usb_serial_port *port) · 124 unmodified lines
406406 port_priv->device_port = (u8) device_port;
407407
408408 if (tty)
409− qt2_set_termios(tty, port, tty->termios);
409+ qt2_set_termios(tty, port, &tty->termios);
410410
411411 return 0;
412412
drivers/usb/serial/sierra.c+1−1
@@ -382,7 +382,7 @@ static int sierra_send_setup(struct usb_serial_port *port) · 381 unmodified lines
382382 static void sierra_set_termios(struct tty_struct *tty,
383383 struct usb_serial_port *port, struct ktermios *old_termios)
384384 {
385− tty_termios_copy_hw(tty->termios, old_termios);
385+ tty_termios_copy_hw(&tty->termios, old_termios);
386386 sierra_send_setup(port);
387387 }
388388
drivers/usb/serial/spcp8x5.c+6−6
@@ -316,10 +316,10 @@ static void spcp8x5_dtr_rts(struct usb_serial_port *port, int on) · 315 unmodified lines
316316 static void spcp8x5_init_termios(struct tty_struct *tty)
317317 {
318318 /* for the 1st time call this function */
319− *(tty->termios) = tty_std_termios;
320− tty->termios->c_cflag = B115200 | CS8 | CREAD | HUPCL | CLOCAL;
321− tty->termios->c_ispeed = 115200;
322− tty->termios->c_ospeed = 115200;
319+ tty->termios = tty_std_termios;
320+ tty->termios.c_cflag = B115200 | CS8 | CREAD | HUPCL | CLOCAL;
321+ tty->termios.c_ispeed = 115200;
322+ tty->termios.c_ospeed = 115200;
323323 }
324324
325325 /* set the serial param for transfer. we should check if we really need to
@@ -330,7 +330,7 @@ static void spcp8x5_set_termios(struct tty_struct *tty, · 4 unmodified lines
330330 struct usb_serial *serial = port->serial;
331331 struct spcp8x5_private *priv = usb_get_serial_port_data(port);
332332 unsigned long flags;
333− unsigned int cflag = tty->termios->c_cflag;
333+ unsigned int cflag = tty->termios.c_cflag;
334334 unsigned int old_cflag = old_termios->c_cflag;
335335 unsigned short uartdata;
336336 unsigned char buf[2] = {0, 0};
@@ -340,7 +340,7 @@ static void spcp8x5_set_termios(struct tty_struct *tty, · 3 unmodified lines
340340
341341
342342 /* check that they really want us to change something */
343− if (!tty_termios_hw_change(tty->termios, old_termios))
343+ if (!tty_termios_hw_change(&tty->termios, old_termios))
344344 return;
345345
346346 /* set DTR/RTS active */
drivers/usb/serial/ssu100.c+2−2
@@ -216,7 +216,7 @@ static void ssu100_set_termios(struct tty_struct *tty, · 215 unmodified lines
216216 struct ktermios *old_termios)
217217 {
218218 struct usb_device *dev = port->serial->dev;
219− struct ktermios *termios = tty->termios;
219+ struct ktermios *termios = &tty->termios;
220220 u16 baud, divisor, remainder;
221221 unsigned int cflag = termios->c_cflag;
222222 u16 urb_value = 0; /* will hold the new flags */
@@ -322,7 +322,7 @@ static int ssu100_open(struct tty_struct *tty, struct usb_serial_port *port) · 99 unmodified lines
322322 dbg("%s - set uart failed", __func__);
323323
324324 if (tty)
325− ssu100_set_termios(tty, port, tty->termios);
325+ ssu100_set_termios(tty, port, &tty->termios);
326326
327327 return usb_serial_generic_open(tty, port);
328328 }
drivers/usb/serial/ti_usb_3410_5052.c+5−5
@@ -520,7 +520,7 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port) · 519 unmodified lines
520520 }
521521
522522 if (tty)
523− ti_set_termios(tty, port, tty->termios);
523+ ti_set_termios(tty, port, &tty->termios);
524524
525525 dbg("%s - sending TI_OPEN_PORT", __func__);
526526 status = ti_command_out_sync(tdev, TI_OPEN_PORT,
@@ -562,7 +562,7 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port) · 35 unmodified lines
562562 usb_clear_halt(dev, port->read_urb->pipe);
563563
564564 if (tty)
565− ti_set_termios(tty, port, tty->termios);
565+ ti_set_termios(tty, port, &tty->termios);
566566
567567 dbg("%s - sending TI_OPEN_PORT (2)", __func__);
568568 status = ti_command_out_sync(tdev, TI_OPEN_PORT,
@@ -831,8 +831,8 @@ static void ti_set_termios(struct tty_struct *tty, · 262 unmodified lines
831831 int port_number = port->number - port->serial->minor;
832832 unsigned int mcr;
833833
834− cflag = tty->termios->c_cflag;
835− iflag = tty->termios->c_iflag;
834+ cflag = tty->termios.c_cflag;
835+ iflag = tty->termios.c_iflag;
836836
837837 dbg("%s - cflag %08x, iflag %08x", __func__, cflag, iflag);
838838 dbg("%s - old clfag %08x, old iflag %08x", __func__,
@@ -871,7 +871,7 @@ static void ti_set_termios(struct tty_struct *tty, · 32 unmodified lines
871871 }
872872
873873 /* CMSPAR isn't supported by this driver */
874− tty->termios->c_cflag &= ~CMSPAR;
874+ tty->termios.c_cflag &= ~CMSPAR;
875875
876876 if (cflag & PARENB) {
877877 if (cflag & PARODD) {
drivers/usb/serial/usb-serial.c+3−4
@@ -207,7 +207,7 @@ static int serial_install(struct tty_driver *driver, struct tty_struct *tty) · 206 unmodified lines
207207 if (retval)
208208 goto error_get_interface;
209209
210− retval = tty_standard_install(driver, tty);
210+ retval = tty_port_install(&port->port, driver, tty);
211211 if (retval)
212212 goto error_init_termios;
213213
@@ -305,8 +305,7 @@ static void serial_close(struct tty_struct *tty, struct file *filp) · 91 unmodified lines
305305 * Do the resource freeing and refcount dropping for the port.
306306 * Avoid freeing the console.
307307 *
308− * Called asynchronously after the last tty kref is dropped,
309− * and the tty layer has already done the tty_shutdown(tty);
308+ * Called asynchronously after the last tty kref is dropped.
310309 */
311310 static void serial_cleanup(struct tty_struct *tty)
312311 {
@@ -423,7 +422,7 @@ static void serial_set_termios(struct tty_struct *tty, struct ktermios *old) · 110 unmodified lines
423422 if (port->serial->type->set_termios)
424423 port->serial->type->set_termios(tty, port, old);
425424 else
426− tty_termios_copy_hw(tty->termios, old);
425+ tty_termios_copy_hw(&tty->termios, old);
427426 }
428427
429428 static int serial_break(struct tty_struct *tty, int break_state)
drivers/usb/serial/usb_wwan.c+1−1
@@ -67,7 +67,7 @@ void usb_wwan_set_termios(struct tty_struct *tty, · 66 unmodified lines
6767 struct usb_wwan_intf_private *intfdata = port->serial->private;
6868
6969 /* Doesn't support option setting */
70− tty_termios_copy_hw(tty->termios, old_termios);
70+ tty_termios_copy_hw(&tty->termios, old_termios);
7171
7272 if (intfdata->send_setup)
7373 intfdata->send_setup(port);
drivers/usb/serial/whiteheat.c+1−1
@@ -724,7 +724,7 @@ static void firm_setup_port(struct tty_struct *tty) · 723 unmodified lines
724724 {
725725 struct usb_serial_port *port = tty->driver_data;
726726 struct whiteheat_port_settings port_settings;
727− unsigned int cflag = tty->termios->c_cflag;
727+ unsigned int cflag = tty->termios.c_cflag;
728728
729729 port_settings.port = port->number + 1;
730730
firmware/Makefile+0−1
@@ -40,7 +40,6 @@ fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-6.2.1a.fw \ · 39 unmodified lines
4040 bnx2/bnx2-mips-06-6.2.1.fw \
4141 bnx2/bnx2-rv2p-06-6.0.15.fw
4242 fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
43−fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
4443 fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
4544 cxgb3/t3c_psram-1.1.0.bin \
4645 cxgb3/t3fw-7.10.0.bin \
firmware/intelliport2.bin.ihex+0−2147
@@ -1,2147 +0,0 @@
1−:100000003C4237180201030000000000000000001D
2−:10001000576564204465632030312031323A3234F0
3−:100020003A33302031393939000000000000000037
4−:10003000E96C0F426547694E6E496E47206F462056
5−:10004000634F6445CC135A15E8167618041A921BB0
6−:10005000201DAE1E3C20CA215823E6247426022807
7−:1000600090291E2BAC2C3A2EC82F5631E432723414
8−:1000700000368E371C39AA3A383CC63D543FE24020
9−:100080007042FE438C451A47A848364AC44B524D2D
10−:10009000E04E6E50FC518A531855A6563458C2593A
11−:1000A000505BDE5C6C5EFA5F88611663A464326646
12−:1000B000C0674E69DC6A6A6CF86D866F1471A27253
13−:1000C0003074BE754C776C778C77AC7733DB8ADC19
14−:1000D0005333DB250700750A8A1E080183E30CEB06
15−:1000E00020903C01750A8A1E080180E3C0EB129043
16−:1000F0008A1E0D013C02750680E30CEB049080E340
17−:10010000C053508B1EBA138EDBE86A65558BEC53D7
18−:100110001E2BC08ED88B5E04C1E304035E06D1E3C0
19−:100120002E8B9F44008D472A1E5A1F5B5DC3558B43
20−:10013000EC531E2BC08ED88B5E04C1E304035E0615
21−:10014000D1E32E8B9F44008D47341E5A1F5B5DC345
22−:10015000FB558BEC53515256571E061E0733C08E6B
23−:10016000D88B5E04268A47592503008BF0D1E62EF2
24−:100170008BB4C400C1E0042602471AD1E08BE82EFC
25−:100180008BAE4400892C268A471C88440F268A4758
26−:100190001D884410268A471E884411268A471F88D6
27−:1001A0004412268A4720884413268A472388441409
28−:1001B000268A4724884415268A475A88440E33C025
29−:1001C00089440689440888440B88440AB021B464F1
30−:1001D000894404894402B05588440D88440CE86A77
31−:1001E00000725BE8C900E8C110894408807C0F01F7
32−:1001F0007429E82B02E87F02807C0F03741DE8A9B4
33−:10020000108BF82B44083DA00F7210897C0833C076
34−:1002100087440685C07504C6440AFF8A440A84C020
35−:10022000750BB80800E86A4AE8A90173BFE84F01F6
36−:100230008166487FFF83667ABFB002E8040E8A4475
37−:100240000A98071F5F5E5A595B5DC3814E48800064
38−:10025000B040E83D4AE88940732AE84D108BD8B099
39−:1002600005E82E4AF6462702751AE83D102BC33DD5
40−:10027000581B72EB8166487FFFB002E8C40DC6448C
41−:100280000A01F9C3834E7A40F8C3FBB001E8024A81
42−:10029000FAE8991EE40A84C075F0B04EE60AFBB095
43−:1002A00001E8EE49FAE8851EE40A84C075F0C3FA55
44−:1002B000E87A1EE4EC884416E4E4884417E4F888FD
45−:1002C0004418E4F0884419E41088441AE41288447D
46−:1002D0001BE41488441CE43488441DE43688441E1E
47−:1002E000E4D824018AE0E4DA24020AC488441F8A9C
48−:1002F0004410E8CD1F8A4411E835218A4412E88968
49−:10030000218A4413E84321C686A10000E414241086
50−:10031000E614E412243DE6128A44153C01721E776D
51−:1003200016B011E634B013E636E4140C10E614E40B
52−:10033000120C40E612EB06E4120C02E6128A440F9D
53−:100340003C0174063C02740AEB0EE4120C08E6123F
54−:10035000EB06E4120C10E612E82FFF8A44143C026C
55−:100360007508B05588440C88440DB021B4648944A4
56−:1003700004894402E40C0C10E60CE8ED39FBC3E8F8
57−:100380005F3F7308FBB00AE80849EBF3FAE89D1DEC
58−:100390008A64168A441789869400E6E48AC4E6ECE7
59−:1003A0008A64188A441989869600E6F08AC4E6F8B9
60−:1003B0008A441AE6108A441BE6128A441CE6148A10
61−:1003C000441DE6348A441EE6368A441FE6D8E6DA3F
62−:1003D000E9B7FE90FA8A440EE6FEE402A80175052C
63−:1003E00033C0FBF8C333C0E400FBF9C38A64148054
64−:1003F000FC02742BFEC0FEC780FF4E721C74098085
65−:10040000FF507308B00AEB17B00DEB1302DC32FF9C
66−:1004100080FB7F7C02B3218AC33C7F7C02B021C376
67−:10042000FA807C0B047602FBC38B46243D080072E5
68−:10043000F68E46028B7E228A440C8B5C02AAE8ABC5
69−:10044000FFAAE8A7FFAAE8A3FFAAE89FFF88440C39
70−:10045000895C0280440B04897E22836E24048346D7
71−:100460001A04807E26027406806626FDFBC360B0F7
72−:10047000FDE8023F61FBC3FA807C0F037509C644A7
73−:100480000B00E8E538FBC3C47E148B4E3A85C97572
74−:1004900035268B0D4747E3EA3B7E047622B80200FF
75−:1004A00039462E7707C7462E0000EB138B5E2C894A
76−:1004B0005E0426C70700004343895E2C29462E852B
77−:1004C000C978CE894E3A8A440D8B5C04268A25472A
78−:1004D0003AC47516FE4C0BFF4406E80FFFE2ED88A8
79−:1004E000440D895C04894E3AEBA7C6440AFEE879BC
80−:1004F00038FBC390E8B30D8AE88A0ECB13B3078AA2
81−:10050000C1EEEB00EC3AC1750902CDFECB75F0EB04
82−:100510000C90880ECB138AE8BBFFFFF9C3880ECB83
83−:1005200013F8C390BB3F3F8A8E9E00BAFE00EC8A50
84−:10053000E832C122C37502F8C3F9C390E8E5FF733E
85−:1005400001C3BAD000BB03038A8E9F00EC8AE83255
86−:10055000C122C37502F8C3F9C39033C08ED88EC0D0
87−:10056000803EC813007507B00AE82647EBF2FB335C
88−:10057000DB8A1EC913434383FB7E760733DBB0025D
89−:10058000E80F472E8BAF4400837E080074E7881E77
90−:10059000C913B002E8FB46FAF7463840007414E885
91−:1005A000961BE87FFF721C33D28A969F0083C20E8F
92−:1005B000EB0C90E8771BE883FF7208BA4800E83339
93−:1005C000FF73AB23CB898E9A0089969C00FE86B57B
94−:1005D00000C606C81300B00AE8670AFBEB891018CA
95−:1005E000082833C0A005018AC824407524C7067CAA
96−:1005F000128E45C70642120100C606541202B00808
97−:10060000F6C1017402B004A34612A24C12A29412C5
98−:10061000C3C7067C12B645A00F0184C0750E6A00E0
99−:100620001FC60693121E9C0EE8B10C90C70644121A
100−:100630000100A342128BD8C1E304881E9412BEE2CB
101−:10064000052BF08BC833DB8BFB2EAC888548128AD8
102−:10065000D80C05E6FE8AE0EB00E4FE32C4A83F7445
103−:1006600003E99E00E400888550128AE02430BA1025
104−:10067000FF3C30741280FC04740ABA0403F60608C6
105−:1006800001FE7403BA080F88954C1202FA32C0F6C4
106−:10069000C4087402B001888558128AC43C35745B62
107−:1006A0003C3674573C3474533C04744F3C14744BC4
108−:1006B0003C157447A8407425C685541204D1E7B48C
109−:1006C000038AC389855C128AC38AE380CC01898549
110−:1006D0006412D1EF47E203EB1A90E96CFFC6855430
111−:1006E0001202D1E78AE68AC30C0489855C12D1EF35
112−:1006F00047E2E733C08AC7A34612C3C68554120631
113−:10070000EBBBC68554120033C08885501288854CD7
114−:100710001288855812EBA6C7462602128B461E8900
115−:1007200046008946228B4620894624C7461A000087
116−:10073000C3C7463C8000C7463801001E568B763042
117−:100740008976048976148E5E0633C089044646890C
118−:10075000762C89463A8B4632484889462E5E1FC31E
119−:1007600033C089464889464AC74646AE0189464E47
120−:100770008B46448946508B4642894640894608C389
121−:1007800033C0894676894678C7467A1000561E8B54
122−:10079000767089761089760C8E5E12C70400008B05
123−:1007A00046728946741F5EC3895618895602895657
124−:1007B0000689560A89560E8956128956168BD84BC9
125−:1007C0004BC1E302BF0200897E1E03FB897E30031A
126−:1007D000FB897E4203FB897E7083EB08895E20895A
127−:1007E0005E32895E44895E7250E82BFFE871FFE853
128−:1007F0003FFFE88BFF58C3B83075C1E8040E5B03B8
129−:10080000C3A3BA13833E4212007407803E941200C1
130−:10081000750E6A001FC60693121E9C0EE8BD0A9054
131−:10082000B8307AC1E80440A3C0132B061201F7D8F0
132−:1008300033D28BCA8A0E9412F7F13D8000770E6A8C
133−:10084000001FC6069312259C0EE8900A90483DFFB3
134−:10085000077203B8FF07A3C21333C98A0E94123379
135−:10086000F6B800092E8BAC440089464C404646E25F
136−:10087000F38A0E941233F68B16C013A1C2132E8B7B
137−:10088000AC4400E822FF03D04646E2F2C333C02E58
138−:100890008BAD44008946084747E2F4C35133C00A90
139−:1008A000C22E8BAD440089869E00814E38002047C1
140−:1008B00047FEC480FC04720432E4FEC0E2E35983C4
141−:1008C000E9107405F7D9E8C4FFC35133C00AC22E3A
142−:1008D0008BAD440089869E00834E3840474780C4D4
143−:1008E00010790432E4FEC0E2E65983E9107405F79A
144−:1008F000D9E899FFC3E8D2FFC38D089C08CA08F560
145−:10090000088B0E421233F6515633DB8BCB8A944858
146−:10091000128A8C4C128A9C54128BFEC1E70585DB2F
147−:100920007502B1102EFF97F9085E5946E2D9C3014E
148−:10093000CC03D000E802D000E801D000E800D000ED
149−:10094000E804D0A8DA00DC00DE01D803CC03CC0335
150−:10095000CC04D0A8DA20DC00DE03CC03CC03CC002E
151−:10096000D803CC03CC03CC03CC03CC03CC03CC0303
152−:10097000CC03CC03CC03CC03CC03CC03CC03CC03FF
153−:10098000CC04D000DA20DC03DE01D803CC03CC0396
154−:10099000CC03CC00D800CC00D0000056521E0E1F55
155−:1009A000BE2F0933D2FCAD85C0740D8AD4EEAD855F
156−:1009B000C074058AD4EEEBEE1F5A5EC3E48084C097
157−:1009C00074167814B027E6FCB011E634E4FC3C273A
158−:1009D0007506E4117502F8C3F9C383C206B0BFEE11
159−:1009E00083EA02B010EE8886AF00B01183C204EE35
160−:1009F00083C202EEB01383C202EE83C202EE2EA1C6
161−:100A00004C2D8986940083EA0EEE83C2028AC4EEDE
162−:100A100083C204B003EE8886A80083EA0432C0EEE5
163−:100A200083C202B089EE8886A6000C06EEB040B400
164−:100A30003889461CC74636380083C20432C0EE8867
165−:100A400086A700C383C206B0BFEE83EA02EC3A86F3
166−:100A5000AF00752483C204EC3C11751C83C206EC04
167−:100A60003C13751483EA088A86A800EE83EA02EC38
168−:100A700024C03CC07502F8C3F9C333C98BD18BF1D4
169−:100A80008A0E9412C1E9022E8BAC4400F74638005E
170−:100A900020740E8A869E00E6FE32C0E68042E8FAA6
171−:100AA000FE83C608E2E185D27403E80508C333C9B2
172−:100AB0008BF18A0E94122E8BAC4400F7463840001E
173−:100AC0007406E87316E812FF4646E2EAC333C98BA0
174−:100AD000F18A0E9412C1E9022E8BAC4400F746381D
175−:100AE00000207416E84616E8D2FE730E6A001FC690
176−:100AF0000693121C9C0EE8E3079083C608E2D9C354
177−:100B000033C98BF18A0E94122E8BAC4400F7463811
178−:100B100040007416E82116E82AFF730E6A001FC60B
179−:100B20000693121C9C0EE8B307904646E2DAC30C0B
180−:100B300000001000131200001400283C001B3E00AF
181−:100B4000002A00002C0000420014D80000DA000047
182−:100B50003400113600133800113A001300005650CB
183−:100B600052BE2F0B2EAD85C07406922EACEEEBF468
184−:100B70005A585EC3532EA16022E6E4E6F08AC4E62A
185−:100B8000ECE6F8E8D8FFB04BE610B050E612B0380B
186−:100B9000E614E8AE15B046E60AE8A715B01AE60A6C
187−:100BA000E8A015B022E60AE89915E8FD068BD8E41E
188−:100BB00016A8047518E8F2062BC33D320072F06ADD
189−:100BC000001FC6069312239C0EE8100790E8DA0671
190−:100BD0002BC33D2400771BB031E6FC565155B910AC
191−:100BE000002E8BAC4400814E3880004646E2F25D18
192−:100BF000595EE869FFE84B15B046E60AE844155B24
193−:100C0000C333F68B0E42122E8BAC4400F7463800ED
194−:100C1000207406E81715E85BFF83C620E2E9C38B62
195−:100C2000C20504008946282EA14C2D89868E008994
196−:100C300086900089869200C686A3000AC686C300F5
197−:100C4000035283C2048A86A6000C06EE5A83C202AF
198−:100C5000B005EE8886A500C3E803FFE8E514B042BE
199−:100C6000E60AF74638800074062EA19C22EB042E7B
200−:100C7000A16C22C7461C0C008986940089869600C8
201−:100C800089868E008986900089869200E6F0E6E4E7
202−:100C90008AC4E6F8E6ECC686C30003E8A514B01AD9
203−:100CA000E60AB0108886A500E60CC333C98BF18A2A
204−:100CB0000E94122E8BAC4400F7463840007406E8C0
205−:100CC0007614E85AFF4646E2EAC333C98BF18A0E2E
206−:100CD00094122E8BAC4400F7463800207406E84C82
207−:100CE00014E874FF4646E2EAC390833E441200755E
208−:100CF00014B001BA0601EE2AC0EEB002EEB004EE66
209−:100D0000B80002EB0FBA0601B040EEB801008A0E3F
210−:100D10000E01D3E0A38812C3A18812A384122D2050
211−:100D200000A38A122D2000A38212C706861220007B
212−:100D3000C70680123200C3833E44120074768B0EC5
213−:100D4000421233F68AA4541284E4745F8A844812EF
214−:100D50000C04E6FEF6C4047425B01BBA0000EEEBEA
215−:100D6000002AC0BA0200EEEB00B003EEEB0032C086
216−:100D7000BA0200EEEB00BA0000B000EEEB2DB01F9F
217−:100D8000BA0000EEEB002AC0BA0200EEEB00B0039E
218−:100D9000EEEB00D1E68A845D12D1EEF6D0BA020005
219−:100DA000EEEB00BA0000B00AEEEB00E404EB00E466
220−:100DB0000446E290C390B81400BA3EFFEFB80600B4
221−:100DC000BA32FFEFB80F00BA34FFEFBA36FFEF8345
222−:100DD0003E4412007516B81100BA38FFEFB8120081
223−:100DE000BA3AFFEFB81B00BA3CFFEFC3B81100BA24
224−:100DF00038FFEFB81200BA3AFFEFB81B00BA3CFF59
225−:100E0000EFC3B8FC00BA28FFEFFB833E4412007426
226−:100E100007B8CC00BA28FFEFC300FFFF202428FF4B
227−:100E20002CFFFF303438FFFF3C903C0F770EBB198E
228−:100E30000E2ED73CFF74058AD8F8C3902ADBF9C37D
229−:100E4000833E4412007427A00601802606013080EC
230−:100E50003E0601307518B90200BFC413BA0601EC92
231−:100E6000A82075F8BA0401EDABE2F1EB1690B904D5
232−:100E700000BFC413BA0601ECA82075F8BA0401EC4F
233−:100E8000AAE2F1FA90BEC413AD80E43F80FC027484
234−:100E90000E6A001FC60693120A9C0EE83E0490AD2F
235−:100EA0003C0F75ED8AC4E881FF72E6881E1A01C600
236−:100EB000068E1200B0000A061A01BA0001EEC6063C
237−:100EC0008F1240833E4412007506B80C00EB04906C
238−:100ED000B84C00BA28FFEFC3833E4412007501C32B
239−:100EE000A150120B0652120AC4A80874F2A00F01F6
240−:100EF0002AE450FF36BA131FE8505683C4026A0032
241−:100F00001F33C0A3BC13A00F01A3BE138B1EBC13C1
242−:100F10008A875012F687501208740D24078AE0BEA3
243−:100F2000CC00A0BC13E8943DFF06BC13FF0EBE131B
244−:100F300075DAC3901E33C08ED8B001E8543D1FC38C
245−:100F400033C98BF18A0E94122E8BAC4400C74662D3
246−:100F50003844C7467CFC3BC7467EE23BC7868000E0
247−:100F6000EC3CE8AB16C686C00011837E080074070F
248−:100F70005156E833335E594646E2CDC333C98BF14F
249−:100F80008BF98A0E9412C1E902E3132E8BAC440054
250−:100F90008A869E0088856C1283C60847E2EDC3FAF4
251−:100FA000FCB0C0BA0001EE33C08ED88EC08ED0BF68
252−:100FB0001601B9CC772BCFD1E9F3ABBC4012E8D9FD
253−:100FC00002E8703CBECC0FE8F23CF49033C08ED8FF
254−:100FD0008EC08ED0F6060A0180740BBE3555E8DB54
255−:100FE0003CB001E8AC3CE8B300E8F6F5E808F8E806
256−:100FF0000FF9E885FAE8B6FAE8EFFCE8C210E80372
257−:101000003CE8B2FDE830FDE85402C6068F12C0E8A5
258−:10101000BBFAE8EBFAE8E9FBE8AFFCE88DFCE81F77
259−:10102000FFE858FFE8DBFDE816FE33C0BE5A05E8CE
260−:101030008A3CE8A3FEE8E0FCFBBEA444E87D3CE972
261−:10104000CA2D56988BF08B425285C07527C74252E5
262−:10105000010053368B9C2C01F6C301750C36896850
263−:10106000523689AC2C015B5EC33689AC2C013689C3
264−:10107000AC1C015B5EC356988BF033ED368B841C41
265−:1010800001A80175158BE833C08742523689841C4C
266−:1010900001A80174053689842C015EC3565133F6CC
267−:1010A000B80100B9080089841C0189842C014646D6
268−:1010B000E2F4595EC390BB01008BE8FF4E6E740AE8
269−:1010C0008BDD8B4658A80174F0C38B4648A90800F5
270−:1010D0007445F7463840007427E85C1080C2068AE1
271−:1010E00086A80024BF8886A800EE60B0FEE886329D
272−:1010F00061B002E84CFF8B464824F7894648EB175D
273−:10110000E82A10814E2600408A86A5000C028886B7
274−:10111000A500E60C8B4648A904007414B002E8212F
275−:10112000FF8B464824FB89464860B0DFE8473261C0
276−:1011300033C0874658F6C301750B36894758A80156
277−:10114000750DE974FFA32201A8017503E96AFF89FF
278−:101150001E3201C3BB01008BE8F74638400074150E
279−:10116000E8D50F80C20AECA840750A8BDD8B465685
280−:10117000A80174E3C38B462680E4FE80CC02894636
281−:1011800026B002E8BCFE33C0874656F6C301750A96
282−:1011900036894756A801750BEBBDA32001A8017540
283−:1011A00002EBB4891E3001C3601E062BC08ED8A08E
284−:1011B000901284C07549A12201A8017503E8F6FECA
285−:1011C000A12001A8017503E88AFFA1AC13487805A6
286−:1011D0007445A3AC13A1AE134878057451A3AE13A4
287−:1011E000A1B0134878057463A3B013A17E124078B0
288−:1011F00003A37E12B80080BA22FFEF071F61CFA0C1
289−:101200009112403C02720B33C0A29112FF167C1265
290−:10121000EBA4A29112EB9FA08E1232068F12A28E27
291−:10122000120A061A01BA0001EEB82C01EBA4833EA3
292−:101230008412107211BA28FFED0C81EFE85337BA0F
293−:1012400028FFED247EEFB80400EB92C6068D120154
294−:10125000E83F37C6068D1200A1B213EB8B908A1EB1
295−:101260000B012AFF6BC319BA62FFEFB80A00BA601C
296−:10127000FFEFB801E0BA66FFEFB8FFFFBA52FFEF29
297−:10128000B809C0BA56FFEFC706AC132C01C706AEAB
298−:10129000130400C606911200C3908A1E0B012AFF98
299−:1012A0006BC305D1E8A31801C39052BA50FFED5AA1
300−:1012B000C39053518B1E1801B9320590E2FE4B7555
301−:1012C000F7595BC3B080BA00010A061A01EEC39059
302−:1012D000B040EBF2B0C0EBEEB000EBEAFA60061EF5
303−:1012E000162BDB8EDB2EA1BA4C2EA3924CA09312B0
304−:1012F000988BE889262D7A803ECA13007403E96B27
305−:1013000042E8C0FFE8ABFFE8A8FFB020C606901295
306−:1013100000FF167C128BFD83FF0A7211E8B9FFE80B
307−:1013200090FFE8ABFFE88AFF83EF0AEBEA0BFF745C
308−:101330000FE8A4FFE87BFFE89AFFE875FF4F75F11F
309−:10134000E895FFE86CFFEBB98A86A50024FDEE88DE
310−:1013500086A500C38A86A6000C02EEC38B7638F7FA
311−:10136000C6010074EF8B4E368B462E3BC173028B49
312−:10137000C82BC189462E014E34C47E0426010D8B34
313−:101380007E2C83EA04F36C8EC1897E2C3B463C7232
314−:1013900012F7C62000750B83CE20897638B000E89E
315−:1013A000A0FCC3F7C60400741B8BD883CE108976CB
316−:1013B000388A86A70024FE8886A70083C208EE83A9
317−:1013C000EA088BC33D40007201C3814E380004839C
318−:1013D000C2028A86A50024FA8886A500EEC38A8602
319−:1013E000A6000C02EEC3F74638010074F18B4E2EB6
320−:1013F00032DB8ABEA30083C206C476048B7E2C83B4
321−:10140000F908722CECA80174168AE083EA0AEC83CE
322−:10141000C20A84E77551AAFEC34983F90873E5320D
323−:10142000FF26011C015E34897604894E2E897E2CAC
324−:101430003B4E3C7211F64638207401C3834E38206F
325−:10144000B000E8FDFBC3F64638047415834E38102F
326−:101450008A86A70024FE8886A70083EA02EE83C25C
327−:10146000023D4000725DC332FF26031C85DB740918
328−:1014700026891C8BF74747494980E41E80CCC0264B
329−:101480008904F6C41074278B7638F7C60010740BE5
330−:1014900050FE86B200B00AE8A8FB58F7C6000174F7
331−:1014A0000DE882268B76388B4E2E8B7E04AB8BF725
332−:1014B00033C0AB32DB8ABEA300494983F9087217F7
333−:1014C000E941FF814E38000483C2F88A86A50024D2
334−:1014D000FA8886A500EEC3E945FF83C208EC88863A
335−:1014E000AA00C0E8048AE08AC88686A90032E08B98
336−:1014F0005E3E84E3744F8AC18B4E26F6C504740C9D
337−:10150000A808740580E1BFEB0380C940F6C50874E4
338−:101510000CA802740580E17FEB0380C980884E2609
339−:101520008BF08A86A50084C97408A802741524FD6E
340−:10153000EB06A802750D0C028886A50083EA0AEE68
341−:1015400083C20A8BC684E77501C3C686BA0001B0A0
342−:101550000EE8EEFAF74638000274EE837E2E06722D
343−:10156000E88AA6AA00C45E048B7E2CB0FFAAB00253
344−:10157000AB26830703836E2E03897E2CF646382024
345−:101580007401C3834E3820B000E8B6FAC39083EAF2
346−:1015900008E9B4FD83C2068B5E26F6C3C075EF8BE7
347−:1015A0004E1CEC8886A40083EA0AA82075028ACD26
348−:1015B00032ED8B461A3BC87318014E2A2BC189465F
349−:1015C0001AC57600F36E8ED98976003D2000723000
350−:1015D000C385C074318BC801462AC57600F36E8E70
351−:1015E000D980CB02895E26E832F1F6C701751683F1
352−:1015F000C202E853FDF6C710750BB002E843FAC308
353−:10160000F6C70174F0C380CB02895E26F6C7017469
354−:10161000DE83C202E831FDF686A40040740B80E749
355−:10162000FE80CF02895E26EBCCB004E814FAC3C07A
356−:10163000C2C8CAC4C6CCCED0D2D8DAD4D6DCDE90EA
357−:10164000E90E01E4C48AE0E4C48BD083F90872F0A7
358−:1016500026833F0074048BDF49498BFB8ADE83E3DA
359−:101660000F2E8AA72F16ABF6C4107424F7C60010ED
360−:10167000740B50FE86B200B00AE8C6F958F7C600EF
361−:1016800001740DE8A0248B76388B4E2E8B7E04AB34
362−:10169000897E0433C0AB4949894E2E897E2C8BC18B
363−:1016A000EB4E90EB9E90E4D684C07963E6D08AC876
364−:1016B00025030003D8D1E32E8BAF4400888EAE0003
365−:1016C0008B4E2EC45E048B7E2C8B7638E4862407EA
366−:1016D0003C0375CFE41C913BC173028BC82BC189BD
367−:1016E000462E014E3426010FBAC400F36C897E2CBD
368−:1016F0003B463C721CF7C62000750B83CE208976D2
369−:1017000038B000E83CF98A86AE00243FE6D6C3F93B
370−:10171000C3F7C60A007435F7C61000752F83CE10C4
371−:10172000897638F7C60200740E50E4D824FEE6D855
372−:1017300058F7C6080074155051B9E803E40A84C08C
373−:10174000E0FA84C07504B024E60A59583D4000739D
374−:10175000B58A86A50024EF8886A500E60C81CE1008
375−:1017600004897638EBA00008040C0109050D020A73
376−:10177000060E030B070F004080C02060A0E0105051
377−:1017800090D03070B0F0E4D2E6D08AC825030003D0
378−:10179000D8D1E32E8BAF4400888EAE00E4D8C0E8E9
379−:1017A000048BD82E8A8766178AE08AC88686A900A5
380−:1017B00032E0E4988B5E3E84E374548AC18B4E26FB
381−:1017C000F6C504740CA808740580E1BFEB0380C95A
382−:1017D00040F6C508740CA802740580E17FEB038015
383−:1017E000C980884E268BF08A86A500F6C1FD740854
384−:1017F000A806741924F9EB0FA8067511F6C5017532
385−:10180000040C04EB020C028886A500E60C8BC6844F
386−:10181000E775098A86AE00243FE6D2C3C686BA00C1
387−:1018200001B00EE81CF8F74638000274E6837E2EFD
388−:101830000672E08A86A9008AE08686AA008AC832F3
389−:10184000C480C90B22C1C0E4040AE0C45E048B7EDC
390−:101850002CB0FFAAB002AB26830703836E2E038948
391−:101860007E2CF646382075AB834E3820B000E8D188
392−:10187000F7EBA090E41224DFE61281E3FE9F895E7D
393−:1018800026836648F7EB7390F6C72075E7E4120CE1
394−:1018900020E61232C0E6C6B083E6C680CF20895E5D
395−:1018A000268A86A5000C028886A500E60CEB7490BB
396−:1018B000F6C74075D3E4120C20E61232C0E6C6B07B
397−:1018C00081E6C680E7DF80CB01895E26B006E8713D
398−:1018D000F7908A86A50024F9E60C8886A500EB43DC
399−:1018E000E4D4E6D08BF825030003D8D1E32E8BAFE8
400−:1018F00044008B5E26F6C76075B6F6C3C075D3BAD2
401−:10190000C6008B4E1C8B461A3BC8731E014E2A2BF9
402−:10191000C189461AC57600F36E8ED98976003D20BE
403−:1019200000723D8BC7243FE6D4C385C074398BC891
404−:1019300001462AC57600F36E8ED983CB02895E26D6
405−:10194000E8D9EDF6C70175398A86A50024F9E60CB9
406−:101950008886A500F6C71075CAB002E8E4F6EBC3A6
407−:10196000F6C70174EFEBBCF6C70174DC8A86A500EC
408−:10197000A802741181E3FFFE81CB0002895E26EB91
409−:10198000C78A86A50024FB0C02E60C8886A500EB1E
410−:101990009290FDF7DF7FFEFBEFBF0004000405041B
411−:1019A00005040104000405040504060406040504F6
412−:1019B00005040604060405040504020400040504E5
413−:1019C00005040104000405040504060406040504D6
414−:1019D00005040604060405040504070407040504B9
415−:1019E00005040704070405040504060406040504A9
416−:1019F0000504060406040504050407040704050499
417−:101A00000504070407040504050406040604050488
418−:101A10000504060406040504050403040004050483
419−:101A20000504010400040504050406040604050475
420−:101A30000504060406040504050402040004050464
421−:101A40000504010400040504050406040604050455
422−:101A50000504060406040504050407040704050438
423−:101A60000504070407040504050406040604050428
424−:101A70000504060406040504050407040704050418
425−:101A80000504070407040504050406040604050408
426−:101A90000504060406040504050433DB8AD88A8796
427−:101AA0006C12E6FEC1E302E4CEA8047509A8027434
428−:101AB00003E92CFEF9C35053E8CBFC5B58A8027431
429−:101AC00003E91CFEF8C333DB8AD88A876C12E6FE72
430−:101AD000C1E302E9D0FB9A1AC61A00000200040012
431−:101AE00002000600020004000200080002000400D8
432−:101AF000020006000200040002000A0002000400C6
433−:101B000002000600020004000200080002000400B7
434−:101B1000020006000200040002000C0002000400A3
435−:101B20000200060002000400020008000200040097
436−:101B3000020006000200040002000A000200040085
437−:101B40000200060002000400020008000200040077
438−:101B5000020006000200040002000E000200040061
439−:101B60000200060002000400020008000200040057
440−:101B7000020006000200040002000A000200040045
441−:101B80000200060002000400020008000200040037
442−:101B9000020006000200040002000C000200040023
443−:101BA0000200060002000400020008000200040017
444−:101BB000020006000200040002000A000200040005
445−:101BC00002000600020004000200080002000400F7
446−:101BD00002000600020004000200C390DA1494150B
447−:101BE0005C13E613DA1BDA1BE613DA1B8B94641220
448−:101BF000C1E604A80174355033C08AC2E6FEE4A0F1
449−:101C000085C074278BD82E8A9FDA1A52562E8BA83D
450−:101C100044008B5628ECA801750D8886AD00240E73
451−:101C20008AD82EFF97DC1B5E5AEBCD58A80274367B
452−:101C300083C61033C08AC6E6FEE4A085C074278B35
453−:101C4000D82E8A9FDA1A52562E8BA844008B56281B
454−:101C5000ECA801750D8886AD00240E8AD82EFF975A
455−:101C6000DC1B5E5AEBCDC39032E48BD88BD02E8A2E
456−:101C70009F9A192E2297921956528AC3240303C69B
457−:101C800080E304D0EB2EFF97D61A585EA955007555
458−:101C9000D9C3601E062BC08ED8A15C12E6FEE400FC
459−:101CA00022C4740833F6E8BFFFEBEE90E40407E4C7
460−:101CB000041FB80080BA22FFEF61CF90601E062B90
461−:101CC000C08ED8A15E12E6FEE40022C47408BE04F1
462−:101CD00000E894FFEBEDE40407E4041FB80080BAC9
463−:101CE00022FFEF61CF90601E062BC08ED8A15C1240
464−:101CF000E6FEE40022C4741833F6E86BFFA160121C
465−:101D0000E6FEE40022C474E5BE0800E85AFFEBDDFD
466−:101D1000A16012E6FEE40022C475EDE40407E404C9
467−:101D2000A15C12E6FEE4041FE404B80080BA22FFBE
468−:101D3000EF61CF90601E062BC08ED8A15E12E6FE2A
469−:101D4000E40022C47419BE0400E81CFFA16212E67C
470−:101D5000FEE40022C474E4BE0C00E80BFFEBDCA13F
471−:101D60006212E6FEE40022C475EDE40407E404A177
472−:101D70005E12E6FEE4041FE404B80080BA22FFEF1E
473−:101D800061CF601E062BC08ED8A15C12E6FEE480F7
474−:101D900084C4740833F6E853FEEBEE90B80080BAC2
475−:101DA00022FFEF071F61CF90601E062BC08ED8A1C7
476−:101DB0005E12E6FEE48084C47408BE0200E82CFED5
477−:101DC000EBEDB80080BA22FFEF071F61CF90601ED5
478−:101DD000062BC08ED8A16012E6FEE48084C474088D
479−:101DE000BE0400E806FEEBEDB80080BA22FFEF0764
480−:101DF0001F61CF90601E062BC08ED8A16212E6FE36
481−:101E0000E48084C47408BE0600E8E0FDEBEDB80091
482−:101E100080BA22FFEF071F61CF90601E062BC08E95
483−:101E2000D8A15C12E6FEE40022C4741833F6E83749
484−:101E3000FEA16012E6FEE48084C474E5BE0400E8FE
485−:101E4000AAFDEBDDA16012E6FEE48084C475EDA17D
486−:101E50005C12E6FEE40407E4041FB80080BA22FF27
487−:101E6000EF61CF90601E062BC08ED8A15E12E6FEF9
488−:101E7000E40022C47419BE0400E8ECFDA16212E67D
489−:101E8000FEE48084C474E4BE0600E85FFDEBDCA1E0
490−:101E90006212E6FEE48084C475EDA15E12E6FEE403
491−:101EA0000407E4041FB80080BA22FFEF61CF601E70
492−:101EB000062BC08ED8A15C12E6FEE48084C47418A0
493−:101EC00033F6E827FDA16012E6FEE40022C474E5C3
494−:101ED000BE0800E892FDEBDDA16012E6FEE4002200
495−:101EE000C475EDE40407E4041FB80080BA22FFEFD4
496−:101EF00061CF601E062BC08ED8A15E12E6FEE48084
497−:101F000084C47419BE0200E8E2FCA16212E6FEE499
498−:101F10000022C474E4BE0C00E84DFDEBDCA16212AB
499−:101F2000E6FEE40022C475EDE40407E4041FB800F3
500−:101F300080BA22FFEF61CF90601E062BC08ED8A121
501−:101F40005C12E6FEE48084C4741833F6E89DFCA1BC
502−:101F50006012E6FEE48084C474E5BE0400E88CFCF4
503−:101F6000EBDDA16012E6FEE48084C475ED071FB8C6
504−:101F70000080BA22FFEF61CF601E062BC08ED8A171
505−:101F80005E12E6FEE48084C47419BE0200E85CFCC4
506−:101F9000A16212E6FEE48084C474E4BE0600E84B4D
507−:101FA000FCEBDCA16212E6FEE48084C475ED071F41
508−:101FB000B80080BA22FFEF61CF90601E062BC08E62
509−:101FC000D8902AC0E6FEE4CEA801741433DBE8D52D
510−:101FD000F6EBEF90B80080BA22FFEF071F61CF90B9
511−:101FE000F60605010175EDB001E6FEE4CEA8017428
512−:101FF000E3BB0400E8AFF6EBC990601E062BC08E71
513−:10200000D890FB90FA2AC0E6FEE4CEA802741333FF
514−:10201000DBE8CCF8EBECB80080BA22FFEF071F61D9
515−:10202000CF90A80474F033DBE85BF7EBD590601E2B
516−:10203000062BC08ED890FB90FAB001E6FEE4CEA845
517−:10204000027415BB0400E897F8EBEB90B80080BA77
518−:1020500022FFEF071F61CF90A80474F0BB0400E8D3
519−:1020600024F7EBD26A001FC6069312099C0EE86B98
520−:10207000F2906A001FC6069312299C0EE85DF2904A
521−:10208000722072207220CE1D921CE61C1A1E722035
522−:10209000821DAE1E381F7220821D72207220381FD2
523−:1020A000722072207220F41DBC1C341D641E72202C
524−:1020B000A81DF21E781F7220A81D72207220781FA2
525−:1020C000FCB940008CCBB864202BFFAB93AB93E200
526−:1020D000FAC7064C00A811833E4412007520C706BB
527−:1020E0003C00084BC7063000BA1FC7063400FA1F71
528−:1020F000F6060501017506C70638002E20C3C7067F
529−:102100003C00564B33DB8A1E5412C1E302021E56BA
530−:10211000122E8B878020A330008A1E5512C1E30245
531−:10212000021E57122E8B87A020A33400C38B869EDD
532−:1021300000E6FE86C4E6D0C38B869E00E6FE33D260
533−:102140008AD4C351B91027E40A909084C07405E280
534−:10215000F659F9C359F8C384C0781E518AE88AC871
535−:10216000B80100D3E0098698003AAEA00059751076
536−:10217000E8A9E5834E2602F9C39889869800EBF01A
537−:10218000F8C384C07812518AE08AC8B80100D3E04D
538−:1021900059F7D021869800C3C78698000000C383F2
539−:1021A000C2048A86A6000C04EE83EA04C3E893FF07
540−:1021B0007204B082E60AC38B4626A8FD74118A8693
541−:1021C000A500A806740824F98886A500E60CC3F6C5
542−:1021D000C401740A8A86A50024FB0C02EB0CA80239
543−:1021E000750F8A86A50024FD0C043A86A50075D8D3
544−:1021F000C38A86A500EBCFE4D833DB8AD8C0EB04D2
545−:102200002E8A9F6617889EA9008B5E2680E33FF684
546−:10221000C7047407A810750380CB40F6C70874077D
547−:10222000A880750380CB40885E268A86A500F6C309
548−:10223000FD740DA806740824F98886A500E60CC371
549−:10224000F6C70174040C02EBF0F6C30275E90C0446
550−:10225000EBE7C404C4048504590448044104C303DF
551−:10226000820341038202570241028201410182003E
552−:1022700041004E02AD0157012D002B002700210027
553−:102280001600F404F404A3046F045B045104F40383
554−:10229000A3035103A3026D025102A3015101A30044
555−:1022A00051006202D9016D01380036003100290069
556−:1022B0001B005157BF0200EB0F905156BF0100EBBE
557−:1022C00007905156BF0300903C197602B017988BC7
558−:1022D000F08A82C4002AE48BF083FE187346D1E6AC
559−:1022E0002E8B8C5222F74638800074052E8B8C8200
560−:1022F00022F7C7020074123B8E9400740C898E94EE
561−:10230000008AC5E6EC8AC1E6E4F7C7010074123B17
562−:102310008E9600740C898E96008AC5E6F88AC1E60E
563−:10232000F05E59C377068B8E8E00EBC58B8E9000C6
564−:10233000EBBFD503F6003E0010000400CA043301D1
565−:102340004D00140005000103050709000102030404
566−:1023500080841E00A02526000000608BF033FF2E35
567−:10236000A150232E8B165223BB3223F74638800010
568−:10237000740C2EA154232E8B165623BB3C23B90577
569−:10238000002E3B31730A4747E2F7B8FFFFEB1D9081
570−:10239000D1EF2E8A8D46232AEDD1EAD1D8E2FAF781
571−:1023A000F6050200C1E8022E8AA54B232EA358236E
572−:1023B000612EA15823C3080020008000000260099C
573−:1023C0000800200080000002000800000100020058
574−:1023D0000300040052565785C074053D0109760379
575−:1023E000B80109BF5B01F7463880007403BFB20132
576−:1023F00033F62E3B84B62376044646EBF5F7E72EFC
577−:102400008BBCC02303C783D200D1E7F7F72E8AA481
578−:10241000CA235F5E5AC3E43E80BEC30003750CF757
579−:10242000467A200074050C80E63EC3247FE63EC356
580−:1024300024038886C3008AE0E41024FC0AC4E61062
581−:10244000808EA10042E8CEFFC390568BF083E60752
582−:10245000D1E62EFFA458249068246C2470247424A0
583−:102460007824872487248724B400EB0EB4C0EB0AB9
584−:10247000B440EB06B420EB02B4A0E410241F0AC45D
585−:10248000E610808EA100425EC3903C0277128AE083
586−:10249000E41024F3C0E4020AC4E610808EA10042D6
587−:1024A000C3908B5E3884C0741F3C02742083CB08B9
588−:1024B0008B462E3B463C770CE888FC7207B024E63E
589−:1024C0000A83CB10895E38C383E3F7EBF7F7C310B9
590−:1024D0000074F5E86DFC72EC8A86C000E638B02323
591−:1024E000E60AEBE08B5E388B462E3B463CE4D87721
592−:1024F0000B24FE80CB12E6D8895E38C30C0180CB5A
593−:1025000002EBF35033DBC1E804250F0F8AD82E8A83
594−:102510008766178ADC2E8AA7661709463E58C3507D
595−:1025200033DBC1E804250F0F8AD82E8A8766178A05
596−:10253000DC2E8AA76617F7D021463E58C38B463E4D
597−:1025400033DB8AD80ADC2E8A877617E62C8AE0E409
598−:102550002A240F0AC4E62A8A86A50084E4750DA8F9
599−:10256000807411247F8886A500E60CC3A8807504BA
600−:102570000C80EBF1C31E6033C933D233F68ED98D94
601−:10258000BEFD00578B0584C074168BD1428BFE4F65
602−:10259000780938A3E40074084F79F788A2E400466C
603−:1025A0005F83C7094183F91072D989B6860089967D
604−:1025B0008400611FC353C7466600008B4664A94070
605−:1025C00000740DB300A980007402B37F889EC1001F
606−:1025D00032DBA90200740380CB40A9004074038061
607−:1025E000CB02A90080740380CB01A9301E74038044
608−:1025F000CBBCA90020740380CB08A904017403801C
609−:10260000CB10A90800740380CB20889EC2005BC356
610−:102610000651575016078DBEC400B91F0033C0AA1B
611−:1026200040E2FC8B86920089868E00898690005855
612−:102630005F5907C3E4D8C0E80453250F008BD82E98
613−:102640008A8766178886A9005AC30886AC00C686A2
614−:10265000BA0001B00EE8EAE9C3AD36A3B413AD3653
615−:10266000A3B613AD36A3B81383E90636F706B6133F
616−:102670000F00C38A4626F74648800074020C108873
617−:1026800086BD0032C0837E1A00750E8B5E4043808B
618−:10269000E3FE3B5E0875020C01837E3A00750D1E59
619−:1026A000C55E148B1F1F85DB75020C02F7463810C0
620−:1026B0000074020C048B5E7AF7C3020074020C08EB
621−:1026C000F7C3040074020C10F7C3080074020C2056
622−:1026D000F7C3400074020C408886BF00C3906A00B4
623−:1026E0001FC60693120D9C0EE8F1EB90B002E6DADD
624−:1026F000F8C333C0E6DAF8C3B001E6D8F8C333C094
625−:10270000E6D8F8C3B0FFE84EFAE8A1FAF8C3AC493E
626−:10271000E8AFFBF8C390AC49E815FDF8C390AC49AD
627−:10272000E867FDF8C390AC49E81FFDF8C390AC49D9
628−:10273000E634F8C3AC49E636F8C3AC493C02771F2F
629−:1027400084C0751DE41424EFE614E412243FE6125D
630−:10275000E416A8047409E8EAF97204B018E60AF865
631−:10276000C38AE0E4140C10E614E4120CC0F6C401B1
632−:102770007402247FE612F8C3AC49E825FDF8C39043
633−:10278000B80040E87DFDE8B4FDE8A8FEB001E8B976
634−:10279000FEF8C390B80040E885FDE8A0FDF8C390BE
635−:1027A000B80010E85DFDE894FDE888FEB008E899FF
636−:1027B000FEF8C390B80010E865FDE880FDF8C3900E
637−:1027C000B80080E83DFDE874FDE868FEB002E879F5
638−:1027D000FEF8C390B80080E845FDE860FDF8C390BE
639−:1027E000B80020E81DFDE854FDE848FEB004E859B3
640−:1027F000FEF8C390B80020E825FDE840FDF8C3903E
641−:10280000AC49E84814E43C24E70AC4E63CF8C39029
642−:10281000B8FC3B89467CE43C0C18E63CF8C3E41267
643−:102820000C02E612F8C3E41224FDEBF6E8B5FCF85E
644−:10283000C390836638FDF8C3AC49A8017406834E83
645−:102840007A20EB0483667ADFE8CBFBF8C3908A86B4
646−:10285000A5000C0224FB8886A500E60C814E26010B
647−:1028600020AC4932E489466E834E48084946F9C394
648−:102870008A86A5000C0224FB8886A500E60C814E02
649−:10288000260120ACB40AF6E4EBD8E8FA13E43C24C1
650−:10289000F80AC4E63CF8C390AD4949894664A901E9
651−:1028A00000741B8BD883E3FA751AA90400740FE433
652−:1028B0003E0C02E63EB83844894662F8C390E43ED6
653−:1028C00024FCEBEFE43E24FCE63EE8E8FCB8AA403A
654−:1028D000EBE6E86EF87205B018E60AF8C390AC496A
655−:1028E000E8CFF9F8C390AC49E8CFF9F8C390E868AD
656−:1028F000FD750632C0E6DAF8C3B002E6DA36A0B4F7
657−:102900001324103410E8160136A1B413A901007481
658−:1029100005E8FCFEEB0EA90200740432C0EB02B025
659−:1029200001E8DEFE36A1B413E8B513E43C24F80A4E
660−:10293000C4E63C36A1B413C1E805250100E8FAFE5F
661−:1029400036A0B5132410E859FB32C0368A26B513D9
662−:10295000F6C4047409FEC0F6C4087402FEC0E8DBC5
663−:10296000FD36A1B613250F00E857F936A1B613C1FD
664−:10297000E804250300E8B8FA36A1B613C1E8052536
665−:102980000200E805FB36A1B613F6C401750432C097
666−:10299000EB0980E402D0ECB0022AC4E8ACFA36F6C7
667−:1029A00006B713407405E883FEEB03E884FE36F6B1
668−:1029B00006B713207405E865FEEB03E868FEF8C36C
669−:1029C000E4120C01E612F8C3E41224FEEBF6E41460
670−:1029D00024F00C05E614E42A24F00C06E62AF8C3D9
671−:1029E000E42A24F0E62AE41424F00C07E614F8C3E1
672−:1029F000AD4949E864F989868E00F8C3AD4949E8D4
673−:102A000058F989869000F8C3834E2604E8A8F7F8A1
674−:102A1000C390836626FBE89EF7F8C390AC4984C058
675−:102A2000750DE41024EFE610808EA10042F8C3E497
676−:102A3000100C10EBF190AC493C02760232C0C0E0C1
677−:102A400004A82074020C0824188AE0E41224E70A7F
678−:102A5000C4E612808EA10044F8C3AC498886C00049
679−:102A6000F8C3AC49E63AF8C3AC4984C07408E41230
680−:102A70000C04E612F8C3E41224FBEBF6AC49E8D6EA
681−:102A8000F67303E827F7F8C3E412A802740424FDE0
682−:102A9000E612B8F000E887FA816626FFF3E857F7F8
683−:102AA000E89AFAF8C390B88000E857FA804E2708F1
684−:102AB000E844F7E887FAF8C3B88000E861FA81666D
685−:102AC00026FFF7E831F7E874FAF8C390B81000E889
686−:102AD00031FA804E2704E81EF7E861FAF8C3B8100F
687−:102AE00000E83BFA816626FFFBE80BF7E84EFAF8B0
688−:102AF000C39033C0AC493C017304B001EB063C0CFD
689−:102B00007602B00C89461CF8C390814E2600208ABC
690−:102B100086A5000C0224FB8886A500E60C834E26C1
691−:102B200001F8C390814E2600408A86A5000C0288D9
692−:102B300086A500E60CF8C390AC4950E805F658723B
693−:102B400008E638B023E60AF8C3F9C390AC50ADE804
694−:102B500082F85AF6C201741239869600740C89867E
695−:102B60009600E6F086E0E6F886E0F6C202741039D8
696−:102B7000869400740A89869400E6E486E0E6EC8395
697−:102B8000E903C390E4168886BC00E8E6FA33DBE488
698−:102B90000CA806740380CB01A810740380CB02A894
699−:102BA00080740380CB04E4128AE024180AD8E4DAA3
700−:102BB000F6C4027407A840750380CB20A8027509EB
701−:102BC000E42AA80F740380CB40F74638020074094A
702−:102BD000E4D8A801750380CB80889EBE00FE86B431
703−:102BE00000B00AE85CE4F8C3AC493C027441771FCA
704−:102BF00050E84FF558720C84C0740AB012E60A808F
705−:102C00004E3801F8C3B011E60A806638FEF8C38B6F
706−:102C1000463825FFF7894638A9000475E68A86A557
707−:102C200000A81075DE0C108886A500E60CF8C3819C
708−:102C30004E3800088A86A500A81074C724EFEBE779
709−:102C4000AD49493C0172113C0C770D508AE0E41407
710−:102C500025F00F0AC4E614588AC484C07402E64200
711−:102C6000F8C3E8CFF9FE86B900B00EE8D4E3F8C3A4
712−:102C70003A86AF00741F8886AF008AE080C206B033
713−:102C8000BFEE80EA028AC4EE8A86A80080C202EE05
714−:102C900080EA068AC4C38B463E85C08A86A5007436
715−:102CA00012A808750D0C088886A50080C202EE8067
716−:102CB000EA02C3A80874FB24F7EBEC8B462684C019
717−:102CC00074168A86A500A802740D24FD8886A500C6
718−:102CD00083C202EE83EA02C38A86A500A80275F7C2
719−:102CE0000C02EBE85283C20CECC0E8048886A90011
720−:102CF0008B5E2680E33FF6C7047407A8087503803F
721−:102D0000CB40F6C7087407A802750380CB80885EA5
722−:102D1000268A86A50084DB7410A802740A24FD8824
723−:102D200086A50083EA0AEE5AC3A80275FA0C02EBE4
724−:102D3000EE90FFFF00480030BA20C41A00180012BD
725−:102D4000000C0006000300028001C000600030009B
726−:102D50001800CD0100018000100010000E000C00D2
727−:102D6000080000000000060004000300020001004B
728−:102D70005251563C1E7747988BF08A82C40032E449
729−:102D800083FE18743D83FE19743E83FE1E772FD197
730−:102D9000E62E8B8C322D3B8E94007422898E94000B
731−:102DA00083C2068A86A8008AE00C80EE83EA068A3F
732−:102DB000C1EE83C2028AC5EE83C2048AC4EE5E59A4
733−:102DC0005AC38B8E8E00EBCE8B8E9000EBC8525187
734−:102DD0003D05007703B805008BC8BA0200B800D0E3
735−:102DE000F7F1050100D1E8595AC38B467AA820743F
736−:102DF0000B80BEC3000375040C01EB0224FE894660
737−:102E00007AC324038886C3008AA6A8008ADC80E4EB
738−:102E1000FC0AC43AC3740B8886A80083C206EE83FA
739−:102E2000EA06E8C5FFC30008183828903C04772359
740−:102E300032E48BD82E8A87262E8AA6A8008ADC80C8
741−:102E4000E4C70AC43AC3740B8886A80083C206EE9E
742−:102E500083EA06C384C07402B0048AA6A8008ADC90
743−:102E600080E4FB0AC43AC3740B8886A80083C206B8
744−:102E7000EE83EA06C3908B5E3884C074343C0274DF
745−:102E80003B8A86AF000C04E8E6FD8B462E3B463CB1
746−:102E9000771BF7C30004751581CB000483C2028A37
747−:102EA00086A50024FA8886A500EE83EA02895E38AA
748−:102EB000C38A86AF0024FBE8B6FDEBF1F7C3100030
749−:102EC00074EFEBED83C20CEC83EA0CC0E804888657
750−:102ED000A900C3908A86A7000C018886A7008BDA18
751−:102EE00080C208EE8BD3F8C38A86A70024FEEBEAE3
752−:102EF0008A86A7000C02EBE28A86A70024FDEBDAA3
753−:102F0000B0FFE852F2E897F2F8C3AC49E861FEF886
754−:102F1000C390AC49E8EBFEF8C390AC49E835FFF844
755−:102F2000C390AC49E805FFF8C3905283C206B0BF16
756−:102F3000EE5283C202AC49EE5A8A86A800EE5AF8D5
757−:102F4000C3905283C206B0BFEE5283C206EBE69036
758−:102F5000AC493C02770D84C0750B8A86AF0024FD16
759−:102F6000E80DFDF8C3508A86AF000C02E801FD5B56
760−:102F700083C2088A86A700F6C301740C24DF888602
761−:102F8000A700EE83EA08F8C30C20EBF2AC49E8E5B1
762−:102F9000FEF8C390B80040E869F5E8F9FCE824FFC2
763−:102FA000B001E8A5F6F8C390B80040E871F5E8E58F
764−:102FB000FCF8C390B80010E849F5E8D9FCE804FF34
765−:102FC000B008E885F6F8C390B80010E851F5E8C5F8
766−:102FD000FCF8C390B80080E829F5E8B9FCE8E4FE05
767−:102FE000B002E865F6F8C390B80080E831F5E8A5CE
768−:102FF000FCF8C390B80020E809F5E899FCE8C4FEA5
769−:10300000B004E845F6F8C390B80020E811F5E8856B
770−:10301000FCF8C390AC49E8340CF8C390B8FC3B8989
771−:10302000467CF8C38A86AF000C80E843FCF8C39066
772−:103030008A86AF00247FEBF28A86AF000C40E82F2F
773−:10304000FCF8C3908A86AF0024BFEBF2AC49A8011C
774−:103050007407834E7A20EB059083667ADFE88AFD59
775−:10306000F8C383C2068A86A8000C408886A800EEB2
776−:1030700083EA06AC4932E489466E834E2601834ECC
777−:103080004808B006E8BBDF4946F9C39083C2068A08
778−:1030900086A8000C408886A800EE83EA06ACB40A35
779−:1030A000F6E4EBD0E8E00BF8C390AD4949894664FB
780−:1030B000A9010074198BD883E3FA750AA904007476
781−:1030C0000DB8E23FEB0BE8ECF4B8AA40EB03B838DC
782−:1030D00044894662F8C38A86AF00A802740A24FDB8
783−:1030E000E88DFB0C02E888FBF8C3AC49E881FCF8EA
784−:1030F000C390AC49E879FCF8C390E85CF57505E845
785−:10310000E6FDF8C3E8CDFD36A0B41324103410E872
786−:10311000260136A1B413A901007405E8FEFEEB0EEA
787−:10312000A90200740432C0EB02B001E8E8FE36A147
788−:10313000B413E8AB0B36A1B413C1E805250100E8D0
789−:103140000CFF36A0B5132410E82BFD32C0368A26BA
790−:10315000B513F6C4047409FEC0F6C4087402FEC0B8
791−:10316000E8EFFD36A1B613250F00E803FC36A1B643
792−:1031700013C1E804250300E888FC36A1B613C1E8B2
793−:1031800005250200E8CDFC36A1B613F6C40175048E
794−:1031900032C0EB0980E402D0ECB0022AC4E88CFC17
795−:1031A00036F606B713407405E88DFEEB03E894FE8F
796−:1031B00036F606B713207405E869FEEB03E870FEE7
797−:1031C000F8C3F8C38B4638A9040075230D040089A1
798−:1031D000463883C2088B462E3B463C7314834E38D8
799−:1031E000108A86A70024FE8886A700EE83EA08F8E6
800−:1031F000C38A86A7000C01EBEE908B4638A9040029
801−:10320000740625FBFF894638F8C3AD4949E8BEFB83
802−:1032100089868E00F8C3AD4949E8B2FB89869000E3
803−:10322000F8C3834E2604E892FAF8C390836626FB1F
804−:10323000E888FAF8C390AC4984C07507808EA30073
805−:1032400004F8C380A6A300FBF8C3AC4983C2083CC2
806−:1032500002760232C03C017412770B8A86A70024E2
807−:10326000EF8886A700EE83EA08F8C38A86A7000CD9
808−:1032700010EBEE905283C206B0BFEE5283C204AC94
809−:1032800049EE5A8A86A800EE5AF8C3905283C206C5
810−:10329000B0BFEE5283C208EBE690AC49F8C3AC492C
811−:1032A000E8B4EE7303E8F7EEF8C38A86AF00247F34
812−:1032B000E8BDF9B8F000E866F2816626FFF3E8237E
813−:1032C000FAE8D2F9F8C3B88000E837F2804E270850
814−:1032D000E811FAE8C0F9F8C3B88000E841F2816665
815−:1032E00026FFF7E8FEF9E8ADF9F8C390B81000E85A
816−:1032F00011F2804E2704E8EBF9E89AF9F8C3B81008
817−:1033000000E8FFF1816626FFFBE8D8F9F8C3AC4975
818−:10331000F8C383C2068A86A8000C408886A800EEFF
819−:1033200083EA06F8C39083C2068A86A80024BFEB0E
820−:10333000EA90AC498AE080C20AEC80EA0AA82074CC
821−:10334000058AC4EEF8C30651578B4E24E3344989ED
822−:103350004E24FF461A8E46028B7E228AC4AA897E9C
823−:10336000228B462624FD89462675298A86A500A833
824−:1033700002752180C2020C028886A500EE80EA0256
825−:10338000EB12C47E003B7E1E760A4F268825897E7E
826−:1033900000FF461A5F5907F8C390ACAD83E9038577
827−:1033A000C074053D00207205B8FFFFEB03C1E003C8
828−:1033B0003B8694007426898694008BD85283C2067B
829−:1033C0008A86A8008AE00C80EE83EA068AC3EE8330
830−:1033D000C2028AC7EE83C2048AC4EE5AF8C3B08818
831−:1033E0008886BC00E88CF233DB8A86A500A80274CC
832−:1033F0000380CB01A805740380CB02A80874038066
833−:10340000CB04F686A70010740380CB108A86A9002F
834−:10341000F6C304750A83C20CEC83EA0CC0E8048A84
835−:10342000E08A86AF00A8807408F6C401750380CBDB
836−:1034300020F686A70002750AF74638040074038058
837−:10344000CB40889EBE00FE86B400B00AE8F3DBF8ED
838−:10345000C3FE86B400B00AE8E8DBF8C3AC493C021E
839−:103460007437771084C07406804E3801F8C38066C4
840−:1034700038FEF8C38B463825FFF7894638A9000483
841−:1034800075EA8A86A500A80175E20C0583C2028848
842−:1034900086A500EE83EA02F8C3814E3800088A86CA
843−:1034A000A500A80174C624FAEBE2AD4949F8C3901F
844−:1034B000E811FAFE86B900B00EE886DBF8C3B0FF6B
845−:1034C000E8BFECF8C39083667AFBB000E873DBF8E2
846−:1034D000C390AC49E853D9721136881E1A0136A040
847−:1034E0008E120AC352BA0001EE5AF8C3AC4932E454
848−:1034F00036A38612050600368B1E88122BD8368915
849−:103500001E8A12F8C390AD8BD8AD83E90403C32B98
850−:103510004676894678F7467A0200740A83667AFD11
851−:10352000B80000E81CDBF8C3061607AC49250F00FD
852−:103530006BC0098DBEFD0003F8AC49250F00AA85BC
853−:10354000C074082BC8518BC8F3A459E827F0E8448D
854−:103550000307F8C333C0AC4936A3B21336A3B01384
855−:10356000F8C383667AEFE82C03F8C390834E7A1091
856−:10357000EBF4E89BF0F8C390AD3C19770E3C19775B
857−:103580000A8BF881E7FF0088A6C400F8C390834E39
858−:103590002620AC4932E4D1E08BD8C1E30203C389D1
859−:1035A000466E834E4804B006E897DA4946F9C39060
860−:1035B000FE86B300B00AE889DAF8C39033C0AC499C
861−:1035C0006BC00A89868A00F8C390AC4932E43D0A90
862−:1035D000007705B80A00EB083D5A007203B85A009C
863−:1035E00051F7D80564008BC88B4644F7E1B96400F5
864−:1035F000F7F189464659F8C3AC49E885EBF8C39022
865−:10360000AC4984C07507816638FFFDF8C3814E3828
866−:103610000002F74638400075088A86A9008886AA05
867−:1036200000F8C3905156E87F0C5E59F8C390FE86AF
868−:10363000B600B00AE80BDAF8C390FE86B700B00A0D
869−:10364000E8FFD9F8C390FE86B800B00AE8F3D9F8CD
870−:10365000C39000905155AC2EA2523633C9AD8BF9B0
871−:10366000C1E705A9010074232E8BAD4400837E08B9
872−:103670000074182E803E523601740960B004E8BB15
873−:103680000C61EB0760B0FBE8EC0C614747D1E875D3
874−:10369000D24183F90472C65D5983E905F746384083
875−:1036A000007405E887EAF8C3E88DEAF8C39036C6E7
876−:1036B00006C81301F8C333C0AC4936A38012AC4925
877−:1036C000362B068812F7D836A38212F8C390DE266E
878−:1036D000DE26EC26F226F826FE2604270E271627DD
879−:1036E0001E2726272E273427BE34C634D2343A2745
880−:1036F000782780279427A027B427C027D427E0273E
881−:10370000F42700281028EC34DE261E2826282C2832
882−:10371000322838284E288A28063528359828BE2889
883−:10372000D228DE28E628543562356C35EE28C029CB
884−:10373000C829CE29E02972357835F029FC298E3543
885−:10374000082A122A1C2AB035362ABC355A2A622A7F
886−:10375000682ACA357C2AF835882AA62AB82ACC2AAB
887−:10376000DE2AF22A00360A2B242B2436382B4C2B47
888−:10377000842B2E363A3646365436E82BAE36402C5D
889−:10378000622CB6367028DE26DE26D42EE82EF02EE9
890−:10379000F82E002F0A2F122F1A2F222F2A2F422FF6
891−:1037A000BE34C634D234502F8C2F942FA82FB42F70
892−:1037B000C82FD42FE82FF42F083014301C30EC34ED
893−:1037C000DE2624303030383044304C306230A43083
894−:1037D00006352835AA30CE30D630EA30F2305435AE
895−:1037E00062356C35FA30C231C231C431FA317235CA
896−:1037F00078350A3216328E3522322C323632B035D6
897−:103800004A32BC3574328C329A32CA359E32F8351F
898−:10381000AA32C632D832EC32FE320E3300361233C0
899−:103820002633243632339A33DE332E363A36463652
900−:1038300054365C34AE36AA34B034B6368C30E32815
901−:10384000F7463840007532E8E3E833C0AC493D5BE9
902−:103850000077198BD8D1E32EFF97CE36720B85C92E
903−:1038600075E88B4648E81A0CC34E41C36A001FC670
904−:103870000693120C9C0EE863DAE8BCE833C0AC494E
905−:103880003D5B0077E78BD8D1E32EFF97863772D95F
906−:1038900085C975E8C3F7467A1000750F83BE8400AA
907−:1038A000007408B8483A89868000C381BE8000EC65
908−:1038B0003C74F783BE8800007505B8EC3CEBE7F775
909−:1038C000467A080075401E608B8E88003B4E7477E8
910−:1038D000333B4E78772EC47E108BDF26033D47475F
911−:1038E00033C08ED88DB6F4008BC1F7467A010075CF
912−:1038F0001DF3A4260107294678014676294674B0AF
913−:103900000CE83ED7611FC78688000000EBACE3E3FC
914−:103910005090AC247FAAE2FA58EBD8908B8E8800A6
915−:10392000E3468B9E8A0085DB743EBA50FFED2B8602
916−:1039300082003BC372378DB6F400C47E108BDF2645
917−:10394000033D47478BC1161FF7467A01007524F3E4
918−:10395000A4260107294678014676294674C7868839
919−:10396000000000B00CE8DAD683667AF7C3B000E84E
920−:10397000D0D6C3E3DC50AC247FAAE2FA58EBD29055
921−:103980001E6033C08ED88DB6FD008B8688008B9666
922−:1039900084003A0475108BDE468BC88DBEF400F3AC
923−:1039A000A674668BF39083C6094A75E68DB6FD0052
924−:1039B0008B9684003A0473108BDE468BC88DBEF460
925−:1039C00000F3A674768BF39083C6094A75E68DB62C
926−:1039D000F400ACF7467A01007402247F1EC55E1025
927−:1039E0008B37884002468937FF4E78FF4676FF4E78
928−:1039F000741F8B8E880049898E8800E3438DB6F44E
929−:103A0000008BFE46F3A4E97DFFC576108B1C85DB99
930−:103A1000740803F383C60383E6FE8B8684002BC2FF
931−:103A2000B48089044646C7040000897610834E7A24
932−:103A300004C78688000000611FF9C333C0611FC33B
933−:103A4000B08084C0611FC3908B4E782B8E88007627
934−:103A50002789B68C008B5E743BCB72028BCB3BC844
935−:103A600072028BC88BC1E34433D28EC28BD183BE2A
936−:103A70008800007406E98E0033C0C38B5E10031FFC
937−:103A8000434352F7467A0100752AAC8DBEE4008BA1
938−:103A90008E8600F2AE74348807434A75ED588B5E0B
939−:103AA0001001072946780146762946748BC62B8675
940−:103AB0008C00C390AC8DBEE4008B8E8600F2AE7499
941−:103AC0000A247F8807434A75EBEBD28886F400C747
942−:103AD0008688000100582BC2740E8B5E10010729E6
943−:103AE000467801467629467440E894FE72BE4A75CF
944−:103AF0001583BE8A000074B4BA50FFED8986820037
945−:103B0000834E7A08EBA68DBEF40003BE8800A4FFA6
946−:103B1000868800E86AFE729479064A748FE95BFF32
947−:103B20004A74CEEBE19050E811CC8B467439467262
948−:103B300074271E565133C9C5760CAD74107809032D
949−:103B4000C805010024FE03F03B761076ED294E7681
950−:103B5000014E78E837CC595E1F58C390C47E1026BA
951−:103B60008B1D83C30326891D4B03FBAB91AAB803AE
952−:103B700000294678014676294674C390C47E1026F3
953−:103B80008B1D4326891D4303FBAAFF4E78FF467613
954−:103B9000FF4E74C3E8E5FFC38081848582838687F6
955−:103BA00050538ADC83E30ED1EB2E8A87983B08863C
956−:103BB000B000FE86B100B00AE887D45B58C3508AD3
957−:103BC000C8B8FF00E895FF58C3908A86BB00E8ABF1
958−:103BD000FFC3E8CBFFE8F2FFC390E8C3FFE8B4FF00
959−:103BE000C39033C0E895FFC3B8FF0033C9E86CFF4A
960−:103BF000C390B8FF01B110E862FFC390C3FC3BE281
961−:103C00003BF23BF23BFC3BE23BE83BE83BFC3BE26C
962−:103C10003BE83BE83BFC3BE23BE23BE23B00100085
963−:103C20000000100000001000000010000000100054
964−:103C3000000010000000100000001000000008004C
965−:103C40000000080000000800000008000051538B2D
966−:103C50004E3881E1FFEEA804740481C900018AE0B6
967−:103C600080E4032418D0E40AC433DB8AD82E8B877F
968−:103C7000FD3B89467C2E0B8F1D3C894E38D1EB2EA7
969−:103C80008AA73D3C5B59C3AC493C01721D74203C82
970−:103C900003722374283C08722B74303C20723774F2
971−:103CA0003ABBDA3B32E4895E7EC3BBA03BEBF5BB9B
972−:103CB000943BB401EBF0BBFC3BB402EBE9BBE23B51
973−:103CC000B403EBE2BBBE3BB404EBDBBBCA3BAC4989
974−:103CD0008886BB00EBCEBBD23BEBF3BBFC3BEBC41B
975−:103CE000A9040075D1A9080075DAEBD18B5E748B3D
976−:103CF0004E783BCB72028BCB3BC872028BC88BC118
977−:103D0000E32CC47E108BDF26033D4747F7467A013C
978−:103D100000751CF7C70100740249A4D1E9F3A5732B
979−:103D200001A4260107294678014676294674C35026
980−:103D300053BB7F7FF7C70100740549AC22C3AAD1EA
981−:103D4000E9E31D9CAD23C3AB497414AD23C3AB4958
982−:103D5000740DAD23C3AB497406AD23C3ABE2E59D3F
983−:103D60007304AC22C3AB5B58EBB8E8CEC98B5E38AA
984−:103D7000F7C310047501C3F7C340007405E8B8E346
985−:103D8000EB03E8A8E3816638EFFBF6C310743CF65A
986−:103D9000C3027406E4D80C01E6D8F6C30474118398
987−:103DA000C2088A86A7000C01EE8886A70083EA086D
988−:103DB000F6C308740FE88BE3720A8A86C000E638FF
989−:103DC000B023E60AF7C300047501C3F7C300087502
990−:103DD000F98A86A500F6C340750DA81075EC0C1085
991−:103DE0008886A500E60CC3A80175DF83C2020C0516
992−:103DF000EE8886A500C3B000E847D2EB0FB002E81A
993−:103E0000900EEB08836638DF834E7A0233C08ED87B
994−:103E1000FAA0921240A292123C05721EC60692129D
995−:103E200000FBB001E86B0EFAA1260123062A01A8C7
996−:103E3000017507E8E207E8610990B000E837D2FBB6
997−:103E400085ED74B9FAF7467A460075C08B46783D21
998−:103E50000A0072B08B4E7483F950729A836638DF11
999−:103E6000C576148B463A85C07558AD85C0750FE888
1000−:103E7000F8FEF7467A08007493E8A0FAEB8E3B76DA
1001−:103E8000047621B90200394E2E7705C7462E000070
1002−:103E9000568B762C897604C7040000464689762C1A
1003−:103EA000294E2E5E85C07917F6C4107405FF567C26
1004−:103EB000EB03FF567E897614B00CE885D1EB86893A
1005−:103EC000463AFF96800029463A897614B00CE8718C
1006−:103ED000D1E971FF0000000000000000080410029A
1007−:103EE00001200000000000000000000000000000B1
1008−:103EF00000000000808080808080808080808080C2
1009−:103F000080808080808080808080808080808080B1
1010−:103F100080808080808080808080808080808080A1
1011−:103F20008080808080808080808080808080808091
1012−:103F30008080808080C0C0C0C0C0C0C0C0C0C0C0C1
1013−:103F4000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C080B1
1014−:103F500080808000808080808080808080808080E1
1015−:103F60008080808080808080808080808080808051
1016−:103F70008080808080808080808080808080808041
1017−:103F80008080808080808080808080808080808031
1018−:103F90008080808080808080808080808080808021
1019−:103FA0008080808080808080808080808080808011
1020−:103FB0008080808080808080808080808080808001
1021−:103FC00080808080808080808080808080808080F1
1022−:103FD000808080804E417841D041F44106421842B1
1023−:103FE000C3908E46028B7E22897E6C806627FD8B75
1024−:103FF000562483FA0472E983EA028BD93BCA76021B
1025−:104000008BCAB00A57518BFEF2AE8BC1595F751E39
1026−:1040100050402BC874062BD12BD9F3A4594B4A4AD4
1027−:10402000B00DAAA43BCA76028BCAE313EBD42BD9FA
1028−:10403000F7C601007402A449D1E9F3A57301A4896C
1029−:104040007E222B7E6C297E24017E1A8BCB807E26DD
1030−:10405000027405806626FDC360B0FDE8180361C3E5
1031−:10406000C390E87C0272F990834E26208B466A89C1
1032−:10407000466E8B46480D040025BFFF894648B006B2
1033−:10408000E8BFCFC3897E222B7E6C017E1A297E2455
1034−:10409000807E26027405836626FDC360B0FDE8D5E8
1035−:1040A0000261C3908ABEC200EB24F7464840007507
1036−:1040B000B18E46028B7E22897E6C8B562483EA0A5F
1037−:1040C000789E03D7806627FD33C08ABEC200E3B462
1038−:1040D0003BFA77B0AC49932E8A87D43E9322DF75A2
1039−:1040E00017AAE3A03BFA779CAC49932E8A87D43E6B
1040−:1040F0009322DF7503AAEBD6F6C37F7505FF4666EC
1041−:10410000EBDFF6C340750C8BD883EB08D1E32EFFB1
1042−:10411000A7D43FFF46662C20EBC785C0742C894688
1043−:104120006A834E4840897E222B7E6C017E1A297E4E
1044−:1041300024807E26027408836626FDE8A301C360FE
1045−:10414000B0FDE8310261E89801C3E957FF908B5E4A
1046−:10415000664B7803895E66AA8B5E64F7C3002075A0
1047−:1041600003E940FFF7C3400074088A86C100AAE94A
1048−:1041700032FFB83200EBA3908B5E66895E6883C322
1049−:104180000880E3F8895E668B5E6481E3001881FB3A
1050−:104190000018742DAA85DB7425F746644000751855
1051−:1041A00081FB0010740C8B46662B4668C1E004E965
1052−:1041B00068FFB86400E962FF8A86C100AAAAE9E341
1053−:1041C000FE518B4E662B4E68B020F3AA59E9D4FEFF
1054−:1041D0008B5E66895E688B5E64F7C324007410C7CB
1055−:1041E00046660000F7C304007405B00DAAB00AAA21
1056−:1041F000EB489090AAF7466400407406B8D007E9EF
1057−:1042000018FFE99FFE90AAF7466400807406B8D0B4
1058−:1042100007E906FFE98DFE908B5E66895E6885DBA7
1059−:10422000750C8B5E64F7C310007406E976FE8B5E36
1060−:1042300064F7C308007427B00AAAF7C32000751FEB
1061−:10424000F7C300017503E95BFEF7C340007506B8CC
1062−:104250006400E9C5FE8A86C100AAAAE946FEAAC78B
1063−:1042600046660000F7C3000674F1F7C340007419F6
1064−:104270008A86C10081E3000681FB00047206760293
1065−:10428000AAAAAAAAAAAAE91BFE81E3000681FB004A
1066−:1042900004720E7606B89600E97FFEB86400E979EC
1067−:1042A000FE8B4668E973FE90368B0EDA1283F93284
1068−:1042B000731D1E0633C08ED88EC08D764CBFDC12A7
1069−:1042C00003F9A5A5A583C106890EDA12071FC3B09D
1070−:1042D00008E86ECDC390836648FEE893C4E8C8FF43
1071−:1042E000C3F6462702750F9CFA837E1A0074098074
1072−:1042F0004E27019DF9C3F8C35052F7463840007469
1073−:104300001DE834DE83C20AECA840752783EA088AD8
1074−:1043100086A5000C028886A500EE5A58EBD1E80C61
1075−:10432000DE8A86A50024FB0C028886A500E60C5ACE
1076−:1043300058EBBC804E27025A589DF8C30846269C6D
1077−:10434000FA8A8EA500F7463840007514F6C1067447
1078−:1043500023E8D9DD8AC124F98886A500E60C9DC32F
1079−:10436000F6C102740FE8D0DD83C2028AC124FD8841
1080−:1043700086A500EE9DC38B5E2622C3884626740167
1081−:10438000C3806627FD9CFA8A8EA500F74638400058
1082−:104390007516F6C104750FE893DD8AC124FD0C047F
1083−:1043A0008886A500E60C9DC3F6C10275F9E888DD94
1084−:1043B00083C20AECA820750E83EA088AC10C028821
1085−:1043C00086A500EE9DC383EA0A33C98A4E1C8B463C
1086−:1043D0001A3BC8731B014E2A2BC189461A1EC5768B
1087−:1043E00000F36E1F89760083C2028A86A500EBCD9A
1088−:1043F00085C0741201462A8BC81EC57600F36E1F55
1089−:10440000897600894E1AF6C701752380CB02895E32
1090−:1044100026E808C383C2028A86A50024FDEE8886AA
1091−:10442000A500F6C7107505B002E816CC9DC383C27F
1092−:10443000028A86A500EB86908BD18B46243BC876FA
1093−:10444000028BC82BD12BC18BD9E322806627FD8E2E
1094−:1044500046028B7E22F7C601007402A449D1E9F31B
1095−:10446000A57301A4897E22894624015E1A8BCA8025
1096−:104470007E26027405806626FDC360B0FDE8F6FE68
1097−:1044800061C350E40A84C0750A8686A10084C074A2
1098−:104490000AE60A580C20894648F9C35824DF8946A1
1099−:1044A00048F8C390FBB002E8E807FAE82E01FBB039
1100−:1044B00001E8DE07FAB002E8BCCBFB85ED74E5FA53
1101−:1044C0008E5E0AFB90FA8B46488B7640A88C75DE90
1102−:1044D000A820741A50E855DC58E8A6FF7310B00203
1103−:1044E000E85FCBEBC99025FF008BC8EB3690A801A5
1104−:1044F00075224683E6FE3B76087479AD8AFCB3F0FC
1105−:1045000022FB3AFB74E03ABEA000742EE8D2FD73A1
1106−:1045100077EB9B908AE024FC8846488B4E4AF6C491
1107−:1045200002741DE8BBFD7286E813F3897640E393BD
1108−:10453000834E4803894E4AE974FF25FF0F8BC890CC
1109−:104540008B86980085C0741A518A8EA000C0E90439
1110−:10455000BA0100D3E25923C2740803F1897640E915
1111−:1045600061FFFF5662E3F5834E4801894E4A897622
1112−:1045700040E93AFF814E2600108B46503B46467775
1113−:1045800003E852FDE927FF9088BEA000EBAC0A06C5
1114−:1045900090128AE0BA0601B004EEEC84C07512B045
1115−:1045A00004EE8AC4EE32E4A8807406C706841200C2
1116−:1045B0000088269012C30A0690128AE0BA0601EC1F
1117−:1045C000A80175EDBA08018AC4EE32E4A88074E14E
1118−:1045D000C7068412000088269012C39036F706247E
1119−:1045E0000101007530368B0EDA1280F936732633EE
1120−:1045F000C08EC08ED8BFDC1203F9B008E877CA8538
1121−:10460000ED740E8D764CA5A5A580C10680F9367295
1122−:10461000E9890EDA12C3C390F7062601010075F688
1123−:104620008B0E201385C975EE33C08EC08ED8BF2483
1124−:1046300013B93600B00AE83DCA85ED7506E91201E6
1125−:10464000E90A0133DB8A464C8AA6B300FECC780E19
1126−:1046500088A6B3000ADCB40AAB83E90276E28AA634
1127−:10466000B200FECC780E88A6B2000ADCB408AB8398
1128−:10467000E90276CC8AA6B100FECC78188ABEB000DA
1129−:10468000750488A6B00088A6B1000ADC8AE7AB836F
1130−:10469000E90276AC8AA6B400FECC781F88A6B400E6
1131−:1046A0000ADCB40BAB8A86BC008AA6BD00AB8B8645
1132−:1046B000BE00AB83E90676888A464C8AA6B600FE21
1133−:1046C000CC781988A6B6000ADCB40CABE8DBCBAB1F
1134−:1046D0008B462AAB83E90676748A464C8AA6B700D5
1135−:1046E000FECC781988A6B7000ADCB40DABE8BACBCB
1136−:1046F000AB8B4634AB83E90676538A464C8AA6B820
1137−:1047000000FECC781988A6B8000ADCB40EABA15024
1138−:1047100012ABA15212AB83E90676328A464C8AA6C6
1139−:10472000B500FECC781888A6B5000ADCB40FAB8BB8
1140−:10473000869A00AB8B869C00AB83E906760F84DB00
1141−:104740007503E9EFFEB00AE8F8C8E9E7FEB00AE849
1142−:10475000F0C8F7D983C1368BC10D800086C4A3226F
1143−:10476000134141890E2013C3A184122BC17211A3DE
1144−:104770008412BE2213D1E9F36F90890E2013F8C37F
1145−:10478000F9C3C381EF6A1374F98BC70D800086C427
1146−:10479000A368134747893E6613C3F7062A01010041
1147−:1047A00075E08B0E6613E30780F92077D54949330E
1148−:1047B000C08EC08ED8BF6A138BF703F983C6343B13
1149−:1047C000FE77C0B00EE8AEC885ED74B78A464C8A55
1150−:1047D000B6B900FECE781588B6B9008AA6A90080C1
1151−:1047E000CCC0AB84F67405B00EE856C88AB6BA00E1
1152−:1047F000FECE78CB8A9EA9008ABEAB008A563F8A3D
1153−:10480000F332F70AB6AC00C686AC000022F2744B55
1154−:10481000F6C608740FB402F6C3087502B403AB8081
1155−:10482000E6F77437F6C601740FB400F6C3017502DB
1156−:10483000B401AB80E6FE7423F6C602740FB404F62E
1157−:10484000C3027502B405AB80E6FD740FF6C60474AE
1158−:104850000AB406F6C3047502B407ABC686BA0000F4
1159−:10486000889EAB00E958FF90A184122BC17211A35E
1160−:104870008412BE6813D1E9F36F90890E6613F8C3F2
1161−:10488000F9C3A1841241412BC17223A384128BC1AD
1162−:10489000484832E40C8086C4EF9090909090BEDC43
1163−:1048A000124949D1E9F36F90890EDA12F8C3F9C3BE
1164−:1048B0008AC88A464CB40183EB06EF9090909090A2
1165−:1048C000B80100EF90909090908AC1EF90909090F6
1166−:1048D00090E99700E9AC0033C08ED8891E8412C3DA
1167−:1048E000368B1E8412FB90FAB00CE889C785ED74F4
1168−:1048F000E6C5760C83FB1472DBFB90FAAD85C078BD
1169−:10490000AF74E28BFE03F8368B0E86123BC1770242
1170−:104910008BC883EB043BD977028BCB33C08A464CE0
1171−:10492000EF90909090908BC1EF90909090904180FC
1172−:10493000E1FE2BD951D1E9F36F90598BC74024FE8A
1173−:104940003BC674272BFE4E4E538B5E103BF3721307
1174−:10495000031F83C30380E3FEC7070000836E740256
1175−:10496000895E105B893C89760CEB8989760C3976F7
1176−:104970001077817208833C007403E977FFE80DBE6D
1177−:10498000E962FF36891E8412B00CE8B5C633C08ECA
1178−:10499000D8C3A184123D10007277BA04013B068887
1179−:1049A000127506C7067E1200008B0EDA12E30BE8C2
1180−:1049B000D0FE7257C7067E12FF7F8B0E2013E30BCB
1181−:1049C000E8A5FD7246C7067E12FF7F8B0E6613E3D5
1182−:1049D0000BE894FE7235C7067E12FF7FA12801A95D
1183−:1049E00001007503E8F9FE803E8D1200751DA1845B
1184−:1049F000123D200076153B0682127609A17E123BFD
1185−:104A0000068012720C800E901280C3B080FF167C5C
1186−:104A100012C3800E901240C36A001FC6069312177D
1187−:104A20009C0EE8B7C86A001FC6069312209C0EE8C9
1188−:104A3000AAC86A001FC6069312169C0EE89DC8906D
1189−:104A4000BA0601ECA82075CAFB90FABA0401ED90F1
1190−:104A5000909090903A06941277BE33DB8AD8D1E3D7
1191−:104A60002E8BAF4400C47E0885FF74B9F6C4C075B0
1192−:104A70005532C0C1E00280E4F08BF0ED9090909050
1193−:104A80009085C074BB8BC84180E1FE0BC68B5E5025
1194−:104A90004B4B2BD9789CAB8BC1404001464ED1E9A2
1195−:104AA000F36D90895E50897E088B462680E4EF89FD
1196−:104AB0004626F6C401750CF746480C007505B00291
1197−:104AC000E87FC5E97AFF86C48BC883E13F4180E176
1198−:104AD000FEE30A3C807209243FB4F0EBB0E960FFCA
1199−:104AE000253F0033FF8EC7BF96128BF7D1E9F36DD8
1200−:104AF000908BC8E848EDE947FF906A001FC606930F
1201−:104B0000121B9C0EE8D5C790601E0633C08ED88E4F
1202−:104B1000C0BA0601ECA80474E1B006EEECA28C1257
1203−:104B2000A8407411A18812A38412C6068D1200E851
1204−:104B300060FEA08C12A8807403E804FFB80080BA5D
1205−:104B400022FFEF071F61CF906A001FC60693121B5A
1206−:104B50009C0EE887C790601E0633C08ED88EC0BA00
1207−:104B60000601ECA80474E1BA0801ECA28C12A8407A
1208−:104B70007411A18812A38412C6068D1200E812FED9
1209−:104B8000A08C12A8807403E8B6FEB80080BA22FF99
1210−:104B9000EF071F61CF90EE86E0EE86E0EC86E0EC5A
1211−:104BA00086E080E1FEF36C9080E1FEF36E900500FC
1212−:104BB0007547A84B05007548A84B0500A348A84BAE
1213−:104BC00005003549A84B06009848964B0600BA48A0
1214−:104BD000964B0600C348964B0600CB48964B060002
1215−:104BE0002049964B06002849964B06004E4A9C4B9E
1216−:104BF00006007B4A9C4B05009E4AA24B0500EC4AEE
1217−:104C0000A24B00001E06833E4412007409A0060158
1218−:104C100024303C30741A8CC88ED88EC0BBAE4B8BFF
1219−:104C20000FE30D8B7F028B7704F3A483C306EBEFB6
1220−:104C3000071FC39033C0A33E01B90C01BE40018BD6
1221−:104C4000FE81C6B40F89048BC62BF13BC777F6A350
1222−:104C50003C01C3901E0660368B2E3E018B5E003BEE
1223−:104C6000EB742B8B7602891C89770236A13C018973
1224−:104C7000460036892E3C018BEBFF4E0674088B6E86
1225−:104C800000FF4E0675F836892E3E018B66046107DB
1226−:104C90001FC31E0660368B2E3E0198894606896624
1227−:104CA000043B6E0074108B6E00FF4E0675F836895B
1228−:104CB0002E3E018B660461071FC3C3901E06609CD5
1229−:104CC000FA33ED8EDD8B2E3C0185ED743D8B4E006D
1230−:104CD000890E3C018BCC8DA60A01561E06608966A2
1231−:104CE00004C746080F1AC7460601008B1E3E018501
1232−:104CF000DB741D8BC58707894600895E028BD889C6
1233−:104D00006F028BE19D61071FF8C39D61071FF9C307
1234−:104D1000892E3E01896E00896E0287E19D8BE1EB51
1235−:104D2000E4000D0A5465726D696E616C73207375D1
1236−:104D300070706F727465643A0D0A312920414E53C8
1237−:104D40004920636F6D70617469626C650D0A322968
1238−:104D500020577973652033300D0A506C6561736597
1239−:104D60002073656C6563743A20000D0A636F646597
1240−:104D7000207365676D656E743D000D0A4D6F6E6939
1241−:104D8000746F722076322E350A0D0A3E000D0A50DD
1242−:104D90006172646F6E3F000D0A4E6F206164647231
1243−:104DA00065737320737065636966696564000D0AD5
1244−:104DB0003A000D0A004C6F633D000D0A4641544114
1245−:104DC0004C204552524F523D000D0A4D6F6E697492
1246−:104DD0006F7220636F6D6D616E64733A2D0D0A20E2
1247−:104DE0002020442C645B5B787878783A5D7878781A
1248−:104DF000785D202D2064756D70206D656D6F727902
1249−:104E00000D0A2020204C2C6C5B5B787878783A5D1A
1250−:104E1000787878785D202D2064756D702073696EC8
1251−:104E2000676C65206C696E650D0A202020452C6535
1252−:104E30005B5B787878783A5D787878785D202D209B
1253−:104E400065646974206D656D6F72790D0A2020208C
1254−:104E5000462C665B5B78787878205D787878785D2A
1255−:104E6000202D2066696C6C206D656D6F72792070E5
1256−:104E70006172616772617068730D0A202020495B5E
1257−:104E8000787878785D202020202020202020202D78
1258−:104E900020776F726420696E7075742066726F6D12
1259−:104EA00020706F72740D0A202020695B7878787802
1260−:104EB0005D202020202020202020202D20627974B9
1261−:104EC0006520696E7075742066726F6D20706F72E8
1262−:104ED000740D0A2020204F78787878207878202068
1263−:104EE000202020202020202D206F757470757420C4
1264−:104EF000776F726420746F20706F72740D0A2020B7
1265−:104F0000206F787878782078782020202020202042
1266−:104F100020202D206F75747075742062797465205F
1267−:104F2000746F20706F72740D0A202020475B5B78CD
1268−:104F30007878783A5D787878785D2020202D206721
1269−:104F40006F746F20616464726573730D0A20202092
1270−:104F5000575B5B787878783A5D787878785D202050
1271−:104F6000202D207761746368206120776F72640D53
1272−:104F70000A20202043202020202020202020202024
1273−:104F800020202020202D20696E7465727275707447
1274−:104F900073206F66660D0A202020532020202020D9
1275−:104FA00020202020202020202020202D20696E7409
1276−:104FB00065727275707473206F6E0D0A20202073F5
1277−:104FC00020202020202020202020202020202020E1
1278−:104FD0002D2073696E676C6520737465700D0A20EF
1279−:104FE000202042787878782020202020202020203F
1280−:104FF0002020202D20627265616B706F696E7420B5
1281−:105000007365740D0A20202062202020202020209B
1282−:105010002020202020202020202D20627265616B1E
1283−:10502000706F696E7420636C6561720D0A202020B8
1284−:10503000522020202020202020202020202020203E
1285−:10504000202D207265737461727420627265616BC9
1286−:10505000706F696E740D0A2020207220202020209D
1287−:1050600020202020202020202020202D2072656755
1288−:105070006973746572732061742062726B70740D51
1289−:105080000A202020582C78206E202020202020204C
1290−:1050900020202020202D206578616D696E652063B9
1291−:1050A00068616E6E656C206E0D0A202020482C3FD2
1292−:1050B00020202020202020202020202020202D20E3
1293−:1050C00074686973206D657373616765001B5B327B
1294−:1050D0004A1B5B313B3148414E5349205465726D48
1295−:1050E000696E616C0D0A0A001B5B4B001B5B4A007A
1296−:1050F0001B5B324A1B5B313B3148001B5B44201B6E
1297−:105100005B44001B5B313B373248001B5B003B00BC
1298−:1051100048001B5B73001B5B75001B7A2B0B7F1B0E
1299−:105120007A2E0C7F1B7A2D087F1B7A2C0A7F1B7A24
1300−:1051300022087F1A57797365203330205465726DC9
1301−:10514000696E616C0D0A001B54001B59001A001E89
1302−:105150000008200800001B3D0000001B46000D0059
1303−:105160003F4464456546664767486849694F6F43F1
1304−:1051700063537342625272577758784C6C3C60D4D8
1305−:1051800057D45750585058D659D659B459B4593C99
1306−:10519000603C606C57485726570657905790579871
1307−:1051A00057485F0C5F585F335F405FA057A057FEC2
1308−:1051B00059FE59DC57DC5788619861C061CC61D8D1
1309−:1051C00061F66102622262F8564A625862605920B2
1310−:1051D00020666C6167733D00202061783D002020CF
1311−:1051E00062783D00202063783D00202064783D00F7
1312−:1051F000202063733D00202064733D0020206573F0
1313−:105200003D00202073733D00202064693D00202074
1314−:1052100073693D00202062703D00202073703D00C6
1315−:10522000202069703D00206368616E656C3D002040
1316−:105230002020207365673D002074695F7374723DA0
1317−:10524000002074695F746F733D002074695F6D6145
1318−:10525000783D002074695F6261733D002074695F6E
1319−:1052600073697A3D002074695F7374663D00207431
1320−:10527000695F726F6F3D002074695F666C673D0007
1321−:105280002074695F746F743D002072695F70636E93
1322−:105290003D002072695F7374723D002072695F7314
1323−:1052A00074663D002072695F726F6F3D0020726905
1324−:1052B0005F6261733D002072695F73697A3D00200F
1325−:1052C00072695F746F743D002072695F6D696E3D35
1326−:1052D000002072695F666C673D002072695F746FC1
1327−:1052E000733D002072695F7468723D002074685FCE
1328−:1052F0007374663D002074685F7374723D0020749F
1329−:10530000685F6261733D002074685F73697A3D0075
1330−:105310002074685F7472673D002074685F666C6714
1331−:105320003D002074685F636E743D002072685F7397
1332−:1053300074723D002072685F7374663D002072686D
1333−:105340005F6261733D002072685F73697A3D00207F
1334−:1053500072685F7370613D002072685F61736F3DBA
1335−:10536000002072685F726F6F3D002072685F666C2C
1336−:10537000673D00206D5F636172653D002070745F62
1337−:10538000666C6F3D002061735F666C6F3D0020723C
1338−:105390006D5F666C6F3D00202020715F696E3D007F
1339−:1053A0002020715F6F75743D0020715F6472616EC3
1340−:1053B0003D002020715F74696D3D00202020715FE9
1341−:1053C00066633D0020715F737461743D0020715FFE
1342−:1053D000646174613D0020715F6D6F646D3D0020FC
1343−:1053E00068616E645F6F3D002068616E645F623D5E
1344−:1053F000002068616E645F653D002068616E645FD7
1345−:10540000693D0020206F706F73743D002020746927
1346−:105410006D656F3D0020637573746D313D002063D1
1347−:105420007573746D323D0020637573746D643D0057
1348−:10543000207478726174653D0020727872617465C1
1349−:105440003D002020635F6D61703D0020635F6164FB
1350−:1054500064723D0020635F616973723D0020635F89
1351−:10546000787461673D0020635F646566723D00206B
1352−:10547000635F666C73683D002074786D6178733D7E
1353−:10548000002072695F656D733D002020635F6C735F
1354−:10549000723D002020635F6965723D002020635FDC
1355−:1054A0006663723D002020635F6D63723D002020C3
1356−:1054B000635F6C63723D002020635F6473733D0023
1357−:1054C00020635F647373693D0020635F647373726C
1358−:1054D0003D002020635F6973723D002020635F639D
1359−:1054E00061723D002020635F6566723D0020635F4E
1360−:1054F000657273743D0020635F65636E743D0020C8
1361−:10550000635F62726B633D0020635F626F6B633D3C
1362−:105510000020635F7265706C3D0020635F6363739E
1363−:10552000723D0020635F737474313D0020635F73CC
1364−:105530007474323D002BC08ED88EC0E8C200E8E5FE
1365−:1055400000FABF8400C705DC568C4D02BF0C00C7B3
1366−:10555000056E5E8C4D02BF0400C705BA5E8C4D021D
1367−:10556000E8F10090E84901E81600F490E8E500BE93
1368−:10557000BA4DE8090CA09312E85D0CE8C209EBE40F
1369−:10558000E8D50CE8C40C0AC074F68B1EF8793C0D03
1370−:10559000742E3C0874173C7F741383FB207FE188D2
1371−:1055A00087D67943891EF879E8770CEBD30BDB7447
1372−:1055B000CF4B891EF8798B36167AE8C10BEBC19078
1373−:1055C000E80200EBBBC687D679000BDB741EA0D6C1
1374−:1055D00079BF6051B91D008BD9060E07F2AE077571
1375−:1055E00017412BD9D1E32EFF977D519033C0A3F8FB
1376−:1055F00079BE894DE8870BC3BE8D4DE8800BEBEC7F
1377−:10560000BA0002B093EEB055EEBA1002B093EEB00D
1378−:10561000AAEEBA0002EC3C557508BA1002EC3CAA9E
1379−:105620007403E82FF6C3BA0402B01AEEB020EEB04D
1380−:1056300030EEB040EEB080EEBA0002B013EEB0072C
1381−:10564000EEBA0802B080EEBA0202B0BBEEBA0402B3
1382−:10565000B005EEC3C606CA1301C706F8790000C636
1383−:1056600006F67901C706D0790000C706D279000096
1384−:10567000C706D4790000C706FA790000C706FC798E
1385−:105680000000C706FE790000C706007A0000C706C2
1386−:10569000027ACE598C0E047AC706067A0000C70635
1387−:1056A000277A0000C606297A00C6062A7A00C39027
1388−:1056B000BE224DE8C80AE83F002C313C0177F7E8EC
1389−:1056C00081098B360C7AE8B50ABE6A4DE8AF0A0E3E
1390−:1056D00058E8F80ABE7A4DE8A40AC39060D1E38383
1391−:1056E000FB1873111EBA00008EDA2EFF97B7518B8C
1392−:1056F000EC8946101F61CF90E84F0B0AC07505E892
1393−:10570000560BEBF4C390833EF879017416BED7793B
1394−:10571000E8310A8BD0AC3C2C74043C207505E8239E
1395−:105720000AEEC3E9D2FE833EF8790174F6BED7795A
1396−:10573000E8110A8BD0AC3C2C74083C207404E9B707
1397−:10574000FE90E8FF09EFC3908B16067A833EF87946
1398−:1057500001740BBED779E8EB098BD0A3067AB02091
1399−:10576000E8570B8B16067AECE86F0BC38B16067A9C
1400−:10577000833EF87901740BBED779E8C7098BD0A3B3
1401−:10578000067AB020E8330B8B16067AEDE8670BC378
1402−:10579000FAC606F67900C390C606F67901FBC390F7
1403−:1057A00006E85809B020E8110B268B05E8470BB036
1404−:1057B00008E8060BE8030BE8000BE8FD0AB8010057
1405−:1057C000E8CFF4BA0202EC24017502EBDCBA06025F
1406−:1057D000EC07C390C706087A1000EB06C706087AE4
1407−:1057E0000100068E06FC798B3EFA79E80E09E80B7B
1408−:1057F00000893EFA798C06FC7907C390BEB24DE869
1409−:105800007C098B16087A52E82A09E80F0AE80C0A84
1410−:1058100033DBB9100090268A01E8BC09E8FD094392
1411−:10582000E2F4E8F709E8F40933DBB9100090268ABE
1412−:10583000013C2072053C7E760390B02EE8E30943DC
1413−:10584000E2ECBEB24DE8360983C7105A4A75B7C3B9
1414−:10585000068E06007A8B3EFE79E8A008893EFE7926
1415−:105860008C06007A578B360E7AE81209C706087A3A
1416−:105870001000BA0002E8E800E881FF5FBA0000E823
1417−:10588000DE00BEB54DE8F6088CC0E83F09B03AE846
1418−:1058900090098BC7E83509E87E08E8C30090E8B7AF
1419−:1058A00009E8A6090AC074F63C0B750683EF10EBF5
1420−:1058B00019903C0A750683C710EB0F903C0C7504D9
1421−:1058C00047EB07903C0875244F908B36FE798BC7C9
1422−:1058D0002BC63D000172A53D1001720483EE20909D
1423−:1058E00083C6108936FE79578BFEEB803C2E7508F7
1424−:1058F000BA0113E86A0007C3C6060A7A0232C990E1
1425−:105900003C30724C3C39760C245F3C4172423C4640
1426−:10591000773E2C072C3050E8CC085802C8FE0E0AFF
1427−:105920007A740FC0E104E82F09E81E090AC074F672
1428−:10593000EBCE26880DE8E0078AD0E823008AC13C38
1429−:105940002072053C7E760390B02EE8D508E970FF02
1430−:10595000E8C507E80A00268A05E87C08E91DFF90EB
1431−:10596000F606267A02750286F2528B361A7AE80D0E
1432−:10597000085A528AC60206247AF606267A01750665
1433−:10598000E89F08EB0D9032E4E80D088B361C7AE8AE
1434−:10599000EC075A8AC20206257AF606267A017506AF
1435−:1059A000E87F08EB069032E4E8ED078B361E7AE8D4
1436−:1059B000CC07C390068E06047A8B3E027AE83C0739
1437−:1059C000893E027A8C06047A07FF1E027AC3BE97CC
1438−:1059D0004DE8AA07CB900657BED779E866078BD863
1439−:1059E000E861078BC82BCB78118EC3BF0000B8FFCE
1440−:1059F000FF51B90800F3AB59E2F75F07C39006BE49
1441−:105A0000D779E83F078BD8D1E32E8B9F4400BE2681
1442−:105A100052E8F1088BC3E8DD08B80100E873F2E84A
1443−:105A2000E008BE2F52E8DD088B4718E8C808BE77AB
1444−:105A300052E8D1088B4726E8BC08BE5352E8C50897
1445−:105A40008B471EE8B008BE5C52E8B9088B4720E8D7
1446−:105A5000A408BE6E52E8AD088B4724E89808BE80C3
1447−:105A600052E8A1088B472AE88C08E89508BE38520E
1448−:105A7000E892088B07E87E08BE4152E887088B470A
1449−:105A80001AE87208BE4A52E87B088B471CE8660891
1450−:105A9000BE6552E86F088B4722E85A08E86308BEE3
1451−:105AA000D152E860088B4738E84B08BEAD52E85445
1452−:105AB000088B4730E83F08BEB652E848088B4732AB
1453−:105AC000E83308BEA452E83C088B472EE82708BEFE
1454−:105AD000BF52E830088B4734E81B08E82408BE8929
1455−:105AE00052E821088B4704E80C08BE9252E81508DA
1456−:105AF0008B4714E80008BE9B52E809088B472CE846
1457−:105B0000F407BEC852E8FD078B4736E8E807BEDA5F
1458−:105B100052E8F1078B473AE8DC07BEE352E8E507B5
1459−:105B20008B473CE8D007E8D907BE1953E8D6078B66
1460−:105B30004748E8C107BEFE52E8CA078B4742E8B5AE
1461−:105B400007BE0753E8BE078B4744E8A907BE7C534E
1462−:105B5000E8B2078B474CE89D07BE8553E8A6078B44
1463−:105B6000474EE89107BE8E53E89A078B4750E88569
1464−:105B700007E88E07BE2253E88B078B474AE8760773
1465−:105B8000BEEC52E87F078B4708E86A07BEF552E88B
1466−:105B900073078B4740E85E07BE1053E867078B47E3
1467−:105BA00046E85207E85B07BE6A53E858078B477A16
1468−:105BB000E84307BE3D53E84C078B4770E83707BE04
1469−:105BC0004653E840078B4772E82B07BE4F53E83433
1470−:105BD000078B4774E81F07E82807BE2B53E8250703
1471−:105BE0008B470CE81007BE3453E819078B4710E8C1
1472−:105BF0000407BE5853E80D078B4776E8F806BE61E8
1473−:105C000053E801078B4778E8EC06BE7353E8F506C6
1474−:105C10008B473EE8E006E8E906BE9753E8E6068BC8
1475−:105C20004752E8D106BEA053E8DA068B4754E8C5D0
1476−:105C300006BEA953E8CE068B4756E8B906BEB25356
1477−:105C4000E8C2068B4758E8AD06BEBB53E8B6068BE4
1478−:105C5000475AE8A106BEC453E8AA068B475CE895FC
1479−:105C600006E89E06BECD53E89B068B475EE8860697
1480−:105C7000BED653E88F068B4760E87A06BEDF53E84E
1481−:105C800083068B4762E86E06BEE853E877068B47CB
1482−:105C90007CE86206BEF153E86B068B477EE8560649
1483−:105CA000BEFA53E85F068B878000E84906E8520693
1484−:105CB000BE4254E84F068B879E00E83906BE035467
1485−:105CC000E842068B4764E82D06BE0C54E836068B86
1486−:105CD000476EE82106BE1554E82A068B878E00E839
1487−:105CE0001406BE1E54E81D068B879000E80706BE0A
1488−:105CF0002754E810068B879200E8FA05E80306BEF1
1489−:105D00003054E800068B879400E8EA05BE3954E871
1490−:105D1000F3058B879600E8DD05BE6F54E8E6058B3A
1491−:105D2000879800E8D005BE5D54E8D9058A87A000B1
1492−:105D3000E8A705BE5454E8CC058A4728E89B05BE71
1493−:105D40006654E8C0058A87A100E88E05E8B305BE61
1494−:105D50007854E8B0058A87A200E87E05BE8154E841
1495−:105D6000A3058A87A300E87105BE8A54E896058AD0
1496−:105D700087A400E86405BE9354E889058A87A500D6
1497−:105D8000E85705BE9C54E87C058A87A600E84A05CA
1498−:105D9000BEA554E86F058A87A700E83D05BEAE544E
1499−:105DA000E862058A87A800E83005E85505BEB754C3
1500−:105DB000E852058A87A900E82005BEC054E84505D9
1501−:105DC0008A87AA00E81305BEC954E838058A87AB5C
1502−:105DD00000E80605BED254E82B058A87AD00E8F935
1503−:105DE00004BEDB54E81E058A87AE00E8EC04BEE47E
1504−:105DF00054E811058A87AF00E8DF04BEED54E804DB
1505−:105E0000058A87B000E8D204E8F704BEF654E8F447
1506−:105E1000048A87B100E8C204BEFF54E8E7048A8719
1507−:105E2000B200E8B504BE0855E8DA048A87B300E892
1508−:105E3000A804BE1155E8CD048A87BB00E89B04E89E
1509−:105E4000C004BE1A55E8BD048A87BC00E88B04BEB6
1510−:105E50002355E8B0048A87BE00E87E04BE2C55E8CE
1511−:105E6000A3048A87BF00E87104E8960407C36006AC
1512−:105E70001E168BECFF4E16F7461A00027401FBB893
1513−:105E800000008ED88EC0892E2D7AE8CB0081661A4C
1514−:105E9000FFFEC6062A7A00E8D800B8005FA32B7A76
1515−:105EA000E85D00803E2A7A00740A814E1A0001C61D
1516−:105EB000062A7A00171F0761CF9060061E168BEC2A
1517−:105EC000F7461A00027401FBB800008ED88EC08914
1518−:105ED0002E2D7A81661AFFFEC6062A7A00E8920005
1519−:105EE000B8005FA32B7AE81700803E2A7A00740A74
1520−:105EF000814E1A0001C6062A7A00171F0761CF904B
1521−:105F0000B8F000E88CEDFF262B7AC390065356803C
1522−:105F10003E297A007403E83F00BED779E825028B5A
1523−:105F2000D8A3277A2E8A07A2297AB0CC2E88075EBA
1524−:105F30005B07C3C6062A7A00B80A5FA32B7AC39010
1525−:105F40008B2E2D7AE82B00C3C6062A7A01E80800BA
1526−:105F5000B80A5FA32B7AC39057803E297A00740F4A
1527−:105F60008B3E277AA0297A2E8805C606297A005FFB
1528−:105F7000C390BEB24DE80602BED851E80002FF76DB
1529−:105F80001458E84702BEDE51E8F301FF760E58E8E8
1530−:105F90003A02BEE451E8E601FF761258E82D02BE4F
1531−:105FA000EA51E8D901FF761058E82002BE1452E801
1532−:105FB000CC01FF760A58E81302BE1A52E8BF01FF6F
1533−:105FC000760C58E80602BECF51E8B201FF761A58A7
1534−:105FD000E8F901BEB24DE8A501BEF051E89F01FF0E
1535−:105FE000761858E8E601BEF651E89201FF760258AD
1536−:105FF000E8D901BEFC51E88501FF760458E8CC01E0
1537−:10600000BE0252E87801FF760058E8BF01BE085290
1538−:10601000E86B01FF760658E8B201BE0E52E85E0159
1539−:10602000FF760858E8A501BE2052E85101FF761618
1540−:1060300058E89801BE894DE84401C390BEC94DE8B7
1541−:106040003C01C33C0074053C017459C3C7060C7A7B
1542−:10605000CD50C7060E7AF050C706107AE850C70632
1543−:10606000127AEC50C706147AF450C706167AFB5021
1544−:10607000C706187A0351C7061A7A0B51C7061C7A4D
1545−:106080000E51C7061E7A1051C706207A1251C70654
1546−:10609000227A1651C606247A01C606257A01C6065A
1547−:1060A000267A03C3C7060C7A1A51C7060E7A4D51D9
1548−:1060B000C706107A4751C706127A4A51C706147AA2
1549−:1060C0004F51C706167A5151C706187A5551C7065F
1550−:1060D0001A7A5651C7061C7A5951C7061E7A5A5168
1551−:1060E000C706207A5B51C706227A5E51C606247A1B
1552−:1060F00020C606257A20C606267A02C3A1F879486A
1553−:106100007414BED779E83C008BF8AC3C3A75078E26
1554−:10611000C7E830008BF8C3908BC72B06FE798AF056
1555−:10612000240F8AD002D002D080C20BC0EE0480C6F9
1556−:1061300003043DC38CC0E89300B03AE8E4008BC789
1557−:10614000E88900C35133C990AC3C2074FB900AC06D
1558−:1061500074262C3072223C0976143C11721A2C07DA
1559−:106160003C0F760A3C2A72102C203C0F770A98C10B
1560−:10617000E10403C8ACEBD7904E8BC159C390068C99
1561−:10618000C88EC0E8020007C3268A04460AC0740607
1562−:10619000E88F00EBF390C3900BC0747A5133D2B9FF
1563−:1061A000E803F7F18BCAE803008BC159BA6400F623
1564−:1061B000F2E80C008AC498B20AF6F2E802008AC437
1565−:1061C000500AF074050430E8580058C386C4E80744
1566−:1061D0000086C4E80200C390C1C804E80800C1C03A
1567−:1061E00004E80200C3905350240FBBCA622ED7E8C4
1568−:1061F0003000585BC39086C4E8070086C4E80200FC
1569−:10620000C39050B908008AE032C0D1C00430E81110
1570−:1062100000E2F558C390B030E80700C3B020E801B1
1571−:1062200000C3568B36D0798884D0774681E6FF014B
1572−:10623000FF06D4798936D079813ED479FE0175087C
1573−:1062400056E814005EEBF1905EC3BA0202EC240142
1574−:106250007404BA0602ECC390803EF67900740960BB
1575−:10626000B80100E82CEA6190BA0202ECA804742894
1576−:106270008B36D279833ED47900741D8A84D07746D8
1577−:1062800081E6FF018936D279FF0ED479BA0602EE93
1578−:10629000BA0202ECA80475DCA1D479C352BA060292
1579−:1062A000EE5AC3905250BA0202ECA8047408585A2D
1580−:1062B000E8E9FFF9C390585AF8C35250BA0202EC09
1581−:1062C000A80474FB585AE8D3FFC330313233343555
1582−:1062D0003637383941424344454653508AE080E4DA
1583−:1062E0000FBBCA62C0E8042ED7E8CEFF8AC42ED7FF
1584−:1062F000E8C7FF585BC386E0E8DFFF86E0E8DAFF27
1585−:10630000C390BEB24D502EAC3C007405E8ABFFEB21
1586−:10631000F558C390C808000056578B7604BF040098
1587−:10632000C746FC0000C746FA0000C746F8000083D5
1588−:106330007E0600750E56E8B60E590BC075058BC764
1589−:10634000E95B018B46FC8946FE0BFF7505B8010031
1590−:10635000EB0233C05056E8A40D5959B4008946FCED
1591−:106360008B5EFC83FB087603E92B01D1E32EFFA7AC
1592−:10637000B264B80300E92601837EFA007414C746AC
1593−:10638000FA00008A445898508A44599850E8C20F3D
1594−:106390005959837EF800740AC746F8000056E89BF6
1595−:1063A0000859837E060075058BC7E9F10083FF0459
1596−:1063B0007503E9E6008BC7E9E400837EFE00750300
1597−:1063C000BF0200E9D500837EFE007503BF0100E92E
1598−:1063D000C9008B5EFE83FB077603E98600D1E32EBE
1599−:1063E000FFA7A26433FFE97F00BF0400807C580F41
1600−:1063F0007422837EF800751CFE44586A0856E87EB5
1601−:106400000C59598A445804805056E8720C5959C79F
1602−:1064100046FA0100837EF800740AC746F800005669
1603−:10642000E8190859EB42BF0400807C5800742283AD
1604−:106430007EF800751CFE4C586A0856E8410C595904
1605−:106440008A445804805056E8350C5959C746FA0119
1606−:1064500000837EF800740AC746F8000056E8DC079F
1607−:1064600059EB05BF0400EB00EB31BF0400EB2CC778
1608−:1064700046F801006A0856E8050C5959807C58090D
1609−:106480007D04B00FEB02B00004805056E8F00B59C9
1610−:1064900059BF0400EB05BF0400EB00E9A5FE5F5EF9
1611−:1064A000C9C3E4636364636463646364E963266427
1612−:1064B00051647863BA63C6639664D2636A646A643B
1613−:1064C0006F647263C808000056578B76048B7E0891
1614−:1064D0006A0156E8A90B59598A4606C0E0060480AD
1615−:1064E0005056E89A0B5959C746FE0000897EF8EBD2
1616−:1064F00003FF46FE8B5EF8FF46F8803F0075F2838F
1617−:106500007EFE107D25B810002B46FED1F88946FC92
1618−:10651000C746FA0000EB0B6A2056E8620B5959FF98
1619−:1065200046FA8B46FA3B46FC7CEDEB0C8BDF478A48
1620−:10653000075056E8490B5959803D0075EF6A0256DD
1621−:10654000E83C0B5959EB005F5EC9C3C80400005614
1622−:10655000578B7E04C746FE0000BE1400E909018B7C
1623−:106560005EFE83C3042BDF8A87AC0B88445AC64483
1624−:1065700058088A46FE884459C744060000C6441994
1625−:1065800000C6441A00C6441B00C6441D0DC6441E66
1626−:1065900003C6441F00C6442000C6442100C6445B15
1627−:1065A00000C6445D00C6445E00C6445F00C6446049
1628−:1065B00000C746FC0000EB0D8B5EFCD1E3C740300A
1629−:1065C0000000FF46FC837EFC107CEDC746FC00000B
1630−:1065D000EB0A8B5EFCC6405000FF46FC837EFC0449
1631−:1065E0007CF0C744540000C7445600008A445A98BF
1632−:1065F000BAF80023D0B805000BC28946FC9CFA8A81
1633−:1066000046FCBAFE00EEBA0000EC9D24088846FC69
1634−:10661000837EFC007502EB4AFF76FEE87A0C59682F
1635−:10662000350256E8320A59590BC07534683802569B
1636−:10663000E8250A59590BC0752768420256E8180A1E
1637−:1066400059590BC0751A684C0256E80B0A59590B78
1638−:10665000C0750D68560256E8FE0959590BC0740200
1639−:10666000EB00FF46FE83C662397EFE7D03E9EFFE46
1640−:10667000EB005F5EC9C3C808000056578B4604BADA
1641−:106680006200F7EA0514008BF0837E06007405B8FB
1642−:106690001000EB03B808008944048A460888445C6B
1643−:1066A00056E85904598BF88BC78944568944548A53
1644−:1066B000445D88442F0BFF751D68C20F6A0156E8C0
1645−:1066C00002FE83C406EB006A0156E847FC59590BE9
1646−:1066D000C075F4BF0100897EFAB90500BBE96A2ED6
1647−:1066E0008B073B46FA74074343E2F4E9A4032EFF09
1648−:1066F000670AC744060200C74408F4088B5E04D149
1649−:10670000E38B87FC0889440A33C08BF8894454E939
1650−:10671000800356E8BB0559BF01008A445D88446088
1651−:10672000E96F03837C04087530807C5C0175158AF1
1652−:10673000445DB400D1E08BD8FFB7E40856E8F70811
1653−:106740005959EB138A445DB400D1E08BD8FFB7C42C
1654−:106750000856E8E2085959EB2E807C5C0175158AD1
1655−:10676000445DB400D1E08BD8FFB7D40856E8C70821
1656−:106770005959EB138A445DB400D1E08BD8FFB7B40C
1657−:106780000856E8B20859596A0156E887FB59598BEF
1658−:10679000D883FB03772AD1E32EFFA7E16ABF01006C
1659−:1067A0008A445D88445EEB188A445D04FF240788B0
1660−:1067B000445DEB0C8A445DFEC0240788445DEB0019
1661−:1067C000E9CF028A445DB400D1E08BD8FFB7FD0267
1662−:1067D00056E863085959681D0356E85A0859596A1A
1663−:1067E0000156E82FFB59598BD883FB037736D1E349
1664−:1067F0002EFFA7D96ABF01008A445D88445FEB245D
1665−:106800008A445D04FF8A540480C2FF22C288445D2A
1666−:10681000EB128A445DFEC08A540480C2FF22C28803
1667−:10682000445DEB00E96B028B5C0683C3FED1E38B16
1668−:10683000400889048B1CFF77066A0056E885FC83B4
1669−:10684000C4068B5C064BD1E38B40088944028B5C09
1670−:1068500002FF77066A0156E86AFC83C4066A01569D
1671−:10686000E8B1FA59598BD883FB037603E91F02D1AB
1672−:10687000E32EFFA7D16A8B5C028B47048944028B0D
1673−:106880005C02803F44750D8B5C028A4701B4003B7B
1674−:1068900044047DE28B4604D1E08B1C03D88B440278
1675−:1068A0008947088B5C064BD1E38B4402894008E999
1676−:1068B000DE018B5C028B47028944028B5C02803FC5
1677−:1068C00044750D8B5C028A4701B4003B44047DE2B1
1678−:1068D0008B4604D1E08B1C03D88B44028947088B7C
1679−:1068E0005C064BD1E38B4402894008E9A201BF0159
1680−:1068F00000E99C018B5C028A07B4008946F8B90C58
1681−:1069000000BBA16A2E8B073B46F874074343E2F4B1
1682−:10691000E977012EFF67188B4604D1E08B5C0203F8
1683−:10692000D88B47088B5C06FF4406D1E38940088B6F
1684−:106930001C807F010074128B5C028A47018B1C8AC9
1685−:106940005701B6008BDA884018E94001FF4C06E990
1686−:106950003A018B5C028A47018B1C8A5701B6008B77
1687−:10696000DA884018E925018B5C028A47018B1C8A72
1688−:106970005701B6008BDA884018FF4C06E90D018BF1
1689−:106980005C028A47018B1C8A5701B6008BDA3040C3
1690−:1069900018E9F800B8F0108BF88944548A445F88ED
1691−:1069A000445DE9E7008A441C983D020074073D03FA
1692−:1069B000007402EB07C746FE0000EB2B8A441C98CC
1693−:1069C000D1E08BD8FFB7690256E86B0659596A01C6
1694−:1069D00056E840F959598946FE837EFE00740683C5
1695−:1069E0007EFE0375E9EB00837EFE0374628A441C1D
1696−:1069F00098D1E08BD8FFB76D0256E83A0659595640
1697−:106A0000E84D97598946FC8B5EFC83EBFE83FB03C4
1698−:106A10007733D1E32EFFA7996A68AC0256E81706D0
1699−:106A20005959EB23688F0256E80C065959EB186840
1700−:106A3000750256E801065959EB0D68C60256E8F68C
1701−:106A4000055959EB02EB006A0156E8C7F85959BFDE
1702−:106A50000100EB3868DD0256E8DC0559596A015639
1703−:106A6000E8B1F85959BF0100EB22B8D0308BF88952
1704−:106A700044548A446088445DEB12B8E0208BF88966
1705−:106A800044548A445E88445DEB02EB00EB02EB0069
1706−:106A9000EB00E941FC5F5EC9C3196A246A2F6A3AB8
1707−:106AA0006A0000010002000400410042004300446B
1708−:106AB00000800081008200FF001769546A7A6AA58D
1709−:106AC00069526994696A6A676952697F6967694C42
1710−:106AD00069F4687668B268EE68F56700681268F570
1711−:106AE000679D67A867B4679D6700000100F010E02C
1712−:106AF00020D0302768F266C36723671267C8040096
1713−:106B00000056578B76048A4459988946FC6A098B4B
1714−:106B100046FC05840150E8930859598BF88BC7252A
1715−:106B200000F03D001075558BC725F0003DF0007555
1716−:106B30004B8BC725000FC1F8088946FE8B44043BE8
1717−:106B400046FE7D0533C0E9EF008BC7250F00BA0F65
1718−:106B5000002BD03B56FE740533C0E9DB00C744026E
1719−:106B600004098A46FE88445F88445D8B5EFCD1E35D
1720−:106B7000C787FC080409B8F010E9BC008BC72500E2
1721−:106B8000F03D002075528BC725F0003DE0007548B0
1722−:106B90008BC725000FC1F8088946FE837EFE087E5C
1723−:106BA0000533C0E992008BC7250F00BA0F002BD028
1724−:106BB0003B56FE740533C0EB7F90C744020C098A34
1725−:106BC00046FE88445E88445D8B5EFCD1E3C787FC4B
1726−:106BD000080C09B8E020EB608BC72500F03D0030C1
1727−:106BE00075528BC725F0003DD00075488BC7250036
1728−:106BF0000FC1F8088946FE8B44043B46FE7D0433F2
1729−:106C0000C0EB358BC7250F00BA0F002BD03B56FECB
1730−:106C1000740433C0EB22C7440214098A46FE884438
1731−:106C20006088445D8B5EFCD1E3C787FC081409B81B
1732−:106C3000D030EB0433C0EB005F5EC9C3C806000070
1733−:106C4000568B76046A0856E8350459598A44580424
1734−:106C5000805056E8290459598B44543B4456750AD0
1735−:106C60008A445D3A442F7502EB648B445489445640
1736−:106C70008B5C028A470188442F8A445DB400C1E0DE
1737−:106C8000088B54540BD08A445DB400BB0F002BD842
1738−:106C90000BD38956FE6A108A445998050400990559
1739−:106CA000400183D2005250E8540883C4068956FC40
1740−:106CB0008946FA8B46FE0946FA834EFC006A19FFA4
1741−:106CC00076FCFF76FAE8730783C406E8FE075EC920
1742−:106CD000C3C81C000056578B5E048A4759988BF036
1743−:106CE0008B5E048A475DB4008946E6837EE6007DBC
1744−:106CF0000A8B5E048B4704488946E68B5E048B470B
1745−:106D0000043B46E67F05C746E600008B5E048A46E4
1746−:106D1000E688475D8BDED1E38B9F5902C647022090
1747−:106D20008BDED1E38B9F5902C64703308BDED1E364
1748−:106D30008B9F6102C64702208BDED1E38B9F6102ED
1749−:106D4000C64703308B46E68946FA837EFA007418FC
1750−:106D50008B46FABB0A0033D2F7F380C2308BDED108
1751−:106D6000E38B9F5902885703BB0A008B46FA33D244
1752−:106D7000F7F38946FA837EFA0074188B46FABB0A49
1753−:106D80000033D2F7F380C2308BDED1E38B9F590200
1754−:106D90008857028B46E68946FA837EFA0074188B80
1755−:106DA00046FABB0A0033D2F7F380C2308BDED1E360
1756−:106DB0008B9F6102885703BB0A008B46FA33D2F7D8
1757−:106DC000F38946FA837EFA0074188B46FABB0A00F0
1758−:106DD00033D2F7F380C2308BDED1E38B9F61028820
1759−:106DE00057028B5EE6D1E3FFB712026A00FF76041A
1760−:106DF000E8D1F683C40668D30F6A01FF7604E8C3BE
1761−:106E0000F683C406FF76E656E8019359598956F28F
1762−:106E10008946F0FF76E656E8149359598956EE896B
1763−:106E200046EC9CFAC45EF0268B078946EAC45EEC09
1764−:106E3000268B078946E8BA50FFED8946FE9DC74676
1765−:106E4000E40100E8EEA0BA50FFED8946FC8B46FC59
1766−:106E50002B46FE3DE8037303E980019CFABA50FF1C
1767−:106E6000ED8946FC8B46FC2B46FE8946F8C45EF055
1768−:106E7000268B072B46EA8946F6C45EF0268B0789E7
1769−:106E800046EAC45EEC268B072B46E88946F4C45ECE
1770−:106E9000EC268B078946E8BA50FFED8946FE9D81B6
1771−:106EA0007EF8E803761CFF76F8FF76F6E87601595F
1772−:106EB000598946F6FF76F8FF76F4E8680159598952
1773−:106EC00046F4BF0E00EB178BDED1E38B9F5902C651
1774−:106ED00001208BDED1E38B9F6102C601204783FF37
1775−:106EE0001176E48BDED1E38B9F5902C6470D308BC0
1776−:106EF000DED1E38B9F6102C6470D30837EF60977B2
1777−:106F000005B80D00EB26837EF6637705B80E00EB1F
1778−:106F10001B817EF6E7037705B80F00EB0F817EF645
1779−:106F20000F277705B81000EB03B811008BF8EB259D
1780−:106F30008B46F6BB0A0033D2F7F380C2308BDED12A
1781−:106F4000E38B9F590288114FBB0A008B46F633D260
1782−:106F5000F7F38946F6837EF60075D5837EF40977CC
1783−:106F600005B80D00EB26837EF4637705B80E00EBC1
1784−:106F70001B817EF4E7037705B80F00EB0F817EF4E9
1785−:106F80000F277705B81000EB03B811008BF8EB253D
1786−:106F90008B46F4BB0A0033D2F7F380C2308BDED1CC
1787−:106FA000E38B9F610288114FBB0A008B46F433D2FA
1788−:106FB000F7F38946F4837EF40075D58BDED1E3FFC9
1789−:106FC000B75902FF7604E86E0059598BDED1E3FF12
1790−:106FD000B76102FF7604E85E0059596A00FF760443
1791−:106FE000E831F359598BD883FB04771FD1E32EFF87
1792−:106FF000A71B70EB22C746E40000FF4EE6EB0CC770
1793−:1070000046E40000FF46E6EB02EB00837EE40074FA
1794−:1070100003E92AFEE9D4FC5F5EC9C3F36FF56FFF95
1795−:107020006FF36F0970558BEC8B4604B9E803F7E1F9
1796−:107030008B4E06F7F15DC3558BEC568B7606EB0E47
1797−:107040008BDE468A0750FF7604E833005959803CAE
1798−:107050000075EDEB005E5DC3558BEC568B7606EB51
1799−:10706000148BDE468A0750FF7604E8450059590B19
1800−:10707000C07402EB07803C0075E7EB005E5DC3C89F
1801−:10708000020000568B76048A445A988946FE9CFA80
1802−:107090008A46FEBAFE00EEBA0200ECA80274069D13
1803−:1070A000E8919EEBE9BA00008A4606EE9DEB005E91
1804−:1070B000C9C3C8040000568B76048A445A9889468E
1805−:1070C000FEE8E6A18946FCE8E0A12B46FC3DB80BB2
1806−:1070D0007605B80100EB239CFA8A46FEBAFE00EE64
1807−:1070E000BA0200ECA80274069DE8489EEBD9BA00EB
1808−:1070F000008A4606EE9D33C0EB005EC9C3C804009B
1809−:107100000056578B7604837E0600740756E8030109
1810−:1071100059EB0556E8A200598846FF807EFF0877A4
1811−:10712000068A46FFE98400807EFF0F7603EB7990A4
1812−:107130008A46FFB4002D0A008BD883FB047767D101
1813−:10714000E32EFFA7AF71B000EB6156E86B0059B4B6
1814−:1071500000250F008946FC56E85E0059B4008BF804
1815−:1071600056E8550059B400C1E0088BD703D08BFA1C
1816−:107170008B5EFCD1E3897830EB2E56E83B005988D2
1817−:10718000445BEB2456E831005988445056E8290006
1818−:107190005988445156E821005988445256E819004C
1819−:1071A00059884453EB02EB00E95BFF5F5EC9C346BD
1820−:1071B00071A6714A717A718471C8040000568B7689
1821−:1071C000048A445A988946FE9CFA8A46FEBAFE0012
1822−:1071D000EEBA0200ECA80175069DE8579DEBE9BAEE
1823−:1071E0000000EC8846FD9D8A46FDEB005EC9C3C8E1
1824−:1071F000020000568B76048A445A988946FE9CFA0F
1825−:107200008A46FEBAFE00EEBA0200EC32E424019D8A
1826−:107210005EC9C3C8060000568B76048A445A988912
1827−:1072200046FEE885A08946FAE87FA02B46FA3DB8DD
1828−:107230000B7604B008EB249CFA8A46FEBAFE00EEF8
1829−:10724000BA0200ECA80175069DE8E89CEBDABA00EA
1830−:1072500000EC8846FD9D8A46FDEB005EC9C3558B58
1831−:10726000EC568B56048A4606EE33F6EB035058462E
1832−:1072700083FE147CF85E5DC3C8020000568B560482
1833−:10728000EC8846FF33F6EB0350584683FE147CF837
1834−:107290008A46FFEB005EC9C3C802000056578B76D2
1835−:1072A00004833EB00B00751FBA8801B000EEBA86A9
1836−:1072B00001B000EE6A096A00683001E87D0183C40C
1837−:1072C00006C706B00B01006A098BC605800150E8AD
1838−:1072D000DA0059598BF88BC7C1E80C250F00894695
1839−:1072E000FE8BC7C1E808250F008B56FE83F20C3BCE
1840−:1072F000C275218BC7C1E804250F008B56FE83F2AF
1841−:10730000063BC2750F8BC7250F008B56FE83F20913
1842−:107310003BC2740D6A0756E838005959C746FE0744
1843−:10732000008A46FE0480A233028BC6BA6200F7EAE6
1844−:107330008A56FE8BD888976C006832028BC6BA6278
1845−:1073400000F7EA05140050E80EFD5959EB005F5EA6
1846−:10735000C9C3C8020000568B760683E60F8BC6C1F0
1847−:10736000E00C8BD683F20CC1E2080BC28BD683F201
1848−:1073700006C1E2040BC28BD683F2090BC28946FE1A
1849−:107380006A196A108B46049905400183D200525055
1850−:10739000E86B0183C4060B46FE83CA005250E89A8C
1851−:1073A0000083C406E82501EB005EC9C3558BEC568B
1852−:1073B0005733FF6A01688601E8A3FE5959B1102AC4
1853−:1073C0004E06D3660433F6EB2E817E0400807204F1
1854−:1073D000B001EB02B00050688801E881FE59596A9B
1855−:1073E00003688601E877FE59596A01688601E86DED
1856−:1073F000FE5959D16604463B76067CCD33F6EB2424
1857−:10740000D1E76A03688601E854FE59596A01688623
1858−:1074100001E84AFE5959688801E85CFE599825013F
1859−:10742000000BF84683FE107CD76A00688601E82DC1
1860−:10743000FE59598BC7EB005F5E5DC3558BEC565709
1861−:107440008B7E086A01688601E813FE5959B820004E
1862−:107450002BC750FF7606FF7604E8A20083C4068996
1863−:10746000560689460433F6EB47817E060080720C8F
1864−:107470007506837E04007204B001EB02B000506810
1865−:107480008801E8D9FD59596A03688601E8CFFD599A
1866−:10749000596A01688601E8C5FD59596A01FF7606F7
1867−:1074A000FF7604E8580083C40689560689460446D8
1868−:1074B0003BF77CB56A00688601E8A2FD59596A006D
1869−:1074C000688601E898FD59595F5E5DC3558BEC569F
1870−:1074D0006A01688601E886FD595933F6EB00688831
1871−:1074E00001E894FD59A80175088BC6463D64007CEF
1872−:1074F000ED6A00688601E865FD59595E5DC3C80400
1873−:1075000000008B46048B56068B4E08E306D1E0D173
1874−:10751000D2E2FA8946FC8956FE8B56FE8B46FCEB7E
1875−:1075200000C9C300000000000000000000000000CF
1876−:1075300050726576696F7573204D656E7500426592
1877−:1075400067696E00000000000000000000000000FD
1878−:10755000000000000000000000000000000000002B
1879−:10756000000000000000000000000000000000001B
1880−:10757000000000000000000000000000000000000B
1881−:1075800000000000000000000000000000000000FB
1882−:1075900000000000000000000000000000000000EB
1883−:1075A00000000000000000000000000000000000DB
1884−:1075B00000000000000000000000000000000000CB
1885−:1075C00000000000000000000000000000000000BB
1886−:1075D00000000000000000000000000000000000AB
1887−:1075E000000000000000000000000000000000009B
1888−:1075F000000000000000000000000000000000008B
1889−:10760000000000000000000000000000000000007A
1890−:10761000000000000000000000000000000000006A
1891−:10762000000000000000000000000000000000005A
1892−:10763000000000000000000000000000000000004A
1893−:10764000000000000000000000000000000000003A
1894−:10765000000000000000000000000000000000002A
1895−:10766000000000000000000000000000000000001A
1896−:10767000000000000000000000000000000000000A
1897−:1076800000000000000000000000000000000000FA
1898−:1076900000000000000000000000000000000000EA
1899−:1076A00000000000000000000000000000000000DA
1900−:1076B00000000000000000000000000000000000CA
1901−:1076C000000000000000000000000000506F727415
1902−:1076D000203000506F7274203100506F727420326D
1903−:1076E00000506F7274203300506F72742034005059
1904−:1076F0006F7274203500506F7274203600506F72B4
1905−:1077000074203700506F7274203800506F727420EC
1906−:107710003900506F727420313000506F7274203114
1907−:107720003100506F727420313200506F727420310A
1908−:107730003300506F727420313400506F72742031F6
1909−:1077400035009C01A301AA01B101B801BF01C60126
1910−:10775000CD01D401DB01E201EA01F201FA010202EA
1911−:107760000A02080000078100038080809F919591A4
1912−:107770009F000381848E95848484840003828484A2
1913−:107780008484958E8400048800B20BC60BDA0BEE5D
1914−:107790000B020C160C2A0C3E0C520C770C9C0CBEE7
1915−:1077A0000CE00C020D01802054657374205061734D
1916−:1077B000736564201F20507265737320800200017E
1917−:1077C00080204D697373696E67205278204461741C
1918−:1077D000611F205072657373208002000180204277
1919−:1077E00061642052782044617461201F20507265CA
1920−:1077F000737320800200018020586D7472204275DE
1921−:1078000073791F20507265737320800200018020FD
1922−:107810006E6F742063757272656E746C791F2020B0
1923−:10782000696D706C656D656E7465640200240D2F62
1924−:107830000D3A0D450D500D5B0D660D710D7C0D87DC
1925−:107840000D920D9D0DA80DB30DBE0DC90D53802CCD
1926−:107850003254442053862C334454522053822C33C8
1927−:10786000525453201F53812C3252442053852C32C2
1928−:1078700043442053832C334354532053842C3344A8
1929−:1078800053522053872C3252492702000180202076
1930−:10789000444344202D2070696E2032301F275385C9
1931−:1078A0002E31818263908081828384858687888956
1932−:1078B0008A8B8C8D8E8F27020001802020445352AA
1933−:1078C000202D2070696E2031311F2753842E318185
1934−:1078D000826390808182838485868788898A8B8C65
1935−:1078E0008D8E8F27020001802020435453202D20AD
1936−:1078F00070696E20341F2753832E318182639080FC
1937−:107900008182838485868788898A8B8C8D8E8F2758
1938−:107910000200018020205249202D2070696E203203
1939−:10792000321F2753872E3181826390808182838426
1940−:1079300085868788898A8B8C8D8E8F2702000180AF
1941−:107940002020445452202D2070696E20362F381F7D
1942−:107950002753862E3181826390808182838485863D
1943−:107960008788898A8B8C8D8E8F270200018020204A
1944−:10797000525453202D2070696E20351F2753822EBC
1945−:107980003181826390808182838485868788898A19
1946−:107990008B8C8D8E8F27020001802020527844200E
1947−:1079A0002D2070696E20321F2753812E30534D8158
1948−:1079B000826390808182838485868788898A8B8C84
1949−:1079C0008D8E8F27020001802020547844202D20A6
1950−:1079D00070696E20331F2753802E30534D81826390
1951−:1079E00090808182838485868788898A8B8C8D8E1E
1952−:1079F0008F27020001802020444344202D207069FD
1953−:107A00006E20351F2753852E3181826390808182BD
1954−:107A1000838485868788898A8B8C8D8E8F27020048
1955−:107A200001802020445352202D2070696E20351F84
1956−:107A30002753842E3181826390808182838485865E
1957−:107A40008788898A8B8C8D8E8F2702000180202069
1958−:107A5000435453202D2070696E20311F2753832EED
1959−:107A60003181826390808182838485868788898A38
1960−:107A70008B8C8D8E8F270200018020205249202D73
1961−:107A800020286E2E632E291F2753872E3181826373
1962−:107A900090808182838485868788898A8B8C8D8E6D
1963−:107AA0008F27020001802020445452202D2070692D
1964−:107AB0006E20321F2753862E31818263908081820F
1965−:107AC000838485868788898A8B8C8D8E8F27020098
1966−:107AD00001802020525453202D2070696E20371FC2
1967−:107AE0002753822E318182639080818283848586B0
1968−:107AF0008788898A8B8C8D8E8F27020001802020B9
1969−:107B0000527844202D2070696E20361F2753812E15
1970−:107B100030534D81826390808182838485868788FB
1971−:107B2000898A8B8C8D8E8F270200018020205478CB
1972−:107B300044202D2070696E20331F2753802E305330
1973−:107B40004D81826390808182838485868788898A3B
1974−:107B50008B8C8D8E8F27020001802020444344208F
1975−:107B60002D2070696E20351F202020202753852E60
1976−:107B700031818263888081828384858687270200A1
1977−:107B800001802020445352202D2070696E20351F23
1978−:107B9000202020202753842E318182638880818297
1979−:107BA0008384858687270200018020204354532048
1980−:107BB0002D2070696E20311F202020202753832E16
1981−:107BC0003181826388808182838485868727020051
1982−:107BD000018020205249202D20286E2E632E291F3F
1983−:107BE000202020202753872E318182638880818244
1984−:107BF00083848586872702000180202044545220F8
1985−:107C00002D2070696E20321F202020202753862EC1
1986−:107C10003181826388808182838485868727020000
1987−:107C200001802020525453202D2070696E20371F70
1988−:107C3000202020202753822E3181826388808182F8
1989−:107C40008384858687270200018020205278442083
1990−:107C50002D2070696E20361F202020202753812E72
1991−:107C600030534D8182638880818283848586872713
1992−:107C7000020001802020547844202D2070696E205D
1993−:107C8000331F202020202753802E30534D818263C4
1994−:107C90008880818283848586872702000180202056
1995−:107CA000444344202D2070696E2032301F20202054
1996−:107CB000202753852E318182638880818283848549
1997−:107CC000868727020001802020445352202D2070F7
1998−:107CD000696E2031311F202020202753842E3181CE
1999−:107CE0008263888081828384858687270200018061
2000−:107CF0002020435453202D2070696E20341F2020F3
2001−:107D000020202753832E318182638880818283845F
2002−:107D1000858687270200018020205249202D20706F
2003−:107D2000696E2032321F202020202753872E318178
2004−:107D30008263888081828384858687270200018010
2005−:107D40002020445452202D2070696E20362F381F79
2006−:107D5000202020202753862E3181826388808182D3
2007−:107D60008384858687270200018020205254532077
2008−:107D70002D2070696E20351F202020202753822E51
2009−:107D8000318182638880818283848586872702008F
2010−:107D900001802020527844202D2070696E20321FEF
2011−:107DA000202020202753812E30534D8182638880EC
2012−:107DB0008182838485868727020001802020547871
2013−:107DC00044202D2070696E20331F2020202027534F
2014−:107DD000802E30534D8182638880818283848586A2
2015−:107DE0008727020068049604B6033C040E04890346
2016−:107DF0005C03E20360088A08BE0738080E0895078E
2017−:107E00006C07E6071C057405FA05C404F004CC05EC
2018−:107E1000A00548057806C806420728065006180738
2019−:107E2000F006A0060000F408F408D40D04090409C3
2020−:107E30000409040942000C091C09E50D020014099B
2021−:107E40000409F40D43001C090C09050E0004040983
2022−:107E50001409120E2C092C092C092C0900003C09CC
2023−:107E60006C091E0E740974097409740900014C0927
2024−:107E70002C092D0E740974097409740900025C0937
2025−:107E80003C093D0E740974097409740900036C09F6
2026−:107E90004C094D0E7409740974097409FF002C090A
2027−:107EA0005C09000000058409EC095E0EF409F40980
2028−:107EB000F409F409000694097409680EAC0AAC0AC6
2029−:107EC000AC0AAC0A0007A4098409720EBC0ABC0AF9
2030−:107ED000BC0ABC0A0008B40994097C0ED40AD40A6E
2031−:107EE000D40AD40A000BC409A409830EFC0AFC0AB4
2032−:107EF000FC0AFC0A000CD409B409900E140B140BF4
2033−:107F0000140B140B0002E409C409A00E2C0B2C0B5B
2034−:107F10002C0B2C0B0400EC09D4090E00FF00740993
2035−:107F2000E40900008201FC09A40AAC0E8202040AE2
2036−:107F3000F409AF0E82030C0AFC09B20E8204140A83
2037−:107F4000040AB60E82051C0A0C0ABC0E8206240A1C
2038−:107F5000140AC00E82072C0A1C0AC40E8208340AB6
2039−:107F6000240AC80E82093C0A2C0ACC0E820A440A52
2040−:107F7000340AD10E82104C0A3C0AD60E820B540AE7
2041−:107F8000440ADB0E82115C0A4C0AE00E820C640A81
2042−:107F9000540AE50E82126C0A5C0AEA0E820D740A1B
2043−:107FA000640AEF0E820E7C0A6C0AF40E820F840AB9
2044−:107FB000740AFB0E82138C0A7C0A020F8214940A44
2045−:107FC000840A090F82159C0A8C0A100F8216A40AD3
2046−:107FD000940A170F8217F4099C0A1E0F8202B40A32
2047−:107FE000B40A260F8203AC0AAC0A2D0F8200C40A21
2048−:107FF000CC0A340F8201CC0ABC0A3F0F8202BC0AB1
2049−:10800000C40A4D0F8200DC0AF40A590F8201E40A07
2050−:10801000D40A630F8202EC0ADC0A6E0F8203F40AB0
2051−:10802000E40A7A0F8204D40AEC0A870F8200040B58
2052−:108030000C0B930F82010C0BFC0A9B0F8202FC0AB3
2053−:10804000040BA70F82001C0B240BB00F8201240B22
2054−:10805000140BB50F8202140B1C0BBE0F4400340B23
2055−:10806000A40B9C0144013C0B2C0BA3014402440BC8
2056−:10807000340BAA0144034C0B3C0BB1014404540BD8
2057−:10808000440BB80144055C0B4C0BBF014406640B68
2058−:10809000540BC60144076C0B5C0BCD014408740BF8
2059−:1080A000640BD40144097C0B6C0BDB01440A840B88
2060−:1080B000740BE201440B8C0B7C0BEA01440C940B17
2061−:1080C000840BF201440D9C0B8C0BFA01440EA40BA3
2062−:1080D000940B0202440F2C0B9C0B0A02171F0F2F4C
2063−:1080E0000000018078783A20747820637073202A29
2064−:1080F0002A2A2A2A0200018078783A20747820639C
2065−:108100007073202A2A2A2A2A0200018078783A20CD
2066−:10811000747820637073202A2A2A2A2A0200018098
2067−:1081200078783A20747820637073202A2A2A2A2AC1
2068−:10813000020001C078783A20726320637073202AAD
2069−:108140002A2A2A2A020001C078783A207263206322
2070−:108150007073202A2A2A2A2A020001C078783A203D
2071−:10816000726320637073202A2A2A2A2A020001C01F
2072−:1081700078783A20726320637073202A2A2A2A2A88
2073−:1081800002000180496E7374616C6C204C6F6F70DB
2074−:108190006261636B1F5072657373208020746F205F
2075−:1081A000737461727402000180204361626C652007
2076−:1081B000746F2052656D6F74651F50726573732004
2077−:1081C0008020746F20737461727402000180204CEF
2078−:1081D0006F63616C204C6F6F706261636B201F2056
2079−:1081E0002052756E6E696E67202E2E2E0200018061
2080−:1081F00052656D6F7465204C6F6F706261636B20A8
2081−:108200001F202052756E6E696E67202E2E2E020082
2082−:10821000018020496E74726E6C204C6F6F706261C9
2083−:10822000636B1F202052756E6E696E67202E2E2E96
2084−:10823000020001805472616E736D69742050617424
2085−:108240007465726E1F202052756E6E696E67202EE7
2086−:108250002E2E020001802020303A2027438000018A
2087−:10826000802020313A202743810001802020323AAB
2088−:10827000202743820001802020333A2027438300B7
2089−:1082800001802020343A20274384000180202035BB
2090−:108290003A202743850001802020363A2027438654
2091−:1082A0000001802020373A202743870001802020CA
2092−:1082B000383A202743880001802020393A2027437C
2093−:1082C000890001802031303A2027438A0001802034
2094−:1082D00031313A2027438B0001802031323A202768
2095−:1082E000438C0001802031333A2027438D000180E8
2096−:1082F0002031343A2027438E0001802031353A2046
2097−:1083000027438F002A2A204D61696E20204D656E1B
2098−:1083100075202A2A004D6F6E69746F72206120509B
2099−:108320006F7274004D6F6E69746F722061205369B3
2100−:10833000676E616C00457374696D617465204350AC
2101−:108340005300446961676E6F7374696373004C6FA7
2102−:1083500063616C204C6F6F706261636B0052656D7E
2103−:108360006F7465204C6F6F706261636B00496E744F
2104−:10837000726E6C204C6F6F706261636B005472613F
2105−:108380006E736D6974205061747465726E00426121
2106−:10839000756420526174650044617461204269749F
2107−:1083A000730053746F702042697473005061726976
2108−:1083B00074790044617461205061747465726E0058
2109−:1083C000547820466C6F7720436F6E74726F6C0028
2110−:1083D000506F7274204E756D6265720035300037D3
2111−:1083E0003500313130003133342E35003135300035
2112−:1083F00032303000333030003630300031323030FF
2113−:10840000003138303000323030300032343030001B
2114−:1084100033363030003438303000373230300039C5
2115−:108420003630300031392C3230300033382C343093
2116−:10843000300035362C3030300035372C36303000B7
2117−:1084400036342C3030300037362C38303000313173
2118−:10845000352C323030003720626974730038206266
2119−:1084600069747300312073746F7020626974003115
2120−:108470002E352073746F702062697473003220731C
2121−:10848000746F702062697473006E6F20706172691E
2122−:108490007479006F64642070617269747900657624
2123−:1084A000656E207061726974790073706163652014
2124−:1084B000706172697479006D61726B2070617269AC
2125−:1084C000747900436F6C756D6E7300426172626502
2126−:1084D0007220506F6C650055555555552E2E2E0047
2127−:1084E0004E6F6E6500586F6E2F586F66660043546E
2128−:1084F00053005072657373208020666F72206D6523
2129−:108500006E750028636F756E74696E672E2E2E2946
2130−:108510000000654E64204F6620436F4465000000F4
2131−:10852000000000000000000000000000000000004B
2132−:10853000000000000000000000000000000000003B
2133−:10854000000000000000000000000000000000002B
2134−:10855000000000000000000000000000000000001B
2135−:10856000000000000000000000000000000000000B
2136−:1085700000000000000000000000000000000000FB
2137−:1085800000000000000000000000000000000000EB
2138−:1085900000000000000000000000000000000000DB
2139−:1085A00000000000000000000000000000000000CB
2140−:1085B00000000000000000000000000000000000BB
2141−:1085C00000000000000000000000000000000000AB
2142−:1085D000000000000000000000000000000000009B
2143−:1085E000000000000000000000000000000000008B
2144−:1085F000000000000000000000000000000000007B
2145−:00000001FF
2146−/* Intelliport II loadware */
2147−/* -31232 bytes read from ff.lod */
include/linux/Kbuild+1−3
@@ -84,7 +84,6 @@ header-y += capability.h · 83 unmodified lines
8484 header-y += capi.h
8585 header-y += cciss_defs.h
8686 header-y += cciss_ioctl.h
87−header-y += cdk.h
8887 header-y += cdrom.h
8988 header-y += cgroupstats.h
9089 header-y += chio.h
@@ -93,7 +92,6 @@ header-y += cn_proc.h · 2 unmodified lines
9392 header-y += coda.h
9493 header-y += coda_psdev.h
9594 header-y += coff.h
96−header-y += comstats.h
9795 header-y += connector.h
9896 header-y += const.h
9997 header-y += cramfs_fs.h
@@ -140,7 +138,6 @@ header-y += fuse.h · 40 unmodified lines
140138 header-y += futex.h
141139 header-y += gameport.h
142140 header-y += gen_stats.h
143−header-y += generic_serial.h
144141 header-y += genetlink.h
145142 header-y += gfs2_ondisk.h
146143 header-y += gigaset_dev.h
@@ -372,6 +369,7 @@ header-y += tipc.h · 225 unmodified lines
372369 header-y += tipc_config.h
373370 header-y += toshiba.h
374371 header-y += tty.h
372+header-y += tty_flags.h
375373 header-y += types.h
376374 header-y += udf_fs_i.h
377375 header-y += udp.h
include/linux/amba/serial.h+0−1
@@ -205,7 +205,6 @@ struct amba_pl011_data { · 204 unmodified lines
205205 void *dma_tx_param;
206206 void (*init) (void);
207207 void (*exit) (void);
208− void (*reset) (void);
209208 };
210209 #endif
211210
include/linux/cd1400.h+0−292
@@ -1,292 +0,0 @@
1−/*****************************************************************************/
2−
3−/*
4− * cd1400.h -- cd1400 UART hardware info.
5− *
6− * Copyright (C) 1996-1998 Stallion Technologies
7− * Copyright (C) 1994-1996 Greg Ungerer.
8− *
9− * This program is free software; you can redistribute it and/or modify
10− * it under the terms of the GNU General Public License as published by
11− * the Free Software Foundation; either version 2 of the License, or
12− * (at your option) any later version.
13− *
14− * This program is distributed in the hope that it will be useful,
15− * but WITHOUT ANY WARRANTY; without even the implied warranty of
16− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17− * GNU General Public License for more details.
18− *
19− * You should have received a copy of the GNU General Public License
20− * along with this program; if not, write to the Free Software
21− * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22− */
23−
24−/*****************************************************************************/
25−#ifndef _CD1400_H
26−#define _CD1400_H
27−/*****************************************************************************/
28−
29−/*
30− * Define the number of async ports per cd1400 uart chip.
31− */
32−#define CD1400_PORTS 4
33−
34−/*
35− * Define the cd1400 uarts internal FIFO sizes.
36− */
37−#define CD1400_TXFIFOSIZE 12
38−#define CD1400_RXFIFOSIZE 12
39−
40−/*
41− * Local RX FIFO thresh hold level. Also define the RTS thresh hold
42− * based on the RX thresh hold.
43− */
44−#define FIFO_RXTHRESHOLD 6
45−#define FIFO_RTSTHRESHOLD 7
46−
47−/*****************************************************************************/
48−
49−/*
50− * Define the cd1400 register addresses. These are all the valid
51− * registers with the cd1400. Some are global, some virtual, some
52− * per port.
53− */
54−#define GFRCR 0x40
55−#define CAR 0x68
56−#define GCR 0x4b
57−#define SVRR 0x67
58−#define RICR 0x44
59−#define TICR 0x45
60−#define MICR 0x46
61−#define RIR 0x6b
62−#define TIR 0x6a
63−#define MIR 0x69
64−#define PPR 0x7e
65−
66−#define RIVR 0x43
67−#define TIVR 0x42
68−#define MIVR 0x41
69−#define TDR 0x63
70−#define RDSR 0x62
71−#define MISR 0x4c
72−#define EOSRR 0x60
73−
74−#define LIVR 0x18
75−#define CCR 0x05
76−#define SRER 0x06
77−#define COR1 0x08
78−#define COR2 0x09
79−#define COR3 0x0a
80−#define COR4 0x1e
81−#define COR5 0x1f
82−#define CCSR 0x0b
83−#define RDCR 0x0e
84−#define SCHR1 0x1a
85−#define SCHR2 0x1b
86−#define SCHR3 0x1c
87−#define SCHR4 0x1d
88−#define SCRL 0x22
89−#define SCRH 0x23
90−#define LNC 0x24
91−#define MCOR1 0x15
92−#define MCOR2 0x16
93−#define RTPR 0x21
94−#define MSVR1 0x6c
95−#define MSVR2 0x6d
96−#define PSVR 0x6f
97−#define RBPR 0x78
98−#define RCOR 0x7c
99−#define TBPR 0x72
100−#define TCOR 0x76
101−
102−/*****************************************************************************/
103−
104−/*
105− * Define the set of baud rate clock divisors.
106− */
107−#define CD1400_CLK0 8
108−#define CD1400_CLK1 32
109−#define CD1400_CLK2 128
110−#define CD1400_CLK3 512
111−#define CD1400_CLK4 2048
112−
113−#define CD1400_NUMCLKS 5
114−
115−/*****************************************************************************/
116−
117−/*
118− * Define the clock pre-scalar value to be a 5 ms clock. This should be
119− * OK for now. It would probably be better to make it 10 ms, but we
120− * can't fit that divisor into 8 bits!
121− */
122−#define PPR_SCALAR 244
123−
124−/*****************************************************************************/
125−
126−/*
127− * Define values used to set character size options.
128− */
129−#define COR1_CHL5 0x00
130−#define COR1_CHL6 0x01
131−#define COR1_CHL7 0x02
132−#define COR1_CHL8 0x03
133−
134−/*
135− * Define values used to set the number of stop bits.
136− */
137−#define COR1_STOP1 0x00
138−#define COR1_STOP15 0x04
139−#define COR1_STOP2 0x08
140−
141−/*
142− * Define values used to set the parity scheme in use.
143− */
144−#define COR1_PARNONE 0x00
145−#define COR1_PARFORCE 0x20
146−#define COR1_PARENB 0x40
147−#define COR1_PARIGNORE 0x10
148−
149−#define COR1_PARODD 0x80
150−#define COR1_PAREVEN 0x00
151−
152−#define COR2_IXM 0x80
153−#define COR2_TXIBE 0x40
154−#define COR2_ETC 0x20
155−#define COR2_LLM 0x10
156−#define COR2_RLM 0x08
157−#define COR2_RTSAO 0x04
158−#define COR2_CTSAE 0x02
159−
160−#define COR3_SCDRNG 0x80
161−#define COR3_SCD34 0x40
162−#define COR3_FCT 0x20
163−#define COR3_SCD12 0x10
164−
165−/*
166− * Define values used by COR4.
167− */
168−#define COR4_BRKINT 0x08
169−#define COR4_IGNBRK 0x18
170−
171−/*****************************************************************************/
172−
173−/*
174− * Define the modem control register values.
175− * Note that the actual hardware is a little different to the conventional
176− * pin names on the cd1400.
177− */
178−#define MSVR1_DTR 0x01
179−#define MSVR1_DSR 0x10
180−#define MSVR1_RI 0x20
181−#define MSVR1_CTS 0x40
182−#define MSVR1_DCD 0x80
183−
184−#define MSVR2_RTS 0x02
185−#define MSVR2_DSR 0x10
186−#define MSVR2_RI 0x20
187−#define MSVR2_CTS 0x40
188−#define MSVR2_DCD 0x80
189−
190−#define MCOR1_DCD 0x80
191−#define MCOR1_CTS 0x40
192−#define MCOR1_RI 0x20
193−#define MCOR1_DSR 0x10
194−
195−#define MCOR2_DCD 0x80
196−#define MCOR2_CTS 0x40
197−#define MCOR2_RI 0x20
198−#define MCOR2_DSR 0x10
199−
200−/*****************************************************************************/
201−
202−/*
203− * Define the bits used with the service (interrupt) enable register.
204− */
205−#define SRER_NNDT 0x01
206−#define SRER_TXEMPTY 0x02
207−#define SRER_TXDATA 0x04
208−#define SRER_RXDATA 0x10
209−#define SRER_MODEM 0x80
210−
211−/*****************************************************************************/
212−
213−/*
214− * Define operational commands for the command register.
215− */
216−#define CCR_RESET 0x80
217−#define CCR_CORCHANGE 0x4e
218−#define CCR_SENDCH 0x20
219−#define CCR_CHANCTRL 0x10
220−
221−#define CCR_TXENABLE (CCR_CHANCTRL | 0x08)
222−#define CCR_TXDISABLE (CCR_CHANCTRL | 0x04)
223−#define CCR_RXENABLE (CCR_CHANCTRL | 0x02)
224−#define CCR_RXDISABLE (CCR_CHANCTRL | 0x01)
225−
226−#define CCR_SENDSCHR1 (CCR_SENDCH | 0x01)
227−#define CCR_SENDSCHR2 (CCR_SENDCH | 0x02)
228−#define CCR_SENDSCHR3 (CCR_SENDCH | 0x03)
229−#define CCR_SENDSCHR4 (CCR_SENDCH | 0x04)
230−
231−#define CCR_RESETCHAN (CCR_RESET | 0x00)
232−#define CCR_RESETFULL (CCR_RESET | 0x01)
233−#define CCR_TXFLUSHFIFO (CCR_RESET | 0x02)
234−
235−#define CCR_MAXWAIT 10000
236−
237−/*****************************************************************************/
238−
239−/*
240− * Define the valid acknowledgement types (for hw ack cycle).
241− */
242−#define ACK_TYPMASK 0x07
243−#define ACK_TYPTX 0x02
244−#define ACK_TYPMDM 0x01
245−#define ACK_TYPRXGOOD 0x03
246−#define ACK_TYPRXBAD 0x07
247−
248−#define SVRR_RX 0x01
249−#define SVRR_TX 0x02
250−#define SVRR_MDM 0x04
251−
252−#define ST_OVERRUN 0x01
253−#define ST_FRAMING 0x02
254−#define ST_PARITY 0x04
255−#define ST_BREAK 0x08
256−#define ST_SCHAR1 0x10
257−#define ST_SCHAR2 0x20
258−#define ST_SCHAR3 0x30
259−#define ST_SCHAR4 0x40
260−#define ST_RANGE 0x70
261−#define ST_SCHARMASK 0x70
262−#define ST_TIMEOUT 0x80
263−
264−#define MISR_DCD 0x80
265−#define MISR_CTS 0x40
266−#define MISR_RI 0x20
267−#define MISR_DSR 0x10
268−
269−/*****************************************************************************/
270−
271−/*
272− * Defines for the CCSR status register.
273− */
274−#define CCSR_RXENABLED 0x80
275−#define CCSR_RXFLOWON 0x40
276−#define CCSR_RXFLOWOFF 0x20
277−#define CCSR_TXENABLED 0x08
278−#define CCSR_TXFLOWON 0x04
279−#define CCSR_TXFLOWOFF 0x02
280−
281−/*****************************************************************************/
282−
283−/*
284− * Define the embedded commands.
285− */
286−#define ETC_CMD 0x00
287−#define ETC_STARTBREAK 0x81
288−#define ETC_DELAY 0x82
289−#define ETC_STOPBREAK 0x83
290−
291−/*****************************************************************************/
292−#endif
include/linux/cdk.h+0−486
@@ -1,486 +0,0 @@
1−/*****************************************************************************/
2−
3−/*
4− * cdk.h -- CDK interface definitions.
5− *
6− * Copyright (C) 1996-1998 Stallion Technologies
7− * Copyright (C) 1994-1996 Greg Ungerer.
8− *
9− * This program is free software; you can redistribute it and/or modify
10− * it under the terms of the GNU General Public License as published by
11− * the Free Software Foundation; either version 2 of the License, or
12− * (at your option) any later version.
13− *
14− * This program is distributed in the hope that it will be useful,
15− * but WITHOUT ANY WARRANTY; without even the implied warranty of
16− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17− * GNU General Public License for more details.
18− *
19− * You should have received a copy of the GNU General Public License
20− * along with this program; if not, write to the Free Software
21− * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22− */
23−
24−/*****************************************************************************/
25−#ifndef _CDK_H
26−#define _CDK_H
27−/*****************************************************************************/
28−
29−#pragma pack(2)
30−
31−/*
32− * The following set of definitions is used to communicate with the
33− * shared memory interface of the Stallion intelligent multiport serial
34− * boards. The definitions in this file are taken directly from the
35− * document titled "Generic Stackable Interface, Downloader and
36− * Communications Development Kit".
37− */
38−
39−/*
40− * Define the set of important shared memory addresses. These are
41− * required to initialize the board and get things started. All of these
42− * addresses are relative to the start of the shared memory.
43− */
44−#define CDK_SIGADDR 0x200
45−#define CDK_FEATADDR 0x280
46−#define CDK_CDKADDR 0x300
47−#define CDK_RDYADDR 0x262
48−
49−#define CDK_ALIVEMARKER 13
50−
51−/*
52− * On hardware power up the ROMs located on the EasyConnection 8/64 will
53− * fill out the following signature information into shared memory. This
54− * way the host system can quickly determine that the board is present
55− * and is operational.
56− */
57−typedef struct cdkecpsig {
58− unsigned long magic;
59− unsigned short romver;
60− unsigned short cputype;
61− unsigned char panelid[8];
62−} cdkecpsig_t;
63−
64−#define ECP_MAGIC 0x21504345
65−
66−/*
67− * On hardware power up the ROMs located on the ONboard, Stallion and
68− * Brumbys will fill out the following signature information into shared
69− * memory. This way the host system can quickly determine that the board
70− * is present and is operational.
71− */
72−typedef struct cdkonbsig {
73− unsigned short magic0;
74− unsigned short magic1;
75− unsigned short magic2;
76− unsigned short magic3;
77− unsigned short romver;
78− unsigned short memoff;
79− unsigned short memseg;
80− unsigned short amask0;
81− unsigned short pic;
82− unsigned short status;
83− unsigned short btype;
84− unsigned short clkticks;
85− unsigned short clkspeed;
86− unsigned short amask1;
87− unsigned short amask2;
88−} cdkonbsig_t;
89−
90−#define ONB_MAGIC0 0xf2a7
91−#define ONB_MAGIC1 0xa149
92−#define ONB_MAGIC2 0x6352
93−#define ONB_MAGIC3 0xf121
94−
95−/*
96− * Define the feature area structure. The feature area is the set of
97− * startup parameters used by the slave image when it starts executing.
98− * They allow for the specification of buffer sizes, debug trace, etc.
99− */
100−typedef struct cdkfeature {
101− unsigned long debug;
102− unsigned long banner;
103− unsigned long etype;
104− unsigned long nrdevs;
105− unsigned long brdspec;
106− unsigned long txrqsize;
107− unsigned long rxrqsize;
108− unsigned long flags;
109−} cdkfeature_t;
110−
111−#define ETYP_DDK 0
112−#define ETYP_CDK 1
113−
114−/*
115− * Define the CDK header structure. This is the info that the slave
116− * environment sets up after it has been downloaded and started. It
117− * essentially provides a memory map for the shared memory interface.
118− */
119−typedef struct cdkhdr {
120− unsigned short command;
121− unsigned short status;
122− unsigned short port;
123− unsigned short mode;
124− unsigned long cmd_buf[14];
125− unsigned short alive_cnt;
126− unsigned short intrpt_mode;
127− unsigned char intrpt_id[8];
128− unsigned char ver_release;
129− unsigned char ver_modification;
130− unsigned char ver_fix;
131− unsigned char deadman_restart;
132− unsigned short deadman;
133− unsigned short nrdevs;
134− unsigned long memp;
135− unsigned long hostp;
136− unsigned long slavep;
137− unsigned char hostreq;
138− unsigned char slavereq;
139− unsigned char cmd_reserved[30];
140−} cdkhdr_t;
141−
142−#define MODE_DDK 0
143−#define MODE_CDK 1
144−
145−#define IMD_INTR 0x0
146−#define IMD_PPINTR 0x1
147−#define IMD_POLL 0xff
148−
149−/*
150− * Define the memory mapping structure. This structure is pointed to by
151− * the memp field in the stlcdkhdr struct. As many as these structures
152− * as required are laid out in shared memory to define how the rest of
153− * shared memory is divided up. There will be one for each port.
154− */
155−typedef struct cdkmem {
156− unsigned short dtype;
157− unsigned long offset;
158−} cdkmem_t;
159−
160−#define TYP_UNDEFINED 0x0
161−#define TYP_ASYNCTRL 0x1
162−#define TYP_ASYNC 0x20
163−#define TYP_PARALLEL 0x40
164−#define TYP_SYNCX21 0x60
165−
166−/*****************************************************************************/
167−
168−/*
169− * Following is a set of defines and structures used to actually deal
170− * with the serial ports on the board. Firstly is the set of commands
171− * that can be applied to ports.
172− */
173−#define ASYCMD (((unsigned long) 'a') << 8)
174−
175−#define A_NULL (ASYCMD | 0)
176−#define A_FLUSH (ASYCMD | 1)
177−#define A_BREAK (ASYCMD | 2)
178−#define A_GETPORT (ASYCMD | 3)
179−#define A_SETPORT (ASYCMD | 4)
180−#define A_SETPORTF (ASYCMD | 5)
181−#define A_SETPORTFTX (ASYCMD | 6)
182−#define A_SETPORTFRX (ASYCMD | 7)
183−#define A_GETSIGNALS (ASYCMD | 8)
184−#define A_SETSIGNALS (ASYCMD | 9)
185−#define A_SETSIGNALSF (ASYCMD | 10)
186−#define A_SETSIGNALSFTX (ASYCMD | 11)
187−#define A_SETSIGNALSFRX (ASYCMD | 12)
188−#define A_GETNOTIFY (ASYCMD | 13)
189−#define A_SETNOTIFY (ASYCMD | 14)
190−#define A_NOTIFY (ASYCMD | 15)
191−#define A_PORTCTRL (ASYCMD | 16)
192−#define A_GETSTATS (ASYCMD | 17)
193−#define A_RQSTATE (ASYCMD | 18)
194−#define A_FLOWSTATE (ASYCMD | 19)
195−#define A_CLEARSTATS (ASYCMD | 20)
196−
197−/*
198− * Define those arguments used for simple commands.
199− */
200−#define FLUSHRX 0x1
201−#define FLUSHTX 0x2
202−
203−#define BREAKON -1
204−#define BREAKOFF -2
205−
206−/*
207− * Define the port setting structure, and all those defines that go along
208− * with it. Basically this structure defines the characteristics of this
209− * port: baud rate, chars, parity, input/output char cooking etc.
210− */
211−typedef struct asyport {
212− unsigned long baudout;
213− unsigned long baudin;
214− unsigned long iflag;
215− unsigned long oflag;
216− unsigned long lflag;
217− unsigned long pflag;
218− unsigned long flow;
219− unsigned long spare1;
220− unsigned short vtime;
221− unsigned short vmin;
222− unsigned short txlo;
223− unsigned short txhi;
224− unsigned short rxlo;
225− unsigned short rxhi;
226− unsigned short rxhog;
227− unsigned short spare2;
228− unsigned char csize;
229− unsigned char stopbs;
230− unsigned char parity;
231− unsigned char stopin;
232− unsigned char startin;
233− unsigned char stopout;
234− unsigned char startout;
235− unsigned char parmark;
236− unsigned char brkmark;
237− unsigned char cc[11];
238−} asyport_t;
239−
240−#define PT_STOP1 0x0
241−#define PT_STOP15 0x1
242−#define PT_STOP2 0x2
243−
244−#define PT_NOPARITY 0x0
245−#define PT_ODDPARITY 0x1
246−#define PT_EVENPARITY 0x2
247−#define PT_MARKPARITY 0x3
248−#define PT_SPACEPARITY 0x4
249−
250−#define F_NONE 0x0
251−#define F_IXON 0x1
252−#define F_IXOFF 0x2
253−#define F_IXANY 0x4
254−#define F_IOXANY 0x8
255−#define F_RTSFLOW 0x10
256−#define F_CTSFLOW 0x20
257−#define F_DTRFLOW 0x40
258−#define F_DCDFLOW 0x80
259−#define F_DSROFLOW 0x100
260−#define F_DSRIFLOW 0x200
261−
262−#define FI_NORX 0x1
263−#define FI_RAW 0x2
264−#define FI_ISTRIP 0x4
265−#define FI_UCLC 0x8
266−#define FI_INLCR 0x10
267−#define FI_ICRNL 0x20
268−#define FI_IGNCR 0x40
269−#define FI_IGNBREAK 0x80
270−#define FI_DSCRDBREAK 0x100
271−#define FI_1MARKBREAK 0x200
272−#define FI_2MARKBREAK 0x400
273−#define FI_XCHNGBREAK 0x800
274−#define FI_IGNRXERRS 0x1000
275−#define FI_DSCDRXERRS 0x2000
276−#define FI_1MARKRXERRS 0x4000
277−#define FI_2MARKRXERRS 0x8000
278−#define FI_XCHNGRXERRS 0x10000
279−#define FI_DSCRDNULL 0x20000
280−
281−#define FO_OLCUC 0x1
282−#define FO_ONLCR 0x2
283−#define FO_OOCRNL 0x4
284−#define FO_ONOCR 0x8
285−#define FO_ONLRET 0x10
286−#define FO_ONL 0x20
287−#define FO_OBS 0x40
288−#define FO_OVT 0x80
289−#define FO_OFF 0x100
290−#define FO_OTAB1 0x200
291−#define FO_OTAB2 0x400
292−#define FO_OTAB3 0x800
293−#define FO_OCR1 0x1000
294−#define FO_OCR2 0x2000
295−#define FO_OCR3 0x4000
296−#define FO_OFILL 0x8000
297−#define FO_ODELL 0x10000
298−
299−#define P_RTSLOCK 0x1
300−#define P_CTSLOCK 0x2
301−#define P_MAPRTS 0x4
302−#define P_MAPCTS 0x8
303−#define P_LOOPBACK 0x10
304−#define P_DTRFOLLOW 0x20
305−#define P_FAKEDCD 0x40
306−
307−#define P_RXIMIN 0x10000
308−#define P_RXITIME 0x20000
309−#define P_RXTHOLD 0x40000
310−
311−/*
312− * Define a structure to communicate serial port signal and data state
313− * information.
314− */
315−typedef struct asysigs {
316− unsigned long data;
317− unsigned long signal;
318− unsigned long sigvalue;
319−} asysigs_t;
320−
321−#define DT_TXBUSY 0x1
322−#define DT_TXEMPTY 0x2
323−#define DT_TXLOW 0x4
324−#define DT_TXHIGH 0x8
325−#define DT_TXFULL 0x10
326−#define DT_TXHOG 0x20
327−#define DT_TXFLOWED 0x40
328−#define DT_TXBREAK 0x80
329−
330−#define DT_RXBUSY 0x100
331−#define DT_RXEMPTY 0x200
332−#define DT_RXLOW 0x400
333−#define DT_RXHIGH 0x800
334−#define DT_RXFULL 0x1000
335−#define DT_RXHOG 0x2000
336−#define DT_RXFLOWED 0x4000
337−#define DT_RXBREAK 0x8000
338−
339−#define SG_DTR 0x1
340−#define SG_DCD 0x2
341−#define SG_RTS 0x4
342−#define SG_CTS 0x8
343−#define SG_DSR 0x10
344−#define SG_RI 0x20
345−
346−/*
347− * Define the notification setting structure. This is used to tell the
348− * port what events we want to be informed about. Fields here use the
349− * same defines as for the asysigs structure above.
350− */
351−typedef struct asynotify {
352− unsigned long ctrl;
353− unsigned long data;
354− unsigned long signal;
355− unsigned long sigvalue;
356−} asynotify_t;
357−
358−/*
359− * Define the port control structure. It is used to do fine grain
360− * control operations on the port.
361− */
362−typedef struct {
363− unsigned long rxctrl;
364− unsigned long txctrl;
365− char rximdch;
366− char tximdch;
367− char spare1;
368− char spare2;
369−} asyctrl_t;
370−
371−#define CT_ENABLE 0x1
372−#define CT_DISABLE 0x2
373−#define CT_STOP 0x4
374−#define CT_START 0x8
375−#define CT_STARTFLOW 0x10
376−#define CT_STOPFLOW 0x20
377−#define CT_SENDCHR 0x40
378−
379−/*
380− * Define the stats structure kept for each port. This is a useful set
381− * of data collected for each port on the slave. The A_GETSTATS command
382− * is used to retrieve this data from the slave.
383− */
384−typedef struct asystats {
385− unsigned long opens;
386− unsigned long txchars;
387− unsigned long rxchars;
388− unsigned long txringq;
389− unsigned long rxringq;
390− unsigned long txmsgs;
391− unsigned long rxmsgs;
392− unsigned long txflushes;
393− unsigned long rxflushes;
394− unsigned long overruns;
395− unsigned long framing;
396− unsigned long parity;
397− unsigned long ringover;
398− unsigned long lost;
399− unsigned long rxstart;
400− unsigned long rxstop;
401− unsigned long txstart;
402− unsigned long txstop;
403− unsigned long dcdcnt;
404− unsigned long dtrcnt;
405− unsigned long ctscnt;
406− unsigned long rtscnt;
407− unsigned long dsrcnt;
408− unsigned long ricnt;
409− unsigned long txbreaks;
410− unsigned long rxbreaks;
411− unsigned long signals;
412− unsigned long state;
413− unsigned long hwid;
414−} asystats_t;
415−
416−/*****************************************************************************/
417−
418−/*
419− * All command and control communication with a device on the slave is
420− * via a control block in shared memory. Each device has its own control
421− * block, defined by the following structure. The control block allows
422− * the host to open, close and control the device on the slave.
423− */
424−typedef struct cdkctrl {
425− unsigned char open;
426− unsigned char close;
427− unsigned long openarg;
428− unsigned long closearg;
429− unsigned long cmd;
430− unsigned long status;
431− unsigned long args[32];
432−} cdkctrl_t;
433−
434−/*
435− * Each device on the slave passes data to and from the host via a ring
436− * queue in shared memory. Define a ring queue structure to hold the
437− * vital information about each ring queue. Two ring queues will be
438− * allocated for each port, one for receive data and one for transmit
439− * data.
440− */
441−typedef struct cdkasyrq {
442− unsigned long offset;
443− unsigned short size;
444− unsigned short head;
445− unsigned short tail;
446−} cdkasyrq_t;
447−
448−/*
449− * Each asynchronous port is defined in shared memory by the following
450− * structure. It contains a control block to command a device, and also
451− * the necessary data channel information as well.
452− */
453−typedef struct cdkasy {
454− cdkctrl_t ctrl;
455− unsigned short notify;
456− asynotify_t changed;
457− unsigned short receive;
458− cdkasyrq_t rxq;
459− unsigned short transmit;
460− cdkasyrq_t txq;
461−} cdkasy_t;
462−
463−#pragma pack()
464−
465−/*****************************************************************************/
466−
467−/*
468− * Define the set of ioctls used by the driver to do special things
469− * to the board. These include interrupting it, and initializing
470− * the driver after board startup and shutdown.
471− */
472−#include <linux/ioctl.h>
473−
474−#define STL_BINTR _IO('s',20)
475−#define STL_BSTART _IO('s',21)
476−#define STL_BSTOP _IO('s',22)
477−#define STL_BRESET _IO('s',23)
478−
479−/*
480− * Define a set of ioctl extensions, used to get at special stuff.
481− */
482−#define STL_GETPFLAG _IO('s',80)
483−#define STL_SETPFLAG _IO('s',81)
484−
485−/*****************************************************************************/
486−#endif
include/linux/comstats.h+0−119
@@ -1,119 +0,0 @@
1−/*****************************************************************************/
2−
3−/*
4− * comstats.h -- Serial Port Stats.
5− *
6− * Copyright (C) 1996-1998 Stallion Technologies
7− * Copyright (C) 1994-1996 Greg Ungerer.
8− *
9− * This program is free software; you can redistribute it and/or modify
10− * it under the terms of the GNU General Public License as published by
11− * the Free Software Foundation; either version 2 of the License, or
12− * (at your option) any later version.
13− *
14− * This program is distributed in the hope that it will be useful,
15− * but WITHOUT ANY WARRANTY; without even the implied warranty of
16− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17− * GNU General Public License for more details.
18− *
19− * You should have received a copy of the GNU General Public License
20− * along with this program; if not, write to the Free Software
21− * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22− */
23−
24−/*****************************************************************************/
25−#ifndef _COMSTATS_H
26−#define _COMSTATS_H
27−/*****************************************************************************/
28−
29−/*
30− * Serial port stats structure. The structure itself is UART
31− * independent, but some fields may be UART/driver specific (for
32− * example state).
33− */
34−
35−typedef struct {
36− unsigned long brd;
37− unsigned long panel;
38− unsigned long port;
39− unsigned long hwid;
40− unsigned long type;
41− unsigned long txtotal;
42− unsigned long rxtotal;
43− unsigned long txbuffered;
44− unsigned long rxbuffered;
45− unsigned long rxoverrun;
46− unsigned long rxparity;
47− unsigned long rxframing;
48− unsigned long rxlost;
49− unsigned long txbreaks;
50− unsigned long rxbreaks;
51− unsigned long txxon;
52− unsigned long txxoff;
53− unsigned long rxxon;
54− unsigned long rxxoff;
55− unsigned long txctson;
56− unsigned long txctsoff;
57− unsigned long rxrtson;
58− unsigned long rxrtsoff;
59− unsigned long modem;
60− unsigned long state;
61− unsigned long flags;
62− unsigned long ttystate;
63− unsigned long cflags;
64− unsigned long iflags;
65− unsigned long oflags;
66− unsigned long lflags;
67− unsigned long signals;
68−} comstats_t;
69−
70−
71−/*
72− * Board stats structure. Returns useful info about the board.
73− */
74−
75−#define COM_MAXPANELS 8
76−
77−typedef struct {
78− unsigned long panel;
79− unsigned long type;
80− unsigned long hwid;
81− unsigned long nrports;
82−} companel_t;
83−
84−typedef struct {
85− unsigned long brd;
86− unsigned long type;
87− unsigned long hwid;
88− unsigned long state;
89− unsigned long ioaddr;
90− unsigned long ioaddr2;
91− unsigned long memaddr;
92− unsigned long irq;
93− unsigned long nrpanels;
94− unsigned long nrports;
95− companel_t panels[COM_MAXPANELS];
96−} combrd_t;
97−
98−
99−/*
100− * Define the ioctl operations for stats stuff.
101− */
102−#include <linux/ioctl.h>
103−
104−#define COM_GETPORTSTATS _IO('c',30)
105−#define COM_CLRPORTSTATS _IO('c',31)
106−#define COM_GETBRDSTATS _IO('c',32)
107−
108−
109−/*
110− * Define the set of ioctls that give user level access to the
111− * private port, panel and board structures. The argument required
112− * will be driver dependent!
113− */
114−#define COM_READPORT _IO('c',40)
115−#define COM_READBOARD _IO('c',41)
116−#define COM_READPANEL _IO('c',42)
117−
118−/*****************************************************************************/
119−#endif
include/linux/generic_serial.h+0−35
@@ -1,35 +0,0 @@
1−/*
2− * generic_serial.h
3− *
4− * Copyright (C) 1998 R.E.Wolff@BitWizard.nl
5− *
6− * written for the SX serial driver.
7− *
8− * Version 0.1 -- December, 1998.
9− */
10−
11−#ifndef GENERIC_SERIAL_H
12−#define GENERIC_SERIAL_H
13−
14−#warning Use of this header is deprecated.
15−#warning Since nobody sets the constants defined here for you, you should not, in any case, use them. Including the header is thus pointless.
16−
17−/* Flags */
18−/* Warning: serial.h defines some ASYNC_ flags, they say they are "only"
19− used in serial.c, but they are also used in all other serial drivers.
20− Make sure they don't clash with these here... */
21−#define GS_TX_INTEN 0x00800000
22−#define GS_RX_INTEN 0x00400000
23−#define GS_ACTIVE 0x00200000
24−
25−#define GS_TYPE_NORMAL 1
26−
27−#define GS_DEBUG_FLUSH 0x00000001
28−#define GS_DEBUG_BTR 0x00000002
29−#define GS_DEBUG_TERMIOS 0x00000004
30−#define GS_DEBUG_STUFF 0x00000008
31−#define GS_DEBUG_CLOSE 0x00000010
32−#define GS_DEBUG_FLOW 0x00000020
33−#define GS_DEBUG_WRITE 0x00000040
34−
35−#endif
include/linux/istallion.h+0−123
@@ -1,123 +0,0 @@
1−/*****************************************************************************/
2−
3−/*
4− * istallion.h -- stallion intelligent multiport serial driver.
5− *
6− * Copyright (C) 1996-1998 Stallion Technologies
7− * Copyright (C) 1994-1996 Greg Ungerer.
8− *
9− * This program is free software; you can redistribute it and/or modify
10− * it under the terms of the GNU General Public License as published by
11− * the Free Software Foundation; either version 2 of the License, or
12− * (at your option) any later version.
13− *
14− * This program is distributed in the hope that it will be useful,
15− * but WITHOUT ANY WARRANTY; without even the implied warranty of
16− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17− * GNU General Public License for more details.
18− *
19− * You should have received a copy of the GNU General Public License
20− * along with this program; if not, write to the Free Software
21− * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22− */
23−
24−/*****************************************************************************/
25−#ifndef _ISTALLION_H
26−#define _ISTALLION_H
27−/*****************************************************************************/
28−
29−/*
30− * Define important driver constants here.
31− */
32−#define STL_MAXBRDS 4
33−#define STL_MAXPANELS 4
34−#define STL_MAXPORTS 64
35−#define STL_MAXCHANS (STL_MAXPORTS + 1)
36−#define STL_MAXDEVS (STL_MAXBRDS * STL_MAXPORTS)
37−
38−
39−/*
40− * Define a set of structures to hold all the board/panel/port info
41− * for our ports. These will be dynamically allocated as required at
42− * driver initialization time.
43− */
44−
45−/*
46− * Port and board structures to hold status info about each object.
47− * The board structure contains pointers to structures for each port
48− * connected to it. Panels are not distinguished here, since
49− * communication with the slave board will always be on a per port
50− * basis.
51− */
52−struct stliport {
53− unsigned long magic;
54− struct tty_port port;
55− unsigned int portnr;
56− unsigned int panelnr;
57− unsigned int brdnr;
58− unsigned long state;
59− unsigned int devnr;
60− int baud_base;
61− int custom_divisor;
62− int closing_wait;
63− int rc;
64− int argsize;
65− void *argp;
66− unsigned int rxmarkmsk;
67− wait_queue_head_t raw_wait;
68− struct asysigs asig;
69− unsigned long addr;
70− unsigned long rxoffset;
71− unsigned long txoffset;
72− unsigned long sigs;
73− unsigned long pflag;
74− unsigned int rxsize;
75− unsigned int txsize;
76− unsigned char reqbit;
77− unsigned char portidx;
78− unsigned char portbit;
79−};
80−
81−/*
82− * Use a structure of function pointers to do board level operations.
83− * These include, enable/disable, paging shared memory, interrupting, etc.
84− */
85−struct stlibrd {
86− unsigned long magic;
87− unsigned int brdnr;
88− unsigned int brdtype;
89− unsigned long state;
90− unsigned int nrpanels;
91− unsigned int nrports;
92− unsigned int nrdevs;
93− unsigned int iobase;
94− int iosize;
95− unsigned long memaddr;
96− void __iomem *membase;
97− unsigned long memsize;
98− int pagesize;
99− int hostoffset;
100− int slaveoffset;
101− int bitsize;
102− int enabval;
103− unsigned int panels[STL_MAXPANELS];
104− int panelids[STL_MAXPANELS];
105− void (*init)(struct stlibrd *brdp);
106− void (*enable)(struct stlibrd *brdp);
107− void (*reenable)(struct stlibrd *brdp);
108− void (*disable)(struct stlibrd *brdp);
109− void __iomem *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line);
110− void (*intr)(struct stlibrd *brdp);
111− void (*reset)(struct stlibrd *brdp);
112− struct stliport *ports[STL_MAXPORTS];
113−};
114−
115−
116−/*
117− * Define MAGIC numbers used for above structures.
118− */
119−#define STLI_PORTMAGIC 0xe671c7a1
120−#define STLI_BOARDMAGIC 0x4bc6c825
121−
122−/*****************************************************************************/
123−#endif
include/linux/kbd_kern.h+0−13
@@ -65,7 +65,6 @@ struct kbd_struct { · 64 unmodified lines
6565
6666 extern int kbd_init(void);
6767
68−extern unsigned char getledstate(void);
6968 extern void setledstate(struct kbd_struct *kbd, unsigned int led);
7069
7170 extern int do_poke_blanked_console;
@@ -145,16 +144,4 @@ void compute_shiftstate(void); · 73 unmodified lines
145144
146145 extern unsigned int keymap_count;
147146
148−/* console.c */
149−
150−static inline void con_schedule_flip(struct tty_struct *t)
151−{
152− unsigned long flags;
153− spin_lock_irqsave(&t->buf.lock, flags);
154− if (t->buf.tail != NULL)
155− t->buf.tail->commit = t->buf.tail->used;
156− spin_unlock_irqrestore(&t->buf.lock, flags);
157− schedule_work(&t->buf.work);
158−}
159−
160147 #endif
include/linux/platform_data/max310x.h+67−0
@@ -0,0 +1,67 @@
1+/*
2+ * Maxim (Dallas) MAX3107/8 serial driver
3+ *
4+ * Copyright (C) 2012 Alexander Shiyan <shc_work@mail.ru>
5+ *
6+ * Based on max3100.c, by Christian Pellegrin <chripell@evolware.org>
7+ * Based on max3110.c, by Feng Tang <feng.tang@intel.com>
8+ * Based on max3107.c, by Aavamobile
9+ *
10+ * This program is free software; you can redistribute it and/or modify
11+ * it under the terms of the GNU General Public License as published by
12+ * the Free Software Foundation; either version 2 of the License, or
13+ * (at your option) any later version.
14+ */
15+
16+#ifndef _MAX310X_H_
17+#define _MAX310X_H_
18+
19+/*
20+ * Example board initialization data:
21+ *
22+ * static struct max310x_pdata max3107_pdata = {
23+ * .driver_flags = MAX310X_EXT_CLK,
24+ * .uart_flags[0] = MAX310X_ECHO_SUPRESS | MAX310X_AUTO_DIR_CTRL,
25+ * .frequency = 3686400,
26+ * .gpio_base = -1,
27+ * };
28+ *
29+ * static struct spi_board_info spi_device_max3107[] = {
30+ * {
31+ * .modalias = "max3107",
32+ * .irq = IRQ_EINT3,
33+ * .bus_num = 1,
34+ * .chip_select = 1,
35+ * .platform_data = &max3107_pdata,
36+ * },
37+ * };
38+ */
39+
40+#define MAX310X_MAX_UARTS 1
41+
42+/* MAX310X platform data structure */
43+struct max310x_pdata {
44+ /* Flags global to driver */
45+ const u8 driver_flags:2;
46+#define MAX310X_EXT_CLK (0x00000001) /* External clock enable */
47+#define MAX310X_AUTOSLEEP (0x00000002) /* Enable AutoSleep mode */
48+ /* Flags global to UART port */
49+ const u8 uart_flags[MAX310X_MAX_UARTS];
50+#define MAX310X_LOOPBACK (0x00000001) /* Loopback mode enable */
51+#define MAX310X_ECHO_SUPRESS (0x00000002) /* Enable echo supress */
52+#define MAX310X_AUTO_DIR_CTRL (0x00000004) /* Enable Auto direction
53+ * control (RS-485)
54+ */
55+ /* Frequency (extrenal clock or crystal) */
56+ const int frequency;
57+ /* GPIO base number (can be negative) */
58+ const int gpio_base;
59+ /* Called during startup */
60+ void (*init)(void);
61+ /* Called before finish */
62+ void (*exit)(void);
63+ /* Suspend callback */
64+ void (*suspend)(int do_suspend);
65+};
66+
67+#endif
include/linux/platform_data/sccnxp.h+93−0
@@ -0,0 +1,93 @@
1+/*
2+ * NXP (Philips) SCC+++(SCN+++) serial driver
3+ *
4+ * Copyright (C) 2012 Alexander Shiyan <shc_work@mail.ru>
5+ *
6+ * Based on sc26xx.c, by Thomas Bogendörfer (tsbogend@alpha.franken.de)
7+ *
8+ * This program is free software; you can redistribute it and/or modify
9+ * it under the terms of the GNU General Public License as published by
10+ * the Free Software Foundation; either version 2 of the License, or
11+ * (at your option) any later version.
12+ */
13+
14+#ifndef __SCCNXP_H
15+#define __SCCNXP_H
16+
17+#define SCCNXP_MAX_UARTS 2
18+
19+/* Output lines */
20+#define LINE_OP0 1
21+#define LINE_OP1 2
22+#define LINE_OP2 3
23+#define LINE_OP3 4
24+#define LINE_OP4 5
25+#define LINE_OP5 6
26+#define LINE_OP6 7
27+#define LINE_OP7 8
28+
29+/* Input lines */
30+#define LINE_IP0 9
31+#define LINE_IP1 10
32+#define LINE_IP2 11
33+#define LINE_IP3 12
34+#define LINE_IP4 13
35+#define LINE_IP5 14
36+#define LINE_IP6 15
37+
38+/* Signals */
39+#define DTR_OP 0 /* DTR */
40+#define RTS_OP 4 /* RTS */
41+#define DSR_IP 8 /* DSR */
42+#define CTS_IP 12 /* CTS */
43+#define DCD_IP 16 /* DCD */
44+#define RNG_IP 20 /* RNG */
45+
46+#define DIR_OP 24 /* Special signal for control RS-485.
47+ * Goes high when transmit,
48+ * then goes low.
49+ */
50+
51+/* Routing control signal 'sig' to line 'line' */
52+#define MCTRL_SIG(sig, line) ((line) << (sig))
53+
54+/*
55+ * Example board initialization data:
56+ *
57+ * static struct resource sc2892_resources[] = {
58+ * DEFINE_RES_MEM(UART_PHYS_START, 0x10),
59+ * DEFINE_RES_IRQ(IRQ_EXT2),
60+ * };
61+ *
62+ * static struct sccnxp_pdata sc2892_info = {
63+ * .frequency = 3686400,
64+ * .mctrl_cfg[0] = MCTRL_SIG(DIR_OP, LINE_OP0),
65+ * .mctrl_cfg[1] = MCTRL_SIG(DIR_OP, LINE_OP1),
66+ * };
67+ *
68+ * static struct platform_device sc2892 = {
69+ * .name = "sc2892",
70+ * .id = -1,
71+ * .resource = sc2892_resources,
72+ * .num_resources = ARRAY_SIZE(sc2892_resources),
73+ * .dev = {
74+ * .platform_data = &sc2892_info,
75+ * },
76+ * };
77+ */
78+
79+/* SCCNXP platform data structure */
80+struct sccnxp_pdata {
81+ /* Frequency (extrenal clock or crystal) */
82+ int frequency;
83+ /* Shift for A0 line */
84+ const u8 reg_shift;
85+ /* Modem control lines configuration */
86+ const u32 mctrl_cfg[SCCNXP_MAX_UARTS];
87+ /* Called during startup */
88+ void (*init)(void);
89+ /* Called before finish */
90+ void (*exit)(void);
91+};
92+
93+#endif
include/linux/sc26198.h+0−533
@@ -1,533 +0,0 @@
1−/*****************************************************************************/
2−
3−/*
4− * sc26198.h -- SC26198 UART hardware info.
5− *
6− * Copyright (C) 1995-1998 Stallion Technologies
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; either version 2 of the License, or
11− * (at your option) any later version.
12− *
13− * This program is distributed in the hope that it will be useful,
14− * but WITHOUT ANY WARRANTY; without even the implied warranty of
15− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16− * GNU General Public License for more details.
17− *
18− * You should have received a copy of the GNU General Public License
19− * along with this program; if not, write to the Free Software
20− * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21− */
22−
23−/*****************************************************************************/
24−#ifndef _SC26198_H
25−#define _SC26198_H
26−/*****************************************************************************/
27−
28−/*
29− * Define the number of async ports per sc26198 uart device.
30− */
31−#define SC26198_PORTS 8
32−
33−/*
34− * Baud rate timing clocks. All derived from a master 14.7456 MHz clock.
35− */
36−#define SC26198_MASTERCLOCK 14745600L
37−#define SC26198_DCLK (SC26198_MASTERCLOCK)
38−#define SC26198_CCLK (SC26198_MASTERCLOCK / 2)
39−#define SC26198_BCLK (SC26198_MASTERCLOCK / 4)
40−
41−/*
42− * Define internal FIFO sizes for the 26198 ports.
43− */
44−#define SC26198_TXFIFOSIZE 16
45−#define SC26198_RXFIFOSIZE 16
46−
47−/*****************************************************************************/
48−
49−/*
50− * Global register definitions. These registers are global to each 26198
51− * device, not specific ports on it.
52− */
53−#define TSTR 0x0d
54−#define GCCR 0x0f
55−#define ICR 0x1b
56−#define WDTRCR 0x1d
57−#define IVR 0x1f
58−#define BRGTRUA 0x84
59−#define GPOSR 0x87
60−#define GPOC 0x8b
61−#define UCIR 0x8c
62−#define CIR 0x8c
63−#define BRGTRUB 0x8d
64−#define GRXFIFO 0x8e
65−#define GTXFIFO 0x8e
66−#define GCCR2 0x8f
67−#define BRGTRLA 0x94
68−#define GPOR 0x97
69−#define GPOD 0x9b
70−#define BRGTCR 0x9c
71−#define GICR 0x9c
72−#define BRGTRLB 0x9d
73−#define GIBCR 0x9d
74−#define GITR 0x9f
75−
76−/*
77− * Per port channel registers. These are the register offsets within
78− * the port address space, so need to have the port address (0 to 7)
79− * inserted in bit positions 4:6.
80− */
81−#define MR0 0x00
82−#define MR1 0x01
83−#define IOPCR 0x02
84−#define BCRBRK 0x03
85−#define BCRCOS 0x04
86−#define BCRX 0x06
87−#define BCRA 0x07
88−#define XONCR 0x08
89−#define XOFFCR 0x09
90−#define ARCR 0x0a
91−#define RXCSR 0x0c
92−#define TXCSR 0x0e
93−#define MR2 0x80
94−#define SR 0x81
95−#define SCCR 0x81
96−#define ISR 0x82
97−#define IMR 0x82
98−#define TXFIFO 0x83
99−#define RXFIFO 0x83
100−#define IPR 0x84
101−#define IOPIOR 0x85
102−#define XISR 0x86
103−
104−/*
105− * For any given port calculate the address to use to access a specified
106− * register. This is only used for unusual access, mostly this is done
107− * through the assembler access routines.
108− */
109−#define SC26198_PORTREG(port,reg) ((((port) & 0x07) << 4) | (reg))
110−
111−/*****************************************************************************/
112−
113−/*
114− * Global configuration control register bit definitions.
115− */
116−#define GCCR_NOACK 0x00
117−#define GCCR_IVRACK 0x02
118−#define GCCR_IVRCHANACK 0x04
119−#define GCCR_IVRTYPCHANACK 0x06
120−#define GCCR_ASYNCCYCLE 0x00
121−#define GCCR_SYNCCYCLE 0x40
122−
123−/*****************************************************************************/
124−
125−/*
126− * Mode register 0 bit definitions.
127− */
128−#define MR0_ADDRNONE 0x00
129−#define MR0_AUTOWAKE 0x01
130−#define MR0_AUTODOZE 0x02
131−#define MR0_AUTOWAKEDOZE 0x03
132−#define MR0_SWFNONE 0x00
133−#define MR0_SWFTX 0x04
134−#define MR0_SWFRX 0x08
135−#define MR0_SWFRXTX 0x0c
136−#define MR0_TXMASK 0x30
137−#define MR0_TXEMPTY 0x00
138−#define MR0_TXHIGH 0x10
139−#define MR0_TXHALF 0x20
140−#define MR0_TXRDY 0x00
141−#define MR0_ADDRNT 0x00
142−#define MR0_ADDRT 0x40
143−#define MR0_SWFNT 0x00
144−#define MR0_SWFT 0x80
145−
146−/*
147− * Mode register 1 bit definitions.
148− */
149−#define MR1_CS5 0x00
150−#define MR1_CS6 0x01
151−#define MR1_CS7 0x02
152−#define MR1_CS8 0x03
153−#define MR1_PAREVEN 0x00
154−#define MR1_PARODD 0x04
155−#define MR1_PARENB 0x00
156−#define MR1_PARFORCE 0x08
157−#define MR1_PARNONE 0x10
158−#define MR1_PARSPECIAL 0x18
159−#define MR1_ERRCHAR 0x00
160−#define MR1_ERRBLOCK 0x20
161−#define MR1_ISRUNMASKED 0x00
162−#define MR1_ISRMASKED 0x40
163−#define MR1_AUTORTS 0x80
164−
165−/*
166− * Mode register 2 bit definitions.
167− */
168−#define MR2_STOP1 0x00
169−#define MR2_STOP15 0x01
170−#define MR2_STOP2 0x02
171−#define MR2_STOP916 0x03
172−#define MR2_RXFIFORDY 0x00
173−#define MR2_RXFIFOHALF 0x04
174−#define MR2_RXFIFOHIGH 0x08
175−#define MR2_RXFIFOFULL 0x0c
176−#define MR2_AUTOCTS 0x10
177−#define MR2_TXRTS 0x20
178−#define MR2_MODENORM 0x00
179−#define MR2_MODEAUTOECHO 0x40
180−#define MR2_MODELOOP 0x80
181−#define MR2_MODEREMECHO 0xc0
182−
183−/*****************************************************************************/
184−
185−/*
186− * Baud Rate Generator (BRG) selector values.
187− */
188−#define BRG_50 0x00
189−#define BRG_75 0x01
190−#define BRG_150 0x02
191−#define BRG_200 0x03
192−#define BRG_300 0x04
193−#define BRG_450 0x05
194−#define BRG_600 0x06
195−#define BRG_900 0x07
196−#define BRG_1200 0x08
197−#define BRG_1800 0x09
198−#define BRG_2400 0x0a
199−#define BRG_3600 0x0b
200−#define BRG_4800 0x0c
201−#define BRG_7200 0x0d
202−#define BRG_9600 0x0e
203−#define BRG_14400 0x0f
204−#define BRG_19200 0x10
205−#define BRG_28200 0x11
206−#define BRG_38400 0x12
207−#define BRG_57600 0x13
208−#define BRG_115200 0x14
209−#define BRG_230400 0x15
210−#define BRG_GIN0 0x16
211−#define BRG_GIN1 0x17
212−#define BRG_CT0 0x18
213−#define BRG_CT1 0x19
214−#define BRG_RX2TX316 0x1b
215−#define BRG_RX2TX31 0x1c
216−
217−#define SC26198_MAXBAUD 921600
218−
219−/*****************************************************************************/
220−
221−/*
222− * Command register command definitions.
223− */
224−#define CR_NULL 0x04
225−#define CR_ADDRNORMAL 0x0c
226−#define CR_RXRESET 0x14
227−#define CR_TXRESET 0x1c
228−#define CR_CLEARRXERR 0x24
229−#define CR_BREAKRESET 0x2c
230−#define CR_TXSTARTBREAK 0x34
231−#define CR_TXSTOPBREAK 0x3c
232−#define CR_RTSON 0x44
233−#define CR_RTSOFF 0x4c
234−#define CR_ADDRINIT 0x5c
235−#define CR_RXERRBLOCK 0x6c
236−#define CR_TXSENDXON 0x84
237−#define CR_TXSENDXOFF 0x8c
238−#define CR_GANGXONSET 0x94
239−#define CR_GANGXOFFSET 0x9c
240−#define CR_GANGXONINIT 0xa4
241−#define CR_GANGXOFFINIT 0xac
242−#define CR_HOSTXON 0xb4
243−#define CR_HOSTXOFF 0xbc
244−#define CR_CANCELXOFF 0xc4
245−#define CR_ADDRRESET 0xdc
246−#define CR_RESETALLPORTS 0xf4
247−#define CR_RESETALL 0xfc
248−
249−#define CR_RXENABLE 0x01
250−#define CR_TXENABLE 0x02
251−
252−/*****************************************************************************/
253−
254−/*
255− * Channel status register.
256− */
257−#define SR_RXRDY 0x01
258−#define SR_RXFULL 0x02
259−#define SR_TXRDY 0x04
260−#define SR_TXEMPTY 0x08
261−#define SR_RXOVERRUN 0x10
262−#define SR_RXPARITY 0x20
263−#define SR_RXFRAMING 0x40
264−#define SR_RXBREAK 0x80
265−

268 more lines aren’t shown here.

include/linux/serial.h+3−78

This diff is large: its 103 lines aren’t shown here.

include/linux/serial167.h+0−157

This diff is large: its 158 lines aren’t shown here.

include/linux/serial_8250.h+30−3

This diff is large: its 42 lines aren’t shown here.

include/linux/serial_core.h+2−2

This diff is large: its 11 lines aren’t shown here.

include/linux/serial_reg.h+4−0

This diff is large: its 11 lines aren’t shown here.

include/linux/stallion.h+0−147

This diff is large: its 148 lines aren’t shown here.

include/linux/tty.h+59−33

This diff is large: its 188 lines aren’t shown here.

include/linux/tty_driver.h+34−13

This diff is large: its 105 lines aren’t shown here.

include/linux/tty_flags.h+78−0

This diff is large: its 79 lines aren’t shown here.

include/net/irda/ircomm_tty.h+1−16

This diff is large: its 51 lines aren’t shown here.

net/bluetooth/rfcomm/tty.c+5−5

This diff is large: its 32 lines aren’t shown here.

net/irda/ircomm/ircomm_param.c+0−5

This diff is large: its 19 lines aren’t shown here.

net/irda/ircomm/ircomm_tty.c+154−166

This diff is large: its 707 lines aren’t shown here.

net/irda/ircomm/ircomm_tty_attach.c+29−11

This diff is large: its 116 lines aren’t shown here.

net/irda/ircomm/ircomm_tty_ioctl.c+17−16

This diff is large: its 109 lines aren’t shown here.