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