diff options
Diffstat (limited to 'kernel/include/linux/fmc-sdb.h')
-rw-r--r-- | kernel/include/linux/fmc-sdb.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/kernel/include/linux/fmc-sdb.h b/kernel/include/linux/fmc-sdb.h new file mode 100644 index 000000000..599bd6bab --- /dev/null +++ b/kernel/include/linux/fmc-sdb.h @@ -0,0 +1,38 @@ +/* + * This file is separate from sdb.h, because I want that one to remain + * unchanged (as far as possible) from the official sdb distribution + * + * This file and associated functionality are a playground for me to + * understand stuff which will later be implemented in more generic places. + */ +#include <linux/sdb.h> + +/* This is the union of all currently defined types */ +union sdb_record { + struct sdb_interconnect ic; + struct sdb_device dev; + struct sdb_bridge bridge; + struct sdb_integration integr; + struct sdb_empty empty; + struct sdb_synthesis synthesis; + struct sdb_repo_url repo_url; +}; + +struct fmc_device; + +/* Every sdb table is turned into this structure */ +struct sdb_array { + int len; + int level; + unsigned long baseaddr; + struct fmc_device *fmc; /* the device that hosts it */ + struct sdb_array *parent; /* NULL at root */ + union sdb_record *record; /* copies of the struct */ + struct sdb_array **subtree; /* only valid for bridge items */ +}; + +extern int fmc_scan_sdb_tree(struct fmc_device *fmc, unsigned long address); +extern void fmc_show_sdb_tree(const struct fmc_device *fmc); +extern signed long fmc_find_sdb_device(struct sdb_array *tree, uint64_t vendor, + uint32_t device, unsigned long *sz); +extern int fmc_free_sdb_tree(struct fmc_device *fmc); |