亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hal4ata.c

?? 周立功的文件系統
?? C
字號:
/*
//////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1999 - 2003 PHILIPS Semiconductors - APIC
//
// Module Name:
//
//     HAL4ATA.c
//
// Abstract:
//
//     This is HAL for IDE controllers.
//
// Author:
//
//     Hilbert Zhang ZhenYu
//
// Environment:
//
//     kernel mode only
//
// Notes:
//
// Revision History:
//     Create Date: Nov. 19 1999
//
//////////////////////////////////////////////////////////////////////////////
// Implementation Notes:
*/

#include  "config.h"                /* special function register declarations   */

#undef   GLOBAL_EXT

#include "SysCnfg.h"

#include "BasicTyp.h"
#include "common.h"

#include "Hal4Sys.h"

#include "ATA.h"
#include "RBC.h"
#include "RBCCmd.h"
#include "Hal4ATA.h"

#include "TPBulk.h"


//*************************************************************************
//  Public Data
//*************************************************************************

STRUC_EXT TPBLK_STRUC		TPBulk_Block;
#define     TPBulk_CBW				TPBulk_Block.TPBulk_CommandBlock
#define	    RBC_CDB					TPBulk_CBW.cdbRBC
#define     RBC_LUN					TPBulk_CBW.bCBW_LUN
#define     TPBulk_CSW				TPBulk_Block.TPBulk_CommandStatus
#define     Hal4ATA_Atapi			RBC_CDB

STRUC_EXT   HW_ATA_DEVICES_EXTENSION	Hal4ATA_DevExt;
#define     ATADevExt_IDData            Hal4ATA_DevExt.IdentifyData

STRUC_EXT BITFLAGS     bFlags;

#define             MCUBF_Timer  					bFlags.bits.timer
#define             D12BF_SetupOverwritten  		bFlags.bits.setup_overwritten
#define             D12BF_Configuration	  			bFlags.bits.;configuration
#define             REQBF_DCPRequest_dir  			bFlags.bits.DCPRequst_Dir
#define             REQBF_DCPRequest_EPdir  		bFlags.bits.DCPRequst_EPDir
#define             REQBF_StallDCPRequest   		bFlags.bits.Stall_DCPRequest
#define             BOTBF_StallAtBulkOut  			bFlags.bits.BO_Stalled
#define             BOTBF_StallAtBulkIn  			bFlags.bits.BI_Stalled
#define             BOTXfer_Abort  					bFlags.bits.Abort_BOT
#define             ATABF_IsAttached  				bFlags.bits.ATABF_IsAttached
#define             ATABF_IsSupportMultiSector  	bFlags.bits.ATABF_IsSupportMultiSector
#define             ATABF_IDEXfer_dir	 			bFlags.bits.ATABF_IDEXfer_dir
#define             ATABF_IsSkipSetParameters 	 	bFlags.bits.ATABF_IsSkipSetParameters


INT8_EXT    Hal4ATA_SectCntInBlk;

//*************************************************************************
//  Private Data
//*************************************************************************

// Static
char_bit	_Hal4ATA_StatusByte;
#define		Hal4ATA_StatusByte  _Hal4ATA_StatusByte.char_
#define		Hal4ATA_StatusByte_ERR  _Hal4ATA_StatusByte.bit_.b0
#define		Hal4ATA_StatusByte_IDX  _Hal4ATA_StatusByte.bit_.b1
#define		Hal4ATA_StatusByte_CORR _Hal4ATA_StatusByte.bit_.b2
#define		Hal4ATA_StatusByte_DRQ  _Hal4ATA_StatusByte.bit_.b3
#define		Hal4ATA_StatusByte_DSC  _Hal4ATA_StatusByte.bit_.b4
#define		Hal4ATA_StatusByte_DF   _Hal4ATA_StatusByte.bit_.b5
#define		Hal4ATA_StatusByte_DRDY _Hal4ATA_StatusByte.bit_.b6
#define		Hal4ATA_StatusByte_BSY  _Hal4ATA_StatusByte.bit_.b7

char_bit	_Hal4ATA_DevReg;
#define    	Hal4ATA_DevReg _Hal4ATA_DevReg.char_	//= 0xA0;
#define		Hal4ATA_DevReg_DEV  _Hal4ATA_DevReg.bit_.b4
#define		Hal4ATA_DevReg_b5   _Hal4ATA_DevReg.bit_.b5
#define		Hal4ATA_DevReg_LBA  _Hal4ATA_DevReg.bit_.b6
#define		Hal4ATA_DevReg_b7   _Hal4ATA_DevReg.bit_.b7

