summaryrefslogtreecommitdiff
path: root/ReferenceCode/Chipset/LynxPoint/Include/PchRegs/PchRegsSata.h
blob: add2c1eeed7861071b0f006b52966fa3dbcf6bf0 (plain)
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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
/** @file
  Register names for PCH SATA controllers

  Conventions:

  - Prefixes:
    Definitions beginning with "R_" are registers
    Definitions beginning with "B_" are bits within registers
    Definitions beginning with "V_" are meaningful values of bits within the registers
    Definitions beginning with "S_" are register sizes
    Definitions beginning with "N_" are the bit position
  - In general, PCH registers are denoted by "_PCH_" in register names
  - Registers / bits that are different between PCH generations are denoted by
    "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_LPT_"
  - Registers / bits that are different between SKUs are denoted by "_<SKU_name>"
    at the end of the register/bit names
  - Registers / bits of new devices introduced in a PCH generation will be just named
    as "_PCH_" without <generation_name> inserted.

@copyright
  Copyright (c) 1999 - 2012 Intel Corporation. All rights reserved
  This software and associated documentation (if any) is furnished
  under a license and may only be used or copied in accordance
  with the terms of the license. Except as permitted by such
  license, no part of this software or documentation may be
  reproduced, stored in a retrieval system, or transmitted in any
  form or by any means without the express written consent of
  Intel Corporation.

  This file contains an 'Intel Peripheral Driver' and uniquely
  identified as "Intel Reference Module" and is
  licensed for Intel CPUs and chipsets under the terms of your
  license agreement with Intel or your vendor.  This file may
  be modified by the user, subject to additional terms of the
  license agreement
**/
#ifndef _PCH_REGS_SATA_H_
#define _PCH_REGS_SATA_H_

//
//  SATA Controller 1 Registers (D31:F2)
//
#define PCI_DEVICE_NUMBER_PCH_SATA          31
#define PCI_FUNCTION_NUMBER_PCH_SATA        2
#define R_PCH_SATA_VENDOR_ID                0x00
#define V_PCH_SATA_VENDOR_ID                V_PCH_INTEL_VENDOR_ID
#define R_PCH_SATA_DEVICE_ID                0x02
#define V_PCH_LPTH_SATA_DEVICE_ID_D_IDE          0x8C00  ///< Desktop IDE Mode (Ports 0,1, 2 and 3)
#define V_PCH_LPTH_SATA_DEVICE_ID_D_AHCI         0x8C02  ///< Desktop AHCI Mode (Ports 0-5)
#define V_PCH_LPTH_SATA_DEVICE_ID_D_RAID         0x8C04  ///< Desktop RAID 0/1/5/10 Mode, based on D31:F2:9Ch[7]
#define V_PCH_LPTH_SATA_DEVICE_ID_D_RAID_PREM    0x8C06  ///< Desktop RAID 0/1/5/10 Mode, based on D31:F2:9Ch[7]
#define V_PCH_LPTH_SATA_DEVICE_ID_D_RAID_ALTDIS  0x2822  ///< Desktop RAID 0/1/5/10 Mode, based on D31:F2:9Ch[9][7]
#define V_PCH_LPTH_SATA_DEVICE_ID_D_RAID_SERVER  0x2826  ///< Server  RAID 0/1/5/10 Mode, based on D31:F2:9Ch[9][7]
#define V_PCH_LPTH_SATA2_DEVICE_ID_D_IDE         0x8C08  ///< Controller 2, Desktop IDE Mode, 2 ports
#define V_PCH_LPTH_SATA_DEVICE_ID_M_IDE          0x8C01  ///< Mobile IDE Mode, port 0, 1, 4, 5
#define V_PCH_LPTH_SATA_DEVICE_ID_M_AHCI         0x8C03  ///< Mobile AHCI Mode, port 0, 1, 4 5
#define V_PCH_LPTH_SATA_DEVICE_ID_M_RAID         0x8C05  ///< Mobile RAID 0/1/5/10 Mode, based on D31:F2:9Ch[7]
#define V_PCH_LPTH_SATA_DEVICE_ID_M_RAID_PREM    0x8C07  ///< Mobile RAID 0/1/5/10 Mode, based on D31:F2:9Ch[7]
#define V_PCH_LPTH_SATA_DEVICE_ID_M_RAID_ALTDIS  0x282A  ///< Mobile RAID 0/1/5/10 Mode, based on D31:F2:9Ch[7]
#define V_PCH_LPTH_SATA2_DEVICE_ID_M_IDE         0x8C09  ///< Controller 2, Mobile IDE, 2 ports
#define V_PCH_LPTH_SATA_DEVICE_ID_D_RAID1        0x8C0E  ///< SATA Controller 1 (RAID 1/RRT Only)
#define V_PCH_LPTH_SATA_DEVICE_ID_M_RAID1        0x8C0F  ///< SATA Controller 1 (RAID 1/RRT Only) - Mobile

//
//  SATA Controller 2 Registers (D31:F5)
//
#define PCI_DEVICE_NUMBER_PCH_SATA2         31
#define PCI_FUNCTION_NUMBER_PCH_SATA2       5
#define R_PCH_SATA2_VENDOR_ID               0x00
#define V_PCH_SATA2_VENDOR_ID               V_PCH_INTEL_VENDOR_ID
#define R_PCH_SATA2_DEVICE_ID               0x02

#define V_PCH_LPTLP_SATA_DEVICE_ID_M_TEST0         0x9C00  ///< SATA Controller 1 (TEST Mode only)
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_TEST1         0x9C01  ///< SATA Controller 1 (TEST Mode only) - Mobile
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_AHCI0         0x9C02  ///< SATA Controller 1 (AHCI)
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_AHCI1         0x9C03  ///< SATA Controller 1 (AHCI) - Mobile
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID0         0x9C04  ///< SATA Controller 1 (RAID 0/1/5/10) - NOT premium
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID_ALTDIS0  0x2822  ///< SATA Controller 1 (RAID 0/1/5/10) - NOT premium - Alternate ID
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID1         0x9C05  ///< SATA Controller 1 (RAID 0/1/5/10) - NOT premium - Mobile
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID_ALTDIS1  0x282A  ///< SATA Controller 1 (RAID 0/1/5/10) - NOT premium - Mobile - Alternate ID
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID_PREM0    0x9C06  ///< SATA Controller 1 (RAID 0/1/5/10) - premium
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID_PREM1    0x9C07  ///< SATA Controller 1 (RAID 0/1/5/10) - premium - Mobile
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID2         0x9C0E  ///< SATA Controller 1 (RAID 1/RRT Only)
#define V_PCH_LPTLP_SATA_DEVICE_ID_M_RAID3         0x9C0F  ///< SATA Controller 1 (RAID 1/RRT Only) - Mobile

