Lines Matching +full:sha +full:- +full:1
2 * PMC-Sierra 8001/8081/8088/8089 SAS/SATA based host adapters driver
4 * Copyright (c) 2008-2009 USI Co., Ltd.
10 * 1. Redistributions of source code must retain the above copyright
18 * 3. Neither the names of the above-listed copyright holders nor the names
49 * pm8001_ctl_mpi_interface_rev_show - MPI interface revision number
54 * A sysfs 'read-only' shost attribute.
60 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_mpi_interface_rev_show() local
61 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_mpi_interface_rev_show()
63 if (pm8001_ha->chip_id == chip_8001) { in pm8001_ctl_mpi_interface_rev_show()
65 pm8001_ha->main_cfg_tbl.pm8001_tbl.interface_rev); in pm8001_ctl_mpi_interface_rev_show()
68 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interface_rev); in pm8001_ctl_mpi_interface_rev_show()
75 * controller_fatal_error_show - check controller is under fatal err
80 * A sysfs 'read-only' shost attribute.
86 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in controller_fatal_error_show() local
87 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in controller_fatal_error_show()
90 pm8001_ha->controller_fatal_error); in controller_fatal_error_show()
95 * pm8001_ctl_fw_version_show - firmware version
100 * A sysfs 'read-only' shost attribute.
106 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_fw_version_show() local
107 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_fw_version_show()
109 if (pm8001_ha->chip_id == chip_8001) { in pm8001_ctl_fw_version_show()
111 (u8)(pm8001_ha->main_cfg_tbl.pm8001_tbl.firmware_rev >> 24), in pm8001_ctl_fw_version_show()
112 (u8)(pm8001_ha->main_cfg_tbl.pm8001_tbl.firmware_rev >> 16), in pm8001_ctl_fw_version_show()
113 (u8)(pm8001_ha->main_cfg_tbl.pm8001_tbl.firmware_rev >> 8), in pm8001_ctl_fw_version_show()
114 (u8)(pm8001_ha->main_cfg_tbl.pm8001_tbl.firmware_rev)); in pm8001_ctl_fw_version_show()
117 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev >> 24), in pm8001_ctl_fw_version_show()
118 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev >> 16), in pm8001_ctl_fw_version_show()
119 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev >> 8), in pm8001_ctl_fw_version_show()
120 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev)); in pm8001_ctl_fw_version_show()
126 * pm8001_ctl_ila_version_show - ila version
131 * A sysfs 'read-only' shost attribute.
137 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_ila_version_show() local
138 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_ila_version_show()
140 if (pm8001_ha->chip_id != chip_8001) { in pm8001_ctl_ila_version_show()
142 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version >> 24), in pm8001_ctl_ila_version_show()
143 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version >> 16), in pm8001_ctl_ila_version_show()
144 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version >> 8), in pm8001_ctl_ila_version_show()
145 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version)); in pm8001_ctl_ila_version_show()
152 * pm8001_ctl_inactive_fw_version_show - Inactive firmware version number
157 * A sysfs 'read-only' shost attribute.
163 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_inactive_fw_version_show() local
164 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_inactive_fw_version_show()
166 if (pm8001_ha->chip_id != chip_8001) { in pm8001_ctl_inactive_fw_version_show()
168 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version >> 24), in pm8001_ctl_inactive_fw_version_show()
169 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version >> 16), in pm8001_ctl_inactive_fw_version_show()
170 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version >> 8), in pm8001_ctl_inactive_fw_version_show()
171 (u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version)); in pm8001_ctl_inactive_fw_version_show()
179 * pm8001_ctl_max_out_io_show - max outstanding io supported
184 * A sysfs 'read-only' shost attribute.
190 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_max_out_io_show() local
191 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_max_out_io_show()
193 if (pm8001_ha->chip_id == chip_8001) { in pm8001_ctl_max_out_io_show()
195 pm8001_ha->main_cfg_tbl.pm8001_tbl.max_out_io); in pm8001_ctl_max_out_io_show()
198 pm8001_ha->main_cfg_tbl.pm80xx_tbl.max_out_io); in pm8001_ctl_max_out_io_show()
203 * pm8001_ctl_max_devices_show - max devices support
208 * A sysfs 'read-only' shost attribute.
214 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_max_devices_show() local
215 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_max_devices_show()
217 if (pm8001_ha->chip_id == chip_8001) { in pm8001_ctl_max_devices_show()
219 (u16)(pm8001_ha->main_cfg_tbl.pm8001_tbl.max_sgl >> 16) in pm8001_ctl_max_devices_show()
223 (u16)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.max_sgl >> 16) in pm8001_ctl_max_devices_show()
229 * pm8001_ctl_max_sg_list_show - max sg list supported iff not 0.0 for no
235 * A sysfs 'read-only' shost attribute.
241 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_max_sg_list_show() local
242 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_max_sg_list_show()
244 if (pm8001_ha->chip_id == chip_8001) { in pm8001_ctl_max_sg_list_show()
246 pm8001_ha->main_cfg_tbl.pm8001_tbl.max_sgl & 0x0000FFFF in pm8001_ctl_max_sg_list_show()
250 pm8001_ha->main_cfg_tbl.pm80xx_tbl.max_sgl & 0x0000FFFF in pm8001_ctl_max_sg_list_show()
266 len = sprintf(buf, "%s", "SAS1.1"); in show_sas_spec_support_status()
275 * pm8001_ctl_sas_spec_support_show - sas spec supported
280 * A sysfs 'read-only' shost attribute.
287 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_sas_spec_support_show() local
288 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_sas_spec_support_show()
289 /* fe000000 means supports SAS2.1 */ in pm8001_ctl_sas_spec_support_show()
290 if (pm8001_ha->chip_id == chip_8001) in pm8001_ctl_sas_spec_support_show()
291 mode = (pm8001_ha->main_cfg_tbl.pm8001_tbl.ctrl_cap_flag & in pm8001_ctl_sas_spec_support_show()
294 /* fe000000 means supports SAS2.1 */ in pm8001_ctl_sas_spec_support_show()
295 mode = (pm8001_ha->main_cfg_tbl.pm80xx_tbl.ctrl_cap_flag & in pm8001_ctl_sas_spec_support_show()
303 * pm8001_ctl_host_sas_address_show - sas address
310 * A sysfs 'read-only' shost attribute.
316 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_host_sas_address_show() local
317 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_host_sas_address_show()
319 be64_to_cpu(*(__be64 *)pm8001_ha->sas_addr)); in pm8001_ctl_host_sas_address_show()
325 * pm8001_ctl_logging_level_show - logging level
336 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_logging_level_show() local
337 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_logging_level_show()
339 return snprintf(buf, PAGE_SIZE, "%08xh\n", pm8001_ha->logging_level); in pm8001_ctl_logging_level_show()
346 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_logging_level_store() local
347 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_logging_level_store()
350 if (sscanf(buf, "%x", &val) != 1) in pm8001_ctl_logging_level_store()
351 return -EINVAL; in pm8001_ctl_logging_level_store()
353 pm8001_ha->logging_level = val; in pm8001_ctl_logging_level_store()
360 * pm8001_ctl_aap_log_show - aap1 event log
365 * A sysfs 'read-only' shost attribute.
371 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_aap_log_show() local
372 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_aap_log_show()
373 u8 *ptr = (u8 *)pm8001_ha->memoryMap.region[AAP1].virt_ptr; in pm8001_ctl_aap_log_show()
391 return str - buf; in pm8001_ctl_aap_log_show()
395 * pm8001_ctl_ib_queue_log_show - Out bound Queue log
400 * A sysfs 'read-only' shost attribute.
406 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_ib_queue_log_show() local
407 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_ib_queue_log_show()
411 u32 ib_offset = pm8001_ha->ib_offset; in pm8001_ctl_ib_queue_log_show()
413 (*(u32 *)((u8 *)pm8001_ha-> \ in pm8001_ctl_ib_queue_log_show()
415 pm8001_ha->evtlog_ib_offset + (c))) in pm8001_ctl_ib_queue_log_show()
421 pm8001_ha->evtlog_ib_offset += SYSFS_OFFSET; in pm8001_ctl_ib_queue_log_show()
422 if (((pm8001_ha->evtlog_ib_offset) % (PM80XX_IB_OB_QUEUE_SIZE)) == 0) in pm8001_ctl_ib_queue_log_show()
423 pm8001_ha->evtlog_ib_offset = 0; in pm8001_ctl_ib_queue_log_show()
425 return str - buf; in pm8001_ctl_ib_queue_log_show()
430 * pm8001_ctl_ob_queue_log_show - Out bound Queue log
435 * A sysfs 'read-only' shost attribute.
442 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_ob_queue_log_show() local
443 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_ob_queue_log_show()
447 u32 ob_offset = pm8001_ha->ob_offset; in pm8001_ctl_ob_queue_log_show()
449 (*(u32 *)((u8 *)pm8001_ha-> \ in pm8001_ctl_ob_queue_log_show()
451 pm8001_ha->evtlog_ob_offset + (c))) in pm8001_ctl_ob_queue_log_show()
457 pm8001_ha->evtlog_ob_offset += SYSFS_OFFSET; in pm8001_ctl_ob_queue_log_show()
458 if (((pm8001_ha->evtlog_ob_offset) % (PM80XX_IB_OB_QUEUE_SIZE)) == 0) in pm8001_ctl_ob_queue_log_show()
459 pm8001_ha->evtlog_ob_offset = 0; in pm8001_ctl_ob_queue_log_show()
461 return str - buf; in pm8001_ctl_ob_queue_log_show()
465 * pm8001_ctl_bios_version_show - Bios version Display
470 * A sysfs 'read-only' shost attribute.
476 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_bios_version_show() local
477 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_bios_version_show()
483 pm8001_ha->nvmd_completion = &completion; in pm8001_ctl_bios_version_show()
489 return -ENOMEM; in pm8001_ctl_bios_version_show()
490 if (PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload)) { in pm8001_ctl_bios_version_show()
492 return -ENOMEM; in pm8001_ctl_bios_version_show()
500 return str - buf; in pm8001_ctl_bios_version_show()
504 * event_log_size_show - event log size
515 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in event_log_size_show() local
516 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in event_log_size_show()
519 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size); in event_log_size_show()
523 * pm8001_ctl_iop_log_show - IOP event log
528 * A sysfs 'read-only' shost attribute.
534 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_ctl_iop_log_show() local
535 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_ctl_iop_log_show()
538 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size / 1024; in pm8001_ctl_iop_log_show()
542 u32 *temp = (u32 *)pm8001_ha->memoryMap.region[IOP].virt_ptr; in pm8001_ctl_iop_log_show()
556 return str - buf; in pm8001_ctl_iop_log_show()
561 * pm8001_ctl_fatal_log_show - fatal error logging
566 * A sysfs 'read-only' shost attribute.
581 * non_fatal_log_show - non fatal error logging
586 * A sysfs 'read-only' shost attribute.
602 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in non_fatal_count_show() local
603 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in non_fatal_count_show()
606 pm8001_ha->non_fatal_count); in non_fatal_count_show()
613 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in non_fatal_count_store() local
614 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in non_fatal_count_store()
618 return -EINVAL; in non_fatal_count_store()
620 pm8001_ha->non_fatal_count = val; in non_fatal_count_store()
626 * pm8001_ctl_gsm_log_show - gsm dump collection
631 * A sysfs 'read-only' shost attribute.
686 u32 length = 1024 * 5 + sizeof(*payload) - 1; in pm8001_set_nvmd()
688 if (pm8001_ha->fw_image->size > 4096) { in pm8001_set_nvmd()
689 pm8001_ha->fw_status = FAIL_FILE_SIZE; in pm8001_set_nvmd()
690 return -EFAULT; in pm8001_set_nvmd()
695 pm8001_ha->fw_status = FAIL_OUT_MEMORY; in pm8001_set_nvmd()
696 return -ENOMEM; in pm8001_set_nvmd()
699 memcpy((u8 *)&payload->func_specific, (u8 *)pm8001_ha->fw_image->data, in pm8001_set_nvmd()
700 pm8001_ha->fw_image->size); in pm8001_set_nvmd()
701 payload->wr_length = pm8001_ha->fw_image->size; in pm8001_set_nvmd()
702 payload->id = 0; in pm8001_set_nvmd()
703 payload->minor_function = 0x1; in pm8001_set_nvmd()
704 pm8001_ha->nvmd_completion = &completion; in pm8001_set_nvmd()
705 ret = PM8001_CHIP_DISP->set_nvmd_req(pm8001_ha, payload); in pm8001_set_nvmd()
707 pm8001_ha->fw_status = FAIL_OUT_MEMORY; in pm8001_set_nvmd()
727 u32 length = 1024 * 16 + sizeof(*payload) - 1; in pm8001_update_flash()
729 if (pm8001_ha->fw_image->size < 28) { in pm8001_update_flash()
730 pm8001_ha->fw_status = FAIL_FILE_SIZE; in pm8001_update_flash()
731 return -EFAULT; in pm8001_update_flash()
735 pm8001_ha->fw_status = FAIL_OUT_MEMORY; in pm8001_update_flash()
736 return -ENOMEM; in pm8001_update_flash()
738 image_hdr = (struct pm8001_fw_image_header *)pm8001_ha->fw_image->data; in pm8001_update_flash()
739 while (sizeRead < pm8001_ha->fw_image->size) { in pm8001_update_flash()
741 *(u32 *)((u8 *)&image_hdr->image_length + sizeRead); in pm8001_update_flash()
747 payload->wr_length = 1024*16; in pm8001_update_flash()
748 payload->id = 0; in pm8001_update_flash()
750 (struct fw_control_info *)&payload->func_specific; in pm8001_update_flash()
751 fwControl->len = IOCTL_BUF_SIZE; /* IN */ in pm8001_update_flash()
752 fwControl->size = partitionSize + HEADER_LEN;/* IN */ in pm8001_update_flash()
753 fwControl->retcode = 0;/* OUT */ in pm8001_update_flash()
754 fwControl->offset = loopNumber * IOCTL_BUF_SIZE;/*OUT */ in pm8001_update_flash()
758 if (((loopcount-loopNumber) == 1) && in pm8001_update_flash()
760 fwControl->len = in pm8001_update_flash()
762 memcpy((u8 *)fwControl->buffer, in pm8001_update_flash()
763 (u8 *)pm8001_ha->fw_image->data + sizeRead, in pm8001_update_flash()
768 memcpy((u8 *)fwControl->buffer, in pm8001_update_flash()
769 (u8 *)pm8001_ha->fw_image->data + sizeRead, in pm8001_update_flash()
774 pm8001_ha->nvmd_completion = &completion; in pm8001_update_flash()
775 ret = PM8001_CHIP_DISP->fw_flash_update_req(pm8001_ha, payload); in pm8001_update_flash()
777 pm8001_ha->fw_status = FAIL_OUT_MEMORY; in pm8001_update_flash()
781 if (fwControl->retcode > FLASH_UPDATE_IN_PROGRESS) { in pm8001_update_flash()
782 pm8001_ha->fw_status = fwControl->retcode; in pm8001_update_flash()
783 ret = -EFAULT; in pm8001_update_flash()
797 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_store_update_fw() local
798 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_store_update_fw()
805 return -EACCES; in pm8001_store_update_fw()
809 if (pm8001_ha->fw_status == FLASH_IN_PROGRESS) in pm8001_store_update_fw()
810 return -EINPROGRESS; in pm8001_store_update_fw()
811 pm8001_ha->fw_status = FLASH_IN_PROGRESS; in pm8001_store_update_fw()
815 pm8001_ha->fw_status = FAIL_OUT_MEMORY; in pm8001_store_update_fw()
816 return -ENOMEM; in pm8001_store_update_fw()
822 pm8001_ha->fw_status = FAIL_PARAMETERS; in pm8001_store_update_fw()
823 ret = -EINVAL; in pm8001_store_update_fw()
835 pm8001_ha->fw_status = FAIL_PARAMETERS; in pm8001_store_update_fw()
836 ret = -EINVAL; in pm8001_store_update_fw()
840 ret = request_firmware(&pm8001_ha->fw_image, in pm8001_store_update_fw()
842 pm8001_ha->dev); in pm8001_store_update_fw()
848 pm8001_ha->fw_status = FAIL_OPEN_BIOS_FILE; in pm8001_store_update_fw()
857 release_firmware(pm8001_ha->fw_image); in pm8001_store_update_fw()
864 pm8001_ha->fw_status = FLASH_OK; in pm8001_store_update_fw()
873 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in pm8001_show_update_fw() local
874 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm8001_show_update_fw()
877 if (flash_error_table[i].err_code == pm8001_ha->fw_status) in pm8001_show_update_fw()
880 if (pm8001_ha->fw_status != FLASH_IN_PROGRESS) in pm8001_show_update_fw()
881 pm8001_ha->fw_status = FLASH_OK; in pm8001_show_update_fw()
891 * ctl_mpi_state_show - controller MPI state check
895 * A sysfs 'read-only' shost attribute.
909 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in ctl_mpi_state_show() local
910 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in ctl_mpi_state_show()
913 mpidw0 = pm8001_mr32(pm8001_ha->general_stat_tbl_addr, 0); in ctl_mpi_state_show()
919 * ctl_hmi_error_show - controller MPI initialization fails
923 * A sysfs 'read-only' shost attribute.
930 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in ctl_hmi_error_show() local
931 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in ctl_hmi_error_show()
934 mpidw0 = pm8001_mr32(pm8001_ha->general_stat_tbl_addr, 0); in ctl_hmi_error_show()
940 * ctl_raae_count_show - controller raae count check
944 * A sysfs 'read-only' shost attribute.
951 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in ctl_raae_count_show() local
952 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in ctl_raae_count_show()
955 raaecnt = pm8001_mr32(pm8001_ha->general_stat_tbl_addr, 12); in ctl_raae_count_show()
961 * ctl_iop0_count_show - controller iop0 count check
965 * A sysfs 'read-only' shost attribute.
972 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in ctl_iop0_count_show() local
973 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in ctl_iop0_count_show()
976 iop0cnt = pm8001_mr32(pm8001_ha->general_stat_tbl_addr, 16); in ctl_iop0_count_show()
982 * ctl_iop1_count_show - controller iop1 count check
986 * A sysfs 'read-only' shost attribute.
993 struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost); in ctl_iop1_count_show() local
994 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in ctl_iop1_count_show()
997 iop1cnt = pm8001_mr32(pm8001_ha->general_stat_tbl_addr, 20); in ctl_iop1_count_show()