cregit-Linux how code gets into the kernel

Release 4.14 drivers/bluetooth/btmrvl_debugfs.c

/**
 * Marvell Bluetooth driver: debugfs related functions
 *
 * Copyright (C) 2009, Marvell International Ltd.
 *
 * This software file (the "File") is distributed by Marvell International
 * Ltd. under the terms of the GNU General Public License Version 2, June 1991
 * (the "License").  You may use, redistribute and/or modify this File in
 * accordance with the terms and conditions of the License, a copy of which
 * is available by writing to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
 * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
 *
 *
 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
 * this warranty disclaimer.
 **/

#include <linux/debugfs.h>
#include <linux/slab.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>

#include "btmrvl_drv.h"


struct btmrvl_debugfs_data {
	
struct dentry *config_dir;
	
struct dentry *status_dir;
};


static ssize_t btmrvl_hscfgcmd_write(struct file *file, const char __user *ubuf, size_t count, loff_t *ppos) { struct btmrvl_private *priv = file->private_data; char buf[16]; long result, ret; memset(buf, 0, sizeof(buf)); if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) return -EFAULT; ret = kstrtol(buf, 10, &result); if (ret) return ret; priv->btmrvl_dev.hscfgcmd = result; if (priv->btmrvl_dev.hscfgcmd) { btmrvl_prepare_command(priv); wake_up_interruptible(&priv->main_thread.wait_q); } return count; }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao12690.65%125.00%
David S. Miller75.04%125.00%
Marcel Holtmann53.60%125.00%
Jingoo Han10.72%125.00%
Total139100.00%4100.00%


static ssize_t btmrvl_hscfgcmd_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct btmrvl_private *priv = file->private_data; char buf[16]; int ret; ret = snprintf(buf, sizeof(buf) - 1, "%d\n", priv->btmrvl_dev.hscfgcmd); return simple_read_from_buffer(userbuf, count, ppos, buf, ret); }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao7496.10%150.00%
Marcel Holtmann33.90%150.00%
Total77100.00%2100.00%

static const struct file_operations btmrvl_hscfgcmd_fops = { .read = btmrvl_hscfgcmd_read, .write = btmrvl_hscfgcmd_write, .open = simple_open, .llseek = default_llseek, };
static ssize_t btmrvl_pscmd_write(struct file *file, const char __user *ubuf, size_t count, loff_t *ppos) { struct btmrvl_private *priv = file->private_data; char buf[16]; long result, ret; memset(buf, 0, sizeof(buf)); if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) return -EFAULT; ret = kstrtol(buf, 10, &result); if (ret) return ret; priv->btmrvl_dev.pscmd = result; if (priv->btmrvl_dev.pscmd) { btmrvl_prepare_command(priv); wake_up_interruptible(&priv->main_thread.wait_q); } return count; }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao9971.22%120.00%
Andy Shevchenko2719.42%120.00%
David S. Miller75.04%120.00%
Marcel Holtmann53.60%120.00%
Jingoo Han10.72%120.00%
Total139100.00%5100.00%


static ssize_t btmrvl_pscmd_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct btmrvl_private *priv = file->private_data; char buf[16]; int ret; ret = snprintf(buf, sizeof(buf) - 1, "%d\n", priv->btmrvl_dev.pscmd); return simple_read_from_buffer(userbuf, count, ppos, buf, ret); }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao7293.51%133.33%
Marcel Holtmann33.90%133.33%
Andy Shevchenko22.60%133.33%
Total77100.00%3100.00%

static const struct file_operations btmrvl_pscmd_fops = { .read = btmrvl_pscmd_read, .write = btmrvl_pscmd_write, .open = simple_open, .llseek = default_llseek, };
static ssize_t btmrvl_hscmd_write(struct file *file, const char __user *ubuf, size_t count, loff_t *ppos) { struct btmrvl_private *priv = file->private_data; char buf[16]; long result, ret; memset(buf, 0, sizeof(buf)); if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) return -EFAULT; ret = kstrtol(buf, 10, &result); if (ret) return ret; priv->btmrvl_dev.hscmd = result; if (priv->btmrvl_dev.hscmd) { btmrvl_prepare_command(priv); wake_up_interruptible(&priv->main_thread.wait_q); } return count; }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao12388.49%120.00%
David S. Miller75.04%120.00%
Marcel Holtmann53.60%120.00%
Andy Shevchenko32.16%120.00%
Jingoo Han10.72%120.00%
Total139100.00%5100.00%


