Lines Matching +full:x +full:- +full:rp

1 // SPDX-License-Identifier: GPL-2.0
7 * Mostly rewritten by David Huggins-Daines, C. Scott Ananian,
53 little-endian machine. Again, stranger things have happened)
81 len--; in nubus_get_rom()
93 p--; in nubus_rewind()
95 len--; in nubus_rewind()
108 len--; in nubus_advance()
120 nubus_rewind(ptr, -len, map); in nubus_move()
128 /* Each sResource entry consists of a 1-byte ID and a 3-byte data
130 have to expand it from a 24-bit signed number to a 32-bit signed
151 unsigned char *p = nd->base; in nubus_dirptr()
155 nubus_move(&p, nubus_expand32(nd->data), nd->mask); in nubus_dirptr()
170 *t++ = nubus_get_rom(&p, 1, dirent->mask); in nubus_get_rsrc_mem()
171 len--; in nubus_get_rsrc_mem()
183 unsigned char c = nubus_get_rom(&p, 1, dirent->mask); in nubus_get_rsrc_str()
188 len--; in nubus_get_rsrc_str()
192 return t - dest; in nubus_get_rsrc_str()
210 dirent->mask); in nubus_seq_write_rsrc_mem()
212 len -= buf_size; in nubus_seq_write_rsrc_mem()
215 while (len--) in nubus_seq_write_rsrc_mem()
216 seq_putc(m, nubus_get_rom(&p, 1, dirent->mask)); in nubus_seq_write_rsrc_mem()
222 dir->ptr = dir->base = board->directory; in nubus_get_root_dir()
223 dir->done = 0; in nubus_get_root_dir()
224 dir->mask = board->lanes; in nubus_get_root_dir()
232 dir->ptr = dir->base = fres->directory; in nubus_get_func_dir()
233 dir->done = 0; in nubus_get_func_dir()
234 dir->mask = fres->board->lanes; in nubus_get_func_dir()
244 dir->ptr = dir->base = board->directory; in nubus_get_board_dir()
245 dir->done = 0; in nubus_get_board_dir()
246 dir->mask = board->lanes; in nubus_get_board_dir()
250 if (nubus_readdir(dir, &ent) == -1) in nubus_get_board_dir()
251 return -1; in nubus_get_board_dir()
252 if (nubus_get_subdir(&ent, dir) == -1) in nubus_get_board_dir()
253 return -1; in nubus_get_board_dir()
261 dir->ptr = dir->base = nubus_dirptr(ent); in nubus_get_subdir()
262 dir->done = 0; in nubus_get_subdir()
263 dir->mask = ent->mask; in nubus_get_subdir()
272 if (nd->done) in nubus_readdir()
273 return -1; in nubus_readdir()
276 ent->base = nd->ptr; in nubus_readdir()
278 /* This moves nd->ptr forward */ in nubus_readdir()
279 resid = nubus_get_rom(&nd->ptr, 4, nd->mask); in nubus_readdir()
284 nd->done = 1; in nubus_readdir()
285 return -1; in nubus_readdir()
289 ent->type = resid >> 24; in nubus_readdir()
291 ent->data = resid & 0xffffff; in nubus_readdir()
292 ent->mask = nd->mask; in nubus_readdir()
299 dir->ptr = dir->base; in nubus_rewinddir()
300 dir->done = 0; in nubus_rewinddir()
316 if (list_is_last(&from->list, &nubus_func_rsrcs)) in nubus_next_rsrc_or_null()
326 while (nubus_readdir(dir, ent) != -1) { in nubus_find_rsrc()
327 if (ent->type == rsrc_type) in nubus_find_rsrc()
330 return -1; in nubus_find_rsrc()
334 /* Initialization functions - decide which slots contain stuff worth
348 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_block_rsrc_dir()
352 pr_debug(" block (0x%x), size %d\n", ent.type, size); in nubus_get_block_rsrc_dir()
368 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_display_vidmode()
376 pr_debug(" block (0x%x), size %d\n", ent.type, in nubus_get_display_vidmode()
382 pr_debug(" unknown resource 0x%02x, data 0x%06x\n", in nubus_get_display_vidmode()
394 switch (ent->type) { in nubus_get_display_resource()
396 pr_debug(" gamma directory offset: 0x%06x\n", ent->data); in nubus_get_display_resource()
397 nubus_get_block_rsrc_dir(fres->board, procdir, ent); in nubus_get_display_resource()
400 pr_debug(" mode 0x%02x info offset: 0x%06x\n", in nubus_get_display_resource()
401 ent->type, ent->data); in nubus_get_display_resource()
402 nubus_get_display_vidmode(fres->board, procdir, ent); in nubus_get_display_resource()
405 pr_debug(" unknown resource 0x%02x, data 0x%06x\n", in nubus_get_display_resource()
406 ent->type, ent->data); in nubus_get_display_resource()
416 switch (ent->type) { in nubus_get_network_resource()
427 pr_debug(" unknown resource 0x%02x, data 0x%06x\n", in nubus_get_network_resource()
428 ent->type, ent->data); in nubus_get_network_resource()
438 switch (ent->type) { in nubus_get_cpu_resource()
444 pr_debug(" memory: [ 0x%08lx 0x%08lx ]\n", in nubus_get_cpu_resource()
454 pr_debug(" ROM: [ 0x%08lx 0x%08lx ]\n", in nubus_get_cpu_resource()
460 pr_debug(" unknown resource 0x%02x, data 0x%06x\n", in nubus_get_cpu_resource()
461 ent->type, ent->data); in nubus_get_cpu_resource()
471 switch (fres->category) { in nubus_get_private_resource()
482 pr_debug(" unknown resource 0x%02x, data 0x%06x\n", in nubus_get_private_resource()
483 ent->type, ent->data); in nubus_get_private_resource()
497 pr_debug(" Functional resource 0x%02x:\n", parent->type); in nubus_get_functional_resource()
499 dir.procdir = nubus_proc_add_rsrc_dir(board->procdir, parent, board); in nubus_get_functional_resource()
505 fres->resid = parent->type; in nubus_get_functional_resource()
506 fres->directory = dir.base; in nubus_get_functional_resource()
507 fres->board = board; in nubus_get_functional_resource()
509 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_functional_resource()
516 fres->category = nbtdata[0]; in nubus_get_functional_resource()
517 fres->type = nbtdata[1]; in nubus_get_functional_resource()
518 fres->dr_sw = nbtdata[2]; in nubus_get_functional_resource()
519 fres->dr_hw = nbtdata[3]; in nubus_get_functional_resource()
520 pr_debug(" type: [cat 0x%x type 0x%x sw 0x%x hw 0x%x]\n", in nubus_get_functional_resource()
538 use this :-) */ in nubus_get_functional_resource()
539 pr_debug(" driver directory offset: 0x%06x\n", in nubus_get_functional_resource()
552 pr_debug(" memory offset: 0x%08x\n", base_offset); in nubus_get_functional_resource()
562 pr_debug(" memory length: 0x%08x\n", length); in nubus_get_functional_resource()
567 pr_debug(" flags: 0x%06x\n", ent.data); in nubus_get_functional_resource()
571 pr_debug(" hwdevid: 0x%06x\n", ent.data); in nubus_get_functional_resource()
596 pr_debug(" %08x %08x %08x %08x\n", in nubus_get_icon()
617 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_vendorinfo()
625 pr_debug(" %s: %s\n", vendor_fields[ent.type - 1], name); in nubus_get_vendorinfo()
637 pr_debug(" Board resource 0x%02x:\n", parent->type); in nubus_get_board_resource()
639 dir.procdir = nubus_proc_add_rsrc_dir(board->procdir, parent, board); in nubus_get_board_resource()
641 while (nubus_readdir(&dir, &ent) != -1) { in nubus_get_board_resource()
650 pr_debug(" type: [cat 0x%x type 0x%x sw 0x%x hw 0x%x]\n", in nubus_get_board_resource()
654 pr_err("Slot %X: sResource is not a board resource!\n", in nubus_get_board_resource()
663 len = nubus_get_rsrc_str(board->name, &ent, in nubus_get_board_resource()
664 sizeof(board->name)); in nubus_get_board_resource()
665 pr_debug(" name: %s\n", board->name); in nubus_get_board_resource()
673 pr_debug(" board id: 0x%x\n", ent.data); in nubus_get_board_resource()
677 pr_debug(" primary init offset: 0x%06x\n", ent.data); in nubus_get_board_resource()
684 pr_debug(" flags: 0x%06x\n", ent.data); in nubus_get_board_resource()
688 pr_debug(" hwdevid: 0x%06x\n", ent.data); in nubus_get_board_resource()
692 pr_debug(" secondary init offset: 0x%06x\n", in nubus_get_board_resource()
698 pr_debug(" vidnames directory offset: 0x%06x\n", in nubus_get_board_resource()
704 pr_debug(" video mode parameter directory offset: 0x%06x\n", in nubus_get_board_resource()
709 pr_debug(" unknown resource 0x%02x, data 0x%06x\n", in nubus_get_board_resource()
720 unsigned char *rp; in nubus_add_board() local
724 int prev_resid = -1; in nubus_add_board()
727 rp = nubus_rom_addr(slot); in nubus_add_board()
728 nubus_rewind(&rp, FORMAT_BLOCK_SIZE, bytelanes); in nubus_add_board()
733 board->fblock = rp; in nubus_add_board()
736 pr_debug("Slot %X, format block at 0x%p:\n", slot, rp); in nubus_add_board()
737 pr_debug("%08lx\n", nubus_get_rom(&rp, 4, bytelanes)); in nubus_add_board()
738 pr_debug("%08lx\n", nubus_get_rom(&rp, 4, bytelanes)); in nubus_add_board()
739 pr_debug("%08lx\n", nubus_get_rom(&rp, 4, bytelanes)); in nubus_add_board()
740 pr_debug("%02lx\n", nubus_get_rom(&rp, 1, bytelanes)); in nubus_add_board()
741 pr_debug("%02lx\n", nubus_get_rom(&rp, 1, bytelanes)); in nubus_add_board()
742 pr_debug("%08lx\n", nubus_get_rom(&rp, 4, bytelanes)); in nubus_add_board()
743 pr_debug("%02lx\n", nubus_get_rom(&rp, 1, bytelanes)); in nubus_add_board()
744 pr_debug("%02lx\n", nubus_get_rom(&rp, 1, bytelanes)); in nubus_add_board()
745 rp = board->fblock; in nubus_add_board()
747 board->slot = slot; in nubus_add_board()
748 board->slot_addr = (unsigned long)nubus_slot_addr(slot); in nubus_add_board()
749 board->doffset = nubus_get_rom(&rp, 4, bytelanes); in nubus_add_board()
756 board->rom_length = nubus_get_rom(&rp, 4, bytelanes); in nubus_add_board()
757 board->crc = nubus_get_rom(&rp, 4, bytelanes); in nubus_add_board()
758 board->rev = nubus_get_rom(&rp, 1, bytelanes); in nubus_add_board()
759 board->format = nubus_get_rom(&rp, 1, bytelanes); in nubus_add_board()
760 board->lanes = bytelanes; in nubus_add_board()
763 if (!(board->doffset & 0x00FF0000)) in nubus_add_board()
764 pr_warn("Slot %X: Dodgy doffset!\n", slot); in nubus_add_board()
765 dpat = nubus_get_rom(&rp, 4, bytelanes); in nubus_add_board()
767 pr_warn("Slot %X: Wrong test pattern %08lx!\n", slot, dpat); in nubus_add_board()
770 * I wonder how the CRC is meant to work - in nubus_add_board()
777 board->directory = board->fblock; in nubus_add_board()
778 nubus_move(&board->directory, nubus_expand32(board->doffset), in nubus_add_board()
779 board->lanes); in nubus_add_board()
784 pr_debug("Slot %X resources:\n", slot); in nubus_add_board()
792 if (nubus_readdir(&dir, &ent) == -1) { in nubus_add_board()
794 pr_err("Slot %X: Board resource not found!\n", slot); in nubus_add_board()
800 pr_warn("Slot %X: Board resource ID is invalid!\n", slot); in nubus_add_board()
802 board->procdir = nubus_proc_add_board(board); in nubus_add_board()
806 while (nubus_readdir(&dir, &ent) != -1) { in nubus_add_board()
816 if (fres->resid <= prev_resid) { in nubus_add_board()
820 prev_resid = fres->resid; in nubus_add_board()
822 list_add_tail(&fres->list, &nubus_func_rsrcs); in nubus_add_board()
826 put_device(&board->dev); in nubus_add_board()
832 unsigned char *rp; in nubus_probe_slot() local
835 rp = nubus_rom_addr(slot); in nubus_probe_slot()
836 for (i = 4; i; i--) { in nubus_probe_slot()
837 rp--; in nubus_probe_slot()
838 if (!hwreg_present(rp)) in nubus_probe_slot()
841 dp = *rp; in nubus_probe_slot()
850 if (not_useful(rp, dp)) in nubus_probe_slot()