1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
/*
* Copyright (c) 2003-2004 MARVELL SEMICONDUCTOR ISRAEL, LTD.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef __INCmvStorageDevh
#define __INCmvStorageDevh
/* Definitions */
/* ATA register on the ATA drive*/
#define MV_EDMA_ATA_FEATURES_ADDR 0x11
#define MV_EDMA_ATA_SECTOR_COUNT_ADDR 0x12
#define MV_EDMA_ATA_LBA_LOW_ADDR 0x13
#define MV_EDMA_ATA_LBA_MID_ADDR 0x14
#define MV_EDMA_ATA_LBA_HIGH_ADDR 0x15
#define MV_EDMA_ATA_DEVICE_ADDR 0x16
#define MV_EDMA_ATA_COMMAND_ADDR 0x17
#define MV_ATA_ERROR_STATUS 0x00000001 /* MV_BIT0 */
#define MV_ATA_DATA_REQUEST_STATUS 0x00000008 /* MV_BIT3 */
#define MV_ATA_SERVICE_STATUS 0x00000010 /* MV_BIT4 */
#define MV_ATA_DEVICE_FAULT_STATUS 0x00000020 /* MV_BIT5 */
#define MV_ATA_READY_STATUS 0x00000040 /* MV_BIT6 */
#define MV_ATA_BUSY_STATUS 0x00000080 /* MV_BIT7 */
#define MV_ATA_COMMAND_READ_SECTORS 0x20
#define MV_ATA_COMMAND_READ_SECTORS_EXT 0x24
#define MV_ATA_COMMAND_READ_VERIFY_SECTORS 0x40
#define MV_ATA_COMMAND_READ_VERIFY_SECTORS_EXT 0x42
#define MV_ATA_COMMAND_READ_BUFFER 0xE4
#define MV_ATA_COMMAND_WRITE_BUFFER 0xE8
#define MV_ATA_COMMAND_WRITE_SECTORS 0x30
#define MV_ATA_COMMAND_WRITE_SECTORS_EXT 0x34
#define MV_ATA_COMMAND_DIAGNOSTIC 0x90
#define MV_ATA_COMMAND_SMART 0xb0
#define MV_ATA_COMMAND_READ_MULTIPLE 0xc4
#define MV_ATA_COMMAND_WRITE_MULTIPLE 0xc5
#define MV_ATA_COMMAND_STANDBY_IMMEDIATE 0xe0
#define MV_ATA_COMMAND_IDLE_IMMEDIATE 0xe1
#define MV_ATA_COMMAND_STANDBY 0xe2
#define MV_ATA_COMMAND_IDLE 0xe3
#define MV_ATA_COMMAND_SLEEP 0xe6
#define MV_ATA_COMMAND_IDENTIFY 0xec
#define MV_ATA_COMMAND_DEVICE_CONFIG 0xb1
#define MV_ATA_COMMAND_SET_FEATURES 0xef
#define MV_ATA_COMMAND_WRITE_DMA 0xca
#define MV_ATA_COMMAND_WRITE_DMA_EXT 0x35
#define MV_ATA_COMMAND_WRITE_DMA_QUEUED 0xcc
#define MV_ATA_COMMAND_WRITE_DMA_QUEUED_EXT 0x36
#define MV_ATA_COMMAND_WRITE_FPDMA_QUEUED_EXT 0x61
#define MV_ATA_COMMAND_READ_DMA 0xc8
#define MV_ATA_COMMAND_READ_DMA_EXT 0x25
#define MV_ATA_COMMAND_READ_DMA_QUEUED 0xc7
#define MV_ATA_COMMAND_READ_DMA_QUEUED_EXT 0x26
#define MV_ATA_COMMAND_READ_FPDMA_QUEUED_EXT 0x60
#define MV_ATA_COMMAND_FLUSH_CACHE 0xe7
#define MV_ATA_COMMAND_FLUSH_CACHE_EXT 0xea
#define MV_ATA_SET_FEATURES_DISABLE_8_BIT_PIO 0x01
#define MV_ATA_SET_FEATURES_ENABLE_WCACHE 0x02 /* Enable write cache */
#define MV_ATA_SET_FEATURES_TRANSFER 0x03 /* Set transfer mode */
#define MV_ATA_TRANSFER_UDMA_0 0x40
#define MV_ATA_TRANSFER_UDMA_1 0x41
#define MV_ATA_TRANSFER_UDMA_2 0x42
#define MV_ATA_TRANSFER_UDMA_3 0x43
#define MV_ATA_TRANSFER_UDMA_4 0x44
#define MV_ATA_TRANSFER_UDMA_5 0x45
#define MV_ATA_TRANSFER_UDMA_6 0x46
#define MV_ATA_TRANSFER_UDMA_7 0x47
#define MV_ATA_TRANSFER_PIO_SLOW 0x00
#define MV_ATA_TRANSFER_PIO_0 0x08
#define MV_ATA_TRANSFER_PIO_1 0x09
#define MV_ATA_TRANSFER_PIO_2 0x0A
#define MV_ATA_TRANSFER_PIO_3 0x0B
#define MV_ATA_TRANSFER_PIO_4 0x0C
/* Enable advanced power management */
#define MV_ATA_SET_FEATURES_ENABLE_APM 0x05
/* Disable media status notification*/
#define MV_ATA_SET_FEATURES_DISABLE_MSN 0x31
/* Disable read look-ahead */
#define MV_ATA_SET_FEATURES_DISABLE_RLA 0x55
/* Enable release interrupt */
#define MV_ATA_SET_FEATURES_ENABLE_RI 0x5D
/* Enable SERVICE interrupt */
#define MV_ATA_SET_FEATURES_ENABLE_SI 0x5E
/* Disable revert power-on defaults */
#define MV_ATA_SET_FEATURES_DISABLE_RPOD 0x66
/* Disable write cache */
#define MV_ATA_SET_FEATURES_DISABLE_WCACHE 0x82
/* Disable advanced power management*/
#define MV_ATA_SET_FEATURES_DISABLE_APM 0x85
/* Enable media status notification */
#define MV_ATA_SET_FEATURES_ENABLE_MSN 0x95
/* Enable read look-ahead */
#define MV_ATA_SET_FEATURES_ENABLE_RLA 0xAA
/* Enable revert power-on defaults */
#define MV_ATA_SET_FEATURES_ENABLE_RPOD 0xCC
/* Disable release interrupt */
#define MV_ATA_SET_FEATURES_DISABLE_RI 0xDD
/* Disable SERVICE interrupt */
#define MV_ATA_SET_FEATURES_DISABLE_SI 0xDE
/* Defines for parsing the IDENTIFY command results*/
#define IDEN_SERIAL_NUM_OFFSET 10
#define IDEN_SERIAL_NUM_SIZE 19-10
#define IDEN_FIRMWARE_OFFSET 23
#define IDEN_FIRMWARE_SIZE 26-23
#define IDEN_MODEL_OFFSET 27
#define IDEN_MODEL_SIZE 46-27
#define IDEN_CAPACITY_1_OFFSET 49
#define IDEN_VALID 53
#define IDEN_NUM_OF_ADDRESSABLE_SECTORS 60
#define IDEN_PIO_MODE_SPPORTED 64
#define IDEN_QUEUE_DEPTH 75
#define IDEN_SATA_CAPABILITIES 76
#define IDEN_SATA_FEATURES_SUPPORTED 78
#define IDEN_SATA_FEATURES_ENABLED 79
#define IDEN_ATA_VERSION 80
#define IDEN_SUPPORTED_COMMANDS1 82
#define IDEN_SUPPORTED_COMMANDS2 83
#define IDEN_ENABLED_COMMANDS1 85
#define IDEN_ENABLED_COMMANDS2 86
#define IDEN_UDMA_MODE 88
#define IDEN_SATA_CAPABILITY 76
/* Typedefs */
/* Structures */
typedef struct mvStorageDevRegisters
{
/* Fields set by CORE driver */
MV_U8 errorRegister;
MV_U16 sectorCountRegister;
MV_U16 lbaLowRegister;
MV_U16 lbaMidRegister;
MV_U16 lbaHighRegister;
MV_U8 deviceRegister;
MV_U8 statusRegister;
} MV_STORAGE_DEVICE_REGISTERS;
/* Bits for HD_ERROR */
#define NM_ERR 0x02 /* media present */
#define ABRT_ERR 0x04 /* Command aborted */
#define MCR_ERR 0x08 /* media change request */
#define IDNF_ERR 0x10 /* ID field not found */
#define MC_ERR 0x20 /* media changed */
#define UNC_ERR 0x40 /* Uncorrect data */
#define WP_ERR 0x40 /* write protect */
#define ICRC_ERR 0x80 /* new meaning: CRC error during transfer */
/* Function */
MV_BOOLEAN HPTLIBAPI mvStorageDevATAExecuteNonUDMACommand(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex,
MV_NON_UDMA_PROTOCOL protocolType,
MV_BOOLEAN isEXT,
MV_U16 FAR *bufPtr, MV_U32 count,
MV_U16 features,
MV_U16 sectorCount,
MV_U16 lbaLow, MV_U16 lbaMid,
MV_U16 lbaHigh, MV_U8 device,
MV_U8 command);
MV_BOOLEAN HPTLIBAPI mvStorageDevATAIdentifyDevice(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN HPTLIBAPI mvStorageDevATASetFeatures(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex, MV_U8 subCommand,
MV_U8 subCommandSpecific1,
MV_U8 subCommandSpecific2,
MV_U8 subCommandSpecific3,
MV_U8 subCommandSpecific4);
MV_BOOLEAN HPTLIBAPI mvStorageDevATAIdleImmediate(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN HPTLIBAPI mvStorageDevATAFlushWriteCache(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN HPTLIBAPI mvStorageDevATASoftResetDevice(MV_SATA_ADAPTER *pAdapter,
MV_U8 channelIndex);
MV_BOOLEAN HPTLIBAPI mvReadWrite(MV_SATA_CHANNEL *pSataChannel, LBA_T Lba, UCHAR Cmd, void *tmpBuffer);
#endif
|