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
8ef4b795
Commit
8ef4b795
authored
Aug 21, 2004
by
James Bottomley
Committed by
James Bottomley
Aug 21, 2004
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
78357e74
030c7a99
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
434 additions
and
334 deletions
+434
-334
Documentation/scsi/ChangeLog.megaraid
Documentation/scsi/ChangeLog.megaraid
+122
-1
Documentation/scsi/megaraid.txt
Documentation/scsi/megaraid.txt
+1
-1
drivers/scsi/megaraid/Kconfig.megaraid
drivers/scsi/megaraid/Kconfig.megaraid
+3
-7
drivers/scsi/megaraid/mega_common.h
drivers/scsi/megaraid/mega_common.h
+0
-15
drivers/scsi/megaraid/megaraid_ioctl.h
drivers/scsi/megaraid/megaraid_ioctl.h
+2
-2
drivers/scsi/megaraid/megaraid_mbox.c
drivers/scsi/megaraid/megaraid_mbox.c
+167
-197
drivers/scsi/megaraid/megaraid_mbox.h
drivers/scsi/megaraid/megaraid_mbox.h
+9
-3
drivers/scsi/megaraid/megaraid_mm.c
drivers/scsi/megaraid/megaraid_mm.c
+127
-71
drivers/scsi/megaraid/megaraid_mm.h
drivers/scsi/megaraid/megaraid_mm.h
+3
-37
No files found.
Documentation/scsi/ChangeLog.megaraid
View file @
8ef4b795
Release Date : Thu Aug 19 09:58:33 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version : 2.20.3.0 (scsi module), 2.20.2.0 (cmm module)
Older Version : 2.20.2.0 (scsi module), 2.20.1.0 (cmm module)
i. When copying the mailbox packets, copy only first 14 bytes (for 32-bit
mailboxes) and only first 22 bytes (for 64-bit mailboxes). This is to
avoid getting the stale values for busy bit. We want to set the busy
bit just before issuing command to the FW.
ii. In the reset handling, if the reseted command is not owned by the
driver, do not (wrongly) print information for the "attached" driver
packet.
iii. Have extended wait when issuing command in synchronous mode. This is
required for the cases where the option ROM is disabled and there is
no BIOS to start the controller. The FW starts to boot after receiving
the first command from the driver. The current driver has 1 second
timeout for the synchronous commands, which is far less than what is
actually required. We now wait up to MBOX_RESET_TIME (180 seconds) for
FW boot process.
iv. In megaraid_mbox_product_info, clear the mailbox contents completely
before preparing the command for inquiry3. This is to ensure that the
FW does not get junk values in the command.
v. Do away with the redundant LSI_CONFIG_COMPAT redefinition for
CONFIG_COMPAT. Replace <asm/ioctl32.h> with <linux/ioctl32.h>
- James Bottomley <James.Bottomley@SteelEye.com>, 08.17.2004
linux-scsi mailing list
vi. Add support for 64-bit applications. Current drivers assume only
32-bit applications, even on 64-bit platforms. Use the "data" and
"buffer" fields of the mimd_t structure, instead of embedded 32-bit
addresses in application mailbox and passthru structures.
vii. Move the function declarations for the management module from
megaraid_mm.h to megaraid_mm.c
- Andrew Morton <akpm@osdl.org>, 08.19.2004
linux-scsi mailing list
viii. Change default values for MEGARAID_NEWGEN, MEGARAID_MM, and
MEGARAID_MAILBOX to 'n' in Kconfig.megaraid
- Andrew Morton <akpm@osdl.org>, 08.19.2004
linux-scsi mailing list
ix. replace udelay with msleep
x. Typos corrected in comments and whitespace adjustments, explicit
grouping of expressions.
Release Date : Fri Jul 23 15:22:07 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version : 2.20.2.0 (scsi module), 2.20.1.0 (cmm module)
Older Version : 2.20.1.0 (scsi module), 2.20.0.0 (cmm module)
i. Add PCI ids for Acer ROMB 2E solution
ii. Add PCI ids for I4
iii. Typo corrected for subsys id for megaraid sata 300-4x
iv. Remove yield() while mailbox handshake in synchronous commands
"My other main gripe is things like this:
+ // wait for maximum 1 second for status to post
+ for (i = 0; i < 40000; i++) {
+ if (mbox->numstatus != 0xFF) break;
+ udelay(25); yield();
+ }
which litter the driver. Use of yield() in drivers is deprecated."
- James Bottomley <James.Bottomley@SteelEye.com>, 07.14.2004
linux-scsi mailing list
v. Remove redundant __megaraid_busywait_mbox routine
vi. Fix bug in the managment module, which causes a system lockup when the
IO module is loaded and then unloaded, followed by executing any
management utility. The current version of management module does not
handle the adapter unregister properly.
Specifically, it still keeps a reference to the unregistered
controllers. To avoid this, the static array adapters has been
replaced by a dynamic list, which gets updated every time an adapter
is added or removed.
Also, during unregistration of the IO module, the resources are
now released in the exact reverse order of the allocation time
sequence.
Release Date : Fri Jun 25 18:58:43 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version : 2.20.1.0
Older Version : megaraid 2.20.0.1
i. Stale list pointer in adapter causes kernel panic when module
megaraid_mbox is unloaded
Release Date : Thu Jun 24 20:37:11 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version : 2.20.0.1
Older Version : megaraid 2.20.0.00
i. Modules are not 'y' by default, but depend on current definition of
SCSI & PCI.
ii. Redundant structure mraid_driver_t removed.
iii. Miscellaneous indentation and goto/label fixes.
- Christoph Hellwig <hch@infradead.org>, 06.24.2004 linux-scsi
iv. scsi_host_put(), do just before completing HBA shutdown.
Release Date : Mon Jun 21 19:53:54 EDT 2004 - Atul Mukker <atulm@lsil.com>
Release Date : Mon Jun 21 19:53:54 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version : 2.20.0.0
Current Version : 2.20.0.0
Older Version : megaraid 2.20.0.rc2 and 2.00.3
Older Version : megaraid 2.20.0.rc2 and 2.00.3
...
@@ -55,5 +176,5 @@ ix. Better implementation of error handling and recovery. Driver now
...
@@ -55,5 +176,5 @@ ix. Better implementation of error handling and recovery. Driver now
performs extended errors recovery for instances like scsi cable pull.
performs extended errors recovery for instances like scsi cable pull.
x. Disassociate the management commands with an overlaid scsi command.
x. Disassociate the management commands with an overlaid scsi command.
Driver now treats the mangement packets as special packets and has a
Driver now treats the man
a
gement packets as special packets and has a
dedicated callback routine.
dedicated callback routine.
Documentation/scsi/megaraid.txt
View file @
8ef4b795
...
@@ -61,7 +61,7 @@ uioc_t. The management module converts the older ioctl packets from the older
...
@@ -61,7 +61,7 @@ uioc_t. The management module converts the older ioctl packets from the older
applications into uioc_t. After driver handles the uioc_t, the common module
applications into uioc_t. After driver handles the uioc_t, the common module
will convert that back into the old format before returning to applications.
will convert that back into the old format before returning to applications.
As new applications evolve and replace the old ones, the old packet format
As new applications evolve and replace the old ones, the old packet format
will be retired.
will be retired.
Common module dedicates one uioc_t packet to each controller registered. This
Common module dedicates one uioc_t packet to each controller registered. This
...
...
drivers/scsi/megaraid/Kconfig.megaraid
View file @
8ef4b795
config MEGARAID_NEWGEN
config MEGARAID_NEWGEN
bool "LSI Logic New Generation RAID Device Drivers"
bool "LSI Logic New Generation RAID Device Drivers"
depends on PCI && SCSI
depends on PCI && SCSI
default y
help
help
LSI Logic RAID Device Drivers
LSI Logic RAID Device Drivers
config MEGARAID_MM
config MEGARAID_MM
tristate "LSI Logic Management Module (New Driver)"
tristate "LSI Logic Management Module (New Driver)"
depends on PCI && SCSI && MEGARAID_NEWGEN
depends on PCI && SCSI && MEGARAID_NEWGEN
default m
help
help
Management Module provides ioctl, sysfs support for LSI Logic
Management Module provides ioctl, sysfs support for LSI Logic
RAID controllers.
RAID controllers.
...
@@ -19,7 +17,6 @@ config MEGARAID_MM
...
@@ -19,7 +17,6 @@ config MEGARAID_MM
config MEGARAID_MAILBOX
config MEGARAID_MAILBOX
tristate "LSI Logic MegaRAID Driver (New Driver)"
tristate "LSI Logic MegaRAID Driver (New Driver)"
depends on PCI && SCSI && MEGARAID_MM
depends on PCI && SCSI && MEGARAID_MM
default $MEGARAID_MM
help
help
List of supported controllers
List of supported controllers
...
@@ -48,11 +45,10 @@ config MEGARAID_MAILBOX
...
@@ -48,11 +45,10 @@ config MEGARAID_MAILBOX
LSI MegaRAID SCSI 320-4X 1000:0407:1000:0531
LSI MegaRAID SCSI 320-4X 1000:0407:1000:0531
LSI MegaRAID SCSI 320-1E 1000:0408:1000:0001
LSI MegaRAID SCSI 320-1E 1000:0408:1000:0001
LSI MegaRAID SCSI 320-2E 1000:0408:1000:0002
LSI MegaRAID SCSI 320-2E 1000:0408:1000:0002
LSI MegaRAID SATA 150-2 1095:3112:1000:0534
LSI MegaRAID SATA 150-4 1000:1960:1000:4523
LSI MegaRAID SATA 150-4 1000:1960:1000:4523
LSI MegaRAID SATA 150-6 1000:1960:1000:0523
LSI MegaRAID SATA 150-6 1000:1960:1000:0523
LSI MegaRAID SATA
150-4X 1000:0409:1000:15
04
LSI MegaRAID SATA
300-4X 1000:0409:1000:30
04
LSI MegaRAID SATA
150-8X 1000:0409:1000:15
08
LSI MegaRAID SATA
300-8X 1000:0409:1000:30
08
INTEL RAID Controller SRCU42X 1000:0407:8086:0532
INTEL RAID Controller SRCU42X 1000:0407:8086:0532
INTEL RAID Controller SRCS16 1000:1960:8086:0523
INTEL RAID Controller SRCS16 1000:1960:8086:0523
INTEL RAID Controller SRCU42E 1000:0408:8086:0002
INTEL RAID Controller SRCU42E 1000:0408:8086:0002
...
@@ -62,6 +58,7 @@ config MEGARAID_MAILBOX
...
@@ -62,6 +58,7 @@ config MEGARAID_MAILBOX
INTEL RAID Controller SROMBU42E 1000:0408:8086:3499
INTEL RAID Controller SROMBU42E 1000:0408:8086:3499
INTEL RAID Controller SRCU51L 1000:1960:8086:0520
INTEL RAID Controller SRCU51L 1000:1960:8086:0520
FSC MegaRAID PCI Express ROMB 1000:0408:1734:1065
FSC MegaRAID PCI Express ROMB 1000:0408:1734:1065
ACER MegaRAID ROMB-2E 1000:0408:1025:004D
To compile this driver as a module, choose M here: the
To compile this driver as a module, choose M here: the
module will be called megaraid_mbox
module will be called megaraid_mbox
...
@@ -70,7 +67,6 @@ if MEGARAID_NEWGEN=n
...
@@ -70,7 +67,6 @@ if MEGARAID_NEWGEN=n
config MEGARAID_LEGACY
config MEGARAID_LEGACY
tristate "LSI Logic Legacy MegaRAID Driver"
tristate "LSI Logic Legacy MegaRAID Driver"
depends on PCI && SCSI
depends on PCI && SCSI
default m
help
help
This driver supports the LSI MegaRAID 418, 428, 438, 466, 762, 490
This driver supports the LSI MegaRAID 418, 428, 438, 466, 762, 490
and 467 SCSI host adapters. This driver also support the all U320
and 467 SCSI host adapters. This driver also support the all U320
...
...
drivers/scsi/megaraid/mega_common.h
View file @
8ef4b795
...
@@ -113,7 +113,6 @@ typedef struct {
...
@@ -113,7 +113,6 @@ typedef struct {
* @param max_channel : maximum channel number supported - inclusive
* @param max_channel : maximum channel number supported - inclusive
* @param max_target : max target supported - inclusive
* @param max_target : max target supported - inclusive
* @param max_lun : max lun supported - inclusive
* @param max_lun : max lun supported - inclusive
* @param list : list of megaraid host structures
* @param unique_id : unique identifier for each adapter
* @param unique_id : unique identifier for each adapter
* @param irq : IRQ for this adapter
* @param irq : IRQ for this adapter
* @param ito : internal timeout value, (-1) means no timeout
* @param ito : internal timeout value, (-1) means no timeout
...
@@ -171,7 +170,6 @@ typedef struct {
...
@@ -171,7 +170,6 @@ typedef struct {
uint16_t
max_target
;
uint16_t
max_target
;
uint8_t
max_lun
;
uint8_t
max_lun
;
struct
list_head
list
;
uint32_t
unique_id
;
uint32_t
unique_id
;
uint8_t
irq
;
uint8_t
irq
;
uint8_t
ito
;
uint8_t
ito
;
...
@@ -244,19 +242,6 @@ typedef struct {
...
@@ -244,19 +242,6 @@ typedef struct {
[SCP2TARGET(scp)] & 0xFF); \
[SCP2TARGET(scp)] & 0xFF); \
}
}
/**
* struct mraid_driver_t - global driver data
* @param driver_version : driver version
* @param device_list : list of adapter_t structures
*
* mraid_driver_t contains information which is global to the driver.
*/
typedef
struct
{
uint8_t
driver_version
[
8
];
struct
list_head
device_list
;
}
mraid_driver_t
;
/*
/*
* ### Helper routines ###
* ### Helper routines ###
*/
*/
...
...
drivers/scsi/megaraid/megaraid_ioctl.h
View file @
8ef4b795
...
@@ -64,8 +64,6 @@
...
@@ -64,8 +64,6 @@
#define GET_STATS 0x50000
#define GET_STATS 0x50000
#define GET_IOCTL_VERSION 0x01
#define GET_IOCTL_VERSION 0x01
#define MAX_LSI_CMN_ADAPS 16
#define EXT_IOCTL_SIGN_SZ 16
#define EXT_IOCTL_SIGN_SZ 16
#define EXT_IOCTL_SIGN "$$_EXTD_IOCTL_$$"
#define EXT_IOCTL_SIGN "$$_EXTD_IOCTL_$$"
...
@@ -249,6 +247,7 @@ typedef struct mm_dmapool {
...
@@ -249,6 +247,7 @@ typedef struct mm_dmapool {
* @pdev : pci dev; used for allocating dma'ble memory
* @pdev : pci dev; used for allocating dma'ble memory
* @issue_uioc : Driver supplied routine to issue uioc_t commands
* @issue_uioc : Driver supplied routine to issue uioc_t commands
* : issue_uioc(drvr_data, kioc, ISSUE/ABORT, uioc_done)
* : issue_uioc(drvr_data, kioc, ISSUE/ABORT, uioc_done)
* @list : attach with the global list of adapters
* @kioc_list : block of mem for @max_kioc number of kiocs
* @kioc_list : block of mem for @max_kioc number of kiocs
* @kioc_pool : pool of free kiocs
* @kioc_pool : pool of free kiocs
* @kioc_pool_lock : protection for free pool
* @kioc_pool_lock : protection for free pool
...
@@ -274,6 +273,7 @@ typedef struct mraid_mmadp {
...
@@ -274,6 +273,7 @@ typedef struct mraid_mmadp {
/* Maintained by common module */
/* Maintained by common module */
struct
list_head
list
;
uioc_t
*
kioc_list
;
uioc_t
*
kioc_list
;
struct
list_head
kioc_pool
;
struct
list_head
kioc_pool
;
spinlock_t
kioc_pool_lock
;
spinlock_t
kioc_pool_lock
;
...
...
drivers/scsi/megaraid/megaraid_mbox.c
View file @
8ef4b795
This diff is collapsed.
Click to expand it.
drivers/scsi/megaraid/megaraid_mbox.h
View file @
8ef4b795
...
@@ -21,8 +21,8 @@
...
@@ -21,8 +21,8 @@
#include "megaraid_ioctl.h"
#include "megaraid_ioctl.h"
#define MEGARAID_VERSION "2.20.
0
.0"
#define MEGARAID_VERSION "2.20.
3
.0"
#define MEGARAID_EXT_VERSION "(Release Date:
Wed Jun 23 11:38:38
EDT 2004)"
#define MEGARAID_EXT_VERSION "(Release Date:
Thu Aug 19 09:58:33
EDT 2004)"
/*
/*
...
@@ -88,6 +88,9 @@
...
@@ -88,6 +88,9 @@
#define PCI_DEVICE_ID_MEGARAID_SCSI_320_2E 0x0408
#define PCI_DEVICE_ID_MEGARAID_SCSI_320_2E 0x0408
#define PCI_SUBSYS_ID_MEGARAID_SCSI_320_2E 0x0002
#define PCI_SUBSYS_ID_MEGARAID_SCSI_320_2E 0x0002
#define PCI_DEVICE_ID_MEGARAID_I4_133_RAID 0x1960
#define PCI_SUBSYS_ID_MEGARAID_I4_133_RAID 0x0522
#define PCI_DEVICE_ID_MEGARAID_SATA_150_4 0x1960
#define PCI_DEVICE_ID_MEGARAID_SATA_150_4 0x1960
#define PCI_SUBSYS_ID_MEGARAID_SATA_150_4 0x4523
#define PCI_SUBSYS_ID_MEGARAID_SATA_150_4 0x4523
...
@@ -95,7 +98,7 @@
...
@@ -95,7 +98,7 @@
#define PCI_SUBSYS_ID_MEGARAID_SATA_150_6 0x0523
#define PCI_SUBSYS_ID_MEGARAID_SATA_150_6 0x0523
#define PCI_DEVICE_ID_MEGARAID_SATA_300_4x 0x0409
#define PCI_DEVICE_ID_MEGARAID_SATA_300_4x 0x0409
#define PCI_SUBSYS_ID_MEGARAID_SATA_300_4x 0x300
8
#define PCI_SUBSYS_ID_MEGARAID_SATA_300_4x 0x300
4
#define PCI_DEVICE_ID_MEGARAID_SATA_300_8x 0x0409
#define PCI_DEVICE_ID_MEGARAID_SATA_300_8x 0x0409
#define PCI_SUBSYS_ID_MEGARAID_SATA_300_8x 0x3008
#define PCI_SUBSYS_ID_MEGARAID_SATA_300_8x 0x3008
...
@@ -127,6 +130,9 @@
...
@@ -127,6 +130,9 @@
#define PCI_DEVICE_ID_FSC_MEGARAID_PCI_EXPRESS_ROMB 0x0408
#define PCI_DEVICE_ID_FSC_MEGARAID_PCI_EXPRESS_ROMB 0x0408
#define PCI_SUBSYS_ID_FSC_MEGARAID_PCI_EXPRESS_ROMB 0x1065
#define PCI_SUBSYS_ID_FSC_MEGARAID_PCI_EXPRESS_ROMB 0x1065
#define PCI_DEVICE_ID_MEGARAID_ACER_ROMB_2E 0x0408
#define PCI_SUBSYS_ID_MEGARAID_ACER_ROMB_2E 0x004D
#define PCI_SUBSYS_ID_PERC3_QC 0x0471
#define PCI_SUBSYS_ID_PERC3_QC 0x0471
#define PCI_SUBSYS_ID_PERC3_DC 0x0493
#define PCI_SUBSYS_ID_PERC3_DC 0x0493
#define PCI_SUBSYS_ID_PERC3_SC 0x0475
#define PCI_SUBSYS_ID_PERC3_SC 0x0475
...
...
drivers/scsi/megaraid/megaraid_mm.c
View file @
8ef4b795
This diff is collapsed.
Click to expand it.
drivers/scsi/megaraid/megaraid_mm.h
View file @
8ef4b795
...
@@ -23,14 +23,15 @@
...
@@ -23,14 +23,15 @@
#include <linux/moduleparam.h>
#include <linux/moduleparam.h>
#include <linux/pci.h>
#include <linux/pci.h>
#include <linux/list.h>
#include <linux/list.h>
#include <linux/ioctl32.h>
#include "mbox_defs.h"
#include "mbox_defs.h"
#include "megaraid_ioctl.h"
#include "megaraid_ioctl.h"
#define LSI_COMMON_MOD_VERSION "2.20.
0
.0"
#define LSI_COMMON_MOD_VERSION "2.20.
2
.0"
#define LSI_COMMON_MOD_EXT_VERSION \
#define LSI_COMMON_MOD_EXT_VERSION \
"(Release Date:
Wed Jun 23 11:38:38
EDT 2004)"
"(Release Date:
Thu Aug 19 09:58:33
EDT 2004)"
#define LSI_DBGLVL dbglevel
#define LSI_DBGLVL dbglevel
...
@@ -38,11 +39,6 @@
...
@@ -38,11 +39,6 @@
// The smallest dma pool
// The smallest dma pool
#define MRAID_MM_INIT_BUFF_SIZE 4096
#define MRAID_MM_INIT_BUFF_SIZE 4096
/*
* Localizing ioctl32 differences
*/
#include <linux/ioctl32.h>
/**
/**
* mimd_t : Old style ioctl packet structure (deprecated)
* mimd_t : Old style ioctl packet structure (deprecated)
*
*
...
@@ -101,36 +97,6 @@ typedef struct mimd {
...
@@ -101,36 +97,6 @@ typedef struct mimd {
}
__attribute__
((
packed
))
mimd_t
;
}
__attribute__
((
packed
))
mimd_t
;
// Entry points for char node driver
static
int
mraid_mm_open
(
struct
inode
*
,
struct
file
*
);
static
int
mraid_mm_ioctl
(
struct
inode
*
,
struct
file
*
,
uint
,
unsigned
long
);
// routines to convert to and from the old the format
static
int
mimd_to_kioc
(
mimd_t
*
,
mraid_mmadp_t
*
,
uioc_t
*
);
static
int
kioc_to_mimd
(
uioc_t
*
,
mimd_t
*
);
// Helper functions
static
int
handle_drvrcmd
(
unsigned
long
,
uint8_t
,
int
*
);
static
int
lld_ioctl
(
mraid_mmadp_t
*
,
uioc_t
*
);
static
void
ioctl_done
(
uioc_t
*
);
static
void
lld_timedout
(
unsigned
long
);
static
void
hinfo_to_cinfo
(
mraid_hba_info_t
*
,
mcontroller_t
*
);
static
int
mraid_mm_get_adpindex
(
mimd_t
*
,
int
*
);
static
uioc_t
*
mraid_mm_alloc_kioc
(
mraid_mmadp_t
*
);
static
void
mraid_mm_dealloc_kioc
(
mraid_mmadp_t
*
,
uioc_t
*
);
static
int
mraid_mm_attach_buf
(
mraid_mmadp_t
*
,
uioc_t
*
,
int
);
static
int
mraid_mm_setup_dma_pools
(
mraid_mmadp_t
*
);
static
void
mraid_mm_free_adp_resources
(
mraid_mmadp_t
*
);
static
void
mraid_mm_teardown_dma_pools
(
mraid_mmadp_t
*
);
#ifdef CONFIG_COMPAT
static
int
mraid_mm_compat_ioctl
(
unsigned
int
,
unsigned
int
,
unsigned
long
,
struct
file
*
);
#endif
#endif // MEGARAID_MM_H
#endif // MEGARAID_MM_H
// vi: set ts=8 sw=8 tw=78:
// vi: set ts=8 sw=8 tw=78:
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