* [PATCH v1 0/6] Add funtions for LoongArch virt machine
@ 2022-08-11 3:09 Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 1/6] hw/loongarch: Remove vga device when loongarch init Xiaojuan Yang
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Xiaojuan Yang @ 2022-08-11 3:09 UTC (permalink / raw)
To: qemu-devel
Cc: richard.henderson, gaosong, maobibo, mark.cave-ayland, mst,
imammedo, ani, f4bug, peter.maydell
This series add some new functions such as fw_cfg dma, platform bus,
hotplug handler for LoongArch virt machine, And remove the default
vga display device, using ramfb to replace it.
Changes for v1:
1. Remove default vga device.
2. Support fw_cfg dma function.
3. Add interrupt information to FDT table.
4. Add platform bus support.
5. Add hotplug handler for machine.
6. Add RAMFB to dynamic_sysbus_devices list.
Please help review.
Thanks.
Xiaojuan Yang (6):
hw/loongarch: Remove vga device when loongarch init
hw/loongarch: Support fw_cfg dma function
hw/loongarch: Add interrupt information to FDT table
hw/loongarch: Add platform bus support
hw/loongarch: Add hotplug handler for machine
hw/loongarch: Add RAMFB to dynamic_sysbus_devices list
hw/loongarch/Kconfig | 3 +-
hw/loongarch/fw_cfg.c | 3 +-
hw/loongarch/virt.c | 101 ++++++++++++++++++++++++++++++++++--
include/hw/loongarch/virt.h | 1 +
include/hw/pci-host/ls7a.h | 5 ++
5 files changed, 107 insertions(+), 6 deletions(-)
--
2.31.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/6] hw/loongarch: Remove vga device when loongarch init
2022-08-11 3:09 [PATCH v1 0/6] Add funtions for LoongArch virt machine Xiaojuan Yang
@ 2022-08-11 3:09 ` Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 2/6] hw/loongarch: Support fw_cfg dma function Xiaojuan Yang
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Xiaojuan Yang @ 2022-08-11 3:09 UTC (permalink / raw)
To: qemu-devel
Cc: richard.henderson, gaosong, maobibo, mark.cave-ayland, mst,
imammedo, ani, f4bug, peter.maydell
Remove the vga device when loongarch machine init and
we will support other display device in the future.
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
---
hw/loongarch/Kconfig | 1 -
hw/loongarch/virt.c | 3 ---
2 files changed, 4 deletions(-)
diff --git a/hw/loongarch/Kconfig b/hw/loongarch/Kconfig
index a99aa387c3..73c52b093e 100644
--- a/hw/loongarch/Kconfig
+++ b/hw/loongarch/Kconfig
@@ -2,7 +2,6 @@ config LOONGARCH_VIRT
bool
select PCI
select PCI_EXPRESS_GENERIC_BRIDGE
- imply VGA_PCI
imply VIRTIO_VGA
imply PCI_DEVICES
select ISA_BUS
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index 5cc0b05538..b56820ecda 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -378,9 +378,6 @@ static void loongarch_devices_init(DeviceState *pch_pic, LoongArchMachineState *
pci_nic_init_nofail(nd, pci_bus, nd->model, NULL);
}
- /* VGA setup */
- pci_vga_init(pci_bus);
-
/*
* There are some invalid guest memory access.
* Create some unimplemented devices to emulate this.
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 2/6] hw/loongarch: Support fw_cfg dma function
2022-08-11 3:09 [PATCH v1 0/6] Add funtions for LoongArch virt machine Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 1/6] hw/loongarch: Remove vga device when loongarch init Xiaojuan Yang
@ 2022-08-11 3:09 ` Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 3/6] hw/loongarch: Add interrupt information to FDT table Xiaojuan Yang
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Xiaojuan Yang @ 2022-08-11 3:09 UTC (permalink / raw)
To: qemu-devel
Cc: richard.henderson, gaosong, maobibo, mark.cave-ayland, mst,
imammedo, ani, f4bug, peter.maydell
Support fw_cfg dma function for LoongArch virt machine.
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
---
hw/loongarch/Kconfig | 1 +
hw/loongarch/fw_cfg.c | 3 ++-
hw/loongarch/virt.c | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/hw/loongarch/Kconfig b/hw/loongarch/Kconfig
index 73c52b093e..1deea83626 100644
--- a/hw/loongarch/Kconfig
+++ b/hw/loongarch/Kconfig
@@ -16,3 +16,4 @@ config LOONGARCH_VIRT
select SMBIOS
select ACPI_PCI
select ACPI_HW_REDUCED
+ select FW_CFG_DMA
diff --git a/hw/loongarch/fw_cfg.c b/hw/loongarch/fw_cfg.c
index f6503d5607..f15a17416c 100644
--- a/hw/loongarch/fw_cfg.c
+++ b/hw/loongarch/fw_cfg.c
@@ -23,7 +23,8 @@ FWCfgState *loongarch_fw_cfg_init(ram_addr_t ram_size, MachineState *ms)
int max_cpus = ms->smp.max_cpus;
int smp_cpus = ms->smp.cpus;
- fw_cfg = fw_cfg_init_mem_wide(VIRT_FWCFG_BASE + 8, VIRT_FWCFG_BASE, 8, 0, NULL);
+ fw_cfg = fw_cfg_init_mem_wide(VIRT_FWCFG_BASE + 8, VIRT_FWCFG_BASE, 8,
+ VIRT_FWCFG_BASE + 16, &address_space_memory);
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index b56820ecda..4f833a2044 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -118,7 +118,7 @@ static void fdt_add_fw_cfg_node(const LoongArchMachineState *lams)
qemu_fdt_setprop_string(ms->fdt, nodename,
"compatible", "qemu,fw-cfg-mmio");
qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg",
- 2, base, 2, 0x8);
+ 2, base, 2, 0x18);
qemu_fdt_setprop(ms->fdt, nodename, "dma-coherent", NULL, 0);
g_free(nodename);
}
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 3/6] hw/loongarch: Add interrupt information to FDT table
2022-08-11 3:09 [PATCH v1 0/6] Add funtions for LoongArch virt machine Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 1/6] hw/loongarch: Remove vga device when loongarch init Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 2/6] hw/loongarch: Support fw_cfg dma function Xiaojuan Yang
@ 2022-08-11 3:09 ` Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 4/6] hw/loongarch: Add platform bus support Xiaojuan Yang
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Xiaojuan Yang @ 2022-08-11 3:09 UTC (permalink / raw)
To: qemu-devel
Cc: richard.henderson, gaosong, maobibo, mark.cave-ayland, mst,
imammedo, ani, f4bug, peter.maydell
Add interrupt information to FDT table, such as interrupt
controller info, compatiable info, etc.
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
---
hw/loongarch/virt.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index 4f833a2044..561b05d404 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -158,6 +158,34 @@ static void fdt_add_pcie_node(const LoongArchMachineState *lams)
qemu_fdt_dumpdtb(ms->fdt, lams->fdt_size);
}
+static void fdt_add_irqchip_node(LoongArchMachineState *lams)
+{
+ MachineState *ms = MACHINE(lams);
+ char *nodename;
+ uint32_t irqchip_phandle;
+
+ irqchip_phandle = qemu_fdt_alloc_phandle(ms->fdt);
+ qemu_fdt_setprop_cell(ms->fdt, "/", "interrupt-parent", irqchip_phandle);
+
+ nodename = g_strdup_printf("/intc@%" PRIx64,
+ VIRT_IOAPIC_REG_BASE);
+ qemu_fdt_add_subnode(ms->fdt, nodename);
+ qemu_fdt_setprop_cell(ms->fdt, nodename, "#interrupt-cells", 3);
+ qemu_fdt_setprop(ms->fdt, nodename, "interrupt-controller", NULL, 0);
+ qemu_fdt_setprop_cell(ms->fdt, nodename, "#address-cells", 0x2);
+ qemu_fdt_setprop_cell(ms->fdt, nodename, "#size-cells", 0x2);
+ qemu_fdt_setprop(ms->fdt, nodename, "ranges", NULL, 0);
+
+ qemu_fdt_setprop_string(ms->fdt, nodename, "compatible",
+ "loongarch,ls7a");
+
+ qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg",
+ 2, VIRT_IOAPIC_REG_BASE,
+ 2, PCH_PIC_ROUTE_ENTRY_OFFSET);
+
+ qemu_fdt_setprop_cell(ms->fdt, nodename, "phandle", irqchip_phandle);
+ g_free(nodename);
+}
#define PM_BASE 0x10080000
#define PM_SIZE 0x100
@@ -697,6 +725,7 @@ static void loongarch_init(MachineState *machine)
}
/* Initialize the IO interrupt subsystem */
loongarch_irq_init(lams);
+ fdt_add_irqchip_node(lams);
lams->machine_done.notify = virt_machine_done;
qemu_add_machine_init_done_notifier(&lams->machine_done);
fdt_add_pcie_node(lams);
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 4/6] hw/loongarch: Add platform bus support
2022-08-11 3:09 [PATCH v1 0/6] Add funtions for LoongArch virt machine Xiaojuan Yang
` (2 preceding siblings ...)
2022-08-11 3:09 ` [PATCH v1 3/6] hw/loongarch: Add interrupt information to FDT table Xiaojuan Yang
@ 2022-08-11 3:09 ` Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 5/6] hw/loongarch: Add hotplug handler for machine Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 6/6] hw/loongarch: Add RAMFB to dynamic_sysbus_devices list Xiaojuan Yang
5 siblings, 0 replies; 7+ messages in thread
From: Xiaojuan Yang @ 2022-08-11 3:09 UTC (permalink / raw)
To: qemu-devel
Cc: richard.henderson, gaosong, maobibo, mark.cave-ayland, mst,
imammedo, ani, f4bug, peter.maydell
Add platform bus support and add the bus information such as address,
size, irq number to FDT table.
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
---
hw/loongarch/Kconfig | 1 +
hw/loongarch/virt.c | 33 +++++++++++++++++++++++++++++++++
include/hw/loongarch/virt.h | 1 +
include/hw/pci-host/ls7a.h | 5 +++++
4 files changed, 40 insertions(+)
diff --git a/hw/loongarch/Kconfig b/hw/loongarch/Kconfig
index 1deea83626..fef55c5638 100644
--- a/hw/loongarch/Kconfig
+++ b/hw/loongarch/Kconfig
@@ -8,6 +8,7 @@ config LOONGARCH_VIRT
select SERIAL
select SERIAL_ISA
select VIRTIO_PCI
+ select PLATFORM_BUS
select LOONGARCH_IPI
select LOONGARCH_PCH_PIC
select LOONGARCH_PCH_MSI
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index 561b05d404..3976e8a058 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -37,6 +37,8 @@
#include "hw/mem/nvdimm.h"
#include "sysemu/device_tree.h"
#include <libfdt.h>
+#include "hw/core/sysbus-fdt.h"
+#include "hw/platform-bus.h"
static void create_fdt(LoongArchMachineState *lams)
{
@@ -346,6 +348,31 @@ static DeviceState *create_acpi_ged(DeviceState *pch_pic, LoongArchMachineState
return dev;
}
+static DeviceState *create_platform_bus(DeviceState *pch_pic)
+{
+ DeviceState *dev;
+ SysBusDevice *sysbus;
+ int i, irq;
+ MemoryRegion *sysmem = get_system_memory();
+
+ dev = qdev_new(TYPE_PLATFORM_BUS_DEVICE);
+ dev->id = g_strdup(TYPE_PLATFORM_BUS_DEVICE);
+ qdev_prop_set_uint32(dev, "num_irqs", VIRT_PLATFORM_BUS_NUM_IRQS);
+ qdev_prop_set_uint32(dev, "mmio_size", VIRT_PLATFORM_BUS_SIZE);
+ sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+
+ sysbus = SYS_BUS_DEVICE(dev);
+ for (i = 0; i < VIRT_PLATFORM_BUS_NUM_IRQS; i++) {
+ irq = VIRT_PLATFORM_BUS_IRQ - PCH_PIC_IRQ_OFFSET + i;
+ sysbus_connect_irq(sysbus, i, qdev_get_gpio_in(pch_pic, irq));
+ }
+
+ memory_region_add_subregion(sysmem,
+ VIRT_PLATFORM_BUS_BASEADDRESS,
+ sysbus_mmio_get_region(sysbus, 0));
+ return dev;
+}
+
static void loongarch_devices_init(DeviceState *pch_pic, LoongArchMachineState *lams)
{
DeviceState *gpex_dev;
@@ -421,6 +448,8 @@ static void loongarch_devices_init(DeviceState *pch_pic, LoongArchMachineState *
memory_region_add_subregion(get_system_memory(), PM_BASE, pm_mem);
/* acpi ged */
lams->acpi_ged = create_acpi_ged(pch_pic, lams);
+ /* platform bus */
+ lams->platform_bus_dev = create_platform_bus(pch_pic);
}
static void loongarch_irq_init(LoongArchMachineState *lams)
@@ -726,6 +755,10 @@ static void loongarch_init(MachineState *machine)
/* Initialize the IO interrupt subsystem */
loongarch_irq_init(lams);
fdt_add_irqchip_node(lams);
+ platform_bus_add_all_fdt_nodes(machine->fdt, "/intc",
+ VIRT_PLATFORM_BUS_BASEADDRESS,
+ VIRT_PLATFORM_BUS_SIZE,
+ VIRT_PLATFORM_BUS_IRQ);
lams->machine_done.notify = virt_machine_done;
qemu_add_machine_init_done_notifier(&lams->machine_done);
fdt_add_pcie_node(lams);
diff --git a/include/hw/loongarch/virt.h b/include/hw/loongarch/virt.h
index 92b84de1c5..64c90b80d2 100644
--- a/include/hw/loongarch/virt.h
+++ b/include/hw/loongarch/virt.h
@@ -49,6 +49,7 @@ struct LoongArchMachineState {
char *oem_table_id;
DeviceState *acpi_ged;
int fdt_size;
+ DeviceState *platform_bus_dev;
};
#define TYPE_LOONGARCH_MACHINE MACHINE_TYPE_NAME("virt")
diff --git a/include/hw/pci-host/ls7a.h b/include/hw/pci-host/ls7a.h
index cdde0af1f8..9bd875ca8b 100644
--- a/include/hw/pci-host/ls7a.h
+++ b/include/hw/pci-host/ls7a.h
@@ -42,4 +42,9 @@
#define VIRT_RTC_REG_BASE (VIRT_MISC_REG_BASE + 0x00050100)
#define VIRT_RTC_LEN 0x100
#define VIRT_SCI_IRQ (PCH_PIC_IRQ_OFFSET + 4)
+
+#define VIRT_PLATFORM_BUS_BASEADDRESS 0x16000000
+#define VIRT_PLATFORM_BUS_SIZE 0x2000000
+#define VIRT_PLATFORM_BUS_NUM_IRQS 2
+#define VIRT_PLATFORM_BUS_IRQ 69
#endif
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 5/6] hw/loongarch: Add hotplug handler for machine
2022-08-11 3:09 [PATCH v1 0/6] Add funtions for LoongArch virt machine Xiaojuan Yang
` (3 preceding siblings ...)
2022-08-11 3:09 ` [PATCH v1 4/6] hw/loongarch: Add platform bus support Xiaojuan Yang
@ 2022-08-11 3:09 ` Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 6/6] hw/loongarch: Add RAMFB to dynamic_sysbus_devices list Xiaojuan Yang
5 siblings, 0 replies; 7+ messages in thread
From: Xiaojuan Yang @ 2022-08-11 3:09 UTC (permalink / raw)
To: qemu-devel
Cc: richard.henderson, gaosong, maobibo, mark.cave-ayland, mst,
imammedo, ani, f4bug, peter.maydell
Add hotplug handler for LoongArch virt machine and now only support
the dynamic sysbus device.
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
---
hw/loongarch/virt.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index 3976e8a058..a3dd35d579 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -804,9 +804,35 @@ static void loongarch_machine_initfn(Object *obj)
lams->oem_table_id = g_strndup(ACPI_BUILD_APPNAME8, 8);
}
+static void loongarch_machine_device_plug_cb(HotplugHandler *hotplug_dev,
+ DeviceState *dev, Error **errp)
+{
+ LoongArchMachineState *lams = LOONGARCH_MACHINE(hotplug_dev);
+ MachineClass *mc = MACHINE_GET_CLASS(lams);
+
+ if (device_is_dynamic_sysbus(mc, dev)) {
+ if (lams->platform_bus_dev) {
+ platform_bus_link_device(PLATFORM_BUS_DEVICE(lams->platform_bus_dev),
+ SYS_BUS_DEVICE(dev));
+ }
+ }
+}
+
+static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
+ DeviceState *dev)
+{
+ MachineClass *mc = MACHINE_GET_CLASS(machine);
+
+ if (device_is_dynamic_sysbus(mc, dev)) {
+ return HOTPLUG_HANDLER(machine);
+ }
+ return NULL;
+}
+
static void loongarch_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc);
mc->desc = "Loongson-3A5000 LS7A1000 machine";
mc->init = loongarch_init;
@@ -819,6 +845,8 @@ static void loongarch_class_init(ObjectClass *oc, void *data)
mc->block_default_type = IF_VIRTIO;
mc->default_boot_order = "c";
mc->no_cdrom = 1;
+ mc->get_hotplug_handler = virt_machine_get_hotplug_handler;
+ hc->plug = loongarch_machine_device_plug_cb;
object_class_property_add(oc, "acpi", "OnOffAuto",
loongarch_get_acpi, loongarch_set_acpi,
@@ -834,6 +862,10 @@ static const TypeInfo loongarch_machine_types[] = {
.instance_size = sizeof(LoongArchMachineState),
.class_init = loongarch_class_init,
.instance_init = loongarch_machine_initfn,
+ .interfaces = (InterfaceInfo[]) {
+ { TYPE_HOTPLUG_HANDLER },
+ { }
+ },
}
};
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 6/6] hw/loongarch: Add RAMFB to dynamic_sysbus_devices list
2022-08-11 3:09 [PATCH v1 0/6] Add funtions for LoongArch virt machine Xiaojuan Yang
` (4 preceding siblings ...)
2022-08-11 3:09 ` [PATCH v1 5/6] hw/loongarch: Add hotplug handler for machine Xiaojuan Yang
@ 2022-08-11 3:09 ` Xiaojuan Yang
5 siblings, 0 replies; 7+ messages in thread
From: Xiaojuan Yang @ 2022-08-11 3:09 UTC (permalink / raw)
To: qemu-devel
Cc: richard.henderson, gaosong, maobibo, mark.cave-ayland, mst,
imammedo, ani, f4bug, peter.maydell
Add RAMFB device to dynamic_sysbus_devices list so that it can be
hotpluged to the machine.
Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn>
---
hw/loongarch/virt.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index a3dd35d579..1e1dc699ef 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -39,6 +39,7 @@
#include <libfdt.h>
#include "hw/core/sysbus-fdt.h"
#include "hw/platform-bus.h"
+#include "hw/display/ramfb.h"
static void create_fdt(LoongArchMachineState *lams)
{
@@ -853,6 +854,7 @@ static void loongarch_class_init(ObjectClass *oc, void *data)
NULL, NULL);
object_class_property_set_description(oc, "acpi",
"Enable ACPI");
+ machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE);
}
static const TypeInfo loongarch_machine_types[] = {
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-08-11 3:17 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-11 3:09 [PATCH v1 0/6] Add funtions for LoongArch virt machine Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 1/6] hw/loongarch: Remove vga device when loongarch init Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 2/6] hw/loongarch: Support fw_cfg dma function Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 3/6] hw/loongarch: Add interrupt information to FDT table Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 4/6] hw/loongarch: Add platform bus support Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 5/6] hw/loongarch: Add hotplug handler for machine Xiaojuan Yang
2022-08-11 3:09 ` [PATCH v1 6/6] hw/loongarch: Add RAMFB to dynamic_sysbus_devices list Xiaojuan Yang
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.