//
//  SATA Controller common Registers
//
#define R_PCH_SATA_COMMAND                  0x04
#define B_PCH_SATA_COMMAND_INT_DIS          BIT10
#define B_PCH_SATA_COMMAND_FBE              BIT9
#define B_PCH_SATA_COMMAND_SERR_EN          BIT8
#define B_PCH_SATA_COMMAND_WCC              BIT7
#define B_PCH_SATA_COMMAND_PER              BIT6
#define B_PCH_SATA_COMMAND_VPS              BIT5
#define B_PCH_SATA_COMMAND_PMWE             BIT4
#define B_PCH_SATA_COMMAND_SCE              BIT3
#define B_PCH_SATA_COMMAND_BME              BIT2
#define B_PCH_SATA_COMMAND_MSE              BIT1
#define B_PCH_SATA_COMMAND_IOSE             BIT0
#define R_PCH_SATA_PCISTS                   0x06
#define B_PCH_SATA_PCISTS_DPE               BIT15
#define B_PCH_SATA_PCISTS_RMA               BIT13
#define B_PCH_SATA_PCISTS_DEV_STS_MASK      (BIT10 | BIT9)
#define B_PCH_SATA_PCISTS_DPED              BIT8
#define B_PCH_SATA_PCISTS_CAP_LIST          BIT4
#define B_PCH_SATA_PCISTS_ITNS              BIT3
#define R_PCH_SATA_RID                      0x08
#define R_PCH_SATA_PI_REGISTER              0x09
#define B_PCH_SATA_PI_REGISTER_SNC          BIT3
#define B_PCH_SATA_PI_REGISTER_SNE          BIT2
#define B_PCH_SATA_PI_REGISTER_PNC          BIT1
#define B_PCH_SATA_PI_REGISTER_PNE          BIT0
#define R_PCH_SATA_SUB_CLASS_CODE           0x0A
#define V_PCH_SATA_SUB_CLASS_CODE_IDE       0x01
#define V_PCH_SATA_SUB_CLASS_CODE_AHCI      0x06
#define V_PCH_SATA_SUB_CLASS_CODE_RAID      0x04
#define R_PCH_SATA_BCC                      0x0B
#define B_PCH_SATA_BCC                      0xFF
#define R_PCH_SATA_PMLT                     0x0D
#define B_PCH_SATA_PMLT                     0xFF
#define R_PCH_SATA_HTYPE                    0x0E
#define B_PCH_SATA_HTYPE_MFD                BIT7
#define B_PCH_SATA_HTYPE_HL                 0x7F
#define R_PCH_SATA_PCMD_BAR                 0x10
#define B_PCH_SATA_PCMD_BAR_BA              0x0000FFF8
#define B_PCH_SATA_PCMD_BAR_RTE             BIT0
#define R_PCH_SATA_PCNL_BAR                 0x14
#define B_PCH_SATA_PCNL_BAR_BA              0x0000FFFC
#define B_PCH_SATA_PCNL_BAR_RTE             BIT0
#define R_PCH_SATA_SCMD_BAR                 0x18
#define B_PCH_SATA_SCMD_BAR_BA              0x0000FFF8
#define B_PCH_SATA_SCMD_BAR_RTE             BIT0
#define R_PCH_SATA_SCNL_BAR                 0x1C
#define B_PCH_SATA_SCNL_BAR_BA              0x0000FFFC
#define B_PCH_SATA_SCNL_BAR_RTE             BIT0
#define R_PCH_SATA_BUS_MASTER_BAR           0x20
#define B_PCH_SATA_BUS_MASTER_BAR_BA        0x0000FFE0
#define B_PCH_SATA_BUS_MASTER_BAR_BA4       BIT4
#define B_PCH_SATA_BUS_MASTER_BAR_RTE       BIT0
#define R_PCH_SATA_SIDP_BAR                 0x24
#define R_PCH_SATA_AHCI_BAR                 0x24
#define B_PCH_SATA_AHCI_BAR_BA              0xFFFFF800
#define V_PCH_SATA_AHCI_BAR_LENGTH          0x800
#define N_PCH_SATA_AHCI_BAR_ALIGNMENT       11
#define B_PCH_SATA_AHCI_BAR_PF              BIT3
#define B_PCH_SATA_AHCI_BAR_TP              (BIT2 | BIT1)
#define B_PCH_SATA_AHCI_BAR_RTE             BIT0
#define R_PCH_SATA_AHCI_SVID                0x2C
#define B_PCH_SATA_AHCI_SVID                0xFFFF
#define R_PCH_SATA_AHCI_SID                 0x2E
#define B_PCH_SATA_AHCI_SID                 0xFFFF
#define R_PCH_SATA_AHCI_CAP_PTR             0x34
#define B_PCH_SATA_AHCI_CAP_PTR             0xFF
#define R_PCH_SATA_AHCI_INTLN               0x3C
#define B_PCH_SATA_AHCI_INTLN               0xFF
#define R_PCH_SATA_AHCI_INTPN               0x3D
#define B_PCH_SATA_AHCI_INTPN               0xFF
#define R_PCH_SATA_TIMP                     0x40
#define R_PCH_SATA_TIMS                     0x42
#define B_PCH_SATA_TIM_IDE                  BIT15 ///< IDE Decode Enable
#define R_PCH_SATA_PID                      0x70
#define B_PCH_SATA_PID_NEXT                 0xFF00
#define V_PCH_SATA_PID_NEXT_0               0xB000
#define V_PCH_SATA_PID_NEXT_1               0xA800
#define B_PCH_SATA_PID_CID                  0x00FF
#define R_PCH_SATA_PC                       0x72
#define S_PCH_SATA_PC                       2
#define B_PCH_SATA_PC_PME                   (BIT15 | BIT14 | BIT13 | BIT12 | BIT11)
#define V_PCH_SATA_PC_PME_0                 0x0000
#define V_PCH_SATA_PC_PME_1                 0x4000
#define B_PCH_SATA_PC_D2_SUP                BIT10
#define B_PCH_SATA_PC_D1_SUP                BIT9
#define B_PCH_SATA_PC_AUX_CUR               (BIT8 | BIT7 | BIT6)
#define B_PCH_SATA_PC_DSI                   BIT5
#define B_PCH_SATA_PC_PME_CLK               BIT3
#define B_PCH_SATA_PC_VER                   (BIT2 | BIT1 | BIT0)
#define R_PCH_SATA_PMCS                     0x74
#define B_PCH_SATA_PMCS_PMES                BIT15
#define B_PCH_SATA_PMCS_PMEE                BIT8
#define B_PCH_SATA_PMCS_NSFRST              BIT3
#define V_PCH_SATA_PMCS_NSFRST_1            0x01
#define V_PCH_SATA_PMCS_NSFRST_0            0x00
#define B_PCH_SATA_PMCS_PS                  (BIT1 | BIT0)
#define V_PCH_SATA_PMCS_PS_3                0x03
#define V_PCH_SATA_PMCS_PS_0                0x00
#define R_PCH_SATA_MID                      0x80
#define B_PCH_SATA_MID_NEXT                 0xFF00
#define B_PCH_SATA_MID_CID                  0x00FF
#define R_PCH_SATA_MC                       0x82
#define B_PCH_SATA_MC_C64                   BIT7
#define B_PCH_SATA_MC_MME                   (BIT6 | BIT5 | BIT4)
#define V_PCH_SATA_MC_MME_4                 0x04
#define V_PCH_SATA_MC_MME_2                 0x02
#define V_PCH_SATA_MC_MME_1                 0x01
#define V_PCH_SATA_MC_MME_0                 0x00
#define B_PCH_SATA_MC_MMC                   (BIT3 | BIT2 | BIT1)
#define V_PCH_SATA_MC_MMC_4                 0x04
#define V_PCH_SATA_MC_MMC_0                 0x00
#define B_PCH_SATA_MC_MSIE                  BIT0
#define V_PCH_SATA_MC_MSIE_1                0x01
#define V_PCH_SATA_MC_MSIE_0                0x00
#define R_PCH_SATA_MA                       0x84
#define B_PCH_SATA_MA                       0xFFFFFFFC
#define R_PCH_SATA_MD                       0x88
#define B_PCH_SATA_MD_MSIMD                 0xFFFF
#define R_PCH_SATA_MAP                      0x90
#define B_PCH_H_SATA_MAP_SPD                (BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8)
#define B_PCH_LP_SATA_MAP_SPD               (BIT11 | BIT10 | BIT9 | BIT8)
#define B_PCH_SATA_PORT5_DISABLED           BIT13
#define B_PCH_SATA_PORT4_DISABLED           BIT12
#define B_PCH_SATA_PORT3_DISABLED           BIT11
#define B_PCH_SATA_PORT2_DISABLED           BIT10
#define B_PCH_SATA_PORT1_DISABLED           BIT9
#define B_PCH_SATA_PORT0_DISABLED           BIT8
#define B_PCH_SATA2_MAP_SPD                 (BIT9 | BIT8)
#define B_PCH_SATA2_PORT5_DISABLED          BIT9
#define B_PCH_SATA2_PORT4_DISABLED          BIT8
#define B_PCH_SATA_MAP_SMS_MASK             (BIT7 | BIT6)
#define V_PCH_SATA_MAP_SMS_LOOBACK_TESTMODE 0x00
#define V_PCH_SATA_MAP_SMS_IDE              0x00
#define V_PCH_SATA_MAP_SMS_AHCI             0x40
#define V_PCH_SATA_MAP_SMS_RAID             0x80
#define B_PCH_SATA_PORT_TO_CONTROLLER_CFG   BIT5
#define R_PCH_SATA_PCS                      0x92
#define S_PCH_SATA_PCS                      0x2
#define B_PCH_SATA_PCS_OOB_RETRY            BIT15
#define B_PCH_SATA_PCS_PORT5_DET            BIT13
#define B_PCH_SATA_PCS_PORT4_DET            BIT12
#define B_PCH_SATA_PCS_PORT3_DET            BIT11
#define B_PCH_SATA_PCS_PORT2_DET            BIT10
#define B_PCH_SATA_PCS_PORT1_DET            BIT9
#define B_PCH_SATA_PCS_PORT0_DET            BIT8
#define B_PCH_SATA_PCS_PORT5_EN             BIT5
#define B_PCH_SATA_PCS_PORT4_EN             BIT4
#define B_PCH_SATA_PCS_PORT3_EN             BIT3
#define B_PCH_SATA_PCS_PORT2_EN             BIT2
#define B_PCH_SATA_PCS_PORT1_EN             BIT1
#define B_PCH_SATA_PCS_PORT0_EN             BIT0
#define B_PCH_SATA2_PCS_PORT5_DET           BIT9
#define B_PCH_SATA2_PCS_PORT4_DET           BIT8
#define B_PCH_SATA2_PCS_PORT5_EN            BIT1
#define B_PCH_SATA2_PCS_PORT4_EN            BIT0
#define R_PCH_SATA_SCLKCG                   0x94
#define B_PCH_SATA_SCLKCG_PORT5_PCD         BIT29
#define B_PCH_SATA_SCLKCG_PORT4_PCD         BIT28
#define B_PCH_SATA_SCLKCG_PORT3_PCD         BIT27
#define B_PCH_SATA_SCLKCG_PORT2_PCD         BIT26
#define B_PCH_SATA_SCLKCG_PORT1_PCD         BIT25
#define B_PCH_SATA_SCLKCG_PORT0_PCD         BIT24
#define B_PCH_SATA_SCLKCG_POP3_DEVSLP       BIT15
#define R_PCH_SATA_SCLKGC                   0x9C
#define B_PCH_SATA_SCLKGC_AIE               BIT7
#define B_PCH_SATA_SCLKGC_AIES              BIT6
#define B_PCH_SATA_SCLKGC_SATATM_MASK       0x7C
#define B_PCH_SATA_SCLKGC_SATATM_EN         (BIT3 | BIT2)
#define B_PCH_SATA_SCLKGC_SATA4PMIND        BIT0
#define R_PCH_SATA_SIRI                     0xA0
#define B_PCH_SATA_SIRI_IDX                 0xFC
#define R_PCH_SATA_STRD                     0xA4
#define B_PCH_SATA_STRD_DTA                 0xFFFFFFFF
#define R_PCH_SATA_CR0                      0xA8
#define B_PCH_SATA_CR0_MAJREV               0x00F00000
#define B_PCH_SATA_CR0_MINREV               0x000F0000
#define B_PCH_SATA_CR0_NEXT                 0x0000FF00
#define B_PCH_SATA_CR0_CAP                  0x000000FF
#define R_PCH_SATA_CR1                      0xAC
#define B_PCH_SATA_CR1_BAROFST              0xFFF0
#define B_PCH_SATA_CR1_BARLOC               0x000F
#define R_PCH_SATA_FLR_CID                  0xB0
#define B_PCH_SATA_FLR_CID_NEXT             0xFF00
#define B_PCH_SATA_FLR_CID                  0x00FF
#define V_PCH_SATA_FLR_CID_1                0x0009
#define V_PCH_SATA_FLR_CID_0                0x0013
#define R_PCH_SATA_FLR_CLV                  0xB2
#define B_PCH_SATA_FLR_CLV_FLRC_FLRCSSEL_0  BIT9
#define B_PCH_SATA_FLR_CLV_TXPC_FLRCSSEL_0  BIT8
#define B_PCH_SATA_FLR_CLV_VSCID_FLRCSSEL_0 0x00FF
#define B_PCH_SATA_FLR_CLV_VSCID_FLRCSSEL_1 0x00FF
#define V_PCH_SATA_FLR_CLV_VSCID_FLRCSSEL   0x0006
#define R_PCH_SATA_FLRC                     0xB4
#define B_PCH_SATA_FLRC_TXP                 BIT8
#define B_PCH_SATA_FLRC_INITFLR             BIT0
#define R_PCH_SATA_ATC                      0xC0
#define B_PCH_SATA_ATC_SST                  BIT3
#define B_PCH_SATA_ATC_SPT                  BIT2
#define B_PCH_SATA_ATC_PST                  BIT1
#define B_PCH_SATA_ATC_PMT                  BIT0
#define R_PCH_SATA_ATS                      0xC4
#define B_PCH_SATA_ATS_SST                  BIT3
#define B_PCH_SATA_ATS_SPT                  BIT2
#define B_PCH_SATA_ATS_PST                  BIT1
#define B_PCH_SATA_ATS_PMT                  BIT0
#define R_PCH_SATA_SP                       0xD0
#define B_PCH_SATA_SP                       0xFFFFFFFF
#define R_PCH_SATA_BFCS                     0xE0
#define B_PCH_SATA_BFCS_P5BFI               BIT15
#define B_PCH_SATA_BFCS_P4BFI               BIT14
#define B_PCH_SATA_BFCS_P3BFI               BIT13
#define B_PCH_SATA_BFCS_P2BFI               BIT12
#define B_PCH_SATA_BFCS_P2BFS               BIT11
#define B_PCH_SATA_BFCS_P2BFF               BIT10
#define B_PCH_SATA_BFCS_P1BFI               BIT9
#define B_PCH_SATA_BFCS_P0BFI               BIT8
#define B_PCH_SATA_BFCS_BIST_FIS_T          BIT7
#define B_PCH_SATA_BFCS_BIST_FIS_A          BIT6
#define B_PCH_SATA_BFCS_BIST_FIS_S          BIT5
#define B_PCH_SATA_BFCS_BIST_FIS_L          BIT4
#define B_PCH_SATA_BFCS_BIST_FIS_F          BIT3
#define B_PCH_SATA_BFCS_BIST_FIS_P          BIT2
#define R_PCH_SATA_BFTD1                    0xE4
#define B_PCH_SATA_BFTD1                    0xFFFFFFFF
#define R_PCH_SATA_BFTD2                    0xE8
#define B_PCH_SATA_BFTD2                    0xFFFFFFFF

