@@ -569,6 +569,22 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
569569 break ;
570570
571571 case SNDK_NVME_SN861_DEV_ID_E1S :
572+ capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
573+ SNDK_DRIVE_CAP_C3_LOG_PAGE |
574+ SNDK_DRIVE_CAP_CA_LOG_PAGE |
575+ SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE |
576+ SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE |
577+ SNDK_DRIVE_CAP_INTERNAL_LOG |
578+ SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
579+ SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
580+ SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
581+ SNDK_DRIVE_CAP_INFO |
582+ SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
583+ SNDK_DRIVE_CAP_LOG_PAGE_DIR |
584+ SNDK_DRIVE_CAP_DRIVE_STATUS |
585+ SNDK_DRIVE_CAP_SET_LATENCY_MONITOR );
586+ break ;
587+
572588 case SNDK_NVME_SN861_DEV_ID_U2 :
573589 case SNDK_NVME_SN861_DEV_ID_E3S :
574590 capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
@@ -584,7 +600,7 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
584600 SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
585601 SNDK_DRIVE_CAP_LOG_PAGE_DIR |
586602 SNDK_DRIVE_CAP_DRIVE_STATUS |
587- SNDK_DRIVE_CAP_RESIZE |
603+ SNDK_DRIVE_CAP_RESIZE_SN861 |
588604 SNDK_DRIVE_CAP_SET_LATENCY_MONITOR );
589605 break ;
590606
@@ -624,7 +640,8 @@ __u64 sndk_get_enc_drive_capabilities(nvme_root_t r,
624640 int ret ;
625641 uint32_t read_vendor_id ;
626642 __u64 capabilities = 0 ;
627- __u32 cust_id , market_name_len ;
643+ __u32 cust_id , market_name_len ,
644+ drive_form_factor = 0 ;
628645 char marketing_name [64 ];
629646 void * dev_mng_log = NULL ;
630647 int uuid_index = 0 ;
@@ -683,12 +700,20 @@ __u64 sndk_get_enc_drive_capabilities(nvme_root_t r,
683700 (void * )& cust_id ))
684701 fprintf (stderr , "ERROR: SNDK: Get Customer FW ID Failed\n" );
685702
703+ /* Get the marketing name */
686704 if (!sndk_nvme_parse_dev_status_log_str (dev_mng_log ,
687705 SNDK_C2_MARKETING_NAME_ID ,
688706 (char * )marketing_name ,
689707 & market_name_len ))
690708 fprintf (stderr , "ERROR: SNDK: Get Marketing Name Failed\n" );
691709
710+ /* Get the drive form factor */
711+ if (!sndk_nvme_parse_dev_status_log_entry (dev_mng_log ,
712+ SNDK_C2_FORM_FACTOR ,
713+ (void * )& drive_form_factor ))
714+ fprintf (stderr , "ERROR: SNDK: Getting Form Factor Failed\n" );
715+
716+
692717 /* verify the 0xC3 log page is supported */
693718 if (run_wdc_nvme_check_supported_log_page (r , dev ,
694719 SNDK_LATENCY_MON_LOG_ID , 0 ))
@@ -712,14 +737,24 @@ __u64 sndk_get_enc_drive_capabilities(nvme_root_t r,
712737 if ((cust_id == SNDK_CUSTOMER_ID_0x1004 ) ||
713738 (cust_id == SNDK_CUSTOMER_ID_0x1008 ) ||
714739 (cust_id == SNDK_CUSTOMER_ID_0x1005 ) ||
715- (cust_id == SNDK_CUSTOMER_ID_0x1304 ) ||
716- (!strncmp (marketing_name , SNDK_SN861_MARKETING_NAME_1 , market_name_len )) ||
717- (!strncmp (marketing_name , SNDK_SN861_MARKETING_NAME_2 , market_name_len )))
740+ (cust_id == SNDK_CUSTOMER_ID_0x1304 ))
718741 /* Set capabilities for OCP compliant drives */
719742 capabilities |= (SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
720743 SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
721744 SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE );
722- else {
745+ else if ((!strncmp (marketing_name , SNDK_SN861_MARKETING_NAME_1 , market_name_len )) ||
746+ (!strncmp (marketing_name , SNDK_SN861_MARKETING_NAME_2 , market_name_len ))) {
747+ /* Set capabilities for OCP compliant drives */
748+ capabilities |= (SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
749+ SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
750+ SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE );
751+
752+ if ((drive_form_factor == SNDK_C2_FORM_FACTOR_SFF_U2 ) ||
753+ (drive_form_factor == SNDK_C2_FORM_FACTOR_EDSFF_E3S ))
754+ capabilities |= SNDK_DRIVE_CAP_RESIZE_SN861 ;
755+ else
756+ capabilities &= ~SNDK_DRIVE_CAP_RESIZE ;
757+ } else {
723758 capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
724759 SNDK_DRIVE_CAP_CLEAR_PCIE );
725760
0 commit comments