[media] v4l2: rename VIDIOC_DBG_G_CHIP_NAME to _CHIP_INFO
This ioctl will be extended to return more information than just the name. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
0f0fe4b9f6
commit
96b03d2a30
@ -2507,7 +2507,7 @@ that used it. It was originally scheduled for removal in 2.6.35.
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Added new debugging ioctl &VIDIOC-DBG-G-CHIP-NAME;.
|
<para>Added new debugging ioctl &VIDIOC-DBG-G-CHIP-INFO;.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
|
@ -147,7 +147,7 @@ applications. -->
|
|||||||
<revremark>Remove obsolete and unused DV_PRESET ioctls:
|
<revremark>Remove obsolete and unused DV_PRESET ioctls:
|
||||||
VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and
|
VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and
|
||||||
VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output capability
|
VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output capability
|
||||||
flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS. Added VIDIOC_DBG_G_CHIP_NAME.
|
flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS. Added VIDIOC_DBG_G_CHIP_INFO.
|
||||||
</revremark>
|
</revremark>
|
||||||
</revision>
|
</revision>
|
||||||
|
|
||||||
@ -548,7 +548,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||||||
&sub-create-bufs;
|
&sub-create-bufs;
|
||||||
&sub-cropcap;
|
&sub-cropcap;
|
||||||
&sub-dbg-g-chip-ident;
|
&sub-dbg-g-chip-ident;
|
||||||
&sub-dbg-g-chip-name;
|
&sub-dbg-g-chip-info;
|
||||||
&sub-dbg-g-register;
|
&sub-dbg-g-register;
|
||||||
&sub-decoder-cmd;
|
&sub-decoder-cmd;
|
||||||
&sub-dqevent;
|
&sub-dqevent;
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
<refentry id="vidioc-dbg-g-chip-name">
|
<refentry id="vidioc-dbg-g-chip-info">
|
||||||
<refmeta>
|
<refmeta>
|
||||||
<refentrytitle>ioctl VIDIOC_DBG_G_CHIP_NAME</refentrytitle>
|
<refentrytitle>ioctl VIDIOC_DBG_G_CHIP_INFO</refentrytitle>
|
||||||
&manvol;
|
&manvol;
|
||||||
</refmeta>
|
</refmeta>
|
||||||
|
|
||||||
<refnamediv>
|
<refnamediv>
|
||||||
<refname>VIDIOC_DBG_G_CHIP_NAME</refname>
|
<refname>VIDIOC_DBG_G_CHIP_INFO</refname>
|
||||||
<refpurpose>Identify the chips on a TV card</refpurpose>
|
<refpurpose>Identify the chips on a TV card</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
@ -15,7 +15,7 @@
|
|||||||
<funcdef>int <function>ioctl</function></funcdef>
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
<paramdef>struct v4l2_dbg_chip_name
|
<paramdef>struct v4l2_dbg_chip_info
|
||||||
*<parameter>argp</parameter></paramdef>
|
*<parameter>argp</parameter></paramdef>
|
||||||
</funcprototype>
|
</funcprototype>
|
||||||
</funcsynopsis>
|
</funcsynopsis>
|
||||||
@ -34,7 +34,7 @@
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><parameter>request</parameter></term>
|
<term><parameter>request</parameter></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>VIDIOC_DBG_G_CHIP_NAME</para>
|
<para>VIDIOC_DBG_G_CHIP_INFO</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -69,8 +69,8 @@ so it can be fixed.</para>
|
|||||||
<para>To query the driver applications must initialize the
|
<para>To query the driver applications must initialize the
|
||||||
<structfield>match.type</structfield> and
|
<structfield>match.type</structfield> and
|
||||||
<structfield>match.addr</structfield> or <structfield>match.name</structfield>
|
<structfield>match.addr</structfield> or <structfield>match.name</structfield>
|
||||||
fields of a &v4l2-dbg-chip-name;
|
fields of a &v4l2-dbg-chip-info;
|
||||||
and call <constant>VIDIOC_DBG_G_CHIP_NAME</constant> with a pointer to
|
and call <constant>VIDIOC_DBG_G_CHIP_INFO</constant> with a pointer to
|
||||||
this structure. On success the driver stores information about the
|
this structure. On success the driver stores information about the
|
||||||
selected chip in the <structfield>name</structfield> and
|
selected chip in the <structfield>name</structfield> and
|
||||||
<structfield>flags</structfield> fields. On failure the structure
|
<structfield>flags</structfield> fields. On failure the structure
|
||||||
@ -81,7 +81,7 @@ remains unchanged.</para>
|
|||||||
<structfield>match.addr</structfield> selects the nth bridge 'chip'
|
<structfield>match.addr</structfield> selects the nth bridge 'chip'
|
||||||
on the TV card. You can enumerate all chips by starting at zero and
|
on the TV card. You can enumerate all chips by starting at zero and
|
||||||
incrementing <structfield>match.addr</structfield> by one until
|
incrementing <structfield>match.addr</structfield> by one until
|
||||||
<constant>VIDIOC_DBG_G_CHIP_NAME</constant> fails with an &EINVAL;.
|
<constant>VIDIOC_DBG_G_CHIP_INFO</constant> fails with an &EINVAL;.
|
||||||
The number zero always selects the bridge chip itself, ⪚ the chip
|
The number zero always selects the bridge chip itself, ⪚ the chip
|
||||||
connected to the PCI or USB bus. Non-zero numbers identify specific
|
connected to the PCI or USB bus. Non-zero numbers identify specific
|
||||||
parts of the bridge chip such as an AC97 register block.</para>
|
parts of the bridge chip such as an AC97 register block.</para>
|
||||||
@ -138,8 +138,8 @@ to the <structfield>type</structfield> field.</entry>
|
|||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="v4l2-dbg-chip-name">
|
<table pgwide="1" frame="none" id="v4l2-dbg-chip-info">
|
||||||
<title>struct <structname>v4l2_dbg_chip_name</structname></title>
|
<title>struct <structname>v4l2_dbg_chip_info</structname></title>
|
||||||
<tgroup cols="3">
|
<tgroup cols="3">
|
||||||
&cs-str;
|
&cs-str;
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
@ -99,7 +99,7 @@ unchanged.</para>
|
|||||||
<structfield>match.addr</structfield> selects the nth non-sub-device chip
|
<structfield>match.addr</structfield> selects the nth non-sub-device chip
|
||||||
on the TV card. The number zero always selects the host chip, ⪚ the
|
on the TV card. The number zero always selects the host chip, ⪚ the
|
||||||
chip connected to the PCI or USB bus. You can find out which chips are
|
chip connected to the PCI or USB bus. You can find out which chips are
|
||||||
present with the &VIDIOC-DBG-G-CHIP-NAME; ioctl.</para>
|
present with the &VIDIOC-DBG-G-CHIP-INFO; ioctl.</para>
|
||||||
|
|
||||||
<para>When <structfield>match.type</structfield> is
|
<para>When <structfield>match.type</structfield> is
|
||||||
<constant>V4L2_CHIP_MATCH_I2C_DRIVER</constant>,
|
<constant>V4L2_CHIP_MATCH_I2C_DRIVER</constant>,
|
||||||
@ -109,7 +109,7 @@ For instance
|
|||||||
supported by the saa7127 driver, regardless of its &i2c; bus address.
|
supported by the saa7127 driver, regardless of its &i2c; bus address.
|
||||||
When multiple chips supported by the same driver are present, the
|
When multiple chips supported by the same driver are present, the
|
||||||
effect of these ioctls is undefined. Again with the
|
effect of these ioctls is undefined. Again with the
|
||||||
&VIDIOC-DBG-G-CHIP-NAME; ioctl you can find out which &i2c; chips are
|
&VIDIOC-DBG-G-CHIP-INFO; ioctl you can find out which &i2c; chips are
|
||||||
present.</para>
|
present.</para>
|
||||||
|
|
||||||
<para>When <structfield>match.type</structfield> is
|
<para>When <structfield>match.type</structfield> is
|
||||||
@ -131,14 +131,14 @@ on the TV card.</para>
|
|||||||
|
|
||||||
<para>Due to a flaw in the Linux &i2c; bus driver these ioctls may
|
<para>Due to a flaw in the Linux &i2c; bus driver these ioctls may
|
||||||
return successfully without actually reading or writing a register. To
|
return successfully without actually reading or writing a register. To
|
||||||
catch the most likely failure we recommend a &VIDIOC-DBG-G-CHIP-NAME;
|
catch the most likely failure we recommend a &VIDIOC-DBG-G-CHIP-INFO;
|
||||||
call confirming the presence of the selected &i2c; chip.</para>
|
call confirming the presence of the selected &i2c; chip.</para>
|
||||||
</note>
|
</note>
|
||||||
|
|
||||||
<para>These ioctls are optional, not all drivers may support them.
|
<para>These ioctls are optional, not all drivers may support them.
|
||||||
However when a driver supports these ioctls it must also support
|
However when a driver supports these ioctls it must also support
|
||||||
&VIDIOC-DBG-G-CHIP-NAME;. Conversely it may support
|
&VIDIOC-DBG-G-CHIP-INFO;. Conversely it may support
|
||||||
<constant>VIDIOC_DBG_G_CHIP_NAME</constant> but not these ioctls.</para>
|
<constant>VIDIOC_DBG_G_CHIP_INFO</constant> but not these ioctls.</para>
|
||||||
|
|
||||||
<para><constant>VIDIOC_DBG_G_REGISTER</constant> and
|
<para><constant>VIDIOC_DBG_G_REGISTER</constant> and
|
||||||
<constant>VIDIOC_DBG_S_REGISTER</constant> were introduced in Linux
|
<constant>VIDIOC_DBG_S_REGISTER</constant> were introduced in Linux
|
||||||
|
@ -1332,8 +1332,8 @@ static int vidioc_g_chip_ident(struct file *file, void *priv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||||
static int vidioc_g_chip_name(struct file *file, void *priv,
|
static int vidioc_g_chip_info(struct file *file, void *priv,
|
||||||
struct v4l2_dbg_chip_name *chip)
|
struct v4l2_dbg_chip_info *chip)
|
||||||
{
|
{
|
||||||
struct em28xx_fh *fh = priv;
|
struct em28xx_fh *fh = priv;
|
||||||
struct em28xx *dev = fh->dev;
|
struct em28xx *dev = fh->dev;
|
||||||
@ -1797,7 +1797,7 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
|
|||||||
.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
|
.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
|
||||||
.vidioc_g_chip_ident = vidioc_g_chip_ident,
|
.vidioc_g_chip_ident = vidioc_g_chip_ident,
|
||||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||||
.vidioc_g_chip_name = vidioc_g_chip_name,
|
.vidioc_g_chip_info = vidioc_g_chip_info,
|
||||||
.vidioc_g_register = vidioc_g_register,
|
.vidioc_g_register = vidioc_g_register,
|
||||||
.vidioc_s_register = vidioc_s_register,
|
.vidioc_s_register = vidioc_s_register,
|
||||||
#endif
|
#endif
|
||||||
@ -1827,7 +1827,7 @@ static const struct v4l2_ioctl_ops radio_ioctl_ops = {
|
|||||||
.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
|
.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
|
||||||
.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
|
.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
|
||||||
.vidioc_g_chip_ident = vidioc_g_chip_ident,
|
.vidioc_g_chip_ident = vidioc_g_chip_ident,
|
||||||
.vidioc_g_chip_name = vidioc_g_chip_name,
|
.vidioc_g_chip_info = vidioc_g_chip_info,
|
||||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||||
.vidioc_g_register = vidioc_g_register,
|
.vidioc_g_register = vidioc_g_register,
|
||||||
.vidioc_s_register = vidioc_s_register,
|
.vidioc_s_register = vidioc_s_register,
|
||||||
|
@ -592,7 +592,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
|
|||||||
SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
|
SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
|
||||||
SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status);
|
SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status);
|
||||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||||
set_bit(_IOC_NR(VIDIOC_DBG_G_CHIP_NAME), valid_ioctls);
|
set_bit(_IOC_NR(VIDIOC_DBG_G_CHIP_INFO), valid_ioctls);
|
||||||
set_bit(_IOC_NR(VIDIOC_DBG_G_REGISTER), valid_ioctls);
|
set_bit(_IOC_NR(VIDIOC_DBG_G_REGISTER), valid_ioctls);
|
||||||
set_bit(_IOC_NR(VIDIOC_DBG_S_REGISTER), valid_ioctls);
|
set_bit(_IOC_NR(VIDIOC_DBG_S_REGISTER), valid_ioctls);
|
||||||
#endif
|
#endif
|
||||||
|
@ -638,9 +638,9 @@ static void v4l_print_dbg_chip_ident(const void *arg, bool write_only)
|
|||||||
p->ident, p->revision);
|
p->ident, p->revision);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void v4l_print_dbg_chip_name(const void *arg, bool write_only)
|
static void v4l_print_dbg_chip_info(const void *arg, bool write_only)
|
||||||
{
|
{
|
||||||
const struct v4l2_dbg_chip_name *p = arg;
|
const struct v4l2_dbg_chip_info *p = arg;
|
||||||
|
|
||||||
pr_cont("type=%u, ", p->match.type);
|
pr_cont("type=%u, ", p->match.type);
|
||||||
if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER)
|
if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER)
|
||||||
@ -1854,12 +1854,12 @@ static int v4l_dbg_g_chip_ident(const struct v4l2_ioctl_ops *ops,
|
|||||||
return ops->vidioc_g_chip_ident(file, fh, p);
|
return ops->vidioc_g_chip_ident(file, fh, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int v4l_dbg_g_chip_name(const struct v4l2_ioctl_ops *ops,
|
static int v4l_dbg_g_chip_info(const struct v4l2_ioctl_ops *ops,
|
||||||
struct file *file, void *fh, void *arg)
|
struct file *file, void *fh, void *arg)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||||
struct video_device *vfd = video_devdata(file);
|
struct video_device *vfd = video_devdata(file);
|
||||||
struct v4l2_dbg_chip_name *p = arg;
|
struct v4l2_dbg_chip_info *p = arg;
|
||||||
struct v4l2_subdev *sd;
|
struct v4l2_subdev *sd;
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
@ -1875,8 +1875,8 @@ static int v4l_dbg_g_chip_name(const struct v4l2_ioctl_ops *ops,
|
|||||||
strlcpy(p->name, vfd->parent->driver->name, sizeof(p->name));
|
strlcpy(p->name, vfd->parent->driver->name, sizeof(p->name));
|
||||||
else
|
else
|
||||||
strlcpy(p->name, "bridge", sizeof(p->name));
|
strlcpy(p->name, "bridge", sizeof(p->name));
|
||||||
if (ops->vidioc_g_chip_name)
|
if (ops->vidioc_g_chip_info)
|
||||||
return ops->vidioc_g_chip_name(file, fh, arg);
|
return ops->vidioc_g_chip_info(file, fh, arg);
|
||||||
if (p->match.addr)
|
if (p->match.addr)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return 0;
|
return 0;
|
||||||
@ -2116,7 +2116,7 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
|
|||||||
IOCTL_INFO_STD(VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings, v4l_print_dv_timings, 0),
|
IOCTL_INFO_STD(VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings, v4l_print_dv_timings, 0),
|
||||||
IOCTL_INFO_STD(VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap, v4l_print_dv_timings_cap, INFO_FL_CLEAR(v4l2_dv_timings_cap, type)),
|
IOCTL_INFO_STD(VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap, v4l_print_dv_timings_cap, INFO_FL_CLEAR(v4l2_dv_timings_cap, type)),
|
||||||
IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0),
|
IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0),
|
||||||
IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_NAME, v4l_dbg_g_chip_name, v4l_print_dbg_chip_name, INFO_FL_CLEAR(v4l2_dbg_chip_name, match)),
|
IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)),
|
||||||
};
|
};
|
||||||
#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
|
#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
|
||||||
|
|
||||||
|
@ -244,8 +244,8 @@ struct v4l2_ioctl_ops {
|
|||||||
int (*vidioc_s_register) (struct file *file, void *fh,
|
int (*vidioc_s_register) (struct file *file, void *fh,
|
||||||
const struct v4l2_dbg_register *reg);
|
const struct v4l2_dbg_register *reg);
|
||||||
|
|
||||||
int (*vidioc_g_chip_name) (struct file *file, void *fh,
|
int (*vidioc_g_chip_info) (struct file *file, void *fh,
|
||||||
struct v4l2_dbg_chip_name *chip);
|
struct v4l2_dbg_chip_info *chip);
|
||||||
#endif
|
#endif
|
||||||
int (*vidioc_g_chip_ident) (struct file *file, void *fh,
|
int (*vidioc_g_chip_ident) (struct file *file, void *fh,
|
||||||
struct v4l2_dbg_chip_ident *chip);
|
struct v4l2_dbg_chip_ident *chip);
|
||||||
|
@ -1839,8 +1839,8 @@ struct v4l2_dbg_chip_ident {
|
|||||||
#define V4L2_CHIP_FL_READABLE (1 << 0)
|
#define V4L2_CHIP_FL_READABLE (1 << 0)
|
||||||
#define V4L2_CHIP_FL_WRITABLE (1 << 1)
|
#define V4L2_CHIP_FL_WRITABLE (1 << 1)
|
||||||
|
|
||||||
/* VIDIOC_DBG_G_CHIP_NAME */
|
/* VIDIOC_DBG_G_CHIP_INFO */
|
||||||
struct v4l2_dbg_chip_name {
|
struct v4l2_dbg_chip_info {
|
||||||
struct v4l2_dbg_match match;
|
struct v4l2_dbg_match match;
|
||||||
char name[32];
|
char name[32];
|
||||||
__u32 flags;
|
__u32 flags;
|
||||||
@ -1938,7 +1938,7 @@ struct v4l2_create_buffers {
|
|||||||
|
|
||||||
/* Experimental, meant for debugging, testing and internal use.
|
/* Experimental, meant for debugging, testing and internal use.
|
||||||
Never use this ioctl in applications!
|
Never use this ioctl in applications!
|
||||||
Note: this ioctl is deprecated in favor of VIDIOC_DBG_G_CHIP_NAME and
|
Note: this ioctl is deprecated in favor of VIDIOC_DBG_G_CHIP_INFO and
|
||||||
will go away in the future. */
|
will go away in the future. */
|
||||||
#define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident)
|
#define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident)
|
||||||
|
|
||||||
@ -1976,7 +1976,7 @@ struct v4l2_create_buffers {
|
|||||||
|
|
||||||
/* Experimental, meant for debugging, testing and internal use.
|
/* Experimental, meant for debugging, testing and internal use.
|
||||||
Never use these in applications! */
|
Never use these in applications! */
|
||||||
#define VIDIOC_DBG_G_CHIP_NAME _IOWR('V', 102, struct v4l2_dbg_chip_name)
|
#define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info)
|
||||||
|
|
||||||
/* Reminder: when adding new ioctls please add support for them to
|
/* Reminder: when adding new ioctls please add support for them to
|
||||||
drivers/media/video/v4l2-compat-ioctl32.c as well! */
|
drivers/media/video/v4l2-compat-ioctl32.c as well! */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user