Home | History | Annotate | Download | only in include
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Copyright (C) 2008 Freescale Semiconductor, Inc.
      4  *		Dave Liu <daveliu (at) freescale.com>
      5  */
      6 
      7 #ifndef __FIS_H__
      8 #define __FIS_H__
      9 /*
     10 * Register - Host to Device FIS
     11 */
     12 typedef 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 */
     35 typedef 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 */
     58 typedef 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 */
     80 typedef 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 */
     96 typedef 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 */
    120 typedef 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  */
    130 enum 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