6 #include <l4/drivers-frst/transfer.h>
35 unsigned long sz_page; // bytes
36 unsigned long sz_spare; // bytes
37 unsigned long sz_chip; // MiB
38 unsigned long sz_erase; // bytes
39 unsigned long options;
48 extern Dev_desc _dev_ids[];
49 extern Mfr_desc _mfr_ids[];
53 Opt_no_autoincr = 0x001,
54 Opt_buswidth_16 = 0x002,
55 Opt_no_padding = 0x004,
59 Opt_4page_array = 0x040,
60 /* Chip does not require ready check on read. True
61 * for all large page devices, as they do not support autoincrement.*/
62 Opt_no_readrdy = 0x100,
63 Opt_no_subpage_write = 0x200,
80 Nand_chip(Nand_ctrl *ctrl, Dev_desc *dev, Mfr_desc *mfr, int ext_id = 0);
82 State state() {return _state; }
83 void set_state(State state) { _state = state; }
84 void set_state(State state, Op *op)
98 void add_options(int options)
99 { _options |= options; }
101 int page_shift() { return ffs(_sz_write) - 1; }
102 int page_mask() { return (sz_chip() >> page_shift()) - 1; }
103 int erase_shift() { return ffs(_sz_erase) - 1; }
104 int erase_mask() { return (sz_chip() >> erase_shift()) - 1; }
133 // standard device commands
147 // large page device commands
148 Cmd_readstart = 0x30,
149 Cmd_rndoutstart = 0xe0,
150 Cmd_cachedprog = 0x15,
157 Status_fail_n1 = 0x02,
158 Status_true_ready = 0x20,
166 int read(Read_op *op);
167 int write(Write_op *op);
168 int erase(Erase_op *op);
170 int done_read(Read_op *op);
171 int done_write(Write_op *op);
172 int done_erase(Erase_op *op);
174 virtual int handle_irq() = 0;
177 int scan(int maxchips);
179 virtual void add(Nand_chip *chip) = 0;
180 virtual Nand_chip *select(loff_t addr) = 0;
182 virtual void wr_cmd(u8 c) = 0;
183 virtual void wr_adr(u8 a) = 0;
184 virtual void wr_dat(u8 d) = 0;
186 bool aligned(u32 addr) const
187 { return !(addr & (sz_write - 1)); }
189 virtual u8 rd_dat() = 0;
190 virtual void rd_dat(const u8 *buf, unsigned len) = 0;
191 virtual void wr_dat(const u8 *buf, unsigned len) = 0;
195 virtual int get_id(char id[4]);