summaryrefslogtreecommitdiffstats
path: root/sys/pccard/cardinfo.h
blob: ff5d7fc41c515c8a074672b72aa0f6061c3119be (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 *	Include file for PCMCIA user process interface
 *
 *-------------------------------------------------------------------------
 *
 * Copyright (c) 1995 Andrew McRae.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/* $FreeBSD$ */

#ifndef	_PCCARD_CARDINFO_H_
#define	_PCCARD_CARDINFO_H_

#ifndef _KERNEL
#include <sys/types.h>
#endif
#include <sys/ioccom.h>

#define	PIOCGSTATE	_IOR('P', 1, struct slotstate)	/* Get slot state */
#define	PIOCGMEM	_IOWR('P', 2, struct mem_desc)	/* Get memory map */
#define	PIOCSMEM	_IOW('P', 3, struct mem_desc)	/* Set memory map */
#define	PIOCGIO		_IOWR('P', 4, struct io_desc)	/* Get I/O map */
#define	PIOCSIO		_IOW('P', 5, struct io_desc)	/* Set I/O map */
#define PIOCSDRV	_IOWR('P', 6, struct dev_desc)	/* Set driver */
#define PIOCRWFLAG	_IOW('P', 7, int)	/* Set flags for drv use */
#define PIOCRWMEM	_IOWR('P', 8, unsigned long) /* Set mem for drv use */
#define PIOCSPOW	_IOW('P', 9, struct power) /* Set power structure */
#define PIOCSVIR	_IOW('P', 10, int)	/* Virtual insert/remove */
#define PIOCSBEEP	_IOW('P', 11, int)		/* Select Beep */
#define PIOCSRESOURCE	_IOWR('P', 12, struct pccard_resource)	/* get resource info */
/*
 *	Debug codes.
 */
#define PIOCGREG	_IOWR('P',100, struct pcic_reg)	/* get reg */
#define PIOCSREG	_IOW('P', 101, struct pcic_reg)	/* Set reg */

/*
 *	Slot states for PIOCGSTATE
 */
enum cardstate { noslot, empty, suspend, filled, inactive };

/*
 *	Descriptor structure for memory map.
 */
struct mem_desc {
	int	window;		/* Memory map window number (0-4) */
	int	flags;		/* Flags - see below */
	caddr_t	start;		/* System memory start */
	int	size;		/* Size of memory area */
	unsigned long card;	/* Card memory address */
};

#define	MDF_16BITS	0x01	/* Memory is 16 bits wide */
#define	MDF_ZEROWS	0x02	/* Set no wait states for memory */
#define	MDF_WS0		0x04	/* Wait state flags */
#define	MDF_WS1		0x08
#define	MDF_ATTR	0x10	/* Memory is attribute memory */
#define	MDF_WP		0x20	/* Write protect memory */
#define	MDF_ACTIVE	0x40	/* Context active (read-only) */

/*
 *	Descriptor structure for I/O map
 */
struct io_desc {
	int	window;		/* I/O map number (0-1) */
	int	flags;		/* Flags - see below */
	int	start;		/* I/O port start */
	int	size;		/* Number of port addresses */
};

#define	IODF_WS		0x01	/* Set wait states for 16 bit I/O access */
#define	IODF_16BIT	0x02	/* I/O access are 16 bit */
#define	IODF_CS16	0x04	/* Allow card selection of 16 bit access */
#define	IODF_ZEROWS	0x08	/* No wait states for 8 bit I/O */
#define	IODF_ACTIVE	0x10	/* Context active (read-only) */

/*
 *	Device descriptor for allocation of driver.
 */
struct dev_desc {
	char	name[16];	/* Driver name */
	int	unit;		/* Driver unit number */
	unsigned long mem;	/* Memory address of driver */
	int	memsize;	/* Memory size (if used) */
	int	iobase;		/* base of I/O ports */
	int	iosize;		/* Length of I/O ports */
	int	irqmask;	/* Interrupt number(s) to allocate */
	int	flags;		/* Device flags */
	u_char	misc[128];	/* For any random info */
};
#define DEV_DESC_HAS_SIZE 1

struct pcic_reg {
	unsigned char reg;
	unsigned char value;
};

/*
 *	Slot information. Used to read current status of slot.
 */
struct slotstate {
	enum cardstate state;		/* Current state of slot */
	enum cardstate laststate;	/* Previous state of slot */
	int	maxmem;			/* Max allowed memory windows */
	int	maxio;			/* Max allowed I/O windows */
	int	irqs;			/* Bitmap of IRQs allowed */
	int	flags;			/* Capability flags */
};

/*
 *	The power values are in volts * 10, e.g. 5V is 50, 3.3V is 33.
 */
struct power {
	int	vcc;
	int	vpp;
};

/*
 *	Th PC-Card resource IOC_GET_RESOURCE_RANGE
 */
struct pccard_resource {
	int		type;
	u_long		size;
	u_long		min;
	u_long		max;
	u_long		resource_addr;
};


/*
 *	Other system limits
 */
#define MAXSLOT 16
#define	NUM_MEM_WINDOWS	10
#define	NUM_IO_WINDOWS	6
#define	CARD_DEVICE	"/dev/card%d"		/* String for snprintf */

#endif /* !_PCCARD_CARDINFO_H_ */
OpenPOWER on IntegriCloud