mirror of
https://github.com/torvalds/linux.git
synced 2024-12-03 17:41:22 +00:00
net: iosm: uevent support
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>
This commit is contained in:
parent
64516f633b
commit
110e6e02eb
44
drivers/net/wwan/iosm/iosm_ipc_uevent.c
Normal file
44
drivers/net/wwan/iosm/iosm_ipc_uevent.c
Normal file
@ -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);
|
||||
}
|
41
drivers/net/wwan/iosm/iosm_ipc_uevent.h
Normal file
41
drivers/net/wwan/iosm/iosm_ipc_uevent.h
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user