readcis.h revision 15177
110217Sphk#define	MAXSTR	20
210217Sphk/*
310217Sphk *	Storage of one tuple.
410217Sphk */
515177Snatestruct tuple {
610217Sphk	struct tuple *next;
710217Sphk	unsigned char code;
815177Snate	int     length;
910217Sphk	unsigned char *data;
1015177Snate};
1110217Sphk
1215177Snatestruct tuple_list {
1310217Sphk	struct tuple_list *next;
1410217Sphk	struct tuple *tuples;
1515177Snate	off_t   offs;
1615177Snate	int     flags;
1715177Snate};
1810217Sphk
1915177Snatestruct tuple_info {
2015177Snate	char   *name;
2110217Sphk	unsigned char code;
2215177Snate	unsigned char length;		/* 255 means variable length */
2315177Snate};
2415177Snate
2510217Sphk/*
2610217Sphk *	Memory device descriptor.
2710217Sphk */
2815177Snatestruct dev_mem {
2910217Sphk	unsigned char valid;
3010217Sphk	unsigned char type;
3110217Sphk	unsigned char speed;
3210217Sphk	unsigned char wps;
3310217Sphk	unsigned char addr;
3410217Sphk	unsigned char units;
3515177Snate};
3615177Snate
3710217Sphk/*
3810217Sphk *	One I/O structure describing a possible I/O map
3910217Sphk *	of the card.
4010217Sphk */
4115177Snatestruct cis_ioblk {
4210217Sphk	struct cis_ioblk *next;
4310217Sphk	unsigned int addr;
4410217Sphk	unsigned int size;
4515177Snate};
4615177Snate
4710217Sphk/*
4810217Sphk *	A structure storing a memory map for the card.
4910217Sphk */
5015177Snatestruct cis_memblk {
5110217Sphk	struct cis_memblk *next;
5210217Sphk	unsigned int address;
5310217Sphk	unsigned int length;
5410217Sphk	unsigned int host_address;
5515177Snate};
5615177Snate
5710217Sphk/*
5810217Sphk *	One configuration entry for the card.
5910217Sphk */
6015177Snatestruct cis_config {
6110217Sphk	struct cis_config *next;
6210217Sphk	unsigned int pwr:1;		/* Which values are defined. */
6310217Sphk	unsigned int timing:1;
6410217Sphk	unsigned int iospace:1;
6510217Sphk	unsigned int irq:1;
6610217Sphk	unsigned int memspace:1;
6710217Sphk	unsigned int misc_valid:1;
6810217Sphk	unsigned char id;
6910217Sphk	unsigned char io_blks;
7010217Sphk	unsigned char io_addr;
7110217Sphk	unsigned char io_bus;
7210217Sphk	struct cis_ioblk *io;
7310217Sphk	unsigned char irqlevel;
7410217Sphk	unsigned char irq_flags;
7510217Sphk	unsigned irq_mask;
7610217Sphk	unsigned char memwins;
7710217Sphk	struct cis_memblk *mem;
7810217Sphk	unsigned char misc;
7915177Snate};
8015177Snate
8110217Sphk/*
8210217Sphk *	Structure holding all data retrieved from the
8310217Sphk *	CIS block on the card.
8410217Sphk *	The default configuration contains interface defaults
8510217Sphk *	not listed in each separate configuration.
8610217Sphk */
8715177Snatestruct cis {
8810217Sphk	struct tuple_list *tlist;
8915177Snate	char    manuf[MAXSTR];
9015177Snate	char    vers[MAXSTR];
9115177Snate	char    add_info1[MAXSTR];
9215177Snate	char    add_info2[MAXSTR];
9310217Sphk	unsigned char maj_v, min_v;
9410217Sphk	unsigned char last_config;
9510217Sphk	unsigned char ccrs;
9610217Sphk	unsigned long reg_addr;
9710217Sphk	struct dev_mem attr_mem;
9810217Sphk	struct dev_mem common_mem;
9910217Sphk	struct cis_config *def_config;
10010217Sphk	struct cis_config *conf;
10115177Snate};
10210217Sphk
10315177Snatevoid   *xmalloc(int);
10410217Sphkstruct cis *readcis(int);
10515177Snatevoid    dumpcis(struct cis *);
10615177Snatevoid    freecis(struct cis *);
10710217Sphkstruct tuple_list *read_tuples(int);
10810217Sphkstruct tuple *find_tuple(struct cis *, unsigned char);
10910217Sphkstruct tuple *find_tuple_in_list(struct tuple_list *, unsigned char);
11010217Sphk
11110217Sphkstruct tuple_info *get_tuple_info(unsigned char);
11215177Snatechar   *tuple_name(unsigned char);
113