MCPcopy Create free account
hub / github.com/F-Stack/f-stack / fdt_localbus_reg_decode

Function fdt_localbus_reg_decode

freebsd/arm/mv/mv_localbus.c:162–238  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

160DRIVER_MODULE(localbus, ofwbus, localbus_driver, localbus_devclass, 0, 0);
161
162static int
163fdt_localbus_reg_decode(phandle_t node, struct localbus_softc *sc,
164 struct localbus_devinfo *di)
165{
166 u_long start, end, count;
167 pcell_t *reg, *regptr;
168 pcell_t addr_cells, size_cells;
169 int tuple_size, tuples;
170 int i, rv, bank;
171
172 if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0)
173 return (ENXIO);
174
175 tuple_size = sizeof(pcell_t) * (addr_cells + size_cells);
176 tuples = OF_getprop_alloc_multi(node, "reg", tuple_size, (void **)&reg);
177 debugf("addr_cells = %d, size_cells = %d\n", addr_cells, size_cells);
178 debugf("tuples = %d, tuple size = %d\n", tuples, tuple_size);
179 if (tuples <= 0)
180 /* No 'reg' property in this node. */
181 return (0);
182
183 regptr = reg;
184 for (i = 0; i < tuples; i++) {
185 bank = fdt_data_get((void *)regptr, 1);
186
187 if (bank >= MV_LOCALBUS_MAX_BANKS) {
188 device_printf(sc->sc_dev, "bank number [%d] out of "
189 "range\n", bank);
190 continue;
191 }
192
193 /*
194 * If device doesn't have virtual to physical mapping don't add
195 * resources
196 */
197 if (!(sc->sc_banks[bank].mapped)) {
198 device_printf(sc->sc_dev, "device [%d]: missing memory "
199 "mapping\n", bank);
200 continue;
201 }
202
203 di->di_bank = bank;
204 regptr += 1;
205
206 /* Get address/size. */
207 rv = fdt_data_to_res(regptr, addr_cells - 1, size_cells, &start,
208 &count);
209 if (rv != 0) {
210 resource_list_free(&di->di_res);
211 goto out;
212 }
213
214 /* Check if enough amount of memory is mapped */
215 if (sc->sc_banks[bank].size < count) {
216 device_printf(sc->sc_dev, "device [%d]: not enough "
217 "memory reserved\n", bank);
218 continue;
219 }

Callers 1

localbus_attachFunction · 0.85

Calls 3

device_printfFunction · 0.85
resource_list_freeFunction · 0.85
resource_list_addFunction · 0.85

Tested by

no test coverage detected