Linux Audio

Check our new training course

Loading...
v3.1
 
 1/*
 2 * Reset a Jazz machine.
 3 *
 4 * We don't trust the firmware so we do it the classic way by poking and
 5 * stabbing at the keyboard controller ...
 6 */
 7#include <linux/jiffies.h>
 8#include <asm/jazz.h>
 9
10#define KBD_STAT_IBF		0x02	/* Keyboard input buffer full */
11
12static void jazz_write_output(unsigned char val)
13{
14	int status;
15
16	do {
17		status = jazz_kh->command;
18	} while (status & KBD_STAT_IBF);
19	jazz_kh->data = val;
20}
21
22static void jazz_write_command(unsigned char val)
23{
24	int status;
25
26	do {
27		status = jazz_kh->command;
28	} while (status & KBD_STAT_IBF);
29	jazz_kh->command = val;
30}
31
32static unsigned char jazz_read_status(void)
33{
34	return jazz_kh->command;
35}
36
37static inline void kb_wait(void)
38{
39	unsigned long start = jiffies;
40	unsigned long timeout = start + HZ/2;
41
42	do {
43		if (! (jazz_read_status() & 0x02))
44			return;
45	} while (time_before_eq(jiffies, timeout));
46}
47
48void jazz_machine_restart(char *command)
49{
50	while(1) {
51		kb_wait();
52		jazz_write_command(0xd1);
53		kb_wait();
54		jazz_write_output(0x00);
55	}
56}
v5.4
 1// SPDX-License-Identifier: GPL-2.0
 2/*
 3 * Reset a Jazz machine.
 4 *
 5 * We don't trust the firmware so we do it the classic way by poking and
 6 * stabbing at the keyboard controller ...
 7 */
 8#include <linux/jiffies.h>
 9#include <asm/jazz.h>
10
11#define KBD_STAT_IBF		0x02	/* Keyboard input buffer full */
12
13static void jazz_write_output(unsigned char val)
14{
15	int status;
16
17	do {
18		status = jazz_kh->command;
19	} while (status & KBD_STAT_IBF);
20	jazz_kh->data = val;
21}
22
23static void jazz_write_command(unsigned char val)
24{
25	int status;
26
27	do {
28		status = jazz_kh->command;
29	} while (status & KBD_STAT_IBF);
30	jazz_kh->command = val;
31}
32
33static unsigned char jazz_read_status(void)
34{
35	return jazz_kh->command;
36}
37
38static inline void kb_wait(void)
39{
40	unsigned long start = jiffies;
41	unsigned long timeout = start + HZ/2;
42
43	do {
44		if (! (jazz_read_status() & 0x02))
45			return;
46	} while (time_before_eq(jiffies, timeout));
47}
48
49void jazz_machine_restart(char *command)
50{
51	while(1) {
52		kb_wait();
53		jazz_write_command(0xd1);
54		kb_wait();
55		jazz_write_output(0x00);
56	}
57}