istallion.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:141k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*****************************************************************************/
  2. /*
  3.  * istallion.c  -- stallion intelligent multiport serial driver.
  4.  *
  5.  * Copyright (C) 1996-1999  Stallion Technologies (support@stallion.oz.au).
  6.  * Copyright (C) 1994-1996  Greg Ungerer.
  7.  *
  8.  * This code is loosely based on the Linux serial driver, written by
  9.  * Linus Torvalds, Theodore T'so and others.
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24.  */
  25. /*****************************************************************************/
  26. #include <linux/config.h>
  27. #include <linux/module.h>
  28. #include <linux/slab.h>
  29. #include <linux/interrupt.h>
  30. #include <linux/tty.h>
  31. #include <linux/tty_flip.h>
  32. #include <linux/serial.h>
  33. #include <linux/cdk.h>
  34. #include <linux/comstats.h>
  35. #include <linux/version.h>
  36. #include <linux/istallion.h>
  37. #include <linux/ioport.h>
  38. #include <linux/delay.h>
  39. #include <linux/init.h>
  40. #include <linux/devfs_fs_kernel.h>
  41. #include <asm/io.h>
  42. #include <asm/uaccess.h>
  43. #ifdef CONFIG_PCI
  44. #include <linux/pci.h>
  45. #endif
  46. /*****************************************************************************/
  47. /*
  48.  * Define different board types. Not all of the following board types
  49.  * are supported by this driver. But I will use the standard "assigned"
  50.  * board numbers. Currently supported boards are abbreviated as:
  51.  * ECP = EasyConnection 8/64, ONB = ONboard, BBY = Brumby and
  52.  * STAL = Stallion.
  53.  */
  54. #define BRD_UNKNOWN 0
  55. #define BRD_STALLION 1
  56. #define BRD_BRUMBY4 2
  57. #define BRD_ONBOARD2 3
  58. #define BRD_ONBOARD 4
  59. #define BRD_BRUMBY8 5
  60. #define BRD_BRUMBY16 6
  61. #define BRD_ONBOARDE 7
  62. #define BRD_ONBOARD32 9
  63. #define BRD_ONBOARD2_32 10
  64. #define BRD_ONBOARDRS 11
  65. #define BRD_EASYIO 20
  66. #define BRD_ECH 21
  67. #define BRD_ECHMC 22
  68. #define BRD_ECP 23
  69. #define BRD_ECPE 24
  70. #define BRD_ECPMC 25
  71. #define BRD_ECHPCI 26
  72. #define BRD_ECH64PCI 27
  73. #define BRD_EASYIOPCI 28
  74. #define BRD_ECPPCI 29
  75. #define BRD_BRUMBY BRD_BRUMBY4
  76. /*
  77.  * Define a configuration structure to hold the board configuration.
  78.  * Need to set this up in the code (for now) with the boards that are
  79.  * to be configured into the system. This is what needs to be modified
  80.  * when adding/removing/modifying boards. Each line entry in the
  81.  * stli_brdconf[] array is a board. Each line contains io/irq/memory
  82.  * ranges for that board (as well as what type of board it is).
  83.  * Some examples:
  84.  * { BRD_ECP, 0x2a0, 0, 0xcc000, 0, 0 },
  85.  * This line will configure an EasyConnection 8/64 at io address 2a0,
  86.  * and shared memory address of cc000. Multiple EasyConnection 8/64
  87.  * boards can share the same shared memory address space. No interrupt
  88.  * is required for this board type.
  89.  * Another example:
  90.  * { BRD_ECPE, 0x5000, 0, 0x80000000, 0, 0 },
  91.  * This line will configure an EasyConnection 8/64 EISA in slot 5 and
  92.  * shared memory address of 0x80000000 (2 GByte). Multiple
  93.  * EasyConnection 8/64 EISA boards can share the same shared memory
  94.  * address space. No interrupt is required for this board type.
  95.  * Another example:
  96.  * { BRD_ONBOARD, 0x240, 0, 0xd0000, 0, 0 },
  97.  * This line will configure an ONboard (ISA type) at io address 240,
  98.  * and shared memory address of d0000. Multiple ONboards can share
  99.  * the same shared memory address space. No interrupt required.
  100.  * Another example:
  101.  * { BRD_BRUMBY4, 0x360, 0, 0xc8000, 0, 0 },
  102.  * This line will configure a Brumby board (any number of ports!) at
  103.  * io address 360 and shared memory address of c8000. All Brumby boards
  104.  * configured into a system must have their own separate io and memory
  105.  * addresses. No interrupt is required.
  106.  * Another example:
  107.  * { BRD_STALLION, 0x330, 0, 0xd0000, 0, 0 },
  108.  * This line will configure an original Stallion board at io address 330
  109.  * and shared memory address d0000 (this would only be valid for a "V4.0"
  110.  * or Rev.O Stallion board). All Stallion boards configured into the
  111.  * system must have their own separate io and memory addresses. No
  112.  * interrupt is required.
  113.  */
  114. typedef struct {
  115. int brdtype;
  116. int ioaddr1;
  117. int ioaddr2;
  118. unsigned long memaddr;
  119. int irq;
  120. int irqtype;
  121. } stlconf_t;
  122. static stlconf_t stli_brdconf[] = {
  123. /*{ BRD_ECP, 0x2a0, 0, 0xcc000, 0, 0 },*/
  124. };
  125. static int stli_nrbrds = sizeof(stli_brdconf) / sizeof(stlconf_t);
  126. /*
  127.  * There is some experimental EISA board detection code in this driver.
  128.  * By default it is disabled, but for those that want to try it out,
  129.  * then set the define below to be 1.
  130.  */
  131. #define STLI_EISAPROBE 0
  132. static devfs_handle_t devfs_handle;
  133. /*****************************************************************************/
  134. /*
  135.  * Define some important driver characteristics. Device major numbers
  136.  * allocated as per Linux Device Registry.
  137.  */
  138. #ifndef STL_SIOMEMMAJOR
  139. #define STL_SIOMEMMAJOR 28
  140. #endif
  141. #ifndef STL_SERIALMAJOR
  142. #define STL_SERIALMAJOR 24
  143. #endif
  144. #ifndef STL_CALLOUTMAJOR
  145. #define STL_CALLOUTMAJOR 25
  146. #endif
  147. #define STL_DRVTYPSERIAL 1
  148. #define STL_DRVTYPCALLOUT 2
  149. /*****************************************************************************/
  150. /*
  151.  * Define our local driver identity first. Set up stuff to deal with
  152.  * all the local structures required by a serial tty driver.
  153.  */
  154. static char *stli_drvtitle = "Stallion Intelligent Multiport Serial Driver";
  155. static char *stli_drvname = "istallion";
  156. static char *stli_drvversion = "5.6.0";
  157. static char *stli_serialname = "ttyE";
  158. static char *stli_calloutname = "cue";
  159. static struct tty_driver stli_serial;
  160. static struct tty_driver stli_callout;
  161. static struct tty_struct *stli_ttys[STL_MAXDEVS];
  162. static struct termios *stli_termios[STL_MAXDEVS];
  163. static struct termios *stli_termioslocked[STL_MAXDEVS];
  164. static int stli_refcount;
  165. /*
  166.  * We will need to allocate a temporary write buffer for chars that
  167.  * come direct from user space. The problem is that a copy from user
  168.  * space might cause a page fault (typically on a system that is
  169.  * swapping!). All ports will share one buffer - since if the system
  170.  * is already swapping a shared buffer won't make things any worse.
  171.  */
  172. static char *stli_tmpwritebuf;
  173. static DECLARE_MUTEX(stli_tmpwritesem);
  174. #define STLI_TXBUFSIZE 4096
  175. /*
  176.  * Use a fast local buffer for cooked characters. Typically a whole
  177.  * bunch of cooked characters come in for a port, 1 at a time. So we
  178.  * save those up into a local buffer, then write out the whole lot
  179.  * with a large memcpy. Just use 1 buffer for all ports, since its
  180.  * use it is only need for short periods of time by each port.
  181.  */
  182. static char *stli_txcookbuf;
  183. static int stli_txcooksize;
  184. static int stli_txcookrealsize;
  185. static struct tty_struct *stli_txcooktty;
  186. /*
  187.  * Define a local default termios struct. All ports will be created
  188.  * with this termios initially. Basically all it defines is a raw port
  189.  * at 9600 baud, 8 data bits, no parity, 1 stop bit.
  190.  */
  191. static struct termios stli_deftermios = {
  192. c_cflag: (B9600 | CS8 | CREAD | HUPCL | CLOCAL),
  193. c_cc: INIT_C_CC,
  194. };
  195. /*
  196.  * Define global stats structures. Not used often, and can be
  197.  * re-used for each stats call.
  198.  */
  199. static comstats_t stli_comstats;
  200. static combrd_t stli_brdstats;
  201. static asystats_t stli_cdkstats;
  202. static stlibrd_t stli_dummybrd;
  203. static stliport_t stli_dummyport;
  204. /*****************************************************************************/
  205. static stlibrd_t *stli_brds[STL_MAXBRDS];
  206. static int stli_shared;
  207. /*
  208.  * Per board state flags. Used with the state field of the board struct.
  209.  * Not really much here... All we need to do is keep track of whether
  210.  * the board has been detected, and whether it is actually running a slave
  211.  * or not.
  212.  */
  213. #define BST_FOUND 0x1
  214. #define BST_STARTED 0x2
  215. /*
  216.  * Define the set of port state flags. These are marked for internal
  217.  * state purposes only, usually to do with the state of communications
  218.  * with the slave. Most of them need to be updated atomically, so always
  219.  * use the bit setting operations (unless protected by cli/sti).
  220.  */
  221. #define ST_INITIALIZING 1
  222. #define ST_OPENING 2
  223. #define ST_CLOSING 3
  224. #define ST_CMDING 4
  225. #define ST_TXBUSY 5
  226. #define ST_RXING 6
  227. #define ST_DOFLUSHRX 7
  228. #define ST_DOFLUSHTX 8
  229. #define ST_DOSIGS 9
  230. #define ST_RXSTOP 10
  231. #define ST_GETSIGS 11
  232. /*
  233.  * Define an array of board names as printable strings. Handy for
  234.  * referencing boards when printing trace and stuff.
  235.  */
  236. static char *stli_brdnames[] = {
  237. "Unknown",
  238. "Stallion",
  239. "Brumby",
  240. "ONboard-MC",
  241. "ONboard",
  242. "Brumby",
  243. "Brumby",
  244. "ONboard-EI",
  245. (char *) NULL,
  246. "ONboard",
  247. "ONboard-MC",
  248. "ONboard-MC",
  249. (char *) NULL,
  250. (char *) NULL,
  251. (char *) NULL,
  252. (char *) NULL,
  253. (char *) NULL,
  254. (char *) NULL,
  255. (char *) NULL,
  256. (char *) NULL,
  257. "EasyIO",
  258. "EC8/32-AT",
  259. "EC8/32-MC",
  260. "EC8/64-AT",
  261. "EC8/64-EI",
  262. "EC8/64-MC",
  263. "EC8/32-PCI",
  264. "EC8/64-PCI",
  265. "EasyIO-PCI",
  266. "EC/RA-PCI",
  267. };
  268. /*****************************************************************************/
  269. #ifdef MODULE
  270. /*
  271.  * Define some string labels for arguments passed from the module
  272.  * load line. These allow for easy board definitions, and easy
  273.  * modification of the io, memory and irq resoucres.
  274.  */
  275. static char *board0[8];
  276. static char *board1[8];
  277. static char *board2[8];
  278. static char *board3[8];
  279. static char **stli_brdsp[] = {
  280. (char **) &board0,
  281. (char **) &board1,
  282. (char **) &board2,
  283. (char **) &board3
  284. };
  285. /*
  286.  * Define a set of common board names, and types. This is used to
  287.  * parse any module arguments.
  288.  */
  289. typedef struct stlibrdtype {
  290. char *name;
  291. int type;
  292. } stlibrdtype_t;
  293. static stlibrdtype_t stli_brdstr[] = {
  294. { "stallion", BRD_STALLION },
  295. { "1", BRD_STALLION },
  296. { "brumby", BRD_BRUMBY },
  297. { "brumby4", BRD_BRUMBY },
  298. { "brumby/4", BRD_BRUMBY },
  299. { "brumby-4", BRD_BRUMBY },
  300. { "brumby8", BRD_BRUMBY },
  301. { "brumby/8", BRD_BRUMBY },
  302. { "brumby-8", BRD_BRUMBY },
  303. { "brumby16", BRD_BRUMBY },
  304. { "brumby/16", BRD_BRUMBY },
  305. { "brumby-16", BRD_BRUMBY },
  306. { "2", BRD_BRUMBY },
  307. { "onboard2", BRD_ONBOARD2 },
  308. { "onboard-2", BRD_ONBOARD2 },
  309. { "onboard/2", BRD_ONBOARD2 },
  310. { "onboard-mc", BRD_ONBOARD2 },
  311. { "onboard/mc", BRD_ONBOARD2 },
  312. { "onboard-mca", BRD_ONBOARD2 },
  313. { "onboard/mca", BRD_ONBOARD2 },
  314. { "3", BRD_ONBOARD2 },
  315. { "onboard", BRD_ONBOARD },
  316. { "onboardat", BRD_ONBOARD },
  317. { "4", BRD_ONBOARD },
  318. { "onboarde", BRD_ONBOARDE },
  319. { "onboard-e", BRD_ONBOARDE },
  320. { "onboard/e", BRD_ONBOARDE },
  321. { "onboard-ei", BRD_ONBOARDE },
  322. { "onboard/ei", BRD_ONBOARDE },
  323. { "7", BRD_ONBOARDE },
  324. { "ecp", BRD_ECP },
  325. { "ecpat", BRD_ECP },
  326. { "ec8/64", BRD_ECP },
  327. { "ec8/64-at", BRD_ECP },
  328. { "ec8/64-isa", BRD_ECP },
  329. { "23", BRD_ECP },
  330. { "ecpe", BRD_ECPE },
  331. { "ecpei", BRD_ECPE },
  332. { "ec8/64-e", BRD_ECPE },
  333. { "ec8/64-ei", BRD_ECPE },
  334. { "24", BRD_ECPE },
  335. { "ecpmc", BRD_ECPMC },
  336. { "ec8/64-mc", BRD_ECPMC },
  337. { "ec8/64-mca", BRD_ECPMC },
  338. { "25", BRD_ECPMC },
  339. { "ecppci", BRD_ECPPCI },
  340. { "ec/ra", BRD_ECPPCI },
  341. { "ec/ra-pc", BRD_ECPPCI },
  342. { "ec/ra-pci", BRD_ECPPCI },
  343. { "29", BRD_ECPPCI },
  344. };
  345. /*
  346.  * Define the module agruments.
  347.  */
  348. MODULE_AUTHOR("Greg Ungerer");
  349. MODULE_DESCRIPTION("Stallion Intelligent Multiport Serial Driver");
  350. MODULE_LICENSE("GPL");
  351. MODULE_PARM(board0, "1-3s");
  352. MODULE_PARM_DESC(board0, "Board 0 config -> name[,ioaddr[,memaddr]");
  353. MODULE_PARM(board1, "1-3s");
  354. MODULE_PARM_DESC(board1, "Board 1 config -> name[,ioaddr[,memaddr]");
  355. MODULE_PARM(board2, "1-3s");
  356. MODULE_PARM_DESC(board2, "Board 2 config -> name[,ioaddr[,memaddr]");
  357. MODULE_PARM(board3, "1-3s");
  358. MODULE_PARM_DESC(board3, "Board 3 config -> name[,ioaddr[,memaddr]");
  359. #endif
  360. /*
  361.  * Set up a default memory address table for EISA board probing.
  362.  * The default addresses are all bellow 1Mbyte, which has to be the
  363.  * case anyway. They should be safe, since we only read values from
  364.  * them, and interrupts are disabled while we do it. If the higher
  365.  * memory support is compiled in then we also try probing around
  366.  * the 1Gb, 2Gb and 3Gb areas as well...
  367.  */
  368. static unsigned long stli_eisamemprobeaddrs[] = {
  369. 0xc0000,    0xd0000,    0xe0000,    0xf0000,
  370. 0x80000000, 0x80010000, 0x80020000, 0x80030000,
  371. 0x40000000, 0x40010000, 0x40020000, 0x40030000,
  372. 0xc0000000, 0xc0010000, 0xc0020000, 0xc0030000,
  373. 0xff000000, 0xff010000, 0xff020000, 0xff030000,
  374. };
  375. static int stli_eisamempsize = sizeof(stli_eisamemprobeaddrs) / sizeof(unsigned long);
  376. int stli_eisaprobe = STLI_EISAPROBE;
  377. /*
  378.  * Define the Stallion PCI vendor and device IDs.
  379.  */
  380. #ifdef CONFIG_PCI
  381. #ifndef PCI_VENDOR_ID_STALLION
  382. #define PCI_VENDOR_ID_STALLION 0x124d
  383. #endif
  384. #ifndef PCI_DEVICE_ID_ECRA
  385. #define PCI_DEVICE_ID_ECRA 0x0004
  386. #endif
  387. #endif
  388. static struct pci_device_id istallion_pci_tbl[] = {
  389. { PCI_VENDOR_ID_STALLION, PCI_DEVICE_ID_ECRA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
  390. { 0 }
  391. };
  392. MODULE_DEVICE_TABLE(pci, istallion_pci_tbl);
  393. /*****************************************************************************/
  394. /*
  395.  * Hardware configuration info for ECP boards. These defines apply
  396.  * to the directly accessible io ports of the ECP. There is a set of
  397.  * defines for each ECP board type, ISA, EISA, MCA and PCI.
  398.  */
  399. #define ECP_IOSIZE 4
  400. #define ECP_MEMSIZE (128 * 1024)
  401. #define ECP_PCIMEMSIZE (256 * 1024)
  402. #define ECP_ATPAGESIZE (4 * 1024)
  403. #define ECP_MCPAGESIZE (4 * 1024)
  404. #define ECP_EIPAGESIZE (64 * 1024)
  405. #define ECP_PCIPAGESIZE (64 * 1024)
  406. #define STL_EISAID 0x8c4e
  407. /*
  408.  * Important defines for the ISA class of ECP board.
  409.  */
  410. #define ECP_ATIREG 0
  411. #define ECP_ATCONFR 1
  412. #define ECP_ATMEMAR 2
  413. #define ECP_ATMEMPR 3
  414. #define ECP_ATSTOP 0x1
  415. #define ECP_ATINTENAB 0x10
  416. #define ECP_ATENABLE 0x20
  417. #define ECP_ATDISABLE 0x00
  418. #define ECP_ATADDRMASK 0x3f000
  419. #define ECP_ATADDRSHFT 12
  420. /*
  421.  * Important defines for the EISA class of ECP board.
  422.  */
  423. #define ECP_EIIREG 0
  424. #define ECP_EIMEMARL 1
  425. #define ECP_EICONFR 2
  426. #define ECP_EIMEMARH 3
  427. #define ECP_EIENABLE 0x1
  428. #define ECP_EIDISABLE 0x0
  429. #define ECP_EISTOP 0x4
  430. #define ECP_EIEDGE 0x00
  431. #define ECP_EILEVEL 0x80
  432. #define ECP_EIADDRMASKL 0x00ff0000
  433. #define ECP_EIADDRSHFTL 16
  434. #define ECP_EIADDRMASKH 0xff000000
  435. #define ECP_EIADDRSHFTH 24
  436. #define ECP_EIBRDENAB 0xc84
  437. #define ECP_EISAID 0x4
  438. /*
  439.  * Important defines for the Micro-channel class of ECP board.
  440.  * (It has a lot in common with the ISA boards.)
  441.  */
  442. #define ECP_MCIREG 0
  443. #define ECP_MCCONFR 1
  444. #define ECP_MCSTOP 0x20
  445. #define ECP_MCENABLE 0x80
  446. #define ECP_MCDISABLE 0x00
  447. /*
  448.  * Important defines for the PCI class of ECP board.
  449.  * (It has a lot in common with the other ECP boards.)
  450.  */
  451. #define ECP_PCIIREG 0
  452. #define ECP_PCICONFR 1
  453. #define ECP_PCISTOP 0x01
  454. /*
  455.  * Hardware configuration info for ONboard and Brumby boards. These
  456.  * defines apply to the directly accessible io ports of these boards.
  457.  */
  458. #define ONB_IOSIZE 16
  459. #define ONB_MEMSIZE (64 * 1024)
  460. #define ONB_ATPAGESIZE (64 * 1024)
  461. #define ONB_MCPAGESIZE (64 * 1024)
  462. #define ONB_EIMEMSIZE (128 * 1024)
  463. #define ONB_EIPAGESIZE (64 * 1024)
  464. /*
  465.  * Important defines for the ISA class of ONboard board.
  466.  */
  467. #define ONB_ATIREG 0
  468. #define ONB_ATMEMAR 1
  469. #define ONB_ATCONFR 2
  470. #define ONB_ATSTOP 0x4
  471. #define ONB_ATENABLE 0x01
  472. #define ONB_ATDISABLE 0x00
  473. #define ONB_ATADDRMASK 0xff0000
  474. #define ONB_ATADDRSHFT 16
  475. #define ONB_MEMENABLO 0
  476. #define ONB_MEMENABHI 0x02
  477. /*
  478.  * Important defines for the EISA class of ONboard board.
  479.  */
  480. #define ONB_EIIREG 0
  481. #define ONB_EIMEMARL 1
  482. #define ONB_EICONFR 2
  483. #define ONB_EIMEMARH 3
  484. #define ONB_EIENABLE 0x1
  485. #define ONB_EIDISABLE 0x0
  486. #define ONB_EISTOP 0x4
  487. #define ONB_EIEDGE 0x00
  488. #define ONB_EILEVEL 0x80
  489. #define ONB_EIADDRMASKL 0x00ff0000
  490. #define ONB_EIADDRSHFTL 16
  491. #define ONB_EIADDRMASKH 0xff000000
  492. #define ONB_EIADDRSHFTH 24
  493. #define ONB_EIBRDENAB 0xc84
  494. #define ONB_EISAID 0x1
  495. /*
  496.  * Important defines for the Brumby boards. They are pretty simple,
  497.  * there is not much that is programmably configurable.
  498.  */
  499. #define BBY_IOSIZE 16
  500. #define BBY_MEMSIZE (64 * 1024)
  501. #define BBY_PAGESIZE (16 * 1024)
  502. #define BBY_ATIREG 0
  503. #define BBY_ATCONFR 1
  504. #define BBY_ATSTOP 0x4
  505. /*
  506.  * Important defines for the Stallion boards. They are pretty simple,
  507.  * there is not much that is programmably configurable.
  508.  */
  509. #define STAL_IOSIZE 16
  510. #define STAL_MEMSIZE (64 * 1024)
  511. #define STAL_PAGESIZE (64 * 1024)
  512. /*
  513.  * Define the set of status register values for EasyConnection panels.
  514.  * The signature will return with the status value for each panel. From
  515.  * this we can determine what is attached to the board - before we have
  516.  * actually down loaded any code to it.
  517.  */
  518. #define ECH_PNLSTATUS 2
  519. #define ECH_PNL16PORT 0x20
  520. #define ECH_PNLIDMASK 0x07
  521. #define ECH_PNLXPID 0x40
  522. #define ECH_PNLINTRPEND 0x80
  523. /*
  524.  * Define some macros to do things to the board. Even those these boards
  525.  * are somewhat related there is often significantly different ways of
  526.  * doing some operation on it (like enable, paging, reset, etc). So each
  527.  * board class has a set of functions which do the commonly required
  528.  * operations. The macros below basically just call these functions,
  529.  * generally checking for a NULL function - which means that the board
  530.  * needs nothing done to it to achieve this operation!
  531.  */
  532. #define EBRDINIT(brdp)
  533. if (brdp->init != NULL)
  534. (* brdp->init)(brdp)
  535. #define EBRDENABLE(brdp)
  536. if (brdp->enable != NULL)
  537. (* brdp->enable)(brdp);
  538. #define EBRDDISABLE(brdp)
  539. if (brdp->disable != NULL)
  540. (* brdp->disable)(brdp);
  541. #define EBRDINTR(brdp)
  542. if (brdp->intr != NULL)
  543. (* brdp->intr)(brdp);
  544. #define EBRDRESET(brdp)
  545. if (brdp->reset != NULL)
  546. (* brdp->reset)(brdp);
  547. #define EBRDGETMEMPTR(brdp,offset)
  548. (* brdp->getmemptr)(brdp, offset, __LINE__)
  549. /*
  550.  * Define the maximal baud rate, and the default baud base for ports.
  551.  */
  552. #define STL_MAXBAUD 460800
  553. #define STL_BAUDBASE 115200
  554. #define STL_CLOSEDELAY (5 * HZ / 10)
  555. /*****************************************************************************/
  556. /*
  557.  * Define macros to extract a brd or port number from a minor number.
  558.  */
  559. #define MINOR2BRD(min) (((min) & 0xc0) >> 6)
  560. #define MINOR2PORT(min) ((min) & 0x3f)
  561. /*
  562.  * Define a baud rate table that converts termios baud rate selector
  563.  * into the actual baud rate value. All baud rate calculations are based
  564.  * on the actual baud rate required.
  565.  */
  566. static unsigned int stli_baudrates[] = {
  567. 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
  568. 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600
  569. };
  570. /*****************************************************************************/
  571. /*
  572.  * Define some handy local macros...
  573.  */
  574. #undef MIN
  575. #define MIN(a,b) (((a) <= (b)) ? (a) : (b))
  576. #undef TOLOWER
  577. #define TOLOWER(x) ((((x) >= 'A') && ((x) <= 'Z')) ? ((x) + 0x20) : (x))
  578. /*****************************************************************************/
  579. /*
  580.  * Prototype all functions in this driver!
  581.  */
  582. #ifdef MODULE
  583. int init_module(void);
  584. void cleanup_module(void);
  585. static void stli_argbrds(void);
  586. static int stli_parsebrd(stlconf_t *confp, char **argp);
  587. static unsigned long stli_atol(char *str);
  588. #endif
  589. int stli_init(void);
  590. static int stli_open(struct tty_struct *tty, struct file *filp);
  591. static void stli_close(struct tty_struct *tty, struct file *filp);
  592. static int stli_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count);
  593. static void stli_putchar(struct tty_struct *tty, unsigned char ch);
  594. static void stli_flushchars(struct tty_struct *tty);
  595. static int stli_writeroom(struct tty_struct *tty);
  596. static int stli_charsinbuffer(struct tty_struct *tty);
  597. static int stli_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg);
  598. static void stli_settermios(struct tty_struct *tty, struct termios *old);
  599. static void stli_throttle(struct tty_struct *tty);
  600. static void stli_unthrottle(struct tty_struct *tty);
  601. static void stli_stop(struct tty_struct *tty);
  602. static void stli_start(struct tty_struct *tty);
  603. static void stli_flushbuffer(struct tty_struct *tty);
  604. static void stli_breakctl(struct tty_struct *tty, int state);
  605. static void stli_waituntilsent(struct tty_struct *tty, int timeout);
  606. static void stli_sendxchar(struct tty_struct *tty, char ch);
  607. static void stli_hangup(struct tty_struct *tty);
  608. static int stli_portinfo(stlibrd_t *brdp, stliport_t *portp, int portnr, char *pos);
  609. static int stli_brdinit(stlibrd_t *brdp);
  610. static int stli_startbrd(stlibrd_t *brdp);
  611. static ssize_t stli_memread(struct file *fp, char *buf, size_t count, loff_t *offp);
  612. static ssize_t stli_memwrite(struct file *fp, const char *buf, size_t count, loff_t *offp);
  613. static int stli_memioctl(struct inode *ip, struct file *fp, unsigned int cmd, unsigned long arg);
  614. static void stli_brdpoll(stlibrd_t *brdp, volatile cdkhdr_t *hdrp);
  615. static void stli_poll(unsigned long arg);
  616. static int stli_hostcmd(stlibrd_t *brdp, stliport_t *portp);
  617. static int stli_initopen(stlibrd_t *brdp, stliport_t *portp);
  618. static int stli_rawopen(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait);
  619. static int stli_rawclose(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait);
  620. static int stli_waitcarrier(stlibrd_t *brdp, stliport_t *portp, struct file *filp);
  621. static void stli_dohangup(void *arg);
  622. static void stli_delay(int len);
  623. static int stli_setport(stliport_t *portp);
  624. static int stli_cmdwait(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback);
  625. static void stli_sendcmd(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback);
  626. static void stli_dodelaycmd(stliport_t *portp, volatile cdkctrl_t *cp);
  627. static void stli_mkasyport(stliport_t *portp, asyport_t *pp, struct termios *tiosp);
  628. static void stli_mkasysigs(asysigs_t *sp, int dtr, int rts);
  629. static long stli_mktiocm(unsigned long sigvalue);
  630. static void stli_read(stlibrd_t *brdp, stliport_t *portp);
  631. static void stli_getserial(stliport_t *portp, struct serial_struct *sp);
  632. static int stli_setserial(stliport_t *portp, struct serial_struct *sp);
  633. static int stli_getbrdstats(combrd_t *bp);
  634. static int stli_getportstats(stliport_t *portp, comstats_t *cp);
  635. static int stli_portcmdstats(stliport_t *portp);
  636. static int stli_clrportstats(stliport_t *portp, comstats_t *cp);
  637. static int stli_getportstruct(unsigned long arg);
  638. static int stli_getbrdstruct(unsigned long arg);
  639. static void *stli_memalloc(int len);
  640. static stlibrd_t *stli_allocbrd(void);
  641. static void stli_ecpinit(stlibrd_t *brdp);
  642. static void stli_ecpenable(stlibrd_t *brdp);
  643. static void stli_ecpdisable(stlibrd_t *brdp);
  644. static char *stli_ecpgetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  645. static void stli_ecpreset(stlibrd_t *brdp);
  646. static void stli_ecpintr(stlibrd_t *brdp);
  647. static void stli_ecpeiinit(stlibrd_t *brdp);
  648. static void stli_ecpeienable(stlibrd_t *brdp);
  649. static void stli_ecpeidisable(stlibrd_t *brdp);
  650. static char *stli_ecpeigetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  651. static void stli_ecpeireset(stlibrd_t *brdp);
  652. static void stli_ecpmcenable(stlibrd_t *brdp);
  653. static void stli_ecpmcdisable(stlibrd_t *brdp);
  654. static char *stli_ecpmcgetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  655. static void stli_ecpmcreset(stlibrd_t *brdp);
  656. static void stli_ecppciinit(stlibrd_t *brdp);
  657. static char *stli_ecppcigetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  658. static void stli_ecppcireset(stlibrd_t *brdp);
  659. static void stli_onbinit(stlibrd_t *brdp);
  660. static void stli_onbenable(stlibrd_t *brdp);
  661. static void stli_onbdisable(stlibrd_t *brdp);
  662. static char *stli_onbgetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  663. static void stli_onbreset(stlibrd_t *brdp);
  664. static void stli_onbeinit(stlibrd_t *brdp);
  665. static void stli_onbeenable(stlibrd_t *brdp);
  666. static void stli_onbedisable(stlibrd_t *brdp);
  667. static char *stli_onbegetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  668. static void stli_onbereset(stlibrd_t *brdp);
  669. static void stli_bbyinit(stlibrd_t *brdp);
  670. static char *stli_bbygetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  671. static void stli_bbyreset(stlibrd_t *brdp);
  672. static void stli_stalinit(stlibrd_t *brdp);
  673. static char *stli_stalgetmemptr(stlibrd_t *brdp, unsigned long offset, int line);
  674. static void stli_stalreset(stlibrd_t *brdp);
  675. static stliport_t *stli_getport(int brdnr, int panelnr, int portnr);
  676. static inline int stli_initbrds(void);
  677. static inline int stli_initecp(stlibrd_t *brdp);
  678. static inline int stli_initonb(stlibrd_t *brdp);
  679. static inline int stli_findeisabrds(void);
  680. static inline int stli_eisamemprobe(stlibrd_t *brdp);
  681. static inline int stli_initports(stlibrd_t *brdp);
  682. static inline int stli_getbrdnr(void);
  683. #ifdef CONFIG_PCI
  684. static inline int stli_findpcibrds(void);
  685. static inline int stli_initpcibrd(int brdtype, struct pci_dev *devp);
  686. #endif
  687. /*****************************************************************************/
  688. /*
  689.  * Define the driver info for a user level shared memory device. This
  690.  * device will work sort of like the /dev/kmem device - except that it
  691.  * will give access to the shared memory on the Stallion intelligent
  692.  * board. This is also a very useful debugging tool.
  693.  */
  694. static struct file_operations stli_fsiomem = {
  695. owner: THIS_MODULE,
  696. read: stli_memread,
  697. write: stli_memwrite,
  698. ioctl: stli_memioctl,
  699. };
  700. /*****************************************************************************/
  701. /*
  702.  * Define a timer_list entry for our poll routine. The slave board
  703.  * is polled every so often to see if anything needs doing. This is
  704.  * much cheaper on host cpu than using interrupts. It turns out to
  705.  * not increase character latency by much either...
  706.  */
  707. static struct timer_list stli_timerlist = {
  708. function: stli_poll
  709. };
  710. static int stli_timeron;
  711. /*
  712.  * Define the calculation for the timeout routine.
  713.  */
  714. #define STLI_TIMEOUT (jiffies + 1)
  715. /*****************************************************************************/
  716. #ifdef MODULE
  717. /*
  718.  * Loadable module initialization stuff.
  719.  */
  720. int init_module()
  721. {
  722. unsigned long flags;
  723. #if DEBUG
  724. printk("init_module()n");
  725. #endif
  726. save_flags(flags);
  727. cli();
  728. stli_init();
  729. restore_flags(flags);
  730. return(0);
  731. }
  732. /*****************************************************************************/
  733. void cleanup_module()
  734. {
  735. stlibrd_t *brdp;
  736. stliport_t *portp;
  737. unsigned long flags;
  738. int i, j;
  739. #if DEBUG
  740. printk("cleanup_module()n");
  741. #endif
  742. printk(KERN_INFO "Unloading %s: version %sn", stli_drvtitle,
  743. stli_drvversion);
  744. save_flags(flags);
  745. cli();
  746. /*
  747.  * Free up all allocated resources used by the ports. This includes
  748.  * memory and interrupts.
  749.  */
  750. if (stli_timeron) {
  751. stli_timeron = 0;
  752. del_timer(&stli_timerlist);
  753. }
  754. i = tty_unregister_driver(&stli_serial);
  755. j = tty_unregister_driver(&stli_callout);
  756. if (i || j) {
  757. printk("STALLION: failed to un-register tty driver, "
  758. "errno=%d,%dn", -i, -j);
  759. restore_flags(flags);
  760. return;
  761. }
  762. devfs_unregister (devfs_handle);
  763. if ((i = devfs_unregister_chrdev(STL_SIOMEMMAJOR, "staliomem")))
  764. printk("STALLION: failed to un-register serial memory device, "
  765. "errno=%dn", -i);
  766. if (stli_tmpwritebuf != (char *) NULL)
  767. kfree(stli_tmpwritebuf);
  768. if (stli_txcookbuf != (char *) NULL)
  769. kfree(stli_txcookbuf);
  770. for (i = 0; (i < stli_nrbrds); i++) {
  771. if ((brdp = stli_brds[i]) == (stlibrd_t *) NULL)
  772. continue;
  773. for (j = 0; (j < STL_MAXPORTS); j++) {
  774. portp = brdp->ports[j];
  775. if (portp != (stliport_t *) NULL) {
  776. if (portp->tty != (struct tty_struct *) NULL)
  777. tty_hangup(portp->tty);
  778. kfree(portp);
  779. }
  780. }
  781. iounmap(brdp->membase);
  782. if (brdp->iosize > 0)
  783. release_region(brdp->iobase, brdp->iosize);
  784. kfree(brdp);
  785. stli_brds[i] = (stlibrd_t *) NULL;
  786. }
  787. restore_flags(flags);
  788. }
  789. /*****************************************************************************/
  790. /*
  791.  * Check for any arguments passed in on the module load command line.
  792.  */
  793. static void stli_argbrds()
  794. {
  795. stlconf_t conf;
  796. stlibrd_t *brdp;
  797. int nrargs, i;
  798. #if DEBUG
  799. printk("stli_argbrds()n");
  800. #endif
  801. nrargs = sizeof(stli_brdsp) / sizeof(char **);
  802. for (i = stli_nrbrds; (i < nrargs); i++) {
  803. memset(&conf, 0, sizeof(conf));
  804. if (stli_parsebrd(&conf, stli_brdsp[i]) == 0)
  805. continue;
  806. if ((brdp = stli_allocbrd()) == (stlibrd_t *) NULL)
  807. continue;
  808. stli_nrbrds = i + 1;
  809. brdp->brdnr = i;
  810. brdp->brdtype = conf.brdtype;
  811. brdp->iobase = conf.ioaddr1;
  812. brdp->memaddr = conf.memaddr;
  813. stli_brdinit(brdp);
  814. }
  815. }
  816. /*****************************************************************************/
  817. /*
  818.  * Convert an ascii string number into an unsigned long.
  819.  */
  820. static unsigned long stli_atol(char *str)
  821. {
  822. unsigned long val;
  823. int base, c;
  824. char *sp;
  825. val = 0;
  826. sp = str;
  827. if ((*sp == '0') && (*(sp+1) == 'x')) {
  828. base = 16;
  829. sp += 2;
  830. } else if (*sp == '0') {
  831. base = 8;
  832. sp++;
  833. } else {
  834. base = 10;
  835. }
  836. for (; (*sp != 0); sp++) {
  837. c = (*sp > '9') ? (TOLOWER(*sp) - 'a' + 10) : (*sp - '0');
  838. if ((c < 0) || (c >= base)) {
  839. printk("STALLION: invalid argument %sn", str);
  840. val = 0;
  841. break;
  842. }
  843. val = (val * base) + c;
  844. }
  845. return(val);
  846. }
  847. /*****************************************************************************/
  848. /*
  849.  * Parse the supplied argument string, into the board conf struct.
  850.  */
  851. static int stli_parsebrd(stlconf_t *confp, char **argp)
  852. {
  853. char *sp;
  854. int nrbrdnames, i;
  855. #if DEBUG
  856. printk("stli_parsebrd(confp=%x,argp=%x)n", (int) confp, (int) argp);
  857. #endif
  858. if ((argp[0] == (char *) NULL) || (*argp[0] == 0))
  859. return(0);
  860. for (sp = argp[0], i = 0; ((*sp != 0) && (i < 25)); sp++, i++)
  861. *sp = TOLOWER(*sp);
  862. nrbrdnames = sizeof(stli_brdstr) / sizeof(stlibrdtype_t);
  863. for (i = 0; (i < nrbrdnames); i++) {
  864. if (strcmp(stli_brdstr[i].name, argp[0]) == 0)
  865. break;
  866. }
  867. if (i >= nrbrdnames) {
  868. printk("STALLION: unknown board name, %s?n", argp[0]);
  869. return(0);
  870. }
  871. confp->brdtype = stli_brdstr[i].type;
  872. if ((argp[1] != (char *) NULL) && (*argp[1] != 0))
  873. confp->ioaddr1 = stli_atol(argp[1]);
  874. if ((argp[2] != (char *) NULL) && (*argp[2] != 0))
  875. confp->memaddr = stli_atol(argp[2]);
  876. return(1);
  877. }
  878. #endif
  879. /*****************************************************************************/
  880. /*
  881.  * Local driver kernel malloc routine.
  882.  */
  883. static void *stli_memalloc(int len)
  884. {
  885. return((void *) kmalloc(len, GFP_KERNEL));
  886. }
  887. /*****************************************************************************/
  888. static int stli_open(struct tty_struct *tty, struct file *filp)
  889. {
  890. stlibrd_t *brdp;
  891. stliport_t *portp;
  892. unsigned int minordev;
  893. int brdnr, portnr, rc;
  894. #if DEBUG
  895. printk("stli_open(tty=%x,filp=%x): device=%xn", (int) tty,
  896. (int) filp, tty->device);
  897. #endif
  898. minordev = MINOR(tty->device);
  899. brdnr = MINOR2BRD(minordev);
  900. if (brdnr >= stli_nrbrds)
  901. return(-ENODEV);
  902. brdp = stli_brds[brdnr];
  903. if (brdp == (stlibrd_t *) NULL)
  904. return(-ENODEV);
  905. if ((brdp->state & BST_STARTED) == 0)
  906. return(-ENODEV);
  907. portnr = MINOR2PORT(minordev);
  908. if ((portnr < 0) || (portnr > brdp->nrports))
  909. return(-ENODEV);
  910. portp = brdp->ports[portnr];
  911. if (portp == (stliport_t *) NULL)
  912. return(-ENODEV);
  913. if (portp->devnr < 1)
  914. return(-ENODEV);
  915. MOD_INC_USE_COUNT;
  916. /*
  917.  * Check if this port is in the middle of closing. If so then wait
  918.  * until it is closed then return error status based on flag settings.
  919.  * The sleep here does not need interrupt protection since the wakeup
  920.  * for it is done with the same context.
  921.  */
  922. if (portp->flags & ASYNC_CLOSING) {
  923. interruptible_sleep_on(&portp->close_wait);
  924. if (portp->flags & ASYNC_HUP_NOTIFY)
  925. return(-EAGAIN);
  926. return(-ERESTARTSYS);
  927. }
  928. /*
  929.  * On the first open of the device setup the port hardware, and
  930.  * initialize the per port data structure. Since initializing the port
  931.  * requires several commands to the board we will need to wait for any
  932.  * other open that is already initializing the port.
  933.  */
  934. portp->tty = tty;
  935. tty->driver_data = portp;
  936. portp->refcount++;
  937. while (test_bit(ST_INITIALIZING, &portp->state)) {
  938. if (signal_pending(current))
  939. return(-ERESTARTSYS);
  940. interruptible_sleep_on(&portp->raw_wait);
  941. }
  942. if ((portp->flags & ASYNC_INITIALIZED) == 0) {
  943. set_bit(ST_INITIALIZING, &portp->state);
  944. if ((rc = stli_initopen(brdp, portp)) >= 0) {
  945. portp->flags |= ASYNC_INITIALIZED;
  946. clear_bit(TTY_IO_ERROR, &tty->flags);
  947. }
  948. clear_bit(ST_INITIALIZING, &portp->state);
  949. wake_up_interruptible(&portp->raw_wait);
  950. if (rc < 0)
  951. return(rc);
  952. }
  953. /*
  954.  * Check if this port is in the middle of closing. If so then wait
  955.  * until it is closed then return error status, based on flag settings.
  956.  * The sleep here does not need interrupt protection since the wakeup
  957.  * for it is done with the same context.
  958.  */
  959. if (portp->flags & ASYNC_CLOSING) {
  960. interruptible_sleep_on(&portp->close_wait);
  961. if (portp->flags & ASYNC_HUP_NOTIFY)
  962. return(-EAGAIN);
  963. return(-ERESTARTSYS);
  964. }
  965. /*
  966.  * Based on type of open being done check if it can overlap with any
  967.  * previous opens still in effect. If we are a normal serial device
  968.  * then also we might have to wait for carrier.
  969.  */
  970. if (tty->driver.subtype == STL_DRVTYPCALLOUT) {
  971. if (portp->flags & ASYNC_NORMAL_ACTIVE)
  972. return(-EBUSY);
  973. if (portp->flags & ASYNC_CALLOUT_ACTIVE) {
  974. if ((portp->flags & ASYNC_SESSION_LOCKOUT) &&
  975.     (portp->session != current->session))
  976. return(-EBUSY);
  977. if ((portp->flags & ASYNC_PGRP_LOCKOUT) &&
  978.     (portp->pgrp != current->pgrp))
  979. return(-EBUSY);
  980. }
  981. portp->flags |= ASYNC_CALLOUT_ACTIVE;
  982. } else {
  983. if (filp->f_flags & O_NONBLOCK) {
  984. if (portp->flags & ASYNC_CALLOUT_ACTIVE)
  985. return(-EBUSY);
  986. } else {
  987. if ((rc = stli_waitcarrier(brdp, portp, filp)) != 0)
  988. return(rc);
  989. }
  990. portp->flags |= ASYNC_NORMAL_ACTIVE;
  991. }
  992. if ((portp->refcount == 1) && (portp->flags & ASYNC_SPLIT_TERMIOS)) {
  993. if (tty->driver.subtype == STL_DRVTYPSERIAL)
  994. *tty->termios = portp->normaltermios;
  995. else
  996. *tty->termios = portp->callouttermios;
  997. stli_setport(portp);
  998. }
  999. portp->session = current->session;
  1000. portp->pgrp = current->pgrp;
  1001. return(0);
  1002. }
  1003. /*****************************************************************************/
  1004. static void stli_close(struct tty_struct *tty, struct file *filp)
  1005. {
  1006. stlibrd_t *brdp;
  1007. stliport_t *portp;
  1008. unsigned long flags;
  1009. #if DEBUG
  1010. printk("stli_close(tty=%x,filp=%x)n", (int) tty, (int) filp);
  1011. #endif
  1012. portp = tty->driver_data;
  1013. if (portp == (stliport_t *) NULL)
  1014. return;
  1015. save_flags(flags);
  1016. cli();
  1017. if (tty_hung_up_p(filp)) {
  1018. MOD_DEC_USE_COUNT;
  1019. restore_flags(flags);
  1020. return;
  1021. }
  1022. if ((tty->count == 1) && (portp->refcount != 1))
  1023. portp->refcount = 1;
  1024. if (portp->refcount-- > 1) {
  1025. MOD_DEC_USE_COUNT;
  1026. restore_flags(flags);
  1027. return;
  1028. }
  1029. portp->flags |= ASYNC_CLOSING;
  1030. if (portp->flags & ASYNC_NORMAL_ACTIVE)
  1031. portp->normaltermios = *tty->termios;
  1032. if (portp->flags & ASYNC_CALLOUT_ACTIVE)
  1033. portp->callouttermios = *tty->termios;
  1034. /*
  1035.  * May want to wait for data to drain before closing. The BUSY flag
  1036.  * keeps track of whether we are still transmitting or not. It is
  1037.  * updated by messages from the slave - indicating when all chars
  1038.  * really have drained.
  1039.  */
  1040. if (tty == stli_txcooktty)
  1041. stli_flushchars(tty);
  1042. tty->closing = 1;
  1043. if (portp->closing_wait != ASYNC_CLOSING_WAIT_NONE)
  1044. tty_wait_until_sent(tty, portp->closing_wait);
  1045. portp->flags &= ~ASYNC_INITIALIZED;
  1046. brdp = stli_brds[portp->brdnr];
  1047. stli_rawclose(brdp, portp, 0, 0);
  1048. if (tty->termios->c_cflag & HUPCL) {
  1049. stli_mkasysigs(&portp->asig, 0, 0);
  1050. if (test_bit(ST_CMDING, &portp->state))
  1051. set_bit(ST_DOSIGS, &portp->state);
  1052. else
  1053. stli_sendcmd(brdp, portp, A_SETSIGNALS, &portp->asig,
  1054. sizeof(asysigs_t), 0);
  1055. }
  1056. clear_bit(ST_TXBUSY, &portp->state);
  1057. clear_bit(ST_RXSTOP, &portp->state);
  1058. set_bit(TTY_IO_ERROR, &tty->flags);
  1059. if (tty->ldisc.flush_buffer)
  1060. (tty->ldisc.flush_buffer)(tty);
  1061. set_bit(ST_DOFLUSHRX, &portp->state);
  1062. stli_flushbuffer(tty);
  1063. tty->closing = 0;
  1064. portp->tty = (struct tty_struct *) NULL;
  1065. if (portp->openwaitcnt) {
  1066. if (portp->close_delay)
  1067. stli_delay(portp->close_delay);
  1068. wake_up_interruptible(&portp->open_wait);
  1069. }
  1070. portp->flags &= ~(ASYNC_CALLOUT_ACTIVE | ASYNC_NORMAL_ACTIVE |
  1071. ASYNC_CLOSING);
  1072. wake_up_interruptible(&portp->close_wait);
  1073. MOD_DEC_USE_COUNT;
  1074. restore_flags(flags);
  1075. }
  1076. /*****************************************************************************/
  1077. /*
  1078.  * Carry out first open operations on a port. This involves a number of
  1079.  * commands to be sent to the slave. We need to open the port, set the
  1080.  * notification events, set the initial port settings, get and set the
  1081.  * initial signal values. We sleep and wait in between each one. But
  1082.  * this still all happens pretty quickly.
  1083.  */
  1084. static int stli_initopen(stlibrd_t *brdp, stliport_t *portp)
  1085. {
  1086. struct tty_struct *tty;
  1087. asynotify_t nt;
  1088. asyport_t aport;
  1089. int rc;
  1090. #if DEBUG
  1091. printk("stli_initopen(brdp=%x,portp=%x)n", (int) brdp, (int) portp);
  1092. #endif
  1093. if ((rc = stli_rawopen(brdp, portp, 0, 1)) < 0)
  1094. return(rc);
  1095. memset(&nt, 0, sizeof(asynotify_t));
  1096. nt.data = (DT_TXLOW | DT_TXEMPTY | DT_RXBUSY | DT_RXBREAK);
  1097. nt.signal = SG_DCD;
  1098. if ((rc = stli_cmdwait(brdp, portp, A_SETNOTIFY, &nt,
  1099.     sizeof(asynotify_t), 0)) < 0)
  1100. return(rc);
  1101. tty = portp->tty;
  1102. if (tty == (struct tty_struct *) NULL)
  1103. return(-ENODEV);
  1104. stli_mkasyport(portp, &aport, tty->termios);
  1105. if ((rc = stli_cmdwait(brdp, portp, A_SETPORT, &aport,
  1106.     sizeof(asyport_t), 0)) < 0)
  1107. return(rc);
  1108. set_bit(ST_GETSIGS, &portp->state);
  1109. if ((rc = stli_cmdwait(brdp, portp, A_GETSIGNALS, &portp->asig,
  1110.     sizeof(asysigs_t), 1)) < 0)
  1111. return(rc);
  1112. if (test_and_clear_bit(ST_GETSIGS, &portp->state))
  1113. portp->sigs = stli_mktiocm(portp->asig.sigvalue);
  1114. stli_mkasysigs(&portp->asig, 1, 1);
  1115. if ((rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
  1116.     sizeof(asysigs_t), 0)) < 0)
  1117. return(rc);
  1118. return(0);
  1119. }
  1120. /*****************************************************************************/
  1121. /*
  1122.  * Send an open message to the slave. This will sleep waiting for the
  1123.  * acknowledgement, so must have user context. We need to co-ordinate
  1124.  * with close events here, since we don't want open and close events
  1125.  * to overlap.
  1126.  */
  1127. static int stli_rawopen(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait)
  1128. {
  1129. volatile cdkhdr_t *hdrp;
  1130. volatile cdkctrl_t *cp;
  1131. volatile unsigned char *bits;
  1132. unsigned long flags;
  1133. int rc;
  1134. #if DEBUG
  1135. printk("stli_rawopen(brdp=%x,portp=%x,arg=%x,wait=%d)n",
  1136. (int) brdp, (int) portp, (int) arg, wait);
  1137. #endif
  1138. /*
  1139.  * Send a message to the slave to open this port.
  1140.  */
  1141. save_flags(flags);
  1142. cli();
  1143. /*
  1144.  * Slave is already closing this port. This can happen if a hangup
  1145.  * occurs on this port. So we must wait until it is complete. The
  1146.  * order of opens and closes may not be preserved across shared
  1147.  * memory, so we must wait until it is complete.
  1148.  */
  1149. while (test_bit(ST_CLOSING, &portp->state)) {
  1150. if (signal_pending(current)) {
  1151. restore_flags(flags);
  1152. return(-ERESTARTSYS);
  1153. }
  1154. interruptible_sleep_on(&portp->raw_wait);
  1155. }
  1156. /*
  1157.  * Everything is ready now, so write the open message into shared
  1158.  * memory. Once the message is in set the service bits to say that
  1159.  * this port wants service.
  1160.  */
  1161. EBRDENABLE(brdp);
  1162. cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
  1163. cp->openarg = arg;
  1164. cp->open = 1;
  1165. hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
  1166. bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
  1167. portp->portidx;
  1168. *bits |= portp->portbit;
  1169. EBRDDISABLE(brdp);
  1170. if (wait == 0) {
  1171. restore_flags(flags);
  1172. return(0);
  1173. }
  1174. /*
  1175.  * Slave is in action, so now we must wait for the open acknowledgment
  1176.  * to come back.
  1177.  */
  1178. rc = 0;
  1179. set_bit(ST_OPENING, &portp->state);
  1180. while (test_bit(ST_OPENING, &portp->state)) {
  1181. if (signal_pending(current)) {
  1182. rc = -ERESTARTSYS;
  1183. break;
  1184. }
  1185. interruptible_sleep_on(&portp->raw_wait);
  1186. }
  1187. restore_flags(flags);
  1188. if ((rc == 0) && (portp->rc != 0))
  1189. rc = -EIO;
  1190. return(rc);
  1191. }
  1192. /*****************************************************************************/
  1193. /*
  1194.  * Send a close message to the slave. Normally this will sleep waiting
  1195.  * for the acknowledgement, but if wait parameter is 0 it will not. If
  1196.  * wait is true then must have user context (to sleep).
  1197.  */
  1198. static int stli_rawclose(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait)
  1199. {
  1200. volatile cdkhdr_t *hdrp;
  1201. volatile cdkctrl_t *cp;
  1202. volatile unsigned char *bits;
  1203. unsigned long flags;
  1204. int rc;
  1205. #if DEBUG
  1206. printk("stli_rawclose(brdp=%x,portp=%x,arg=%x,wait=%d)n",
  1207. (int) brdp, (int) portp, (int) arg, wait);
  1208. #endif
  1209. save_flags(flags);
  1210. cli();
  1211. /*
  1212.  * Slave is already closing this port. This can happen if a hangup
  1213.  * occurs on this port.
  1214.  */
  1215. if (wait) {
  1216. while (test_bit(ST_CLOSING, &portp->state)) {
  1217. if (signal_pending(current)) {
  1218. restore_flags(flags);
  1219. return(-ERESTARTSYS);
  1220. }
  1221. interruptible_sleep_on(&portp->raw_wait);
  1222. }
  1223. }
  1224. /*
  1225.  * Write the close command into shared memory.
  1226.  */
  1227. EBRDENABLE(brdp);
  1228. cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
  1229. cp->closearg = arg;
  1230. cp->close = 1;
  1231. hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
  1232. bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
  1233. portp->portidx;
  1234. *bits |= portp->portbit;
  1235. EBRDDISABLE(brdp);
  1236. set_bit(ST_CLOSING, &portp->state);
  1237. if (wait == 0) {
  1238. restore_flags(flags);
  1239. return(0);
  1240. }
  1241. /*
  1242.  * Slave is in action, so now we must wait for the open acknowledgment
  1243.  * to come back.
  1244.  */
  1245. rc = 0;
  1246. while (test_bit(ST_CLOSING, &portp->state)) {
  1247. if (signal_pending(current)) {
  1248. rc = -ERESTARTSYS;
  1249. break;
  1250. }
  1251. interruptible_sleep_on(&portp->raw_wait);
  1252. }
  1253. restore_flags(flags);
  1254. if ((rc == 0) && (portp->rc != 0))
  1255. rc = -EIO;
  1256. return(rc);
  1257. }
  1258. /*****************************************************************************/
  1259. /*
  1260.  * Send a command to the slave and wait for the response. This must
  1261.  * have user context (it sleeps). This routine is generic in that it
  1262.  * can send any type of command. Its purpose is to wait for that command
  1263.  * to complete (as opposed to initiating the command then returning).
  1264.  */
  1265. static int stli_cmdwait(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback)
  1266. {
  1267. unsigned long flags;
  1268. #if DEBUG
  1269. printk("stli_cmdwait(brdp=%x,portp=%x,cmd=%x,arg=%x,size=%d,"
  1270. "copyback=%d)n", (int) brdp, (int) portp, (int) cmd,
  1271. (int) arg, size, copyback);
  1272. #endif
  1273. save_flags(flags);
  1274. cli();
  1275. while (test_bit(ST_CMDING, &portp->state)) {
  1276. if (signal_pending(current)) {
  1277. restore_flags(flags);
  1278. return(-ERESTARTSYS);
  1279. }
  1280. interruptible_sleep_on(&portp->raw_wait);
  1281. }
  1282. stli_sendcmd(brdp, portp, cmd, arg, size, copyback);
  1283. while (test_bit(ST_CMDING, &portp->state)) {
  1284. if (signal_pending(current)) {
  1285. restore_flags(flags);
  1286. return(-ERESTARTSYS);
  1287. }
  1288. interruptible_sleep_on(&portp->raw_wait);
  1289. }
  1290. restore_flags(flags);
  1291. if (portp->rc != 0)
  1292. return(-EIO);
  1293. return(0);
  1294. }
  1295. /*****************************************************************************/
  1296. /*
  1297.  * Send the termios settings for this port to the slave. This sleeps
  1298.  * waiting for the command to complete - so must have user context.
  1299.  */
  1300. static int stli_setport(stliport_t *portp)
  1301. {
  1302. stlibrd_t *brdp;
  1303. asyport_t aport;
  1304. #if DEBUG
  1305. printk("stli_setport(portp=%x)n", (int) portp);
  1306. #endif
  1307. if (portp == (stliport_t *) NULL)
  1308. return(-ENODEV);
  1309. if (portp->tty == (struct tty_struct *) NULL)
  1310. return(-ENODEV);
  1311. if ((portp->brdnr < 0) && (portp->brdnr >= stli_nrbrds))
  1312. return(-ENODEV);
  1313. brdp = stli_brds[portp->brdnr];
  1314. if (brdp == (stlibrd_t *) NULL)
  1315. return(-ENODEV);
  1316. stli_mkasyport(portp, &aport, portp->tty->termios);
  1317. return(stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0));
  1318. }
  1319. /*****************************************************************************/
  1320. /*
  1321.  * Wait for a specified delay period, this is not a busy-loop. It will
  1322.  * give up the processor while waiting. Unfortunately this has some
  1323.  * rather intimate knowledge of the process management stuff.
  1324.  */
  1325. static void stli_delay(int len)
  1326. {
  1327. #if DEBUG
  1328. printk("stli_delay(len=%d)n", len);
  1329. #endif
  1330. if (len > 0) {
  1331. set_current_state(TASK_INTERRUPTIBLE);
  1332. schedule_timeout(len);
  1333. set_current_state(TASK_RUNNING);
  1334. }
  1335. }
  1336. /*****************************************************************************/
  1337. /*
  1338.  * Possibly need to wait for carrier (DCD signal) to come high. Say
  1339.  * maybe because if we are clocal then we don't need to wait...
  1340.  */
  1341. static int stli_waitcarrier(stlibrd_t *brdp, stliport_t *portp, struct file *filp)
  1342. {
  1343. unsigned long flags;
  1344. int rc, doclocal;
  1345. #if DEBUG
  1346. printk("stli_waitcarrier(brdp=%x,portp=%x,filp=%x)n",
  1347. (int) brdp, (int) portp, (int) filp);
  1348. #endif
  1349. rc = 0;
  1350. doclocal = 0;
  1351. if (portp->flags & ASYNC_CALLOUT_ACTIVE) {
  1352. if (portp->normaltermios.c_cflag & CLOCAL)
  1353. doclocal++;
  1354. } else {
  1355. if (portp->tty->termios->c_cflag & CLOCAL)
  1356. doclocal++;
  1357. }
  1358. save_flags(flags);
  1359. cli();
  1360. portp->openwaitcnt++;
  1361. if (! tty_hung_up_p(filp))
  1362. portp->refcount--;
  1363. for (;;) {
  1364. if ((portp->flags & ASYNC_CALLOUT_ACTIVE) == 0) {
  1365. stli_mkasysigs(&portp->asig, 1, 1);
  1366. if ((rc = stli_cmdwait(brdp, portp, A_SETSIGNALS,
  1367.     &portp->asig, sizeof(asysigs_t), 0)) < 0)
  1368. break;
  1369. }
  1370. if (tty_hung_up_p(filp) ||
  1371.     ((portp->flags & ASYNC_INITIALIZED) == 0)) {
  1372. if (portp->flags & ASYNC_HUP_NOTIFY)
  1373. rc = -EBUSY;
  1374. else
  1375. rc = -ERESTARTSYS;
  1376. break;
  1377. }
  1378. if (((portp->flags & ASYNC_CALLOUT_ACTIVE) == 0) &&
  1379.     ((portp->flags & ASYNC_CLOSING) == 0) &&
  1380.     (doclocal || (portp->sigs & TIOCM_CD))) {
  1381. break;
  1382. }
  1383. if (signal_pending(current)) {
  1384. rc = -ERESTARTSYS;
  1385. break;
  1386. }
  1387. interruptible_sleep_on(&portp->open_wait);
  1388. }
  1389. if (! tty_hung_up_p(filp))
  1390. portp->refcount++;
  1391. portp->openwaitcnt--;
  1392. restore_flags(flags);
  1393. return(rc);
  1394. }
  1395. /*****************************************************************************/
  1396. /*
  1397.  * Write routine. Take the data and put it in the shared memory ring
  1398.  * queue. If port is not already sending chars then need to mark the
  1399.  * service bits for this port.
  1400.  */
  1401. static int stli_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count)
  1402. {
  1403. volatile cdkasy_t *ap;
  1404. volatile cdkhdr_t *hdrp;
  1405. volatile unsigned char *bits;
  1406. unsigned char *shbuf, *chbuf;
  1407. stliport_t *portp;
  1408. stlibrd_t *brdp;
  1409. unsigned int len, stlen, head, tail, size;
  1410. unsigned long flags;
  1411. #if DEBUG
  1412. printk("stli_write(tty=%x,from_user=%d,buf=%x,count=%d)n",
  1413. (int) tty, from_user, (int) buf, count);
  1414. #endif
  1415. if ((tty == (struct tty_struct *) NULL) ||
  1416.     (stli_tmpwritebuf == (char *) NULL))
  1417. return(0);
  1418. if (tty == stli_txcooktty)
  1419. stli_flushchars(tty);
  1420. portp = tty->driver_data;
  1421. if (portp == (stliport_t *) NULL)
  1422. return(0);
  1423. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  1424. return(0);
  1425. brdp = stli_brds[portp->brdnr];
  1426. if (brdp == (stlibrd_t *) NULL)
  1427. return(0);
  1428. chbuf = (unsigned char *) buf;
  1429. /*
  1430.  * If copying direct from user space we need to be able to handle page
  1431.  * faults while we are copying. To do this copy as much as we can now
  1432.  * into a kernel buffer. From there we copy it into shared memory. The
  1433.  * big problem is that we do not want shared memory enabled when we are
  1434.  * sleeping (other boards may be serviced while asleep). Something else
  1435.  * to note here is the reading of the tail twice. Since the boards
  1436.  * shared memory can be on an 8-bit bus then we need to be very careful
  1437.  * reading 16 bit quantities - since both the board (slave) and host
  1438.  * could be writing and reading at the same time.
  1439.  */
  1440. if (from_user) {
  1441. save_flags(flags);
  1442. cli();
  1443. EBRDENABLE(brdp);
  1444. ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
  1445. head = (unsigned int) ap->txq.head;
  1446. tail = (unsigned int) ap->txq.tail;
  1447. if (tail != ((unsigned int) ap->txq.tail))
  1448. tail = (unsigned int) ap->txq.tail;
  1449. len = (head >= tail) ? (portp->txsize - (head - tail) - 1) :
  1450. (tail - head - 1);
  1451. count = MIN(len, count);
  1452. EBRDDISABLE(brdp);
  1453. restore_flags(flags);
  1454. down(&stli_tmpwritesem);
  1455. copy_from_user(stli_tmpwritebuf, chbuf, count);
  1456. chbuf = &stli_tmpwritebuf[0];
  1457. }
  1458. /*
  1459.  * All data is now local, shove as much as possible into shared memory.
  1460.  */
  1461. save_flags(flags);
  1462. cli();
  1463. EBRDENABLE(brdp);
  1464. ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
  1465. head = (unsigned int) ap->txq.head;
  1466. tail = (unsigned int) ap->txq.tail;
  1467. if (tail != ((unsigned int) ap->txq.tail))
  1468. tail = (unsigned int) ap->txq.tail;
  1469. size = portp->txsize;
  1470. if (head >= tail) {
  1471. len = size - (head - tail) - 1;
  1472. stlen = size - head;
  1473. } else {
  1474. len = tail - head - 1;
  1475. stlen = len;
  1476. }
  1477. len = MIN(len, count);
  1478. count = 0;
  1479. shbuf = (char *) EBRDGETMEMPTR(brdp, portp->txoffset);
  1480. while (len > 0) {
  1481. stlen = MIN(len, stlen);
  1482. memcpy((shbuf + head), chbuf, stlen);
  1483. chbuf += stlen;
  1484. len -= stlen;
  1485. count += stlen;
  1486. head += stlen;
  1487. if (head >= size) {
  1488. head = 0;
  1489. stlen = tail;
  1490. }
  1491. }
  1492. ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
  1493. ap->txq.head = head;
  1494. if (test_bit(ST_TXBUSY, &portp->state)) {
  1495. if (ap->changed.data & DT_TXEMPTY)
  1496. ap->changed.data &= ~DT_TXEMPTY;
  1497. }
  1498. hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
  1499. bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
  1500. portp->portidx;
  1501. *bits |= portp->portbit;
  1502. set_bit(ST_TXBUSY, &portp->state);
  1503. EBRDDISABLE(brdp);
  1504. if (from_user)
  1505. up(&stli_tmpwritesem);
  1506. restore_flags(flags);
  1507. return(count);
  1508. }
  1509. /*****************************************************************************/
  1510. /*
  1511.  * Output a single character. We put it into a temporary local buffer
  1512.  * (for speed) then write out that buffer when the flushchars routine
  1513.  * is called. There is a safety catch here so that if some other port
  1514.  * writes chars before the current buffer has been, then we write them
  1515.  * first them do the new ports.
  1516.  */
  1517. static void stli_putchar(struct tty_struct *tty, unsigned char ch)
  1518. {
  1519. #if DEBUG
  1520. printk("stli_putchar(tty=%x,ch=%x)n", (int) tty, (int) ch);
  1521. #endif
  1522. if (tty == (struct tty_struct *) NULL)
  1523. return;
  1524. if (tty != stli_txcooktty) {
  1525. if (stli_txcooktty != (struct tty_struct *) NULL)
  1526. stli_flushchars(stli_txcooktty);
  1527. stli_txcooktty = tty;
  1528. }
  1529. stli_txcookbuf[stli_txcooksize++] = ch;
  1530. }
  1531. /*****************************************************************************/
  1532. /*
  1533.  * Transfer characters from the local TX cooking buffer to the board.
  1534.  * We sort of ignore the tty that gets passed in here. We rely on the
  1535.  * info stored with the TX cook buffer to tell us which port to flush
  1536.  * the data on. In any case we clean out the TX cook buffer, for re-use
  1537.  * by someone else.
  1538.  */
  1539. static void stli_flushchars(struct tty_struct *tty)
  1540. {
  1541. volatile cdkhdr_t *hdrp;
  1542. volatile unsigned char *bits;
  1543. volatile cdkasy_t *ap;
  1544. struct tty_struct *cooktty;
  1545. stliport_t *portp;
  1546. stlibrd_t *brdp;
  1547. unsigned int len, stlen, head, tail, size, count, cooksize;
  1548. unsigned char *buf, *shbuf;
  1549. unsigned long flags;
  1550. #if DEBUG
  1551. printk("stli_flushchars(tty=%x)n", (int) tty);
  1552. #endif
  1553. cooksize = stli_txcooksize;
  1554. cooktty = stli_txcooktty;
  1555. stli_txcooksize = 0;
  1556. stli_txcookrealsize = 0;
  1557. stli_txcooktty = (struct tty_struct *) NULL;
  1558. if (tty == (struct tty_struct *) NULL)
  1559. return;
  1560. if (cooktty == (struct tty_struct *) NULL)
  1561. return;
  1562. if (tty != cooktty)
  1563. tty = cooktty;
  1564. if (cooksize == 0)
  1565. return;
  1566. portp = tty->driver_data;
  1567. if (portp == (stliport_t *) NULL)
  1568. return;
  1569. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  1570. return;
  1571. brdp = stli_brds[portp->brdnr];
  1572. if (brdp == (stlibrd_t *) NULL)
  1573. return;
  1574. save_flags(flags);
  1575. cli();
  1576. EBRDENABLE(brdp);
  1577. ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
  1578. head = (unsigned int) ap->txq.head;
  1579. tail = (unsigned int) ap->txq.tail;
  1580. if (tail != ((unsigned int) ap->txq.tail))
  1581. tail = (unsigned int) ap->txq.tail;
  1582. size = portp->txsize;
  1583. if (head >= tail) {
  1584. len = size - (head - tail) - 1;
  1585. stlen = size - head;
  1586. } else {
  1587. len = tail - head - 1;
  1588. stlen = len;
  1589. }
  1590. len = MIN(len, cooksize);
  1591. count = 0;
  1592. shbuf = (char *) EBRDGETMEMPTR(brdp, portp->txoffset);
  1593. buf = stli_txcookbuf;
  1594. while (len > 0) {
  1595. stlen = MIN(len, stlen);
  1596. memcpy((shbuf + head), buf, stlen);
  1597. buf += stlen;
  1598. len -= stlen;
  1599. count += stlen;
  1600. head += stlen;
  1601. if (head >= size) {
  1602. head = 0;
  1603. stlen = tail;
  1604. }
  1605. }
  1606. ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
  1607. ap->txq.head = head;
  1608. if (test_bit(ST_TXBUSY, &portp->state)) {
  1609. if (ap->changed.data & DT_TXEMPTY)
  1610. ap->changed.data &= ~DT_TXEMPTY;
  1611. }
  1612. hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
  1613. bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
  1614. portp->portidx;
  1615. *bits |= portp->portbit;
  1616. set_bit(ST_TXBUSY, &portp->state);
  1617. EBRDDISABLE(brdp);
  1618. restore_flags(flags);
  1619. }
  1620. /*****************************************************************************/
  1621. static int stli_writeroom(struct tty_struct *tty)
  1622. {
  1623. volatile cdkasyrq_t *rp;
  1624. stliport_t *portp;
  1625. stlibrd_t *brdp;
  1626. unsigned int head, tail, len;
  1627. unsigned long flags;
  1628. #if DEBUG
  1629. printk("stli_writeroom(tty=%x)n", (int) tty);
  1630. #endif
  1631. if (tty == (struct tty_struct *) NULL)
  1632. return(0);
  1633. if (tty == stli_txcooktty) {
  1634. if (stli_txcookrealsize != 0) {
  1635. len = stli_txcookrealsize - stli_txcooksize;
  1636. return(len);
  1637. }
  1638. }
  1639. portp = tty->driver_data;
  1640. if (portp == (stliport_t *) NULL)
  1641. return(0);
  1642. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  1643. return(0);
  1644. brdp = stli_brds[portp->brdnr];
  1645. if (brdp == (stlibrd_t *) NULL)
  1646. return(0);
  1647. save_flags(flags);
  1648. cli();
  1649. EBRDENABLE(brdp);
  1650. rp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->txq;
  1651. head = (unsigned int) rp->head;
  1652. tail = (unsigned int) rp->tail;
  1653. if (tail != ((unsigned int) rp->tail))
  1654. tail = (unsigned int) rp->tail;
  1655. len = (head >= tail) ? (portp->txsize - (head - tail)) : (tail - head);
  1656. len--;
  1657. EBRDDISABLE(brdp);
  1658. restore_flags(flags);
  1659. if (tty == stli_txcooktty) {
  1660. stli_txcookrealsize = len;
  1661. len -= stli_txcooksize;
  1662. }
  1663. return(len);
  1664. }
  1665. /*****************************************************************************/
  1666. /*
  1667.  * Return the number of characters in the transmit buffer. Normally we
  1668.  * will return the number of chars in the shared memory ring queue.
  1669.  * We need to kludge around the case where the shared memory buffer is
  1670.  * empty but not all characters have drained yet, for this case just
  1671.  * return that there is 1 character in the buffer!
  1672.  */
  1673. static int stli_charsinbuffer(struct tty_struct *tty)
  1674. {
  1675. volatile cdkasyrq_t *rp;
  1676. stliport_t *portp;
  1677. stlibrd_t *brdp;
  1678. unsigned int head, tail, len;
  1679. unsigned long flags;
  1680. #if DEBUG
  1681. printk("stli_charsinbuffer(tty=%x)n", (int) tty);
  1682. #endif
  1683. if (tty == (struct tty_struct *) NULL)
  1684. return(0);
  1685. if (tty == stli_txcooktty)
  1686. stli_flushchars(tty);
  1687. portp = tty->driver_data;
  1688. if (portp == (stliport_t *) NULL)
  1689. return(0);
  1690. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  1691. return(0);
  1692. brdp = stli_brds[portp->brdnr];
  1693. if (brdp == (stlibrd_t *) NULL)
  1694. return(0);
  1695. save_flags(flags);
  1696. cli();
  1697. EBRDENABLE(brdp);
  1698. rp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->txq;
  1699. head = (unsigned int) rp->head;
  1700. tail = (unsigned int) rp->tail;
  1701. if (tail != ((unsigned int) rp->tail))
  1702. tail = (unsigned int) rp->tail;
  1703. len = (head >= tail) ? (head - tail) : (portp->txsize - (tail - head));
  1704. if ((len == 0) && test_bit(ST_TXBUSY, &portp->state))
  1705. len = 1;
  1706. EBRDDISABLE(brdp);
  1707. restore_flags(flags);
  1708. return(len);
  1709. }
  1710. /*****************************************************************************/
  1711. /*
  1712.  * Generate the serial struct info.
  1713.  */
  1714. static void stli_getserial(stliport_t *portp, struct serial_struct *sp)
  1715. {
  1716. struct serial_struct sio;
  1717. stlibrd_t *brdp;
  1718. #if DEBUG
  1719. printk("stli_getserial(portp=%x,sp=%x)n", (int) portp, (int) sp);
  1720. #endif
  1721. memset(&sio, 0, sizeof(struct serial_struct));
  1722. sio.type = PORT_UNKNOWN;
  1723. sio.line = portp->portnr;
  1724. sio.irq = 0;
  1725. sio.flags = portp->flags;
  1726. sio.baud_base = portp->baud_base;
  1727. sio.close_delay = portp->close_delay;
  1728. sio.closing_wait = portp->closing_wait;
  1729. sio.custom_divisor = portp->custom_divisor;
  1730. sio.xmit_fifo_size = 0;
  1731. sio.hub6 = 0;
  1732. brdp = stli_brds[portp->brdnr];
  1733. if (brdp != (stlibrd_t *) NULL)
  1734. sio.port = brdp->iobase;
  1735. copy_to_user(sp, &sio, sizeof(struct serial_struct));
  1736. }
  1737. /*****************************************************************************/
  1738. /*
  1739.  * Set port according to the serial struct info.
  1740.  * At this point we do not do any auto-configure stuff, so we will
  1741.  * just quietly ignore any requests to change irq, etc.
  1742.  */
  1743. static int stli_setserial(stliport_t *portp, struct serial_struct *sp)
  1744. {
  1745. struct serial_struct sio;
  1746. int rc;
  1747. #if DEBUG
  1748. printk("stli_setserial(portp=%x,sp=%x)n", (int) portp, (int) sp);
  1749. #endif
  1750. if (copy_from_user(&sio, sp, sizeof(struct serial_struct)))
  1751. return -EFAULT;
  1752. if (!capable(CAP_SYS_ADMIN)) {
  1753. if ((sio.baud_base != portp->baud_base) ||
  1754.     (sio.close_delay != portp->close_delay) ||
  1755.     ((sio.flags & ~ASYNC_USR_MASK) !=
  1756.     (portp->flags & ~ASYNC_USR_MASK)))
  1757. return(-EPERM);
  1758. portp->flags = (portp->flags & ~ASYNC_USR_MASK) |
  1759. (sio.flags & ASYNC_USR_MASK);
  1760. portp->baud_base = sio.baud_base;
  1761. portp->close_delay = sio.close_delay;
  1762. portp->closing_wait = sio.closing_wait;
  1763. portp->custom_divisor = sio.custom_divisor;
  1764. if ((rc = stli_setport(portp)) < 0)
  1765. return(rc);
  1766. return(0);
  1767. }
  1768. /*****************************************************************************/
  1769. static int stli_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
  1770. {
  1771. stliport_t *portp;
  1772. stlibrd_t *brdp;
  1773. unsigned long lval;
  1774. unsigned int ival;
  1775. int rc;
  1776. #if DEBUG
  1777. printk("stli_ioctl(tty=%x,file=%x,cmd=%x,arg=%x)n",
  1778. (int) tty, (int) file, cmd, (int) arg);
  1779. #endif
  1780. if (tty == (struct tty_struct *) NULL)
  1781. return(-ENODEV);
  1782. portp = tty->driver_data;
  1783. if (portp == (stliport_t *) NULL)
  1784. return(-ENODEV);
  1785. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  1786. return(0);
  1787. brdp = stli_brds[portp->brdnr];
  1788. if (brdp == (stlibrd_t *) NULL)
  1789. return(0);
  1790. if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
  1791.       (cmd != COM_GETPORTSTATS) && (cmd != COM_CLRPORTSTATS)) {
  1792. if (tty->flags & (1 << TTY_IO_ERROR))
  1793. return(-EIO);
  1794. }
  1795. rc = 0;
  1796. switch (cmd) {
  1797. case TIOCGSOFTCAR:
  1798. rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0),
  1799. (unsigned int *) arg);
  1800. break;
  1801. case TIOCSSOFTCAR:
  1802. if ((rc = get_user(ival, (unsigned int *) arg)) == 0)
  1803. tty->termios->c_cflag =
  1804. (tty->termios->c_cflag & ~CLOCAL) |
  1805. (ival ? CLOCAL : 0);
  1806. break;
  1807. case TIOCMGET:
  1808. if ((rc = verify_area(VERIFY_WRITE, (void *) arg,
  1809.     sizeof(unsigned int))) == 0) {
  1810. if ((rc = stli_cmdwait(brdp, portp, A_GETSIGNALS,
  1811.     &portp->asig, sizeof(asysigs_t), 1)) < 0)
  1812. return(rc);
  1813. lval = stli_mktiocm(portp->asig.sigvalue);
  1814. put_user(lval, (unsigned int *) arg);
  1815. }
  1816. break;
  1817. case TIOCMBIS:
  1818. if ((rc = get_user(ival, (unsigned int *) arg)) == 0) {
  1819. stli_mkasysigs(&portp->asig,
  1820. ((ival & TIOCM_DTR) ? 1 : -1),
  1821. ((ival & TIOCM_RTS) ? 1 : -1));
  1822. rc = stli_cmdwait(brdp, portp, A_SETSIGNALS,
  1823. &portp->asig, sizeof(asysigs_t), 0);
  1824. }
  1825. break;
  1826. case TIOCMBIC:
  1827. if ((rc = get_user(ival, (unsigned int *) arg)) == 0) {
  1828. stli_mkasysigs(&portp->asig,
  1829. ((ival & TIOCM_DTR) ? 0 : -1),
  1830. ((ival & TIOCM_RTS) ? 0 : -1));
  1831. rc = stli_cmdwait(brdp, portp, A_SETSIGNALS,
  1832. &portp->asig, sizeof(asysigs_t), 0);
  1833. }
  1834. break;
  1835. case TIOCMSET:
  1836. if ((rc = get_user(ival, (unsigned int *) arg)) == 0) {
  1837. stli_mkasysigs(&portp->asig,
  1838. ((ival & TIOCM_DTR) ? 1 : 0),
  1839. ((ival & TIOCM_RTS) ? 1 : 0));
  1840. rc = stli_cmdwait(brdp, portp, A_SETSIGNALS,
  1841. &portp->asig, sizeof(asysigs_t), 0);
  1842. }
  1843. break;
  1844. case TIOCGSERIAL:
  1845. if ((rc = verify_area(VERIFY_WRITE, (void *) arg,
  1846.     sizeof(struct serial_struct))) == 0)
  1847. stli_getserial(portp, (struct serial_struct *) arg);
  1848. break;
  1849. case TIOCSSERIAL:
  1850. if ((rc = verify_area(VERIFY_READ, (void *) arg,
  1851.     sizeof(struct serial_struct))) == 0)
  1852. rc = stli_setserial(portp, (struct serial_struct *)arg);
  1853. break;
  1854. case STL_GETPFLAG:
  1855. rc = put_user(portp->pflag, (unsigned int *) arg);
  1856. break;
  1857. case STL_SETPFLAG:
  1858. if ((rc = get_user(portp->pflag, (unsigned int *) arg)) == 0)
  1859. stli_setport(portp);
  1860. break;
  1861. case COM_GETPORTSTATS:
  1862. if ((rc = verify_area(VERIFY_WRITE, (void *) arg,
  1863.     sizeof(comstats_t))) == 0)
  1864. rc = stli_getportstats(portp, (comstats_t *) arg);
  1865. break;
  1866. case COM_CLRPORTSTATS:
  1867. if ((rc = verify_area(VERIFY_WRITE, (void *) arg,
  1868.     sizeof(comstats_t))) == 0)
  1869. rc = stli_clrportstats(portp, (comstats_t *) arg);
  1870. break;
  1871. case TIOCSERCONFIG:
  1872. case TIOCSERGWILD:
  1873. case TIOCSERSWILD:
  1874. case TIOCSERGETLSR:
  1875. case TIOCSERGSTRUCT:
  1876. case TIOCSERGETMULTI:
  1877. case TIOCSERSETMULTI:
  1878. default:
  1879. rc = -ENOIOCTLCMD;
  1880. break;
  1881. }
  1882. return(rc);
  1883. }
  1884. /*****************************************************************************/
  1885. /*
  1886.  * This routine assumes that we have user context and can sleep.
  1887.  * Looks like it is true for the current ttys implementation..!!
  1888.  */
  1889. static void stli_settermios(struct tty_struct *tty, struct termios *old)
  1890. {
  1891. stliport_t *portp;
  1892. stlibrd_t *brdp;
  1893. struct termios *tiosp;
  1894. asyport_t aport;
  1895. #if DEBUG
  1896. printk("stli_settermios(tty=%x,old=%x)n", (int) tty, (int) old);
  1897. #endif
  1898. if (tty == (struct tty_struct *) NULL)
  1899. return;
  1900. portp = tty->driver_data;
  1901. if (portp == (stliport_t *) NULL)
  1902. return;
  1903. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  1904. return;
  1905. brdp = stli_brds[portp->brdnr];
  1906. if (brdp == (stlibrd_t *) NULL)
  1907. return;
  1908. tiosp = tty->termios;
  1909. if ((tiosp->c_cflag == old->c_cflag) &&
  1910.     (tiosp->c_iflag == old->c_iflag))
  1911. return;
  1912. stli_mkasyport(portp, &aport, tiosp);
  1913. stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0);
  1914. stli_mkasysigs(&portp->asig, ((tiosp->c_cflag & CBAUD) ? 1 : 0), -1);
  1915. stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
  1916. sizeof(asysigs_t), 0);
  1917. if ((old->c_cflag & CRTSCTS) && ((tiosp->c_cflag & CRTSCTS) == 0))
  1918. tty->hw_stopped = 0;
  1919. if (((old->c_cflag & CLOCAL) == 0) && (tiosp->c_cflag & CLOCAL))
  1920. wake_up_interruptible(&portp->open_wait);
  1921. }
  1922. /*****************************************************************************/
  1923. /*
  1924.  * Attempt to flow control who ever is sending us data. We won't really
  1925.  * do any flow control action here. We can't directly, and even if we
  1926.  * wanted to we would have to send a command to the slave. The slave
  1927.  * knows how to flow control, and will do so when its buffers reach its
  1928.  * internal high water marks. So what we will do is set a local state
  1929.  * bit that will stop us sending any RX data up from the poll routine
  1930.  * (which is the place where RX data from the slave is handled).
  1931.  */
  1932. static void stli_throttle(struct tty_struct *tty)
  1933. {
  1934. stliport_t *portp;
  1935. #if DEBUG
  1936. printk("stli_throttle(tty=%x)n", (int) tty);
  1937. #endif
  1938. if (tty == (struct tty_struct *) NULL)
  1939. return;
  1940. portp = tty->driver_data;
  1941. if (portp == (stliport_t *) NULL)
  1942. return;
  1943. set_bit(ST_RXSTOP, &portp->state);
  1944. }
  1945. /*****************************************************************************/
  1946. /*
  1947.  * Unflow control the device sending us data... That means that all
  1948.  * we have to do is clear the RXSTOP state bit. The next poll call
  1949.  * will then be able to pass the RX data back up.
  1950.  */
  1951. static void stli_unthrottle(struct tty_struct *tty)
  1952. {
  1953. stliport_t *portp;
  1954. #if DEBUG
  1955. printk("stli_unthrottle(tty=%x)n", (int) tty);
  1956. #endif
  1957. if (tty == (struct tty_struct *) NULL)
  1958. return;
  1959. portp = tty->driver_data;
  1960. if (portp == (stliport_t *) NULL)
  1961. return;
  1962. clear_bit(ST_RXSTOP, &portp->state);
  1963. }
  1964. /*****************************************************************************/
  1965. /*
  1966.  * Stop the transmitter. Basically to do this we will just turn TX
  1967.  * interrupts off.
  1968.  */
  1969. static void stli_stop(struct tty_struct *tty)
  1970. {
  1971. stlibrd_t *brdp;
  1972. stliport_t *portp;
  1973. asyctrl_t actrl;
  1974. #if DEBUG
  1975. printk("stli_stop(tty=%x)n", (int) tty);
  1976. #endif
  1977. if (tty == (struct tty_struct *) NULL)
  1978. return;
  1979. portp = tty->driver_data;
  1980. if (portp == (stliport_t *) NULL)
  1981. return;
  1982. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  1983. return;
  1984. brdp = stli_brds[portp->brdnr];
  1985. if (brdp == (stlibrd_t *) NULL)
  1986. return;
  1987. memset(&actrl, 0, sizeof(asyctrl_t));
  1988. actrl.txctrl = CT_STOPFLOW;
  1989. #if 0
  1990. stli_cmdwait(brdp, portp, A_PORTCTRL, &actrl, sizeof(asyctrl_t), 0);
  1991. #endif
  1992. }
  1993. /*****************************************************************************/
  1994. /*
  1995.  * Start the transmitter again. Just turn TX interrupts back on.
  1996.  */
  1997. static void stli_start(struct tty_struct *tty)
  1998. {
  1999. stliport_t *portp;
  2000. stlibrd_t *brdp;
  2001. asyctrl_t actrl;
  2002. #if DEBUG
  2003. printk("stli_start(tty=%x)n", (int) tty);
  2004. #endif
  2005. if (tty == (struct tty_struct *) NULL)
  2006. return;
  2007. portp = tty->driver_data;
  2008. if (portp == (stliport_t *) NULL)
  2009. return;
  2010. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  2011. return;
  2012. brdp = stli_brds[portp->brdnr];
  2013. if (brdp == (stlibrd_t *) NULL)
  2014. return;
  2015. memset(&actrl, 0, sizeof(asyctrl_t));
  2016. actrl.txctrl = CT_STARTFLOW;
  2017. #if 0
  2018. stli_cmdwait(brdp, portp, A_PORTCTRL, &actrl, sizeof(asyctrl_t), 0);
  2019. #endif
  2020. }
  2021. /*****************************************************************************/
  2022. /*
  2023.  * Scheduler called hang up routine. This is called from the scheduler,
  2024.  * not direct from the driver "poll" routine. We can't call it there
  2025.  * since the real local hangup code will enable/disable the board and
  2026.  * other things that we can't do while handling the poll. Much easier
  2027.  * to deal with it some time later (don't really care when, hangups
  2028.  * aren't that time critical).
  2029.  */
  2030. static void stli_dohangup(void *arg)
  2031. {
  2032. stliport_t *portp;
  2033. #if DEBUG
  2034. printk(KERN_DEBUG "stli_dohangup(portp=%x)n", (int) arg);
  2035. #endif
  2036. /*
  2037.  * FIXME: There's a module removal race here: tty_hangup
  2038.  * calls schedule_task which will call into this
  2039.  * driver later.
  2040.  */
  2041. portp = (stliport_t *) arg;
  2042. if (portp != (stliport_t *) NULL) {
  2043. if (portp->tty != (struct tty_struct *) NULL) {
  2044. tty_hangup(portp->tty);
  2045. }
  2046. }
  2047. MOD_DEC_USE_COUNT;
  2048. }
  2049. /*****************************************************************************/
  2050. /*
  2051.  * Hangup this port. This is pretty much like closing the port, only
  2052.  * a little more brutal. No waiting for data to drain. Shutdown the
  2053.  * port and maybe drop signals. This is rather tricky really. We want
  2054.  * to close the port as well.
  2055.  */
  2056. static void stli_hangup(struct tty_struct *tty)
  2057. {
  2058. stliport_t *portp;
  2059. stlibrd_t *brdp;
  2060. unsigned long flags;
  2061. #if DEBUG
  2062. printk(KERN_DEBUG "stli_hangup(tty=%x)n", (int) tty);
  2063. #endif
  2064. if (tty == (struct tty_struct *) NULL)
  2065. return;
  2066. portp = tty->driver_data;
  2067. if (portp == (stliport_t *) NULL)
  2068. return;
  2069. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  2070. return;
  2071. brdp = stli_brds[portp->brdnr];
  2072. if (brdp == (stlibrd_t *) NULL)
  2073. return;
  2074. portp->flags &= ~ASYNC_INITIALIZED;
  2075. save_flags(flags);
  2076. cli();
  2077. if (! test_bit(ST_CLOSING, &portp->state))
  2078. stli_rawclose(brdp, portp, 0, 0);
  2079. if (tty->termios->c_cflag & HUPCL) {
  2080. stli_mkasysigs(&portp->asig, 0, 0);
  2081. if (test_bit(ST_CMDING, &portp->state)) {
  2082. set_bit(ST_DOSIGS, &portp->state);
  2083. set_bit(ST_DOFLUSHTX, &portp->state);
  2084. set_bit(ST_DOFLUSHRX, &portp->state);
  2085. } else {
  2086. stli_sendcmd(brdp, portp, A_SETSIGNALSF,
  2087. &portp->asig, sizeof(asysigs_t), 0);
  2088. }
  2089. }
  2090. restore_flags(flags);
  2091. clear_bit(ST_TXBUSY, &portp->state);
  2092. clear_bit(ST_RXSTOP, &portp->state);
  2093. set_bit(TTY_IO_ERROR, &tty->flags);
  2094. portp->tty = (struct tty_struct *) NULL;
  2095. portp->flags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CALLOUT_ACTIVE);
  2096. portp->refcount = 0;
  2097. wake_up_interruptible(&portp->open_wait);
  2098. }
  2099. /*****************************************************************************/
  2100. /*
  2101.  * Flush characters from the lower buffer. We may not have user context
  2102.  * so we cannot sleep waiting for it to complete. Also we need to check
  2103.  * if there is chars for this port in the TX cook buffer, and flush them
  2104.  * as well.
  2105.  */
  2106. static void stli_flushbuffer(struct tty_struct *tty)
  2107. {
  2108. stliport_t *portp;
  2109. stlibrd_t *brdp;
  2110. unsigned long ftype, flags;
  2111. #if DEBUG
  2112. printk(KERN_DEBUG "stli_flushbuffer(tty=%x)n", (int) tty);
  2113. #endif
  2114. if (tty == (struct tty_struct *) NULL)
  2115. return;
  2116. portp = tty->driver_data;
  2117. if (portp == (stliport_t *) NULL)
  2118. return;
  2119. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  2120. return;
  2121. brdp = stli_brds[portp->brdnr];
  2122. if (brdp == (stlibrd_t *) NULL)
  2123. return;
  2124. save_flags(flags);
  2125. cli();
  2126. if (tty == stli_txcooktty) {
  2127. stli_txcooktty = (struct tty_struct *) NULL;
  2128. stli_txcooksize = 0;
  2129. stli_txcookrealsize = 0;
  2130. }
  2131. if (test_bit(ST_CMDING, &portp->state)) {
  2132. set_bit(ST_DOFLUSHTX, &portp->state);
  2133. } else {
  2134. ftype = FLUSHTX;
  2135. if (test_bit(ST_DOFLUSHRX, &portp->state)) {
  2136. ftype |= FLUSHRX;
  2137. clear_bit(ST_DOFLUSHRX, &portp->state);
  2138. }
  2139. stli_sendcmd(brdp, portp, A_FLUSH, &ftype,
  2140. sizeof(unsigned long), 0);
  2141. }
  2142. restore_flags(flags);
  2143. wake_up_interruptible(&tty->write_wait);
  2144. if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
  2145.     tty->ldisc.write_wakeup)
  2146. (tty->ldisc.write_wakeup)(tty);
  2147. }
  2148. /*****************************************************************************/
  2149. static void stli_breakctl(struct tty_struct *tty, int state)
  2150. {
  2151. stlibrd_t *brdp;
  2152. stliport_t *portp;
  2153. long arg;
  2154. /* long savestate, savetime; */
  2155. #if DEBUG
  2156. printk(KERN_DEBUG "stli_breakctl(tty=%x,state=%d)n", (int) tty, state);
  2157. #endif
  2158. if (tty == (struct tty_struct *) NULL)
  2159. return;
  2160. portp = tty->driver_data;
  2161. if (portp == (stliport_t *) NULL)
  2162. return;
  2163. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  2164. return;
  2165. brdp = stli_brds[portp->brdnr];
  2166. if (brdp == (stlibrd_t *) NULL)
  2167. return;
  2168. /*
  2169.  * Due to a bug in the tty send_break() code we need to preserve
  2170.  * the current process state and timeout...
  2171. savetime = current->timeout;
  2172. savestate = current->state;
  2173.  */
  2174. arg = (state == -1) ? BREAKON : BREAKOFF;
  2175. stli_cmdwait(brdp, portp, A_BREAK, &arg, sizeof(long), 0);
  2176. /*
  2177.  *
  2178. current->timeout = savetime;
  2179. current->state = savestate;
  2180.  */
  2181. }
  2182. /*****************************************************************************/
  2183. static void stli_waituntilsent(struct tty_struct *tty, int timeout)
  2184. {
  2185. stliport_t *portp;
  2186. unsigned long tend;
  2187. #if DEBUG
  2188. printk(KERN_DEBUG "stli_waituntilsent(tty=%x,timeout=%x)n", (int) tty, timeout);
  2189. #endif
  2190. if (tty == (struct tty_struct *) NULL)
  2191. return;
  2192. portp = tty->driver_data;
  2193. if (portp == (stliport_t *) NULL)
  2194. return;
  2195. if (timeout == 0)
  2196. timeout = HZ;
  2197. tend = jiffies + timeout;
  2198. while (test_bit(ST_TXBUSY, &portp->state)) {
  2199. if (signal_pending(current))
  2200. break;
  2201. stli_delay(2);
  2202. if (time_after_eq(jiffies, tend))
  2203. break;
  2204. }
  2205. }
  2206. /*****************************************************************************/
  2207. static void stli_sendxchar(struct tty_struct *tty, char ch)
  2208. {
  2209. stlibrd_t *brdp;
  2210. stliport_t *portp;
  2211. asyctrl_t actrl;
  2212. #if DEBUG
  2213. printk(KERN_DEBUG "stli_sendxchar(tty=%x,ch=%x)n", (int) tty, ch);
  2214. #endif
  2215. if (tty == (struct tty_struct *) NULL)
  2216. return;
  2217. portp = tty->driver_data;
  2218. if (portp == (stliport_t *) NULL)
  2219. return;
  2220. if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
  2221. return;
  2222. brdp = stli_brds[portp->brdnr];
  2223. if (brdp == (stlibrd_t *) NULL)
  2224. return;
  2225. memset(&actrl, 0, sizeof(asyctrl_t));
  2226. if (ch == STOP_CHAR(tty)) {
  2227. actrl.rxctrl = CT_STOPFLOW;
  2228. } else if (ch == START_CHAR(tty)) {
  2229. actrl.rxctrl = CT_STARTFLOW;
  2230. } else {
  2231. actrl.txctrl = CT_SENDCHR;
  2232. actrl.tximdch = ch;
  2233. }
  2234. stli_cmdwait(brdp, portp, A_PORTCTRL, &actrl, sizeof(asyctrl_t), 0);
  2235. }
  2236. /*****************************************************************************/
  2237. #define MAXLINE 80
  2238. /*
  2239.  * Format info for a specified port. The line is deliberately limited
  2240.  * to 80 characters. (If it is too long it will be truncated, if too
  2241.  * short then padded with spaces).
  2242.  */
  2243. static int stli_portinfo(stlibrd_t *brdp, stliport_t *portp, int portnr, char *pos)
  2244. {
  2245. char *sp, *uart;
  2246. int rc, cnt;
  2247. rc = stli_portcmdstats(portp);
  2248. uart = "UNKNOWN";
  2249. if (brdp->state & BST_STARTED) {
  2250. switch (stli_comstats.hwid) {
  2251. case 0: uart = "2681"; break;
  2252. case 1: uart = "SC26198"; break;
  2253. default: uart = "CD1400"; break;
  2254. }
  2255. }
  2256. sp = pos;
  2257. sp += sprintf(sp, "%d: uart:%s ", portnr, uart);
  2258. if ((brdp->state & BST_STARTED) && (rc >= 0)) {
  2259. sp += sprintf(sp, "tx:%d rx:%d", (int) stli_comstats.txtotal,
  2260. (int) stli_comstats.rxtotal);
  2261. if (stli_comstats.rxframing)
  2262. sp += sprintf(sp, " fe:%d",
  2263. (int) stli_comstats.rxframing);
  2264. if (stli_comstats.rxparity)
  2265. sp += sprintf(sp, " pe:%d",
  2266. (int) stli_comstats.rxparity);
  2267. if (stli_comstats.rxbreaks)
  2268. sp += sprintf(sp, " brk:%d",
  2269. (int) stli_comstats.rxbreaks);
  2270. if (stli_comstats.rxoverrun)
  2271. sp += sprintf(sp, " oe:%d",
  2272. (int) stli_comstats.rxoverrun);
  2273. cnt = sprintf(sp, "%s%s%s%s%s ",
  2274. (stli_comstats.signals & TIOCM_RTS) ? "|RTS" : "",
  2275. (stli_comstats.signals & TIOCM_CTS) ? "|CTS" : "",
  2276. (stli_comstats.signals & TIOCM_DTR) ? "|DTR" : "",
  2277. (stli_comstats.signals & TIOCM_CD) ? "|DCD" : "",
  2278. (stli_comstats.signals & TIOCM_DSR) ? "|DSR" : "");
  2279. *sp = ' ';
  2280. sp += cnt;
  2281. }
  2282. for (cnt = (sp - pos); (cnt < (MAXLINE - 1)); cnt++)
  2283. *sp++ = ' ';
  2284. if (cnt >= MAXLINE)
  2285. pos[(MAXLINE - 2)] = '+';
  2286. pos[(MAXLINE - 1)] = 'n';
  2287. return(MAXLINE);
  2288. }
  2289. /*****************************************************************************/
  2290. /*
  2291.  * Port info, read from the /proc file system.
  2292.  */
  2293. static int stli_readproc(char *page, char **start, off_t off, int count, int *eof, void *data)
  2294. {
  2295. stlibrd_t *brdp;
  2296. stliport_t *portp;
  2297. int brdnr, portnr, totalport;
  2298. int curoff, maxoff;
  2299. char *pos;
  2300. #if DEBUG
  2301. printk(KERN_DEBUG "stli_readproc(page=%x,start=%x,off=%x,count=%d,eof=%x,"
  2302. "data=%xn", (int) page, (int) start, (int) off, count,
  2303. (int) eof, (int) data);
  2304. #endif
  2305. pos = page;
  2306. totalport = 0;
  2307. curoff = 0;
  2308. if (off == 0) {
  2309. pos += sprintf(pos, "%s: version %s", stli_drvtitle,
  2310. stli_drvversion);
  2311. while (pos < (page + MAXLINE - 1))
  2312. *pos++ = ' ';
  2313. *pos++ = 'n';
  2314. }
  2315. curoff =  MAXLINE;
  2316. /*
  2317.  * We scan through for each board, panel and port. The offset is