⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsi.c

📁 凌阳MP3 spSPCA755yuanma
💻 C
📖 第 1 页 / 共 3 页
字号:
        size of data processed

--*/
{
        PSCSIDATA_MODE_REM_BLK_ACC_CAP_PAGE pPage1b;
        UCHAR i;

        pPage1b = (PSCSIDATA_MODE_REM_BLK_ACC_CAP_PAGE) pPage;

        pPage1b->BYTE0.PS = 0;
        pPage1b->BYTE0.reserved = 0;
        pPage1b->BYTE0.pageCode = 0x1b;
        pPage1b->pageLength = SCSIDATA_MODE_REM_BLK_ACC_CAP_PAGE_SIZE - 2;
        pPage1b->BYTE2.SFLP = 0;
        pPage1b->BYTE2.SRFP = 0;
        pPage1b->BYTE2.reserved = 0;
        pPage1b->BYTE3.NCD = 0;
        pPage1b->BYTE3.SML = 0;
        pPage1b->BYTE3.reserved = 0;
        pPage1b->BYTE3.TLUN = 1;
        for (i = 0; i < 8; i++)
                pPage1b->reserved[i] = 0;

        return(SCSIDATA_MODE_REM_BLK_ACC_CAP_PAGE_SIZE);
}

//-----------------------------------------------------------------------------
//SCSICMD_ModePage1c
//-----------------------------------------------------------------------------
ULONG SCSICMD_ModePage1c(PUCHAR pPage) USING_1
/*++

Routine Description:

        process Mode Page 1c

Arguments:

        pSCSI - pointer to SCSI command

Return Value:

        size of data processed

--*/
{
        PSCSIDATA_MODE_TIMER_AND_PROTECT_PAGE pPage1c;
        UCHAR i;

        pPage1c = (PSCSIDATA_MODE_TIMER_AND_PROTECT_PAGE) pPage;

        pPage1c->BYTE0.PS = 0;
        pPage1c->BYTE0.reserved = 0;
        pPage1c->BYTE0.pageCode = 0x1c;
        pPage1c->pageLength = SCSIDATA_MODE_TIMER_AND_PROTECT_PAGE_SIZE - 2;
        pPage1c->reserved0 = 0;
        pPage1c->BYTE3.reserved = 0;
        pPage1c->BYTE3.inactivityTimeMultiplier = 0x01;
        pPage1c->BYTE4.reserved = 0;
        pPage1c->BYTE4.DISP = 0;
        pPage1c->BYTE4.SWPP = 0;
        for (i = 0; i < 3; i++)
                pPage1c->reserved1[i] = 0;

        return(SCSIDATA_MODE_TIMER_AND_PROTECT_PAGE_SIZE);
}

//patch4.5@richie@wp xp begin
//-----------------------------------------------------------------------------
//SCSICMD_Mode06ParameterHeader
//-----------------------------------------------------------------------------
ULONG SCSICMD_Mode06ParameterHeader(PUCHAR pPage, ULONG size) USING_1
/*++

Routine Description:

        process Mode Page 1c

Arguments:

        pSCSI - pointer to SCSI command

Return Value:

        size of data processed

--*/
{
        PSCSIDATA_MODE06_PARAMETER_HEADER pHeader;
        //UCHAR i;

        pHeader = (PSCSIDATA_MODE06_PARAMETER_HEADER) pPage;

        pHeader->modeDataLength = (UCHAR)(size - SCSIDATA_MODE06_PARAMETER_HEADER_SIZE);
//DbgPrint("pHeader->modeDataLength = %bx\n",pHeader->modeDataLength);

        pHeader->mediumTypeCode = 0x00;
	if (G_USBMSDC_ucCardLock == 1)
	{
//	DbgPrint("pHeader->BYTE3.WP = 1;\n");
	        pHeader->BYTE3.WP = 1;
	}
	else
	{
//	DbgPrint("pHeader->BYTE3.WP = 0;\n");
	        pHeader->BYTE3.WP = 0;
	}

        pHeader->BYTE3.reserved0 = 0;
        pHeader->BYTE3.DPOFUA = 0;
        pHeader->BYTE3.reserved1 = 0;
		//richie
        pHeader->reserved = 0;

//DbgPrint("Pages06=");
//for (i = 0;i < 10;i++)
//DbgPrint("%2bx ",G_pucStorDataPointer[i]);
//DbgPrint("\n");

        return(SCSIDATA_MODE06_PARAMETER_HEADER_SIZE);
}

