📄 hal4ata.lst
字号:
C51 COMPILER V7.06 HAL4ATA 02/17/2004 14:42:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE HAL4ATA
OBJECT MODULE PLACED IN Hal4ata.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Hal4ata.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 //////////////////////////////////////////////////////////////////////
3 //
4 // Copyright (c) 1999 - 2003 PHILIPS Semiconductors - APIC
5 //
6 // Module Name:
7 //
8 // HAL4ATA.c
9 //
10 // Abstract:
11 //
12 // This is HAL for IDE controllers.
13 //
14 // Author:
15 //
16 // Hilbert Zhang ZhenYu
17 //
18 // Environment:
19 //
20 // kernel mode only
21 //
22 // Notes:
23 //
24 // Revision History:
25 // Create Date: Nov. 19 1999
26 //
27 //////////////////////////////////////////////////////////////////////////////
28 // Implementation Notes:
29 */
30
31 #include <reg51.h> /* special function register declarations */
32
33 #undef GLOBAL_EXT
34
35 #include "SysCnfg.h"
36
37 #include "BasicTyp.h"
38 #include "common.h"
39
40 #include "Hal4Sys.h"
41
42 #include "ATA.h"
43 #include "RBC.h"
44 #include "RBCCmd.h"
45 #include "Hal4ATA.h"
46
47 #include "TPBulk.h"
48
49 /*
50 //*************************************************************************
51 // Public Data
52 //*************************************************************************
53 */
54 STRUC_EXT TPBLK_STRUC DATA_SEG TPBulk_Block;
55 #define TPBulk_CBW TPBulk_Block.TPBulk_CommandBlock
C51 COMPILER V7.06 HAL4ATA 02/17/2004 14:42:23 PAGE 2
56 #define RBC_CDB TPBulk_CBW.cdbRBC
57 #define RBC_LUN TPBulk_CBW.bCBW_LUN
58 #define TPBulk_CSW TPBulk_Block.TPBulk_CommandStatus
59 #define Hal4ATA_Atapi RBC_CDB
60
61 STRUC_EXT HW_ATA_DEVICES_EXTENSION Hal4ATA_DevExt;
62 #define ATADevExt_IDData Hal4ATA_DevExt.IdentifyData
63
64 BIT_EXT ATABF_IsAttached;
65 BIT_EXT ATABF_IsSupportMultiSector;
66 BIT_EXT ATABF_IDEXfer_dir;
67 BIT_EXT ATABF_IsSkipSetParameters;
68
69 INT8_EXT Hal4ATA_SectCntInBlk;
70 /*
71 //*************************************************************************
72 // Private Data
73 //*************************************************************************
74 */
75 // Static
76 INT8 BDATA_SEG Hal4ATA_StatusByte;
77 sbit Hal4ATA_StatusByte_ERR = Hal4ATA_StatusByte^0;
78 sbit Hal4ATA_StatusByte_IDX = Hal4ATA_StatusByte^1;
79 sbit Hal4ATA_StatusByte_CORR = Hal4ATA_StatusByte^2;
80 sbit Hal4ATA_StatusByte_DRQ = Hal4ATA_StatusByte^3;
81 sbit Hal4ATA_StatusByte_DSC = Hal4ATA_StatusByte^4;
82 sbit Hal4ATA_StatusByte_DF = Hal4ATA_StatusByte^5;
83 sbit Hal4ATA_StatusByte_DRDY = Hal4ATA_StatusByte^6;
84 sbit Hal4ATA_StatusByte_BSY = Hal4ATA_StatusByte^7;
85
86 INT8 BDATA_SEG Hal4ATA_DevReg = 0xA0;
87 sbit Hal4ATA_DevReg_DEV = Hal4ATA_DevReg^4;
88 sbit Hal4ATA_DevReg_b5 = Hal4ATA_DevReg^5;
89 sbit Hal4ATA_DevReg_LBA = Hal4ATA_DevReg^6;
90 sbit Hal4ATA_DevReg_b7 = Hal4ATA_DevReg^7;
91
92 // Temp
93 FLEXI_INT32 Hal4ATA_Track;
94 INT8 Hal4ATA_drvSelect;
95
96
97
98
99 /*
100 //*************************************************************************
101 // Subroutines -- Level 1
102 //*************************************************************************
103 */
104 void
105 Hal4ATA_GetStatus(void)
106 {
107 1 Hal4ATA_StatusByte = Hal4Sys_ATAPortInB(ATAREG4IN_ALTERNATE_STATUS);
108 1 }
109
110 BOOLEAN
111 Hal4ATA_WaitOnBusyNDrdy(void)
112 {
113 1 BOOLEAN retStatus = FALSE;
114 1 while(TRUE)
115 1 {
116 2 Hal4ATA_GetStatus();
117 2 // if IDE_STATUS_BUSY && !IDE_STATUS_DRDY
C51 COMPILER V7.06 HAL4ATA 02/17/2004 14:42:23 PAGE 3
118 2 //Hal4ATA_StatusByte_ERR = Hal4ATA_StatusByte^0
119 2 if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
120 2 {
121 3 break;
122 3 }
123 2 else
124 2 if(Hal4ATA_StatusByte_BSY !=0 || Hal4ATA_StatusByte_DRDY !=1)
125 2 //if(Hal4ATA_StatusByte_BSY !=0 )
126 2 Hal4Sys_Wait4US();
127 2 else
128 2 {
129 3 retStatus = TRUE;
130 3 break;
131 3 }
132 2 }
133 1 return retStatus;
134 1 }
135
136
137 BOOLEAN
138 Hal4ATA_WaitOnBusyNDrq(void)
139 {
140 1 BOOLEAN retStatus = FALSE;
141 1 while(TRUE)
142 1 { Hal4ATA_GetStatus();
143 2 if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
144 2 {
145 3 break;
146 3 }
147 2 else
148 2 if(Hal4ATA_StatusByte_BSY !=0 || Hal4ATA_StatusByte_DRQ !=1)
149 2 Hal4Sys_Wait4US();
150 2 else
151 2 {
152 3 retStatus = TRUE;
153 3 break;
154 3 }
155 2 }
156 1 return TRUE;
157 1 }
158
159
160
161 BOOLEAN
162 Hal4ATA_WaitOnBusy(void)
163 {
164 1 BOOLEAN retStatus = FALSE;
165 1 while(TRUE)
166 1 {
167 2 Hal4ATA_GetStatus();
168 2 if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
169 2 {
170 3 break;
171 3 }
172 2 else
173 2 if(Hal4ATA_StatusByte_BSY)
174 2 {
175 3 Hal4Sys_Wait4US();
176 3 }
177 2 else
178 2 {
179 3 retStatus = TRUE;
C51 COMPILER V7.06 HAL4ATA 02/17/2004 14:42:23 PAGE 4
180 3 break;
181 3 }
182 2 }
183 1 return retStatus;
184 1 }
185
186
187 /*
188 //*************************************************************************
189 // Subroutines -- Level 2
190 //*************************************************************************
191 */
192 BOOLEAN
193 Hal4ATA_SelDevice(void)
194 {
195 1 BOOLEAN retStatus = FALSE;
196 1 if(Hal4ATA_WaitOnBusy())
197 1 {
198 2 // ATAREG4OUT_DEVICE_HEAD = ATAREG_GRP0+6 = 0x56
199 2 // ATAREG_GRP0 =0x50
200 2 // BUFF_DIR_RD, !D12CS, !BUFF_EN, !IDE_CS1, !IDE_CS0, A2, A1, A0
201 2 //0x56 0 1 0 1 0 1 1 0
202 2 Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD,Hal4ATA_DevReg);
203 2 retStatus = Hal4ATA_WaitOnBusyNDrdy();
204 2 }
205 1 return retStatus;
206 1 }
207
208
209 /*
210 //*************************************************************************
211 // Subroutines -- level 4
212 //*************************************************************************
213 */
214
215 BOOLEAN
216 Hal4ATA_IssueIDEIdentify(void)
217 {
218 1 INT16 i;
219 1 BOOLEAN retStatus = FALSE;
220 1 // Select device.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -