diff options
-rw-r--r-- | drivers/acpi/Makefile | 1 | ||||
-rw-r--r-- | drivers/acpi/acpi_cmos_rtc.c | 92 | ||||
-rw-r--r-- | drivers/acpi/battery.c | 18 | ||||
-rw-r--r-- | drivers/acpi/bus.c | 17 | ||||
-rw-r--r-- | drivers/acpi/ec.c | 4 | ||||
-rw-r--r-- | drivers/acpi/ec_sys.c | 18 | ||||
-rw-r--r-- | drivers/acpi/glue.c | 6 | ||||
-rw-r--r-- | drivers/acpi/internal.h | 5 | ||||
-rw-r--r-- | drivers/acpi/scan.c | 1 | ||||
-rw-r--r-- | include/acpi/acpi_bus.h | 4 |
10 files changed, 139 insertions, 27 deletions
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index d07771bc3d8c..81dbeb83bb45 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile | |||
@@ -44,6 +44,7 @@ acpi-y += acpi_platform.o | |||
44 | acpi-y += power.o | 44 | acpi-y += power.o |
45 | acpi-y += event.o | 45 | acpi-y += event.o |
46 | acpi-y += sysfs.o | 46 | acpi-y += sysfs.o |
47 | acpi-$(CONFIG_X86) += acpi_cmos_rtc.o | ||
47 | acpi-$(CONFIG_DEBUG_FS) += debugfs.o | 48 | acpi-$(CONFIG_DEBUG_FS) += debugfs.o |
48 | acpi-$(CONFIG_ACPI_NUMA) += numa.o | 49 | acpi-$(CONFIG_ACPI_NUMA) += numa.o |
49 | acpi-$(CONFIG_ACPI_PROCFS_POWER) += cm_sbs.o | 50 | acpi-$(CONFIG_ACPI_PROCFS_POWER) += cm_sbs.o |
diff --git a/drivers/acpi/acpi_cmos_rtc.c b/drivers/acpi/acpi_cmos_rtc.c new file mode 100644 index 000000000000..84190ed89c04 --- /dev/null +++ b/drivers/acpi/acpi_cmos_rtc.c | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * ACPI support for CMOS RTC Address Space access | ||
3 | * | ||
4 | * Copyright (C) 2013, Intel Corporation | ||
5 | * Authors: Lan Tianyu <tianyu.lan@intel.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/acpi.h> | ||
13 | #include <linux/device.h> | ||
14 | #include <linux/err.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/module.h> | ||
17 | #include <asm-generic/rtc.h> | ||
18 | |||
19 | #include "internal.h" | ||
20 | |||
21 | #define PREFIX "ACPI: " | ||
22 | |||
23 | ACPI_MODULE_NAME("cmos rtc"); | ||
24 | |||
25 | static const struct acpi_device_id acpi_cmos_rtc_ids[] = { | ||
26 | { "PNP0B00" }, | ||
27 | { "PNP0B01" }, | ||
28 | { "PNP0B02" }, | ||
29 | {} | ||
30 | }; | ||
31 | |||
32 | static acpi_status | ||
33 | acpi_cmos_rtc_space_handler(u32 function, acpi_physical_address address, | ||
34 | u32 bits, u64 *value64, | ||
35 | void *handler_context, void *region_context) | ||
36 | { | ||
37 | int i; | ||
38 | u8 *value = (u8 *)&value64; | ||
39 | |||
40 | if (address > 0xff || !value64) | ||
41 | return AE_BAD_PARAMETER; | ||
42 | |||
43 | if (function != ACPI_WRITE && function != ACPI_READ) | ||
44 | return AE_BAD_PARAMETER; | ||
45 | |||
46 | spin_lock_irq(&rtc_lock); | ||
47 | |||
48 | for (i = 0; i < DIV_ROUND_UP(bits, 8); ++i, ++address, ++value) | ||
49 | if (function == ACPI_READ) | ||
50 | *value = CMOS_READ(address); | ||
51 | else | ||
52 | CMOS_WRITE(*value, address); | ||
53 | |||
54 | spin_unlock_irq(&rtc_lock); | ||
55 | |||
56 | return AE_OK; | ||
57 | } | ||
58 | |||
59 | static int acpi_install_cmos_rtc_space_handler(struct acpi_device *adev, | ||
60 | const struct acpi_device_id *id) | ||
61 | { | ||
62 | acpi_status status; | ||
63 | |||
64 | status = acpi_install_address_space_handler(adev->handle, | ||
65 | ACPI_ADR_SPACE_CMOS, | ||
66 | &acpi_cmos_rtc_space_handler, | ||
67 | NULL, NULL); | ||
68 | if (ACPI_FAILURE(status)) { | ||
69 | pr_err(PREFIX "Error installing CMOS-RTC region handler\n"); | ||
70 | return -ENODEV; | ||
71 | } | ||
72 | |||
73 | return 0; | ||
74 | } | ||
75 | |||
76 | static void acpi_remove_cmos_rtc_space_handler(struct acpi_device *adev) | ||
77 | { | ||
78 | if (ACPI_FAILURE(acpi_remove_address_space_handler(adev->handle, | ||
79 | ACPI_ADR_SPACE_CMOS, &acpi_cmos_rtc_space_handler))) | ||
80 | pr_err(PREFIX "Error removing CMOS-RTC region handler\n"); | ||
81 | } | ||
82 | |||
83 | static struct acpi_scan_handler cmos_rtc_handler = { | ||
84 | .ids = acpi_cmos_rtc_ids, | ||
85 | .attach = acpi_install_cmos_rtc_space_handler, | ||
86 | .detach = acpi_remove_cmos_rtc_space_handler, | ||
87 | }; | ||
88 | |||
89 | void __init acpi_cmos_rtc_init(void) | ||
90 | { | ||
91 | acpi_scan_add_handler(&cmos_rtc_handler); | ||
92 | } | ||
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index e7100459ac4a..082b4dd252a8 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
@@ -425,7 +425,7 @@ static int acpi_battery_get_info(struct acpi_battery *battery) | |||
425 | { | 425 | { |
426 | int result = -EFAULT; | 426 | int result = -EFAULT; |
427 | acpi_status status = 0; | 427 | acpi_status status = 0; |
428 | char *name = test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags)? | 428 | char *name = test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags) ? |
429 | "_BIX" : "_BIF"; | 429 | "_BIX" : "_BIF"; |
430 | 430 | ||
431 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 431 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
@@ -661,11 +661,11 @@ static void find_battery(const struct dmi_header *dm, void *private) | |||
661 | static void acpi_battery_quirks(struct acpi_battery *battery) | 661 | static void acpi_battery_quirks(struct acpi_battery *battery) |
662 | { | 662 | { |
663 | if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)) | 663 | if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)) |
664 | return ; | 664 | return; |
665 | 665 | ||
666 | if (battery->full_charge_capacity == 100 && | 666 | if (battery->full_charge_capacity == 100 && |
667 | battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN && | 667 | battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN && |
668 | battery->capacity_now >=0 && battery->capacity_now <= 100) { | 668 | battery->capacity_now >= 0 && battery->capacity_now <= 100) { |
669 | set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags); | 669 | set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags); |
670 | battery->full_charge_capacity = battery->design_capacity; | 670 | battery->full_charge_capacity = battery->design_capacity; |
671 | battery->capacity_now = (battery->capacity_now * | 671 | battery->capacity_now = (battery->capacity_now * |
@@ -673,7 +673,7 @@ static void acpi_battery_quirks(struct acpi_battery *battery) | |||
673 | } | 673 | } |
674 | 674 | ||
675 | if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags)) | 675 | if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags)) |
676 | return ; | 676 | return; |
677 | 677 | ||
678 | if (battery->power_unit && dmi_name_in_vendors("LENOVO")) { | 678 | if (battery->power_unit && dmi_name_in_vendors("LENOVO")) { |
679 | const char *s; | 679 | const char *s; |
@@ -761,7 +761,7 @@ static int acpi_battery_print_info(struct seq_file *seq, int result) | |||
761 | goto end; | 761 | goto end; |
762 | 762 | ||
763 | seq_printf(seq, "present: %s\n", | 763 | seq_printf(seq, "present: %s\n", |
764 | acpi_battery_present(battery)?"yes":"no"); | 764 | acpi_battery_present(battery) ? "yes" : "no"); |
765 | if (!acpi_battery_present(battery)) | 765 | if (!acpi_battery_present(battery)) |
766 | goto end; | 766 | goto end; |
767 | if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) | 767 | if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) |
@@ -817,12 +817,12 @@ static int acpi_battery_print_state(struct seq_file *seq, int result) | |||
817 | goto end; | 817 | goto end; |
818 | 818 | ||
819 | seq_printf(seq, "present: %s\n", | 819 | seq_printf(seq, "present: %s\n", |
820 | acpi_battery_present(battery)?"yes":"no"); | 820 | acpi_battery_present(battery) ? "yes" : "no"); |
821 | if (!acpi_battery_present(battery)) | 821 | if (!acpi_battery_present(battery)) |
822 | goto end; | 822 | goto end; |
823 | 823 | ||
824 | seq_printf(seq, "capacity state: %s\n", | 824 | seq_printf(seq, "capacity state: %s\n", |
825 | (battery->state & 0x04)?"critical":"ok"); | 825 | (battery->state & 0x04) ? "critical" : "ok"); |
826 | if ((battery->state & 0x01) && (battery->state & 0x02)) | 826 | if ((battery->state & 0x01) && (battery->state & 0x02)) |
827 | seq_printf(seq, | 827 | seq_printf(seq, |
828 | "charging state: charging/discharging\n"); | 828 | "charging state: charging/discharging\n"); |
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 292de3cab9cc..a5bb33bab448 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
@@ -91,8 +91,7 @@ static struct dmi_system_id dsdt_dmi_table[] __initdata = { | |||
91 | 91 | ||
92 | int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) | 92 | int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) |
93 | { | 93 | { |
94 | acpi_status status = AE_OK; | 94 | acpi_status status; |
95 | |||
96 | 95 | ||
97 | if (!device) | 96 | if (!device) |
98 | return -EINVAL; | 97 | return -EINVAL; |
@@ -162,7 +161,7 @@ EXPORT_SYMBOL(acpi_bus_private_data_handler); | |||
162 | 161 | ||
163 | int acpi_bus_get_private_data(acpi_handle handle, void **data) | 162 | int acpi_bus_get_private_data(acpi_handle handle, void **data) |
164 | { | 163 | { |
165 | acpi_status status = AE_OK; | 164 | acpi_status status; |
166 | 165 | ||
167 | if (!*data) | 166 | if (!*data) |
168 | return -EINVAL; | 167 | return -EINVAL; |
@@ -361,7 +360,7 @@ extern int event_is_open; | |||
361 | int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id, u8 type, int data) | 360 | int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id, u8 type, int data) |
362 | { | 361 | { |
363 | struct acpi_bus_event *event; | 362 | struct acpi_bus_event *event; |
364 | unsigned long flags = 0; | 363 | unsigned long flags; |
365 | 364 | ||
366 | /* drop event on the floor if no one's listening */ | 365 | /* drop event on the floor if no one's listening */ |
367 | if (!event_is_open) | 366 | if (!event_is_open) |
@@ -400,7 +399,7 @@ EXPORT_SYMBOL(acpi_bus_generate_proc_event); | |||
400 | 399 | ||
401 | int acpi_bus_receive_event(struct acpi_bus_event *event) | 400 | int acpi_bus_receive_event(struct acpi_bus_event *event) |
402 | { | 401 | { |
403 | unsigned long flags = 0; | 402 | unsigned long flags; |
404 | struct acpi_bus_event *entry = NULL; | 403 | struct acpi_bus_event *entry = NULL; |
405 | 404 | ||
406 | DECLARE_WAITQUEUE(wait, current); | 405 | DECLARE_WAITQUEUE(wait, current); |
@@ -593,7 +592,7 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data) | |||
593 | 592 | ||
594 | static int __init acpi_bus_init_irq(void) | 593 | static int __init acpi_bus_init_irq(void) |
595 | { | 594 | { |
596 | acpi_status status = AE_OK; | 595 | acpi_status status; |
597 | union acpi_object arg = { ACPI_TYPE_INTEGER }; | 596 | union acpi_object arg = { ACPI_TYPE_INTEGER }; |
598 | struct acpi_object_list arg_list = { 1, &arg }; | 597 | struct acpi_object_list arg_list = { 1, &arg }; |
599 | char *message = NULL; | 598 | char *message = NULL; |
@@ -640,7 +639,7 @@ u8 acpi_gbl_permanent_mmap; | |||
640 | 639 | ||
641 | void __init acpi_early_init(void) | 640 | void __init acpi_early_init(void) |
642 | { | 641 | { |
643 | acpi_status status = AE_OK; | 642 | acpi_status status; |
644 | 643 | ||
645 | if (acpi_disabled) | 644 | if (acpi_disabled) |
646 | return; | 645 | return; |
@@ -714,8 +713,8 @@ void __init acpi_early_init(void) | |||
714 | 713 | ||
715 | static int __init acpi_bus_init(void) | 714 | static int __init acpi_bus_init(void) |
716 | { | 715 | { |
717 | int result = 0; | 716 | int result; |
718 | acpi_status status = AE_OK; | 717 | acpi_status status; |
719 | extern acpi_status acpi_os_initialize1(void); | 718 | extern acpi_status acpi_os_initialize1(void); |
720 | 719 | ||
721 | acpi_os_initialize1(); | 720 | acpi_os_initialize1(); |
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index edc00818c803..80403c1a89f8 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
@@ -983,6 +983,10 @@ static struct dmi_system_id __initdata ec_dmi_table[] = { | |||
983 | ec_enlarge_storm_threshold, "CLEVO hardware", { | 983 | ec_enlarge_storm_threshold, "CLEVO hardware", { |
984 | DMI_MATCH(DMI_SYS_VENDOR, "CLEVO Co."), | 984 | DMI_MATCH(DMI_SYS_VENDOR, "CLEVO Co."), |
985 | DMI_MATCH(DMI_PRODUCT_NAME, "M720T/M730T"),}, NULL}, | 985 | DMI_MATCH(DMI_PRODUCT_NAME, "M720T/M730T"),}, NULL}, |
986 | { | ||
987 | ec_skip_dsdt_scan, "HP Folio 13", { | ||
988 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
989 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13"),}, NULL}, | ||
986 | {}, | 990 | {}, |
987 | }; | 991 | }; |
988 | 992 | ||
diff --git a/drivers/acpi/ec_sys.c b/drivers/acpi/ec_sys.c index 7586544fddb4..4e7b798900f2 100644 --- a/drivers/acpi/ec_sys.c +++ b/drivers/acpi/ec_sys.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/acpi.h> | 12 | #include <linux/acpi.h> |
13 | #include <linux/debugfs.h> | 13 | #include <linux/debugfs.h> |
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/uaccess.h> | ||
15 | #include "internal.h" | 16 | #include "internal.h" |
16 | 17 | ||
17 | MODULE_AUTHOR("Thomas Renninger <trenn@suse.de>"); | 18 | MODULE_AUTHOR("Thomas Renninger <trenn@suse.de>"); |
@@ -34,7 +35,6 @@ static ssize_t acpi_ec_read_io(struct file *f, char __user *buf, | |||
34 | * struct acpi_ec *ec = ((struct seq_file *)f->private_data)->private; | 35 | * struct acpi_ec *ec = ((struct seq_file *)f->private_data)->private; |
35 | */ | 36 | */ |
36 | unsigned int size = EC_SPACE_SIZE; | 37 | unsigned int size = EC_SPACE_SIZE; |
37 | u8 *data = (u8 *) buf; | ||
38 | loff_t init_off = *off; | 38 | loff_t init_off = *off; |
39 | int err = 0; | 39 | int err = 0; |
40 | 40 | ||
@@ -47,9 +47,15 @@ static ssize_t acpi_ec_read_io(struct file *f, char __user *buf, | |||
47 | size = count; | 47 | size = count; |
48 | 48 | ||
49 | while (size) { | 49 | while (size) { |
50 | err = ec_read(*off, &data[*off - init_off]); | 50 | u8 byte_read; |
51 | err = ec_read(*off, &byte_read); | ||
51 | if (err) | 52 | if (err) |
52 | return err; | 53 | return err; |
54 | if (put_user(byte_read, buf + *off - init_off)) { | ||
55 | if (*off - init_off) | ||
56 | return *off - init_off; /* partial read */ | ||
57 | return -EFAULT; | ||
58 | } | ||
53 | *off += 1; | 59 | *off += 1; |
54 | size--; | 60 | size--; |
55 | } | 61 | } |
@@ -65,7 +71,6 @@ static ssize_t acpi_ec_write_io(struct file *f, const char __user *buf, | |||
65 | 71 | ||
66 | unsigned int size = count; | 72 | unsigned int size = count; |
67 | loff_t init_off = *off; | 73 | loff_t init_off = *off; |
68 | u8 *data = (u8 *) buf; | ||
69 | int err = 0; | 74 | int err = 0; |
70 | 75 | ||
71 | if (*off >= EC_SPACE_SIZE) | 76 | if (*off >= EC_SPACE_SIZE) |
@@ -76,7 +81,12 @@ static ssize_t acpi_ec_write_io(struct file *f, const char __user *buf, | |||
76 | } | 81 | } |
77 | 82 | ||
78 | while (size) { | 83 | while (size) { |
79 | u8 byte_write = data[*off - init_off]; | 84 | u8 byte_write; |
85 | if (get_user(byte_write, buf + *off - init_off)) { | ||
86 | if (*off - init_off) | ||
87 | return *off - init_off; /* partial write */ | ||
88 | return -EFAULT; | ||
89 | } | ||
80 | err = ec_write(*off, byte_write); | 90 | err = ec_write(*off, byte_write); |
81 | if (err) | 91 | if (err) |
82 | return err; | 92 | return err; |
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c index 9783f400d857..f68095756fb7 100644 --- a/drivers/acpi/glue.c +++ b/drivers/acpi/glue.c | |||
@@ -81,13 +81,15 @@ static struct acpi_bus_type *acpi_get_bus_type(struct device *dev) | |||
81 | static acpi_status do_acpi_find_child(acpi_handle handle, u32 lvl_not_used, | 81 | static acpi_status do_acpi_find_child(acpi_handle handle, u32 lvl_not_used, |
82 | void *addr_p, void **ret_p) | 82 | void *addr_p, void **ret_p) |
83 | { | 83 | { |
84 | unsigned long long addr; | 84 | unsigned long long addr, sta; |
85 | acpi_status status; | 85 | acpi_status status; |
86 | 86 | ||
87 | status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &addr); | 87 | status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &addr); |
88 | if (ACPI_SUCCESS(status) && addr == *((u64 *)addr_p)) { | 88 | if (ACPI_SUCCESS(status) && addr == *((u64 *)addr_p)) { |
89 | *ret_p = handle; | 89 | *ret_p = handle; |
90 | return AE_CTRL_TERMINATE; | 90 | status = acpi_bus_get_status_handle(handle, &sta); |
91 | if (ACPI_SUCCESS(status) && (sta & ACPI_STA_DEVICE_ENABLED)) | ||
92 | return AE_CTRL_TERMINATE; | ||
91 | } | 93 | } |
92 | return AE_OK; | 94 | return AE_OK; |
93 | } | 95 | } |
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h index 520073ba36b4..3a50a34fe176 100644 --- a/drivers/acpi/internal.h +++ b/drivers/acpi/internal.h | |||
@@ -51,6 +51,11 @@ void acpi_memory_hotplug_init(void); | |||
51 | #else | 51 | #else |
52 | static inline void acpi_memory_hotplug_init(void) {} | 52 | static inline void acpi_memory_hotplug_init(void) {} |
53 | #endif | 53 | #endif |
54 | #ifdef CONFIG_X86 | ||
55 | void acpi_cmos_rtc_init(void); | ||
56 | #else | ||
57 | static inline void acpi_cmos_rtc_init(void) {} | ||
58 | #endif | ||
54 | 59 | ||
55 | extern bool acpi_force_hot_remove; | 60 | extern bool acpi_force_hot_remove; |
56 | 61 | ||
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index e0db2dc42370..dfe76f17cfc4 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c | |||
@@ -2132,6 +2132,7 @@ int __init acpi_scan_init(void) | |||
2132 | acpi_processor_init(); | 2132 | acpi_processor_init(); |
2133 | acpi_platform_init(); | 2133 | acpi_platform_init(); |
2134 | acpi_lpss_init(); | 2134 | acpi_lpss_init(); |
2135 | acpi_cmos_rtc_init(); | ||
2135 | acpi_container_init(); | 2136 | acpi_container_init(); |
2136 | acpi_memory_hotplug_init(); | 2137 | acpi_memory_hotplug_init(); |
2137 | acpi_dock_init(); | 2138 | acpi_dock_init(); |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index cac0dfb2a082..ca081ace2a1d 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -156,12 +156,10 @@ struct acpi_device_flags { | |||
156 | u32 dynamic_status:1; | 156 | u32 dynamic_status:1; |
157 | u32 removable:1; | 157 | u32 removable:1; |
158 | u32 ejectable:1; | 158 | u32 ejectable:1; |
159 | u32 suprise_removal_ok:1; | ||
160 | u32 power_manageable:1; | 159 | u32 power_manageable:1; |
161 | u32 performance_manageable:1; | ||
162 | u32 eject_pending:1; | 160 | u32 eject_pending:1; |
163 | u32 match_driver:1; | 161 | u32 match_driver:1; |
164 | u32 reserved:24; | 162 | u32 reserved:26; |
165 | }; | 163 | }; |
166 | 164 | ||
167 | /* File System */ | 165 | /* File System */ |