mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Rename target_phys_addr_t to hwaddr
target_phys_addr_t is unwieldly, violates the C standard (_t suffixes are
reserved) and its purpose doesn't match the name (most target_phys_addr_t
addresses are not target specific). Replace it with a finger-friendly,
standards conformant hwaddr.
Outstanding patchsets can be fixed up with the command
git rebase -i --exec 'find -name "*.[ch]"
| xargs s/target_phys_addr_t/hwaddr/g' origin
Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
committed by
Anthony Liguori
parent
50d2b4d93f
commit
a8170e5e97
@@ -32,7 +32,7 @@ mandatory for VMState fields.
|
|||||||
|
|
||||||
Don't use Linux kernel internal types like u32, __u32 or __le32.
|
Don't use Linux kernel internal types like u32, __u32 or __le32.
|
||||||
|
|
||||||
Use target_phys_addr_t for guest physical addresses except pcibus_t
|
Use hwaddr for guest physical addresses except pcibus_t
|
||||||
for PCI addresses. In addition, ram_addr_t is a QEMU internal address
|
for PCI addresses. In addition, ram_addr_t is a QEMU internal address
|
||||||
space that maps guest RAM physical addresses into an intermediate
|
space that maps guest RAM physical addresses into an intermediate
|
||||||
address space that can map to host virtual address spaces. Generally
|
address space that can map to host virtual address spaces. Generally
|
||||||
|
|||||||
@@ -474,7 +474,7 @@ void run_on_cpu(CPUArchState *env, void (*func)(void *data), void *data);
|
|||||||
/* Return the physical page corresponding to a virtual one. Use it
|
/* Return the physical page corresponding to a virtual one. Use it
|
||||||
only for debugging because no protection checks are done. Return -1
|
only for debugging because no protection checks are done. Return -1
|
||||||
if no page found. */
|
if no page found. */
|
||||||
target_phys_addr_t cpu_get_phys_page_debug(CPUArchState *env, target_ulong addr);
|
hwaddr cpu_get_phys_page_debug(CPUArchState *env, target_ulong addr);
|
||||||
|
|
||||||
/* memory API */
|
/* memory API */
|
||||||
|
|
||||||
|
|||||||
+34
-34
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
/* CPU interfaces that are target independent. */
|
/* CPU interfaces that are target independent. */
|
||||||
|
|
||||||
#include "targphys.h"
|
#include "hwaddr.h"
|
||||||
|
|
||||||
#ifndef NEED_CPU_H
|
#ifndef NEED_CPU_H
|
||||||
#include "poison.h"
|
#include "poison.h"
|
||||||
@@ -33,8 +33,8 @@ typedef uintptr_t ram_addr_t;
|
|||||||
|
|
||||||
/* memory API */
|
/* memory API */
|
||||||
|
|
||||||
typedef void CPUWriteMemoryFunc(void *opaque, target_phys_addr_t addr, uint32_t value);
|
typedef void CPUWriteMemoryFunc(void *opaque, hwaddr addr, uint32_t value);
|
||||||
typedef uint32_t CPUReadMemoryFunc(void *opaque, target_phys_addr_t addr);
|
typedef uint32_t CPUReadMemoryFunc(void *opaque, hwaddr addr);
|
||||||
|
|
||||||
void qemu_ram_remap(ram_addr_t addr, ram_addr_t length);
|
void qemu_ram_remap(ram_addr_t addr, ram_addr_t length);
|
||||||
/* This should only be used for ram local to a device. */
|
/* This should only be used for ram local to a device. */
|
||||||
@@ -49,27 +49,27 @@ int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr);
|
|||||||
ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr);
|
ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr);
|
||||||
void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev);
|
void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev);
|
||||||
|
|
||||||
void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
|
void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
|
||||||
int len, int is_write);
|
int len, int is_write);
|
||||||
static inline void cpu_physical_memory_read(target_phys_addr_t addr,
|
static inline void cpu_physical_memory_read(hwaddr addr,
|
||||||
void *buf, int len)
|
void *buf, int len)
|
||||||
{
|
{
|
||||||
cpu_physical_memory_rw(addr, buf, len, 0);
|
cpu_physical_memory_rw(addr, buf, len, 0);
|
||||||
}
|
}
|
||||||
static inline void cpu_physical_memory_write(target_phys_addr_t addr,
|
static inline void cpu_physical_memory_write(hwaddr addr,
|
||||||
const void *buf, int len)
|
const void *buf, int len)
|
||||||
{
|
{
|
||||||
cpu_physical_memory_rw(addr, (void *)buf, len, 1);
|
cpu_physical_memory_rw(addr, (void *)buf, len, 1);
|
||||||
}
|
}
|
||||||
void *cpu_physical_memory_map(target_phys_addr_t addr,
|
void *cpu_physical_memory_map(hwaddr addr,
|
||||||
target_phys_addr_t *plen,
|
hwaddr *plen,
|
||||||
int is_write);
|
int is_write);
|
||||||
void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
|
void cpu_physical_memory_unmap(void *buffer, hwaddr len,
|
||||||
int is_write, target_phys_addr_t access_len);
|
int is_write, hwaddr access_len);
|
||||||
void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque));
|
void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque));
|
||||||
void cpu_unregister_map_client(void *cookie);
|
void cpu_unregister_map_client(void *cookie);
|
||||||
|
|
||||||
bool cpu_physical_memory_is_io(target_phys_addr_t phys_addr);
|
bool cpu_physical_memory_is_io(hwaddr phys_addr);
|
||||||
|
|
||||||
/* Coalesced MMIO regions are areas where write operations can be reordered.
|
/* Coalesced MMIO regions are areas where write operations can be reordered.
|
||||||
* This usually implies that write operations are side-effect free. This allows
|
* This usually implies that write operations are side-effect free. This allows
|
||||||
@@ -78,33 +78,33 @@ bool cpu_physical_memory_is_io(target_phys_addr_t phys_addr);
|
|||||||
*/
|
*/
|
||||||
void qemu_flush_coalesced_mmio_buffer(void);
|
void qemu_flush_coalesced_mmio_buffer(void);
|
||||||
|
|
||||||
uint32_t ldub_phys(target_phys_addr_t addr);
|
uint32_t ldub_phys(hwaddr addr);
|
||||||
uint32_t lduw_le_phys(target_phys_addr_t addr);
|
uint32_t lduw_le_phys(hwaddr addr);
|
||||||
uint32_t lduw_be_phys(target_phys_addr_t addr);
|
uint32_t lduw_be_phys(hwaddr addr);
|
||||||
uint32_t ldl_le_phys(target_phys_addr_t addr);
|
uint32_t ldl_le_phys(hwaddr addr);
|
||||||
uint32_t ldl_be_phys(target_phys_addr_t addr);
|
uint32_t ldl_be_phys(hwaddr addr);
|
||||||
uint64_t ldq_le_phys(target_phys_addr_t addr);
|
uint64_t ldq_le_phys(hwaddr addr);
|
||||||
uint64_t ldq_be_phys(target_phys_addr_t addr);
|
uint64_t ldq_be_phys(hwaddr addr);
|
||||||
void stb_phys(target_phys_addr_t addr, uint32_t val);
|
void stb_phys(hwaddr addr, uint32_t val);
|
||||||
void stw_le_phys(target_phys_addr_t addr, uint32_t val);
|
void stw_le_phys(hwaddr addr, uint32_t val);
|
||||||
void stw_be_phys(target_phys_addr_t addr, uint32_t val);
|
void stw_be_phys(hwaddr addr, uint32_t val);
|
||||||
void stl_le_phys(target_phys_addr_t addr, uint32_t val);
|
void stl_le_phys(hwaddr addr, uint32_t val);
|
||||||
void stl_be_phys(target_phys_addr_t addr, uint32_t val);
|
void stl_be_phys(hwaddr addr, uint32_t val);
|
||||||
void stq_le_phys(target_phys_addr_t addr, uint64_t val);
|
void stq_le_phys(hwaddr addr, uint64_t val);
|
||||||
void stq_be_phys(target_phys_addr_t addr, uint64_t val);
|
void stq_be_phys(hwaddr addr, uint64_t val);
|
||||||
|
|
||||||
#ifdef NEED_CPU_H
|
#ifdef NEED_CPU_H
|
||||||
uint32_t lduw_phys(target_phys_addr_t addr);
|
uint32_t lduw_phys(hwaddr addr);
|
||||||
uint32_t ldl_phys(target_phys_addr_t addr);
|
uint32_t ldl_phys(hwaddr addr);
|
||||||
uint64_t ldq_phys(target_phys_addr_t addr);
|
uint64_t ldq_phys(hwaddr addr);
|
||||||
void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val);
|
void stl_phys_notdirty(hwaddr addr, uint32_t val);
|
||||||
void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val);
|
void stq_phys_notdirty(hwaddr addr, uint64_t val);
|
||||||
void stw_phys(target_phys_addr_t addr, uint32_t val);
|
void stw_phys(hwaddr addr, uint32_t val);
|
||||||
void stl_phys(target_phys_addr_t addr, uint32_t val);
|
void stl_phys(hwaddr addr, uint32_t val);
|
||||||
void stq_phys(target_phys_addr_t addr, uint64_t val);
|
void stq_phys(hwaddr addr, uint64_t val);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void cpu_physical_memory_write_rom(target_phys_addr_t addr,
|
void cpu_physical_memory_write_rom(hwaddr addr,
|
||||||
const uint8_t *buf, int len);
|
const uint8_t *buf, int len);
|
||||||
|
|
||||||
extern struct MemoryRegion io_mem_ram;
|
extern struct MemoryRegion io_mem_ram;
|
||||||
|
|||||||
+2
-2
@@ -29,7 +29,7 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include "osdep.h"
|
#include "osdep.h"
|
||||||
#include "qemu-queue.h"
|
#include "qemu-queue.h"
|
||||||
#include "targphys.h"
|
#include "hwaddr.h"
|
||||||
|
|
||||||
#ifndef TARGET_LONG_BITS
|
#ifndef TARGET_LONG_BITS
|
||||||
#error TARGET_LONG_BITS must be defined before including this header
|
#error TARGET_LONG_BITS must be defined before including this header
|
||||||
@@ -111,7 +111,7 @@ extern int CPUTLBEntry_wrong_size[sizeof(CPUTLBEntry) == (1 << CPU_TLB_ENTRY_BIT
|
|||||||
#define CPU_COMMON_TLB \
|
#define CPU_COMMON_TLB \
|
||||||
/* The meaning of the MMU modes is defined in the target code. */ \
|
/* The meaning of the MMU modes is defined in the target code. */ \
|
||||||
CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE]; \
|
CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE]; \
|
||||||
target_phys_addr_t iotlb[NB_MMU_MODES][CPU_TLB_SIZE]; \
|
hwaddr iotlb[NB_MMU_MODES][CPU_TLB_SIZE]; \
|
||||||
target_ulong tlb_flush_addr; \
|
target_ulong tlb_flush_addr; \
|
||||||
target_ulong tlb_flush_mask;
|
target_ulong tlb_flush_mask;
|
||||||
|
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ static void tlb_add_large_page(CPUArchState *env, target_ulong vaddr,
|
|||||||
is permitted. Only a single TARGET_PAGE_SIZE region is mapped, the
|
is permitted. Only a single TARGET_PAGE_SIZE region is mapped, the
|
||||||
supplied size is only used by tlb_flush_page. */
|
supplied size is only used by tlb_flush_page. */
|
||||||
void tlb_set_page(CPUArchState *env, target_ulong vaddr,
|
void tlb_set_page(CPUArchState *env, target_ulong vaddr,
|
||||||
target_phys_addr_t paddr, int prot,
|
hwaddr paddr, int prot,
|
||||||
int mmu_idx, target_ulong size)
|
int mmu_idx, target_ulong size)
|
||||||
{
|
{
|
||||||
MemoryRegionSection *section;
|
MemoryRegionSection *section;
|
||||||
@@ -246,7 +246,7 @@ void tlb_set_page(CPUArchState *env, target_ulong vaddr,
|
|||||||
target_ulong code_address;
|
target_ulong code_address;
|
||||||
uintptr_t addend;
|
uintptr_t addend;
|
||||||
CPUTLBEntry *te;
|
CPUTLBEntry *te;
|
||||||
target_phys_addr_t iotlb;
|
hwaddr iotlb;
|
||||||
|
|
||||||
assert(size >= TARGET_PAGE_SIZE);
|
assert(size >= TARGET_PAGE_SIZE);
|
||||||
if (size != TARGET_PAGE_SIZE) {
|
if (size != TARGET_PAGE_SIZE) {
|
||||||
|
|||||||
@@ -27,17 +27,17 @@ void tlb_unprotect_code_phys(CPUArchState *env, ram_addr_t ram_addr,
|
|||||||
void tlb_reset_dirty_range(CPUTLBEntry *tlb_entry, uintptr_t start,
|
void tlb_reset_dirty_range(CPUTLBEntry *tlb_entry, uintptr_t start,
|
||||||
uintptr_t length);
|
uintptr_t length);
|
||||||
MemoryRegionSection *phys_page_find(struct AddressSpaceDispatch *d,
|
MemoryRegionSection *phys_page_find(struct AddressSpaceDispatch *d,
|
||||||
target_phys_addr_t index);
|
hwaddr index);
|
||||||
void cpu_tlb_reset_dirty_all(ram_addr_t start1, ram_addr_t length);
|
void cpu_tlb_reset_dirty_all(ram_addr_t start1, ram_addr_t length);
|
||||||
void tlb_set_dirty(CPUArchState *env, target_ulong vaddr);
|
void tlb_set_dirty(CPUArchState *env, target_ulong vaddr);
|
||||||
extern int tlb_flush_count;
|
extern int tlb_flush_count;
|
||||||
|
|
||||||
/* exec.c */
|
/* exec.c */
|
||||||
void tb_flush_jmp_cache(CPUArchState *env, target_ulong addr);
|
void tb_flush_jmp_cache(CPUArchState *env, target_ulong addr);
|
||||||
target_phys_addr_t memory_region_section_get_iotlb(CPUArchState *env,
|
hwaddr memory_region_section_get_iotlb(CPUArchState *env,
|
||||||
MemoryRegionSection *section,
|
MemoryRegionSection *section,
|
||||||
target_ulong vaddr,
|
target_ulong vaddr,
|
||||||
target_phys_addr_t paddr,
|
hwaddr paddr,
|
||||||
int prot,
|
int prot,
|
||||||
target_ulong *address);
|
target_ulong *address);
|
||||||
bool memory_region_is_unassigned(MemoryRegion *mr);
|
bool memory_region_is_unassigned(MemoryRegion *mr);
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ struct elf64_sym;
|
|||||||
#if defined(CONFIG_USER_ONLY)
|
#if defined(CONFIG_USER_ONLY)
|
||||||
typedef const char *(*lookup_symbol_t)(struct syminfo *s, target_ulong orig_addr);
|
typedef const char *(*lookup_symbol_t)(struct syminfo *s, target_ulong orig_addr);
|
||||||
#else
|
#else
|
||||||
typedef const char *(*lookup_symbol_t)(struct syminfo *s, target_phys_addr_t orig_addr);
|
typedef const char *(*lookup_symbol_t)(struct syminfo *s, hwaddr orig_addr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct syminfo {
|
struct syminfo {
|
||||||
|
|||||||
+4
-4
@@ -281,7 +281,7 @@ void dma_acct_start(BlockDriverState *bs, BlockAcctCookie *cookie,
|
|||||||
bool iommu_dma_memory_valid(DMAContext *dma, dma_addr_t addr, dma_addr_t len,
|
bool iommu_dma_memory_valid(DMAContext *dma, dma_addr_t addr, dma_addr_t len,
|
||||||
DMADirection dir)
|
DMADirection dir)
|
||||||
{
|
{
|
||||||
target_phys_addr_t paddr, plen;
|
hwaddr paddr, plen;
|
||||||
|
|
||||||
#ifdef DEBUG_IOMMU
|
#ifdef DEBUG_IOMMU
|
||||||
fprintf(stderr, "dma_memory_check context=%p addr=0x" DMA_ADDR_FMT
|
fprintf(stderr, "dma_memory_check context=%p addr=0x" DMA_ADDR_FMT
|
||||||
@@ -308,7 +308,7 @@ bool iommu_dma_memory_valid(DMAContext *dma, dma_addr_t addr, dma_addr_t len,
|
|||||||
int iommu_dma_memory_rw(DMAContext *dma, dma_addr_t addr,
|
int iommu_dma_memory_rw(DMAContext *dma, dma_addr_t addr,
|
||||||
void *buf, dma_addr_t len, DMADirection dir)
|
void *buf, dma_addr_t len, DMADirection dir)
|
||||||
{
|
{
|
||||||
target_phys_addr_t paddr, plen;
|
hwaddr paddr, plen;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
#ifdef DEBUG_IOMMU
|
#ifdef DEBUG_IOMMU
|
||||||
@@ -346,7 +346,7 @@ int iommu_dma_memory_rw(DMAContext *dma, dma_addr_t addr,
|
|||||||
int iommu_dma_memory_set(DMAContext *dma, dma_addr_t addr, uint8_t c,
|
int iommu_dma_memory_set(DMAContext *dma, dma_addr_t addr, uint8_t c,
|
||||||
dma_addr_t len)
|
dma_addr_t len)
|
||||||
{
|
{
|
||||||
target_phys_addr_t paddr, plen;
|
hwaddr paddr, plen;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
#ifdef DEBUG_IOMMU
|
#ifdef DEBUG_IOMMU
|
||||||
@@ -392,7 +392,7 @@ void *iommu_dma_memory_map(DMAContext *dma, dma_addr_t addr, dma_addr_t *len,
|
|||||||
DMADirection dir)
|
DMADirection dir)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
target_phys_addr_t paddr, plen;
|
hwaddr paddr, plen;
|
||||||
void *buf;
|
void *buf;
|
||||||
|
|
||||||
if (dma->map) {
|
if (dma->map) {
|
||||||
|
|||||||
@@ -48,8 +48,8 @@ typedef uint64_t dma_addr_t;
|
|||||||
|
|
||||||
typedef int DMATranslateFunc(DMAContext *dma,
|
typedef int DMATranslateFunc(DMAContext *dma,
|
||||||
dma_addr_t addr,
|
dma_addr_t addr,
|
||||||
target_phys_addr_t *paddr,
|
hwaddr *paddr,
|
||||||
target_phys_addr_t *len,
|
hwaddr *len,
|
||||||
DMADirection dir);
|
DMADirection dir);
|
||||||
typedef void* DMAMapFunc(DMAContext *dma,
|
typedef void* DMAMapFunc(DMAContext *dma,
|
||||||
dma_addr_t addr,
|
dma_addr_t addr,
|
||||||
@@ -177,7 +177,7 @@ static inline void *dma_memory_map(DMAContext *dma,
|
|||||||
DMADirection dir)
|
DMADirection dir)
|
||||||
{
|
{
|
||||||
if (!dma_has_iommu(dma)) {
|
if (!dma_has_iommu(dma)) {
|
||||||
target_phys_addr_t xlen = *len;
|
hwaddr xlen = *len;
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
p = address_space_map(dma->as, addr, &xlen, dir == DMA_DIRECTION_FROM_DEVICE);
|
p = address_space_map(dma->as, addr, &xlen, dir == DMA_DIRECTION_FROM_DEVICE);
|
||||||
@@ -196,7 +196,7 @@ static inline void dma_memory_unmap(DMAContext *dma,
|
|||||||
DMADirection dir, dma_addr_t access_len)
|
DMADirection dir, dma_addr_t access_len)
|
||||||
{
|
{
|
||||||
if (!dma_has_iommu(dma)) {
|
if (!dma_has_iommu(dma)) {
|
||||||
address_space_unmap(dma->as, buffer, (target_phys_addr_t)len,
|
address_space_unmap(dma->as, buffer, (hwaddr)len,
|
||||||
dir == DMA_DIRECTION_FROM_DEVICE, access_len);
|
dir == DMA_DIRECTION_FROM_DEVICE, access_len);
|
||||||
} else {
|
} else {
|
||||||
iommu_dma_memory_unmap(dma, buffer, len, dir, access_len);
|
iommu_dma_memory_unmap(dma, buffer, len, dir, access_len);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#include "elf.h"
|
#include "elf.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "cpu-all.h"
|
#include "cpu-all.h"
|
||||||
#include "targphys.h"
|
#include "hwaddr.h"
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
#include "kvm.h"
|
#include "kvm.h"
|
||||||
#include "dump.h"
|
#include "dump.h"
|
||||||
@@ -66,7 +66,7 @@ typedef struct DumpState {
|
|||||||
bool have_section;
|
bool have_section;
|
||||||
bool resume;
|
bool resume;
|
||||||
size_t note_size;
|
size_t note_size;
|
||||||
target_phys_addr_t memory_offset;
|
hwaddr memory_offset;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
RAMBlock *block;
|
RAMBlock *block;
|
||||||
@@ -187,7 +187,7 @@ static int write_elf32_header(DumpState *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping,
|
static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping,
|
||||||
int phdr_index, target_phys_addr_t offset)
|
int phdr_index, hwaddr offset)
|
||||||
{
|
{
|
||||||
Elf64_Phdr phdr;
|
Elf64_Phdr phdr;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -216,7 +216,7 @@ static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping,
|
static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping,
|
||||||
int phdr_index, target_phys_addr_t offset)
|
int phdr_index, hwaddr offset)
|
||||||
{
|
{
|
||||||
Elf32_Phdr phdr;
|
Elf32_Phdr phdr;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -248,7 +248,7 @@ static int write_elf64_note(DumpState *s)
|
|||||||
{
|
{
|
||||||
Elf64_Phdr phdr;
|
Elf64_Phdr phdr;
|
||||||
int endian = s->dump_info.d_endian;
|
int endian = s->dump_info.d_endian;
|
||||||
target_phys_addr_t begin = s->memory_offset - s->note_size;
|
hwaddr begin = s->memory_offset - s->note_size;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
memset(&phdr, 0, sizeof(Elf64_Phdr));
|
memset(&phdr, 0, sizeof(Elf64_Phdr));
|
||||||
@@ -296,7 +296,7 @@ static int write_elf64_notes(DumpState *s)
|
|||||||
|
|
||||||
static int write_elf32_note(DumpState *s)
|
static int write_elf32_note(DumpState *s)
|
||||||
{
|
{
|
||||||
target_phys_addr_t begin = s->memory_offset - s->note_size;
|
hwaddr begin = s->memory_offset - s->note_size;
|
||||||
Elf32_Phdr phdr;
|
Elf32_Phdr phdr;
|
||||||
int endian = s->dump_info.d_endian;
|
int endian = s->dump_info.d_endian;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -414,11 +414,11 @@ static int write_memory(DumpState *s, RAMBlock *block, ram_addr_t start,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get the memory's offset in the vmcore */
|
/* get the memory's offset in the vmcore */
|
||||||
static target_phys_addr_t get_offset(target_phys_addr_t phys_addr,
|
static hwaddr get_offset(hwaddr phys_addr,
|
||||||
DumpState *s)
|
DumpState *s)
|
||||||
{
|
{
|
||||||
RAMBlock *block;
|
RAMBlock *block;
|
||||||
target_phys_addr_t offset = s->memory_offset;
|
hwaddr offset = s->memory_offset;
|
||||||
int64_t size_in_block, start;
|
int64_t size_in_block, start;
|
||||||
|
|
||||||
if (s->has_filter) {
|
if (s->has_filter) {
|
||||||
@@ -463,7 +463,7 @@ static target_phys_addr_t get_offset(target_phys_addr_t phys_addr,
|
|||||||
|
|
||||||
static int write_elf_loads(DumpState *s)
|
static int write_elf_loads(DumpState *s)
|
||||||
{
|
{
|
||||||
target_phys_addr_t offset;
|
hwaddr offset;
|
||||||
MemoryMapping *memory_mapping;
|
MemoryMapping *memory_mapping;
|
||||||
uint32_t phdr_index = 1;
|
uint32_t phdr_index = 1;
|
||||||
int ret;
|
int ret;
|
||||||
|
|||||||
+5
-5
@@ -103,9 +103,9 @@ void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end,
|
|||||||
void tlb_flush_page(CPUArchState *env, target_ulong addr);
|
void tlb_flush_page(CPUArchState *env, target_ulong addr);
|
||||||
void tlb_flush(CPUArchState *env, int flush_global);
|
void tlb_flush(CPUArchState *env, int flush_global);
|
||||||
void tlb_set_page(CPUArchState *env, target_ulong vaddr,
|
void tlb_set_page(CPUArchState *env, target_ulong vaddr,
|
||||||
target_phys_addr_t paddr, int prot,
|
hwaddr paddr, int prot,
|
||||||
int mmu_idx, target_ulong size);
|
int mmu_idx, target_ulong size);
|
||||||
void tb_invalidate_phys_addr(target_phys_addr_t addr);
|
void tb_invalidate_phys_addr(hwaddr addr);
|
||||||
#else
|
#else
|
||||||
static inline void tlb_flush_page(CPUArchState *env, target_ulong addr)
|
static inline void tlb_flush_page(CPUArchState *env, target_ulong addr)
|
||||||
{
|
{
|
||||||
@@ -312,10 +312,10 @@ extern uintptr_t tci_tb_ptr;
|
|||||||
|
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
|
|
||||||
struct MemoryRegion *iotlb_to_region(target_phys_addr_t index);
|
struct MemoryRegion *iotlb_to_region(hwaddr index);
|
||||||
uint64_t io_mem_read(struct MemoryRegion *mr, target_phys_addr_t addr,
|
uint64_t io_mem_read(struct MemoryRegion *mr, hwaddr addr,
|
||||||
unsigned size);
|
unsigned size);
|
||||||
void io_mem_write(struct MemoryRegion *mr, target_phys_addr_t addr,
|
void io_mem_write(struct MemoryRegion *mr, hwaddr addr,
|
||||||
uint64_t value, unsigned size);
|
uint64_t value, unsigned size);
|
||||||
|
|
||||||
void tlb_fill(CPUArchState *env1, target_ulong addr, int is_write, int mmu_idx,
|
void tlb_fill(CPUArchState *env1, target_ulong addr, int is_write, int mmu_idx,
|
||||||
|
|||||||
+2
-2
@@ -26,7 +26,7 @@ typedef struct a9mp_priv_state {
|
|||||||
uint32_t num_irq;
|
uint32_t num_irq;
|
||||||
} a9mp_priv_state;
|
} a9mp_priv_state;
|
||||||
|
|
||||||
static uint64_t a9_scu_read(void *opaque, target_phys_addr_t offset,
|
static uint64_t a9_scu_read(void *opaque, hwaddr offset,
|
||||||
unsigned size)
|
unsigned size)
|
||||||
{
|
{
|
||||||
a9mp_priv_state *s = (a9mp_priv_state *)opaque;
|
a9mp_priv_state *s = (a9mp_priv_state *)opaque;
|
||||||
@@ -57,7 +57,7 @@ static uint64_t a9_scu_read(void *opaque, target_phys_addr_t offset,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void a9_scu_write(void *opaque, target_phys_addr_t offset,
|
static void a9_scu_write(void *opaque, hwaddr offset,
|
||||||
uint64_t value, unsigned size)
|
uint64_t value, unsigned size)
|
||||||
{
|
{
|
||||||
a9mp_priv_state *s = (a9mp_priv_state *)opaque;
|
a9mp_priv_state *s = (a9mp_priv_state *)opaque;
|
||||||
|
|||||||
+6
-6
@@ -15,7 +15,7 @@
|
|||||||
/* PCI IO reads/writes, to byte-word addressable memory. */
|
/* PCI IO reads/writes, to byte-word addressable memory. */
|
||||||
/* ??? Doesn't handle multiple PCI busses. */
|
/* ??? Doesn't handle multiple PCI busses. */
|
||||||
|
|
||||||
static uint64_t bw_io_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
static uint64_t bw_io_read(void *opaque, hwaddr addr, unsigned size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
@@ -28,7 +28,7 @@ static uint64_t bw_io_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bw_io_write(void *opaque, target_phys_addr_t addr,
|
static void bw_io_write(void *opaque, hwaddr addr,
|
||||||
uint64_t val, unsigned size)
|
uint64_t val, unsigned size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
@@ -57,14 +57,14 @@ const MemoryRegionOps alpha_pci_bw_io_ops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* PCI config space reads/writes, to byte-word addressable memory. */
|
/* PCI config space reads/writes, to byte-word addressable memory. */
|
||||||
static uint64_t bw_conf1_read(void *opaque, target_phys_addr_t addr,
|
static uint64_t bw_conf1_read(void *opaque, hwaddr addr,
|
||||||
unsigned size)
|
unsigned size)
|
||||||
{
|
{
|
||||||
PCIBus *b = opaque;
|
PCIBus *b = opaque;
|
||||||
return pci_data_read(b, addr, size);
|
return pci_data_read(b, addr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bw_conf1_write(void *opaque, target_phys_addr_t addr,
|
static void bw_conf1_write(void *opaque, hwaddr addr,
|
||||||
uint64_t val, unsigned size)
|
uint64_t val, unsigned size)
|
||||||
{
|
{
|
||||||
PCIBus *b = opaque;
|
PCIBus *b = opaque;
|
||||||
@@ -83,12 +83,12 @@ const MemoryRegionOps alpha_pci_conf1_ops = {
|
|||||||
|
|
||||||
/* PCI/EISA Interrupt Acknowledge Cycle. */
|
/* PCI/EISA Interrupt Acknowledge Cycle. */
|
||||||
|
|
||||||
static uint64_t iack_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
static uint64_t iack_read(void *opaque, hwaddr addr, unsigned size)
|
||||||
{
|
{
|
||||||
return pic_read_irq(isa_pic);
|
return pic_read_irq(isa_pic);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void special_write(void *opaque, target_phys_addr_t addr,
|
static void special_write(void *opaque, hwaddr addr,
|
||||||
uint64_t val, unsigned size)
|
uint64_t val, unsigned size)
|
||||||
{
|
{
|
||||||
qemu_log("pci: special write cycle");
|
qemu_log("pci: special write cycle");
|
||||||
|
|||||||
+6
-6
@@ -70,7 +70,7 @@ static void cpu_irq_change(CPUAlphaState *env, uint64_t req)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t cchip_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
static uint64_t cchip_read(void *opaque, hwaddr addr, unsigned size)
|
||||||
{
|
{
|
||||||
CPUAlphaState *env = cpu_single_env;
|
CPUAlphaState *env = cpu_single_env;
|
||||||
TyphoonState *s = opaque;
|
TyphoonState *s = opaque;
|
||||||
@@ -203,13 +203,13 @@ static uint64_t cchip_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t dchip_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
static uint64_t dchip_read(void *opaque, hwaddr addr, unsigned size)
|
||||||
{
|
{
|
||||||
/* Skip this. It's all related to DRAM timing and setup. */
|
/* Skip this. It's all related to DRAM timing and setup. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t pchip_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
static uint64_t pchip_read(void *opaque, hwaddr addr, unsigned size)
|
||||||
{
|
{
|
||||||
TyphoonState *s = opaque;
|
TyphoonState *s = opaque;
|
||||||
uint64_t ret = 0;
|
uint64_t ret = 0;
|
||||||
@@ -306,7 +306,7 @@ static uint64_t pchip_read(void *opaque, target_phys_addr_t addr, unsigned size)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cchip_write(void *opaque, target_phys_addr_t addr,
|
static void cchip_write(void *opaque, hwaddr addr,
|
||||||
uint64_t v32, unsigned size)
|
uint64_t v32, unsigned size)
|
||||||
{
|
{
|
||||||
TyphoonState *s = opaque;
|
TyphoonState *s = opaque;
|
||||||
@@ -463,13 +463,13 @@ static void cchip_write(void *opaque, target_phys_addr_t addr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dchip_write(void *opaque, target_phys_addr_t addr,
|
static void dchip_write(void *opaque, hwaddr addr,
|
||||||
uint64_t val, unsigned size)
|
uint64_t val, unsigned size)
|
||||||
{
|
{
|
||||||
/* Skip this. It's all related to DRAM timing and setup. */
|
/* Skip this. It's all related to DRAM timing and setup. */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pchip_write(void *opaque, target_phys_addr_t addr,
|
static void pchip_write(void *opaque, hwaddr addr,
|
||||||
uint64_t v32, unsigned size)
|
uint64_t v32, unsigned size)
|
||||||
{
|
{
|
||||||
TyphoonState *s = opaque;
|
TyphoonState *s = opaque;
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ static void an5206_init(QEMUMachineInitArgs *args)
|
|||||||
CPUM68KState *env;
|
CPUM68KState *env;
|
||||||
int kernel_size;
|
int kernel_size;
|
||||||
uint64_t elf_entry;
|
uint64_t elf_entry;
|
||||||
target_phys_addr_t entry;
|
hwaddr entry;
|
||||||
MemoryRegion *address_space_mem = get_system_memory();
|
MemoryRegion *address_space_mem = get_system_memory();
|
||||||
MemoryRegion *ram = g_new(MemoryRegion, 1);
|
MemoryRegion *ram = g_new(MemoryRegion, 1);
|
||||||
MemoryRegion *sram = g_new(MemoryRegion, 1);
|
MemoryRegion *sram = g_new(MemoryRegion, 1);
|
||||||
|
|||||||
+12
-12
@@ -87,7 +87,7 @@ typedef struct APBState {
|
|||||||
|
|
||||||
static void pci_apb_set_irq(void *opaque, int irq_num, int level);
|
static void pci_apb_set_irq(void *opaque, int irq_num, int level);
|
||||||
|
|
||||||
static void apb_config_writel (void *opaque, target_phys_addr_t addr,
|
static void apb_config_writel (void *opaque, hwaddr addr,
|
||||||
uint64_t val, unsigned size)
|
uint64_t val, unsigned size)
|
||||||
{
|
{
|
||||||
APBState *s = opaque;
|
APBState *s = opaque;
|
||||||
@@ -152,7 +152,7 @@ static void apb_config_writel (void *opaque, target_phys_addr_t addr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t apb_config_readl (void *opaque,
|
static uint64_t apb_config_readl (void *opaque,
|
||||||
target_phys_addr_t addr, unsigned size)
|
hwaddr addr, unsigned size)
|
||||||
{
|
{
|
||||||
APBState *s = opaque;
|
APBState *s = opaque;
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
@@ -212,7 +212,7 @@ static const MemoryRegionOps apb_config_ops = {
|
|||||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void apb_pci_config_write(void *opaque, target_phys_addr_t addr,
|
static void apb_pci_config_write(void *opaque, hwaddr addr,
|
||||||
uint64_t val, unsigned size)
|
uint64_t val, unsigned size)
|
||||||
{
|
{
|
||||||
APBState *s = opaque;
|
APBState *s = opaque;
|
||||||
@@ -222,7 +222,7 @@ static void apb_pci_config_write(void *opaque, target_phys_addr_t addr,
|
|||||||
pci_data_write(s->bus, addr, val, size);
|
pci_data_write(s->bus, addr, val, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t apb_pci_config_read(void *opaque, target_phys_addr_t addr,
|
static uint64_t apb_pci_config_read(void *opaque, hwaddr addr,
|
||||||
unsigned size)
|
unsigned size)
|
||||||
{
|
{
|
||||||
uint32_t ret;
|
uint32_t ret;
|
||||||
@@ -234,25 +234,25 @@ static uint64_t apb_pci_config_read(void *opaque, target_phys_addr_t addr,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_apb_iowriteb (void *opaque, target_phys_addr_t addr,
|
static void pci_apb_iowriteb (void *opaque, hwaddr addr,
|
||||||
uint32_t val)
|
uint32_t val)
|
||||||
{
|
{
|
||||||
cpu_outb(addr & IOPORTS_MASK, val);
|
cpu_outb(addr & IOPORTS_MASK, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_apb_iowritew (void *opaque, target_phys_addr_t addr,
|
static void pci_apb_iowritew (void *opaque, hwaddr addr,
|
||||||
uint32_t val)
|
uint32_t val)
|
||||||
{
|
{
|
||||||
cpu_outw(addr & IOPORTS_MASK, bswap16(val));
|
cpu_outw(addr & IOPORTS_MASK, bswap16(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_apb_iowritel (void *opaque, target_phys_addr_t addr,
|
static void pci_apb_iowritel (void *opaque, hwaddr addr,
|
||||||
uint32_t val)
|
uint32_t val)
|
||||||
{
|
{
|
||||||
cpu_outl(addr & IOPORTS_MASK, bswap32(val));
|
cpu_outl(addr & IOPORTS_MASK, bswap32(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t pci_apb_ioreadb (void *opaque, target_phys_addr_t addr)
|
static uint32_t pci_apb_ioreadb (void *opaque, hwaddr addr)
|
||||||
{
|
{
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
|
|
||||||
@@ -260,7 +260,7 @@ static uint32_t pci_apb_ioreadb (void *opaque, target_phys_addr_t addr)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t pci_apb_ioreadw (void *opaque, target_phys_addr_t addr)
|
static uint32_t pci_apb_ioreadw (void *opaque, hwaddr addr)
|
||||||
{
|
{
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ static uint32_t pci_apb_ioreadw (void *opaque, target_phys_addr_t addr)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t pci_apb_ioreadl (void *opaque, target_phys_addr_t addr)
|
static uint32_t pci_apb_ioreadl (void *opaque, hwaddr addr)
|
||||||
{
|
{
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
|
|
||||||
@@ -351,8 +351,8 @@ static int apb_pci_bridge_initfn(PCIDevice *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PCIBus *pci_apb_init(target_phys_addr_t special_base,
|
PCIBus *pci_apb_init(hwaddr special_base,
|
||||||
target_phys_addr_t mem_base,
|
hwaddr mem_base,
|
||||||
qemu_irq *ivec_irqs, PCIBus **bus2, PCIBus **bus3,
|
qemu_irq *ivec_irqs, PCIBus **bus2, PCIBus **bus3,
|
||||||
qemu_irq **pbm_irqs)
|
qemu_irq **pbm_irqs)
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
|
|
||||||
PCIBus *pci_apb_init(target_phys_addr_t special_base,
|
PCIBus *pci_apb_init(hwaddr special_base,
|
||||||
target_phys_addr_t mem_base,
|
hwaddr mem_base,
|
||||||
qemu_irq *ivec_irqs, PCIBus **bus2, PCIBus **bus3,
|
qemu_irq *ivec_irqs, PCIBus **bus2, PCIBus **bus3,
|
||||||
qemu_irq **pbm_irqs);
|
qemu_irq **pbm_irqs);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -630,25 +630,25 @@ static void apic_timer(void *opaque)
|
|||||||
apic_timer_update(s, s->next_time);
|
apic_timer_update(s, s->next_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t apic_mem_readb(void *opaque, target_phys_addr_t addr)
|
static uint32_t apic_mem_readb(void *opaque, hwaddr addr)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t apic_mem_readw(void *opaque, target_phys_addr_t addr)
|
static uint32_t apic_mem_readw(void *opaque, hwaddr addr)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void apic_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
|
static void apic_mem_writeb(void *opaque, hwaddr addr, uint32_t val)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void apic_mem_writew(void *opaque, target_phys_addr_t addr, uint32_t val)
|
static void apic_mem_writew(void *opaque, hwaddr addr, uint32_t val)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t apic_mem_readl(void *opaque, target_phys_addr_t addr)
|
static uint32_t apic_mem_readl(void *opaque, hwaddr addr)
|
||||||
{
|
{
|
||||||
DeviceState *d;
|
DeviceState *d;
|
||||||
APICCommonState *s;
|
APICCommonState *s;
|
||||||
@@ -732,7 +732,7 @@ static uint32_t apic_mem_readl(void *opaque, target_phys_addr_t addr)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void apic_send_msi(target_phys_addr_t addr, uint32_t data)
|
static void apic_send_msi(hwaddr addr, uint32_t data)
|
||||||
{
|
{
|
||||||
uint8_t dest = (addr & MSI_ADDR_DEST_ID_MASK) >> MSI_ADDR_DEST_ID_SHIFT;
|
uint8_t dest = (addr & MSI_ADDR_DEST_ID_MASK) >> MSI_ADDR_DEST_ID_SHIFT;
|
||||||
uint8_t vector = (data & MSI_DATA_VECTOR_MASK) >> MSI_DATA_VECTOR_SHIFT;
|
uint8_t vector = (data & MSI_DATA_VECTOR_MASK) >> MSI_DATA_VECTOR_SHIFT;
|
||||||
@@ -743,7 +743,7 @@ static void apic_send_msi(target_phys_addr_t addr, uint32_t data)
|
|||||||
apic_deliver_irq(dest, dest_mode, delivery, vector, trigger_mode);
|
apic_deliver_irq(dest, dest_mode, delivery, vector, trigger_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void apic_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
|
static void apic_mem_writel(void *opaque, hwaddr addr, uint32_t val)
|
||||||
{
|
{
|
||||||
DeviceState *d;
|
DeviceState *d;
|
||||||
APICCommonState *s;
|
APICCommonState *s;
|
||||||
|
|||||||
+1
-1
@@ -89,7 +89,7 @@ void apic_enable_tpr_access_reporting(DeviceState *d, bool enable)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void apic_enable_vapic(DeviceState *d, target_phys_addr_t paddr)
|
void apic_enable_vapic(DeviceState *d, hwaddr paddr)
|
||||||
{
|
{
|
||||||
APICCommonState *s = DO_UPCAST(APICCommonState, busdev.qdev, d);
|
APICCommonState *s = DO_UPCAST(APICCommonState, busdev.qdev, d);
|
||||||
APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
|
APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user