via-macii.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:17k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Device driver for the via ADB on (many) Mac II-class machines
  3.  *
  4.  * Based on the original ADB keyboard handler Copyright (c) 1997 Alan Cox
  5.  * Also derived from code Copyright (C) 1996 Paul Mackerras.
  6.  *
  7.  * With various updates provided over the years by Michael Schmitz,
  8.  * Guideo Koerber and others.
  9.  *
  10.  * Rewrite for Unified ADB by Joshua M. Thompson (funaho@jurai.org)
  11.  *
  12.  * 1999-08-02 (jmt) - Initial rewrite for Unified ADB.
  13.  */
  14.  
  15. #include <stdarg.h>
  16. #include <linux/types.h>
  17. #include <linux/errno.h>
  18. #include <linux/kernel.h>
  19. #include <linux/delay.h>
  20. #include <linux/sched.h>
  21. #include <linux/adb.h>
  22. #include <asm/macintosh.h>
  23. #include <asm/macints.h>
  24. #include <asm/machw.h>
  25. #include <asm/mac_via.h>
  26. #include <asm/io.h>
  27. #include <asm/system.h>
  28. #include <asm/init.h>
  29. static volatile unsigned char *via;
  30. /* VIA registers - spaced 0x200 bytes apart */
  31. #define RS 0x200 /* skip between registers */
  32. #define B 0 /* B-side data */
  33. #define A RS /* A-side data */
  34. #define DIRB (2*RS) /* B-side direction (1=output) */
  35. #define DIRA (3*RS) /* A-side direction (1=output) */
  36. #define T1CL (4*RS) /* Timer 1 ctr/latch (low 8 bits) */
  37. #define T1CH (5*RS) /* Timer 1 counter (high 8 bits) */
  38. #define T1LL (6*RS) /* Timer 1 latch (low 8 bits) */
  39. #define T1LH (7*RS) /* Timer 1 latch (high 8 bits) */
  40. #define T2CL (8*RS) /* Timer 2 ctr/latch (low 8 bits) */
  41. #define T2CH (9*RS) /* Timer 2 counter (high 8 bits) */
  42. #define SR (10*RS) /* Shift register */
  43. #define ACR (11*RS) /* Auxiliary control register */
  44. #define PCR (12*RS) /* Peripheral control register */
  45. #define IFR (13*RS) /* Interrupt flag register */
  46. #define IER (14*RS) /* Interrupt enable register */
  47. #define ANH (15*RS) /* A-side data, no handshake */
  48. /* Bits in B data register: all active low */
  49. #define TREQ 0x08 /* Transfer request (input) */
  50. #define TACK 0x10 /* Transfer acknowledge (output) */
  51. #define TIP 0x20 /* Transfer in progress (output) */
  52. #define ST_MASK 0x30 /* mask for selecting ADB state bits */
  53. /* Bits in ACR */
  54. #define SR_CTRL 0x1c /* Shift register control bits */
  55. #define SR_EXT 0x0c /* Shift on external clock */
  56. #define SR_OUT 0x10 /* Shift out if 1 */
  57. /* Bits in IFR and IER */
  58. #define IER_SET 0x80 /* set bits in IER */
  59. #define IER_CLR 0 /* clear bits in IER */
  60. #define SR_INT 0x04 /* Shift register full/empty */
  61. #define SR_DATA 0x08 /* Shift register data */
  62. #define SR_CLOCK 0x10 /* Shift register clock */
  63. /* ADB transaction states according to GMHW */
  64. #define ST_CMD 0x00 /* ADB state: command byte */
  65. #define ST_EVEN 0x10 /* ADB state: even data byte */
  66. #define ST_ODD 0x20 /* ADB state: odd data byte */
  67. #define ST_IDLE 0x30 /* ADB state: idle, nothing to send */
  68. static int  macii_init_via(void);
  69. static void macii_start(void);
  70. static void macii_interrupt(int irq, void *arg, struct pt_regs *regs);
  71. static void macii_retransmit(int);
  72. static void macii_queue_poll(void);
  73. static int macii_probe(void);
  74. static int macii_init(void);
  75. static int macii_send_request(struct adb_request *req, int sync);
  76. static int macii_write(struct adb_request *req);
  77. static int macii_autopoll(int devs);
  78. static void macii_poll(void);
  79. static int macii_reset_bus(void);
  80. struct adb_driver via_macii_driver = {
  81. "Mac II",
  82. macii_probe,
  83. macii_init,
  84. macii_send_request,
  85. macii_autopoll,
  86. macii_poll,
  87. macii_reset_bus
  88. };
  89. static enum macii_state {
  90. idle,
  91. sent_first_byte,
  92. sending,
  93. reading,
  94. read_done,
  95. awaiting_reply
  96. } macii_state;
  97. static int need_poll    = 0;
  98. static int command_byte = 0;
  99. static int last_reply   = 0;
  100. static int last_active  = 0;
  101. static struct adb_request *current_req;
  102. static struct adb_request *last_req;
  103. static struct adb_request *retry_req;
  104. static unsigned char reply_buf[16];
  105. static unsigned char *reply_ptr;
  106. static int reply_len;
  107. static int reading_reply;
  108. static int data_index;
  109. static int first_byte;
  110. static int prefix_len;
  111. static int status = ST_IDLE|TREQ;
  112. static int last_status;
  113. static int driver_running = 0;
  114. /* debug level 10 required for ADB logging (should be && debug_adb, ideally) */
  115. /* Check for MacII style ADB */
  116. static int macii_probe(void)
  117. {
  118. if (macintosh_config->adb_type != MAC_ADB_II) return -ENODEV;
  119. via = via1;
  120. printk("adb: Mac II ADB Driver v0.4 for Unified ADBn");
  121. return 0;
  122. }
  123. /* Initialize the driver */
  124. int macii_init(void)
  125. {
  126. unsigned long flags;
  127. int err;
  128. save_flags(flags);
  129. cli();
  130. err = macii_init_via();
  131. if (err) return err;
  132. err = request_irq(IRQ_MAC_ADB, macii_interrupt, IRQ_FLG_LOCK, "ADB",
  133.     macii_interrupt);
  134. if (err) return err;
  135. macii_state = idle;
  136. restore_flags(flags);
  137. return 0;
  138. }
  139. /* initialize the hardware */
  140. static int macii_init_via(void)
  141. {
  142. unsigned char x;
  143. /* Set the lines up. We want TREQ as input TACK|TIP as output */
  144. via[DIRB] = (via[DIRB] | TACK | TIP) & ~TREQ;
  145. /* Set up state: idle */
  146. via[B] |= ST_IDLE;
  147. last_status = via[B] & (ST_MASK|TREQ);
  148. /* Shift register on input */
  149. via[ACR] = (via[ACR] & ~SR_CTRL) | SR_EXT;
  150. /* Wipe any pending data and int */
  151. x = via[SR];
  152. return 0;
  153. }
  154. /* Send an ADB poll (Talk Register 0 command, tagged on the front of the request queue) */
  155. static void macii_queue_poll(void)
  156. {
  157. static int device = 0;
  158. static int in_poll=0;
  159. static struct adb_request req;
  160. unsigned long flags;
  161. if (in_poll) printk("macii_queue_poll: double poll!n");
  162. in_poll++;
  163. if (++device > 15) device = 1;
  164. adb_request(&req, NULL, ADBREQ_REPLY|ADBREQ_NOSEND, 1,
  165.     ADB_READREG(device, 0));
  166. save_flags(flags);
  167. cli();
  168. req.next = current_req;
  169. current_req = &req;
  170. restore_flags(flags);
  171. macii_start();
  172. in_poll--;
  173. }
  174. /* Send an ADB retransmit (Talk, appended to the request queue) */
  175. static void macii_retransmit(int device)
  176. {
  177. static int in_retransmit = 0;
  178. static struct adb_request rt;
  179. unsigned long flags;
  180. if (in_retransmit) printk("macii_retransmit: double retransmit!n");
  181. in_retransmit++;
  182. adb_request(&rt, NULL, ADBREQ_REPLY|ADBREQ_NOSEND, 1,
  183.     ADB_READREG(device, 0));
  184. save_flags(flags);
  185. cli();
  186. if (current_req != NULL) {
  187. last_req->next = &rt;
  188. last_req = &rt;
  189. } else {
  190. current_req = &rt;
  191. last_req = &rt;
  192. }
  193. if (macii_state == idle) macii_start();
  194. restore_flags(flags);
  195. in_retransmit--;
  196. }
  197. /* Send an ADB request; if sync, poll out the reply 'till it's done */
  198. static int macii_send_request(struct adb_request *req, int sync)
  199. {
  200. int i;
  201. i = macii_write(req);
  202. if (i) return i;
  203. if (sync) {
  204. while (!req->complete) macii_poll();
  205. }
  206. return 0;
  207. }
  208. /* Send an ADB request */
  209. static int macii_write(struct adb_request *req)
  210. {
  211. unsigned long flags;
  212. if (req->nbytes < 2 || req->data[0] != ADB_PACKET) {
  213. req->complete = 1;
  214. return -EINVAL;
  215. }
  216. req->next = 0;
  217. req->sent = 0;
  218. req->complete = 0;
  219. req->reply_len = 0;
  220. save_flags(flags); cli();
  221. if (current_req != NULL) {
  222. last_req->next = req;
  223. last_req = req;
  224. } else {
  225. current_req = req;
  226. last_req = req;
  227. if (macii_state == idle) macii_start();
  228. }
  229. restore_flags(flags);
  230. return 0;
  231. }
  232. /* Start auto-polling */
  233. static int macii_autopoll(int devs)
  234. {
  235. /* Just ping a random default address */
  236. if (!(current_req || retry_req))
  237. macii_retransmit( (last_active < 16 && last_active > 0) ? last_active : 3);
  238. return 0;
  239. }
  240. /* Prod the chip without interrupts */
  241. static void macii_poll(void)
  242. {
  243. unsigned long flags;
  244. save_flags(flags); cli();
  245. if (via[IFR] & SR_INT) macii_interrupt(0, 0, 0);
  246. restore_flags(flags);
  247. }
  248. /* Reset the bus */
  249. static int macii_reset_bus(void)
  250. {
  251. static struct adb_request req;
  252. /* Command = 0, Address = ignored */
  253. adb_request(&req, NULL, 0, 1, ADB_BUSRESET);
  254. return 0;
  255. }
  256. /* Start sending ADB packet */
  257. static void macii_start(void)
  258. {
  259. unsigned long flags;
  260. struct adb_request *req;
  261. req = current_req;
  262. if (!req) return;
  263. /* assert macii_state == idle */
  264. if (macii_state != idle) {
  265. printk("macii_start: called while driver busy (%p %x %x)!n",
  266. req, macii_state, (uint) via1[B] & (ST_MASK|TREQ));
  267. return;
  268. }
  269. save_flags(flags); cli();
  270. /* 
  271.  * IRQ signaled ?? (means ADB controller wants to send, or might 
  272.  * be end of packet if we were reading)
  273.  */
  274. if ((via[B] & TREQ) == 0) {
  275. /*
  276.  * FIXME - we need to restart this on a timer
  277.  * or a collision at boot hangs us.
  278.  * Never set macii_state to idle here, or macii_start 
  279.  * won't be called again from send_request!
  280.  * (need to re-check other cases ...)
  281.  */
  282. /*
  283.  * if the interrupt handler set the need_poll
  284.  * flag, it's hopefully a SRQ poll or re-Talk
  285.  * so we try to send here anyway
  286.  */
  287. if (!need_poll) {
  288. if (console_loglevel == 10)
  289. printk("macii_start: device busy - retry %p state %d status %x!n", 
  290. req, macii_state,
  291. (uint) via[B] & (ST_MASK|TREQ));
  292. retry_req = req;
  293. /* set ADB status here ? */
  294. restore_flags(flags);
  295. return;
  296. } else {
  297. need_poll = 0;
  298. }
  299. }
  300. /*
  301.  * Another retry pending? (sanity check)
  302.  */
  303. if (retry_req) {
  304. retry_req = NULL;
  305. }
  306. /* Now send it. Be careful though, that first byte of the request */
  307. /* is actually ADB_PACKET; the real data begins at index 1!   */
  308. /* store command byte */
  309. command_byte = req->data[1];
  310. /* Output mode */
  311. via[ACR] |= SR_OUT;
  312. /* Load data */
  313. via[SR] = req->data[1];
  314. /* set ADB state to 'command' */
  315. via[B] = (via[B] & ~ST_MASK) | ST_CMD;
  316. macii_state = sent_first_byte;
  317. data_index = 2;
  318. restore_flags(flags);
  319. }
  320. /*
  321.  * The notorious ADB interrupt handler - does all of the protocol handling, 
  322.  * except for starting new send operations. Relies heavily on the ADB 
  323.  * controller sending and receiving data, thereby generating SR interrupts
  324.  * for us. This means there has to be always activity on the ADB bus, otherwise
  325.  * the whole process dies and has to be re-kicked by sending TALK requests ...
  326.  * CUDA-based Macs seem to solve this with the autopoll option, for MacII-type
  327.  * ADB the problem isn't solved yet (retransmit of the latest active TALK seems
  328.  * a good choice; either on timeout or on a timer interrupt).
  329.  *
  330.  * The basic ADB state machine was left unchanged from the original MacII code
  331.  * by Alan Cox, which was based on the CUDA driver for PowerMac. 
  332.  * The syntax of the ADB status lines seems to be totally different on MacII, 
  333.  * though. MacII uses the states Command -> Even -> Odd -> Even ->...-> Idle for
  334.  * sending, and Idle -> Even -> Odd -> Even ->...-> Idle for receiving. Start 
  335.  * and end of a receive packet are signaled by asserting /IRQ on the interrupt
  336.  * line. Timeouts are signaled by a sequence of 4 0xFF, with /IRQ asserted on 
  337.  * every other byte. SRQ is probably signaled by 3 or more 0xFF tacked on the 
  338.  * end of a packet. (Thanks to Guido Koerber for eavesdropping on the ADB 
  339.  * protocol with a logic analyzer!!)
  340.  *
  341.  * Note: As of 21/10/97, the MacII ADB part works including timeout detection
  342.  * and retransmit (Talk to the last active device).
  343.  */
  344. void macii_interrupt(int irq, void *arg, struct pt_regs *regs)
  345. {
  346. int x, adbdir;
  347. unsigned long flags;
  348. struct adb_request *req;
  349. last_status = status;
  350. /* prevent races due to SCSI enabling ints */
  351. save_flags(flags); cli();
  352. if (driver_running) {
  353. restore_flags(flags);
  354. return;
  355. }
  356. driver_running = 1;
  357. status = via[B] & (ST_MASK|TREQ);
  358. adbdir = via[ACR] & SR_OUT;
  359. switch (macii_state) {
  360. case idle:
  361. x = via[SR];
  362. first_byte = x;
  363. /* set ADB state = even for first data byte */
  364. via[B] = (via[B] & ~ST_MASK) | ST_EVEN;
  365. reply_buf[0] = first_byte; /* was command_byte?? */
  366. reply_ptr = reply_buf + 1;
  367. reply_len = 1;
  368. prefix_len = 1;
  369. reading_reply = 0;
  370. macii_state = reading;
  371. break;
  372. case awaiting_reply:
  373. /* handshake etc. for II ?? */
  374. x = via[SR];
  375. first_byte = x;
  376. /* set ADB state = even for first data byte */
  377. via[B] = (via[B] & ~ST_MASK) | ST_EVEN;
  378. current_req->reply[0] = first_byte;
  379. reply_ptr = current_req->reply + 1;
  380. reply_len = 1;
  381. prefix_len = 1;
  382. reading_reply = 1;
  383. macii_state = reading;
  384. break;
  385. case sent_first_byte:
  386. req = current_req;
  387. /* maybe we're already done (Talk, or Poll)? */
  388. if (data_index >= req->nbytes) {
  389. /* reset to shift in */
  390. /* If it's a Listen command and we're done, someone's doing weird stuff. */
  391. if (((command_byte & 0x0C) == 0x08)
  392.     && (console_loglevel == 10))
  393. printk("macii_interrupt: listen command with no data: %x!n", 
  394. command_byte);
  395. /* reset to shift in */
  396. via[ACR] &= ~SR_OUT;
  397. x = via[SR];
  398. /* set ADB state idle - might get SRQ */
  399. via[B] = (via[B] & ~ST_MASK) | ST_IDLE;
  400. req->sent = 1;
  401. if (req->reply_expected) {
  402. macii_state = awaiting_reply;
  403. } else {
  404. req->complete = 1;
  405. current_req = req->next;
  406. if (req->done) (*req->done)(req);
  407. macii_state = idle;
  408. if (current_req || retry_req)
  409. macii_start();
  410. else
  411. macii_retransmit((command_byte & 0xF0) >> 4);
  412. }
  413. } else {
  414. /* SR already set to shift out; send byte */
  415. via[SR] = current_req->data[data_index++];
  416. /* set state to ST_EVEN (first byte was: ST_CMD) */
  417. via[B] = (via[B] & ~ST_MASK) | ST_EVEN;
  418. macii_state = sending;
  419. }
  420. break;
  421. case sending:
  422. req = current_req;
  423. if (data_index >= req->nbytes) {
  424. /* reset to shift in */
  425. via[ACR] &= ~SR_OUT;
  426. x = via[SR];
  427. /* set ADB state idle - might get SRQ */
  428. via[B] = (via[B] & ~ST_MASK) | ST_IDLE;
  429. req->sent = 1;
  430. if (req->reply_expected) {
  431. macii_state = awaiting_reply;
  432. } else {
  433. req->complete = 1;
  434. current_req = req->next;
  435. if (req->done) (*req->done)(req);
  436. macii_state = idle;
  437. if (current_req || retry_req)
  438. macii_start();
  439. else
  440. macii_retransmit((command_byte & 0xF0) >> 4);
  441. }
  442. } else {
  443. via[SR] = req->data[data_index++];
  444. /* invert state bits, toggle ODD/EVEN */
  445. via[B] ^= ST_MASK;
  446. }
  447. break;
  448. case reading:
  449. /* timeout / SRQ handling for II hw */
  450. if( (first_byte == 0xFF && (reply_len-prefix_len)==2 
  451.      && memcmp(reply_ptr-2,"xFFxFF",2)==0) || 
  452.     ((reply_len-prefix_len)==3 
  453.      && memcmp(reply_ptr-3,"xFFxFFxFF",3)==0))
  454. {
  455. /*
  456.  * possible timeout (in fact, most probably a 
  457.  * timeout, since SRQ can't be signaled without
  458.  * transfer on the bus).
  459.  * The last three bytes seen were FF, together 
  460.  * with the starting byte (in case we started
  461.  * on 'idle' or 'awaiting_reply') this probably
  462.  * makes four. So this is mostl likely #5!
  463.  * The timeout signal is a pattern 1 0 1 0 0..
  464.  * on /INT, meaning we missed it :-(
  465.  */
  466. x = via[SR];
  467. if (x != 0xFF) printk("macii_interrupt: mistaken timeout/SRQ!n");
  468. if ((status & TREQ) == (last_status & TREQ)) {
  469. /* Not a timeout. Unsolicited SRQ? weird. */
  470. /* Terminate the SRQ packet and poll */
  471. need_poll = 1;
  472. }
  473. /* There's no packet to get, so reply is blank */
  474. via[B] ^= ST_MASK;
  475. reply_ptr -= (reply_len-prefix_len);
  476. reply_len = prefix_len;
  477. macii_state = read_done;
  478. break;
  479. } /* end timeout / SRQ handling for II hw. */
  480. if((reply_len-prefix_len)>3
  481. && memcmp(reply_ptr-3,"xFFxFFxFF",3)==0)
  482. {
  483. /* SRQ tacked on data packet */
  484. /* Terminate the packet (SRQ never ends) */
  485. x = via[SR];
  486. macii_state = read_done;
  487. reply_len -= 3;
  488. reply_ptr -= 3;
  489. need_poll = 1;
  490. /* need to continue; next byte not seen else */
  491. } else {
  492. /* Sanity check */
  493. if (reply_len > 15) reply_len = 0;
  494. /* read byte */
  495. x = via[SR];
  496. *reply_ptr = x;
  497. reply_ptr++;
  498. reply_len++;
  499. }
  500. /* The usual handshake ... */
  501. /*
  502.  * NetBSD hints that the next to last byte 
  503.  * is sent with IRQ !! 
  504.  * Guido found out it's the last one (0x0),
  505.  * but IRQ should be asserted already.
  506.  * Problem with timeout detection: First
  507.  * transition to /IRQ might be second 
  508.  * byte of timeout packet! 
  509.  * Timeouts are signaled by 4x FF.
  510.  */
  511. if (!(status & TREQ) && (x == 0x00)) { /* != 0xFF */
  512. /* invert state bits, toggle ODD/EVEN */
  513. via[B] ^= ST_MASK;
  514. /* adjust packet length */
  515. reply_len--;
  516. reply_ptr--;
  517. macii_state = read_done;
  518. } else {
  519. /* not caught: ST_CMD */
  520. /* required for re-entry 'reading'! */
  521. if ((status & ST_MASK) == ST_IDLE) {
  522. /* (in)sanity check - set even */
  523. via[B] = (via[B] & ~ST_MASK) | ST_EVEN;
  524. } else {
  525. /* invert state bits */
  526. via[B] ^= ST_MASK;
  527. }
  528. }
  529. break;
  530. case read_done:
  531. x = via[SR];
  532. if (reading_reply) {
  533. req = current_req;
  534. req->reply_len = reply_ptr - req->reply;
  535. req->complete = 1;
  536. current_req = req->next;
  537. if (req->done) (*req->done)(req);
  538. } else {
  539. adb_input(reply_buf, reply_ptr - reply_buf,
  540.   regs, 0);
  541. }
  542. /*
  543.  * remember this device ID; it's the latest we got a 
  544.  * reply from!
  545.  */
  546. last_reply = command_byte;
  547. last_active = (command_byte & 0xF0) >> 4;
  548. /* SRQ seen before, initiate poll now */
  549. if (need_poll) {
  550. macii_state = idle;
  551. macii_queue_poll();
  552. need_poll = 0;
  553. break;
  554. }
  555. /* /IRQ seen, so the ADB controller has data for us */
  556. if (!(status & TREQ)) {
  557. /* set ADB state to idle */
  558. via[B] = (via[B] & ~ST_MASK) | ST_IDLE;
  559. macii_state = reading;
  560. reply_buf[0] = command_byte;
  561. reply_ptr = reply_buf + 1;
  562. reply_len = 1;
  563. prefix_len = 1;
  564. reading_reply = 0;
  565. } else {
  566. /* no IRQ, send next packet or wait */
  567. macii_state = idle;
  568. if (current_req)
  569. macii_start();
  570. else
  571. macii_retransmit(last_active);
  572. }
  573. break;
  574. default:
  575. break;
  576. }
  577. /* reset mutex and interrupts */
  578. driver_running = 0;
  579. restore_flags(flags);
  580. }