source: trunk/softs/tsar_boot/drivers/reset_hba.h @ 965

Last change on this file since 965 was 964, checked in by alain, 10 years ago

Introducing HBA driver in the tsar boot-loader.

File size: 3.3 KB
Line 
1/**
2 * \File     : reset_hba.h
3 * \Date     : 01/04/2015
4 * \Author   : alain greiner
5 * \Copyright (c) UPMC-LIP6
6 */
7
8#ifndef _RESET_HBA_H
9#define _RESET_HBA_H
10
11///////////////////////////////////////////////////////////////////////////////////
12// HBA component registers offsets
13///////////////////////////////////////////////////////////////////////////////////
14
15enum SoclibMultiAhciRegisters
16{
17  HBA_PXCLB            = 0,         // command list base address 32 LSB bits
18  HBA_PXCLBU           = 1,         // command list base address 32 MSB bits
19  HBA_PXIS             = 4,         // interrupt status
20  HBA_PXIE             = 5,         // interrupt enable
21  HBA_PXCMD            = 6,         // run
22  HBA_PXCI             = 14,        // command bit-vector     
23  HBA_SPAN             = 0x400,     // 4 Kbytes per channel => 1024 slots
24};
25
26///////////////////////////////////////////////////////////////////////////////////
27// structures for one AHCI command table
28///////////////////////////////////////////////////////////////////////////////////
29
30typedef struct hba_cmd_header_s // size = 16 bytes
31{
32    // WORD 0
33    unsigned int        res0;       // reserved
34 
35    // WORD 1
36    unsigned char           lba0;           // LBA 7:0
37    unsigned char           lba1;           // LBA 15:8
38    unsigned char           lba2;           // LBA 23:16
39    unsigned char           res1;           // reserved
40 
41    // WORD 2
42    unsigned char           lba3;           // LBA 31:24
43    unsigned char           lba4;           // LBA 39:32
44    unsigned char           lba5;           // LBA 47:40
45    unsigned char           res2;           // reserved
46 
47    // WORD 3 to 31
48    unsigned int        res3;       // reserved
49
50} hba_cmd_header_t;
51
52typedef struct hba_cmd_buffer_s // size = 16 bytes
53{
54    unsigned int        dba;        // Buffer base address 32 LSB bits
55    unsigned int        dbau;       // Buffer base address 32 MSB bits
56    unsigned int        res0;       // reserved
57    unsigned int        dbc;        // Buffer byte count
58
59} hba_cmd_buffer_t;
60
61typedef struct hba_cmd_table_s  // one command = header + one buffer
62{
63
64    hba_cmd_header_t   header;      // contains lba value
65    hba_cmd_buffer_t   buffer;      // contains buffer address & size
66
67} hba_cmd_table_t;
68
69///////////////////////////////////////////////////////////////////////////////////
70// structure for one AHCI command descriptor
71///////////////////////////////////////////////////////////////////////////////////
72
73typedef struct hba_cmd_desc_s  // size = 16 bytes
74{
75        // WORD 0
76    unsigned char       flag[2];    // W in bit 6 of flag[0]
77    unsigned char       prdtl[2];       // Number of buffers
78
79    // WORD 1
80    unsigned int        prdbc;          // Number of bytes actually transfered
81
82    // WORD 2, WORD 3
83    unsigned int        ctba;           // Command data base address 32 LSB bits
84    unsigned int        ctbau;          // Command data base address 32 MSB bits
85
86} hba_cmd_desc_t;
87
88///////////////////////////////////////////////////////////////////////////////////
89//              access functions 
90///////////////////////////////////////////////////////////////////////////////////
91
92int reset_hba_init (); 
93
94int reset_hba_read( unsigned int lba, 
95                    void*        buffer, 
96                    unsigned int count );
97#endif
98
99// Local Variables:
100// tab-width: 4
101// c-basic-offset: 4
102// c-file-offsets:((innamespace . 0)(inline-open . 0))
103// indent-tabs-mode: nil
104// End:
105// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
106
Note: See TracBrowser for help on using the repository browser.