// Temp
FLEXI_INT32		Hal4ATA_Track;
INT8			Hal4ATA_drvSelect;





//*************************************************************************
//  Subroutines -- Level 1
//*************************************************************************

void
Hal4ATA_GetStatus(void)
{
	Hal4ATA_StatusByte = (uint8)Hal4Sys_ATAPortInB(IDE_ASTATUS);
}

uint8
Hal4ATA_WaitOnBusyNDrdy(void)
{
    uint8 retStatus = FALSE;
    while(TRUE)
	{
		Hal4ATA_GetStatus();
        // if IDE_STATUS_BUSY && !IDE_STATUS_DRDY
        //Hal4ATA_StatusByte_ERR  = Hal4ATA_StatusByte^0
		if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
        {
            break;
        }
        else 
			if(Hal4ATA_StatusByte_BSY !=0 || Hal4ATA_StatusByte_DRDY !=1)
			//if(Hal4ATA_StatusByte_BSY !=0 )
				Hal4Sys_Wait4US();
        	else
        	{
            	retStatus = TRUE;
           		break;
        	}
	}
	return retStatus;
}


uint8
Hal4ATA_WaitOnBusyNDrq(void)
{
    uint8 retStatus = FALSE;
    while(TRUE)
	{	Hal4ATA_GetStatus();
		if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
        {
            break;
        }
        else 
			if(Hal4ATA_StatusByte_BSY !=0 || Hal4ATA_StatusByte_DRQ !=1)
				Hal4Sys_Wait4US();
        	else
        	{
		   		retStatus = TRUE;
            	break;
        	}
	}
    return TRUE;
}



uint8
Hal4ATA_WaitOnBusy(void)
{
    uint8 retStatus = FALSE;
    while(TRUE)
	{
		Hal4ATA_GetStatus();
		if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
        {
            break;
        }
        else 
			if(Hal4ATA_StatusByte_BSY)
        	{
				Hal4Sys_Wait4US();
        	}
			else
        	{
            	retStatus = TRUE;
				break;
        	}
	}
   return retStatus;
}



//*************************************************************************
//  Subroutines -- Level 2
//*************************************************************************

uint8
Hal4ATA_SelDevice(void)
{
    uint8 retStatus = FALSE;
    if(Hal4ATA_WaitOnBusy())
    {
	// ATAREG4OUT_DEVICE_HEAD =  ATAREG_GRP0+6 = 0x56
	// ATAREG_GRP0 =0x50
	// BUFF_DIR_RD, !D12CS, !BUFF_EN, !IDE_CS1, !IDE_CS0,  A2, 	A1, A0
	//0x56		0		1		0			1		0		1	1	0
      	Hal4Sys_ATAPortOutB(IDE_DEVICE_HEAD,Hal4ATA_DevReg);
       	retStatus = Hal4ATA_WaitOnBusyNDrdy();
    }
    return retStatus;
}



//*************************************************************************
//  Subroutines -- level 4
//*************************************************************************


uint8
Hal4ATA_IssueIDEIdentify(void)
{
    INT16 i;
    uint8 retStatus = FALSE;
    // Select device.
	if(Hal4ATA_SelDevice())
    {
	    // Send IDE IDENTIFY command.
		// IDE_COMMAND_IDENTIFY=0xEC ;
	    Hal4Sys_ATAPortOutB(IDE_COMMAND, IDE_COMMAND_IDENTIFY);

	    if(Hal4ATA_WaitOnBusyNDrq())
        {
            
	        // Suck out 256 words. After waiting for one model that asserts busy
	        // after receiving the Packet Identify command.
	       
	        if(Hal4ATA_InitDevExt())
                retStatus = TRUE;
        }

	  
	    // Work around for some IDE and one model Atapi that will present more than
	    // 256 words for the Identify data.
	   
	    for (i=10000; i != 0; i--)
        {
		    Hal4ATA_GetStatus();
		    if (Hal4ATA_StatusByte_DRQ)
            {
			    
			    // Suck out any remaining bytes and throw away.
			   
			    Hal4Sys_ATADataPortInW();
		    }
		    else
			    break;
	    }
    }
	return retStatus;
} /* end IssueIdentify()*/