//
// Serial ATA Index/Data Pair Superset Registers
//
#define R_PCH_SATA_SIDPBA_SINDX             0x00
#define R_PCH_SATA_SIDPBA_SDATA             0x04
#define V_PCH_SATA_AHCI_SINDX_RIDX_SCTL     0x01
#define V_PCH_SATA_AHCI_SINDX_PIDX_PORT0    0x0000
#define V_PCH_SATA_AHCI_SINDX_PIDX_PORT1    0x0200
#define V_PCH_SATA_AHCI_SINDX_PIDX_PORT2    0x0100
#define V_PCH_SATA_AHCI_SINDX_PIDX_PORT3    0x0300
#define V_PCH_SATA_SIDPBA_SDATA_GEN1        0x10
#define V_PCH_SATA_SIDPBA_SDATA_GEN2        0x20
#define V_PCH_SATA_SIDPBA_SDATA_GEN3        0x30
#define B_PCH_SATA_SIDPBA_SCTL_DET          (BIT3|BIT2|BIT1|BIT0)
#define V_PCH_SATA_SIDPBA_SCTL_DET_COMRST   0x01
#define V_PCH_SATA_SIDPBA_SCTL_DET_NOINT    0x00
#define V_PCH_SATA_SIDP_BAR_LENGTH          0x10
#define N_PCH_SATA_SIDP_BAR_ALIGNMENT       0x04

