Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3cfd43f4 authored by Bruno Randolf's avatar Bruno Randolf Committed by John W. Linville
Browse files

ath5k: add debugfs file for queue debugging

parent 20fbed21
Loading
Loading
Loading
Loading
+66 −0
Original line number Original line Diff line number Diff line
@@ -735,6 +735,66 @@ static const struct file_operations fops_ani = {
};
};




/* debugfs: queues etc */

static ssize_t read_file_queue(struct file *file, char __user *user_buf,
				   size_t count, loff_t *ppos)
{
	struct ath5k_softc *sc = file->private_data;
	char buf[700];
	unsigned int len = 0;

	struct ath5k_txq *txq;
	struct ath5k_buf *bf, *bf0;
	int i, n = 0;

	len += snprintf(buf+len, sizeof(buf)-len,
			"available txbuffers: %d\n", sc->txbuf_len);

	for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) {
		txq = &sc->txqs[i];

		len += snprintf(buf+len, sizeof(buf)-len,
			"%02d: %ssetup\n", i, txq->setup ? "" : "not ");

		if (!txq->setup)
			continue;

		list_for_each_entry_safe(bf, bf0, &txq->q, list)
			n++;
		len += snprintf(buf+len, sizeof(buf)-len, "  len: %d\n", n);
	}

	return simple_read_from_buffer(user_buf, count, ppos, buf, len);
}

static ssize_t write_file_queue(struct file *file,
				 const char __user *userbuf,
				 size_t count, loff_t *ppos)
{
	struct ath5k_softc *sc = file->private_data;
	char buf[20];

	if (copy_from_user(buf, userbuf, min(count, sizeof(buf))))
		return -EFAULT;

	if (strncmp(buf, "start", 5) == 0)
		ieee80211_wake_queues(sc->hw);
	else if (strncmp(buf, "stop", 4) == 0)
		ieee80211_stop_queues(sc->hw);

	return count;
}


static const struct file_operations fops_queue = {
	.read = read_file_queue,
	.write = write_file_queue,
	.open = ath5k_debugfs_open,
	.owner = THIS_MODULE,
};


/* init */
/* init */


void
void
@@ -778,6 +838,11 @@ ath5k_debug_init_device(struct ath5k_softc *sc)
				S_IWUSR | S_IRUSR,
				S_IWUSR | S_IRUSR,
				sc->debug.debugfs_phydir, sc,
				sc->debug.debugfs_phydir, sc,
				&fops_ani);
				&fops_ani);

	sc->debug.debugfs_queue = debugfs_create_file("queue",
				S_IWUSR | S_IRUSR,
				sc->debug.debugfs_phydir, sc,
				&fops_queue);
}
}


void
void
@@ -796,6 +861,7 @@ ath5k_debug_finish_device(struct ath5k_softc *sc)
	debugfs_remove(sc->debug.debugfs_antenna);
	debugfs_remove(sc->debug.debugfs_antenna);
	debugfs_remove(sc->debug.debugfs_frameerrors);
	debugfs_remove(sc->debug.debugfs_frameerrors);
	debugfs_remove(sc->debug.debugfs_ani);
	debugfs_remove(sc->debug.debugfs_ani);
	debugfs_remove(sc->debug.debugfs_queue);
	debugfs_remove(sc->debug.debugfs_phydir);
	debugfs_remove(sc->debug.debugfs_phydir);
}
}


+1 −0
Original line number Original line Diff line number Diff line
@@ -77,6 +77,7 @@ struct ath5k_dbg_info {
	struct dentry		*debugfs_antenna;
	struct dentry		*debugfs_antenna;
	struct dentry		*debugfs_frameerrors;
	struct dentry		*debugfs_frameerrors;
	struct dentry		*debugfs_ani;
	struct dentry		*debugfs_ani;
	struct dentry		*debugfs_queue;
};
};


/**
/**