uint8
Hal4ATA_InitDevExt(void)
{
    INT8 c;
    if(Hal4ATA_WaitOnBusyNDrq())
    {
        ATADevExt_IDData.GeneralConfiguration = Hal4Sys_ATADataPortInW();//INT16  00
        ATADevExt_IDData.NumberOfCylinders = Hal4Sys_ATADataPortInW();//INT16  01
        Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.NumberOfHeads = Hal4Sys_ATADataPortInW();//INT16  03

        for(c = 2 ; c != 0; c--)
            Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.SectorsPerTrack = Hal4Sys_ATADataPortInW();//INT16  06

        for(c = 40 ; c != 0; c--) // 7 -47
            Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.MaximumBlockTransfer = Hal4Sys_ATADataPortInW();//INT8 47

        Hal4Sys_ATADataPortInW(); // 48
        ATADevExt_IDData.Capabilities = Hal4Sys_ATADataPortInW();//INT16  49

        for(c = 4; c != 0; c--)
            Hal4Sys_ATADataPortInW();
        ATADevExt_IDData.NumberOfCurrentCylinders = Hal4Sys_ATADataPortInW();//INT16  54
        ATADevExt_IDData.NumberOfCurrentHeads = Hal4Sys_ATADataPortInW();//INT16  55
        ATADevExt_IDData.CurrentSectorsPerTrack = Hal4Sys_ATADataPortInW();//INT16  56
        ATADevExt_IDData.CurrentSectorCapacity.ints.i0 = Hal4Sys_ATADataPortInW();//INT32  57
        ATADevExt_IDData.CurrentSectorCapacity.ints.i1 = Hal4Sys_ATADataPortInW();//

        if(ATADevExt_IDData.CurrentSectorCapacity.u0 == 0)
        {
            ATADevExt_IDData.NumberOfCurrentCylinders = ATADevExt_IDData.NumberOfCylinders;
            ATADevExt_IDData.NumberOfCurrentHeads = ATADevExt_IDData.NumberOfHeads ;//INT16  55
            ATADevExt_IDData.CurrentSectorsPerTrack = ATADevExt_IDData.SectorsPerTrack;//INT16  56
            ATADevExt_IDData.CurrentSectorCapacity.u0 = (INT32)ATADevExt_IDData.NumberOfCurrentCylinders * ATADevExt_IDData.NumberOfCurrentHeads * ATADevExt_IDData.CurrentSectorsPerTrack;
        }
        return(TRUE);
    }
    else
        return(FALSE);
}


uint8
Hal4ATA_IsLBAmode(void)
{  	Hal4ATA_DevReg_LBA = 1;
	return(Hal4ATA_DevReg_LBA);
}


uint8
Hal4ATA_SetFeature(void)
{ /*  uint8 retStatus = FALSE;
   Hal4Sys_ATAPortOutB(ATAREG4OUT_FEATURE,0x03);
   Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_COUNT, 0x08);

   Hal4Sys_ATAPortOutB(ATAREG4OUT_SECTOR_NUMBER,0);
   Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_LOW,0);
   Hal4Sys_ATAPortOutB(ATAREG4OUT_CYLINDER_HIGH,0);

   Hal4Sys_ATAPortOutB(ATAREG4OUT_COMMAND, 0xEF);
    while(TRUE)
    {
        if(Hal4ATA_WaitOnBusyNDrdy())
        {
            retStatus = TRUE;
            break;
        }
    }
   return retStatus;*/
   return TRUE;
}



//*************************************************************************
//  Subroutines -- level 5 ATA transaction
//*************************************************************************
uint8
Hal4ATA_IdeHardReset(void)
{
	//INT8 c;
    uint8 retStatus = FALSE;

     IOCLR = IDE_RST; 						// 復位引腳置低
     Hal4Sys_WaitInUS(320); // >25 US
  	 IOSET = IDE_RST; 						// 復位引腳置高
 //   for(c = 10; c != 0; c--)
    	Hal4Sys_WaitInUS(500000); // 50MS

    if(Hal4ATA_SelDevice())
	{
//	    Hal4ATA_DevReg_DEV = FALSE;
 //	   Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD,Hal4ATA_DevReg);
//	}

    while(TRUE)
    {
        if(Hal4ATA_WaitOnBusyNDrdy())
        {
            retStatus = TRUE;
            break;
        }
    }
 	}
    return retStatus;
}


uint8
Hal4ATA_FindIDEDevice(void)
{
    INT8    c;
    ATABF_IsAttached = FALSE;
	Hal4ATA_DevReg = 0xA0;
    Hal4ATA_DevReg_DEV = FALSE;
	if(Hal4ATA_IdeHardReset())
    {	Hal4ATA_SetFeature();
	    for ( c = 2; c != 0; c--, Hal4ATA_DevReg_DEV^=1 )
	    {   if(Hal4ATA_SelDevice())
            {
		        if ( Hal4ATA_IssueIDEIdentify() )
		        {   ATABF_IsAttached = TRUE;
                    break;
		        }
            }
	    }

        if(ATABF_IsAttached)
        {  	Hal4ATA_IsLBAmode();// 設為LAB模式
        } // IDE HD is found
    } // IDE Reset OK
    return ATABF_IsAttached;
} /*end Hal4ATA_FindIDEDevice()*/


