int ramster_debugfs_init(void) { int i; struct dentry *root = debugfs_create_dir("ramster", NULL); if (root == NULL) return -ENXIO; for (i = 0; i < ARRAY_SIZE(attrs); i++) if (!debugfs_create_size_t(attrs[i].name, S_IRUGO, root, attrs[i].val)) goto out; return 0; out: return -ENODEV; }
static int i2400mu_debugfs_add(struct i2400mu *i2400mu) { int result; struct device *dev = &i2400mu->usb_iface->dev; struct dentry *dentry = i2400mu->i2400m.wimax_dev.debugfs_dentry; struct dentry *fd; dentry = debugfs_create_dir("i2400m-usb", dentry); result = PTR_ERR(dentry); if (IS_ERR(dentry)) { if (result == -ENODEV) result = 0; /* No debugfs support */ goto error; } i2400mu->debugfs_dentry = dentry; __debugfs_register("dl_", usb, dentry); __debugfs_register("dl_", fw, dentry); __debugfs_register("dl_", notif, dentry); __debugfs_register("dl_", rx, dentry); __debugfs_register("dl_", tx, dentry); /* Don't touch these if you don't know what you are doing */ fd = debugfs_create_u8("rx_size_auto_shrink", 0600, dentry, &i2400mu->rx_size_auto_shrink); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "rx_size_auto_shrink: %d\n", result); goto error; } fd = debugfs_create_size_t("rx_size", 0600, dentry, &i2400mu->rx_size); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "rx_size: %d\n", result); goto error; } return 0; error: debugfs_remove_recursive(i2400mu->debugfs_dentry); return result; }
int zcache_debugfs_init(void) { unsigned int i; struct dentry *root = debugfs_create_dir("zcache", NULL); if (root == NULL) return -ENXIO; for (i = 0; i < ARRAY_SIZE(attrs); i++) if (!debugfs_create_size_t(attrs[i].name, S_IRUGO, root, attrs[i].val)) goto out; debugfs_create_u64("eph_zbytes", S_IRUGO, root, &zcache_eph_zbytes); debugfs_create_u64("eph_zbytes_max", S_IRUGO, root, &zcache_eph_zbytes_max); debugfs_create_u64("pers_zbytes", S_IRUGO, root, &zcache_pers_zbytes); debugfs_create_u64("pers_zbytes_max", S_IRUGO, root, &zcache_pers_zbytes_max); return 0; out: return -ENODEV; }
int i2400m_debugfs_add(struct i2400m *i2400m) { int result; struct device *dev = i2400m_dev(i2400m); struct dentry *dentry = i2400m->wimax_dev.debugfs_dentry; struct dentry *fd; dentry = debugfs_create_dir("i2400m", dentry); result = PTR_ERR(dentry); if (IS_ERR(dentry)) { if (result == -ENODEV) result = 0; /* No debugfs support */ goto error; } i2400m->debugfs_dentry = dentry; __debugfs_register("dl_", control, dentry); __debugfs_register("dl_", driver, dentry); __debugfs_register("dl_", debugfs, dentry); __debugfs_register("dl_", fw, dentry); __debugfs_register("dl_", netdev, dentry); __debugfs_register("dl_", rfkill, dentry); __debugfs_register("dl_", rx, dentry); __debugfs_register("dl_", tx, dentry); fd = debugfs_create_size_t("tx_in", 0400, dentry, &i2400m->tx_in); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "tx_in: %d\n", result); goto error; } fd = debugfs_create_size_t("tx_out", 0400, dentry, &i2400m->tx_out); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "tx_out: %d\n", result); goto error; } fd = debugfs_create_u32("state", 0600, dentry, &i2400m->state); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "state: %d\n", result); goto error; } /* * Trace received messages from user space * * In order to tap the bidirectional message stream in the * 'msg' pipe, user space can read from the 'msg' pipe; * however, due to limitations in libnl, we can't know what * the different applications are sending down to the kernel. * * So we have this hack where the driver will echo any message * received on the msg pipe from user space [through a call to * wimax_dev->op_msg_from_user() into * i2400m_op_msg_from_user()] into the 'trace' pipe that this * driver creates. * * So then, reading from both the 'trace' and 'msg' pipes in * user space will provide a full dump of the traffic. * * Write 1 to activate, 0 to clear. * * It is not really very atomic, but it is also not too * critical. */ fd = debugfs_create_u8("trace_msg_from_user", 0600, dentry, &i2400m->trace_msg_from_user); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "trace_msg_from_user: %d\n", result); goto error; } fd = debugfs_create_netdev_queue_stopped("netdev_queue_stopped", dentry, i2400m); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "netdev_queue_stopped: %d\n", result); goto error; } fd = debugfs_create_file("rx_stats", 0600, dentry, i2400m, &i2400m_rx_stats_fops); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "rx_stats: %d\n", result); goto error; } fd = debugfs_create_file("tx_stats", 0600, dentry, i2400m, &i2400m_tx_stats_fops); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry " "tx_stats: %d\n", result); goto error; } fd = debugfs_create_i2400m_suspend("suspend", dentry, i2400m); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry suspend: %d\n", result); goto error; } fd = debugfs_create_i2400m_reset("reset", dentry, i2400m); result = PTR_ERR(fd); if (IS_ERR(fd) && result != -ENODEV) { dev_err(dev, "Can't create debugfs entry reset: %d\n", result); goto error; } result = 0; error: return result; }