1/* 2 * Copyright (c) 2011 ETH Zurich. 3 * All rights reserved. 4 * 5 * This file is distributed under the terms in the attached LICENSE file. 6 * If you do not find this file, copies can be found by writing to: 7 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group. 8 */ 9 10#ifndef _AHCI_SATA_FIS_H 11#define _AHCI_SATA_FIS_H 12 13#include <stdint.h> 14 15#define SATA_FIS_TYPE_H2D 0x27 // Register FIS - Host to Device 16#define SATA_FIS_TYPE_D2H 0x34 // Register FIS - Device to Host 17#define SATA_FIS_TYPE_DMAA 0x39 // DMA Activate FIS - Device to Host 18#define SATA_FIS_TYPE_DMAS 0x41 // DMA Setup FIS - Bi-directional 19#define SATA_FIS_TYPE_DATA 0x46 // Data FIS - Bi-directional 20#define SATA_FIS_TYPE_BIST 0x58 // BIST Activate FIS - Bi-directional 21#define SATA_FIS_TYPE_PIO 0x5F // PIO Setup FIS - Device to Host 22#define SATA_FIS_TYPE_SDB 0xA1 // Set Device Bits FIS - Device to Host 23 24#define ATA_CMD_READ_PIO 0x20 25#define ATA_CMD_READ_PIO_EXT 0x24 26#define ATA_CMD_READ_DMA 0xC8 27#define ATA_CMD_READ_DMA_EXT 0x25 28#define ATA_CMD_WRITE_PIO 0x30 29#define ATA_CMD_WRITE_PIO_EXT 0x34 30#define ATA_CMD_WRITE_DMA 0xCA 31#define ATA_CMD_WRITE_DMA_EXT 0x35 32#define ATA_CMD_CACHE_FLUSH 0xE7 33#define ATA_CMD_CACHE_FLUSH_EXT 0xEA 34#define ATA_CMD_PACKET 0xA0 35#define ATA_CMD_IDENTIFY_PACKET 0xA1 36#define ATA_CMD_IDENTIFY 0xEC 37 38struct sata_fis_reg_h2d { 39 unsigned char type; 40 unsigned char specialstuff; 41 unsigned char command; 42 unsigned char feature; 43 44 unsigned char lba0; 45 unsigned char lba1; 46 unsigned char lba2; 47 unsigned char device; 48 49 unsigned char lba3; 50 unsigned char lba4; 51 unsigned char lba5; 52 unsigned char featureh; 53 54 unsigned char countl; 55 unsigned char counth; 56 unsigned char icc; 57 unsigned char control; 58 59 unsigned char reserved[4]; 60}; 61 62struct sata_fis_reg_d2h { 63 unsigned char type; 64 unsigned char specialstuff; 65 unsigned char status; 66 unsigned char error; 67 68 unsigned char lba0; 69 unsigned char lba1; 70 unsigned char lba2; 71 unsigned char device; 72 73 unsigned char lba3; 74 unsigned char lba4; 75 unsigned char lba5; 76 unsigned char reserved; 77 78 unsigned char countl; 79 unsigned char counth; 80 unsigned char reserved2[2]; 81 82 unsigned char reserved3[4]; 83}; 84 85 86void sata_h2d_fis_new(struct sata_fis_reg_h2d* fis, uint8_t command, uint64_t lba, uint16_t sectors); 87void sata_h2d_fis_init(struct sata_fis_reg_h2d* fis); 88void sata_h2d_set_command(struct sata_fis_reg_h2d* fis, uint8_t command); 89void sata_h2d_set_feature(struct sata_fis_reg_h2d* fis, uint8_t feature); 90void sata_h2d_set_lba28(struct sata_fis_reg_h2d* fis, uint32_t lba); 91void sata_h2d_set_lba48(struct sata_fis_reg_h2d* fis, uint64_t lba); 92void sata_h2d_set_count(struct sata_fis_reg_h2d* fis, uint16_t count); 93 94 95#endif // _AHCI_SATA_FIS_H 96