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