Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 937b62b4 authored by Mario Limonciello's avatar Mario Limonciello Committed by Darren Hart (VMware)
Browse files

platform/x86: dell-smbios-base: Support systems without tokens



Some Dell servers can use dell-smbios but they don't support the
token interface.  Make it optional.

Signed-off-by: default avatarMario Limonciello <mario.limonciello@dell.com>
Signed-off-by: default avatarDarren Hart (VMware) <dvhart@infradead.org>
parent cb5c1978
Loading
Loading
Loading
Loading
+21 −14
Original line number Diff line number Diff line
@@ -212,6 +212,12 @@ int dell_smbios_call_filter(struct device *d,
	if ((buffer->cmd_class == CLASS_TOKEN_READ ||
	     buffer->cmd_class == CLASS_TOKEN_WRITE) &&
	     buffer->cmd_select < 3) {
		/* tokens enabled ? */
		if (!da_tokens) {
			dev_dbg(d, "no token support on this system\n");
			return -EINVAL;
		}

		/* find the matching token ID */
		for (i = 0; i < da_num_tokens; i++) {
			if (da_tokens[i].location != buffer->input[0])
@@ -315,6 +321,9 @@ struct calling_interface_token *dell_smbios_find_token(int tokenid)
{
	int i;

	if (!da_tokens)
		return NULL;

	for (i = 0; i < da_num_tokens; i++) {
		if (da_tokens[i].tokenID == tokenid)
			return &da_tokens[i];
@@ -565,11 +574,6 @@ static int __init dell_smbios_init(void)

	dmi_walk(find_tokens, NULL);

	if (!da_tokens)  {
		pr_info("Unable to find dmi tokens\n");
		return -ENODEV;
	}

	ret = platform_driver_register(&platform_driver);
	if (ret)
		goto fail_platform_driver;
@@ -583,13 +587,6 @@ static int __init dell_smbios_init(void)
	if (ret)
		goto fail_platform_device_add;

	/* duplicate tokens will cause problems building sysfs files */
	zero_duplicates(&platform_device->dev);

	ret = build_tokens_sysfs(platform_device);
	if (ret)
		goto fail_create_group;

	/* register backends */
	wmi = init_dell_smbios_wmi();
	if (wmi)
@@ -600,6 +597,15 @@ static int __init dell_smbios_init(void)
	if (wmi && smm) {
		pr_err("No SMBIOS backends available (wmi: %d, smm: %d)\n",
			wmi, smm);
		goto fail_create_group;
	}

	if (da_tokens)  {
		/* duplicate tokens will cause problems building sysfs files */
		zero_duplicates(&platform_device->dev);

		ret = build_tokens_sysfs(platform_device);
		if (ret)
			goto fail_sysfs;
	}

@@ -628,6 +634,7 @@ static void __exit dell_smbios_exit(void)
	exit_dell_smbios_smm();
	mutex_lock(&smbios_mutex);
	if (platform_device) {
		if (da_tokens)
			free_group(platform_device);
		platform_device_unregister(platform_device);
		platform_driver_unregister(&platform_driver);