All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big
@ 2012-04-19  9:20 Anisse Astier
  2012-04-19  9:20 ` [PATCH RFC v2 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
  2012-04-19 11:02 ` [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big Ivo Van Doorn
  0 siblings, 2 replies; 10+ messages in thread
From: Anisse Astier @ 2012-04-19  9:20 UTC (permalink / raw)
  To: linux-wireless, users
  Cc: linville, Ivo van Doorn, Gertjan van Wingerde, Helmut Schaa,
	Anisse Astier

We're already using BBP for values > 128. Make that explicit and allow
debugfs access.

Signed-off-by: Anisse Astier <anisse@astier.eu>
---
Changes since v1: none
---
 drivers/net/wireless/rt2x00/rt2800.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index 1ce2634..d91f4f6 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -99,7 +99,7 @@
 #define EEPROM_BASE			0x0000
 #define EEPROM_SIZE			0x0110
 #define BBP_BASE			0x0000
-#define BBP_SIZE			0x0080
+#define BBP_SIZE			0x00ff
 #define RF_BASE				0x0004
 #define RF_SIZE				0x0010
 
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH RFC v2 2/2] rt2x00: Add debugfs access for rfcsr register
  2012-04-19  9:20 [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big Anisse Astier
@ 2012-04-19  9:20 ` Anisse Astier
  2012-04-19 11:07   ` Ivo Van Doorn
  2012-04-19 11:02 ` [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big Ivo Van Doorn
  1 sibling, 1 reply; 10+ messages in thread
From: Anisse Astier @ 2012-04-19  9:20 UTC (permalink / raw)
  To: linux-wireless, users
  Cc: linville, Ivo van Doorn, Gertjan van Wingerde, Helmut Schaa,
	Anisse Astier

RFCSR is only used in rt2800. For other chipsets, the debug struct
for rfcsr should be zeroed, so it shouldn't be an issue.

Signed-off-by: Anisse Astier <anisse@astier.eu>
---
Changes since v1:
 - removed initialization in chipsets other than rt2800, we now rely on
   default initialization.
 - added comments to make this explicit
 - fix rfcsr size (64)
 - fix pre-review bug thanks to Ivo Van Doorn
---
Please test this patch, I'd *especially* like feedback on chipsets other
than rt2800pci.

Test procedure:

mount -t debugfs none /sys/kernel/debug/
cd /sys/kernel/debug/ieee80211/phy0/rt2800pci/register/
cat ../chipset
cat rfcsr_offset
cat rfcsr_value
#should fail:
echo 2 > rfcsr_offset


---
 drivers/net/wireless/rt2x00/rt2800.h      |    2 ++
 drivers/net/wireless/rt2x00/rt2800lib.c   |    7 +++++++
 drivers/net/wireless/rt2x00/rt2x00debug.c |   16 ++++++++++++++++
 drivers/net/wireless/rt2x00/rt2x00debug.h |    1 +
 4 files changed, 26 insertions(+)

diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index d91f4f6..9348521 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -102,6 +102,8 @@
 #define BBP_SIZE			0x00ff
 #define RF_BASE				0x0004
 #define RF_SIZE				0x0010
+#define RFCSR_BASE			0x0000
+#define RFCSR_SIZE			0x0040
 
 /*
  * Number of TX queues.
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 6c95101..0cdbf2b 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -836,6 +836,13 @@ const struct rt2x00debug rt2800_rt2x00debug = {
 		.word_size	= sizeof(u32),
 		.word_count	= RF_SIZE / sizeof(u32),
 	},
+	.rfcsr	= {
+		.read		= rt2800_rfcsr_read,
+		.write		= rt2800_rfcsr_write,
+		.word_base	= RFCSR_BASE,
+		.word_size	= sizeof(u8),
+		.word_count	= RFCSR_SIZE / sizeof(u8),
+	},
 };
 EXPORT_SYMBOL_GPL(rt2800_rt2x00debug);
 #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c
index 78787fc..128dac7 100644
--- a/drivers/net/wireless/rt2x00/rt2x00debug.c
+++ b/drivers/net/wireless/rt2x00/rt2x00debug.c
@@ -70,6 +70,7 @@ struct rt2x00debug_intf {
 	 *     - eeprom offset/value files
 	 *     - bbp offset/value files
 	 *     - rf offset/value files
+	 *     - rfcsr offset/value files
 	 *   - queue folder
 	 *     - frame dump file
 	 *     - queue stats file
@@ -89,6 +90,8 @@ struct rt2x00debug_intf {
 	struct dentry *bbp_val_entry;
 	struct dentry *rf_off_entry;
 	struct dentry *rf_val_entry;
+	struct dentry *rfcsr_off_entry;
+	struct dentry *rfcsr_val_entry;
 	struct dentry *queue_folder;
 	struct dentry *queue_frame_dump_entry;
 	struct dentry *queue_stats_entry;
@@ -131,6 +134,7 @@ struct rt2x00debug_intf {
 	unsigned int offset_eeprom;
 	unsigned int offset_bbp;
 	unsigned int offset_rf;
+	unsigned int offset_rfcsr;
 };
 
 void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
@@ -448,6 +452,8 @@ static ssize_t rt2x00debug_read_##__name(struct file *file,	\
 	if (*offset)						\
 		return 0;					\
 								\
+	/* This is should always be checked first because       \
+	 * debug->__name could be zeroed (when unspecified) */	\
 	if (index >= debug->__name.word_count)			\
 		return -EINVAL;					\
 								\
@@ -484,6 +490,8 @@ static ssize_t rt2x00debug_write_##__name(struct file *file,	\
 	if (*offset)						\
 		return 0;					\
 								\
+	/* This is should always be checked first because       \
+	 * debug->__name could be zeroed (when unspecified) */	\
 	if (index >= debug->__name.word_count)			\
 		return -EINVAL;					\
 								\
@@ -525,6 +533,7 @@ RT2X00DEBUGFS_OPS(csr, "0x%.8x\n", u32);
 RT2X00DEBUGFS_OPS(eeprom, "0x%.4x\n", u16);
 RT2X00DEBUGFS_OPS(bbp, "0x%.2x\n", u8);
 RT2X00DEBUGFS_OPS(rf, "0x%.8x\n", u32);
+RT2X00DEBUGFS_OPS(rfcsr, "0x%.2x\n", u8);
 
 static ssize_t rt2x00debug_read_dev_flags(struct file *file,
 					  char __user *buf,
@@ -640,6 +649,10 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
 			debug->rf.word_base,
 			debug->rf.word_count,
 			debug->rf.word_size);
+	data += sprintf(data, "rfcsr\t%d\t%d\t%d\n",
+			debug->rfcsr.word_base,
+			debug->rfcsr.word_count,
+			debug->rfcsr.word_size);
 	blob->size = strlen(blob->data);
 
 	return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob);
@@ -719,6 +732,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, eeprom);
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, bbp);
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rf);
+	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rfcsr);
 
 #undef RT2X00DEBUGFS_CREATE_REGISTER_ENTRY
 
@@ -770,6 +784,8 @@ void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev)
 	debugfs_remove(intf->queue_stats_entry);
 	debugfs_remove(intf->queue_frame_dump_entry);
 	debugfs_remove(intf->queue_folder);
+	debugfs_remove(intf->rfcsr_val_entry);
+	debugfs_remove(intf->rfcsr_off_entry);
 	debugfs_remove(intf->rf_val_entry);
 	debugfs_remove(intf->rf_off_entry);
 	debugfs_remove(intf->bbp_val_entry);
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.h b/drivers/net/wireless/rt2x00/rt2x00debug.h
index fa11409..e11d39b 100644
--- a/drivers/net/wireless/rt2x00/rt2x00debug.h
+++ b/drivers/net/wireless/rt2x00/rt2x00debug.h
@@ -65,6 +65,7 @@ struct rt2x00debug {
 	RT2X00DEBUGFS_REGISTER_ENTRY(eeprom, u16);
 	RT2X00DEBUGFS_REGISTER_ENTRY(bbp, u8);
 	RT2X00DEBUGFS_REGISTER_ENTRY(rf, u32);
+	RT2X00DEBUGFS_REGISTER_ENTRY(rfcsr, u8);
 };
 
 #endif /* RT2X00DEBUG_H */
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big
  2012-04-19  9:20 [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big Anisse Astier
  2012-04-19  9:20 ` [PATCH RFC v2 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
@ 2012-04-19 11:02 ` Ivo Van Doorn
  1 sibling, 0 replies; 10+ messages in thread
From: Ivo Van Doorn @ 2012-04-19 11:02 UTC (permalink / raw)
  To: Anisse Astier
  Cc: linux-wireless, users, linville, Gertjan van Wingerde, Helmut Schaa

On Thu, Apr 19, 2012 at 11:20 AM, Anisse Astier <anisse@astier.eu> wrote:
> We're already using BBP for values > 128. Make that explicit and allow
> debugfs access.
>
> Signed-off-by: Anisse Astier <anisse@astier.eu>

Acked-by: Ivo van Doorn <IvDoorn@gmail.com>

> ---
> Changes since v1: none
> ---
>  drivers/net/wireless/rt2x00/rt2800.h |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index 1ce2634..d91f4f6 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -99,7 +99,7 @@
>  #define EEPROM_BASE                    0x0000
>  #define EEPROM_SIZE                    0x0110
>  #define BBP_BASE                       0x0000
> -#define BBP_SIZE                       0x0080
> +#define BBP_SIZE                       0x00ff
>  #define RF_BASE                                0x0004
>  #define RF_SIZE                                0x0010
>
> --
> 1.7.9.4
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC v2 2/2] rt2x00: Add debugfs access for rfcsr register
  2012-04-19  9:20 ` [PATCH RFC v2 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
@ 2012-04-19 11:07   ` Ivo Van Doorn
  2012-04-19 13:53     ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Anisse Astier
  0 siblings, 1 reply; 10+ messages in thread
From: Ivo Van Doorn @ 2012-04-19 11:07 UTC (permalink / raw)
  To: Anisse Astier
  Cc: linux-wireless, users, linville, Gertjan van Wingerde, Helmut Schaa

Hi,

On Thu, Apr 19, 2012 at 11:20 AM, Anisse Astier <anisse@astier.eu> wrote:
> RFCSR is only used in rt2800. For other chipsets, the debug struct
> for rfcsr should be zeroed, so it shouldn't be an issue.
>
> Signed-off-by: Anisse Astier <anisse@astier.eu>
> ---
> Changes since v1:
>  - removed initialization in chipsets other than rt2800, we now rely on
>   default initialization.

Thanks, it looks much cleaner now. :)

> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index d91f4f6..9348521 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -102,6 +102,8 @@
>  #define BBP_SIZE                       0x00ff
>  #define RF_BASE                                0x0004
>  #define RF_SIZE                                0x0010
> +#define RFCSR_BASE                     0x0000
> +#define RFCSR_SIZE                     0x0040
>
>  /*
>  * Number of TX queues.
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 6c95101..0cdbf2b 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -836,6 +836,13 @@ const struct rt2x00debug rt2800_rt2x00debug = {
>                .word_size      = sizeof(u32),
>                .word_count     = RF_SIZE / sizeof(u32),
>        },
> +       .rfcsr  = {
> +               .read           = rt2800_rfcsr_read,
> +               .write          = rt2800_rfcsr_write,
> +               .word_base      = RFCSR_BASE,
> +               .word_size      = sizeof(u8),
> +               .word_count     = RFCSR_SIZE / sizeof(u8),
> +       },
>  };
>  EXPORT_SYMBOL_GPL(rt2800_rt2x00debug);
>  #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
> diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c
> index 78787fc..128dac7 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00debug.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c
> @@ -70,6 +70,7 @@ struct rt2x00debug_intf {
>         *     - eeprom offset/value files
>         *     - bbp offset/value files
>         *     - rf offset/value files
> +        *     - rfcsr offset/value files
>         *   - queue folder
>         *     - frame dump file
>         *     - queue stats file
> @@ -89,6 +90,8 @@ struct rt2x00debug_intf {
>        struct dentry *bbp_val_entry;
>        struct dentry *rf_off_entry;
>        struct dentry *rf_val_entry;
> +       struct dentry *rfcsr_off_entry;
> +       struct dentry *rfcsr_val_entry;
>        struct dentry *queue_folder;
>        struct dentry *queue_frame_dump_entry;
>        struct dentry *queue_stats_entry;
> @@ -131,6 +134,7 @@ struct rt2x00debug_intf {
>        unsigned int offset_eeprom;
>        unsigned int offset_bbp;
>        unsigned int offset_rf;
> +       unsigned int offset_rfcsr;
>  };
>
>  void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
> @@ -448,6 +452,8 @@ static ssize_t rt2x00debug_read_##__name(struct file *file, \
>        if (*offset)                                            \
>                return 0;                                       \
>                                                                \
> +       /* This is should always be checked first because       \
> +        * debug->__name could be zeroed (when unspecified) */  \
>        if (index >= debug->__name.word_count)                  \
>                return -EINVAL;                                 \

Actually it would be nicer to not create these files at all when the
register was not provided.
This means checking during initialization if the files should be created or not.


> @@ -640,6 +649,10 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
>                        debug->rf.word_base,
>                        debug->rf.word_count,
>                        debug->rf.word_size);
> +       data += sprintf(data, "rfcsr\t%d\t%d\t%d\n",
> +                       debug->rfcsr.word_base,
> +                       debug->rfcsr.word_count,
> +                       debug->rfcsr.word_size);

This should only be done if the rfcsr is actually available.
So I think whole block should be changed to check the availability of
each register.
Also you are adding a line here, have you ensures that data contains
sufficient data?
I know by default we are allocating a couple of bytes extra, but we
reserve X bytes per line,
so adding a line should require some extra data to be allocated.

>        blob->size = strlen(blob->data);
>
>        return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob);
> @@ -719,6 +732,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
>        RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, eeprom);
>        RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, bbp);
>        RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rf);
> +       RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rfcsr);

So if we update the RT2X00DEBUGFS_CREATE_REGISTER_ENTRY() define,
we can ensure the debugfs files are only created when the register is present
on the device.

Ivo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty
  2012-04-19 11:07   ` Ivo Van Doorn
@ 2012-04-19 13:53     ` Anisse Astier
  2012-04-19 13:53       ` [PATCH v3 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
  2012-04-20  7:03       ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Ivo Van Doorn
  0 siblings, 2 replies; 10+ messages in thread
From: Anisse Astier @ 2012-04-19 13:53 UTC (permalink / raw)
  To: Ivo van Doorn, linux-wireless, users
  Cc: linville, Gertjan van Wingerde, Helmut Schaa, Anisse Astier

Allow a register to be unspecified, therefore not creating its debugfs
file entry.

Signed-off-by: Anisse Astier <anisse@astier.eu>
---
Changes since v2:
Acked patch not resent (BBP size), and split the second patch in two to
incorporate changes suggested by Ivo Van Doorn (thanks for the review!) :
 - first part (this patch) now is only a small rewrite of the code to
   initialize only the supported register. Any unsupported register wouldn't
   have its files created.
 - first patch best viewed ignoring spaces ((git) diff -w)
 - second part is effectively adding RFCSR support.
 - we allocate more data for sprintf since we add a new register.
 - Updated test procedure (see below)
Changes since v1:
 - removed initialization in chipsets other than rt2800, we now rely on
   default initialization.
 - added comments to make this explicit
 - fix rfcsr size (64)
 - fix pre-review bug thanks to Ivo Van Doorn


How to test ?
I'd like feedback on chipsets other than rt2800pci.

Test procedure:
mount -t debugfs none /sys/kernel/debug/
cd /sys/kernel/debug/ieee80211/phy0/rt2800pci/
cat chipset # shouldn't have any "rfcsr" line if not rt2800
ls register # shouldn't have any rfcsr_* file if not rt2800

---
 drivers/net/wireless/rt2x00/rt2x00debug.c |   73 +++++++++++++++--------------
 1 file changed, 38 insertions(+), 35 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c
index 78787fc..ac898c4 100644
--- a/drivers/net/wireless/rt2x00/rt2x00debug.c
+++ b/drivers/net/wireless/rt2x00/rt2x00debug.c
@@ -624,22 +624,21 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
 	data += sprintf(data, "revision:\t%04x\n", intf->rt2x00dev->chip.rev);
 	data += sprintf(data, "\n");
 	data += sprintf(data, "register\tbase\twords\twordsize\n");
-	data += sprintf(data, "csr\t%d\t%d\t%d\n",
-			debug->csr.word_base,
-			debug->csr.word_count,
-			debug->csr.word_size);
-	data += sprintf(data, "eeprom\t%d\t%d\t%d\n",
-			debug->eeprom.word_base,
-			debug->eeprom.word_count,
-			debug->eeprom.word_size);
-	data += sprintf(data, "bbp\t%d\t%d\t%d\n",
-			debug->bbp.word_base,
-			debug->bbp.word_count,
-			debug->bbp.word_size);
-	data += sprintf(data, "rf\t%d\t%d\t%d\n",
-			debug->rf.word_base,
-			debug->rf.word_count,
-			debug->rf.word_size);
+#define RT2X00DEBUGFS_SPRINTF_REGISTER(__name)			\
+{								\
+	if(debug->__name.read)					\
+		data += sprintf(data, __stringify(__name)	\
+				"\t%d\t%d\t%d\n",		\
+				debug->__name.word_base,	\
+				debug->__name.word_count,	\
+				debug->__name.word_size);	\
+}
+	RT2X00DEBUGFS_SPRINTF_REGISTER(csr);
+	RT2X00DEBUGFS_SPRINTF_REGISTER(eeprom);
+	RT2X00DEBUGFS_SPRINTF_REGISTER(bbp);
+	RT2X00DEBUGFS_SPRINTF_REGISTER(rf);
+#undef RT2X00DEBUGFS_SPRINTF_REGISTER
+
 	blob->size = strlen(blob->data);
 
 	return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob);
@@ -694,25 +693,29 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
 	if (IS_ERR(intf->register_folder) || !intf->register_folder)
 		goto exit;
 
-#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name)	\
-({								\
-	(__intf)->__name##_off_entry =				\
-	    debugfs_create_u32(__stringify(__name) "_offset",	\
-			       S_IRUSR | S_IWUSR,		\
-			       (__intf)->register_folder,	\
-			       &(__intf)->offset_##__name);	\
-	if (IS_ERR((__intf)->__name##_off_entry)		\
-			|| !(__intf)->__name##_off_entry)	\
-		goto exit;					\
-								\
-	(__intf)->__name##_val_entry =				\
-	    debugfs_create_file(__stringify(__name) "_value",	\
-				S_IRUSR | S_IWUSR,		\
-				(__intf)->register_folder,	\
-				(__intf), &rt2x00debug_fop_##__name);\
-	if (IS_ERR((__intf)->__name##_val_entry)		\
-			|| !(__intf)->__name##_val_entry)	\
-		goto exit;					\
+#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name)			\
+({										\
+	if(debug->__name.read) {						\
+		(__intf)->__name##_off_entry =					\
+		debugfs_create_u32(__stringify(__name) "_offset",		\
+				       S_IRUSR | S_IWUSR,			\
+				       (__intf)->register_folder,		\
+				       &(__intf)->offset_##__name);		\
+		if (IS_ERR((__intf)->__name##_off_entry)			\
+				|| !(__intf)->__name##_off_entry)		\
+			goto exit;						\
+										\
+		(__intf)->__name##_val_entry =					\
+		debugfs_create_file(__stringify(__name) "_value",		\
+					S_IRUSR | S_IWUSR,			\
+					(__intf)->register_folder,		\
+					(__intf), &rt2x00debug_fop_##__name);	\
+		if (IS_ERR((__intf)->__name##_val_entry)			\
+				|| !(__intf)->__name##_val_entry)		\
+			goto exit;						\
+	} else									\
+		DEBUG(rt2x00dev, "Unsupported register on this device: "	\
+			__stringify(__name) "\n");				\
 })
 
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, csr);
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/2] rt2x00: Add debugfs access for rfcsr register
  2012-04-19 13:53     ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Anisse Astier
@ 2012-04-19 13:53       ` Anisse Astier
  2012-04-20  7:03         ` Ivo Van Doorn
  2012-04-20  7:03       ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Ivo Van Doorn
  1 sibling, 1 reply; 10+ messages in thread
From: Anisse Astier @ 2012-04-19 13:53 UTC (permalink / raw)
  To: Ivo van Doorn, linux-wireless, users
  Cc: linville, Gertjan van Wingerde, Helmut Schaa, Anisse Astier

RFCSR is only used in rt2800. For other chipsets, the debug struct
for rfcsr should be zeroed, which isn't be an issue, since the code
can now cope with that.

Signed-off-by: Anisse Astier <anisse@astier.eu>
---
 drivers/net/wireless/rt2x00/rt2800.h      |    2 ++
 drivers/net/wireless/rt2x00/rt2800lib.c   |    7 +++++++
 drivers/net/wireless/rt2x00/rt2x00debug.c |   11 ++++++++++-
 drivers/net/wireless/rt2x00/rt2x00debug.h |    1 +
 4 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index d91f4f6..9348521 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -102,6 +102,8 @@
 #define BBP_SIZE			0x00ff
 #define RF_BASE				0x0004
 #define RF_SIZE				0x0010
+#define RFCSR_BASE			0x0000
+#define RFCSR_SIZE			0x0040
 
 /*
  * Number of TX queues.
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 6c95101..0cdbf2b 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -836,6 +836,13 @@ const struct rt2x00debug rt2800_rt2x00debug = {
 		.word_size	= sizeof(u32),
 		.word_count	= RF_SIZE / sizeof(u32),
 	},
+	.rfcsr	= {
+		.read		= rt2800_rfcsr_read,
+		.write		= rt2800_rfcsr_write,
+		.word_base	= RFCSR_BASE,
+		.word_size	= sizeof(u8),
+		.word_count	= RFCSR_SIZE / sizeof(u8),
+	},
 };
 EXPORT_SYMBOL_GPL(rt2800_rt2x00debug);
 #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c
index ac898c4..74f6ed5 100644
--- a/drivers/net/wireless/rt2x00/rt2x00debug.c
+++ b/drivers/net/wireless/rt2x00/rt2x00debug.c
@@ -70,6 +70,7 @@ struct rt2x00debug_intf {
 	 *     - eeprom offset/value files
 	 *     - bbp offset/value files
 	 *     - rf offset/value files
+	 *     - rfcsr offset/value files
 	 *   - queue folder
 	 *     - frame dump file
 	 *     - queue stats file
@@ -89,6 +90,8 @@ struct rt2x00debug_intf {
 	struct dentry *bbp_val_entry;
 	struct dentry *rf_off_entry;
 	struct dentry *rf_val_entry;
+	struct dentry *rfcsr_off_entry;
+	struct dentry *rfcsr_val_entry;
 	struct dentry *queue_folder;
 	struct dentry *queue_frame_dump_entry;
 	struct dentry *queue_stats_entry;
@@ -131,6 +134,7 @@ struct rt2x00debug_intf {
 	unsigned int offset_eeprom;
 	unsigned int offset_bbp;
 	unsigned int offset_rf;
+	unsigned int offset_rfcsr;
 };
 
 void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
@@ -525,6 +529,7 @@ RT2X00DEBUGFS_OPS(csr, "0x%.8x\n", u32);
 RT2X00DEBUGFS_OPS(eeprom, "0x%.4x\n", u16);
 RT2X00DEBUGFS_OPS(bbp, "0x%.2x\n", u8);
 RT2X00DEBUGFS_OPS(rf, "0x%.8x\n", u32);
+RT2X00DEBUGFS_OPS(rfcsr, "0x%.2x\n", u8);
 
 static ssize_t rt2x00debug_read_dev_flags(struct file *file,
 					  char __user *buf,
@@ -614,7 +619,7 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
 	const struct rt2x00debug *debug = intf->debug;
 	char *data;
 
-	data = kzalloc(8 * MAX_LINE_LENGTH, GFP_KERNEL);
+	data = kzalloc(9 * MAX_LINE_LENGTH, GFP_KERNEL);
 	if (!data)
 		return NULL;
 
@@ -637,6 +642,7 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
 	RT2X00DEBUGFS_SPRINTF_REGISTER(eeprom);
 	RT2X00DEBUGFS_SPRINTF_REGISTER(bbp);
 	RT2X00DEBUGFS_SPRINTF_REGISTER(rf);
+	RT2X00DEBUGFS_SPRINTF_REGISTER(rfcsr);
 #undef RT2X00DEBUGFS_SPRINTF_REGISTER
 
 	blob->size = strlen(blob->data);
@@ -722,6 +728,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, eeprom);
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, bbp);
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rf);
+	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rfcsr);
 
 #undef RT2X00DEBUGFS_CREATE_REGISTER_ENTRY
 
@@ -773,6 +780,8 @@ void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev)
 	debugfs_remove(intf->queue_stats_entry);
 	debugfs_remove(intf->queue_frame_dump_entry);
 	debugfs_remove(intf->queue_folder);
+	debugfs_remove(intf->rfcsr_val_entry);
+	debugfs_remove(intf->rfcsr_off_entry);
 	debugfs_remove(intf->rf_val_entry);
 	debugfs_remove(intf->rf_off_entry);
 	debugfs_remove(intf->bbp_val_entry);
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.h b/drivers/net/wireless/rt2x00/rt2x00debug.h
index fa11409..e11d39b 100644
--- a/drivers/net/wireless/rt2x00/rt2x00debug.h
+++ b/drivers/net/wireless/rt2x00/rt2x00debug.h
@@ -65,6 +65,7 @@ struct rt2x00debug {
 	RT2X00DEBUGFS_REGISTER_ENTRY(eeprom, u16);
 	RT2X00DEBUGFS_REGISTER_ENTRY(bbp, u8);
 	RT2X00DEBUGFS_REGISTER_ENTRY(rf, u32);
+	RT2X00DEBUGFS_REGISTER_ENTRY(rfcsr, u8);
 };
 
 #endif /* RT2X00DEBUG_H */
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty
  2012-04-19 13:53     ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Anisse Astier
  2012-04-19 13:53       ` [PATCH v3 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
@ 2012-04-20  7:03       ` Ivo Van Doorn
  2012-04-20 15:48         ` Anisse Astier
  1 sibling, 1 reply; 10+ messages in thread
From: Ivo Van Doorn @ 2012-04-20  7:03 UTC (permalink / raw)
  To: Anisse Astier
  Cc: linux-wireless, users, linville, Gertjan van Wingerde, Helmut Schaa

SGksCgpJJ20gYWxtb3N0IGNvbXBsZXRlbHkgaGFwcHkgd2l0aCB0aGlzIHBhdGNoLiA6KQoKPiBA
QCAtNjk0LDI1ICs2OTMsMjkgQEAgdm9pZCBydDJ4MDBkZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgcnQy
eDAwX2RldiAqcnQyeDAwZGV2KQo+IKAgoCCgIKBpZiAoSVNfRVJSKGludGYtPnJlZ2lzdGVyX2Zv
bGRlcikgfHwgIWludGYtPnJlZ2lzdGVyX2ZvbGRlcikKPiCgIKAgoCCgIKAgoCCgIKBnb3RvIGV4
aXQ7Cj4KPiAtI2RlZmluZSBSVDJYMDBERUJVR0ZTX0NSRUFURV9SRUdJU1RFUl9FTlRSWShfX2lu
dGYsIF9fbmFtZSkgoCCgXAo+IC0oeyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBcCj4gLSCgIKAgoCAoX19pbnRmKS0+X19uYW1lIyNf
b2ZmX2VudHJ5ID0goCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoFwKPiAtIKAgoCCgIKAgoCBkZWJ1
Z2ZzX2NyZWF0ZV91MzIoX19zdHJpbmdpZnkoX19uYW1lKSAiX29mZnNldCIsIKAgXAo+IC0goCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKBTX0lSVVNSIHwgU19JV1VTUiwgoCCgIKAgoCCgIKAg
oCBcCj4gLSCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoChfX2ludGYpLT5yZWdpc3Rlcl9m
b2xkZXIsIKAgoCCgIFwKPiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgJihfX2ludGYp
LT5vZmZzZXRfIyNfX25hbWUpOyCgIKAgXAo+IC0goCCgIKAgaWYgKElTX0VSUigoX19pbnRmKS0+
X19uYW1lIyNfb2ZmX2VudHJ5KSCgIKAgoCCgIKAgoCCgIKBcCj4gLSCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgfHwgIShfX2ludGYpLT5fX25hbWUjI19vZmZfZW50cnkpIKAgoCCgIFwKPiAtIKAgoCCg
IKAgoCCgIKAgZ290byBleGl0OyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
XAo+IC0goCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCBcCj4gLSCgIKAgoCAoX19pbnRmKS0+X19uYW1lIyNfdmFsX2VudHJ5ID0goCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoFwKPiAtIKAgoCCgIKAgoCBkZWJ1Z2ZzX2NyZWF0ZV9maWxl
KF9fc3RyaW5naWZ5KF9fbmFtZSkgIl92YWx1ZSIsIKAgXAo+IC0goCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoCCgIKAgU19JUlVTUiB8IFNfSVdVU1IsIKAgoCCgIKAgoCCgIKBcCj4gLSCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCAoX19pbnRmKS0+cmVnaXN0ZXJfZm9sZGVyLCCgIKAgoFwK
PiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIChfX2ludGYpLCAmcnQyeDAwZGVidWdf
Zm9wXyMjX19uYW1lKTtcCj4gLSCgIKAgoCBpZiAoSVNfRVJSKChfX2ludGYpLT5fX25hbWUjI192
YWxfZW50cnkpIKAgoCCgIKAgoCCgIKAgoFwKPiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCB8fCAh
KF9faW50ZiktPl9fbmFtZSMjX3ZhbF9lbnRyeSkgoCCgIKAgXAo+IC0goCCgIKAgoCCgIKAgoCBn
b3RvIGV4aXQ7IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKBcCj4gKyNkZWZp
bmUgUlQyWDAwREVCVUdGU19DUkVBVEVfUkVHSVNURVJfRU5UUlkoX19pbnRmLCBfX25hbWUpIKAg
oCCgIKAgoCCgIKAgoCCgIKBcCj4gKyh7IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBcCj4gKyCgIKAgoCBp
ZihkZWJ1Zy0+X19uYW1lLnJlYWQpIHsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKBcCj4gKyCgIKAgoCCgIKAgoCCgIChfX2ludGYpLT5fX25hbWUjI19vZmZf
ZW50cnkgPSCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKBcCj4gKyCgIKAgoCCgIKAg
oCCgIGRlYnVnZnNfY3JlYXRlX3UzMihfX3N0cmluZ2lmeShfX25hbWUpICJfb2Zmc2V0IiwgoCCg
IKAgoCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgU19J
UlVTUiB8IFNfSVdVU1IsIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgKF9faW50ZiktPnJlZ2lzdGVyX2ZvbGRlciwgoCCgIKAg
oCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgJihfX2lu
dGYpLT5vZmZzZXRfIyNfX25hbWUpOyCgIKAgoCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCgIGlm
IChJU19FUlIoKF9faW50ZiktPl9fbmFtZSMjX29mZl9lbnRyeSkgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCB8fCAhKF9faW50ZiktPl9f
bmFtZSMjX29mZl9lbnRyeSkgoCCgIKAgoCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgZ290byBleGl0OyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCgIChfX2ludGYp
LT5fX25hbWUjI192YWxfZW50cnkgPSCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKBc
Cj4gKyCgIKAgoCCgIKAgoCCgIGRlYnVnZnNfY3JlYXRlX2ZpbGUoX19zdHJpbmdpZnkoX19uYW1l
KSAiX3ZhbHVlIiwgoCCgIKAgoCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIFNfSVJVU1IgfCBTX0lXVVNSLCCgIKAgoCCgIKAgoCCgIKAgoCCgIKBcCj4g
KyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIChfX2ludGYpLT5yZWdpc3Rl
cl9mb2xkZXIsIKAgoCCgIKAgoCCgIKBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoCCgIChfX2ludGYpLCAmcnQyeDAwZGVidWdfZm9wXyMjX19uYW1lKTsgoCBcCj4gKyCg
IKAgoCCgIKAgoCCgIGlmIChJU19FUlIoKF9faW50ZiktPl9fbmFtZSMjX3ZhbF9lbnRyeSkgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCB8
fCAhKF9faW50ZiktPl9fbmFtZSMjX3ZhbF9lbnRyeSkgoCCgIKAgoCCgIKAgoCBcCj4gKyCgIKAg
oCCgIKAgoCCgIKAgoCCgIKAgZ290byBleGl0OyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoCCgIKAgoCCgIKBcCj4gKyCgIKAgoCB9IGVsc2UgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKBcCj4gKyCgIKAgoCCg
IKAgoCCgIERFQlVHKHJ0MngwMGRldiwgIlVuc3VwcG9ydGVkIHJlZ2lzdGVyIG9uIHRoaXMgZGV2
aWNlOiAiIKAgoCCgIKBcCj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgX19zdHJpbmdpZnkoX19u
YW1lKSAiXG4iKTsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKBcCj4goH0pCgpJIGRvbid0
IHRoaW5rIHdlIG5lZWQgdG8gcHJpbnQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIGxvZywgdGhpcyB3
aWxsCm9ubHkgY29uZnVzZSB1c2Vycy4KVGhlIGRyaXZlciBpbnRlbnRpb25hbGx5IGRpZG4ndCBy
ZWdpc3RlciB0aGUgcmVnaXN0ZXIgdHlwZSwgc28gaXQgaXMKbm90IHdvcnRoIHRoZSB3YXJuaW5n
IHRvIHRoZSB1c2VyLgoKSXZvCg==

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 2/2] rt2x00: Add debugfs access for rfcsr register
  2012-04-19 13:53       ` [PATCH v3 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
@ 2012-04-20  7:03         ` Ivo Van Doorn
  0 siblings, 0 replies; 10+ messages in thread
From: Ivo Van Doorn @ 2012-04-20  7:03 UTC (permalink / raw)
  To: Anisse Astier
  Cc: linux-wireless, users, linville, Gertjan van Wingerde, Helmut Schaa

On Thu, Apr 19, 2012 at 3:53 PM, Anisse Astier <anisse@astier.eu> wrote:
> RFCSR is only used in rt2800. For other chipsets, the debug struct
> for rfcsr should be zeroed, which isn't be an issue, since the code
> can now cope with that.
>
> Signed-off-by: Anisse Astier <anisse@astier.eu>

Acked-by: Ivo van Doorn <IvDoorn@gmail.com>

> ---
>  drivers/net/wireless/rt2x00/rt2800.h      |    2 ++
>  drivers/net/wireless/rt2x00/rt2800lib.c   |    7 +++++++
>  drivers/net/wireless/rt2x00/rt2x00debug.c |   11 ++++++++++-
>  drivers/net/wireless/rt2x00/rt2x00debug.h |    1 +
>  4 files changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index d91f4f6..9348521 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -102,6 +102,8 @@
>  #define BBP_SIZE                       0x00ff
>  #define RF_BASE                                0x0004
>  #define RF_SIZE                                0x0010
> +#define RFCSR_BASE                     0x0000
> +#define RFCSR_SIZE                     0x0040
>
>  /*
>  * Number of TX queues.
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 6c95101..0cdbf2b 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -836,6 +836,13 @@ const struct rt2x00debug rt2800_rt2x00debug = {
>                .word_size      = sizeof(u32),
>                .word_count     = RF_SIZE / sizeof(u32),
>        },
> +       .rfcsr  = {
> +               .read           = rt2800_rfcsr_read,
> +               .write          = rt2800_rfcsr_write,
> +               .word_base      = RFCSR_BASE,
> +               .word_size      = sizeof(u8),
> +               .word_count     = RFCSR_SIZE / sizeof(u8),
> +       },
>  };
>  EXPORT_SYMBOL_GPL(rt2800_rt2x00debug);
>  #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
> diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c
> index ac898c4..74f6ed5 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00debug.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c
> @@ -70,6 +70,7 @@ struct rt2x00debug_intf {
>         *     - eeprom offset/value files
>         *     - bbp offset/value files
>         *     - rf offset/value files
> +        *     - rfcsr offset/value files
>         *   - queue folder
>         *     - frame dump file
>         *     - queue stats file
> @@ -89,6 +90,8 @@ struct rt2x00debug_intf {
>        struct dentry *bbp_val_entry;
>        struct dentry *rf_off_entry;
>        struct dentry *rf_val_entry;
> +       struct dentry *rfcsr_off_entry;
> +       struct dentry *rfcsr_val_entry;
>        struct dentry *queue_folder;
>        struct dentry *queue_frame_dump_entry;
>        struct dentry *queue_stats_entry;
> @@ -131,6 +134,7 @@ struct rt2x00debug_intf {
>        unsigned int offset_eeprom;
>        unsigned int offset_bbp;
>        unsigned int offset_rf;
> +       unsigned int offset_rfcsr;
>  };
>
>  void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
> @@ -525,6 +529,7 @@ RT2X00DEBUGFS_OPS(csr, "0x%.8x\n", u32);
>  RT2X00DEBUGFS_OPS(eeprom, "0x%.4x\n", u16);
>  RT2X00DEBUGFS_OPS(bbp, "0x%.2x\n", u8);
>  RT2X00DEBUGFS_OPS(rf, "0x%.8x\n", u32);
> +RT2X00DEBUGFS_OPS(rfcsr, "0x%.2x\n", u8);
>
>  static ssize_t rt2x00debug_read_dev_flags(struct file *file,
>                                          char __user *buf,
> @@ -614,7 +619,7 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
>        const struct rt2x00debug *debug = intf->debug;
>        char *data;
>
> -       data = kzalloc(8 * MAX_LINE_LENGTH, GFP_KERNEL);
> +       data = kzalloc(9 * MAX_LINE_LENGTH, GFP_KERNEL);
>        if (!data)
>                return NULL;
>
> @@ -637,6 +642,7 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
>        RT2X00DEBUGFS_SPRINTF_REGISTER(eeprom);
>        RT2X00DEBUGFS_SPRINTF_REGISTER(bbp);
>        RT2X00DEBUGFS_SPRINTF_REGISTER(rf);
> +       RT2X00DEBUGFS_SPRINTF_REGISTER(rfcsr);
>  #undef RT2X00DEBUGFS_SPRINTF_REGISTER
>
>        blob->size = strlen(blob->data);
> @@ -722,6 +728,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
>        RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, eeprom);
>        RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, bbp);
>        RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rf);
> +       RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, rfcsr);
>
>  #undef RT2X00DEBUGFS_CREATE_REGISTER_ENTRY
>
> @@ -773,6 +780,8 @@ void rt2x00debug_deregister(struct rt2x00_dev *rt2x00dev)
>        debugfs_remove(intf->queue_stats_entry);
>        debugfs_remove(intf->queue_frame_dump_entry);
>        debugfs_remove(intf->queue_folder);
> +       debugfs_remove(intf->rfcsr_val_entry);
> +       debugfs_remove(intf->rfcsr_off_entry);
>        debugfs_remove(intf->rf_val_entry);
>        debugfs_remove(intf->rf_off_entry);
>        debugfs_remove(intf->bbp_val_entry);
> diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.h b/drivers/net/wireless/rt2x00/rt2x00debug.h
> index fa11409..e11d39b 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00debug.h
> +++ b/drivers/net/wireless/rt2x00/rt2x00debug.h
> @@ -65,6 +65,7 @@ struct rt2x00debug {
>        RT2X00DEBUGFS_REGISTER_ENTRY(eeprom, u16);
>        RT2X00DEBUGFS_REGISTER_ENTRY(bbp, u8);
>        RT2X00DEBUGFS_REGISTER_ENTRY(rf, u32);
> +       RT2X00DEBUGFS_REGISTER_ENTRY(rfcsr, u8);
>  };
>
>  #endif /* RT2X00DEBUG_H */
> --
> 1.7.9.4
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty
  2012-04-20  7:03       ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Ivo Van Doorn
@ 2012-04-20 15:48         ` Anisse Astier
  2012-04-21 12:54           ` Ivo Van Doorn
  0 siblings, 1 reply; 10+ messages in thread
From: Anisse Astier @ 2012-04-20 15:48 UTC (permalink / raw)
  To: Ivo Van Doorn
  Cc: linux-wireless, users, linville, Gertjan van Wingerde, Helmut Schaa

On Fri, 20 Apr 2012 09:03:00 +0200, Ivo Van Doorn <ivdoorn@gmail.com> wrote :

> Hi,
> 
> I'm almost completely happy with this patch. :)
> 
> > @@ -694,25 +693,29 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
> >        if (IS_ERR(intf->register_folder) || !intf->register_folder)
> >                goto exit;
> >
> > -#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name)    \
> > -({                                                             \
> > -       (__intf)->__name##_off_entry =                          \
> > -           debugfs_create_u32(__stringify(__name) "_offset",   \
> > -                              S_IRUSR | S_IWUSR,               \
> > -                              (__intf)->register_folder,       \
> > -                              &(__intf)->offset_##__name);     \
> > -       if (IS_ERR((__intf)->__name##_off_entry)                \
> > -                       || !(__intf)->__name##_off_entry)       \
> > -               goto exit;                                      \
> > -                                                               \
> > -       (__intf)->__name##_val_entry =                          \
> > -           debugfs_create_file(__stringify(__name) "_value",   \
> > -                               S_IRUSR | S_IWUSR,              \
> > -                               (__intf)->register_folder,      \
> > -                               (__intf), &rt2x00debug_fop_##__name);\
> > -       if (IS_ERR((__intf)->__name##_val_entry)                \
> > -                       || !(__intf)->__name##_val_entry)       \
> > -               goto exit;                                      \
> > +#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name)                    \
> > +({                                                                             \
> > +       if(debug->__name.read) {                                                \
> > +               (__intf)->__name##_off_entry =                                  \
> > +               debugfs_create_u32(__stringify(__name) "_offset",               \
> > +                                      S_IRUSR | S_IWUSR,                       \
> > +                                      (__intf)->register_folder,               \
> > +                                      &(__intf)->offset_##__name);             \
> > +               if (IS_ERR((__intf)->__name##_off_entry)                        \
> > +                               || !(__intf)->__name##_off_entry)               \
> > +                       goto exit;                                              \
> > +                                                                               \
> > +               (__intf)->__name##_val_entry =                                  \
> > +               debugfs_create_file(__stringify(__name) "_value",               \
> > +                                       S_IRUSR | S_IWUSR,                      \
> > +                                       (__intf)->register_folder,              \
> > +                                       (__intf), &rt2x00debug_fop_##__name);   \
> > +               if (IS_ERR((__intf)->__name##_val_entry)                        \
> > +                               || !(__intf)->__name##_val_entry)               \
> > +                       goto exit;                                              \
> > +       } else                                                                  \
> > +               DEBUG(rt2x00dev, "Unsupported register on this device: "        \
> > +                       __stringify(__name) "\n");                              \
> >  })
> 
> I don't think we need to print error messages to the log, this will
> only confuse users.
> The driver intentionally didn't register the register type, so it is
> not worth the warning to the user.
> 
> Ivo

Sure :-)

From: Anisse Astier <anisse@astier.eu>
Date: Thu, 19 Apr 2012 15:04:52 +0200
Subject: [PATCH v4 1/2] rt2x00: debugfs support - allow a register to be empty

Allow a register to be unspecified, therefore not creating its debugfs
file entry.

Signed-off-by: Anisse Astier <anisse@astier.eu>
---
Changes since v3:
 - Don't print a debug message when register type isn't registered
---
 drivers/net/wireless/rt2x00/rt2x00debug.c |   71 +++++++++++++++--------------
 1 file changed, 36 insertions(+), 35 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c
index 78787fc..5bb1221 100644
--- a/drivers/net/wireless/rt2x00/rt2x00debug.c
+++ b/drivers/net/wireless/rt2x00/rt2x00debug.c
@@ -624,22 +624,21 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,
 	data += sprintf(data, "revision:\t%04x\n", intf->rt2x00dev->chip.rev);
 	data += sprintf(data, "\n");
 	data += sprintf(data, "register\tbase\twords\twordsize\n");
-	data += sprintf(data, "csr\t%d\t%d\t%d\n",
-			debug->csr.word_base,
-			debug->csr.word_count,
-			debug->csr.word_size);
-	data += sprintf(data, "eeprom\t%d\t%d\t%d\n",
-			debug->eeprom.word_base,
-			debug->eeprom.word_count,
-			debug->eeprom.word_size);
-	data += sprintf(data, "bbp\t%d\t%d\t%d\n",
-			debug->bbp.word_base,
-			debug->bbp.word_count,
-			debug->bbp.word_size);
-	data += sprintf(data, "rf\t%d\t%d\t%d\n",
-			debug->rf.word_base,
-			debug->rf.word_count,
-			debug->rf.word_size);
+#define RT2X00DEBUGFS_SPRINTF_REGISTER(__name)			\
+{								\
+	if(debug->__name.read)					\
+		data += sprintf(data, __stringify(__name)	\
+				"\t%d\t%d\t%d\n",		\
+				debug->__name.word_base,	\
+				debug->__name.word_count,	\
+				debug->__name.word_size);	\
+}
+	RT2X00DEBUGFS_SPRINTF_REGISTER(csr);
+	RT2X00DEBUGFS_SPRINTF_REGISTER(eeprom);
+	RT2X00DEBUGFS_SPRINTF_REGISTER(bbp);
+	RT2X00DEBUGFS_SPRINTF_REGISTER(rf);
+#undef RT2X00DEBUGFS_SPRINTF_REGISTER
+
 	blob->size = strlen(blob->data);
 
 	return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob);
@@ -694,25 +693,27 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
 	if (IS_ERR(intf->register_folder) || !intf->register_folder)
 		goto exit;
 
-#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name)	\
-({								\
-	(__intf)->__name##_off_entry =				\
-	    debugfs_create_u32(__stringify(__name) "_offset",	\
-			       S_IRUSR | S_IWUSR,		\
-			       (__intf)->register_folder,	\
-			       &(__intf)->offset_##__name);	\
-	if (IS_ERR((__intf)->__name##_off_entry)		\
-			|| !(__intf)->__name##_off_entry)	\
-		goto exit;					\
-								\
-	(__intf)->__name##_val_entry =				\
-	    debugfs_create_file(__stringify(__name) "_value",	\
-				S_IRUSR | S_IWUSR,		\
-				(__intf)->register_folder,	\
-				(__intf), &rt2x00debug_fop_##__name);\
-	if (IS_ERR((__intf)->__name##_val_entry)		\
-			|| !(__intf)->__name##_val_entry)	\
-		goto exit;					\
+#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name)			\
+({										\
+	if(debug->__name.read) {						\
+		(__intf)->__name##_off_entry =					\
+		debugfs_create_u32(__stringify(__name) "_offset",		\
+				       S_IRUSR | S_IWUSR,			\
+				       (__intf)->register_folder,		\
+				       &(__intf)->offset_##__name);		\
+		if (IS_ERR((__intf)->__name##_off_entry)			\
+				|| !(__intf)->__name##_off_entry)		\
+			goto exit;						\
+										\
+		(__intf)->__name##_val_entry =					\
+		debugfs_create_file(__stringify(__name) "_value",		\
+					S_IRUSR | S_IWUSR,			\
+					(__intf)->register_folder,		\
+					(__intf), &rt2x00debug_fop_##__name);	\
+		if (IS_ERR((__intf)->__name##_val_entry)			\
+				|| !(__intf)->__name##_val_entry)		\
+			goto exit;						\
+	}									\
 })
 
 	RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, csr);
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty
  2012-04-20 15:48         ` Anisse Astier
@ 2012-04-21 12:54           ` Ivo Van Doorn
  0 siblings, 0 replies; 10+ messages in thread
From: Ivo Van Doorn @ 2012-04-21 12:54 UTC (permalink / raw)
  To: Anisse Astier
  Cc: linux-wireless, users, linville, Gertjan van Wingerde, Helmut Schaa

SGksCgo+IEZyb206IEFuaXNzZSBBc3RpZXIgPGFuaXNzZUBhc3RpZXIuZXU+Cj4gRGF0ZTogVGh1
LCAxOSBBcHIgMjAxMiAxNTowNDo1MiArMDIwMAo+IFN1YmplY3Q6IFtQQVRDSCB2NCAxLzJdIHJ0
MngwMDogZGVidWdmcyBzdXBwb3J0IC0gYWxsb3cgYSByZWdpc3RlciB0byBiZSBlbXB0eQo+Cj4g
QWxsb3cgYSByZWdpc3RlciB0byBiZSB1bnNwZWNpZmllZCwgdGhlcmVmb3JlIG5vdCBjcmVhdGlu
ZyBpdHMgZGVidWdmcwo+IGZpbGUgZW50cnkuCj4KPiBTaWduZWQtb2ZmLWJ5OiBBbmlzc2UgQXN0
aWVyIDxhbmlzc2VAYXN0aWVyLmV1Pgo+IC0tLQo+IENoYW5nZXMgc2luY2UgdjM6Cj4goC0gRG9u
J3QgcHJpbnQgYSBkZWJ1ZyBtZXNzYWdlIHdoZW4gcmVnaXN0ZXIgdHlwZSBpc24ndCByZWdpc3Rl
cmVkCj4gLS0tCj4goGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIHwg
oCA3MSArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQo+IKAxIGZpbGUgY2hhbmdlZCwgMzYg
aW5zZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u
ZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9y
dDJ4MDAvcnQyeDAwZGVidWcuYwo+IGluZGV4IDc4Nzg3ZmMuLjViYjEyMjEgMTAwNjQ0Cj4gLS0t
IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKPiArKysgYi9kcml2
ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwo+IEBAIC02MjQsMjIgKzYyNCwy
MSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcnQyeDAwZGVidWdfY3JlYXRlX2ZpbGVfY2hpcHNl
dChjb25zdCBjaGFyICpuYW1lLAo+IKAgoCCgIKBkYXRhICs9IHNwcmludGYoZGF0YSwgInJldmlz
aW9uOlx0JTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJldik7Cj4goCCgIKAgoGRhdGEg
Kz0gc3ByaW50ZihkYXRhLCAiXG4iKTsKPiCgIKAgoCCgZGF0YSArPSBzcHJpbnRmKGRhdGEsICJy
ZWdpc3Rlclx0YmFzZVx0d29yZHNcdHdvcmRzaXplXG4iKTsKPiAtIKAgoCCgIGRhdGEgKz0gc3By
aW50ZihkYXRhLCAiY3NyXHQlZFx0JWRcdCVkXG4iLAo+IC0goCCgIKAgoCCgIKAgoCCgIKAgoCCg
IGRlYnVnLT5jc3Iud29yZF9iYXNlLAo+IC0goCCgIKAgoCCgIKAgoCCgIKAgoCCgIGRlYnVnLT5j
c3Iud29yZF9jb3VudCwKPiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBkZWJ1Zy0+Y3NyLndvcmRf
c2l6ZSk7Cj4gLSCgIKAgoCBkYXRhICs9IHNwcmludGYoZGF0YSwgImVlcHJvbVx0JWRcdCVkXHQl
ZFxuIiwKPiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBkZWJ1Zy0+ZWVwcm9tLndvcmRfYmFzZSwK
PiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBkZWJ1Zy0+ZWVwcm9tLndvcmRfY291bnQsCj4gLSCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgZGVidWctPmVlcHJvbS53b3JkX3NpemUpOwo+IC0goCCgIKAg
ZGF0YSArPSBzcHJpbnRmKGRhdGEsICJiYnBcdCVkXHQlZFx0JWRcbiIsCj4gLSCgIKAgoCCgIKAg
oCCgIKAgoCCgIKAgZGVidWctPmJicC53b3JkX2Jhc2UsCj4gLSCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgZGVidWctPmJicC53b3JkX2NvdW50LAo+IC0goCCgIKAgoCCgIKAgoCCgIKAgoCCgIGRlYnVn
LT5iYnAud29yZF9zaXplKTsKPiAtIKAgoCCgIGRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmZcdCVk
XHQlZFx0JWRcbiIsCj4gLSCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgZGVidWctPnJmLndvcmRfYmFz
ZSwKPiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBkZWJ1Zy0+cmYud29yZF9jb3VudCwKPiAtIKAg
oCCgIKAgoCCgIKAgoCCgIKAgoCBkZWJ1Zy0+cmYud29yZF9zaXplKTsKPiArI2RlZmluZSBSVDJY
MDBERUJVR0ZTX1NQUklOVEZfUkVHSVNURVIoX19uYW1lKSCgIKAgoCCgIKAgoCCgIKAgXAo+ICt7
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKBcCj4gKyCgIKAgoCBpZihkZWJ1Zy0+X19uYW1lLnJlYWQpIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoFwKPiArIKAgoCCgIKAgoCCgIKAgZGF0YSArPSBzcHJpbnRmKGRhdGEs
IF9fc3RyaW5naWZ5KF9fbmFtZSkgoCCgIKAgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgIlx0JWRcdCVkXHQlZFxuIiwgoCCgIKAgoCCgIKAgoCBcCj4gKyCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCBkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZSwgoCCgIKAgoFwKPiArIKAg
oCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIGRlYnVnLT5fX25hbWUud29yZF9jb3VudCwgoCCg
IKAgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgZGVidWctPl9fbmFtZS53b3Jk
X3NpemUpOyCgIKAgoCBcCj4gK30KPiArIKAgoCCgIFJUMlgwMERFQlVHRlNfU1BSSU5URl9SRUdJ
U1RFUihjc3IpOwo+ICsgoCCgIKAgUlQyWDAwREVCVUdGU19TUFJJTlRGX1JFR0lTVEVSKGVlcHJv
bSk7Cj4gKyCgIKAgoCBSVDJYMDBERUJVR0ZTX1NQUklOVEZfUkVHSVNURVIoYmJwKTsKPiArIKAg
oCCgIFJUMlgwMERFQlVHRlNfU1BSSU5URl9SRUdJU1RFUihyZik7Cj4gKyN1bmRlZiBSVDJYMDBE
RUJVR0ZTX1NQUklOVEZfUkVHSVNURVIKPiArCj4goCCgIKAgoGJsb2ItPnNpemUgPSBzdHJsZW4o
YmxvYi0+ZGF0YSk7Cj4KPiCgIKAgoCCgcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2Jsb2IobmFtZSwg
U19JUlVTUiwgaW50Zi0+ZHJpdmVyX2ZvbGRlciwgYmxvYik7Cj4gQEAgLTY5NCwyNSArNjkzLDI3
IEBAIHZvaWQgcnQyeDAwZGVidWdfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRl
dikKPiCgIKAgoCCgaWYgKElTX0VSUihpbnRmLT5yZWdpc3Rlcl9mb2xkZXIpIHx8ICFpbnRmLT5y
ZWdpc3Rlcl9mb2xkZXIpCj4goCCgIKAgoCCgIKAgoCCgZ290byBleGl0Owo+Cj4gLSNkZWZpbmUg
UlQyWDAwREVCVUdGU19DUkVBVEVfUkVHSVNURVJfRU5UUlkoX19pbnRmLCBfX25hbWUpIKAgoFwK
PiAtKHsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgXAo+IC0goCCgIKAgKF9faW50ZiktPl9fbmFtZSMjX29mZl9lbnRyeSA9IKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKBcCj4gLSCgIKAgoCCgIKAgZGVidWdmc19jcmVhdGVfdTMyKF9f
c3RyaW5naWZ5KF9fbmFtZSkgIl9vZmZzZXQiLCCgIFwKPiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoCCgU19JUlVTUiB8IFNfSVdVU1IsIKAgoCCgIKAgoCCgIKAgXAo+IC0goCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAoX19pbnRmKS0+cmVnaXN0ZXJfZm9sZGVyLCCgIKAgoCBcCj4g
LSCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCYoX19pbnRmKS0+b2Zmc2V0XyMjX19uYW1l
KTsgoCCgIFwKPiAtIKAgoCCgIGlmIChJU19FUlIoKF9faW50ZiktPl9fbmFtZSMjX29mZl9lbnRy
eSkgoCCgIKAgoCCgIKAgoCCgXAo+IC0goCCgIKAgoCCgIKAgoCCgIKAgoCCgIHx8ICEoX19pbnRm
KS0+X19uYW1lIyNfb2ZmX2VudHJ5KSCgIKAgoCBcCj4gLSCgIKAgoCCgIKAgoCCgIGdvdG8gZXhp
dDsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoFwKPiAtIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgXAo+IC0g
oCCgIKAgKF9faW50ZiktPl9fbmFtZSMjX3ZhbF9lbnRyeSA9IKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKBcCj4gLSCgIKAgoCCgIKAgZGVidWdmc19jcmVhdGVfZmlsZShfX3N0cmluZ2lmeShfX25h
bWUpICJfdmFsdWUiLCCgIFwKPiAtIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIFNfSVJV
U1IgfCBTX0lXVVNSLCCgIKAgoCCgIKAgoCCgXAo+IC0goCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgKF9faW50ZiktPnJlZ2lzdGVyX2ZvbGRlciwgoCCgIKBcCj4gLSCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCAoX19pbnRmKSwgJnJ0MngwMGRlYnVnX2ZvcF8jI19fbmFtZSk7XAo+
IC0goCCgIKAgaWYgKElTX0VSUigoX19pbnRmKS0+X19uYW1lIyNfdmFsX2VudHJ5KSCgIKAgoCCg
IKAgoCCgIKBcCj4gLSCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgfHwgIShfX2ludGYpLT5fX25hbWUj
I192YWxfZW50cnkpIKAgoCCgIFwKPiAtIKAgoCCgIKAgoCCgIKAgZ290byBleGl0OyCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgXAo+ICsjZGVmaW5lIFJUMlgwMERFQlVHRlNf
Q1JFQVRFX1JFR0lTVEVSX0VOVFJZKF9faW50ZiwgX19uYW1lKSCgIKAgoCCgIKAgoCCgIKAgoCCg
XAo+ICsoeyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgXAo+ICsgoCCgIKAgaWYoZGVidWctPl9fbmFtZS5y
ZWFkKSB7IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgXAo+
ICsgoCCgIKAgoCCgIKAgoCAoX19pbnRmKS0+X19uYW1lIyNfb2ZmX2VudHJ5ID0goCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgXAo+ICsgoCCgIKAgoCCgIKAgoCBkZWJ1Z2ZzX2NyZWF0
ZV91MzIoX19zdHJpbmdpZnkoX19uYW1lKSAiX29mZnNldCIsIKAgoCCgIKAgoCCgIKAgXAo+ICsg
oCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoFNfSVJVU1IgfCBTX0lXVVNSLCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoChfX2ludGYpLT5yZWdpc3Rlcl9mb2xkZXIsIKAgoCCgIKAgoCCgIKAgXAo+ICsgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCYoX19pbnRmKS0+b2Zmc2V0XyMjX19u
YW1lKTsgoCCgIKAgoCCgIKAgXAo+ICsgoCCgIKAgoCCgIKAgoCBpZiAoSVNfRVJSKChfX2ludGYp
LT5fX25hbWUjI19vZmZfZW50cnkpIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgXAo+ICsgoCCgIKAg
oCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgfHwgIShfX2ludGYpLT5fX25hbWUjI19vZmZfZW50cnkp
IKAgoCCgIKAgoCCgIKAgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIGdvdG8gZXhpdDsgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgXAo+ICsgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgIKAgoCCgIKAgXAo+ICsgoCCgIKAgoCCgIKAgoCAoX19pbnRmKS0+X19uYW1lIyNfdmFsX2Vu
dHJ5ID0goCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgXAo+ICsgoCCgIKAgoCCgIKAg
oCBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKF9fc3RyaW5naWZ5KF9fbmFtZSkgIl92YWx1ZSIsIKAgoCCg
IKAgoCCgIKAgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBTX0lS
VVNSIHwgU19JV1VTUiwgoCCgIKAgoCCgIKAgoCCgIKAgoCCgXAo+ICsgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCAoX19pbnRmKS0+cmVnaXN0ZXJfZm9sZGVyLCCgIKAgoCCg
IKAgoCCgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCAoX19pbnRm
KSwgJnJ0MngwMGRlYnVnX2ZvcF8jI19fbmFtZSk7IKAgXAo+ICsgoCCgIKAgoCCgIKAgoCBpZiAo
SVNfRVJSKChfX2ludGYpLT5fX25hbWUjI192YWxfZW50cnkpIKAgoCCgIKAgoCCgIKAgoCCgIKAg
oCCgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgfHwgIShfX2ludGYpLT5fX25h
bWUjI192YWxfZW50cnkpIKAgoCCgIKAgoCCgIKAgXAo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IGdvdG8gZXhpdDsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
XAo+ICsgoCCgIKAgfSCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCg
IKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgXAo+IKB9KQo+Cj4goCCgIKAgoFJUMlgwMERFQlVH
RlNfQ1JFQVRFX1JFR0lTVEVSX0VOVFJZKGludGYsIGNzcik7CgpBY2tlZC1ieTogSXZvIHZhbiBE
b29ybiA8SXZEb29ybkBnbWFpbC5jb20+Cg==

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-04-21 12:54 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-19  9:20 [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big Anisse Astier
2012-04-19  9:20 ` [PATCH RFC v2 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
2012-04-19 11:07   ` Ivo Van Doorn
2012-04-19 13:53     ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Anisse Astier
2012-04-19 13:53       ` [PATCH v3 2/2] rt2x00: Add debugfs access for rfcsr register Anisse Astier
2012-04-20  7:03         ` Ivo Van Doorn
2012-04-20  7:03       ` [PATCH v3 1/2] rt2x00: debugfs support - allow a register to be empty Ivo Van Doorn
2012-04-20 15:48         ` Anisse Astier
2012-04-21 12:54           ` Ivo Van Doorn
2012-04-19 11:02 ` [PATCH v2 1/2] rt2800: debugfs register access: BBP is 256 bytes big Ivo Van Doorn

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.