//
// AHCI BAR Area related Registers
//
#define R_PCH_SATA_AHCI_CAP                 0x0
#define B_PCH_SATA_AHCI_CAP_S64A            BIT31
#define B_PCH_SATA_AHCI_CAP_SCQA            BIT30
#define B_PCH_SATA_AHCI_CAP_SSNTF           BIT29
#define B_PCH_SATA_AHCI_CAP_SIS             BIT28 ///< Supports Interlock Switch
#define B_PCH_SATA_AHCI_CAP_SSS             BIT27 ///< Supports Stagger Spin-up
#define B_PCH_SATA_AHCI_CAP_SALP            BIT26
#define B_PCH_SATA_AHCI_CAP_SAL             BIT25
#define B_PCH_SATA_AHCI_CAP_SCLO            BIT24 ///< Supports Command List Override
#define B_PCH_SATA_AHCI_CAP_ISS_MASK        (BIT23 | BIT22 | BIT21 | BIT20)
#define N_PCH_SATA_AHCI_CAP_ISS             20    ///< Interface Speed Support
#define V_PCH_SATA_AHCI_CAP_ISS_1_5_G       0x01
#define V_PCH_SATA_AHCI_CAP_ISS_3_0_G       0x02
#define V_PCH_SATA_AHCI_CAP_ISS_6_0_G       0x03
#define B_PCH_SATA_AHCI_CAP_SNZO            BIT19
#define B_PCH_SATA_AHCI_CAP_SAM             BIT18
#define B_PCH_SATA_AHCI_CAP_PMS             BIT17 ///< Supports Port Multiplier
#define B_PCH_SATA_AHCI_CAP_PMD             BIT15 ///< PIO Multiple DRQ Block
#define B_PCH_SATA_AHCI_CAP_SSC             BIT14
#define B_PCH_SATA_AHCI_CAP_PSC             BIT13
#define B_PCH_SATA_AHCI_CAP_NCS             0x1F00
#define B_PCH_SATA_AHCI_CAP_CCCS            BIT7
#define B_PCH_SATA_AHCI_CAP_EMS             BIT6
#define B_PCH_SATA_AHCI_CAP_SXS             BIT5  ///< External SATA is supported
#define B_PCH_SATA_AHCI_CAP_NPS             0x001F

