ppdev.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  1. /*
  2. * linux/drivers/char/ppdev.c
  3. *
  4. * This is the code behind /dev/parport* -- it allows a user-space
  5. * application to use the parport subsystem.
  6. *
  7. * Copyright (C) 1998-2000, 2002 Tim Waugh <tim@cyberelk.net>
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License
  11. * as published by the Free Software Foundation; either version
  12. * 2 of the License, or (at your option) any later version.
  13. *
  14. * A /dev/parportx device node represents an arbitrary device
  15. * on port 'x'. The following operations are possible:
  16. *
  17. * open do nothing, set up default IEEE 1284 protocol to be COMPAT
  18. * close release port and unregister device (if necessary)
  19. * ioctl
  20. * EXCL register device exclusively (may fail)
  21. * CLAIM (register device first time) parport_claim_or_block
  22. * RELEASE parport_release
  23. * SETMODE set the IEEE 1284 protocol to use for read/write
  24. * SETPHASE set the IEEE 1284 phase of a particular mode. Not to be
  25. * confused with ioctl(fd, SETPHASER, &stun). ;-)
  26. * DATADIR data_forward / data_reverse
  27. * WDATA write_data
  28. * RDATA read_data
  29. * WCONTROL write_control
  30. * RCONTROL read_control
  31. * FCONTROL frob_control
  32. * RSTATUS read_status
  33. * NEGOT parport_negotiate
  34. * YIELD parport_yield_blocking
  35. * WCTLONIRQ on interrupt, set control lines
  36. * CLRIRQ clear (and return) interrupt count
  37. * SETTIME sets device timeout (struct timeval)
  38. * GETTIME gets device timeout (struct timeval)
  39. * GETMODES gets hardware supported modes (unsigned int)
  40. * GETMODE gets the current IEEE1284 mode
  41. * GETPHASE gets the current IEEE1284 phase
  42. * GETFLAGS gets current (user-visible) flags
  43. * SETFLAGS sets current (user-visible) flags
  44. * read/write read or write in current IEEE 1284 protocol
  45. * select wait for interrupt (in readfds)
  46. *
  47. * Changes:
  48. * Added SETTIME/GETTIME ioctl, Fred Barnes, 1999.
  49. *
  50. * Arnaldo Carvalho de Melo <acme@conectiva.com.br> 2000/08/25
  51. * - On error, copy_from_user and copy_to_user do not return -EFAULT,
  52. * They return the positive number of bytes *not* copied due to address
  53. * space errors.
  54. *
  55. * Added GETMODES/GETMODE/GETPHASE ioctls, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001.
  56. * Added GETFLAGS/SETFLAGS ioctls, Fred Barnes, 04/2001
  57. */
  58. #include <linux/module.h>
  59. #include <linux/init.h>
  60. #include <linux/sched.h>
  61. #include <linux/device.h>
  62. #include <linux/devfs_fs_kernel.h>
  63. #include <linux/ioctl.h>
  64. #include <linux/parport.h>
  65. #include <linux/ctype.h>
  66. #include <linux/poll.h>
  67. #include <linux/major.h>
  68. #include <linux/ppdev.h>
  69. #include <linux/smp_lock.h>
  70. #include <linux/device.h>
  71. #include <asm/uaccess.h>
  72. #define PP_VERSION "ppdev: user-space parallel port driver"
  73. #define CHRDEV "ppdev"
  74. struct pp_struct {
  75. struct pardevice * pdev;
  76. wait_queue_head_t irq_wait;
  77. atomic_t irqc;
  78. unsigned int flags;
  79. int irqresponse;
  80. unsigned char irqctl;
  81. struct ieee1284_info state;
  82. struct ieee1284_info saved_state;
  83. long default_inactivity;
  84. };
  85. /* pp_struct.flags bitfields */
  86. #define PP_CLAIMED (1<<0)
  87. #define PP_EXCL (1<<1)
  88. /* Other constants */
  89. #define PP_INTERRUPT_TIMEOUT (10 * HZ) /* 10s */
  90. #define PP_BUFFER_SIZE 1024
  91. #define PARDEVICE_MAX 8
  92. /* ROUND_UP macro from fs/select.c */
  93. #define ROUND_UP(x,y) (((x)+(y)-1)/(y))
  94. static inline void pp_enable_irq (struct pp_struct *pp)
  95. {
  96. struct parport *port = pp->pdev->port;
  97. port->ops->enable_irq (port);
  98. }
  99. static ssize_t pp_read (struct file * file, char __user * buf, size_t count,
  100. loff_t * ppos)
  101. {
  102. unsigned int minor = iminor(file->f_dentry->d_inode);
  103. struct pp_struct *pp = file->private_data;
  104. char * kbuffer;
  105. ssize_t bytes_read = 0;
  106. struct parport *pport;
  107. int mode;
  108. if (!(pp->flags & PP_CLAIMED)) {
  109. /* Don't have the port claimed */
  110. printk (KERN_DEBUG CHRDEV "%x: claim the port first\n",
  111. minor);
  112. return -EINVAL;
  113. }
  114. /* Trivial case. */
  115. if (count == 0)
  116. return 0;
  117. kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
  118. if (!kbuffer) {
  119. return -ENOMEM;
  120. }
  121. pport = pp->pdev->port;
  122. mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
  123. parport_set_timeout (pp->pdev,
  124. (file->f_flags & O_NONBLOCK) ?
  125. PARPORT_INACTIVITY_O_NONBLOCK :
  126. pp->default_inactivity);
  127. while (bytes_read == 0) {
  128. ssize_t need = min_t(unsigned long, count, PP_BUFFER_SIZE);
  129. if (mode == IEEE1284_MODE_EPP) {
  130. /* various specials for EPP mode */
  131. int flags = 0;
  132. size_t (*fn)(struct parport *, void *, size_t, int);
  133. if (pp->flags & PP_W91284PIC) {
  134. flags |= PARPORT_W91284PIC;
  135. }
  136. if (pp->flags & PP_FASTREAD) {
  137. flags |= PARPORT_EPP_FAST;
  138. }
  139. if (pport->ieee1284.mode & IEEE1284_ADDR) {
  140. fn = pport->ops->epp_read_addr;
  141. } else {
  142. fn = pport->ops->epp_read_data;
  143. }
  144. bytes_read = (*fn)(pport, kbuffer, need, flags);
  145. } else {
  146. bytes_read = parport_read (pport, kbuffer, need);
  147. }
  148. if (bytes_read != 0)
  149. break;
  150. if (file->f_flags & O_NONBLOCK) {
  151. bytes_read = -EAGAIN;
  152. break;
  153. }
  154. if (signal_pending (current)) {
  155. bytes_read = -ERESTARTSYS;
  156. break;
  157. }
  158. cond_resched();
  159. }
  160. parport_set_timeout (pp->pdev, pp->default_inactivity);
  161. if (bytes_read > 0 && copy_to_user (buf, kbuffer, bytes_read))
  162. bytes_read = -EFAULT;
  163. kfree (kbuffer);
  164. pp_enable_irq (pp);
  165. return bytes_read;
  166. }
  167. static ssize_t pp_write (struct file * file, const char __user * buf,
  168. size_t count, loff_t * ppos)
  169. {
  170. unsigned int minor = iminor(file->f_dentry->d_inode);
  171. struct pp_struct *pp = file->private_data;
  172. char * kbuffer;
  173. ssize_t bytes_written = 0;
  174. ssize_t wrote;
  175. int mode;
  176. struct parport *pport;
  177. if (!(pp->flags & PP_CLAIMED)) {
  178. /* Don't have the port claimed */
  179. printk (KERN_DEBUG CHRDEV "%x: claim the port first\n",
  180. minor);
  181. return -EINVAL;
  182. }
  183. kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
  184. if (!kbuffer) {
  185. return -ENOMEM;
  186. }
  187. pport = pp->pdev->port;
  188. mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
  189. parport_set_timeout (pp->pdev,
  190. (file->f_flags & O_NONBLOCK) ?
  191. PARPORT_INACTIVITY_O_NONBLOCK :
  192. pp->default_inactivity);
  193. while (bytes_written < count) {
  194. ssize_t n = min_t(unsigned long, count - bytes_written, PP_BUFFER_SIZE);
  195. if (copy_from_user (kbuffer, buf + bytes_written, n)) {
  196. bytes_written = -EFAULT;
  197. break;
  198. }
  199. if ((pp->flags & PP_FASTWRITE) && (mode == IEEE1284_MODE_EPP)) {
  200. /* do a fast EPP write */
  201. if (pport->ieee1284.mode & IEEE1284_ADDR) {
  202. wrote = pport->ops->epp_write_addr (pport,
  203. kbuffer, n, PARPORT_EPP_FAST);
  204. } else {
  205. wrote = pport->ops->epp_write_data (pport,
  206. kbuffer, n, PARPORT_EPP_FAST);
  207. }
  208. } else {
  209. wrote = parport_write (pp->pdev->port, kbuffer, n);
  210. }
  211. if (wrote <= 0) {
  212. if (!bytes_written) {
  213. bytes_written = wrote;
  214. }
  215. break;
  216. }
  217. bytes_written += wrote;
  218. if (file->f_flags & O_NONBLOCK) {
  219. if (!bytes_written)
  220. bytes_written = -EAGAIN;
  221. break;
  222. }
  223. if (signal_pending (current)) {
  224. if (!bytes_written) {
  225. bytes_written = -EINTR;
  226. }
  227. break;
  228. }
  229. cond_resched();
  230. }
  231. parport_set_timeout (pp->pdev, pp->default_inactivity);
  232. kfree (kbuffer);
  233. pp_enable_irq (pp);
  234. return bytes_written;
  235. }
  236. static void pp_irq (int irq, void * private, struct pt_regs * unused)
  237. {
  238. struct pp_struct * pp = (struct pp_struct *) private;
  239. if (pp->irqresponse) {
  240. parport_write_control (pp->pdev->port, pp->irqctl);
  241. pp->irqresponse = 0;
  242. }
  243. atomic_inc (&pp->irqc);
  244. wake_up_interruptible (&pp->irq_wait);
  245. }
  246. static int register_device (int minor, struct pp_struct *pp)
  247. {
  248. struct parport *port;
  249. struct pardevice * pdev = NULL;
  250. char *name;
  251. int fl;
  252. name = kmalloc (strlen (CHRDEV) + 3, GFP_KERNEL);
  253. if (name == NULL)
  254. return -ENOMEM;
  255. sprintf (name, CHRDEV "%x", minor);
  256. port = parport_find_number (minor);
  257. if (!port) {
  258. printk (KERN_WARNING "%s: no associated port!\n", name);
  259. kfree (name);
  260. return -ENXIO;
  261. }
  262. fl = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0;
  263. pdev = parport_register_device (port, name, NULL,
  264. NULL, pp_irq, fl, pp);
  265. parport_put_port (port);
  266. if (!pdev) {
  267. printk (KERN_WARNING "%s: failed to register device!\n", name);
  268. kfree (name);
  269. return -ENXIO;
  270. }
  271. pp->pdev = pdev;
  272. printk (KERN_DEBUG "%s: registered pardevice\n", name);
  273. return 0;
  274. }
  275. static enum ieee1284_phase init_phase (int mode)
  276. {
  277. switch (mode & ~(IEEE1284_DEVICEID
  278. | IEEE1284_ADDR)) {
  279. case IEEE1284_MODE_NIBBLE:
  280. case IEEE1284_MODE_BYTE:
  281. return IEEE1284_PH_REV_IDLE;
  282. }
  283. return IEEE1284_PH_FWD_IDLE;
  284. }
  285. static int pp_ioctl(struct inode *inode, struct file *file,
  286. unsigned int cmd, unsigned long arg)
  287. {
  288. unsigned int minor = iminor(inode);
  289. struct pp_struct *pp = file->private_data;
  290. struct parport * port;
  291. void __user *argp = (void __user *)arg;
  292. /* First handle the cases that don't take arguments. */
  293. switch (cmd) {
  294. case PPCLAIM:
  295. {
  296. struct ieee1284_info *info;
  297. int ret;
  298. if (pp->flags & PP_CLAIMED) {
  299. printk (KERN_DEBUG CHRDEV
  300. "%x: you've already got it!\n", minor);
  301. return -EINVAL;
  302. }
  303. /* Deferred device registration. */
  304. if (!pp->pdev) {
  305. int err = register_device (minor, pp);
  306. if (err) {
  307. return err;
  308. }
  309. }
  310. ret = parport_claim_or_block (pp->pdev);
  311. if (ret < 0)
  312. return ret;
  313. pp->flags |= PP_CLAIMED;
  314. /* For interrupt-reporting to work, we need to be
  315. * informed of each interrupt. */
  316. pp_enable_irq (pp);
  317. /* We may need to fix up the state machine. */
  318. info = &pp->pdev->port->ieee1284;
  319. pp->saved_state.mode = info->mode;
  320. pp->saved_state.phase = info->phase;
  321. info->mode = pp->state.mode;
  322. info->phase = pp->state.phase;
  323. pp->default_inactivity = parport_set_timeout (pp->pdev, 0);
  324. parport_set_timeout (pp->pdev, pp->default_inactivity);
  325. return 0;
  326. }
  327. case PPEXCL:
  328. if (pp->pdev) {
  329. printk (KERN_DEBUG CHRDEV "%x: too late for PPEXCL; "
  330. "already registered\n", minor);
  331. if (pp->flags & PP_EXCL)
  332. /* But it's not really an error. */
  333. return 0;
  334. /* There's no chance of making the driver happy. */
  335. return -EINVAL;
  336. }
  337. /* Just remember to register the device exclusively
  338. * when we finally do the registration. */
  339. pp->flags |= PP_EXCL;
  340. return 0;
  341. case PPSETMODE:
  342. {
  343. int mode;
  344. if (copy_from_user (&mode, argp, sizeof (mode)))
  345. return -EFAULT;
  346. /* FIXME: validate mode */
  347. pp->state.mode = mode;
  348. pp->state.phase = init_phase (mode);
  349. if (pp->flags & PP_CLAIMED) {
  350. pp->pdev->port->ieee1284.mode = mode;
  351. pp->pdev->port->ieee1284.phase = pp->state.phase;
  352. }
  353. return 0;
  354. }
  355. case PPGETMODE:
  356. {
  357. int mode;
  358. if (pp->flags & PP_CLAIMED) {
  359. mode = pp->pdev->port->ieee1284.mode;
  360. } else {
  361. mode = pp->state.mode;
  362. }
  363. if (copy_to_user (argp, &mode, sizeof (mode))) {
  364. return -EFAULT;
  365. }
  366. return 0;
  367. }
  368. case PPSETPHASE:
  369. {
  370. int phase;
  371. if (copy_from_user (&phase, argp, sizeof (phase))) {
  372. return -EFAULT;
  373. }
  374. /* FIXME: validate phase */
  375. pp->state.phase = phase;
  376. if (pp->flags & PP_CLAIMED) {
  377. pp->pdev->port->ieee1284.phase = phase;
  378. }
  379. return 0;
  380. }
  381. case PPGETPHASE:
  382. {
  383. int phase;
  384. if (pp->flags & PP_CLAIMED) {
  385. phase = pp->pdev->port->ieee1284.phase;
  386. } else {
  387. phase = pp->state.phase;
  388. }
  389. if (copy_to_user (argp, &phase, sizeof (phase))) {
  390. return -EFAULT;
  391. }
  392. return 0;
  393. }
  394. case PPGETMODES:
  395. {
  396. unsigned int modes;
  397. port = parport_find_number (minor);
  398. if (!port)
  399. return -ENODEV;
  400. modes = port->modes;
  401. if (copy_to_user (argp, &modes, sizeof (modes))) {
  402. return -EFAULT;
  403. }
  404. return 0;
  405. }
  406. case PPSETFLAGS:
  407. {
  408. int uflags;
  409. if (copy_from_user (&uflags, argp, sizeof (uflags))) {
  410. return -EFAULT;
  411. }
  412. pp->flags &= ~PP_FLAGMASK;
  413. pp->flags |= (uflags & PP_FLAGMASK);
  414. return 0;
  415. }
  416. case PPGETFLAGS:
  417. {
  418. int uflags;
  419. uflags = pp->flags & PP_FLAGMASK;
  420. if (copy_to_user (argp, &uflags, sizeof (uflags))) {
  421. return -EFAULT;
  422. }
  423. return 0;
  424. }
  425. } /* end switch() */
  426. /* Everything else requires the port to be claimed, so check
  427. * that now. */
  428. if ((pp->flags & PP_CLAIMED) == 0) {
  429. printk (KERN_DEBUG CHRDEV "%x: claim the port first\n",
  430. minor);
  431. return -EINVAL;
  432. }
  433. port = pp->pdev->port;
  434. switch (cmd) {
  435. struct ieee1284_info *info;
  436. unsigned char reg;
  437. unsigned char mask;
  438. int mode;
  439. int ret;
  440. struct timeval par_timeout;
  441. long to_jiffies;
  442. case PPRSTATUS:
  443. reg = parport_read_status (port);
  444. if (copy_to_user (argp, &reg, sizeof (reg)))
  445. return -EFAULT;
  446. return 0;
  447. case PPRDATA:
  448. reg = parport_read_data (port);
  449. if (copy_to_user (argp, &reg, sizeof (reg)))
  450. return -EFAULT;
  451. return 0;
  452. case PPRCONTROL:
  453. reg = parport_read_control (port);
  454. if (copy_to_user (argp, &reg, sizeof (reg)))
  455. return -EFAULT;
  456. return 0;
  457. case PPYIELD:
  458. parport_yield_blocking (pp->pdev);
  459. return 0;
  460. case PPRELEASE:
  461. /* Save the state machine's state. */
  462. info = &pp->pdev->port->ieee1284;
  463. pp->state.mode = info->mode;
  464. pp->state.phase = info->phase;
  465. info->mode = pp->saved_state.mode;
  466. info->phase = pp->saved_state.phase;
  467. parport_release (pp->pdev);
  468. pp->flags &= ~PP_CLAIMED;
  469. return 0;
  470. case PPWCONTROL:
  471. if (copy_from_user (&reg, argp, sizeof (reg)))
  472. return -EFAULT;
  473. parport_write_control (port, reg);
  474. return 0;
  475. case PPWDATA:
  476. if (copy_from_user (&reg, argp, sizeof (reg)))
  477. return -EFAULT;
  478. parport_write_data (port, reg);
  479. return 0;
  480. case PPFCONTROL:
  481. if (copy_from_user (&mask, argp,
  482. sizeof (mask)))
  483. return -EFAULT;
  484. if (copy_from_user (&reg, 1 + (unsigned char __user *) arg,
  485. sizeof (reg)))
  486. return -EFAULT;
  487. parport_frob_control (port, mask, reg);
  488. return 0;
  489. case PPDATADIR:
  490. if (copy_from_user (&mode, argp, sizeof (mode)))
  491. return -EFAULT;
  492. if (mode)
  493. port->ops->data_reverse (port);
  494. else
  495. port->ops->data_forward (port);
  496. return 0;
  497. case PPNEGOT:
  498. if (copy_from_user (&mode, argp, sizeof (mode)))
  499. return -EFAULT;
  500. switch ((ret = parport_negotiate (port, mode))) {
  501. case 0: break;
  502. case -1: /* handshake failed, peripheral not IEEE 1284 */
  503. ret = -EIO;
  504. break;
  505. case 1: /* handshake succeeded, peripheral rejected mode */
  506. ret = -ENXIO;
  507. break;
  508. }
  509. pp_enable_irq (pp);
  510. return ret;
  511. case PPWCTLONIRQ:
  512. if (copy_from_user (&reg, argp, sizeof (reg)))
  513. return -EFAULT;
  514. /* Remember what to set the control lines to, for next
  515. * time we get an interrupt. */
  516. pp->irqctl = reg;
  517. pp->irqresponse = 1;
  518. return 0;
  519. case PPCLRIRQ:
  520. ret = atomic_read (&pp->irqc);
  521. if (copy_to_user (argp, &ret, sizeof (ret)))
  522. return -EFAULT;
  523. atomic_sub (ret, &pp->irqc);
  524. return 0;
  525. case PPSETTIME:
  526. if (copy_from_user (&par_timeout, argp, sizeof(struct timeval))) {
  527. return -EFAULT;
  528. }
  529. /* Convert to jiffies, place in pp->pdev->timeout */
  530. if ((par_timeout.tv_sec < 0) || (par_timeout.tv_usec < 0)) {
  531. return -EINVAL;
  532. }
  533. to_jiffies = ROUND_UP(par_timeout.tv_usec, 1000000/HZ);
  534. to_jiffies += par_timeout.tv_sec * (long)HZ;
  535. if (to_jiffies <= 0) {
  536. return -EINVAL;
  537. }
  538. pp->pdev->timeout = to_jiffies;
  539. return 0;
  540. case PPGETTIME:
  541. to_jiffies = pp->pdev->timeout;
  542. par_timeout.tv_sec = to_jiffies / HZ;
  543. par_timeout.tv_usec = (to_jiffies % (long)HZ) * (1000000/HZ);
  544. if (copy_to_user (argp, &par_timeout, sizeof(struct timeval)))
  545. return -EFAULT;
  546. return 0;
  547. default:
  548. printk (KERN_DEBUG CHRDEV "%x: What? (cmd=0x%x)\n", minor,
  549. cmd);
  550. return -EINVAL;
  551. }
  552. /* Keep the compiler happy */
  553. return 0;
  554. }
  555. static int pp_open (struct inode * inode, struct file * file)
  556. {
  557. unsigned int minor = iminor(inode);
  558. struct pp_struct *pp;
  559. if (minor >= PARPORT_MAX)
  560. return -ENXIO;
  561. pp = kmalloc (sizeof (struct pp_struct), GFP_KERNEL);
  562. if (!pp)
  563. return -ENOMEM;
  564. pp->state.mode = IEEE1284_MODE_COMPAT;
  565. pp->state.phase = init_phase (pp->state.mode);
  566. pp->flags = 0;
  567. pp->irqresponse = 0;
  568. atomic_set (&pp->irqc, 0);
  569. init_waitqueue_head (&pp->irq_wait);
  570. /* Defer the actual device registration until the first claim.
  571. * That way, we know whether or not the driver wants to have
  572. * exclusive access to the port (PPEXCL).
  573. */
  574. pp->pdev = NULL;
  575. file->private_data = pp;
  576. return 0;
  577. }
  578. static int pp_release (struct inode * inode, struct file * file)
  579. {
  580. unsigned int minor = iminor(inode);
  581. struct pp_struct *pp = file->private_data;
  582. int compat_negot;
  583. compat_negot = 0;
  584. if (!(pp->flags & PP_CLAIMED) && pp->pdev &&
  585. (pp->state.mode != IEEE1284_MODE_COMPAT)) {
  586. struct ieee1284_info *info;
  587. /* parport released, but not in compatibility mode */
  588. parport_claim_or_block (pp->pdev);
  589. pp->flags |= PP_CLAIMED;
  590. info = &pp->pdev->port->ieee1284;
  591. pp->saved_state.mode = info->mode;
  592. pp->saved_state.phase = info->phase;
  593. info->mode = pp->state.mode;
  594. info->phase = pp->state.phase;
  595. compat_negot = 1;
  596. } else if ((pp->flags & PP_CLAIMED) && pp->pdev &&
  597. (pp->pdev->port->ieee1284.mode != IEEE1284_MODE_COMPAT)) {
  598. compat_negot = 2;
  599. }
  600. if (compat_negot) {
  601. parport_negotiate (pp->pdev->port, IEEE1284_MODE_COMPAT);
  602. printk (KERN_DEBUG CHRDEV
  603. "%x: negotiated back to compatibility mode because "
  604. "user-space forgot\n", minor);
  605. }
  606. if (pp->flags & PP_CLAIMED) {
  607. struct ieee1284_info *info;
  608. info = &pp->pdev->port->ieee1284;
  609. pp->state.mode = info->mode;
  610. pp->state.phase = info->phase;
  611. info->mode = pp->saved_state.mode;
  612. info->phase = pp->saved_state.phase;
  613. parport_release (pp->pdev);
  614. if (compat_negot != 1) {
  615. printk (KERN_DEBUG CHRDEV "%x: released pardevice "
  616. "because user-space forgot\n", minor);
  617. }
  618. }
  619. if (pp->pdev) {
  620. const char *name = pp->pdev->name;
  621. parport_unregister_device (pp->pdev);
  622. kfree (name);
  623. pp->pdev = NULL;
  624. printk (KERN_DEBUG CHRDEV "%x: unregistered pardevice\n",
  625. minor);
  626. }
  627. kfree (pp);
  628. return 0;
  629. }
  630. /* No kernel lock held - fine */
  631. static unsigned int pp_poll (struct file * file, poll_table * wait)
  632. {
  633. struct pp_struct *pp = file->private_data;
  634. unsigned int mask = 0;
  635. poll_wait (file, &pp->irq_wait, wait);
  636. if (atomic_read (&pp->irqc))
  637. mask |= POLLIN | POLLRDNORM;
  638. return mask;
  639. }
  640. static struct class *ppdev_class;
  641. static struct file_operations pp_fops = {
  642. .owner = THIS_MODULE,
  643. .llseek = no_llseek,
  644. .read = pp_read,
  645. .write = pp_write,
  646. .poll = pp_poll,
  647. .ioctl = pp_ioctl,
  648. .open = pp_open,
  649. .release = pp_release,
  650. };
  651. static void pp_attach(struct parport *port)
  652. {
  653. class_device_create(ppdev_class, NULL, MKDEV(PP_MAJOR, port->number),
  654. NULL, "parport%d", port->number);
  655. }
  656. static void pp_detach(struct parport *port)
  657. {
  658. class_device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number));
  659. }
  660. static struct parport_driver pp_driver = {
  661. .name = CHRDEV,
  662. .attach = pp_attach,
  663. .detach = pp_detach,
  664. };
  665. static int __init ppdev_init (void)
  666. {
  667. int i, err = 0;
  668. if (register_chrdev (PP_MAJOR, CHRDEV, &pp_fops)) {
  669. printk (KERN_WARNING CHRDEV ": unable to get major %d\n",
  670. PP_MAJOR);
  671. return -EIO;
  672. }
  673. ppdev_class = class_create(THIS_MODULE, CHRDEV);
  674. if (IS_ERR(ppdev_class)) {
  675. err = PTR_ERR(ppdev_class);
  676. goto out_chrdev;
  677. }
  678. devfs_mk_dir("parports");
  679. for (i = 0; i < PARPORT_MAX; i++) {
  680. devfs_mk_cdev(MKDEV(PP_MAJOR, i),
  681. S_IFCHR | S_IRUGO | S_IWUGO, "parports/%d", i);
  682. }
  683. if (parport_register_driver(&pp_driver)) {
  684. printk (KERN_WARNING CHRDEV ": unable to register with parport\n");
  685. goto out_class;
  686. }
  687. printk (KERN_INFO PP_VERSION "\n");
  688. goto out;
  689. out_class:
  690. for (i = 0; i < PARPORT_MAX; i++)
  691. devfs_remove("parports/%d", i);
  692. devfs_remove("parports");
  693. class_destroy(ppdev_class);
  694. out_chrdev:
  695. unregister_chrdev(PP_MAJOR, CHRDEV);
  696. out:
  697. return err;
  698. }
  699. static void __exit ppdev_cleanup (void)
  700. {
  701. int i;
  702. /* Clean up all parport stuff */
  703. for (i = 0; i < PARPORT_MAX; i++)
  704. devfs_remove("parports/%d", i);
  705. parport_unregister_driver(&pp_driver);
  706. devfs_remove("parports");
  707. class_destroy(ppdev_class);
  708. unregister_chrdev (PP_MAJOR, CHRDEV);
  709. }
  710. module_init(ppdev_init);
  711. module_exit(ppdev_cleanup);
  712. MODULE_LICENSE("GPL");
  713. MODULE_ALIAS_CHARDEV_MAJOR(PP_MAJOR);