-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Report modem status via uevent. Signed-off-by: M Chetan Kumar <m.chetan.kumar@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
M Chetan Kumar
authored and
David S. Miller
committed
Jun 13, 2021
1 parent
64516f6
commit 110e6e0
Showing
2 changed files
with
85 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
/* | ||
* Copyright (C) 2020-21 Intel Corporation. | ||
*/ | ||
|
||
#include <linux/device.h> | ||
#include <linux/kobject.h> | ||
#include <linux/slab.h> | ||
|
||
#include "iosm_ipc_uevent.h" | ||
|
||
/* Update the uevent in work queue context */ | ||
static void ipc_uevent_work(struct work_struct *data) | ||
{ | ||
struct ipc_uevent_info *info; | ||
char *envp[2] = { NULL, NULL }; | ||
|
||
info = container_of(data, struct ipc_uevent_info, work); | ||
|
||
envp[0] = info->uevent; | ||
|
||
if (kobject_uevent_env(&info->dev->kobj, KOBJ_CHANGE, envp)) | ||
pr_err("uevent %s failed to sent", info->uevent); | ||
|
||
kfree(info); | ||
} | ||
|
||
void ipc_uevent_send(struct device *dev, char *uevent) | ||
{ | ||
struct ipc_uevent_info *info = kzalloc(sizeof(*info), GFP_ATOMIC); | ||
|
||
if (!info) | ||
return; | ||
|
||
/* Initialize the kernel work queue */ | ||
INIT_WORK(&info->work, ipc_uevent_work); | ||
|
||
/* Store the device and event information */ | ||
info->dev = dev; | ||
snprintf(info->uevent, MAX_UEVENT_LEN, "%s: %s", dev_name(dev), uevent); | ||
|
||
/* Schedule uevent in process context using work queue */ | ||
schedule_work(&info->work); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only | ||
* | ||
* Copyright (C) 2020-21 Intel Corporation. | ||
*/ | ||
|
||
#ifndef IOSM_IPC_UEVENT_H | ||
#define IOSM_IPC_UEVENT_H | ||
|
||
/* Baseband event strings */ | ||
#define UEVENT_MDM_NOT_READY "MDM_NOT_READY" | ||
#define UEVENT_ROM_READY "ROM_READY" | ||
#define UEVENT_MDM_READY "MDM_READY" | ||
#define UEVENT_CRASH "CRASH" | ||
#define UEVENT_CD_READY "CD_READY" | ||
#define UEVENT_CD_READY_LINK_DOWN "CD_READY_LINK_DOWN" | ||
#define UEVENT_MDM_TIMEOUT "MDM_TIMEOUT" | ||
|
||
/* Maximum length of user events */ | ||
#define MAX_UEVENT_LEN 64 | ||
|
||
/** | ||
* struct ipc_uevent_info - Uevent information structure. | ||
* @dev: Pointer to device structure | ||
* @uevent: Uevent information | ||
* @work: Uevent work struct | ||
*/ | ||
struct ipc_uevent_info { | ||
struct device *dev; | ||
char uevent[MAX_UEVENT_LEN]; | ||
struct work_struct work; | ||
}; | ||
|
||
/** | ||
* ipc_uevent_send - Send modem event to user space. | ||
* @dev: Generic device pointer | ||
* @uevent: Uevent information | ||
* | ||
*/ | ||
void ipc_uevent_send(struct device *dev, char *uevent); | ||
|
||
#endif |