uboot/include/fis.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * Copyright (C) 2008 Freescale Semiconductor, Inc.
   4 *              Dave Liu <daveliu@freescale.com>
   5 */
   6
   7#ifndef __FIS_H__
   8#define __FIS_H__
   9/*
  10* Register - Host to Device FIS
  11*/
  12typedef struct sata_fis_h2d {
  13        u8 fis_type;
  14        u8 pm_port_c;
  15        u8 command;
  16        u8 features;
  17        u8 lba_low;
  18        u8 lba_mid;
  19        u8 lba_high;
  20        u8 device;
  21        u8 lba_low_exp;
  22        u8 lba_mid_exp;
  23        u8 lba_high_exp;
  24        u8 features_exp;
  25        u8 sector_count;
  26        u8 sector_count_exp;
  27        u8 res1;
  28        u8 control;
  29        u8 res2[4];
  30} __attribute__ ((packed)) sata_fis_h2d_t;
  31
  32/*
  33* Register - Host to Device FIS for read/write FPDMA queued
  34*/
  35typedef struct sata_fis_h2d_ncq {
  36        u8 fis_type;
  37        u8 pm_port_c;
  38        u8 command;
  39        u8 sector_count_low;
  40        u8 lba_low;
  41        u8 lba_mid;
  42        u8 lba_high;
  43        u8 device;
  44        u8 lba_low_exp;
  45        u8 lba_mid_exp;
  46        u8 lba_high_exp;
  47        u8 sector_count_high;
  48        u8 tag;
  49        u8 res1;
  50        u8 res2;
  51        u8 control;
  52        u8 res3[4];
  53} __attribute__ ((packed)) sata_fis_h2d_ncq_t;
  54
  55/*
  56* Register - Device to Host FIS
  57*/
  58typedef struct sata_fis_d2h {
  59        u8 fis_type;
  60        u8 pm_port_i;
  61        u8 status;
  62        u8 error;
  63        u8 lba_low;
  64        u8 lba_mid;
  65        u8 lba_high;
  66        u8 device;
  67        u8 lba_low_exp;
  68        u8 lba_mid_exp;
  69        u8 lba_high_exp;
  70        u8 res1;
  71        u8 sector_count;
  72        u8 sector_count_exp;
  73        u8 res2[2];
  74        u8 res3[4];
  75} __attribute__ ((packed)) sata_fis_d2h_t;
  76
  77/*
  78* DMA Setup - Device to Host or Host to Device FIS
  79*/
  80typedef struct sata_fis_dma_setup {
  81        u8 fis_type;
  82        u8 pm_port_dir_int_act;
  83        u8 res1;
  84        u8 res2;
  85        u32 dma_buffer_id_low;
  86        u32 dma_buffer_id_high;
  87        u32 res3;
  88        u32 dma_buffer_offset;
  89        u32 dma_transfer_count;
  90        u32 res4;
  91} __attribute__ ((packed)) sata_fis_dma_setup_t;
  92
  93/*
  94* PIO Setup - Device to Host FIS
  95*/
  96typedef struct sata_fis_pio_setup {
  97        u8 fis_type;
  98        u8 pm_port_dir_int;
  99        u8 status;
 100        u8 error;
 101        u8 lba_low;
 102        u8 lba_mid;
 103        u8 lba_high;
 104        u8 res1;
 105        u8 lba_low_exp;
 106        u8 lba_mid_exp;
 107        u8 lba_high_exp;
 108        u8 res2;
 109        u8 sector_count;
 110        u8 sector_count_exp;
 111        u8 res3;
 112        u8 e_status;
 113        u16 transfer_count;
 114        u16 res4;
 115} __attribute__ ((packed)) sata_fis_pio_setup_t;
 116
 117/*
 118* Data - Host to Device or Device to Host FIS
 119*/
 120typedef struct sata_fis_data {
 121        u8 fis_type;
 122        u8 pm_port;
 123        u8 res1;
 124        u8 res2;
 125        u32 data[2048];
 126} __attribute__ ((packed)) sata_fis_data_t;
 127
 128/* fis_type - SATA FIS type
 129 */
 130enum sata_fis_type {
 131        SATA_FIS_TYPE_REGISTER_H2D              = 0x27,
 132        SATA_FIS_TYPE_REGISTER_D2H              = 0x34,
 133        SATA_FIS_TYPE_DMA_ACT_D2H               = 0x39,
 134        SATA_FIS_TYPE_DMA_SETUP_BI              = 0x41,
 135        SATA_FIS_TYPE_DATA_BI                   = 0x46,
 136        SATA_FIS_TYPE_BIST_ACT_BI               = 0x58,
 137        SATA_FIS_TYPE_PIO_SETUP_D2H             = 0x5F,
 138        SATA_FIS_TYPE_SET_DEVICE_BITS_D2H       = 0xA1,
 139};
 140
 141#endif  /* __FIS_H__ */
 142