diff options
| author | Feng Tang <feng.tang@intel.com> | 2010-05-25 04:40:47 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2010-05-25 11:41:43 -0400 |
| commit | 5487ab4a5a71e955fef7094a0624df0542da91ef (patch) | |
| tree | 474021353de5a708998865406d2a7eec7060860c | |
| parent | e40152ee1e1c7a63f4777791863215e3faa37a86 (diff) | |
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) | |||
| 390 | if (sfi_disabled) | 390 | if (sfi_disabled) |
| 391 | return; | 391 | return; |
| 392 | 392 | ||
| 393 | pr_info("Simple Firmware Interface v0.7 http://simplefirmware.org\n"); | 393 | pr_info("Simple Firmware Interface v0.81 http://simplefirmware.org\n"); |
| 394 | 394 | ||
| 395 | if (sfi_find_syst() || sfi_parse_syst() || sfi_platform_init()) | 395 | if (sfi_find_syst() || sfi_parse_syst() || sfi_platform_init()) |
| 396 | disable_sfi(); | 396 | 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 @@ | |||
| 73 | #define SFI_SIG_SPIB "SPIB" | 73 | #define SFI_SIG_SPIB "SPIB" |
| 74 | #define SFI_SIG_I2CB "I2CB" | 74 | #define SFI_SIG_I2CB "I2CB" |
| 75 | #define SFI_SIG_GPEM "GPEM" | 75 | #define SFI_SIG_GPEM "GPEM" |
| 76 | #define SFI_SIG_DEVS "DEVS" | ||
| 77 | #define SFI_SIG_GPIO "GPIO" | ||
| 76 | 78 | ||
| 77 | #define SFI_SIGNATURE_SIZE 4 | 79 | #define SFI_SIGNATURE_SIZE 4 |
| 78 | #define SFI_OEM_ID_SIZE 6 | 80 | #define SFI_OEM_ID_SIZE 6 |
| @@ -145,6 +147,27 @@ struct sfi_rtc_table_entry { | |||
| 145 | u32 irq; | 147 | u32 irq; |
| 146 | } __packed; | 148 | } __packed; |
| 147 | 149 | ||
| 150 | struct sfi_device_table_entry { | ||
| 151 | u8 type; /* bus type, I2C, SPI or ...*/ | ||
| 152 | #define SFI_DEV_TYPE_SPI 0 | ||
| 153 | #define SFI_DEV_TYPE_I2C 1 | ||
| 154 | #define SFI_DEV_TYPE_UART 2 | ||
| 155 | #define SFI_DEV_TYPE_HSI 3 | ||
| 156 | #define SFI_DEV_TYPE_IPC 4 | ||
| 157 | |||
| 158 | u8 host_num; /* attached to host 0, 1...*/ | ||
| 159 | u16 addr; | ||
| 160 | u8 irq; | ||
| 161 | u32 max_freq; | ||
| 162 | char name[16]; | ||
| 163 | } __packed; | ||
| 164 | |||
| 165 | struct sfi_gpio_table_entry { | ||
| 166 | char controller_name[16]; | ||
| 167 | u16 pin_no; | ||
| 168 | char pin_name[16]; | ||
| 169 | } __packed; | ||
| 170 | |||
| 148 | struct sfi_spi_table_entry { | 171 | struct sfi_spi_table_entry { |
| 149 | u16 host_num; /* attached to host 0, 1...*/ | 172 | u16 host_num; /* attached to host 0, 1...*/ |
| 150 | u16 cs; /* chip select */ | 173 | u16 cs; /* chip select */ |
| @@ -166,7 +189,6 @@ struct sfi_gpe_table_entry { | |||
| 166 | u16 phys_id; /* physical GPE id */ | 189 | u16 phys_id; /* physical GPE id */ |
| 167 | } __packed; | 190 | } __packed; |
| 168 | 191 | ||
| 169 | |||
| 170 | typedef int (*sfi_table_handler) (struct sfi_table_header *table); | 192 | typedef int (*sfi_table_handler) (struct sfi_table_header *table); |
| 171 | 193 | ||
| 172 | #ifdef CONFIG_SFI | 194 | #ifdef CONFIG_SFI |
