]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/dev/nand/nfc_if.m
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / dev / nand / nfc_if.m
1 #-
2 # Copyright (C) 2009-2012 Semihalf
3 # All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 #    notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 #    notice, this list of conditions and the following disclaimer in the
12 #    documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 # SUCH DAMAGE.
25 #
26 # $FreeBSD$
27
28 # NAND controller interface description
29 #
30
31 #include <sys/bus.h>
32 #include <dev/nand/nand.h>
33
34 INTERFACE nfc;
35
36 CODE {
37         static int nfc_default_method(device_t dev)
38         {
39                 return (0);
40         }
41
42         static int nfc_softecc_get(device_t dev, void *buf, int pagesize, 
43             void *ecc, int *needwrite)
44         {
45                 *needwrite = 1;
46                 return (nand_softecc_get(dev, buf, pagesize, ecc));
47         }
48
49         static int nfc_softecc_correct(device_t dev, void *buf, int pagesize,
50             void *readecc, void *calcecc)
51         {
52                 return (nand_softecc_correct(dev, buf, pagesize, readecc,
53                     calcecc));
54         }
55 };
56
57 # Send command to a NAND chip
58 #
59 # Return values:
60 # 0: Success
61 #
62 METHOD int send_command {
63         device_t dev;
64         uint8_t command;
65 };
66
67 # Send address to a NAND chip
68 #
69 # Return values:
70 # 0: Success
71 #
72 METHOD int send_address {
73         device_t dev;
74         uint8_t address;
75 };
76
77 # Read byte
78 #
79 # Return values:
80 # byte read
81 #
82 METHOD uint8_t read_byte {
83         device_t dev;
84 };
85
86 # Write byte
87 #
88 METHOD void write_byte {
89         device_t dev;
90         uint8_t byte;
91 };
92
93 # Read word
94 #
95 # Return values:
96 # word read
97 #
98 METHOD uint16_t read_word {
99         device_t dev;
100 };
101
102 # Write word
103 #
104 METHOD void write_word {
105         device_t dev;
106         uint16_t word;
107 };
108
109 # Read buf
110 #
111 METHOD void read_buf {
112         device_t dev;
113         void *buf;
114         uint32_t len;
115 };
116
117 # Write buf
118 #
119 METHOD void write_buf {
120         device_t dev;
121         void *buf;
122         uint32_t len;
123 };
124
125 # Select CS
126 #
127 METHOD int select_cs {
128         device_t dev;
129         uint8_t cs;
130 };
131
132 # Read ready/busy signal
133 #
134 METHOD int read_rnb {
135         device_t dev;
136 };
137
138 # Start command
139 #
140 # Return values:
141 # 0: Success
142 #
143 METHOD int start_command {
144         device_t dev;
145 } DEFAULT nfc_default_method;
146
147 # Generate ECC or get it from H/W
148 #
149 METHOD int get_ecc {
150         device_t dev;
151         void *buf;
152         int pagesize;
153         void *ecc;
154         int *needwrite;
155 } DEFAULT nfc_softecc_get;
156
157 # Correct ECC
158 #
159 METHOD int correct_ecc {
160         device_t dev;
161         void *buf;
162         int pagesize;
163         void *readecc;
164         void *calcecc;
165 } DEFAULT nfc_softecc_correct;