#define R_PCH_SATA_AHCI_GHC                 0x04
#define B_PCH_SATA_AHCI_GHC_AE              BIT31
#define B_PCH_SATA_AHCI_GHC_MRSM            BIT2
#define B_PCH_SATA_AHCI_GHC_IE              BIT1
#define B_PCH_SATA_AHCI_GHC_HR              BIT0

#define R_PCH_SATA_AHCI_IS                  0x08
#define B_PCH_SATA_AHCI_IS_PORT5            BIT5
#define B_PCH_SATA_AHCI_IS_PORT4            BIT4
#define B_PCH_SATA_AHCI_IS_PORT3            BIT3
#define B_PCH_SATA_AHCI_IS_PORT2            BIT2
#define B_PCH_SATA_AHCI_IS_PORT1            BIT1
#define B_PCH_SATA_AHCI_IS_PORT0            BIT0
#define R_PCH_SATA_AHCI_PI                  0x0C
#define B_PCH_H_SATA_PORT_MASK              0x3F
#define B_PCH_LP_SATA_PORT_MASK             0x0F
#define B_PCH_SATA_PORT5_IMPLEMENTED        BIT5
#define B_PCH_SATA_PORT4_IMPLEMENTED        BIT4
#define B_PCH_SATA_PORT3_IMPLEMENTED        BIT3
#define B_PCH_SATA_PORT2_IMPLEMENTED        BIT2
#define B_PCH_SATA_PORT1_IMPLEMENTED        BIT1
#define B_PCH_SATA_PORT0_IMPLEMENTED        BIT0
#define R_PCH_SATA_AHCI_VS                  0x10
#define B_PCH_SATA_AHCI_VS_MJR              0xFFFF0000
#define B_PCH_SATA_AHCI_VS_MNR              0x0000FFFF
#define R_PCH_SATA_AHCI_EM_LOC              0x1C
#define B_PCH_SATA_AHCI_EM_LOC_OFST         0xFFFF0000
#define B_PCH_SATA_AHCI_EM_LOC_SZ           0x0000FFFF
#define R_PCH_SATA_AHCI_EM_CTRL             0x20
#define B_PCH_SATA_AHCI_EM_CTRL_ATTR_ALHD   BIT26
#define B_PCH_SATA_AHCI_EM_CTRL_ATTR_XMT    BIT25
#define B_PCH_SATA_AHCI_EM_CTRL_ATTR_SMB    BIT24
#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_SGPIO  BIT19
#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_SES2   BIT18
#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_SAFTE  BIT17
#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_LED    BIT16
#define B_PCH_SATA_AHCI_EM_CTRL_RST         BIT9
#define B_PCH_SATA_AHCI_EM_CTRL_CTL_TM      BIT8
#define B_PCH_SATA_AHCI_EM_CTRL_STS_MR      BIT0
#define R_PCH_SATA_AHCI_CAP2                0x24
#define B_PCH_SATA_AHCI_CAP2_DESO           BIT5
#define B_PCH_SATA_AHCI_CAP2_SADM           BIT4
#define B_PCH_SATA_AHCI_CAP2_SDS            BIT3
#define B_PCH_SATA_AHCI_CAP2_APST           BIT2  ///< Automatic Partial to Slumber Transitions
#define R_PCH_SATA_AHCI_VSP                 0xA0
#define B_PCH_SATA_AHCI_VSP_SLPD            BIT0
#define R_PCH_SATA_AHCI_RSTF                0xC8  ///< RST Feature Capabilities
#define B_PCH_SATA_AHCI_RSTF_OUD            (BIT11 | BIT10)
#define N_PCH_SATA_AHCI_RSTF_OUD            10
#define B_PCH_SATA_AHCI_RSTF_SEREQ          BIT9
#define B_PCH_SATA_AHCI_RSTF_IROES          BIT8
#define B_PCH_SATA_AHCI_RSTF_LEDL           BIT7
#define B_PCH_SATA_AHCI_RSTF_HDDLK          BIT6
#define B_PCH_SATA_AHCI_RSTF_IRSTOROM       BIT5
#define B_PCH_SATA_AHCI_RSTF_RSTE           BIT4
#define B_PCH_SATA_AHCI_RSTF_R5E            BIT3
#define B_PCH_SATA_AHCI_RSTF_R10E           BIT2
#define B_PCH_SATA_AHCI_RSTF_R1E            BIT1
#define B_PCH_SATA_AHCI_RSTF_R0E            BIT0
#define B_PCH_SATA_AHCI_RSTF_LOWBYTES       0x1FF
#define R_PCH_SATA_AHCI_P0CLB               0x100
#define R_PCH_SATA_AHCI_P1CLB               0x180
#define R_PCH_SATA_AHCI_P2CLB               0x200
#define R_PCH_SATA_AHCI_P3CLB               0x280
#define R_PCH_SATA_AHCI_P4CLB               0x300
#define R_PCH_SATA_AHCI_P5CLB               0x380
#define R_PCH_SATA_AHCI_P6CLB               0x400
#define R_PCH_SATA_AHCI_P7CLB               0x480
#define B_PCH_SATA_AHCI_PXCLB               0xFFFFFC00
#define R_PCH_SATA_AHCI_P0CLBU              0x104
#define R_PCH_SATA_AHCI_P1CLBU              0x184
#define R_PCH_SATA_AHCI_P2CLBU              0x204
#define R_PCH_SATA_AHCI_P3CLBU              0x284
#define R_PCH_SATA_AHCI_P4CLBU              0x304
#define R_PCH_SATA_AHCI_P5CLBU              0x384
#define R_PCH_SATA_AHCI_P6CLBU              0x404
#define B_PCH_SATA_AHCI_PXCLBU              0xFFFFFFFF
#define R_PCH_SATA_AHCI_P0FB                0x108
#define R_PCH_SATA_AHCI_P1FB                0x188
#define R_PCH_SATA_AHCI_P2FB                0x208
#define R_PCH_SATA_AHCI_P3FB                0x288
#define R_PCH_SATA_AHCI_P4FB                0x308
#define R_PCH_SATA_AHCI_P5FB                0x388
#define R_PCH_SATA_AHCI_P6FB                0x408
#define B_PCH_SATA_AHCI_PXFB                0xFFFFFF00
#define R_PCH_SATA_AHCI_P0FBU               0x10C
#define R_PCH_SATA_AHCI_P1FBU               0x18C
#define R_PCH_SATA_AHCI_P2FBU               0x20C
#define R_PCH_SATA_AHCI_P3FBU               0x28C
#define R_PCH_SATA_AHCI_P4FBU               0x30C
#define R_PCH_SATA_AHCI_P5FBU               0x38C
#define R_PCH_SATA_AHCI_P6FBU               0x40C
#define B_PCH_SATA_AHCI_PXFBU               0xFFFFFFFF
#define R_PCH_SATA_AHCI_P0IS                0x110
#define R_PCH_SATA_AHCI_P1IS                0x190
#define R_PCH_SATA_AHCI_P2IS                0x210
#define R_PCH_SATA_AHCI_P3IS                0x290
#define R_PCH_SATA_AHCI_P4IS                0x310
#define R_PCH_SATA_AHCI_P5IS                0x390
#define R_PCH_SATA_AHCI_P6IS                0x410
#define B_PCH_SATA_AHCI_PXIS_CPDS           BIT31
#define B_PCH_SATA_AHCI_PXIS_TFES           BIT30
#define B_PCH_SATA_AHCI_PXIS_HBFS           BIT29
#define B_PCH_SATA_AHCI_PXIS_HBDS           BIT28
#define B_PCH_SATA_AHCI_PXIS_IFS            BIT27
#define B_PCH_SATA_AHCI_PXIS_INFS           BIT26
#define B_PCH_SATA_AHCI_PXIS_OFS            BIT24
#define B_PCH_SATA_AHCI_PXIS_IPMS           BIT23
#define B_PCH_SATA_AHCI_PXIS_PRCS           BIT22
#define B_PCH_SATA_AHCI_PXIS_DIS            BIT7
#define B_PCH_SATA_AHCI_PXIS_PCS            BIT6
#define B_PCH_SATA_AHCI_PXIS_DPS            BIT5
#define B_PCH_SATA_AHCI_PXIS_UFS            BIT4
#define B_PCH_SATA_AHCI_PXIS_SDBS           BIT3
#define B_PCH_SATA_AHCI_PXIS_DSS            BIT2
#define B_PCH_SATA_AHCI_PXIS_PSS            BIT1
#define B_PCH_SATA_AHCI_PXIS_DHRS           BIT0
#define R_PCH_SATA_AHCI_P0IE                0x114
#define R_PCH_SATA_AHCI_P1IE                0x194
#define R_PCH_SATA_AHCI_P2IE                0x214
#define R_PCH_SATA_AHCI_P3IE                0x294
#define R_PCH_SATA_AHCI_P4IE                0x314
#define R_PCH_SATA_AHCI_P5IE                0x394
#define R_PCH_SATA_AHCI_P6IE                0x414
#define B_PCH_SATA_AHCI_PXIE_CPDE           BIT31
#define B_PCH_SATA_AHCI_PXIE_TFEE           BIT30
#define B_PCH_SATA_AHCI_PXIE_HBFE           BIT29
#define B_PCH_SATA_AHCI_PXIE_HBDE           BIT28
#define B_PCH_SATA_AHCI_PXIE_IFE            BIT27
#define B_PCH_SATA_AHCI_PXIE_INFE           BIT26
#define B_PCH_SATA_AHCI_PXIE_OFE            BIT24
#define B_PCH_SATA_AHCI_PXIE_IPME           BIT23
#define B_PCH_SATA_AHCI_PXIE_PRCE           BIT22
#define B_PCH_SATA_AHCI_PXIE_DIE            BIT7
#define B_PCH_SATA_AHCI_PXIE_PCE            BIT6
#define B_PCH_SATA_AHCI_PXIE_DPE            BIT5
#define B_PCH_SATA_AHCI_PXIE_UFIE           BIT4
#define B_PCH_SATA_AHCI_PXIE_SDBE           BIT3
#define B_PCH_SATA_AHCI_PXIE_DSE            BIT2
#define B_PCH_SATA_AHCI_PXIE_PSE            BIT1
#define B_PCH_SATA_AHCI_PXIE_DHRE           BIT0
#define R_PCH_SATA_AHCI_P0CMD               0x118
#define R_PCH_SATA_AHCI_P1CMD               0x198
#define R_PCH_SATA_AHCI_P2CMD               0x218
#define R_PCH_SATA_AHCI_P3CMD               0x298
#define R_PCH_SATA_AHCI_P4CMD               0x318
#define R_PCH_SATA_AHCI_P5CMD               0x398
#define R_PCH_SATA_AHCI_P6CMD               0x418
#define B_PCH_SATA_AHCI_PxCMD_ICC           (BIT31 | BIT30 | BIT29 | BIT28)
#define B_PCH_SATA_AHCI_PxCMD_MASK          (BIT27 | BIT26 | BIT21 | BIT22 | BIT19 | BIT18)
#define B_PCH_SATA_AHCI_PxCMD_ASP           BIT27
#define B_PCH_SATA_AHCI_PxCMD_ALPE          BIT26
#define B_PCH_SATA_AHCI_PxCMD_DLAE          BIT25
#define B_PCH_SATA_AHCI_PxCMD_ATAPI         BIT24
#define B_PCH_SATA_AHCI_PxCMD_APSTE         BIT23
#define B_PCH_SATA_AHCI_PxCMD_SUD           BIT1
#define R_PCH_SATA_AHCI_P0DEVSLP            0x144
#define R_PCH_SATA_AHCI_P1DEVSLP            0x1C4
#define R_PCH_SATA_AHCI_P2DEVSLP            0x244
#define R_PCH_SATA_AHCI_P3DEVSLP            0x2C4
#define B_PCH_SATA_AHCI_PxDEVSLP_DSP        BIT1
#define B_PCH_SATA_AHCI_PxDEVSLP_ADSE       BIT0
#define B_PCH_SATA_AHCI_PxDEVSLP_DITO_MASK  0x01FF8000
#define V_PCH_SATA_AHCI_PxDEVSLP_DITO_625   0x01388000
#define B_PCH_SATA_AHCI_PxDEVSLP_DM_MASK    0x1E000000
#define V_PCH_SATA_AHCI_PxDEVSLP_DM_16      0x1E000000
#define B_PCH_SATA_AHCI_PxCMD_ESP           BIT21 ///< Used with an external SATA device
#define B_PCH_SATA_AHCI_PxCMD_MPSP          BIT19 ///< Mechanical Switch Attached to Port
#define B_PCH_SATA_AHCI_PxCMD_HPCP          BIT18 ///< Hotplug capable
#define B_PCH_SATA_AHCI_PxCMD_CR            BIT15
#define B_PCH_SATA_AHCI_PxCMD_FR            BIT14
#define B_PCH_SATA_AHCI_PxCMD_ISS           BIT13
#define B_PCH_SATA_AHCI_PxCMD_CCS           0x00001F00
#define B_PCH_SATA_AHCI_PxCMD_FRE           BIT4
#define B_PCH_SATA_AHCI_PxCMD_CLO           BIT3
#define B_PCH_SATA_AHCI_PxCMD_POD           BIT2
#define B_PCH_SATA_AHCI_PxCMD_SUD           BIT1
#define B_PCH_SATA_AHCI_PxCMD_ST            BIT0
#define R_PCH_SATA_AHCI_P0TFD               0x120
#define R_PCH_SATA_AHCI_P1TFD               0x1A0
#define R_PCH_SATA_AHCI_P2TFD               0x220
#define R_PCH_SATA_AHCI_P3TFD               0x2A0
#define R_PCH_SATA_AHCI_P4TFD               0x320
#define R_PCH_SATA_AHCI_P5TFD               0x3A0
#define R_PCH_SATA_AHCI_P6TFD               0x420
#define B_PCH_SATA_AHCI_PXTFD_ERR           0x0000FF00
#define B_PCH_SATA_AHCI_PXTFD_STS           0x000000FF
#define R_PCH_SATA_AHCI_P0SIG               0x124
#define R_PCH_SATA_AHCI_P1SIG               0x1A4
#define R_PCH_SATA_AHCI_P2SIG               0x224
#define R_PCH_SATA_AHCI_P3SIG               0x2A4
#define R_PCH_SATA_AHCI_P4SIG               0x324
#define R_PCH_SATA_AHCI_P5SIG               0x3A4
#define R_PCH_SATA_AHCI_P6SIG               0x424
#define B_PCH_SATA_AHCI_PXSIG_LBA_HR        0xFF000000
#define B_PCH_SATA_AHCI_PXSIG_LBA_MR        0x00FF0000
#define B_PCH_SATA_AHCI_PXSIG_LBA_LR        0x0000FF00
#define B_PCH_SATA_AHCI_PXSIG_SCR           0x000000FF
#define R_PCH_SATA_AHCI_P0SSTS              0x128
#define R_PCH_SATA_AHCI_P1SSTS              0x1A8
#define R_PCH_SATA_AHCI_P2SSTS              0x228
#define R_PCH_SATA_AHCI_P3SSTS              0x2A8
#define R_PCH_SATA_AHCI_P4SSTS              0x328
#define R_PCH_SATA_AHCI_P5SSTS              0x3A8
#define R_PCH_SATA_AHCI_P6SSTS              0x428
#define B_PCH_SATA_AHCI_PXSSTS_IPM_0        0x00000000
#define B_PCH_SATA_AHCI_PXSSTS_IPM_1        0x00000100
#define B_PCH_SATA_AHCI_PXSSTS_IPM_2        0x00000200
#define B_PCH_SATA_AHCI_PXSSTS_IPM_6        0x00000600
#define B_PCH_SATA_AHCI_PXSSTS_SPD_0        0x00000000
#define B_PCH_SATA_AHCI_PXSSTS_SPD_1        0x00000010
#define B_PCH_SATA_AHCI_PXSSTS_SPD_2        0x00000020
#define B_PCH_SATA_AHCI_PXSSTS_SPD_3        0x00000030
#define B_PCH_SATA_AHCI_PXSSTS_DET_0        0x00000000
#define B_PCH_SATA_AHCI_PXSSTS_DET_1        0x00000001
#define B_PCH_SATA_AHCI_PXSSTS_DET_3        0x00000003
#define B_PCH_SATA_AHCI_PXSSTS_DET_4        0x00000004
#define R_PCH_SATA_AHCI_P0SCTL              0x12C
#define R_PCH_SATA_AHCI_P1SCTL              0x1AC
#define R_PCH_SATA_AHCI_P2SCTL              0x22C
#define R_PCH_SATA_AHCI_P3SCTL              0x2AC
#define R_PCH_SATA_AHCI_P4SCTL              0x32C
#define R_PCH_SATA_AHCI_P5SCTL              0x3AC
#define R_PCH_SATA_AHCI_P6SCTL              0x42C
#define B_PCH_SATA_AHCI_PXSCTL_IPM          0x00000F00
#define V_PCH_SATA_AHCI_PXSCTL_IPM_0        0x00000000
#define V_PCH_SATA_AHCI_PXSCTL_IPM_1        0x00000100
#define V_PCH_SATA_AHCI_PXSCTL_IPM_2        0x00000200
#define V_PCH_SATA_AHCI_PXSCTL_IPM_3        0x00000300
#define B_PCH_SATA_AHCI_PXSCTL_SPD          0x000000F0
#define V_PCH_SATA_AHCI_PXSCTL_SPD_0        0x00000000
#define V_PCH_SATA_AHCI_PXSCTL_SPD_1        0x00000010
#define V_PCH_SATA_AHCI_PXSCTL_SPD_2        0x00000020
#define V_PCH_SATA_AHCI_PXSCTL_SPD_3        0x00000030
#define B_PCH_SATA_AHCI_PXSCTL_DET          0x0000000F
#define V_PCH_SATA_AHCI_PXSCTL_DET_0        0x00000000
#define V_PCH_SATA_AHCI_PXSCTL_DET_1        0x00000001
#define V_PCH_SATA_AHCI_PXSCTL_DET_4        0x00000004
#define R_PCH_SATA_AHCI_P0SERR              0x130
#define R_PCH_SATA_AHCI_P1SERR              0x1B0
#define R_PCH_SATA_AHCI_P2SERR              0x230
#define R_PCH_SATA_AHCI_P3SERR              0x2B0
#define R_PCH_SATA_AHCI_P4SERR              0x330
#define R_PCH_SATA_AHCI_P5SERR              0x3B0
#define R_PCH_SATA_AHCI_P6SERR              0x430
#define B_PCH_SATA_AHCI_PXSERR_EXCHG        BIT26
#define B_PCH_SATA_AHCI_PXSERR_UN_FIS_TYPE  BIT25
#define B_PCH_SATA_AHCI_PXSERR_TRSTE_24     BIT24
#define B_PCH_SATA_AHCI_PXSERR_TRSTE_23     BIT23
#define B_PCH_SATA_AHCI_PXSERR_HANDSHAKE    BIT22
#define B_PCH_SATA_AHCI_PXSERR_CRC_ERROR    BIT21
#define B_PCH_SATA_AHCI_PXSERR_10B8B_DECERR BIT19
#define B_PCH_SATA_AHCI_PXSERR_COMM_WAKE    BIT18
#define B_PCH_SATA_AHCI_PXSERR_PHY_ERROR    BIT17
#define B_PCH_SATA_AHCI_PXSERR_PHY_RDY_CHG  BIT16
#define B_PCH_SATA_AHCI_PXSERR_INTRNAL_ERR  BIT11
#define B_PCH_SATA_AHCI_PXSERR_PROTOCOL_ERR BIT10
#define B_PCH_SATA_AHCI_PXSERR_PCDIE        BIT9
#define B_PCH_SATA_AHCI_PXSERR_TDIE         BIT8
#define B_PCH_SATA_AHCI_PXSERR_RCE          BIT1
#define B_PCH_SATA_AHCI_PXSERR_RDIE         BIT0
#define R_PCH_SATA_AHCI_P0SACT              0x134
#define R_PCH_SATA_AHCI_P1SACT              0x1B4
#define R_PCH_SATA_AHCI_P2SACT              0x234
#define R_PCH_SATA_AHCI_P3SACT              0x2B4
#define R_PCH_SATA_AHCI_P4SACT              0x334
#define R_PCH_SATA_AHCI_P5SACT              0x3B4
#define R_PCH_SATA_AHCI_P6SACT              0x434
#define B_PCH_SATA_AHCI_PXSACT_DS           0xFFFFFFFF
#define R_PCH_SATA_AHCI_P0CI                0x138
#define R_PCH_SATA_AHCI_P1CI                0x1B8
#define R_PCH_SATA_AHCI_P2CI                0x238
#define R_PCH_SATA_AHCI_P3CI                0x2B8
#define R_PCH_SATA_AHCI_P4CI                0x338
#define R_PCH_SATA_AHCI_P5CI                0x3B8
#define R_PCH_SATA_AHCI_P6CI                0x438
#define B_PCH_SATA_AHCI_PXCI                0xFFFFFFFF

