readcis.h revision 15177
1#define	MAXSTR	20
2/*
3 *	Storage of one tuple.
4 */
5struct tuple {
6	struct tuple *next;
7	unsigned char code;
8	int     length;
9	unsigned char *data;
10};
11
12struct tuple_list {
13	struct tuple_list *next;
14	struct tuple *tuples;
15	off_t   offs;
16	int     flags;
17};
18
19struct tuple_info {
20	char   *name;
21	unsigned char code;
22	unsigned char length;		/* 255 means variable length */
23};
24
25/*
26 *	Memory device descriptor.
27 */
28struct dev_mem {
29	unsigned char valid;
30	unsigned char type;
31	unsigned char speed;
32	unsigned char wps;
33	unsigned char addr;
34	unsigned char units;
35};
36
37/*
38 *	One I/O structure describing a possible I/O map
39 *	of the card.
40 */
41struct cis_ioblk {
42	struct cis_ioblk *next;
43	unsigned int addr;
44	unsigned int size;
45};
46
47/*
48 *	A structure storing a memory map for the card.
49 */
50struct cis_memblk {
51	struct cis_memblk *next;
52	unsigned int address;
53	unsigned int length;
54	unsigned int host_address;
55};
56
57/*
58 *	One configuration entry for the card.
59 */
60struct cis_config {
61	struct cis_config *next;
62	unsigned int pwr:1;		/* Which values are defined. */
63	unsigned int timing:1;
64	unsigned int iospace:1;
65	unsigned int irq:1;
66	unsigned int memspace:1;
67	unsigned int misc_valid:1;
68	unsigned char id;
69	unsigned char io_blks;
70	unsigned char io_addr;
71	unsigned char io_bus;
72	struct cis_ioblk *io;
73	unsigned char irqlevel;
74	unsigned char irq_flags;
75	unsigned irq_mask;
76	unsigned char memwins;
77	struct cis_memblk *mem;
78	unsigned char misc;
79};
80
81/*
82 *	Structure holding all data retrieved from the
83 *	CIS block on the card.
84 *	The default configuration contains interface defaults
85 *	not listed in each separate configuration.
86 */
87struct cis {
88	struct tuple_list *tlist;
89	char    manuf[MAXSTR];
90	char    vers[MAXSTR];
91	char    add_info1[MAXSTR];
92	char    add_info2[MAXSTR];
93	unsigned char maj_v, min_v;
94	unsigned char last_config;
95	unsigned char ccrs;
96	unsigned long reg_addr;
97	struct dev_mem attr_mem;
98	struct dev_mem common_mem;
99	struct cis_config *def_config;
100	struct cis_config *conf;
101};
102
103void   *xmalloc(int);
104struct cis *readcis(int);
105void    dumpcis(struct cis *);
106void    freecis(struct cis *);
107struct tuple_list *read_tuples(int);
108struct tuple *find_tuple(struct cis *, unsigned char);
109struct tuple *find_tuple_in_list(struct tuple_list *, unsigned char);
110
111struct tuple_info *get_tuple_info(unsigned char);
112char   *tuple_name(unsigned char);
113