//-----------------------------------------------------------------------------
//SCSICMD_Mode10ParameterHeader
//-----------------------------------------------------------------------------
ULONG SCSICMD_Mode10ParameterHeader(PUCHAR pPage, ULONG size) USING_1
/*++

Routine Description:

        process Mode Page 1c

Arguments:

        pSCSI - pointer to SCSI command

Return Value:

        size of data processed

--*/
{
        PSCSIDATA_MODE10_PARAMETER_HEADER pHeader;
        UCHAR i;

        pHeader = (PSCSIDATA_MODE10_PARAMETER_HEADER) pPage;

        pHeader->modeDataLength = M_ByteSwapOfWord((USHORT)(size - SCSIDATA_MODE10_PARAMETER_HEADER_SIZE));
//DbgPrint("pHeader->modeDataLength = %x\n",pHeader->modeDataLength);

        pHeader->mediumTypeCode = 0x00;
	if (G_USBMSDC_ucCardLock == 1)
	{
	        pHeader->BYTE3.WP = 1;
	}
	else
	{
        pHeader->BYTE3.WP = 0;
	}
        pHeader->BYTE3.reserved0 = 0;
        pHeader->BYTE3.DPOFUA = 0;
        pHeader->BYTE3.reserved1 = 0;
		//richie
        for (i = 0; i < 4; i++)
                pHeader->reserved[i] = 0;

//DbgPrint("Pages10=");
//for (i = 0;i < 10;i++)
//DbgPrint("%2bx ",G_pucStorDataPointer[i]);
//DbgPrint("\n");

        return(SCSIDATA_MODE10_PARAMETER_HEADER_SIZE);
}
//patch4.5@richie@wp xp end