//
// Macros of ICH capabilities for SATA controller which are used by SATA controller driver
//
//
//
// Define the individual capabilities of each sata controller
//
#define LPTH_SATA_MAX_CONTROLLERS           2   ///< max sata controllers number supported
#define LPTLP_SATA_MAX_CONTROLLERS          1   ///< max sata controllers number supported
#define PCH_IDE_MAX_CHANNELS                2   ///< max channels number of single sata controller
#define PCH_IDE_MAX_DEVICES                 2   ///< max devices number of single sata channel
#define LPTH_AHCI_MAX_PORTS                 6   ///< max number of sata ports in LPTH
#define LPTLP_AHCI_MAX_PORTS                4   ///< max number of sata ports in LPTLP
#define PCH_SATA_DEVICE_ID_INVALID          0xFFFF
#define PCH_SATA_1_DEVICE_NUMBER            PCI_DEVICE_NUMBER_PCH_SATA
#define PCH_SATA_1_FUNCTION_NUMBER          PCI_FUNCTION_NUMBER_PCH_SATA
#define PCH_H_AHCI_1_MAX_PORTS              6   ///< max number of ports in sata in PCH
#define PCH_LP_AHCI_1_MAX_PORTS             4   ///< max number of ports in sata1 in PCH
#define PCH_IDE_1_MAX_CHANNELS              2
#define PCH_IDE_1_MAX_DEVICES               2
#define PCH_IDE_1_MAX_PORTS                 4

