Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
512dd635
Commit
512dd635
authored
Jul 11, 2004
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC64]: Add CMT register defines.
parent
afb7238d
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
189 additions
and
117 deletions
+189
-117
include/asm-sparc64/asi.h
include/asm-sparc64/asi.h
+130
-117
include/asm-sparc64/cmt.h
include/asm-sparc64/cmt.h
+59
-0
No files found.
include/asm-sparc64/asi.h
View file @
512dd635
...
@@ -18,21 +18,22 @@
...
@@ -18,21 +18,22 @@
#define ASI_S 0x81
/* Secondary, implicit */
#define ASI_S 0x81
/* Secondary, implicit */
#define ASI_PNF 0x82
/* Primary, no fault */
#define ASI_PNF 0x82
/* Primary, no fault */
#define ASI_SNF 0x83
/* Secondary, no fault */
#define ASI_SNF 0x83
/* Secondary, no fault */
#define ASI_PL 0x88
/* Primary, implicit, l
ittle
endian */
#define ASI_PL 0x88
/* Primary, implicit, l
-
endian */
#define ASI_SL 0x89
/* Secondary, implicit, l
ittle
endian */
#define ASI_SL 0x89
/* Secondary, implicit, l
-
endian */
#define ASI_PNFL 0x8a
/* Primary, no fault, l
ittle
endian */
#define ASI_PNFL 0x8a
/* Primary, no fault, l
-
endian */
#define ASI_SNFL 0x8b
/* Secondary, no fault, l
ittle
endian */
#define ASI_SNFL 0x8b
/* Secondary, no fault, l
-
endian */
/* SpitFire and later extended ASIs. The "(III)" marker designates
/* SpitFire and later extended ASIs. The "(III)" marker designates
* UltraSparc-III specific ASIs.
* UltraSparc-III and later specific ASIs. The "(CMT)" marker designates
* Chip Multi Threading specific ASIs.
*/
*/
#define ASI_PHYS_USE_EC 0x14
/* PADDR, E-cachable */
#define ASI_PHYS_USE_EC 0x14
/* PADDR, E-cachable */
#define ASI_PHYS_BYPASS_EC_E 0x15
/* PADDR, E-bit */
#define ASI_PHYS_BYPASS_EC_E 0x15
/* PADDR, E-bit */
#define ASI_PHYS_USE_EC_L 0x1c
/* PADDR, E-cachable, little endian
*/
#define ASI_PHYS_USE_EC_L 0x1c
/* PADDR, E-cachable, little endian*/
#define ASI_PHYS_BYPASS_EC_E_L 0x1d
/* PADDR, E-bit, little endian */
#define ASI_PHYS_BYPASS_EC_E_L 0x1d
/* PADDR, E-bit, little endian */
#define ASI_NUCLEUS_QUAD_LDD 0x24
/* Cachable, qword load */
#define ASI_NUCLEUS_QUAD_LDD 0x24
/* Cachable, qword load */
#define ASI_NUCLEUS_QUAD_LDD_L 0x2c
/* Cachable, qword load, l
ittle
endian */
#define ASI_NUCLEUS_QUAD_LDD_L 0x2c
/* Cachable, qword load, l
-
endian */
#define ASI_PCACHE_DATA_STATUS 0x30
/* (III) PCache data stat
us
RAM diag */
#define ASI_PCACHE_DATA_STATUS 0x30
/* (III) PCache data stat RAM diag */
#define ASI_PCACHE_DATA 0x31
/* (III) PCache data RAM diag */
#define ASI_PCACHE_DATA 0x31
/* (III) PCache data RAM diag */
#define ASI_PCACHE_TAG 0x32
/* (III) PCache tag RAM diag */
#define ASI_PCACHE_TAG 0x32
/* (III) PCache tag RAM diag */
#define ASI_PCACHE_SNOOP_TAG 0x33
/* (III) PCache snoop tag RAM diag */
#define ASI_PCACHE_SNOOP_TAG 0x33
/* (III) PCache snoop tag RAM diag */
...
@@ -41,15 +42,24 @@
...
@@ -41,15 +42,24 @@
#define ASI_WCACHE_DATA 0x39
/* (III) WCache data RAM diag */
#define ASI_WCACHE_DATA 0x39
/* (III) WCache data RAM diag */
#define ASI_WCACHE_TAG 0x3a
/* (III) WCache tag RAM diag */
#define ASI_WCACHE_TAG 0x3a
/* (III) WCache tag RAM diag */
#define ASI_WCACHE_SNOOP_TAG 0x3b
/* (III) WCache snoop tag RAM diag */
#define ASI_WCACHE_SNOOP_TAG 0x3b
/* (III) WCache snoop tag RAM diag */
#define ASI_QUAD_LDD_PHYS_L 0x3c
/* (III+) PADDR, qw
ord load, little
endian */
#define ASI_QUAD_LDD_PHYS_L 0x3c
/* (III+) PADDR, qw
-load, l-
endian */
#define ASI_SRAM_FAST_INIT 0x40
/* (III+) Fast SRAM init */
#define ASI_SRAM_FAST_INIT 0x40
/* (III+) Fast SRAM init */
#define ASI_CORE_AVAILABLE 0x41
/* (CMT) LP Available */
#define ASI_CORE_ENABLE_STAT 0x41
/* (CMT) LP Enable Status */
#define ASI_CORE_ENABLE 0x41
/* (CMT) LP Enable RW */
#define ASI_XIR_STEERING 0x41
/* (CMT) XIR Steering RW */
#define ASI_CORE_RUNNING_RW 0x41
/* (CMT) LP Running RW */
#define ASI_CORE_RUNNING_W1S 0x41
/* (CMT) LP Running Write-One Set */
#define ASI_CORE_RUNNING_W1C 0x41
/* (CMT) LP Running Write-One Clr */
#define ASI_CORE_RUNNING_STAT 0x41
/* (CMT) LP Running Status */
#define ASI_CMT_ERROR_STEERING 0x41
/* (CMT) Error Steering RW */
#define ASI_DCACHE_INVALIDATE 0x42
/* (III) DCache Invalidate diag */
#define ASI_DCACHE_INVALIDATE 0x42
/* (III) DCache Invalidate diag */
#define ASI_DCACHE_UTAG 0x43
/* (III) DCache uTag diag */
#define ASI_DCACHE_UTAG 0x43
/* (III) DCache uTag diag */
#define ASI_DCACHE_SNOOP_TAG 0x44
/* (III) DCache snoop tag RAM diag */
#define ASI_DCACHE_SNOOP_TAG 0x44
/* (III) DCache snoop tag RAM diag */
#define ASI_LSU_CONTROL 0x45
/* Load-store control unit */
#define ASI_LSU_CONTROL 0x45
/* Load-store control unit */
#define ASI_DCU_CONTROL_REG 0x45
/* (III) DCache Unit Control
Register
*/
#define ASI_DCU_CONTROL_REG 0x45
/* (III) DCache Unit Control
reg
*/
#define ASI_DCACHE_DATA 0x46
/* D
ata cache data-ram diag access
*/
#define ASI_DCACHE_DATA 0x46
/* D
Cache data-ram diag access
*/
#define ASI_DCACHE_TAG 0x47
/* D
ata cache tag/valid ram diag access
*/
#define ASI_DCACHE_TAG 0x47
/* D
cache tag/valid ram diag access
*/
#define ASI_INTR_DISPATCH_STAT 0x48
/* IRQ vector dispatch status */
#define ASI_INTR_DISPATCH_STAT 0x48
/* IRQ vector dispatch status */
#define ASI_INTR_RECEIVE 0x49
/* IRQ vector receive status */
#define ASI_INTR_RECEIVE 0x49
/* IRQ vector receive status */
#define ASI_UPA_CONFIG 0x4a
/* UPA config space */
#define ASI_UPA_CONFIG 0x4a
/* UPA config space */
...
@@ -59,69 +69,72 @@
...
@@ -59,69 +69,72 @@
#define ASI_ESTATE_ERROR_EN 0x4b
/* E-cache error enable space */
#define ASI_ESTATE_ERROR_EN 0x4b
/* E-cache error enable space */
#define ASI_AFSR 0x4c
/* Async fault status register */
#define ASI_AFSR 0x4c
/* Async fault status register */
#define ASI_AFAR 0x4d
/* Async fault address register */
#define ASI_AFAR 0x4d
/* Async fault address register */
#define ASI_EC_TAG_DATA 0x4e
/* E-cache tag/valid ram diag acc
ess
*/
#define ASI_EC_TAG_DATA 0x4e
/* E-cache tag/valid ram diag acc */
#define ASI_IMMU 0x50
/* Insn-MMU main register space */
#define ASI_IMMU 0x50
/* Insn-MMU main register space */
#define ASI_IMMU_TSB_8KB_PTR 0x51
/* Insn-MMU 8KB TSB pointer reg
ister
*/
#define ASI_IMMU_TSB_8KB_PTR 0x51
/* Insn-MMU 8KB TSB pointer reg */
#define ASI_IMMU_TSB_64KB_PTR 0x52
/* Insn-MMU 64KB TSB pointer reg
ister
*/
#define ASI_IMMU_TSB_64KB_PTR 0x52
/* Insn-MMU 64KB TSB pointer reg */
#define ASI_ITLB_DATA_IN 0x54
/* Insn-MMU TLB data in reg
ister
*/
#define ASI_ITLB_DATA_IN 0x54
/* Insn-MMU TLB data in reg */
#define ASI_ITLB_DATA_ACCESS 0x55
/* Insn-MMU TLB data access reg
ister
*/
#define ASI_ITLB_DATA_ACCESS 0x55
/* Insn-MMU TLB data access reg */
#define ASI_ITLB_TAG_READ 0x56
/* Insn-MMU TLB tag read reg
ister
*/
#define ASI_ITLB_TAG_READ 0x56
/* Insn-MMU TLB tag read reg */
#define ASI_IMMU_DEMAP 0x57
/* Insn-MMU TLB demap */
#define ASI_IMMU_DEMAP 0x57
/* Insn-MMU TLB demap */
#define ASI_DMMU 0x58
/* Data-MMU main register space */
#define ASI_DMMU 0x58
/* Data-MMU main register space */
#define ASI_DMMU_TSB_8KB_PTR 0x59
/* Data-MMU 8KB TSB pointer reg
ister
*/
#define ASI_DMMU_TSB_8KB_PTR 0x59
/* Data-MMU 8KB TSB pointer reg */
#define ASI_DMMU_TSB_64KB_PTR 0x5a
/* Data-MMU 16KB TSB pointer reg
ister
*/
#define ASI_DMMU_TSB_64KB_PTR 0x5a
/* Data-MMU 16KB TSB pointer reg */
#define ASI_DMMU_TSB_DIRECT_PTR 0x5b
/* Data-MMU TSB direct pointer reg
ister
*/
#define ASI_DMMU_TSB_DIRECT_PTR 0x5b
/* Data-MMU TSB direct pointer reg */
#define ASI_DTLB_DATA_IN 0x5c
/* Data-MMU TLB data in reg
ister
*/
#define ASI_DTLB_DATA_IN 0x5c
/* Data-MMU TLB data in reg */
#define ASI_DTLB_DATA_ACCESS 0x5d
/* Data-MMU TLB data access reg
ister
*/
#define ASI_DTLB_DATA_ACCESS 0x5d
/* Data-MMU TLB data access reg */
#define ASI_DTLB_TAG_READ 0x5e
/* Data-MMU TLB tag read reg
ister
*/
#define ASI_DTLB_TAG_READ 0x5e
/* Data-MMU TLB tag read reg */
#define ASI_DMMU_DEMAP 0x5f
/* Data-MMU TLB demap */
#define ASI_DMMU_DEMAP 0x5f
/* Data-MMU TLB demap */
#define ASI_IIU_INST_TRAP 0x60
/* (III) Instruction Breakpoint register */
#define ASI_IIU_INST_TRAP 0x60
/* (III) Instruction Breakpoint */
#define ASI_IC_INSTR 0x66
/* Insn cache instrucion ram diag access */
#define ASI_INTR_ID 0x63
/* (CMT) Interrupt ID register */
#define ASI_IC_TAG 0x67
/* Insn cache tag/valid ram diag access */
#define ASI_CORE_ID 0x63
/* (CMT) LP ID register */
#define ASI_IC_STAG 0x68
/* (III) Insn cache snoop tag ram diag */
#define ASI_CESR_ID 0x63
/* (CMT) CESR ID register */
#define ASI_IC_PRE_DECODE 0x6e
/* Insn cache pre-decode ram diag access */
#define ASI_IC_INSTR 0x66
/* Insn cache instrucion ram diag */
#define ASI_IC_NEXT_FIELD 0x6f
/* Insn cache next-field ram diag access */
#define ASI_IC_TAG 0x67
/* Insn cache tag/valid ram diag */
#define ASI_BRPRED_ARRAY 0x6f
/* (III) Branch Prediction RAM diag */
#define ASI_IC_STAG 0x68
/* (III) Insn cache snoop tag ram */
#define ASI_IC_PRE_DECODE 0x6e
/* Insn cache pre-decode ram diag */
#define ASI_IC_NEXT_FIELD 0x6f
/* Insn cache next-field ram diag */
#define ASI_BRPRED_ARRAY 0x6f
/* (III) Branch Prediction RAM diag*/
#define ASI_BLK_AIUP 0x70
/* Primary, user, block load/store */
#define ASI_BLK_AIUP 0x70
/* Primary, user, block load/store */
#define ASI_BLK_AIUS 0x71
/* Secondary, user, block l
oad/store
*/
#define ASI_BLK_AIUS 0x71
/* Secondary, user, block l
d/st
*/
#define ASI_MCU_CTRL_REG 0x72
/* (III) Memory controller reg
ister
s */
#define ASI_MCU_CTRL_REG 0x72
/* (III) Memory controller regs */
#define ASI_EC_DATA 0x74
/* (III) E-cache data staging reg
ister
*/
#define ASI_EC_DATA 0x74
/* (III) E-cache data staging reg */
#define ASI_EC_CTRL 0x75
/* (III) E-cache control reg
ister
*/
#define ASI_EC_CTRL 0x75
/* (III) E-cache control reg */
#define ASI_EC_W 0x76
/* E-cache diag write access */
#define ASI_EC_W 0x76
/* E-cache diag write access */
#define ASI_UDB_ERROR_W 0x77
/* External UDB error reg
isters write
*/
#define ASI_UDB_ERROR_W 0x77
/* External UDB error reg
s W
*/
#define ASI_UDB_CONTROL_W 0x77
/* External UDB control reg
isters write
*/
#define ASI_UDB_CONTROL_W 0x77
/* External UDB control reg
s W
*/
#define ASI_INTR_W 0x77
/* IRQ vector dispatch write */
#define ASI_INTR_W 0x77
/* IRQ vector dispatch write */
#define ASI_INTR_DATAN_W 0x77
/* (III) Out
going
irq vector data reg N */
#define ASI_INTR_DATAN_W 0x77
/* (III) Out irq vector data reg N */
#define ASI_INTR_DISPATCH_W 0x77
/* (III) Interrupt vector dispatch */
#define ASI_INTR_DISPATCH_W 0x77
/* (III) Interrupt vector dispatch */
#define ASI_BLK_AIUPL 0x78
/* Primary, user, little, blk ld/st
*/
#define ASI_BLK_AIUPL 0x78
/* Primary, user, little, blk ld/st*/
#define ASI_BLK_AIUSL 0x79
/* Secondary, user, little, blk ld/st
*/
#define ASI_BLK_AIUSL 0x79
/* Secondary, user, little, blk ld/st*/
#define ASI_EC_R 0x7e
/* E-cache diag read access */
#define ASI_EC_R 0x7e
/* E-cache diag read access */
#define ASI_UDBH_ERROR_R 0x7f
/* External UDB error reg
isters rea
d hi */
#define ASI_UDBH_ERROR_R 0x7f
/* External UDB error reg
s r
d hi */
#define ASI_UDBL_ERROR_R 0x7f
/* External UDB error reg
isters rea
d low */
#define ASI_UDBL_ERROR_R 0x7f
/* External UDB error reg
s r
d low */
#define ASI_UDBH_CONTROL_R 0x7f
/* External UDB control reg
isters rea
d hi */
#define ASI_UDBH_CONTROL_R 0x7f
/* External UDB control reg
s r
d hi */
#define ASI_UDBL_CONTROL_R 0x7f
/* External UDB control reg
isters read low
*/
#define ASI_UDBL_CONTROL_R 0x7f
/* External UDB control reg
s rd low
*/
#define ASI_INTR_R 0x7f
/* IRQ vector dispatch read */
#define ASI_INTR_R 0x7f
/* IRQ vector dispatch read */
#define ASI_INTR_DATAN_R 0x7f
/* (III) In
coming
irq vector data reg N */
#define ASI_INTR_DATAN_R 0x7f
/* (III) In irq vector data reg N */
#define ASI_PST8_P 0xc0
/* Primary, 8 8-bit, partial */
#define ASI_PST8_P 0xc0
/* Primary, 8 8-bit, partial */
#define ASI_PST8_S 0xc1
/* Secondary, 8 8-bit, partial */
#define ASI_PST8_S 0xc1
/* Secondary, 8 8-bit, partial */
#define ASI_PST16_P 0xc2
/* Primary, 4 16-bit, partial */
#define ASI_PST16_P 0xc2
/* Primary, 4 16-bit, partial */
#define ASI_PST16_S 0xc3
/* Secondary, 4 16-bit, partial */
#define ASI_PST16_S 0xc3
/* Secondary, 4 16-bit, partial */
#define ASI_PST32_P 0xc4
/* Primary, 2 32-bit, partial */
#define ASI_PST32_P 0xc4
/* Primary, 2 32-bit, partial */
#define ASI_PST32_S 0xc5
/* Secondary, 2 32-bit, partial */
#define ASI_PST32_S 0xc5
/* Secondary, 2 32-bit, partial */
#define ASI_PST8_PL 0xc8
/* Primary, 8 8-bit, partial,
little
*/
#define ASI_PST8_PL 0xc8
/* Primary, 8 8-bit, partial,
L
*/
#define ASI_PST8_SL 0xc9
/* Secondary, 8 8-bit, partial,
little
*/
#define ASI_PST8_SL 0xc9
/* Secondary, 8 8-bit, partial,
L
*/
#define ASI_PST16_PL 0xca
/* Primary, 4 16-bit, partial,
little
*/
#define ASI_PST16_PL 0xca
/* Primary, 4 16-bit, partial,
L
*/
#define ASI_PST16_SL 0xcb
/* Secondary, 4 16-bit, partial,
little
*/
#define ASI_PST16_SL 0xcb
/* Secondary, 4 16-bit, partial,
L
*/
#define ASI_PST32_PL 0xcc
/* Primary, 2 32-bit, partial,
little
*/
#define ASI_PST32_PL 0xcc
/* Primary, 2 32-bit, partial,
L
*/
#define ASI_PST32_SL 0xcd
/* Secondary, 2 32-bit, partial,
little
*/
#define ASI_PST32_SL 0xcd
/* Secondary, 2 32-bit, partial,
L
*/
#define ASI_FL8_P 0xd0
/* Primary, 1 8-bit, fpu ld/st */
#define ASI_FL8_P 0xd0
/* Primary, 1 8-bit, fpu ld/st */
#define ASI_FL8_S 0xd1
/* Secondary, 1 8-bit, fpu ld/st */
#define ASI_FL8_S 0xd1
/* Secondary, 1 8-bit, fpu ld/st */
#define ASI_FL16_P 0xd2
/* Primary, 1 16-bit, fpu ld/st */
#define ASI_FL16_P 0xd2
/* Primary, 1 16-bit, fpu ld/st */
#define ASI_FL16_S 0xd3
/* Secondary, 1 16-bit, fpu ld/st */
#define ASI_FL16_S 0xd3
/* Secondary, 1 16-bit, fpu ld/st */
#define ASI_FL8_PL 0xd8
/* Primary, 1 8-bit, fpu ld/st,
little
*/
#define ASI_FL8_PL 0xd8
/* Primary, 1 8-bit, fpu ld/st,
L
*/
#define ASI_FL8_SL 0xd9
/* Secondary, 1 8-bit, fpu ld/st,
little
*/
#define ASI_FL8_SL 0xd9
/* Secondary, 1 8-bit, fpu ld/st,
L
*/
#define ASI_FL16_PL 0xda
/* Primary, 1 16-bit, fpu ld/st,
little
*/
#define ASI_FL16_PL 0xda
/* Primary, 1 16-bit, fpu ld/st,
L
*/
#define ASI_FL16_SL 0xdb
/* Secondary, 1 16-bit, fpu ld/st,
little
*/
#define ASI_FL16_SL 0xdb
/* Secondary, 1 16-bit, fpu ld/st,
L
*/
#define ASI_BLK_COMMIT_P 0xe0
/* Primary, blk store commit */
#define ASI_BLK_COMMIT_P 0xe0
/* Primary, blk store commit */
#define ASI_BLK_COMMIT_S 0xe1
/* Secondary, blk store commit */
#define ASI_BLK_COMMIT_S 0xe1
/* Secondary, blk store commit */
#define ASI_BLK_P 0xf0
/* Primary, blk ld/st */
#define ASI_BLK_P 0xf0
/* Primary, blk ld/st */
...
...
include/asm-sparc64/cmt.h
0 → 100644
View file @
512dd635
#ifndef _SPARC64_CMT_H
#define _SPARC64_CMT_H
/* cmt.h: Chip Multi-Threading register definitions
*
* Copyright (C) 2004 David S. Miller (davem@redhat.com)
*/
/* ASI_CORE_ID - private */
#define LP_ID 0x0000000000000010UL
#define LP_ID_MAX 0x00000000003f0000UL
#define LP_ID_ID 0x000000000000003fUL
/* ASI_INTR_ID - private */
#define LP_INTR_ID 0x0000000000000000UL
#define LP_INTR_ID_ID 0x00000000000003ffUL
/* ASI_CESR_ID - private */
#define CESR_ID 0x0000000000000040UL
#define CESR_ID_ID 0x00000000000000ffUL
/* ASI_CORE_AVAILABLE - shared */
#define LP_AVAIL 0x0000000000000000UL
#define LP_AVAIL_1 0x0000000000000002UL
#define LP_AVAIL_0 0x0000000000000001UL
/* ASI_CORE_ENABLE_STATUS - shared */
#define LP_ENAB_STAT 0x0000000000000010UL
#define LP_ENAB_STAT_1 0x0000000000000002UL
#define LP_ENAB_STAT_0 0x0000000000000001UL
/* ASI_CORE_ENABLE - shared */
#define LP_ENAB 0x0000000000000020UL
#define LP_ENAB_1 0x0000000000000002UL
#define LP_ENAB_0 0x0000000000000001UL
/* ASI_CORE_RUNNING - shared */
#define LP_RUNNING_RW 0x0000000000000050UL
#define LP_RUNNING_W1S 0x0000000000000060UL
#define LP_RUNNING_W1C 0x0000000000000068UL
#define LP_RUNNING_1 0x0000000000000002UL
#define LP_RUNNING_0 0x0000000000000001UL
/* ASI_CORE_RUNNING_STAT - shared */
#define LP_RUN_STAT 0x0000000000000058UL
#define LP_RUN_STAT_1 0x0000000000000002UL
#define LP_RUN_STAT_0 0x0000000000000001UL
/* ASI_XIR_STEERING - shared */
#define LP_XIR_STEER 0x0000000000000030UL
#define LP_XIR_STEER_1 0x0000000000000002UL
#define LP_XIR_STEER_0 0x0000000000000001UL
/* ASI_CMT_ERROR_STEERING - shared */
#define CMT_ER_STEER 0x0000000000000040UL
#define CMT_ER_STEER_1 0x0000000000000002UL
#define CMT_ER_STEER_0 0x0000000000000001UL
#endif
/* _SPARC64_CMT_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment