]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/drivers-frst/nand/src/gpmc.h
update
[l4.git] / l4 / pkg / drivers-frst / nand / src / gpmc.h
1 #pragma once
2
3 #include "nand.h"
4
5
6 class Gpmc : public Nand_ctrl 
7 {
8   enum
9     { Num_cs = 8, };
10
11   struct Reg_cs
12     {
13       u32 config1;
14       u32 config2;
15       u32 config3;
16       u32 config4;
17       u32 config5;
18       u32 config6;
19       u32 config7;
20       volatile u32 nand_cmd;
21       volatile u32 nand_adr;
22       volatile u32 nand_dat;
23     };
24
25   struct Reg
26     {
27       u8  res1[0x10];
28       u32 sysconfig;              
29       u8  res2[0x04];
30       u32 irqstatus;              
31       u32 irqenable;      
32       u8  res3[0x20];
33       u8  timeout_control;        
34       u8  res4[0x0c];
35       u32 config;         
36       u32 status;         
37       u8 res5[0x08];
38       Reg_cs cs[Num_cs];
39     };
40
41 public:
42   Gpmc(addr base_addr);
43
44 protected:
45   void add(Nand_chip *chip);
46   Nand_chip *select(loff_t addr);
47   
48   void wr_cmd(u8 c);
49   void wr_adr(u8 a);
50   void wr_dat(u8 d);
51   u8 rd_dat();
52   void rd_dat(const u8 *buf, unsigned len);
53   void wr_dat(const u8 *buf, unsigned len);
54
55   int handle_irq();
56
57 private:
58   volatile Reg *_reg;
59   Nand_chip *_chips[Num_cs];
60 };