#define PCH_SATA_2_DEVICE_NUMBER            PCI_DEVICE_NUMBER_PCH_SATA2
#define PCH_SATA_2_FUNCTION_NUMBER          PCI_FUNCTION_NUMBER_PCH_SATA2
#define PCH_AHCI_2_MAX_PORTS                2   ///< number of ports in sata2 in PCH
#define PCH_IDE_2_MAX_CHANNELS              2
#define PCH_IDE_2_MAX_DEVICES               2
#define PCH_IDE_2_MAX_PORTS                 2

//
// GPIO SATA0GP is the Sata port 0 reset pin.
//
#define PCH_GPIO_SATA_PORT0_RESET           21
#define PCH_LP_GPIO_SATA_PORT0_RESET        (R_PCH_GP_N_CONFIG0 + (34 * 0x08))
//
// GPIO SATA1GP is the Sata port 1 reset pin.
//
#define PCH_GPIO_SATA_PORT1_RESET           19
#define PCH_LP_GPIO_SATA_PORT1_RESET        (R_PCH_GP_N_CONFIG0 + (35 * 0x08))

//
// GPIO SATA2GP is the Sata port 2 reset pin.
//
#define PCH_GPIO_SATA_PORT2_RESET           36
#define PCH_LP_GPIO_SATA_PORT2_RESET        (R_PCH_GP_N_CONFIG0 + (36 * 0x08))

//
// GPIO SATA3GP is the Sata port 3 reset pin.
//
#define PCH_GPIO_SATA_PORT3_RESET           37
#define PCH_LP_GPIO_SATA_PORT3_RESET        (R_PCH_GP_N_CONFIG0 + (37 * 0x08))

//
// GPIO SATA4GP is the Sata port 4 reset pin.
//
#define PCH_GPIO_SATA_PORT4_RESET           16
//
// GPIO SATA5GP is the Sata port 5 reset pin.
//
#define PCH_GPIO_SATA_PORT5_RESET           49

#endif