* [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup
@ 2023-10-12 4:12 Philippe Mathieu-Daudé
2023-10-12 4:12 ` [PATCH 1/3] hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro Philippe Mathieu-Daudé
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-12 4:12 UTC (permalink / raw)
To: qemu-devel
Cc: Yoshinori Sato, Magnus Damm, qemu-trivial,
Philippe Mathieu-Daudé
- Use QOM DEFINE_TYPES
- Rename few functions
- Replace magic value by definition
Philippe Mathieu-Daudé (3):
hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro
hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names
hw/pci-host/sh_pcic: Replace magic value by proper definition
hw/pci-host/sh_pci.c | 57 ++++++++++++++++++++------------------------
1 file changed, 26 insertions(+), 31 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro
2023-10-12 4:12 [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
@ 2023-10-12 4:12 ` Philippe Mathieu-Daudé
2023-10-14 15:08 ` Yoshinori Sato
2023-10-12 4:12 ` [PATCH 2/3] hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names Philippe Mathieu-Daudé
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-12 4:12 UTC (permalink / raw)
To: qemu-devel
Cc: Yoshinori Sato, Magnus Damm, qemu-trivial,
Philippe Mathieu-Daudé
When multiple QOM types are registered in the same file,
it is simpler to use the the DEFINE_TYPES() macro. In
particular because type array declared with such macro
are easier to review.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/pci-host/sh_pci.c | 40 +++++++++++++++++-----------------------
1 file changed, 17 insertions(+), 23 deletions(-)
diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c
index 77e7bbc65f..41aed48c85 100644
--- a/hw/pci-host/sh_pci.c
+++ b/hw/pci-host/sh_pci.c
@@ -167,17 +167,6 @@ static void sh_pci_host_class_init(ObjectClass *klass, void *data)
dc->user_creatable = false;
}
-static const TypeInfo sh_pci_host_info = {
- .name = "sh_pci_host",
- .parent = TYPE_PCI_DEVICE,
- .instance_size = sizeof(PCIDevice),
- .class_init = sh_pci_host_class_init,
- .interfaces = (InterfaceInfo[]) {
- { INTERFACE_CONVENTIONAL_PCI_DEVICE },
- { },
- },
-};
-
static void sh_pci_device_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
@@ -185,17 +174,22 @@ static void sh_pci_device_class_init(ObjectClass *klass, void *data)
dc->realize = sh_pci_device_realize;
}
-static const TypeInfo sh_pci_device_info = {
- .name = TYPE_SH_PCI_HOST_BRIDGE,
- .parent = TYPE_PCI_HOST_BRIDGE,
- .instance_size = sizeof(SHPCIState),
- .class_init = sh_pci_device_class_init,
+static const TypeInfo sh_pcic_types[] = {
+ {
+ .name = TYPE_SH_PCI_HOST_BRIDGE,
+ .parent = TYPE_PCI_HOST_BRIDGE,
+ .instance_size = sizeof(SHPCIState),
+ .class_init = sh_pci_device_class_init,
+ }, {
+ .name = "sh_pci_host",
+ .parent = TYPE_PCI_DEVICE,
+ .instance_size = sizeof(PCIDevice),
+ .class_init = sh_pci_host_class_init,
+ .interfaces = (InterfaceInfo[]) {
+ { INTERFACE_CONVENTIONAL_PCI_DEVICE },
+ { },
+ },
+ },
};
-static void sh_pci_register_types(void)
-{
- type_register_static(&sh_pci_device_info);
- type_register_static(&sh_pci_host_info);
-}
-
-type_init(sh_pci_register_types)
+DEFINE_TYPES(sh_pcic_types)
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names
2023-10-12 4:12 [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
2023-10-12 4:12 ` [PATCH 1/3] hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro Philippe Mathieu-Daudé
@ 2023-10-12 4:12 ` Philippe Mathieu-Daudé
2023-10-14 15:09 ` Yoshinori Sato
2023-10-12 4:12 ` [PATCH 3/3] hw/pci-host/sh_pcic: Replace magic value by proper definition Philippe Mathieu-Daudé
2023-10-16 9:44 ` [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
3 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-12 4:12 UTC (permalink / raw)
To: qemu-devel
Cc: Yoshinori Sato, Magnus Damm, qemu-trivial,
Philippe Mathieu-Daudé
Host bridge device and PCI function #0 are inverted.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/pci-host/sh_pci.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c
index 41aed48c85..580e273d96 100644
--- a/hw/pci-host/sh_pci.c
+++ b/hw/pci-host/sh_pci.c
@@ -116,7 +116,7 @@ static void sh_pci_set_irq(void *opaque, int irq_num, int level)
qemu_set_irq(pic[irq_num], level);
}
-static void sh_pci_device_realize(DeviceState *dev, Error **errp)
+static void sh_pcic_host_realize(DeviceState *dev, Error **errp)
{
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
SHPCIState *s = SH_PCI_HOST_BRIDGE(dev);
@@ -145,19 +145,19 @@ static void sh_pci_device_realize(DeviceState *dev, Error **errp)
s->dev = pci_create_simple(phb->bus, PCI_DEVFN(0, 0), "sh_pci_host");
}
-static void sh_pci_host_realize(PCIDevice *d, Error **errp)
+static void sh_pcic_pci_realize(PCIDevice *d, Error **errp)
{
pci_set_word(d->config + PCI_COMMAND, PCI_COMMAND_WAIT);
pci_set_word(d->config + PCI_STATUS, PCI_STATUS_CAP_LIST |
PCI_STATUS_FAST_BACK | PCI_STATUS_DEVSEL_MEDIUM);
}
-static void sh_pci_host_class_init(ObjectClass *klass, void *data)
+static void sh_pcic_pci_class_init(ObjectClass *klass, void *data)
{
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
- k->realize = sh_pci_host_realize;
+ k->realize = sh_pcic_pci_realize;
k->vendor_id = PCI_VENDOR_ID_HITACHI;
k->device_id = PCI_DEVICE_ID_HITACHI_SH7751R;
/*
@@ -167,11 +167,11 @@ static void sh_pci_host_class_init(ObjectClass *klass, void *data)
dc->user_creatable = false;
}
-static void sh_pci_device_class_init(ObjectClass *klass, void *data)
+static void sh_pcic_host_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->realize = sh_pci_device_realize;
+ dc->realize = sh_pcic_host_realize;
}
static const TypeInfo sh_pcic_types[] = {
@@ -179,12 +179,12 @@ static const TypeInfo sh_pcic_types[] = {
.name = TYPE_SH_PCI_HOST_BRIDGE,
.parent = TYPE_PCI_HOST_BRIDGE,
.instance_size = sizeof(SHPCIState),
- .class_init = sh_pci_device_class_init,
+ .class_init = sh_pcic_host_class_init,
}, {
.name = "sh_pci_host",
.parent = TYPE_PCI_DEVICE,
.instance_size = sizeof(PCIDevice),
- .class_init = sh_pci_host_class_init,
+ .class_init = sh_pcic_pci_class_init,
.interfaces = (InterfaceInfo[]) {
{ INTERFACE_CONVENTIONAL_PCI_DEVICE },
{ },
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] hw/pci-host/sh_pcic: Replace magic value by proper definition
2023-10-12 4:12 [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
2023-10-12 4:12 ` [PATCH 1/3] hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro Philippe Mathieu-Daudé
2023-10-12 4:12 ` [PATCH 2/3] hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names Philippe Mathieu-Daudé
@ 2023-10-12 4:12 ` Philippe Mathieu-Daudé
2023-10-14 15:10 ` Yoshinori Sato
2023-10-16 9:44 ` [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
3 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-12 4:12 UTC (permalink / raw)
To: qemu-devel
Cc: Yoshinori Sato, Magnus Damm, qemu-trivial,
Philippe Mathieu-Daudé
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/pci-host/sh_pci.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c
index 580e273d96..4edebced5e 100644
--- a/hw/pci-host/sh_pci.c
+++ b/hw/pci-host/sh_pci.c
@@ -40,7 +40,7 @@ struct SHPCIState {
PCIHostState parent_obj;
PCIDevice *dev;
- qemu_irq irq[4];
+ qemu_irq irq[PCI_NUM_PINS];
MemoryRegion memconfig_p4;
MemoryRegion memconfig_a7;
MemoryRegion isa;
@@ -131,7 +131,8 @@ static void sh_pcic_host_realize(DeviceState *dev, Error **errp)
s->irq,
get_system_memory(),
get_system_io(),
- PCI_DEVFN(0, 0), 4, TYPE_PCI_BUS);
+ PCI_DEVFN(0, 0), PCI_NUM_PINS,
+ TYPE_PCI_BUS);
memory_region_init_io(&s->memconfig_p4, OBJECT(s), &sh_pci_reg_ops, s,
"sh_pci", 0x224);
memory_region_init_alias(&s->memconfig_a7, OBJECT(s), "sh_pci.2",
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro
2023-10-12 4:12 ` [PATCH 1/3] hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro Philippe Mathieu-Daudé
@ 2023-10-14 15:08 ` Yoshinori Sato
0 siblings, 0 replies; 8+ messages in thread
From: Yoshinori Sato @ 2023-10-14 15:08 UTC (permalink / raw)
To: Philippe Mathieu-Daudé; +Cc: qemu-devel, Magnus Damm, qemu-trivial
On Thu, 12 Oct 2023 13:12:35 +0900,
Philippe Mathieu-Daudé wrote:
>
> When multiple QOM types are registered in the same file,
> it is simpler to use the the DEFINE_TYPES() macro. In
> particular because type array declared with such macro
> are easier to review.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
> ---
> hw/pci-host/sh_pci.c | 40 +++++++++++++++++-----------------------
> 1 file changed, 17 insertions(+), 23 deletions(-)
>
> diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c
> index 77e7bbc65f..41aed48c85 100644
> --- a/hw/pci-host/sh_pci.c
> +++ b/hw/pci-host/sh_pci.c
> @@ -167,17 +167,6 @@ static void sh_pci_host_class_init(ObjectClass *klass, void *data)
> dc->user_creatable = false;
> }
>
> -static const TypeInfo sh_pci_host_info = {
> - .name = "sh_pci_host",
> - .parent = TYPE_PCI_DEVICE,
> - .instance_size = sizeof(PCIDevice),
> - .class_init = sh_pci_host_class_init,
> - .interfaces = (InterfaceInfo[]) {
> - { INTERFACE_CONVENTIONAL_PCI_DEVICE },
> - { },
> - },
> -};
> -
> static void sh_pci_device_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
> @@ -185,17 +174,22 @@ static void sh_pci_device_class_init(ObjectClass *klass, void *data)
> dc->realize = sh_pci_device_realize;
> }
>
> -static const TypeInfo sh_pci_device_info = {
> - .name = TYPE_SH_PCI_HOST_BRIDGE,
> - .parent = TYPE_PCI_HOST_BRIDGE,
> - .instance_size = sizeof(SHPCIState),
> - .class_init = sh_pci_device_class_init,
> +static const TypeInfo sh_pcic_types[] = {
> + {
> + .name = TYPE_SH_PCI_HOST_BRIDGE,
> + .parent = TYPE_PCI_HOST_BRIDGE,
> + .instance_size = sizeof(SHPCIState),
> + .class_init = sh_pci_device_class_init,
> + }, {
> + .name = "sh_pci_host",
> + .parent = TYPE_PCI_DEVICE,
> + .instance_size = sizeof(PCIDevice),
> + .class_init = sh_pci_host_class_init,
> + .interfaces = (InterfaceInfo[]) {
> + { INTERFACE_CONVENTIONAL_PCI_DEVICE },
> + { },
> + },
> + },
> };
>
> -static void sh_pci_register_types(void)
> -{
> - type_register_static(&sh_pci_device_info);
> - type_register_static(&sh_pci_host_info);
> -}
> -
> -type_init(sh_pci_register_types)
> +DEFINE_TYPES(sh_pcic_types)
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names
2023-10-12 4:12 ` [PATCH 2/3] hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names Philippe Mathieu-Daudé
@ 2023-10-14 15:09 ` Yoshinori Sato
0 siblings, 0 replies; 8+ messages in thread
From: Yoshinori Sato @ 2023-10-14 15:09 UTC (permalink / raw)
To: Philippe Mathieu-Daudé; +Cc: qemu-devel, Magnus Damm, qemu-trivial
On Thu, 12 Oct 2023 13:12:36 +0900,
Philippe Mathieu-Daudé wrote:
>
> Host bridge device and PCI function #0 are inverted.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
> ---
> hw/pci-host/sh_pci.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c
> index 41aed48c85..580e273d96 100644
> --- a/hw/pci-host/sh_pci.c
> +++ b/hw/pci-host/sh_pci.c
> @@ -116,7 +116,7 @@ static void sh_pci_set_irq(void *opaque, int irq_num, int level)
> qemu_set_irq(pic[irq_num], level);
> }
>
> -static void sh_pci_device_realize(DeviceState *dev, Error **errp)
> +static void sh_pcic_host_realize(DeviceState *dev, Error **errp)
> {
> SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
> SHPCIState *s = SH_PCI_HOST_BRIDGE(dev);
> @@ -145,19 +145,19 @@ static void sh_pci_device_realize(DeviceState *dev, Error **errp)
> s->dev = pci_create_simple(phb->bus, PCI_DEVFN(0, 0), "sh_pci_host");
> }
>
> -static void sh_pci_host_realize(PCIDevice *d, Error **errp)
> +static void sh_pcic_pci_realize(PCIDevice *d, Error **errp)
> {
> pci_set_word(d->config + PCI_COMMAND, PCI_COMMAND_WAIT);
> pci_set_word(d->config + PCI_STATUS, PCI_STATUS_CAP_LIST |
> PCI_STATUS_FAST_BACK | PCI_STATUS_DEVSEL_MEDIUM);
> }
>
> -static void sh_pci_host_class_init(ObjectClass *klass, void *data)
> +static void sh_pcic_pci_class_init(ObjectClass *klass, void *data)
> {
> PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> - k->realize = sh_pci_host_realize;
> + k->realize = sh_pcic_pci_realize;
> k->vendor_id = PCI_VENDOR_ID_HITACHI;
> k->device_id = PCI_DEVICE_ID_HITACHI_SH7751R;
> /*
> @@ -167,11 +167,11 @@ static void sh_pci_host_class_init(ObjectClass *klass, void *data)
> dc->user_creatable = false;
> }
>
> -static void sh_pci_device_class_init(ObjectClass *klass, void *data)
> +static void sh_pcic_host_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> - dc->realize = sh_pci_device_realize;
> + dc->realize = sh_pcic_host_realize;
> }
>
> static const TypeInfo sh_pcic_types[] = {
> @@ -179,12 +179,12 @@ static const TypeInfo sh_pcic_types[] = {
> .name = TYPE_SH_PCI_HOST_BRIDGE,
> .parent = TYPE_PCI_HOST_BRIDGE,
> .instance_size = sizeof(SHPCIState),
> - .class_init = sh_pci_device_class_init,
> + .class_init = sh_pcic_host_class_init,
> }, {
> .name = "sh_pci_host",
> .parent = TYPE_PCI_DEVICE,
> .instance_size = sizeof(PCIDevice),
> - .class_init = sh_pci_host_class_init,
> + .class_init = sh_pcic_pci_class_init,
> .interfaces = (InterfaceInfo[]) {
> { INTERFACE_CONVENTIONAL_PCI_DEVICE },
> { },
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] hw/pci-host/sh_pcic: Replace magic value by proper definition
2023-10-12 4:12 ` [PATCH 3/3] hw/pci-host/sh_pcic: Replace magic value by proper definition Philippe Mathieu-Daudé
@ 2023-10-14 15:10 ` Yoshinori Sato
0 siblings, 0 replies; 8+ messages in thread
From: Yoshinori Sato @ 2023-10-14 15:10 UTC (permalink / raw)
To: Philippe Mathieu-Daudé; +Cc: qemu-devel, Magnus Damm, qemu-trivial
On Thu, 12 Oct 2023 13:12:37 +0900,
Philippe Mathieu-Daudé wrote:
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
> ---
> hw/pci-host/sh_pci.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c
> index 580e273d96..4edebced5e 100644
> --- a/hw/pci-host/sh_pci.c
> +++ b/hw/pci-host/sh_pci.c
> @@ -40,7 +40,7 @@ struct SHPCIState {
> PCIHostState parent_obj;
>
> PCIDevice *dev;
> - qemu_irq irq[4];
> + qemu_irq irq[PCI_NUM_PINS];
> MemoryRegion memconfig_p4;
> MemoryRegion memconfig_a7;
> MemoryRegion isa;
> @@ -131,7 +131,8 @@ static void sh_pcic_host_realize(DeviceState *dev, Error **errp)
> s->irq,
> get_system_memory(),
> get_system_io(),
> - PCI_DEVFN(0, 0), 4, TYPE_PCI_BUS);
> + PCI_DEVFN(0, 0), PCI_NUM_PINS,
> + TYPE_PCI_BUS);
> memory_region_init_io(&s->memconfig_p4, OBJECT(s), &sh_pci_reg_ops, s,
> "sh_pci", 0x224);
> memory_region_init_alias(&s->memconfig_a7, OBJECT(s), "sh_pci.2",
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup
2023-10-12 4:12 [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2023-10-12 4:12 ` [PATCH 3/3] hw/pci-host/sh_pcic: Replace magic value by proper definition Philippe Mathieu-Daudé
@ 2023-10-16 9:44 ` Philippe Mathieu-Daudé
3 siblings, 0 replies; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-16 9:44 UTC (permalink / raw)
To: qemu-devel; +Cc: Yoshinori Sato, Magnus Damm, qemu-trivial
On 12/10/23 06:12, Philippe Mathieu-Daudé wrote:
> Philippe Mathieu-Daudé (3):
> hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro
> hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names
> hw/pci-host/sh_pcic: Replace magic value by proper definition
Series queued, thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-10-16 9:45 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-12 4:12 [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
2023-10-12 4:12 ` [PATCH 1/3] hw/pci-host/sh_pcic: Declare CPU QOM types using DEFINE_TYPES() macro Philippe Mathieu-Daudé
2023-10-14 15:08 ` Yoshinori Sato
2023-10-12 4:12 ` [PATCH 2/3] hw/pci-host/sh_pcic: Correct PCI host / devfn#0 function names Philippe Mathieu-Daudé
2023-10-14 15:09 ` Yoshinori Sato
2023-10-12 4:12 ` [PATCH 3/3] hw/pci-host/sh_pcic: Replace magic value by proper definition Philippe Mathieu-Daudé
2023-10-14 15:10 ` Yoshinori Sato
2023-10-16 9:44 ` [PATCH 0/3] hw/pci-host/sh_pcic: Style cleanup Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).