Lines Matching +full:rom +full:- +full:addr

1 // SPDX-License-Identifier: GPL-2.0
7 * Mostly rewritten by David Huggins-Daines, C. Scott Ananian,
46 The card ROM may appear on any or all bytes of each long word in
49 the top of the MacOS ROM) tells us which bytelanes, i.e. which byte
52 A map of 0x0f, as found in the MacOS ROM, means that all bytelanes
59 part of the card ROM. (We hope to never encounter NuBus on a
60 little-endian machine. Again, stranger things have happened)
88 len--; in nubus_get_rom()
100 p--; in nubus_rewind()
102 len--; in nubus_rewind()
115 len--; in nubus_advance()
127 nubus_rewind(ptr, -len, map); in nubus_move()
135 /* Each sResource entry consists of a 1-byte ID and a 3-byte data
137 have to expand it from a 24-bit signed number to a 32-bit signed
158 unsigned char *p = nd->base; in nubus_dirptr()
162 nubus_move(&p, nubus_expand32(nd->data), nd->mask); in nubus_dirptr()
168 pointed to with offsets) out of the card ROM. */
177 *t++ = nubus_get_rom(&p, 1, dirent->mask); in nubus_get_rsrc_mem()
178 len--; in nubus_get_rsrc_mem()
190 unsigned char c = nubus_get_rom(&p, 1, dirent->mask); in nubus_get_rsrc_str()
195 len--; in nubus_get_rsrc_str()
199 return t - dest; in nubus_get_rsrc_str()
217 dirent->mask); in nubus_seq_write_rsrc_mem()
219 len -= buf_size; in nubus_seq_write_rsrc_mem()
222 while (len--) in nubus_seq_write_rsrc_mem()
223 seq_putc(m, nubus_get_rom(&p, 1, dirent->mask)); in nubus_seq_write_rsrc_mem()
229 dir->ptr = dir->base = board->directory; in nubus_get_root_dir()
230 dir->done = 0; in nubus_get_root_dir()
231 dir->mask = board->lanes; in nubus_get_root_dir()
239 dir->ptr = dir->base = fres->directory; in nubus_get_func_dir()
240 dir->done = 0; in nubus_get_func_dir()
241 dir->mask = fres->board->lanes; in nubus_get_func_dir()
251 dir->ptr = dir->base = board->directory; in nubus_get_board_dir()
252 dir->done = 0; in nubus_get_board_dir()
253 dir->mask = board->lanes; in nubus_get_board_dir()
257 if (nubus_readdir(dir, &ent) == -1) in nubus_get_board_dir()
258 return -1; in nubus_get_board_dir()
259 if (nubus_get_subdir(&ent, dir) == -1) in nubus_get_board_dir()
260 return -1; in nubus_get_board_dir()
268 dir->ptr = dir->base = nubus_dirptr(ent); in nubus_get_subdir()
269 dir->done = 0; in nubus_get_subdir()
270 dir->mask = ent->mask; in nubus_get_subdir()
279 if (nd->done) in nubus_readdir()
280 return -1; in nubus_readdir()
283 ent->base = nd->ptr; in nubus_readdir()
285 /* This moves nd->ptr forward */ in nubus_readdir()
286 resid = nubus_get_rom(&nd->ptr, 4, nd->mask); in nubus_readdir()
291 nd->done = 1; in nubus_readdir()
292 return -1; in nubus_readdir()
296 ent->type = resid >> 24; in nubus_readdir()
298 ent->data = resid & 0xffffff; in nubus_readdir()
299 ent->mask = nd->mask; in nubus_readdir()
306 dir->ptr = dir->base; in nubus_rewinddir()
307 dir->done = 0; in nubus_rewinddir()
323 if (list_is_last(&from->list, &nubus_func_rsrcs)) in nubus_next_rsrc_or_null()
333 while (nubus_readdir(dir, ent) != -1) { in nubus_find_rsrc()
334 if (ent->type == rsrc_type) in nubus_find_rsrc()
337 return -1; in nubus_find_rsrc()
341 /* Initialization functions - decide which slots contain stuff worth
355 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_block_rsrc_dir()
375 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_display_vidmode()
401 switch (ent->type) { in nubus_get_display_resource()
403 pr_debug(" gamma directory offset: 0x%06x\n", ent->data); in nubus_get_display_resource()
404 nubus_get_block_rsrc_dir(fres->board, procdir, ent); in nubus_get_display_resource()
408 ent->type, ent->data); in nubus_get_display_resource()
409 nubus_get_display_vidmode(fres->board, procdir, ent); in nubus_get_display_resource()
413 ent->type, ent->data); in nubus_get_display_resource()
423 switch (ent->type) { in nubus_get_network_resource()
426 char addr[6]; in nubus_get_network_resource() local
428 nubus_get_rsrc_mem(addr, ent, 6); in nubus_get_network_resource()
429 pr_debug(" MAC address: %pM\n", addr); in nubus_get_network_resource()
435 ent->type, ent->data); in nubus_get_network_resource()
445 switch (ent->type) { in nubus_get_cpu_resource()
461 pr_debug(" ROM: [ 0x%08lx 0x%08lx ]\n", in nubus_get_cpu_resource()
468 ent->type, ent->data); in nubus_get_cpu_resource()
478 switch (fres->category) { in nubus_get_private_resource()
490 ent->type, ent->data); in nubus_get_private_resource()
504 pr_debug(" Functional resource 0x%02x:\n", parent->type); in nubus_get_functional_resource()
506 dir.procdir = nubus_proc_add_rsrc_dir(board->procdir, parent, board); in nubus_get_functional_resource()
512 fres->resid = parent->type; in nubus_get_functional_resource()
513 fres->directory = dir.base; in nubus_get_functional_resource()
514 fres->board = board; in nubus_get_functional_resource()
516 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_functional_resource()
523 fres->category = nbtdata[0]; in nubus_get_functional_resource()
524 fres->type = nbtdata[1]; in nubus_get_functional_resource()
525 fres->dr_sw = nbtdata[2]; in nubus_get_functional_resource()
526 fres->dr_hw = nbtdata[3]; in nubus_get_functional_resource()
545 use this :-) */ in nubus_get_functional_resource()
624 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_vendorinfo()
632 pr_debug(" %s: %s\n", vendor_fields[ent.type - 1], name); in nubus_get_vendorinfo()
644 pr_debug(" Board resource 0x%02x:\n", parent->type); in nubus_get_board_resource()
646 dir.procdir = nubus_proc_add_rsrc_dir(board->procdir, parent, board); in nubus_get_board_resource()
648 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_board_resource()
670 len = nubus_get_rsrc_str(board->name, &ent, in nubus_get_board_resource()
671 sizeof(board->name)); in nubus_get_board_resource()
672 pr_debug(" name: %s\n", board->name); in nubus_get_board_resource()
731 int prev_resid = -1; in nubus_add_board()
740 board->fblock = rp; in nubus_add_board()
752 rp = board->fblock; in nubus_add_board()
754 board->slot = slot; in nubus_add_board()
755 board->slot_addr = (unsigned long)nubus_slot_addr(slot); in nubus_add_board()
756 board->doffset = nubus_get_rom(&rp, 4, bytelanes); in nubus_add_board()
758 * ROM. In practice it is the "amount of ROM used to compute in nubus_add_board()
761 * See the Performa 460 ROM, for example. Those Apple "engineers". in nubus_add_board()
763 board->rom_length = nubus_get_rom(&rp, 4, bytelanes); in nubus_add_board()
764 board->crc = nubus_get_rom(&rp, 4, bytelanes); in nubus_add_board()
765 board->rev = nubus_get_rom(&rp, 1, bytelanes); in nubus_add_board()
766 board->format = nubus_get_rom(&rp, 1, bytelanes); in nubus_add_board()
767 board->lanes = bytelanes; in nubus_add_board()
770 if (!(board->doffset & 0x00FF0000)) in nubus_add_board()
777 * I wonder how the CRC is meant to work - in nubus_add_board()
780 * since the initial Macintosh ROM releases skipped the check. in nubus_add_board()
784 board->directory = board->fblock; in nubus_add_board()
785 nubus_move(&board->directory, nubus_expand32(board->doffset), in nubus_add_board()
786 board->lanes); in nubus_add_board()
799 if (nubus_readdir(&dir, &ent) == -1) { in nubus_add_board()
809 board->procdir = nubus_proc_add_board(board); in nubus_add_board()
813 while (nubus_readdir(&dir, &ent) != -1) { in nubus_add_board()
823 if (fres->resid <= prev_resid) { in nubus_add_board()
827 prev_resid = fres->resid; in nubus_add_board()
829 list_add_tail(&fres->list, &nubus_func_rsrcs); in nubus_add_board()
833 put_device(&board->dev); in nubus_add_board()
843 for (i = 4; i; i--) { in nubus_probe_slot()
844 rp--; in nubus_probe_slot()