static ssize_t btmrvl_hscmd_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct btmrvl_private *priv = file->private_data; char buf[16]; int ret; ret = snprintf(buf, sizeof(buf) - 1, "%d\n", priv->btmrvl_dev.hscmd); return simple_read_from_buffer(userbuf, count, ppos, buf, ret); }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao7293.51%133.33%
Marcel Holtmann33.90%133.33%
Andy Shevchenko22.60%133.33%
Total77100.00%3100.00%

static const struct file_operations btmrvl_hscmd_fops = { .read = btmrvl_hscmd_read, .write = btmrvl_hscmd_write, .open = simple_open, .llseek = default_llseek, };
static ssize_t btmrvl_fwdump_write(struct file *file, const char __user *ubuf, size_t count, loff_t *ppos) { struct btmrvl_private *priv = file->private_data; char buf[16]; bool result; memset(buf, 0, sizeof(buf)); if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) return -EFAULT; if (strtobool(buf, &result)) return -EINVAL; if (!result) return -EINVAL; btmrvl_firmware_dump(priv); return count; }

Contributors

PersonTokensPropCommitsCommitProp
Xinming Hu113100.00%1100.00%
Total113100.00%1100.00%

static const struct file_operations btmrvl_fwdump_fops = { .write = btmrvl_fwdump_write, .open = simple_open, .llseek = default_llseek, };
void btmrvl_debugfs_init(struct hci_dev *hdev) { struct btmrvl_private *priv = hci_get_drvdata(hdev); struct btmrvl_debugfs_data *dbg; if (!hdev->debugfs) return; dbg = kzalloc(sizeof(*dbg), GFP_KERNEL); priv->debugfs_data = dbg; if (!dbg) { BT_ERR("Can not allocate memory for btmrvl_debugfs_data."); return; } dbg->config_dir = debugfs_create_dir("config", hdev->debugfs); debugfs_create_u8("psmode", 0644, dbg->config_dir, &priv->btmrvl_dev.psmode); debugfs_create_file("pscmd", 0644, dbg->config_dir, priv, &btmrvl_pscmd_fops); debugfs_create_x16("gpiogap", 0644, dbg->config_dir, &priv->btmrvl_dev.gpio_gap); debugfs_create_u8("hsmode", 0644, dbg->config_dir, &priv->btmrvl_dev.hsmode); debugfs_create_file("hscmd", 0644, dbg->config_dir, priv, &btmrvl_hscmd_fops); debugfs_create_file("hscfgcmd", 0644, dbg->config_dir, priv, &btmrvl_hscfgcmd_fops); debugfs_create_file("fw_dump", 0200, dbg->config_dir, priv, &btmrvl_fwdump_fops); dbg->status_dir = debugfs_create_dir("status", hdev->debugfs); debugfs_create_u8("curpsmode", 0444, dbg->status_dir, &priv->adapter->psmode); debugfs_create_u8("psstate", 0444, dbg->status_dir, &priv->adapter->ps_state); debugfs_create_u8("hsstate", 0444, dbg->status_dir, &priv->adapter->hs_state); debugfs_create_u8("txdnldready", 0444, dbg->status_dir, &priv->btmrvl_dev.tx_dnld_rdy); }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao16157.30%116.67%
Andy Shevchenko9834.88%116.67%
Xinming Hu165.69%116.67%
David Herrmann31.07%116.67%
Marcel Holtmann31.07%233.33%
Total281100.00%6100.00%


void btmrvl_debugfs_remove(struct hci_dev *hdev) { struct btmrvl_private *priv = hci_get_drvdata(hdev); struct btmrvl_debugfs_data *dbg = priv->debugfs_data; if (!dbg) return; debugfs_remove_recursive(dbg->config_dir); debugfs_remove_recursive(dbg->status_dir); kfree(dbg); }

Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao4990.74%133.33%
David Herrmann35.56%133.33%
Andy Shevchenko23.70%133.33%
Total54100.00%3100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Bing Zhao86169.77%19.09%
Xinming Hu15212.32%19.09%
Andy Shevchenko14011.35%19.09%
Marcel Holtmann302.43%218.18%
David S. Miller211.70%19.09%
Arnd Bergmann151.22%19.09%
David Herrmann60.49%19.09%
Jingoo Han30.24%19.09%
Tejun Heo30.24%19.09%
Stephen Boyd30.24%19.09%
Total1234100.00%11100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.