mirror of
https://github.com/SCST-project/scst.git
synced 2026-07-20 15:02:18 +00:00
Merge branch 'svn-trunk'
This commit is contained in:
+16
-6
@@ -482,11 +482,21 @@ out_id_list_failed:
|
||||
if (size >= max_size)
|
||||
goto out;
|
||||
switch (atomic_read(&fcport->state)) {
|
||||
case FCS_UNCONFIGURED : state = "Unconfigured"; break;
|
||||
case FCS_DEVICE_DEAD : state = "Dead"; break;
|
||||
case FCS_DEVICE_LOST : state = "Lost"; break;
|
||||
case FCS_ONLINE : state = "Online"; break;
|
||||
default: state = "Unknown"; break;
|
||||
case FCS_UNCONFIGURED:
|
||||
state = "Unconfigured";
|
||||
break;
|
||||
case FCS_DEVICE_DEAD:
|
||||
state = "Dead";
|
||||
break;
|
||||
case FCS_DEVICE_LOST:
|
||||
state = "Lost";
|
||||
break;
|
||||
case FCS_ONLINE:
|
||||
state = "Online";
|
||||
break;
|
||||
default:
|
||||
state = "Unknown";
|
||||
break;
|
||||
}
|
||||
|
||||
size += scnprintf(buffer+size, max_size-size,
|
||||
@@ -2280,7 +2290,7 @@ qla2x00_get_host_port_state(struct Scsi_Host *shost)
|
||||
fc_host_port_state(shost) = FC_PORTSTATE_DIAGNOSTICS;
|
||||
break;
|
||||
case LOOP_DOWN:
|
||||
if(test_bit(LOOP_RESYNC_NEEDED, &base_vha->dpc_flags))
|
||||
if (test_bit(LOOP_RESYNC_NEEDED, &base_vha->dpc_flags))
|
||||
fc_host_port_state(shost) = FC_PORTSTATE_DIAGNOSTICS;
|
||||
else
|
||||
fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN;
|
||||
|
||||
+3
-3
@@ -632,7 +632,7 @@ qla81xx_set_internal_loopback(scsi_qla_host_t *vha, uint16_t *config,
|
||||
goto done_set_internal;
|
||||
|
||||
new_config[0] = config[0] | (ENABLE_INTERNAL_LOOPBACK << 1);
|
||||
memcpy(&new_config[1], &config[1], sizeof(uint16_t) * 3) ;
|
||||
memcpy(&new_config[1], &config[1], sizeof(uint16_t) * 3);
|
||||
|
||||
ha->notify_dcbx_comp = 1;
|
||||
ret = qla81xx_set_port_config(vha, new_config);
|
||||
@@ -673,11 +673,11 @@ qla81xx_reset_internal_loopback(scsi_qla_host_t *vha, uint16_t *config,
|
||||
if (!IS_QLA81XX(ha) && !IS_QLA8031(ha))
|
||||
goto done_reset_internal;
|
||||
|
||||
memset(new_config, 0 , sizeof(new_config));
|
||||
memset(new_config, 0, sizeof(new_config));
|
||||
if ((config[0] & INTERNAL_LOOPBACK_MASK) >> 1 ==
|
||||
ENABLE_INTERNAL_LOOPBACK) {
|
||||
new_config[0] = config[0] & ~INTERNAL_LOOPBACK_MASK;
|
||||
memcpy(&new_config[1], &config[1], sizeof(uint16_t) * 3) ;
|
||||
memcpy(&new_config[1], &config[1], sizeof(uint16_t) * 3);
|
||||
|
||||
ha->notify_dcbx_comp = wait;
|
||||
ret = qla81xx_set_port_config(vha, new_config);
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@
|
||||
#include <linux/bsg-lib.h>
|
||||
#endif
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 32)
|
||||
#error
|
||||
#error ***This version of qla2xxx does not support distributions based on***
|
||||
#error ***kernels less than 2.6.32.***
|
||||
|
||||
+1
-1
@@ -329,7 +329,7 @@ extern int
|
||||
qla2x00_disable_eft_trace(scsi_qla_host_t *);
|
||||
|
||||
extern int
|
||||
qla2x00_enable_fce_trace(scsi_qla_host_t *, dma_addr_t, uint16_t , uint16_t *,
|
||||
qla2x00_enable_fce_trace(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t *,
|
||||
uint32_t *);
|
||||
|
||||
extern int
|
||||
|
||||
+3
-3
@@ -643,7 +643,7 @@ void
|
||||
qla2x00_get_sym_node_name(scsi_qla_host_t *vha, uint8_t *snn)
|
||||
{
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
sprintf(snn, "%s FW:v%d.%02d.%02d DVR:v%s",ha->model_number,
|
||||
sprintf(snn, "%s FW:v%d.%02d.%02d DVR:v%s", ha->model_number,
|
||||
ha->fw_major_version, ha->fw_minor_version,
|
||||
ha->fw_subminor_version, qla2x00_version_str);
|
||||
}
|
||||
@@ -1410,7 +1410,7 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *vha)
|
||||
eiter->len = cpu_to_be16(4 + alen);
|
||||
size += 4 + alen;
|
||||
|
||||
ql_dbg(ql_dbg_disc, vha , 0x202c,
|
||||
ql_dbg(ql_dbg_disc, vha, 0x202c,
|
||||
"Optrom vers = %s.\n", eiter->a.orom_version);
|
||||
|
||||
/* Firmware version */
|
||||
@@ -1583,7 +1583,7 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *vha)
|
||||
FDMI_PORT_SPEED_1GB|FDMI_PORT_SPEED_2GB|
|
||||
FDMI_PORT_SPEED_4GB);
|
||||
else if (IS_QLA23XX(ha))
|
||||
eiter->a.sup_speed =cpu_to_be32(
|
||||
eiter->a.sup_speed = cpu_to_be32(
|
||||
FDMI_PORT_SPEED_1GB|FDMI_PORT_SPEED_2GB);
|
||||
else
|
||||
eiter->a.sup_speed = cpu_to_be32(FDMI_PORT_SPEED_1GB);
|
||||
|
||||
+5
-5
@@ -4847,7 +4847,7 @@ qla2x00_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
|
||||
/* Validate firmware image by checking version. */
|
||||
if (blob->fw->size < 8 * sizeof(uint16_t)) {
|
||||
ql_log(ql_log_fatal, vha, 0x0085,
|
||||
"Unable to verify integrity of firmware image (%Zd).\n",
|
||||
"Unable to verify integrity of firmware image (%zd).\n",
|
||||
blob->fw->size);
|
||||
goto fail_fw_integrity;
|
||||
}
|
||||
@@ -4875,7 +4875,7 @@ qla2x00_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
|
||||
if (blob->fw->size < fwclen) {
|
||||
ql_log(ql_log_fatal, vha, 0x0088,
|
||||
"Unable to verify integrity of firmware image "
|
||||
"(%Zd).\n", blob->fw->size);
|
||||
"(%zd).\n", blob->fw->size);
|
||||
goto fail_fw_integrity;
|
||||
}
|
||||
|
||||
@@ -5074,7 +5074,7 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
|
||||
/* Validate firmware image by checking version. */
|
||||
if (blob->fw->size < 8 * sizeof(uint32_t)) {
|
||||
ql_log(ql_log_fatal, vha, 0x0093,
|
||||
"Unable to verify integrity of firmware image (%Zd).\n",
|
||||
"Unable to verify integrity of firmware image (%zd).\n",
|
||||
blob->fw->size);
|
||||
goto fail_fw_integrity;
|
||||
}
|
||||
@@ -5085,7 +5085,7 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
|
||||
(dcode[0] == 0 && dcode[1] == 0 && dcode[2] == 0 &&
|
||||
dcode[3] == 0)) {
|
||||
ql_log(ql_log_fatal, vha, 0x0094,
|
||||
"Unable to verify integrity of firmware image (%Zd).\n",
|
||||
"Unable to verify integrity of firmware image (%zd).\n",
|
||||
blob->fw->size);
|
||||
ql_log(ql_log_fatal, vha, 0x0095,
|
||||
"Firmware data: %08x %08x %08x %08x.\n",
|
||||
@@ -5103,7 +5103,7 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
|
||||
if (blob->fw->size < fwclen) {
|
||||
ql_log(ql_log_fatal, vha, 0x0096,
|
||||
"Unable to verify integrity of firmware image "
|
||||
"(%Zd).\n", blob->fw->size);
|
||||
"(%zd).\n", blob->fw->size);
|
||||
|
||||
goto fail_fw_integrity;
|
||||
}
|
||||
|
||||
+4
-4
@@ -2025,7 +2025,7 @@ qla2x00_logout_iocb(srb_t *sp, struct mbx_entry *mbx)
|
||||
SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id);
|
||||
mbx->mb0 = cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
|
||||
mbx->mb1 = HAS_EXTENDED_IDS(ha) ?
|
||||
cpu_to_le16(sp->fcport->loop_id):
|
||||
cpu_to_le16(sp->fcport->loop_id) :
|
||||
cpu_to_le16(sp->fcport->loop_id << 8);
|
||||
mbx->mb2 = cpu_to_le16(sp->fcport->d_id.b.domain);
|
||||
mbx->mb3 = cpu_to_le16(sp->fcport->d_id.b.area << 8 |
|
||||
@@ -2706,12 +2706,12 @@ qla2x00_start_sp(srb_t *sp)
|
||||
switch (sp->type) {
|
||||
case SRB_LOGIN_CMD:
|
||||
IS_FWI2_CAPABLE(ha) ?
|
||||
qla24xx_login_iocb(sp, pkt):
|
||||
qla24xx_login_iocb(sp, pkt) :
|
||||
qla2x00_login_iocb(sp, pkt);
|
||||
break;
|
||||
case SRB_LOGOUT_CMD:
|
||||
IS_FWI2_CAPABLE(ha) ?
|
||||
qla24xx_logout_iocb(sp, pkt):
|
||||
qla24xx_logout_iocb(sp, pkt) :
|
||||
qla2x00_logout_iocb(sp, pkt);
|
||||
break;
|
||||
case SRB_ELS_CMD_RPT:
|
||||
@@ -2725,7 +2725,7 @@ qla2x00_start_sp(srb_t *sp)
|
||||
break;
|
||||
case SRB_ADISC_CMD:
|
||||
IS_FWI2_CAPABLE(ha) ?
|
||||
qla24xx_adisc_iocb(sp, pkt):
|
||||
qla24xx_adisc_iocb(sp, pkt) :
|
||||
qla2x00_adisc_iocb(sp, pkt);
|
||||
break;
|
||||
case SRB_TM_CMD:
|
||||
|
||||
+5
-4
@@ -287,8 +287,9 @@ qla2x00_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0)
|
||||
static void
|
||||
qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr)
|
||||
{
|
||||
static char *event[] =
|
||||
{ "Complete", "Request Notification", "Time Extension" };
|
||||
static char *event[] = {
|
||||
"Complete", "Request Notification", "Time Extension"
|
||||
};
|
||||
int rval;
|
||||
struct device_reg_24xx __iomem *reg24 = &vha->hw->iobase->isp24;
|
||||
uint16_t __iomem *wptr;
|
||||
@@ -1012,7 +1013,7 @@ qla2x00_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
|
||||
|
||||
data[0] = MBS_COMMAND_ERROR;
|
||||
data[1] = lio->u.logio.flags & SRB_LOGIN_RETRIED ?
|
||||
QLA_LOGIO_LOGIN_RETRIED: 0;
|
||||
QLA_LOGIO_LOGIN_RETRIED : 0;
|
||||
if (mbx->entry_status) {
|
||||
ql_dbg(ql_dbg_async, vha, 0x5043,
|
||||
"Async-%s error entry - hdl=%x portid=%02x%02x%02x "
|
||||
@@ -1286,7 +1287,7 @@ qla24xx_logio_entry(scsi_qla_host_t *vha, struct req_que *req,
|
||||
|
||||
data[0] = MBS_COMMAND_ERROR;
|
||||
data[1] = lio->u.logio.flags & SRB_LOGIN_RETRIED ?
|
||||
QLA_LOGIO_LOGIN_RETRIED: 0;
|
||||
QLA_LOGIO_LOGIN_RETRIED : 0;
|
||||
if (logio->entry_status) {
|
||||
ql_log(ql_log_warn, fcport->vha, 0x5034,
|
||||
"Async-%s error entry - hdl=%x"
|
||||
|
||||
+4
-4
@@ -4165,7 +4165,7 @@ qla2x00_loopback_test(scsi_qla_host_t *vha, struct msg_echo_lb *mreq, uint16_t *
|
||||
ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10f7,
|
||||
"Entered %s.\n", __func__);
|
||||
|
||||
memset(mcp->mb, 0 , sizeof(mcp->mb));
|
||||
memset(mcp->mb, 0, sizeof(mcp->mb));
|
||||
mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK;
|
||||
mcp->mb[1] = mreq->options | BIT_6; // BIT_6 specifies 64 bit addressing
|
||||
|
||||
@@ -4227,7 +4227,7 @@ qla2x00_echo_test(scsi_qla_host_t *vha, struct msg_echo_lb *mreq, uint16_t *mres
|
||||
ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10fa,
|
||||
"Entered %s.\n", __func__);
|
||||
|
||||
memset(mcp->mb, 0 , sizeof(mcp->mb));
|
||||
memset(mcp->mb, 0, sizeof(mcp->mb));
|
||||
mcp->mb[0] = MBC_DIAGNOSTIC_ECHO;
|
||||
mcp->mb[1] = mreq->options | BIT_6; /* BIT_6 specifies 64bit address */
|
||||
if (IS_CNA_CAPABLE(ha)) {
|
||||
@@ -4774,7 +4774,7 @@ qla82xx_md_get_template_size(scsi_qla_host_t *vha)
|
||||
ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x111f,
|
||||
"Entered %s.\n", __func__);
|
||||
|
||||
memset(mcp->mb, 0 , sizeof(mcp->mb));
|
||||
memset(mcp->mb, 0, sizeof(mcp->mb));
|
||||
mcp->mb[0] = LSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
|
||||
mcp->mb[1] = MSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
|
||||
mcp->mb[2] = LSW(RQST_TMPLT_SIZE);
|
||||
@@ -4826,7 +4826,7 @@ qla82xx_md_get_template(scsi_qla_host_t *vha)
|
||||
return rval;
|
||||
}
|
||||
|
||||
memset(mcp->mb, 0 , sizeof(mcp->mb));
|
||||
memset(mcp->mb, 0, sizeof(mcp->mb));
|
||||
mcp->mb[0] = LSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
|
||||
mcp->mb[1] = MSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
|
||||
mcp->mb[2] = LSW(RQST_TMPLT);
|
||||
|
||||
+1
-1
@@ -343,7 +343,7 @@ qla2x00_vp_abort_isp(scsi_qla_host_t *vha)
|
||||
qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL);
|
||||
|
||||
/* See comment in qla24xx_init_vp() */
|
||||
if (qla_ini_mode_enabled(base_vha)){
|
||||
if (qla_ini_mode_enabled(base_vha)) {
|
||||
ql_dbg(ql_dbg_taskm, vha, 0x801d,
|
||||
"Scheduling enable of Vport %d.\n", vha->vp_idx);
|
||||
ret = qla24xx_enable_vp(vha);
|
||||
|
||||
+9
-12
@@ -264,8 +264,7 @@ static struct crb_128M_2M_block_map crb_128M_2M_map[64] = {
|
||||
/*
|
||||
* top 12 bits of crb internal address (hub, agent)
|
||||
*/
|
||||
static unsigned qla82xx_crb_hub_agt[64] =
|
||||
{
|
||||
static unsigned qla82xx_crb_hub_agt[64] = {
|
||||
0,
|
||||
QLA82XX_HW_CRB_HUB_AGT_ADR_PS,
|
||||
QLA82XX_HW_CRB_HUB_AGT_ADR_MN,
|
||||
@@ -889,7 +888,7 @@ static int
|
||||
qla82xx_wait_rom_busy(struct qla_hw_data *ha)
|
||||
{
|
||||
long timeout = 0;
|
||||
long done = 0 ;
|
||||
long done = 0;
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
while (done == 0) {
|
||||
@@ -910,7 +909,7 @@ static int
|
||||
qla82xx_wait_rom_done(struct qla_hw_data *ha)
|
||||
{
|
||||
long timeout = 0;
|
||||
long done = 0 ;
|
||||
long done = 0;
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
while (done == 0) {
|
||||
@@ -1001,7 +1000,7 @@ static int
|
||||
qla82xx_flash_wait_write_finish(struct qla_hw_data *ha)
|
||||
{
|
||||
long timeout = 0;
|
||||
uint32_t done = 1 ;
|
||||
uint32_t done = 1;
|
||||
uint32_t val;
|
||||
int ret = 0;
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
@@ -1130,7 +1129,7 @@ static int
|
||||
qla82xx_pinit_from_rom(scsi_qla_host_t *vha)
|
||||
{
|
||||
int addr, val;
|
||||
int i ;
|
||||
int i;
|
||||
struct crb_addr_pair *buf;
|
||||
unsigned long off;
|
||||
unsigned offset, n;
|
||||
@@ -1529,7 +1528,7 @@ qla82xx_fw_load_from_flash(struct qla_hw_data *ha)
|
||||
(qla82xx_rom_fast_read(ha, flashaddr + 4, (int *)&high))) {
|
||||
return -1;
|
||||
}
|
||||
data = ((u64)high << 32) | low ;
|
||||
data = ((u64)high << 32) | low;
|
||||
qla82xx_pci_mem_write_2M(ha, memaddr, &data, 8);
|
||||
flashaddr += 8;
|
||||
memaddr += 8;
|
||||
@@ -1647,7 +1646,7 @@ qla82xx_pci_info_str(struct scsi_qla_host *vha, char *str, int str_len)
|
||||
ha->link_width = (lnk >> 4) & 0x3f;
|
||||
|
||||
strlcpy(str, "PCIe (", str_len);
|
||||
strncat(str, "2.5Gb/s ",str_len - (strlen(str)+1));
|
||||
strncat(str, "2.5Gb/s ", str_len - (strlen(str)+1));
|
||||
snprintf(lwstr, sizeof(lwstr), "x%d)", ha->link_width);
|
||||
strncat(str, lwstr, str_len - (strlen(str)+1));
|
||||
return str;
|
||||
@@ -4409,8 +4408,7 @@ qla82xx_beacon_on(struct scsi_qla_host *vha)
|
||||
qla82xx_idc_lock(ha);
|
||||
rval = qla82xx_mbx_beacon_ctl(vha, 1);
|
||||
|
||||
if (rval)
|
||||
{
|
||||
if (rval) {
|
||||
ql_log(ql_log_warn, vha, 0xb050,
|
||||
"mbx set led config failed in %s\n", __func__);
|
||||
goto exit;
|
||||
@@ -4430,8 +4428,7 @@ qla82xx_beacon_off(struct scsi_qla_host *vha)
|
||||
qla82xx_idc_lock(ha);
|
||||
rval = qla82xx_mbx_beacon_ctl(vha, 0);
|
||||
|
||||
if (rval)
|
||||
{
|
||||
if (rval) {
|
||||
ql_log(ql_log_warn, vha, 0xb051,
|
||||
"mbx set led config failed in %s\n", __func__);
|
||||
goto exit;
|
||||
|
||||
+1
-1
@@ -4564,7 +4564,7 @@ qla2xxx_pci_mmio_enabled(struct pci_dev *pdev)
|
||||
return PCI_ERS_RESULT_RECOVERED;
|
||||
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
if (IS_QLA2100(ha) || IS_QLA2200(ha)){
|
||||
if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
|
||||
stat = RD_REG_DWORD(®->hccr);
|
||||
if (stat & HCCR_RISC_PAUSE)
|
||||
risc_paused = 1;
|
||||
|
||||
+3
-3
@@ -900,7 +900,7 @@ qla2xxx_get_fdt_info(scsi_qla_host_t *vha)
|
||||
ha->fdt_unprotect_sec_cmd = flash_conf_addr(ha, 0x0300 |
|
||||
fdt->unprotect_sec_cmd);
|
||||
ha->fdt_protect_sec_cmd = fdt->protect_sec_cmd ?
|
||||
flash_conf_addr(ha, 0x0300 | fdt->protect_sec_cmd):
|
||||
flash_conf_addr(ha, 0x0300 | fdt->protect_sec_cmd) :
|
||||
flash_conf_addr(ha, 0x0336);
|
||||
}
|
||||
goto done;
|
||||
@@ -962,7 +962,7 @@ qla2xxx_get_idc_param(scsi_qla_host_t *vha)
|
||||
|
||||
wptr = (uint32_t *)req->ring;
|
||||
ha->isp_ops->read_optrom(vha, (uint8_t *)req->ring,
|
||||
QLA82XX_IDC_PARAM_ADDR , 8);
|
||||
QLA82XX_IDC_PARAM_ADDR, 8);
|
||||
|
||||
if (*wptr == cpu_to_le32(0xffffffff)) {
|
||||
ha->nx_dev_init_timeout = QLA82XX_ROM_DEV_INIT_TIMEOUT;
|
||||
@@ -1682,7 +1682,7 @@ qla83xx_beacon_blink(struct scsi_qla_host *vha)
|
||||
qla83xx_write_remote_reg(vha, led_select_value + 4, 0x40002000);
|
||||
msleep(1000);
|
||||
qla83xx_write_remote_reg(vha, led_select_value, 0x40004000);
|
||||
qla83xx_write_remote_reg(vha, led_select_value + 4 , 0x40004000);
|
||||
qla83xx_write_remote_reg(vha, led_select_value + 4, 0x40004000);
|
||||
} else if ((IS_QLA8031(ha) || IS_QLA81XX(ha)) && ha->beacon_blink_led) {
|
||||
int rval;
|
||||
|
||||
|
||||
@@ -1585,8 +1585,7 @@ static uint16_t isp_get_scsi_transport_version(struct scst_tgt *scst_tgt)
|
||||
return 0x0900; /* FCP-2 */
|
||||
}
|
||||
|
||||
static struct scst_tgt_template isp_tgt_template =
|
||||
{
|
||||
static struct scst_tgt_template isp_tgt_template = {
|
||||
.sg_tablesize = SG_ALL, /* we set this value lately based on hardware */
|
||||
.name = "qla_isp",
|
||||
.unchecked_isa_dma = 0,
|
||||
|
||||
Reference in New Issue
Block a user