All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michał Kępień" <kernel@kempniu.pl>
To: "Darren Hart" <dvhart@infradead.org>,
	"Matthew Garrett" <mjg59@srcf.ucam.org>,
	"Pali Rohár" <pali.rohar@gmail.com>,
	"Richard Purdie" <rpurdie@rpsys.net>,
	"Jacek Anaszewski" <j.anaszewski@samsung.com>
Cc: platform-driver-x86@vger.kernel.org, linux-leds@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v2 08/16] dell-smbios: return the SMBIOS buffer from dell_smbios_get_buffer()
Date: Fri, 22 Jan 2016 15:27:20 +0100	[thread overview]
Message-ID: <1453472848-3118-9-git-send-email-kernel@kempniu.pl> (raw)
In-Reply-To: <1453472848-3118-1-git-send-email-kernel@kempniu.pl>

Ultimately, the SMBIOS buffer should not be exported from dell-smbios.
Currently, dell-laptop accesses it directly using a global variable, so
make dell_smbios_get_buffer() return a pointer to the SMBIOS buffer and
replace all uses of the global variable with local variables.

Signed-off-by: Michał Kępień <kernel@kempniu.pl>
---
 drivers/platform/x86/dell-laptop.c |   49 +++++++++++++++++++++++-------------
 drivers/platform/x86/dell-smbios.c |    3 ++-
 drivers/platform/x86/dell-smbios.h |    2 +-
 3 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index 0bb2211..5b200f2 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -409,6 +409,7 @@ static inline int dell_smi_error(int value)
 
 static int dell_rfkill_set(void *data, bool blocked)
 {
+	struct calling_interface_buffer *buffer;
 	int disable = blocked ? 1 : 0;
 	unsigned long radio = (unsigned long)data;
 	int hwswitch_bit = (unsigned long)data - 1;
@@ -416,7 +417,7 @@ static int dell_rfkill_set(void *data, bool blocked)
 	int status;
 	int ret;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 
 	dell_smbios_send_request(17, 11);
 	ret = buffer->output[0];
@@ -451,7 +452,8 @@ static int dell_rfkill_set(void *data, bool blocked)
 
 /* Must be called with the buffer held */
 static void dell_rfkill_update_sw_state(struct rfkill *rfkill, int radio,
-					int status)
+					int status,
+					struct calling_interface_buffer *buffer)
 {
 	if (status & BIT(0)) {
 		/* Has hw-switch, sync sw_state to BIOS */
@@ -474,12 +476,13 @@ static void dell_rfkill_update_hw_state(struct rfkill *rfkill, int radio,
 
 static void dell_rfkill_query(struct rfkill *rfkill, void *data)
 {
+	struct calling_interface_buffer *buffer;
 	int radio = ((unsigned long)data & 0xF);
 	int hwswitch;
 	int status;
 	int ret;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 
 	dell_smbios_send_request(17, 11);
 	ret = buffer->output[0];
@@ -514,12 +517,13 @@ static struct dentry *dell_laptop_dir;
 
 static int dell_debugfs_show(struct seq_file *s, void *data)
 {
+	struct calling_interface_buffer *buffer;
 	int hwswitch_state;
 	int hwswitch_ret;
 	int status;
 	int ret;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 
 	dell_smbios_send_request(17, 11);
 	ret = buffer->output[0];
@@ -613,11 +617,12 @@ static const struct file_operations dell_debugfs_fops = {
 
 static void dell_update_rfkill(struct work_struct *ignored)
 {
+	struct calling_interface_buffer *buffer;
 	int hwswitch = 0;
 	int status;
 	int ret;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 
 	dell_smbios_send_request(17, 11);
 	ret = buffer->output[0];
@@ -637,16 +642,17 @@ static void dell_update_rfkill(struct work_struct *ignored)
 
 	if (wifi_rfkill) {
 		dell_rfkill_update_hw_state(wifi_rfkill, 1, status, hwswitch);
-		dell_rfkill_update_sw_state(wifi_rfkill, 1, status);
+		dell_rfkill_update_sw_state(wifi_rfkill, 1, status, buffer);
 	}
 	if (bluetooth_rfkill) {
 		dell_rfkill_update_hw_state(bluetooth_rfkill, 2, status,
 					    hwswitch);
-		dell_rfkill_update_sw_state(bluetooth_rfkill, 2, status);
+		dell_rfkill_update_sw_state(bluetooth_rfkill, 2, status,
+					    buffer);
 	}
 	if (wwan_rfkill) {
 		dell_rfkill_update_hw_state(wwan_rfkill, 3, status, hwswitch);
-		dell_rfkill_update_sw_state(wwan_rfkill, 3, status);
+		dell_rfkill_update_sw_state(wwan_rfkill, 3, status, buffer);
 	}
 
  out:
@@ -694,6 +700,7 @@ static struct notifier_block dell_laptop_rbtn_notifier = {
 
 static int __init dell_setup_rfkill(void)
 {
+	struct calling_interface_buffer *buffer;
 	int status, ret, whitelisted;
 	const char *product;
 
@@ -709,7 +716,7 @@ static int __init dell_setup_rfkill(void)
 	if (!force_rfkill && !whitelisted)
 		return 0;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 	dell_smbios_send_request(17, 11);
 	ret = buffer->output[0];
 	status = buffer->output[1];
@@ -866,6 +873,7 @@ static void dell_cleanup_rfkill(void)
 
 static int dell_send_intensity(struct backlight_device *bd)
 {
+	struct calling_interface_buffer *buffer;
 	int token;
 	int ret;
 
@@ -873,7 +881,7 @@ static int dell_send_intensity(struct backlight_device *bd)
 	if (token == -1)
 		return -ENODEV;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 	buffer->input[0] = token;
 	buffer->input[1] = bd->props.brightness;
 
@@ -890,6 +898,7 @@ static int dell_send_intensity(struct backlight_device *bd)
 
 static int dell_get_intensity(struct backlight_device *bd)
 {
+	struct calling_interface_buffer *buffer;
 	int token;
 	int ret;
 
@@ -897,7 +906,7 @@ static int dell_get_intensity(struct backlight_device *bd)
 	if (token == -1)
 		return -ENODEV;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 	buffer->input[0] = token;
 
 	if (power_supply_is_system_supplied() > 0)
@@ -1154,10 +1163,11 @@ static bool kbd_led_present;
 
 static int kbd_get_info(struct kbd_info *info)
 {
+	struct calling_interface_buffer *buffer;
 	u8 units;
 	int ret;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 
 	buffer->input[0] = 0x0;
 	dell_smbios_send_request(4, 11);
@@ -1243,9 +1253,10 @@ static int kbd_set_level(struct kbd_state *state, u8 level)
 
 static int kbd_get_state(struct kbd_state *state)
 {
+	struct calling_interface_buffer *buffer;
 	int ret;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 
 	buffer->input[0] = 0x1;
 	dell_smbios_send_request(4, 11);
@@ -1274,9 +1285,10 @@ static int kbd_get_state(struct kbd_state *state)
 
 static int kbd_set_state(struct kbd_state *state)
 {
+	struct calling_interface_buffer *buffer;
 	int ret;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 	buffer->input[0] = 0x2;
 	buffer->input[1] = BIT(state->mode_bit) & 0xFFFF;
 	buffer->input[1] |= (state->triggers & 0xFF) << 16;
@@ -1313,6 +1325,7 @@ static int kbd_set_state_safe(struct kbd_state *state, struct kbd_state *old)
 
 static int kbd_set_token_bit(u8 bit)
 {
+	struct calling_interface_buffer *buffer;
 	int id;
 	int ret;
 
@@ -1323,7 +1336,7 @@ static int kbd_set_token_bit(u8 bit)
 	if (id == -1)
 		return -EINVAL;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 	buffer->input[0] = da_tokens[id].location;
 	buffer->input[1] = da_tokens[id].value;
 	dell_smbios_send_request(1, 0);
@@ -1335,6 +1348,7 @@ static int kbd_set_token_bit(u8 bit)
 
 static int kbd_get_token_bit(u8 bit)
 {
+	struct calling_interface_buffer *buffer;
 	int id;
 	int ret;
 	int val;
@@ -1346,7 +1360,7 @@ static int kbd_get_token_bit(u8 bit)
 	if (id == -1)
 		return -EINVAL;
 
-	dell_smbios_get_buffer();
+	buffer = dell_smbios_get_buffer();
 	buffer->input[0] = da_tokens[id].location;
 	dell_smbios_send_request(0, 0);
 	ret = buffer->output[0];
@@ -1972,6 +1986,7 @@ static void kbd_led_exit(void)
 
 static int __init dell_init(void)
 {
+	struct calling_interface_buffer *buffer;
 	int max_intensity = 0;
 	int token;
 	int ret;
@@ -2017,7 +2032,7 @@ static int __init dell_init(void)
 
 	token = find_token_location(BRIGHTNESS_TOKEN);
 	if (token != -1) {
-		dell_smbios_get_buffer();
+		buffer = dell_smbios_get_buffer();
 		buffer->input[0] = token;
 		dell_smbios_send_request(0, 2);
 		if (buffer->output[0] == 0)
diff --git a/drivers/platform/x86/dell-smbios.c b/drivers/platform/x86/dell-smbios.c
index b10c613..535d382 100644
--- a/drivers/platform/x86/dell-smbios.c
+++ b/drivers/platform/x86/dell-smbios.c
@@ -40,10 +40,11 @@ static int da_num_tokens;
 struct calling_interface_token *da_tokens;
 EXPORT_SYMBOL_GPL(da_tokens);
 
-void dell_smbios_get_buffer(void)
+struct calling_interface_buffer *dell_smbios_get_buffer(void)
 {
 	mutex_lock(&buffer_mutex);
 	dell_smbios_clear_buffer();
+	return buffer;
 }
 EXPORT_SYMBOL_GPL(dell_smbios_get_buffer);
 
diff --git a/drivers/platform/x86/dell-smbios.h b/drivers/platform/x86/dell-smbios.h
index 80b5048..f7a51f5 100644
--- a/drivers/platform/x86/dell-smbios.h
+++ b/drivers/platform/x86/dell-smbios.h
@@ -38,7 +38,7 @@ struct calling_interface_token {
 extern struct calling_interface_buffer *buffer;
 extern struct calling_interface_token *da_tokens;
 
-void dell_smbios_get_buffer(void);
+struct calling_interface_buffer *dell_smbios_get_buffer(void);
 void dell_smbios_clear_buffer(void);
 void dell_smbios_release_buffer(void);
 void dell_smbios_send_request(int class, int select);
-- 
1.7.10.4

  parent reply	other threads:[~2016-01-22 14:27 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-22 14:27 [PATCH v2 00/16] Common Dell SMBIOS API Michał Kępień
2016-01-22 14:27 ` [PATCH v2 01/16] dell-laptop: extract SMBIOS-related code to a separate module Michał Kępień
2016-01-24  2:16   ` kbuild test robot
2016-01-26 13:33     ` Michał Kępień
2016-01-22 14:27 ` [PATCH v2 02/16] dell-smbios: rename get_buffer() to dell_smbios_get_buffer() Michał Kępień
2016-01-22 14:27 ` [PATCH v2 03/16] dell-smbios: rename clear_buffer() to dell_smbios_clear_buffer() Michał Kępień
2016-01-22 14:27 ` [PATCH v2 04/16] dell-smbios: rename release_buffer() to dell_smbios_release_buffer() Michał Kępień
2016-01-22 14:27 ` [PATCH v2 05/16] dell-smbios: rename dell_send_request() to dell_smbios_send_request() Michał Kępień
2016-01-22 14:27 ` [PATCH v2 06/16] dell-smbios: don't pass an SMBIOS buffer " Michał Kępień
2016-01-22 14:27 ` [PATCH v2 07/16] dell-smbios: don't return an SMBIOS buffer from dell_smbios_send_request() Michał Kępień
2016-02-08 18:44   ` Darren Hart
2016-02-09 13:27     ` Michał Kępień
2016-02-09 16:50       ` Darren Hart
2016-02-09 17:34         ` Michał Kępień
2016-01-22 14:27 ` Michał Kępień [this message]
2016-01-22 14:27 ` [PATCH v2 09/16] dell-smbios: make the SMBIOS buffer static Michał Kępień
2016-01-22 14:27 ` [PATCH v2 10/16] dell-smbios: implement new function for finding DMI table 0xDA tokens Michał Kępień
2016-01-22 14:27 ` [PATCH v2 11/16] dell-laptop: use dell_smbios_find_token() instead of find_token_id() Michał Kępień
2016-01-22 14:27 ` [PATCH v2 12/16] dell-laptop: use dell_smbios_find_token() instead of find_token_location() Michał Kępień
2016-01-22 14:27 ` [PATCH v2 13/16] dell-smbios: remove find_token_{id,location}() Michał Kępień
2016-01-22 14:27 ` [PATCH v2 14/16] dell-smbios: make da_tokens static Michał Kępień
2016-01-22 14:27 ` [PATCH v2 15/16] dell-led: use dell_smbios_find_token() for finding mic DMI tokens Michał Kępień
2016-01-22 14:27 ` [PATCH v2 16/16] dell-led: use dell_smbios_send_request() for performing SMBIOS calls Michał Kępień
2016-01-22 14:48 ` [PATCH v2 00/16] Common Dell SMBIOS API Pali Rohár
2016-02-07 20:34   ` Darren Hart
2016-02-08 19:20   ` Darren Hart
2016-02-08 19:29     ` Greg Kroah-Hartman
2016-02-08 20:46       ` Darren Hart
2016-02-08 21:04         ` Pali Rohár
2016-02-08 21:31           ` Darren Hart
2016-02-09 14:15         ` Michał Kępień
2016-02-08 19:30     ` Lukas Wunner
2016-02-08 20:43       ` Darren Hart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1453472848-3118-9-git-send-email-kernel@kempniu.pl \
    --to=kernel@kempniu.pl \
    --cc=dvhart@infradead.org \
    --cc=j.anaszewski@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=mjg59@srcf.ucam.org \
    --cc=pali.rohar@gmail.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rpurdie@rpsys.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.