Merge branch 'master' into sata-ahci-dev
[lunaix-os.git] / lunaix-os / includes / hal / ahci / sata.h
1 #ifndef __LUNAIX_SATA_H
2 #define __LUNAIX_SATA_H
3
4 #include <stdint.h>
5
6 #define SATA_REG_FIS_D2H 0x34
7 #define SATA_REG_FIS_H2D 0x27
8 #define SATA_REG_FIS_COMMAND 0x80
9 #define SATA_LBA_COMPONENT(lba, offset) ((((lba_lo) >> (offset)) & 0xff))
10
11 struct sata_fis_head
12 {
13     uint8_t type;
14     uint8_t options;
15     uint8_t status_cmd;
16     uint8_t feat_err;
17 } __HBA_PACKED__;
18
19 struct sata_reg_fis
20 {
21     struct sata_fis_head head;
22
23     uint8_t lba0, lba8, lba16;
24     uint8_t dev;
25     uint8_t lba24, lba32, lba40;
26     uint8_t reserved1;
27
28     uint16_t count;
29
30     uint8_t reserved[6];
31 } __HBA_PACKED__;
32
33 struct sata_data_fis
34 {
35     struct sata_fis_head head;
36
37     uint8_t data[0];
38 } __HBA_PACKED__;
39
40 void
41 sata_create_fis(struct sata_reg_fis* cmd_fis,
42                 uint8_t command,
43                 uint32_t lba_lo,
44                 uint32_t lba_hi,
45                 uint16_t sector_count);
46
47 #endif /* __LUNAIX_SATA_H */