1*69386383SDave Liu /* 2*69386383SDave Liu * Copyright (C) 2008 Freescale Semiconductor, Inc. 3*69386383SDave Liu * Dave Liu <daveliu@freescale.com> 4*69386383SDave Liu * 5*69386383SDave Liu * This program is free software; you can redistribute it and/or 6*69386383SDave Liu * modify it under the terms of the GNU General Public License as 7*69386383SDave Liu * published by the Free Software Foundation; either version 2 of 8*69386383SDave Liu * the License, or (at your option) any later version. 9*69386383SDave Liu * 10*69386383SDave Liu * This program is distributed in the hope that it will be useful, 11*69386383SDave Liu * but WITHOUT ANY WARRANTY; without even the implied warranty of 12*69386383SDave Liu * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*69386383SDave Liu * GNU General Public License for more details. 14*69386383SDave Liu * 15*69386383SDave Liu * You should have received a copy of the GNU General Public License 16*69386383SDave Liu * along with this program; if not, write to the Free Software 17*69386383SDave Liu * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 18*69386383SDave Liu * MA 02111-1307 USA 19*69386383SDave Liu * 20*69386383SDave Liu */ 21*69386383SDave Liu 22*69386383SDave Liu #ifndef __FIS_H__ 23*69386383SDave Liu #define __FIS_H__ 24*69386383SDave Liu /* 25*69386383SDave Liu * Register - Host to Device FIS 26*69386383SDave Liu */ 27*69386383SDave Liu typedef struct sata_fis_h2d { 28*69386383SDave Liu u8 fis_type; 29*69386383SDave Liu u8 pm_port_c; 30*69386383SDave Liu u8 command; 31*69386383SDave Liu u8 features; 32*69386383SDave Liu u8 lba_low; 33*69386383SDave Liu u8 lba_mid; 34*69386383SDave Liu u8 lba_high; 35*69386383SDave Liu u8 device; 36*69386383SDave Liu u8 lba_low_exp; 37*69386383SDave Liu u8 lba_mid_exp; 38*69386383SDave Liu u8 lba_high_exp; 39*69386383SDave Liu u8 features_exp; 40*69386383SDave Liu u8 sector_count; 41*69386383SDave Liu u8 sector_count_exp; 42*69386383SDave Liu u8 res1; 43*69386383SDave Liu u8 control; 44*69386383SDave Liu u8 res2[4]; 45*69386383SDave Liu } __attribute__ ((packed)) sata_fis_h2d_t; 46*69386383SDave Liu 47*69386383SDave Liu /* 48*69386383SDave Liu * Register - Host to Device FIS for read/write FPDMA queued 49*69386383SDave Liu */ 50*69386383SDave Liu typedef struct sata_fis_h2d_ncq { 51*69386383SDave Liu u8 fis_type; 52*69386383SDave Liu u8 pm_port_c; 53*69386383SDave Liu u8 command; 54*69386383SDave Liu u8 sector_count_low; 55*69386383SDave Liu u8 lba_low; 56*69386383SDave Liu u8 lba_mid; 57*69386383SDave Liu u8 lba_high; 58*69386383SDave Liu u8 device; 59*69386383SDave Liu u8 lba_low_exp; 60*69386383SDave Liu u8 lba_mid_exp; 61*69386383SDave Liu u8 lba_high_exp; 62*69386383SDave Liu u8 sector_count_high; 63*69386383SDave Liu u8 tag; 64*69386383SDave Liu u8 res1; 65*69386383SDave Liu u8 res2; 66*69386383SDave Liu u8 control; 67*69386383SDave Liu u8 res3[4]; 68*69386383SDave Liu } __attribute__ ((packed)) sata_fis_h2d_ncq_t; 69*69386383SDave Liu 70*69386383SDave Liu /* 71*69386383SDave Liu * Register - Device to Host FIS 72*69386383SDave Liu */ 73*69386383SDave Liu typedef struct sata_fis_d2h { 74*69386383SDave Liu u8 fis_type; 75*69386383SDave Liu u8 pm_port_i; 76*69386383SDave Liu u8 status; 77*69386383SDave Liu u8 error; 78*69386383SDave Liu u8 lba_low; 79*69386383SDave Liu u8 lba_mid; 80*69386383SDave Liu u8 lba_high; 81*69386383SDave Liu u8 device; 82*69386383SDave Liu u8 lba_low_exp; 83*69386383SDave Liu u8 lba_mid_exp; 84*69386383SDave Liu u8 lba_high_exp; 85*69386383SDave Liu u8 res1; 86*69386383SDave Liu u8 sector_count; 87*69386383SDave Liu u8 sector_count_exp; 88*69386383SDave Liu u8 res2[2]; 89*69386383SDave Liu u8 res3[4]; 90*69386383SDave Liu } __attribute__ ((packed)) sata_fis_d2h_t; 91*69386383SDave Liu 92*69386383SDave Liu /* 93*69386383SDave Liu * DMA Setup - Device to Host or Host to Device FIS 94*69386383SDave Liu */ 95*69386383SDave Liu typedef struct sata_fis_dma_setup { 96*69386383SDave Liu u8 fis_type; 97*69386383SDave Liu u8 pm_port_dir_int_act; 98*69386383SDave Liu u8 res1; 99*69386383SDave Liu u8 res2; 100*69386383SDave Liu u32 dma_buffer_id_low; 101*69386383SDave Liu u32 dma_buffer_id_high; 102*69386383SDave Liu u32 res3; 103*69386383SDave Liu u32 dma_buffer_offset; 104*69386383SDave Liu u32 dma_transfer_count; 105*69386383SDave Liu u32 res4; 106*69386383SDave Liu } __attribute__ ((packed)) sata_fis_dma_setup_t; 107*69386383SDave Liu 108*69386383SDave Liu /* 109*69386383SDave Liu * PIO Setup - Device to Host FIS 110*69386383SDave Liu */ 111*69386383SDave Liu typedef struct sata_fis_pio_setup { 112*69386383SDave Liu u8 fis_type; 113*69386383SDave Liu u8 pm_port_dir_int; 114*69386383SDave Liu u8 status; 115*69386383SDave Liu u8 error; 116*69386383SDave Liu u8 lba_low; 117*69386383SDave Liu u8 lba_mid; 118*69386383SDave Liu u8 lba_high; 119*69386383SDave Liu u8 res1; 120*69386383SDave Liu u8 lba_low_exp; 121*69386383SDave Liu u8 lba_mid_exp; 122*69386383SDave Liu u8 lba_high_exp; 123*69386383SDave Liu u8 res2; 124*69386383SDave Liu u8 sector_count; 125*69386383SDave Liu u8 sector_count_exp; 126*69386383SDave Liu u8 res3; 127*69386383SDave Liu u8 e_status; 128*69386383SDave Liu u16 transfer_count; 129*69386383SDave Liu u16 res4; 130*69386383SDave Liu } __attribute__ ((packed)) sata_fis_pio_setup_t; 131*69386383SDave Liu 132*69386383SDave Liu /* 133*69386383SDave Liu * Data - Host to Device or Device to Host FIS 134*69386383SDave Liu */ 135*69386383SDave Liu typedef struct sata_fis_data { 136*69386383SDave Liu u8 fis_type; 137*69386383SDave Liu u8 pm_port; 138*69386383SDave Liu u8 res1; 139*69386383SDave Liu u8 res2; 140*69386383SDave Liu u32 data[2048]; 141*69386383SDave Liu } __attribute__ ((packed)) sata_fis_data_t; 142*69386383SDave Liu 143*69386383SDave Liu /* fis_type - SATA FIS type 144*69386383SDave Liu */ 145*69386383SDave Liu enum sata_fis_type { 146*69386383SDave Liu SATA_FIS_TYPE_REGISTER_H2D = 0x27, 147*69386383SDave Liu SATA_FIS_TYPE_REGISTER_D2H = 0x34, 148*69386383SDave Liu SATA_FIS_TYPE_DMA_ACT_D2H = 0x39, 149*69386383SDave Liu SATA_FIS_TYPE_DMA_SETUP_BI = 0x41, 150*69386383SDave Liu SATA_FIS_TYPE_DATA_BI = 0x46, 151*69386383SDave Liu SATA_FIS_TYPE_BIST_ACT_BI = 0x58, 152*69386383SDave Liu SATA_FIS_TYPE_PIO_SETUP_D2H = 0x5F, 153*69386383SDave Liu SATA_FIS_TYPE_SET_DEVICE_BITS_D2H = 0xA1, 154*69386383SDave Liu }; 155*69386383SDave Liu 156*69386383SDave Liu #endif /* __FIS_H__ */ 157