Commit 0f52bf90 authored by Brice Goglin's avatar Brice Goglin Committed by Jeff Garzik

[PATCH] Duplicate IPW_DEBUG option for ipw2100 and 2200

There are currently two IPW_DEBUG options in drivers/net/wireless/Kconfig
(one for ipw2100 and one for ipw2200).  The attached patch splits it into
IPW2100_DEBUG and IPW2200_DEBUG.
Signed-off-by: default avatarBrice Goglin <Brice.Goglin@ens-lyon.org>
Cc: "James P. Ketrenos" <ipw2100-admin@linux.intel.com>
Cc: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent c75f4742
...@@ -173,7 +173,7 @@ config IPW2100_MONITOR ...@@ -173,7 +173,7 @@ config IPW2100_MONITOR
promiscuous mode via the Wireless Tool's Monitor mode. While in this promiscuous mode via the Wireless Tool's Monitor mode. While in this
mode, no packets can be sent. mode, no packets can be sent.
config IPW_DEBUG config IPW2100_DEBUG
bool "Enable full debugging output in IPW2100 module." bool "Enable full debugging output in IPW2100 module."
depends on IPW2100 depends on IPW2100
---help--- ---help---
...@@ -217,7 +217,7 @@ config IPW2200 ...@@ -217,7 +217,7 @@ config IPW2200
say M here and read <file:Documentation/modules.txt>. The module say M here and read <file:Documentation/modules.txt>. The module
will be called ipw2200.ko. will be called ipw2200.ko.
config IPW_DEBUG config IPW2200_DEBUG
bool "Enable full debugging output in IPW2200 module." bool "Enable full debugging output in IPW2200 module."
depends on IPW2200 depends on IPW2200
---help--- ---help---
......
...@@ -175,7 +175,7 @@ that only one external action is invoked at a time. ...@@ -175,7 +175,7 @@ that only one external action is invoked at a time.
#define DRV_COPYRIGHT "Copyright(c) 2003-2005 Intel Corporation" #define DRV_COPYRIGHT "Copyright(c) 2003-2005 Intel Corporation"
/* Debugging stuff */ /* Debugging stuff */
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
#define CONFIG_IPW2100_RX_DEBUG /* Reception debugging */ #define CONFIG_IPW2100_RX_DEBUG /* Reception debugging */
#endif #endif
...@@ -208,7 +208,7 @@ MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])"); ...@@ -208,7 +208,7 @@ MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])");
static u32 ipw2100_debug_level = IPW_DL_NONE; static u32 ipw2100_debug_level = IPW_DL_NONE;
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
#define IPW_DEBUG(level, message...) \ #define IPW_DEBUG(level, message...) \
do { \ do { \
if (ipw2100_debug_level & (level)) { \ if (ipw2100_debug_level & (level)) { \
...@@ -219,9 +219,9 @@ do { \ ...@@ -219,9 +219,9 @@ do { \
} while (0) } while (0)
#else #else
#define IPW_DEBUG(level, message...) do {} while (0) #define IPW_DEBUG(level, message...) do {} while (0)
#endif /* CONFIG_IPW_DEBUG */ #endif /* CONFIG_IPW2100_DEBUG */
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
static const char *command_types[] = { static const char *command_types[] = {
"undefined", "undefined",
"unused", /* HOST_ATTENTION */ "unused", /* HOST_ATTENTION */
...@@ -2081,7 +2081,7 @@ static void isr_scan_complete(struct ipw2100_priv *priv, u32 status) ...@@ -2081,7 +2081,7 @@ static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
priv->status &= ~STATUS_SCANNING; priv->status &= ~STATUS_SCANNING;
} }
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
#define IPW2100_HANDLER(v, f) { v, f, # v } #define IPW2100_HANDLER(v, f) { v, f, # v }
struct ipw2100_status_indicator { struct ipw2100_status_indicator {
int status; int status;
...@@ -2094,7 +2094,7 @@ struct ipw2100_status_indicator { ...@@ -2094,7 +2094,7 @@ struct ipw2100_status_indicator {
int status; int status;
void (*cb) (struct ipw2100_priv * priv, u32 status); void (*cb) (struct ipw2100_priv * priv, u32 status);
}; };
#endif /* CONFIG_IPW_DEBUG */ #endif /* CONFIG_IPW2100_DEBUG */
static void isr_indicate_scanning(struct ipw2100_priv *priv, u32 status) static void isr_indicate_scanning(struct ipw2100_priv *priv, u32 status)
{ {
...@@ -2149,7 +2149,7 @@ static void isr_status_change(struct ipw2100_priv *priv, int status) ...@@ -2149,7 +2149,7 @@ static void isr_status_change(struct ipw2100_priv *priv, int status)
static void isr_rx_complete_command(struct ipw2100_priv *priv, static void isr_rx_complete_command(struct ipw2100_priv *priv,
struct ipw2100_cmd_header *cmd) struct ipw2100_cmd_header *cmd)
{ {
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
if (cmd->host_command_reg < ARRAY_SIZE(command_types)) { if (cmd->host_command_reg < ARRAY_SIZE(command_types)) {
IPW_DEBUG_HC("Command completed '%s (%d)'\n", IPW_DEBUG_HC("Command completed '%s (%d)'\n",
command_types[cmd->host_command_reg], command_types[cmd->host_command_reg],
...@@ -2167,7 +2167,7 @@ static void isr_rx_complete_command(struct ipw2100_priv *priv, ...@@ -2167,7 +2167,7 @@ static void isr_rx_complete_command(struct ipw2100_priv *priv,
wake_up_interruptible(&priv->wait_command_queue); wake_up_interruptible(&priv->wait_command_queue);
} }
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
static const char *frame_types[] = { static const char *frame_types[] = {
"COMMAND_STATUS_VAL", "COMMAND_STATUS_VAL",
"STATUS_CHANGE_VAL", "STATUS_CHANGE_VAL",
...@@ -2290,7 +2290,7 @@ static u8 packet_data[IPW_RX_NIC_BUFFER_LENGTH]; ...@@ -2290,7 +2290,7 @@ static u8 packet_data[IPW_RX_NIC_BUFFER_LENGTH];
static inline void ipw2100_corruption_detected(struct ipw2100_priv *priv, int i) static inline void ipw2100_corruption_detected(struct ipw2100_priv *priv, int i)
{ {
#ifdef CONFIG_IPW_DEBUG_C3 #ifdef CONFIG_IPW2100_DEBUG_C3
struct ipw2100_status *status = &priv->status_queue.drv[i]; struct ipw2100_status *status = &priv->status_queue.drv[i];
u32 match, reg; u32 match, reg;
int j; int j;
...@@ -2312,7 +2312,7 @@ static inline void ipw2100_corruption_detected(struct ipw2100_priv *priv, int i) ...@@ -2312,7 +2312,7 @@ static inline void ipw2100_corruption_detected(struct ipw2100_priv *priv, int i)
} }
#endif #endif
#ifdef CONFIG_IPW_DEBUG_C3 #ifdef CONFIG_IPW2100_DEBUG_C3
/* Halt the fimrware so we can get a good image */ /* Halt the fimrware so we can get a good image */
write_register(priv->net_dev, IPW_REG_RESET_REG, write_register(priv->net_dev, IPW_REG_RESET_REG,
IPW_AUX_HOST_RESET_REG_STOP_MASTER); IPW_AUX_HOST_RESET_REG_STOP_MASTER);
...@@ -2716,7 +2716,7 @@ static inline int __ipw2100_tx_process(struct ipw2100_priv *priv) ...@@ -2716,7 +2716,7 @@ static inline int __ipw2100_tx_process(struct ipw2100_priv *priv)
list_del(element); list_del(element);
DEC_STAT(&priv->fw_pend_stat); DEC_STAT(&priv->fw_pend_stat);
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
{ {
int i = txq->oldest; int i = txq->oldest;
IPW_DEBUG_TX("TX%d V=%p P=%04X T=%04X L=%d\n", i, IPW_DEBUG_TX("TX%d V=%p P=%04X T=%04X L=%d\n", i,
...@@ -2782,7 +2782,7 @@ static inline int __ipw2100_tx_process(struct ipw2100_priv *priv) ...@@ -2782,7 +2782,7 @@ static inline int __ipw2100_tx_process(struct ipw2100_priv *priv)
"something else: ids %d=%d.\n", "something else: ids %d=%d.\n",
priv->net_dev->name, txq->oldest, packet->index); priv->net_dev->name, txq->oldest, packet->index);
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
if (packet->info.c_struct.cmd->host_command_reg < if (packet->info.c_struct.cmd->host_command_reg <
sizeof(command_types) / sizeof(*command_types)) sizeof(command_types) / sizeof(*command_types))
IPW_DEBUG_TX("Command '%s (%d)' processed: %d.\n", IPW_DEBUG_TX("Command '%s (%d)' processed: %d.\n",
...@@ -2975,7 +2975,7 @@ static void ipw2100_tx_send_data(struct ipw2100_priv *priv) ...@@ -2975,7 +2975,7 @@ static void ipw2100_tx_send_data(struct ipw2100_priv *priv)
IPW_DEBUG_TX("data header tbd TX%d P=%08x L=%d\n", IPW_DEBUG_TX("data header tbd TX%d P=%08x L=%d\n",
packet->index, tbd->host_addr, tbd->buf_length); packet->index, tbd->host_addr, tbd->buf_length);
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
if (packet->info.d_struct.txb->nr_frags > 1) if (packet->info.d_struct.txb->nr_frags > 1)
IPW_DEBUG_FRAG("fragment Tx: %d frames\n", IPW_DEBUG_FRAG("fragment Tx: %d frames\n",
packet->info.d_struct.txb->nr_frags); packet->info.d_struct.txb->nr_frags);
...@@ -3827,7 +3827,7 @@ static ssize_t show_stats(struct device *d, struct device_attribute *attr, ...@@ -3827,7 +3827,7 @@ static ssize_t show_stats(struct device *d, struct device_attribute *attr,
priv->rx_interrupts, priv->inta_other); priv->rx_interrupts, priv->inta_other);
out += sprintf(out, "firmware resets: %d\n", priv->resets); out += sprintf(out, "firmware resets: %d\n", priv->resets);
out += sprintf(out, "firmware hangs: %d\n", priv->hangs); out += sprintf(out, "firmware hangs: %d\n", priv->hangs);
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
out += sprintf(out, "packet mismatch image: %s\n", out += sprintf(out, "packet mismatch image: %s\n",
priv->snapshot[0] ? "YES" : "NO"); priv->snapshot[0] ? "YES" : "NO");
#endif #endif
...@@ -3982,7 +3982,7 @@ static ssize_t show_bssinfo(struct device *d, struct device_attribute *attr, ...@@ -3982,7 +3982,7 @@ static ssize_t show_bssinfo(struct device *d, struct device_attribute *attr,
static DEVICE_ATTR(bssinfo, S_IRUGO, show_bssinfo, NULL); static DEVICE_ATTR(bssinfo, S_IRUGO, show_bssinfo, NULL);
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
static ssize_t show_debug_level(struct device_driver *d, char *buf) static ssize_t show_debug_level(struct device_driver *d, char *buf)
{ {
return sprintf(buf, "0x%08X\n", ipw2100_debug_level); return sprintf(buf, "0x%08X\n", ipw2100_debug_level);
...@@ -4011,7 +4011,7 @@ static ssize_t store_debug_level(struct device_driver *d, ...@@ -4011,7 +4011,7 @@ static ssize_t store_debug_level(struct device_driver *d,
static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO, show_debug_level, static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO, show_debug_level,
store_debug_level); store_debug_level);
#endif /* CONFIG_IPW_DEBUG */ #endif /* CONFIG_IPW2100_DEBUG */
static ssize_t show_fatal_error(struct device *d, static ssize_t show_fatal_error(struct device *d,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
...@@ -4937,7 +4937,7 @@ static int ipw2100_set_mandatory_bssid(struct ipw2100_priv *priv, u8 * bssid, ...@@ -4937,7 +4937,7 @@ static int ipw2100_set_mandatory_bssid(struct ipw2100_priv *priv, u8 * bssid,
}; };
int err; int err;
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
if (bssid != NULL) if (bssid != NULL)
IPW_DEBUG_HC("MANDATORY_BSSID: %02X:%02X:%02X:%02X:%02X:%02X\n", IPW_DEBUG_HC("MANDATORY_BSSID: %02X:%02X:%02X:%02X:%02X:%02X\n",
bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[0], bssid[1], bssid[2], bssid[3], bssid[4],
...@@ -6858,7 +6858,7 @@ static int __init ipw2100_init(void) ...@@ -6858,7 +6858,7 @@ static int __init ipw2100_init(void)
ret = pci_module_init(&ipw2100_pci_driver); ret = pci_module_init(&ipw2100_pci_driver);
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
ipw2100_debug_level = debug; ipw2100_debug_level = debug;
driver_create_file(&ipw2100_pci_driver.driver, driver_create_file(&ipw2100_pci_driver.driver,
&driver_attr_debug_level); &driver_attr_debug_level);
...@@ -6873,7 +6873,7 @@ static int __init ipw2100_init(void) ...@@ -6873,7 +6873,7 @@ static int __init ipw2100_init(void)
static void __exit ipw2100_exit(void) static void __exit ipw2100_exit(void)
{ {
/* FIXME: IPG: check that we have no instances of the devices open */ /* FIXME: IPG: check that we have no instances of the devices open */
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
driver_remove_file(&ipw2100_pci_driver.driver, driver_remove_file(&ipw2100_pci_driver.driver,
&driver_attr_debug_level); &driver_attr_debug_level);
#endif #endif
...@@ -8558,7 +8558,7 @@ static struct iw_statistics *ipw2100_wx_wireless_stats(struct net_device *dev) ...@@ -8558,7 +8558,7 @@ static struct iw_statistics *ipw2100_wx_wireless_stats(struct net_device *dev)
quality = min(beacon_qual, min(tx_qual, rssi_qual)); quality = min(beacon_qual, min(tx_qual, rssi_qual));
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2100_DEBUG
if (beacon_qual == quality) if (beacon_qual == quality)
IPW_DEBUG_WX("Quality clamped by Missed Beacons\n"); IPW_DEBUG_WX("Quality clamped by Missed Beacons\n");
else if (tx_qual == quality) else if (tx_qual == quality)
......
...@@ -73,7 +73,7 @@ struct ipw2100_rx_packet; ...@@ -73,7 +73,7 @@ struct ipw2100_rx_packet;
* you simply need to add your entry to the ipw2100_debug_levels array. * you simply need to add your entry to the ipw2100_debug_levels array.
* *
* If you do not see debug_level in /proc/net/ipw2100 then you do not have * If you do not see debug_level in /proc/net/ipw2100 then you do not have
* CONFIG_IPW_DEBUG defined in your kernel configuration * CONFIG_IPW2100_DEBUG defined in your kernel configuration
* *
*/ */
......
...@@ -462,7 +462,7 @@ static inline void ipw_disable_interrupts(struct ipw_priv *priv) ...@@ -462,7 +462,7 @@ static inline void ipw_disable_interrupts(struct ipw_priv *priv)
ipw_write32(priv, IPW_INTA_MASK_R, ~IPW_INTA_MASK_ALL); ipw_write32(priv, IPW_INTA_MASK_R, ~IPW_INTA_MASK_ALL);
} }
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
static char *ipw_error_desc(u32 val) static char *ipw_error_desc(u32 val)
{ {
switch (val) { switch (val) {
...@@ -1235,7 +1235,7 @@ static ssize_t store_scan_age(struct device *d, struct device_attribute *attr, ...@@ -1235,7 +1235,7 @@ static ssize_t store_scan_age(struct device *d, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct ipw_priv *priv = dev_get_drvdata(d); struct ipw_priv *priv = dev_get_drvdata(d);
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
struct net_device *dev = priv->net_dev; struct net_device *dev = priv->net_dev;
#endif #endif
char buffer[] = "00000000"; char buffer[] = "00000000";
...@@ -1754,7 +1754,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv) ...@@ -1754,7 +1754,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
IPW_ERROR("Firmware error detected. Restarting.\n"); IPW_ERROR("Firmware error detected. Restarting.\n");
if (priv->error) { if (priv->error) {
IPW_ERROR("Sysfs 'error' log already exists.\n"); IPW_ERROR("Sysfs 'error' log already exists.\n");
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
if (ipw_debug_level & IPW_DL_FW_ERRORS) { if (ipw_debug_level & IPW_DL_FW_ERRORS) {
struct ipw_fw_error *error = struct ipw_fw_error *error =
ipw_alloc_error_log(priv); ipw_alloc_error_log(priv);
...@@ -1770,7 +1770,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv) ...@@ -1770,7 +1770,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
else else
IPW_ERROR("Error allocating sysfs 'error' " IPW_ERROR("Error allocating sysfs 'error' "
"log.\n"); "log.\n");
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
if (ipw_debug_level & IPW_DL_FW_ERRORS) if (ipw_debug_level & IPW_DL_FW_ERRORS)
ipw_dump_error_log(priv, priv->error); ipw_dump_error_log(priv, priv->error);
#endif #endif
...@@ -3778,7 +3778,7 @@ static const struct ipw_status_code ipw_status_codes[] = { ...@@ -3778,7 +3778,7 @@ static const struct ipw_status_code ipw_status_codes[] = {
{0x2E, "Cipher suite is rejected per security policy"}, {0x2E, "Cipher suite is rejected per security policy"},
}; };
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
static const char *ipw_get_status_code(u16 status) static const char *ipw_get_status_code(u16 status)
{ {
int i; int i;
...@@ -4250,7 +4250,7 @@ static inline void ipw_rx_notification(struct ipw_priv *priv, ...@@ -4250,7 +4250,7 @@ static inline void ipw_rx_notification(struct ipw_priv *priv,
if (priv-> if (priv->
status & (STATUS_ASSOCIATED | status & (STATUS_ASSOCIATED |
STATUS_AUTH)) { STATUS_AUTH)) {
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
struct notif_authenticate *auth struct notif_authenticate *auth
= &notif->u.auth; = &notif->u.auth;
IPW_DEBUG(IPW_DL_NOTIF | IPW_DEBUG(IPW_DL_NOTIF |
...@@ -5827,7 +5827,7 @@ static void ipw_bg_adhoc_check(void *data) ...@@ -5827,7 +5827,7 @@ static void ipw_bg_adhoc_check(void *data)
up(&priv->sem); up(&priv->sem);
} }
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
static void ipw_debug_config(struct ipw_priv *priv) static void ipw_debug_config(struct ipw_priv *priv)
{ {
IPW_DEBUG_INFO("Scan completed, no valid APs matched " IPW_DEBUG_INFO("Scan completed, no valid APs matched "
...@@ -7814,7 +7814,7 @@ static void ipw_rx(struct ipw_priv *priv) ...@@ -7814,7 +7814,7 @@ static void ipw_rx(struct ipw_priv *priv)
while (i != r) { while (i != r) {
rxb = priv->rxq->queue[i]; rxb = priv->rxq->queue[i];
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
if (unlikely(rxb == NULL)) { if (unlikely(rxb == NULL)) {
printk(KERN_CRIT "Queue not allocated!\n"); printk(KERN_CRIT "Queue not allocated!\n");
break; break;
...@@ -10955,7 +10955,7 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -10955,7 +10955,7 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
priv->net_dev = net_dev; priv->net_dev = net_dev;
priv->pci_dev = pdev; priv->pci_dev = pdev;
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
ipw_debug_level = debug; ipw_debug_level = debug;
#endif #endif
spin_lock_init(&priv->lock); spin_lock_init(&priv->lock);
......
...@@ -1301,14 +1301,14 @@ struct ipw_priv { ...@@ -1301,14 +1301,14 @@ struct ipw_priv {
/* debug macros */ /* debug macros */
#ifdef CONFIG_IPW_DEBUG #ifdef CONFIG_IPW2200_DEBUG
#define IPW_DEBUG(level, fmt, args...) \ #define IPW_DEBUG(level, fmt, args...) \
do { if (ipw_debug_level & (level)) \ do { if (ipw_debug_level & (level)) \
printk(KERN_DEBUG DRV_NAME": %c %s " fmt, \ printk(KERN_DEBUG DRV_NAME": %c %s " fmt, \
in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0) in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0)
#else #else
#define IPW_DEBUG(level, fmt, args...) do {} while (0) #define IPW_DEBUG(level, fmt, args...) do {} while (0)
#endif /* CONFIG_IPW_DEBUG */ #endif /* CONFIG_IPW2200_DEBUG */
/* /*
* To use the debug system; * To use the debug system;
...@@ -1332,7 +1332,7 @@ do { if (ipw_debug_level & (level)) \ ...@@ -1332,7 +1332,7 @@ do { if (ipw_debug_level & (level)) \
* you simply need to add your entry to the ipw_debug_levels array. * you simply need to add your entry to the ipw_debug_levels array.
* *
* If you do not see debug_level in /proc/net/ipw then you do not have * If you do not see debug_level in /proc/net/ipw then you do not have
* CONFIG_IPW_DEBUG defined in your kernel configuration * CONFIG_IPW2200_DEBUG defined in your kernel configuration
* *
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment