source: soft/giet_vm/giet_drivers/hba_driver.h @ 297

Last change on this file since 297 was 295, checked in by alain, 11 years ago

Introducing a major release, to suppoort the tsar_generic_leti platform
and the various (external or internal) peripherals configurations.
The map.xml format has been modified, in order to support the new
vci_iopic componentand a new policy for peripherals initialisation.
The IRQs are nom described in the XICU and IOPIC components
(and not anymore in the processors).
To enforce this major change, the map.xml file signature changed:
The signature value must be: 0xDACE2014

This new release has been tested on the tsar_generic_leti platform
for the following mappings:

  • 4c_4p_sort_leti
  • 4c_4p_sort_leti_ext
  • 4c_4p_transpose_leti
  • 4c_4p_transpose_leti_ext
  • 4c_1p_four_leti_ext
File size: 4.5 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////
2// File     : hba_driver.h
3// Date     : 01/11/2013
4// Author   : alain greiner and zhang
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
7
8#ifndef _GIET_HBA_DRIVERS_H_
9#define _GIET_HBA_DRIVERS_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// Data structures for command table array
28///////////////////////////////////////////////////////////////////////////////////
29
30typedef struct hba_cmd_header_s // size = 128 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        res[29];    // reserved
49
50} hba_cmd_header_t;
51
52typedef struct hba_cmd_entry_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_entry_t;
60
61typedef struct hba_cmd_table_s  // size = 4096 bytes
62{
63
64    hba_cmd_header_t   header;     // contains LBA
65    hba_cmd_entry_t    entry[248]; // 248 buffers max
66
67} hba_cmd_table_t;
68
69///////////////////////////////////////////////////////////////////////////////////
70// Data structures for command list array
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 Table base address 32 LSB bits
84    unsigned int        ctbau;          // Command Table base address 32 MSB bits
85
86} hba_cmd_desc_t;
87
88typedef struct hba_cmd_list_s  // size = 512 bytes
89{
90    // 32 command descriptors
91    hba_cmd_desc_t desc[32];
92
93} hba_cmd_list_t;
94
95///////////////////////////////////////////////////////////////////////////////////
96// HBA device access functions  (vci_hba)
97///////////////////////////////////////////////////////////////////////////////////
98
99extern unsigned int _hba_init ( unsigned int channel ); 
100
101extern unsigned int _hba_write( unsigned int channel,     // channel index
102                                unsigned int mode,        // BOOT / KERNEL / USER
103                                unsigned int lba,         // logic bloc address on device
104                                unsigned long long paddr, // memory buffer base address
105                                unsigned int count );     // number of blocs
106
107extern unsigned int _hba_read ( unsigned int channel,     // channel index
108                                unsigned int mode,        // BOOT / KERNEL / USER
109                                unsigned int lba,         // logic bloc address on device
110                                unsigned long long paddr, // memory buffer base address
111                                unsigned int count );     // number of blocks
112
113extern unsigned int _hba_get_status( unsigned int   channel );
114
115extern unsigned int _hba_get_block_size ();
116
117
118#endif
119
120// Local Variables:
121// tab-width: 4
122// c-basic-offset: 4
123// c-file-offsets:((innamespace . 0)(inline-open . 0))
124// indent-tabs-mode: nil
125// End:
126// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
127
Note: See TracBrowser for help on using the repository browser.