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:
committed by
David S. Miller
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
|
Reference in New Issue
Block a user