uint8
Hal4ATA_ReadWriteSetting(void)
{
    uint8 retStatus = FALSE;
    
	// Select device  .
	
	if(Hal4ATA_SelDevice())
    {   //Assume Sector Counter <256
        Hal4Sys_ATAPortOutB(IDE_SECCNT, RBC_CDB.RbcCdb_Read.XferLength_0);
	    /* IN LBA mode */
		if( ATABF_IDEXfer_dir )    // ATABF_Xfer_dir==1 Read(from Dev to Host)
  	    {
			Hal4Sys_ATAPortOutB(IDE_SECTOR,RBC_CDB.RbcCdb_Read.LBA_0);
			Hal4Sys_ATAPortOutB(IDE_CYLINDER_LOW,RBC_CDB.RbcCdb_Read.LBA_1);
			Hal4Sys_ATAPortOutB(IDE_CYLINDER_HIGH,RBC_CDB.RbcCdb_Read.LBA_2);
 	        Hal4Sys_ATAPortOutB(IDE_DEVICE_HEAD, (RBC_CDB.RbcCdb_Read.LBA_3&0x0f) | Hal4ATA_DevReg );
	    	Hal4Sys_ATAPortOutB(IDE_COMMAND, IDE_COMMAND_READ);
		}
	   	else
	   	{    	// write command.
		    Hal4Sys_ATAPortOutB(IDE_SECTOR,RBC_CDB.RbcCdb_Write.LBA_0);
		    Hal4Sys_ATAPortOutB(IDE_CYLINDER_LOW,RBC_CDB.RbcCdb_Write.LBA_1);
		    Hal4Sys_ATAPortOutB(IDE_CYLINDER_HIGH,RBC_CDB.RbcCdb_Write.LBA_2);
            Hal4Sys_ATAPortOutB(IDE_DEVICE_HEAD, (RBC_CDB.RbcCdb_Write.LBA_3&0x0f) | Hal4ATA_DevReg );
	    	Hal4Sys_ATAPortOutB(IDE_COMMAND,IDE_COMMAND_WRITE);
		}
	}
   	retStatus = Hal4ATA_WaitOnBusyNDrq();
    return retStatus;
} /* end Hal4ATA_ReadWriteSetting()*/


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区在线看| 麻豆精品视频在线观看视频| av在线不卡免费看| 国产精品视频一二三区| 成人激情图片网| 国产精品欧美极品| 99综合电影在线视频| 一区二区中文视频| 在线一区二区三区四区五区| 亚洲国产视频直播| 欧美精品日韩一本| 久久激五月天综合精品| 久久久久亚洲蜜桃| av不卡免费电影| 夜夜操天天操亚洲| 日韩一级在线观看| 国产精品资源在线| 亚洲精品免费在线| 欧美一区二区三区视频| 国产一区亚洲一区| 亚洲欧美在线观看| 欧美日韩在线观看一区二区 | 欧美日韩另类一区| 蜜臀av一级做a爰片久久| 国产日韩欧美高清| 欧美亚洲禁片免费| 国产在线精品视频| 亚洲人一二三区| 日韩精品综合一本久道在线视频| 国产成人精品免费网站| 亚洲综合久久久久| 精品成人佐山爱一区二区| 粉嫩嫩av羞羞动漫久久久| 亚洲一区二区在线免费观看视频| 91精品久久久久久久91蜜桃| 国产成人一区二区精品非洲| 亚洲电影一区二区三区| 久久久久国产成人精品亚洲午夜| 欧洲一区在线观看| 国产精品一区专区| 亚洲午夜在线视频| 国产亚洲欧洲997久久综合| 欧美主播一区二区三区| 国产精品一区免费在线观看| 亚洲成精国产精品女| 日本一区二区三区四区在线视频 | 亚洲欧洲在线观看av| 欧美一区二区三区免费观看视频| a级精品国产片在线观看| 麻豆国产精品777777在线| 最新成人av在线| 国产亚洲午夜高清国产拍精品| 欧美人与性动xxxx| 91视频免费看| 风间由美性色一区二区三区| 紧缚奴在线一区二区三区| 亚洲高清视频的网址| 亚洲欧美日韩人成在线播放| 久久一区二区视频| 日韩西西人体444www| 欧美日韩一区高清| 欧美在线观看一区| 91视频观看免费| 国产.欧美.日韩| 美女高潮久久久| 蜜臀av亚洲一区中文字幕| 亚洲va天堂va国产va久| 一区二区三区在线观看动漫| 国产精品午夜春色av| 久久久精品国产免大香伊 | 久久久精品免费观看| 精品国产乱码久久久久久久久| 717成人午夜免费福利电影| 91国偷自产一区二区三区成为亚洲经典| www.av精品| 99亚偷拍自图区亚洲| kk眼镜猥琐国模调教系列一区二区| 国产一区不卡视频| 国产成人精品免费一区二区| 国产成人无遮挡在线视频| 成人福利视频在线看| 懂色一区二区三区免费观看| 成人一级片在线观看| 成人免费高清视频在线观看| 成人性生交大片免费看中文| 不卡视频在线观看| 欧美伊人精品成人久久综合97| 欧美日韩中文国产| 欧美久久免费观看| 欧美日本在线播放| 欧美午夜理伦三级在线观看| 免费成人在线观看| 另类欧美日韩国产在线| 久久99精品久久久久久国产越南| 日韩av一二三| 久久se精品一区精品二区| 麻豆视频观看网址久久| 日韩福利电影在线观看| 麻豆精品一二三| 国产一区二区三区在线观看免费视频| 久久91精品国产91久久小草| 国产一区二区三区精品视频| 日本aⅴ免费视频一区二区三区| 日韩精品欧美精品| 理论电影国产精品| 国产高清亚洲一区| 91色porny| 成+人+亚洲+综合天堂| 欧美亚洲动漫精品| 日韩精品中文字幕一区| 久久久午夜精品| 国产精品国产三级国产普通话三级 | 久久精品国产免费看久久精品| 亚洲成年人网站在线观看| 国内久久婷婷综合| 成人丝袜高跟foot| 一本在线高清不卡dvd| 欧美在线一区二区| 欧美一区二区在线观看| 亚洲精品在线免费观看视频| 26uuu亚洲| 亚洲国产精品人人做人人爽| 日韩av一区二区三区| 激情文学综合插| 成人av动漫在线| 欧美日韩在线免费视频| 精品1区2区在线观看| 日韩精品一区二区三区中文精品| 国产亚洲人成网站| 国产精品色婷婷久久58| 午夜视频在线观看一区| 国产在线日韩欧美| 91免费观看在线| 91精品福利在线一区二区三区| 亚洲欧美综合在线精品| 午夜电影一区二区三区| 国产精品一区二区三区网站| 91同城在线观看| 日韩一级视频免费观看在线| 国产精品国产三级国产普通话三级 | 91成人看片片| www一区二区| 亚洲国产视频网站| a在线欧美一区| 日韩一级黄色片| 亚洲伦在线观看| 国产一区二区0| 欧美日本在线播放| 久久先锋影音av鲁色资源网| 视频一区二区三区中文字幕| 国产精品亚洲专一区二区三区| 欧美日韩一区二区电影| 日本一区二区三区视频视频| 日韩高清欧美激情| 日本韩国欧美一区| 国产日韩v精品一区二区| 蜜乳av一区二区三区| 97精品国产97久久久久久久久久久久 | 国产美女久久久久| 51精品国自产在线| 亚洲乱码国产乱码精品精可以看| 美女www一区二区| 欧美日韩一区高清| 亚洲成人一区二区| 色综合网站在线| 中文字幕第一区综合| 国产一区二区三区在线观看免费视频 | 偷拍日韩校园综合在线| 91在线国内视频| 国产精品久久久久久久久免费樱桃 | 91久久精品一区二区二区| 国产精品久久二区二区| 国产成人精品网址| 国产视频在线观看一区二区三区| 蜜臀久久久久久久| 在线成人av影院| 亚洲精品va在线观看| 成人精品视频一区| 国产欧美精品一区| 国产成人精品午夜视频免费| 久久亚洲影视婷婷| 久久99精品国产91久久来源 | www.亚洲人| 一区二区三区不卡视频在线观看 | 91猫先生在线| 亚洲欧美日韩国产一区二区三区 | 欧美日韩国产首页| 亚洲色图一区二区| 91啦中文在线观看| 最新中文字幕一区二区三区| 99在线精品视频| 亚洲自拍偷拍九九九| 欧美色大人视频| 性欧美疯狂xxxxbbbb| 欧美日韩精品三区| 日韩av中文在线观看| 91精品国产综合久久精品app| 蜜桃精品视频在线| 亚洲精品一区二区三区福利 | 欧美精品日韩一本|