X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=coreboot.git;a=blobdiff_plain;f=src%2Finclude%2Fdevice%2Fdevice.h;h=0aea1d6087ee3a3ec2be198719432fc6c5b75767;hp=1990454d6ad3403c4bc170e5966814e35293a9b4;hb=dc8448fd8be4768ef9d5f9b8cbcf28db0a2029be;hpb=29cc9eda2021a87396ef31a6fc81daff6fd1be7a diff --git a/src/include/device/device.h b/src/include/device/device.h index 1990454d6..0aea1d608 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -15,7 +15,10 @@ struct smbus_bus_operations; /* Chip operations */ struct chip_operations { void (*enable_dev)(struct device *dev); - char *name; + const char *name; +#if CONFIG_GENERATE_SMBIOS_TABLES + int (*get_smbios_data)(device_t dev, int *handle, unsigned long *current); +#endif }; #define CHIP_NAME(X) .name = X, @@ -31,6 +34,9 @@ struct device_operations { void (*enable)(device_t dev); void (*set_link)(device_t dev, unsigned int link); void (*reset_bus)(struct bus *bus); +#if CONFIG_GENERATE_SMBIOS_TABLES + int (*get_smbios_data)(device_t dev, int *handle, unsigned long *current); +#endif const struct pci_operations *ops_pci; const struct smbus_bus_operations *ops_smbus_bus; const struct pci_bus_operations *ops_pci_bus; @@ -40,8 +46,9 @@ struct device_operations { struct bus { device_t dev; /* This bridge device */ device_t children; /* devices behind this bridge */ + struct bus *next; /* The next bridge on this device */ unsigned bridge_ctrl; /* Bridge control register */ - unsigned char link; /* The index of this link */ + unsigned char link_num; /* The index of this link */ uint16_t secondary; /* secondary bus number */ uint16_t subordinate; /* max subordinate bus number */ unsigned char cap; /* PCi capability offset */ @@ -49,8 +56,6 @@ struct bus { unsigned disable_relaxed_ordering : 1; }; -#define MAX_RESOURCES 24 -#define MAX_LINKS 8 /* * There is one device structure for each slot-number/function-number * combination: @@ -65,34 +70,38 @@ struct device { struct device_path path; unsigned vendor; unsigned device; + u16 subsystem_vendor; + u16 subsystem_device; unsigned int class; /* 3 bytes: (base, sub, prog-if) */ unsigned int hdr_type; /* PCI header type */ unsigned int enabled : 1; /* set if we should enable the device */ unsigned int initialized : 1; /* set if we have initialized the device */ unsigned int on_mainboard : 1; - unsigned long rom_address; u8 command; /* Base registers for this device. I/O, MEM and Expansion ROM */ - struct resource resource[MAX_RESOURCES]; - unsigned int resources; + struct resource *resource_list; /* links are (downstream) buses attached to the device, usually a leaf - * device with no children have 0 buses attached and a bridge has 1 bus + * device with no children has 0 buses attached and a bridge has 1 bus */ - struct bus link[MAX_LINKS]; - /* number of buses attached to the device */ - unsigned int links; + struct bus *link_list; struct device_operations *ops; - struct chip_operations *chip_ops; + const struct chip_operations *chip_ops; void *chip_info; }; -extern struct device dev_root; /* root bus */ +/** + * This is the root of the device tree. The device tree is defined in the + * static.c file and is generated by the config tool at compile time. + */ +extern struct device dev_root; extern struct device *all_devices; /* list of all devices */ +extern struct resource *free_resources; +extern struct bus *free_links; /* Generic device interface functions */ device_t alloc_dev(struct bus *parent, struct device_path *path); @@ -106,7 +115,6 @@ void dev_optimize(void); int reset_bus(struct bus *bus); unsigned int scan_bus(struct device *bus, unsigned int max); void assign_resources(struct bus *bus); -void enable_resources(struct device *dev); void enumerate_static_device(void); void enumerate_static_devices(void); const char *dev_path(device_t dev); @@ -114,13 +122,18 @@ const char *bus_path(struct bus *bus); void dev_set_enabled(device_t dev, int enable); void disable_children(struct bus *bus); +/* Option ROM helper functions */ +void run_bios(struct device *dev, unsigned long addr); + /* Helper functions */ device_t find_dev_path(struct bus *parent, struct device_path *path); device_t alloc_find_dev(struct bus *parent, struct device_path *path); -device_t dev_find_device (unsigned int vendor, unsigned int device, device_t from); +device_t dev_find_device (u16 vendor, u16 device, device_t from); device_t dev_find_class (unsigned int class, device_t from); device_t dev_find_slot (unsigned int bus, unsigned int devfn); device_t dev_find_slot_on_smbus (unsigned int bus, unsigned int addr); +device_t dev_find_lapic(unsigned apic_id); +int dev_count_cpu(void); /* Debug functions */ void print_resource_tree(struct device * root, int debug_level, @@ -128,24 +141,25 @@ void print_resource_tree(struct device * root, int debug_level, void show_devs_tree(struct device *dev, int debug_level, int depth, int linknum); void show_devs_subtree(struct device *root, int debug_level, const char *msg); void show_all_devs(int debug_level, const char *msg); +void show_all_devs_tree(int debug_level, const char *msg); void show_one_resource(int debug_level, struct device *dev, struct resource *resource, const char *comment); void show_all_devs_resources(int debug_level, const char* msg); -/* Rounding for boundaries. +/* Rounding for boundaries. * Due to some chip bugs, go ahead and round IO to 16 */ -#define DEVICE_IO_ALIGN 16 +#define DEVICE_IO_ALIGN 16 #define DEVICE_MEM_ALIGN 4096 extern struct device_operations default_dev_ops_root; void pci_domain_read_resources(struct device *dev); unsigned int pci_domain_scan_bus(struct device *dev, unsigned int max); -void root_dev_read_resources(device_t dev); -void root_dev_set_resources(device_t dev); unsigned int scan_static_bus(device_t bus, unsigned int max); -void enable_childrens_resources(device_t dev); -void root_dev_enable_resources(device_t dev); -unsigned int root_dev_scan_bus(device_t root, unsigned int max); -void root_dev_init(device_t dev); + +void ram_resource(device_t dev, unsigned long index, + unsigned long basek, unsigned long sizek); +void tolm_test(void *gp, struct device *dev, struct resource *new); +u32 find_pci_tolm(struct bus *bus); + #endif /* DEVICE_H */