diff options
author | Feng Tang <feng.tang@intel.com> | 2010-05-25 16:40:47 +0800 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2010-05-25 11:41:43 -0400 |
commit | 5487ab4a5a71e955fef7094a0624df0542da91ef (patch) | |
tree | 474021353de5a708998865406d2a7eec7060860c | |
parent | e40152ee1e1c7a63f4777791863215e3faa37a86 (diff) | |
download | lwn-5487ab4a5a71e955fef7094a0624df0542da91ef.tar.gz lwn-5487ab4a5a71e955fef7094a0624df0542da91ef.zip |
SFI: add support for v0.81 spec
There are 2 major changes from v0.81 to v0.7:
1. Consolidating the SPIB/I2CB tables into a new DEVS table,
which is more expandable and can support other bus types
than spi/i2c.
2. Creating a new GPIO table, which list all the GPIO pins
used in the platform.
However, to avoid breaking current platforms who use SFI v0.7
version firmware, the definitions for SPIB/I2CB will still
be kept for a while
Signed-off-by: Feng Tang <feng.tang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r-- | drivers/sfi/sfi_core.c | 2 | ||||
-rw-r--r-- | include/linux/sfi.h | 24 |
2 files changed, 24 insertions, 2 deletions
diff --git a/drivers/sfi/sfi_core.c b/drivers/sfi/sfi_core.c index b204a0929139..aba6a461365b 100644 --- a/drivers/sfi/sfi_core.c +++ b/drivers/sfi/sfi_core.c @@ -390,7 +390,7 @@ void __init sfi_init(void) if (sfi_disabled) return; - pr_info("Simple Firmware Interface v0.7 http://simplefirmware.org\n"); + pr_info("Simple Firmware Interface v0.81 http://simplefirmware.org\n"); if (sfi_find_syst() || sfi_parse_syst() || sfi_platform_init()) disable_sfi(); diff --git a/include/linux/sfi.h b/include/linux/sfi.h index 9a6f7607174e..0299b4ce63db 100644 --- a/include/linux/sfi.h +++ b/include/linux/sfi.h @@ -73,6 +73,8 @@ #define SFI_SIG_SPIB "SPIB" #define SFI_SIG_I2CB "I2CB" #define SFI_SIG_GPEM "GPEM" +#define SFI_SIG_DEVS "DEVS" +#define SFI_SIG_GPIO "GPIO" #define SFI_SIGNATURE_SIZE 4 #define SFI_OEM_ID_SIZE 6 @@ -145,6 +147,27 @@ struct sfi_rtc_table_entry { u32 irq; } __packed; +struct sfi_device_table_entry { + u8 type; /* bus type, I2C, SPI or ...*/ +#define SFI_DEV_TYPE_SPI 0 +#define SFI_DEV_TYPE_I2C 1 +#define SFI_DEV_TYPE_UART 2 +#define SFI_DEV_TYPE_HSI 3 +#define SFI_DEV_TYPE_IPC 4 + + u8 host_num; /* attached to host 0, 1...*/ + u16 addr; + u8 irq; + u32 max_freq; + char name[16]; +} __packed; + +struct sfi_gpio_table_entry { + char controller_name[16]; + u16 pin_no; + char pin_name[16]; +} __packed; + struct sfi_spi_table_entry { u16 host_num; /* attached to host 0, 1...*/ u16 cs; /* chip select */ @@ -166,7 +189,6 @@ struct sfi_gpe_table_entry { u16 phys_id; /* physical GPE id */ } __packed; - typedef int (*sfi_table_handler) (struct sfi_table_header *table); #ifdef CONFIG_SFI |