summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pccard/misc/rpti.c
blob: d97c490f9c5987a544c358376a3da856212df9b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
 *	Enabler for PCCARD. Used for testing drivers etc.
 *	Options:
 *	enabler slot driver [ -m card addr size ] [ -i iobase ] [ -q irq ]
 */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>

#include <pccard/card.h>
#include <pccard/cis.h>

void usage();


main(argc, argv)
int	argc;
char	*argv[];
{
struct drv_desc drv;
struct mem_desc mem;
struct io_desc io;
int fd, err, slot, i, card_addr;
char name[32], cmd[256];
char	*p;

	if (argc == 2)
		slot = atoi(argv[1]);
	else
		slot = 0;
	if (slot < 0 || slot >= MAXSLOT)
		usage("Illegal slot number");
	sprintf(cmd, "util/wrattr %d 100 80", slot);
	printf("%s\n", cmd);
	system(cmd);
	usleep(200*1000);
	sprintf(cmd, "util/wrattr %d 100 0", slot);
	printf("%s\n", cmd);
	system(cmd);
	usleep(200*1000);
	sprintf(cmd, "util/wrattr %d 100 30", slot);
	printf("%s\n", cmd);
	system(cmd);
	usleep(200*1000);
	bzero(&drv, sizeof(drv));
	drv.unit = 0;
	strcpy(drv.name, "ed");
	drv.irqmask = 1 << 5;
	sprintf(name, "/dev/card%d", slot);
	fd = open(name, 2);
	if (fd < 0)
		{
		perror(name);
		exit(1);
		}
/*
 *	Map the memory and I/O contexts.
 */
	drv.mem = 0xD4000;
	if (drv.mem)
		{
		mem.window = 0;
		mem.flags = MDF_ACTIVE;
		mem.start = (caddr_t)drv.mem;
		mem.size = 16*1024;
		mem.card = 0x4000;
		if (ioctl(fd, PIOCSMEM, &mem))
			{
			perror("Set memory context");
			exit(1);
			}
		}
	drv.iobase = 0x300;
	if (drv.iobase)
		{
		io.window = 0;
		io.flags = IODF_ACTIVE|IODF_CS16|IODF_WS;
		io.start = drv.iobase;
		io.size = 32;	/* Blah... */
		if (ioctl(fd, PIOCSIO, &io))
			{
			perror("Set I/O context");
			exit(1);
			}
#ifdef 0
		io.window = 1;
		io.flags = IODF_ACTIVE|IODF_16BIT;
		io.start = drv.iobase+16;
		io.size = 16;	/* Blah... */
		if (ioctl(fd, PIOCSIO, &io))
			{
			perror("Set I/O context");
			exit(1);
			}
#endif
		}
	if (ioctl(fd, PIOCSDRV, &drv))
		perror("set driver");
	close(fd);
}
/*
 *	usage - print usage and exit
 */
void
usage(msg)
char *msg;
{
	fprintf(stderr, "rpti: %s\n", msg);
	fprintf(stderr, "Usage: rpti slot driver\n");
	exit(1);
}
OpenPOWER on IntegriCloud