[SCSI] pm80xx: Added SPCv/ve specific ids, variables and modify for SPC
Updated pci id table with device, vendor, subdevice and subvendor ids for 8081, 8088, 8089 SAS/SATA controllers. Added SPCv/ve related macros. Updated macros, hba info structure and other structures for SPCv/ve. Update of structure and variable names for SPC hardware functionalities. Signed-off-by: Sakthivel K <Sakthivel.SaravananKamalRaju@pmcs.com> Signed-off-by: Anand Kumar S <AnandKumar.Santhanam@pmcs.com> Acked-by: Jack Wang <jack_wang@usish.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Цей коміт міститься в:

зафіксовано
James Bottomley

джерело
6a7252fdb0
коміт
e574210170
@@ -50,32 +50,39 @@
|
||||
static void read_main_config_table(struct pm8001_hba_info *pm8001_ha)
|
||||
{
|
||||
void __iomem *address = pm8001_ha->main_cfg_tbl_addr;
|
||||
pm8001_ha->main_cfg_tbl.signature = pm8001_mr32(address, 0x00);
|
||||
pm8001_ha->main_cfg_tbl.interface_rev = pm8001_mr32(address, 0x04);
|
||||
pm8001_ha->main_cfg_tbl.firmware_rev = pm8001_mr32(address, 0x08);
|
||||
pm8001_ha->main_cfg_tbl.max_out_io = pm8001_mr32(address, 0x0C);
|
||||
pm8001_ha->main_cfg_tbl.max_sgl = pm8001_mr32(address, 0x10);
|
||||
pm8001_ha->main_cfg_tbl.ctrl_cap_flag = pm8001_mr32(address, 0x14);
|
||||
pm8001_ha->main_cfg_tbl.gst_offset = pm8001_mr32(address, 0x18);
|
||||
pm8001_ha->main_cfg_tbl.inbound_queue_offset =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.signature =
|
||||
pm8001_mr32(address, 0x00);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.interface_rev =
|
||||
pm8001_mr32(address, 0x04);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.firmware_rev =
|
||||
pm8001_mr32(address, 0x08);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.max_out_io =
|
||||
pm8001_mr32(address, 0x0C);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.max_sgl =
|
||||
pm8001_mr32(address, 0x10);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.ctrl_cap_flag =
|
||||
pm8001_mr32(address, 0x14);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.gst_offset =
|
||||
pm8001_mr32(address, 0x18);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.inbound_queue_offset =
|
||||
pm8001_mr32(address, MAIN_IBQ_OFFSET);
|
||||
pm8001_ha->main_cfg_tbl.outbound_queue_offset =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_queue_offset =
|
||||
pm8001_mr32(address, MAIN_OBQ_OFFSET);
|
||||
pm8001_ha->main_cfg_tbl.hda_mode_flag =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.hda_mode_flag =
|
||||
pm8001_mr32(address, MAIN_HDA_FLAGS_OFFSET);
|
||||
|
||||
/* read analog Setting offset from the configuration table */
|
||||
pm8001_ha->main_cfg_tbl.anolog_setup_table_offset =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.anolog_setup_table_offset =
|
||||
pm8001_mr32(address, MAIN_ANALOG_SETUP_OFFSET);
|
||||
|
||||
/* read Error Dump Offset and Length */
|
||||
pm8001_ha->main_cfg_tbl.fatal_err_dump_offset0 =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_dump_offset0 =
|
||||
pm8001_mr32(address, MAIN_FATAL_ERROR_RDUMP0_OFFSET);
|
||||
pm8001_ha->main_cfg_tbl.fatal_err_dump_length0 =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_dump_length0 =
|
||||
pm8001_mr32(address, MAIN_FATAL_ERROR_RDUMP0_LENGTH);
|
||||
pm8001_ha->main_cfg_tbl.fatal_err_dump_offset1 =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_dump_offset1 =
|
||||
pm8001_mr32(address, MAIN_FATAL_ERROR_RDUMP1_OFFSET);
|
||||
pm8001_ha->main_cfg_tbl.fatal_err_dump_length1 =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_dump_length1 =
|
||||
pm8001_mr32(address, MAIN_FATAL_ERROR_RDUMP1_LENGTH);
|
||||
}
|
||||
|
||||
@@ -86,31 +93,56 @@ static void read_main_config_table(struct pm8001_hba_info *pm8001_ha)
|
||||
static void read_general_status_table(struct pm8001_hba_info *pm8001_ha)
|
||||
{
|
||||
void __iomem *address = pm8001_ha->general_stat_tbl_addr;
|
||||
pm8001_ha->gs_tbl.gst_len_mpistate = pm8001_mr32(address, 0x00);
|
||||
pm8001_ha->gs_tbl.iq_freeze_state0 = pm8001_mr32(address, 0x04);
|
||||
pm8001_ha->gs_tbl.iq_freeze_state1 = pm8001_mr32(address, 0x08);
|
||||
pm8001_ha->gs_tbl.msgu_tcnt = pm8001_mr32(address, 0x0C);
|
||||
pm8001_ha->gs_tbl.iop_tcnt = pm8001_mr32(address, 0x10);
|
||||
pm8001_ha->gs_tbl.reserved = pm8001_mr32(address, 0x14);
|
||||
pm8001_ha->gs_tbl.phy_state[0] = pm8001_mr32(address, 0x18);
|
||||
pm8001_ha->gs_tbl.phy_state[1] = pm8001_mr32(address, 0x1C);
|
||||
pm8001_ha->gs_tbl.phy_state[2] = pm8001_mr32(address, 0x20);
|
||||
pm8001_ha->gs_tbl.phy_state[3] = pm8001_mr32(address, 0x24);
|
||||
pm8001_ha->gs_tbl.phy_state[4] = pm8001_mr32(address, 0x28);
|
||||
pm8001_ha->gs_tbl.phy_state[5] = pm8001_mr32(address, 0x2C);
|
||||
pm8001_ha->gs_tbl.phy_state[6] = pm8001_mr32(address, 0x30);
|
||||
pm8001_ha->gs_tbl.phy_state[7] = pm8001_mr32(address, 0x34);
|
||||
pm8001_ha->gs_tbl.reserved1 = pm8001_mr32(address, 0x38);
|
||||
pm8001_ha->gs_tbl.reserved2 = pm8001_mr32(address, 0x3C);
|
||||
pm8001_ha->gs_tbl.reserved3 = pm8001_mr32(address, 0x40);
|
||||
pm8001_ha->gs_tbl.recover_err_info[0] = pm8001_mr32(address, 0x44);
|
||||
pm8001_ha->gs_tbl.recover_err_info[1] = pm8001_mr32(address, 0x48);
|
||||
pm8001_ha->gs_tbl.recover_err_info[2] = pm8001_mr32(address, 0x4C);
|
||||
pm8001_ha->gs_tbl.recover_err_info[3] = pm8001_mr32(address, 0x50);
|
||||
pm8001_ha->gs_tbl.recover_err_info[4] = pm8001_mr32(address, 0x54);
|
||||
pm8001_ha->gs_tbl.recover_err_info[5] = pm8001_mr32(address, 0x58);
|
||||
pm8001_ha->gs_tbl.recover_err_info[6] = pm8001_mr32(address, 0x5C);
|
||||
pm8001_ha->gs_tbl.recover_err_info[7] = pm8001_mr32(address, 0x60);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.gst_len_mpistate =
|
||||
pm8001_mr32(address, 0x00);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.iq_freeze_state0 =
|
||||
pm8001_mr32(address, 0x04);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.iq_freeze_state1 =
|
||||
pm8001_mr32(address, 0x08);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.msgu_tcnt =
|
||||
pm8001_mr32(address, 0x0C);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.iop_tcnt =
|
||||
pm8001_mr32(address, 0x10);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.rsvd =
|
||||
pm8001_mr32(address, 0x14);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[0] =
|
||||
pm8001_mr32(address, 0x18);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[1] =
|
||||
pm8001_mr32(address, 0x1C);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[2] =
|
||||
pm8001_mr32(address, 0x20);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[3] =
|
||||
pm8001_mr32(address, 0x24);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[4] =
|
||||
pm8001_mr32(address, 0x28);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[5] =
|
||||
pm8001_mr32(address, 0x2C);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[6] =
|
||||
pm8001_mr32(address, 0x30);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.phy_state[7] =
|
||||
pm8001_mr32(address, 0x34);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.gpio_input_val =
|
||||
pm8001_mr32(address, 0x38);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.rsvd1[0] =
|
||||
pm8001_mr32(address, 0x3C);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.rsvd1[1] =
|
||||
pm8001_mr32(address, 0x40);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[0] =
|
||||
pm8001_mr32(address, 0x44);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[1] =
|
||||
pm8001_mr32(address, 0x48);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[2] =
|
||||
pm8001_mr32(address, 0x4C);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[3] =
|
||||
pm8001_mr32(address, 0x50);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[4] =
|
||||
pm8001_mr32(address, 0x54);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[5] =
|
||||
pm8001_mr32(address, 0x58);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[6] =
|
||||
pm8001_mr32(address, 0x5C);
|
||||
pm8001_ha->gs_tbl.pm8001_tbl.recover_err_info[7] =
|
||||
pm8001_mr32(address, 0x60);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,38 +187,41 @@ static void read_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha)
|
||||
*/
|
||||
static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
|
||||
{
|
||||
int qn = 1;
|
||||
int i;
|
||||
u32 offsetib, offsetob;
|
||||
void __iomem *addressib = pm8001_ha->inbnd_q_tbl_addr;
|
||||
void __iomem *addressob = pm8001_ha->outbnd_q_tbl_addr;
|
||||
|
||||
pm8001_ha->main_cfg_tbl.inbound_q_nppd_hppd = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_hw_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_hw_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_ncq_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_ncq_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ITNexus_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ITNexus_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ssp_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ssp_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_smp_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_smp_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.inbound_q_nppd_hppd = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_hw_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_hw_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_ncq_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_ncq_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_tgt_ITNexus_event_pid0_3 =
|
||||
0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_tgt_ITNexus_event_pid4_7 =
|
||||
0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_tgt_ssp_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_tgt_ssp_event_pid4_7 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_tgt_smp_event_pid0_3 = 0;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_tgt_smp_event_pid4_7 = 0;
|
||||
|
||||
pm8001_ha->main_cfg_tbl.upper_event_log_addr =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.upper_event_log_addr =
|
||||
pm8001_ha->memoryMap.region[AAP1].phys_addr_hi;
|
||||
pm8001_ha->main_cfg_tbl.lower_event_log_addr =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.lower_event_log_addr =
|
||||
pm8001_ha->memoryMap.region[AAP1].phys_addr_lo;
|
||||
pm8001_ha->main_cfg_tbl.event_log_size = PM8001_EVENT_LOG_SIZE;
|
||||
pm8001_ha->main_cfg_tbl.event_log_option = 0x01;
|
||||
pm8001_ha->main_cfg_tbl.upper_iop_event_log_addr =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.event_log_size =
|
||||
PM8001_EVENT_LOG_SIZE;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.event_log_option = 0x01;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.upper_iop_event_log_addr =
|
||||
pm8001_ha->memoryMap.region[IOP].phys_addr_hi;
|
||||
pm8001_ha->main_cfg_tbl.lower_iop_event_log_addr =
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.lower_iop_event_log_addr =
|
||||
pm8001_ha->memoryMap.region[IOP].phys_addr_lo;
|
||||
pm8001_ha->main_cfg_tbl.iop_event_log_size = PM8001_EVENT_LOG_SIZE;
|
||||
pm8001_ha->main_cfg_tbl.iop_event_log_option = 0x01;
|
||||
pm8001_ha->main_cfg_tbl.fatal_err_interrupt = 0x01;
|
||||
for (i = 0; i < qn; i++) {
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.iop_event_log_size =
|
||||
PM8001_EVENT_LOG_SIZE;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.iop_event_log_option = 0x01;
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_interrupt = 0x01;
|
||||
for (i = 0; i < PM8001_MAX_INB_NUM; i++) {
|
||||
pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt =
|
||||
PM8001_MPI_QUEUE | (64 << 16) | (0x00<<30);
|
||||
pm8001_ha->inbnd_q_tbl[i].upper_base_addr =
|
||||
@@ -212,7 +247,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
|
||||
pm8001_ha->inbnd_q_tbl[i].producer_idx = 0;
|
||||
pm8001_ha->inbnd_q_tbl[i].consumer_index = 0;
|
||||
}
|
||||
for (i = 0; i < qn; i++) {
|
||||
for (i = 0; i < PM8001_MAX_OUTB_NUM; i++) {
|
||||
pm8001_ha->outbnd_q_tbl[i].element_size_cnt =
|
||||
PM8001_MPI_QUEUE | (64 << 16) | (0x01<<30);
|
||||
pm8001_ha->outbnd_q_tbl[i].upper_base_addr =
|
||||
@@ -250,42 +285,51 @@ static void update_main_config_table(struct pm8001_hba_info *pm8001_ha)
|
||||
{
|
||||
void __iomem *address = pm8001_ha->main_cfg_tbl_addr;
|
||||
pm8001_mw32(address, 0x24,
|
||||
pm8001_ha->main_cfg_tbl.inbound_q_nppd_hppd);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.inbound_q_nppd_hppd);
|
||||
pm8001_mw32(address, 0x28,
|
||||
pm8001_ha->main_cfg_tbl.outbound_hw_event_pid0_3);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_hw_event_pid0_3);
|
||||
pm8001_mw32(address, 0x2C,
|
||||
pm8001_ha->main_cfg_tbl.outbound_hw_event_pid4_7);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_hw_event_pid4_7);
|
||||
pm8001_mw32(address, 0x30,
|
||||
pm8001_ha->main_cfg_tbl.outbound_ncq_event_pid0_3);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_ncq_event_pid0_3);
|
||||
pm8001_mw32(address, 0x34,
|
||||
pm8001_ha->main_cfg_tbl.outbound_ncq_event_pid4_7);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.outbound_ncq_event_pid4_7);
|
||||
pm8001_mw32(address, 0x38,
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ITNexus_event_pid0_3);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.
|
||||
outbound_tgt_ITNexus_event_pid0_3);
|
||||
pm8001_mw32(address, 0x3C,
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ITNexus_event_pid4_7);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.
|
||||
outbound_tgt_ITNexus_event_pid4_7);
|
||||
pm8001_mw32(address, 0x40,
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ssp_event_pid0_3);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.
|
||||
outbound_tgt_ssp_event_pid0_3);
|
||||
pm8001_mw32(address, 0x44,
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_ssp_event_pid4_7);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.
|
||||
outbound_tgt_ssp_event_pid4_7);
|
||||
pm8001_mw32(address, 0x48,
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_smp_event_pid0_3);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.
|
||||
outbound_tgt_smp_event_pid0_3);
|
||||
pm8001_mw32(address, 0x4C,
|
||||
pm8001_ha->main_cfg_tbl.outbound_tgt_smp_event_pid4_7);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.
|
||||
outbound_tgt_smp_event_pid4_7);
|
||||
pm8001_mw32(address, 0x50,
|
||||
pm8001_ha->main_cfg_tbl.upper_event_log_addr);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.upper_event_log_addr);
|
||||
pm8001_mw32(address, 0x54,
|
||||
pm8001_ha->main_cfg_tbl.lower_event_log_addr);
|
||||
pm8001_mw32(address, 0x58, pm8001_ha->main_cfg_tbl.event_log_size);
|
||||
pm8001_mw32(address, 0x5C, pm8001_ha->main_cfg_tbl.event_log_option);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.lower_event_log_addr);
|
||||
pm8001_mw32(address, 0x58,
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.event_log_size);
|
||||
pm8001_mw32(address, 0x5C,
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.event_log_option);
|
||||
pm8001_mw32(address, 0x60,
|
||||
pm8001_ha->main_cfg_tbl.upper_iop_event_log_addr);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.upper_iop_event_log_addr);
|
||||
pm8001_mw32(address, 0x64,
|
||||
pm8001_ha->main_cfg_tbl.lower_iop_event_log_addr);
|
||||
pm8001_mw32(address, 0x68, pm8001_ha->main_cfg_tbl.iop_event_log_size);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.lower_iop_event_log_addr);
|
||||
pm8001_mw32(address, 0x68,
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.iop_event_log_size);
|
||||
pm8001_mw32(address, 0x6C,
|
||||
pm8001_ha->main_cfg_tbl.iop_event_log_option);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.iop_event_log_option);
|
||||
pm8001_mw32(address, 0x70,
|
||||
pm8001_ha->main_cfg_tbl.fatal_err_interrupt);
|
||||
pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_interrupt);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4706,4 +4750,3 @@ const struct pm8001_dispatch pm8001_8001_dispatch = {
|
||||
.set_dev_state_req = pm8001_chip_set_dev_state_req,
|
||||
.sas_re_init_req = pm8001_chip_sas_re_initialization,
|
||||
};
|
||||
|
||||
|
Посилання в новій задачі
Заблокувати користувача