/**************************************************************************** * * * Copyright 2004-2011 NetApp Inc. All rights reserved. This file is * * confidential and a trade secret of NetApp Inc. The receipt or * * possession of this file does not convey any rights to reproduce or * * disclose its contents or to manufacture, use, or sell anything it may * * describe, in whole, or in part, without the specific written consent of * * NetApp Inc. * * * ****************************************************************************/ /**************************************************************************** * * * NAME hddMgr.h * * SUMMARY * * VERSION %version: % * * UPDATE DATE %date_modified: % * * PROGRAMMER %created_by: Merck Hung % * * * * Copyright 2002-2011 NetApp Inc. All Rights Reserved. * * * * DESCRIPTION: * * * ****************************************************************************/ #define HDD_MGR_NAME "hddMgr" #define HDD_MGR_VER "V1.0.0" #define MAX_PHY_NUM 38 #define MAX_HDD_NUM 60 #define MAX_SAS_NUM 5 #define MAX_BUF_SIZE 1024 #define MAX_BLKNAME_SIZE 64 #define MAX_DCM_PHY_NUM 12 #define MAX_DCM_EXP_NUM 5 #define HDD_PREFIX_SAS "sas" #define HDD_PREFIX_USB "usb" #define HDD_PREFIX_RAM "ram" #define HDD_PREFIX_SATA "sata" #define HDD_SUFFIX "disk" #define HDD_SUFFIX_SYS "drv" #define HDD_POFIX_SYS_PATH_A "local" #define HDD_POFIX_SYS_PATH_B "remote" #define DEV_BASE_PATH "/dev" #define BLOCK_DEV_PATH "/sys/block" #define CTL_SLOT_PATH "/sys/firmware/fpgaZebulon/CtrlSlot" #define CTL_ENCLOSURE_PATH "/sys/firmware/fpgaZebulon/EnclosureId" #define CTL_HICTYPE_PATH "/sys/firmware/fpgaZebulon/HostCardType" #define CTL_HIC_ID_PATH "/sys/firmware/fpgaZebulon/HostCardId" #define CTL_DRVMAP_PATH "/sys/firmware/fpgaZebulon/ExpPhyHardDriveMap" #define CTL_SASMAP_PATH "/sys/firmware/fpgaZebulon/ExpPhySasCtlMap" #define EXPANDER_PATH "/sys/class/sas_expander" #define SASPHY_PATH "/sys/class/sas_phy" #define DIAG_ENV_FILE "/usr/local/share/diag_env" // Diagnostics environmental variables #define EXPANDER_PREFIX "expander-" #define PHY_PREFIX "phy-" #define ENDDEV_PREFIX "end_device-" #define TARGET_PREFIX "target" #define ARGU_SAS_PREFIX "SAS" #define ARGU_HDD "HDD" #define ARGU_PATH_DIS "DISABLE" #define ARGU_VERBOSE "VERBOSE" #define ARGU_SILENT "SILENT" #define ARGU_NODEV "NODEV" #define ACADIA_QUAD 0x05 #define ACADIA_DUAL 0x02 #define ACADIA_PLUS_QUAD 0x0B #define ACADIA_PLUS_DUAL 0x0A #define CASCADE 0x02 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define DRV_BIT(x) (1UL << x) typedef enum _enclosureSlot { CTL_SLOT_A = 0, CTL_SLOT_B, } enclosureSlot_t; typedef enum _enclosureName { ENCLOSURE_EBBETS = 0, ENCLOSURE_CAMDEN, ENCLOSURE_WSAS, ENCLOSURE_JOSHUA, ENCLOSURE_ALDER, ENCLOSURE_TSAS, // Trafford ENCLOSURE_TESTMP, ENCLOSURE_UNKNOWN } enclosureName_t; typedef enum _HicType { HOST_CARD_NONE = 0, HOST_CARD_FC, HOST_CARD_ISCSI, HOST_CARD_IB, HOST_CARD_SAS } HicType_t; enum { SASPHY_TYPE_UNKNOWN = 0, SASPHY_TYPE_IOC, SASPHY_TYPE_EXP, SASPHY_TYPE_EXPDCM, }; typedef struct _sasPhyAttr { char phyName[ MAX_BLKNAME_SIZE ]; int phyType; int hostNo; int tgtNo; int numNo; int sasNo; int slotNo; int drawerNo; char blockName[ MAX_BLKNAME_SIZE ]; } sasPhyAttr_t; typedef struct _enclosure { unsigned int enclosureId; unsigned int numOfHardDrive; unsigned char *sasDrvPhyMap[ 2 ]; } enclosure_t; // // Prototypes // int findCtlSlot( void ); int findEnclosure( void ); int findHicType( void ); int findHicId( void ); int findWsasDrvByExpAndPhy( unsigned int slot, unsigned int expNo, unsigned int phyNo ); int findTsasDrvByExpAndPhy( unsigned int slot, unsigned int expNo, unsigned int phyNo ); int findSasDrvByPhy( unsigned int enclosureId, unsigned int slot, unsigned int phyNum ); int testFile( char *file ); int obtainMajorMinorNo( char *file, int *major, int *minor ); int findSasIocNo( char *p ); void removeOldHddNodes( void ); void removeOldHddNodesByIoc(int sas0_local, int sas1_remote, int sas1_port0, int sas1_port1); int getOrderNumOfExp( char *path, int ch1, int ch2 ); int writeDriveMap( unsigned int value ); int writeSasCtlMap( int exp_phy8_11, int exp_phy12_15, int exp_phy16_19, int exp_phy20_23); int delayForAllHddPresent( unsigned int encl, int sas0_local, int sas0_remote, int sas1_port0, int sas1_port1); int createUsbNodes( void ); int createSataNodes( void ); int createRamdiskNodes( void ); char *readFileToNewBuffer( const char *basePath );