//-----------------------------------------------------------------------------
//SCSICMD_StartStopUnit
//-----------------------------------------------------------------------------
UCHAR SCSICMD_StartStopUnit(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

        process Start Stop Unit command (0x1b)

Arguments:

        pSCSI - pointer to SCSI command
        pSize - data size processed

Return Value:

        valid command or not

--*/
{
        PSCSICMD_06BYTE pSCSI06;

        pSCSI06 = (PSCSICMD_06BYTE) pSCSI;

        *pSize = 0;

        return(TRUE);
}
//Chamber@031103
#if 0
//-----------------------------------------------------------------------------
//SCSICMD_SendDiagnostic
//-----------------------------------------------------------------------------
UCHAR SCSICMD_SendDiagnostic(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

        process Send Diagnostic command (0x1d)

Arguments:

        pSCSI - pointer to SCSI command
        pSize - data size processed

Return Value:

        valid command or not

--*/
{
        PSCSICMD_06BYTE pSCSI06;

        pSCSI06 = (PSCSICMD_06BYTE) pSCSI;

        *pSize = 0;

        return(TRUE);
}
#endif
//-----------------------------------------------------------------------------
//SCSICMD_PreventAllowMediumRemoval
//-----------------------------------------------------------------------------
UCHAR SCSICMD_PreventAllowMediumRemoval(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

        process Prevent Allow Medium Removal command (0x1e)

Arguments:

        pSCSI - pointer to SCSI command
        pSize - data size processed

Return Value:

        valid command or not

--*/
{
        PSCSICMD_06BYTE pSCSI06;

        pSCSI06 = (PSCSICMD_06BYTE) pSCSI;

        *pSize = 0;


        return(TRUE);
}

//-----------------------------------------------------------------------------
//SCSICMD_ReadCapacity
//-----------------------------------------------------------------------------
UCHAR SCSICMD_ReadCapacity(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

        process Read Capacity command (0x25)

Arguments:

        pSCSI - pointer to SCSI command
        pSize - data size processed

Return Value:

        valid command or not

--*/
{
        PSCSICMD_10BYTE pSCSI10;
        PSCSIDATA_READ_CAPACITY pReadCapacity;

		//richie@1203 if no medium then set sensekey = 02
		if (G_ucStorageType != G_Card_Type)
		{
        	G_USBMSDC_ucCSWStatus = K_USBMSDC_NoMedium;
			*pSize = 0;
			return (FALSE);	
		}


        pSCSI10 = (PSCSICMD_10BYTE) pSCSI;
        pReadCapacity = (PSCSIDATA_READ_CAPACITY) G_pucStorDataPointer;

	// 110602@wyeo
		//richie@1211
        //pReadCapacity->lastLogicalBlockAddress =
        //        (((ULONG) G_Card_TotalSizeMB << 20) / G_Card_BytePerSector) - 1;
        pReadCapacity->lastLogicalBlockAddress = G_Card_SectorPerCard - 1;

        pReadCapacity->blockLengthInBytes =
                (ULONG) G_Card_BytePerSector;

        *pSize = SCSIDATA_READ_CAPACITY_SIZE;

        return(TRUE);
}

//-----------------------------------------------------------------------------
//SCSICMD_Read10
//-----------------------------------------------------------------------------
UCHAR SCSICMD_Read10(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

        process Read 10 command (0x28)

Arguments:

        pSCSI - pointer to SCSI command
        pSize - data size processed

Return Value:

        valid command or not

--*/
{
        PSCSICMD_10BYTE pSCSI10;

        pSCSI10 = (PSCSICMD_10BYTE) pSCSI;



		//richie@1203 if no medium then set sensekey = 02
		if (G_ucStorageType != G_Card_Type)
		{
        	G_USBMSDC_ucCSWStatus = K_USBMSDC_NoMedium;
			*pSize = 0;
			return (FALSE);	
		}


		//richie@1211
        G_USBMSDC_ulLogicalBlockAddress = (ULONG) pSCSI10->logicalBlockAddress * (ULONG) G_Card_BytePerSector;
		//richie@1211
        *pSize = (ULONG) pSCSI10->dataLength * (ULONG) G_Card_BytePerSector;

		//richie@1219
//                G_USBMSDC_ulSdramBufferAddress = K_SDRAM_FrameBufAAddr;
//		DbgPrint("ReadCmd\n");
        return(TRUE);
}

//-----------------------------------------------------------------------------
//SCSICMD_Write10
//-----------------------------------------------------------------------------
UCHAR SCSICMD_Write10(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

        process Write 10 command (0x2a)

Arguments:

        pSCSI - pointer to SCSI command
        pSize - data size processed

Return Value:

        valid command or not

--*/
{
        PSCSICMD_10BYTE pSCSI10;

        pSCSI10 = (PSCSICMD_10BYTE) pSCSI;

        //DbgPrint("G_ucStorageType=%d\n",(WORD)G_ucStorageType);
		//richie@1203 if no medium then set sensekey = 02
		if (G_ucStorageType != G_Card_Type)
		{
        	G_USBMSDC_ucCSWStatus = K_USBMSDC_NoMedium;
			*pSize = 0;
			return (FALSE);	
		}        
												//patch4.5@richie@msdc dos variable G_Card_BytePerSector
		G_USBMSDC_ulLogicalBlockAddress = (ULONG) pSCSI10->logicalBlockAddress * (ULONG) G_Card_BytePerSector;

						//patch4.5@richie@msdc dos variable G_Card_BytePerSector
        *pSize = (ULONG) pSCSI10->dataLength * (ULONG) G_Card_BytePerSector;
        //DbgPrint("addr=%lx,dos sec=%d  datalen=%ld\n",G_USBMSDC_ulLogicalBlockAddress,(WORD)G_Card_BytePerSector,(ULONG) pSCSI10->dataLength);


//                G_USBMSDC_ulSdramBufferAddress = K_SDRAM_FrameBufAAddr;


        return(TRUE);
}

// 110102@wyeo
#if 0
//-----------------------------------------------------------------------------
//SCSICMD_Seek10
//-----------------------------------------------------------------------------
UCHAR SCSICMD_Seek10(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

        process Seek 10 command (0x2b)
        pSize - data size processed

Arguments:

        pSCSI - pointer to SCSI command

Return Value:

        valid command or not

--*/
{
        PSCSICMD_10BYTE pSCSI10;

        pSCSI10 = (PSCSICMD_10BYTE) pSCSI;

											//patch4.5@richie@msdc dos variable G_Card_BytePerSector
        G_USBMSDC_ulLogicalBlockAddress = (ULONG) pSCSI10->logicalBlockAddress * (ULONG) G_Card_BytePerSector;

        *pSize = 0;

        return(TRUE);
}

//-----------------------------------------------------------------------------
//SCSICMD_WriteAndVerify10
//-----------------------------------------------------------------------------
UCHAR SCSICMD_WriteAndVerify10(PUCHAR pSCSI, PULONG pSize) USING_1
/*++

Routine Description:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -