arch/powerpc/platforms/ps3/repository.c
Source file repositories/reference/linux-study-clean/arch/powerpc/platforms/ps3/repository.c
File Facts
- System
- Linux kernel
- Corpus path
arch/powerpc/platforms/ps3/repository.c- Extension
.c- Size
- 32930 bytes
- Lines
- 1381
- Domain
- Architecture Layer
- Bucket
- arch/powerpc
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
asm/lv1call.hplatform.h
Detected Declarations
enum ps3_vendor_idenum ps3_lpar_idfunction _dump_fieldfunction _dump_node_namefunction _dump_nodefunction zerofunction make_fieldfunction read_nodefunction ps3_repository_read_bus_strfunction ps3_repository_read_bus_idfunction ps3_repository_read_bus_typefunction ps3_repository_read_bus_num_devfunction ps3_repository_read_dev_strfunction ps3_repository_read_dev_idfunction ps3_repository_read_dev_typefunction ps3_repository_read_dev_intrfunction ps3_repository_read_dev_reg_typefunction ps3_repository_read_dev_reg_addrfunction ps3_repository_read_dev_regfunction ps3_repository_find_devicefunction ps3_repository_find_device_by_idfunction ps3_repository_find_devicesfunction ps3_repository_find_busfunction ps3_repository_find_interruptfunction ps3_repository_find_regfunction ps3_repository_read_stor_dev_portfunction ps3_repository_read_stor_dev_blk_sizefunction ps3_repository_read_stor_dev_num_blocksfunction ps3_repository_read_stor_dev_num_regionsfunction ps3_repository_read_stor_dev_region_idfunction ps3_repository_read_stor_dev_region_sizefunction ps3_repository_read_stor_dev_region_startfunction ps3_repository_read_stor_dev_infofunction ps3_repository_read_stor_dev_regionfunction ps3_repository_read_num_pufunction ps3_repository_read_pu_idfunction ps3_repository_read_rm_sizefunction ps3_repository_read_region_totalfunction ps3_repository_read_mm_infofunction ps3_repository_read_highmem_region_countfunction ps3_repository_read_highmem_basefunction ps3_repository_read_highmem_sizefunction ps3_repository_read_highmem_infofunction ps3_repository_read_num_spu_reservedfunction ps3_repository_read_num_spu_resource_idfunction ps3_repository_read_spu_resource_idfunction ps3_repository_read_boot_dat_addressfunction ps3_repository_read_boot_dat_size
Annotated Snippet
if (result) {
pr_devel("%s:%u read_bus_id(%u) failed\n", __func__,
__LINE__, tmp.bus_index);
return result;
}
if (tmp.bus_id == bus_id)
goto found_bus;
pr_devel("%s:%u: skip, bus_id %llu\n", __func__, __LINE__,
tmp.bus_id);
}
pr_devel(" <- %s:%u: bus not found\n", __func__, __LINE__);
return result;
found_bus:
result = ps3_repository_read_bus_type(tmp.bus_index, &tmp.bus_type);
if (result) {
pr_devel("%s:%u read_bus_type(%u) failed\n", __func__,
__LINE__, tmp.bus_index);
return result;
}
result = ps3_repository_read_bus_num_dev(tmp.bus_index, &num_dev);
if (result) {
pr_devel("%s:%u read_bus_num_dev failed\n", __func__,
__LINE__);
return result;
}
for (tmp.dev_index = 0; tmp.dev_index < num_dev; tmp.dev_index++) {
result = ps3_repository_read_dev_id(tmp.bus_index,
tmp.dev_index,
&tmp.dev_id);
if (result) {
pr_devel("%s:%u read_dev_id(%u:%u) failed\n", __func__,
__LINE__, tmp.bus_index, tmp.dev_index);
return result;
}
if (tmp.dev_id == dev_id)
goto found_dev;
pr_devel("%s:%u: skip, dev_id %llu\n", __func__, __LINE__,
tmp.dev_id);
}
pr_devel(" <- %s:%u: dev not found\n", __func__, __LINE__);
return result;
found_dev:
result = ps3_repository_read_dev_type(tmp.bus_index, tmp.dev_index,
&tmp.dev_type);
if (result) {
pr_devel("%s:%u read_dev_type failed\n", __func__, __LINE__);
return result;
}
pr_devel(" <- %s:%u: found: type (%u:%u) index (%u:%u) id (%llu:%llu)\n",
__func__, __LINE__, tmp.bus_type, tmp.dev_type, tmp.bus_index,
tmp.dev_index, tmp.bus_id, tmp.dev_id);
*repo = tmp;
return 0;
}
int __init ps3_repository_find_devices(enum ps3_bus_type bus_type,
int (*callback)(const struct ps3_repository_device *repo))
{
int result = 0;
struct ps3_repository_device repo;
pr_devel(" -> %s:%d: find bus_type %u\n", __func__, __LINE__, bus_type);
repo.bus_type = bus_type;
result = ps3_repository_find_bus(repo.bus_type, 0, &repo.bus_index);
if (result) {
pr_devel(" <- %s:%u: bus not found\n", __func__, __LINE__);
return result;
}
result = ps3_repository_read_bus_id(repo.bus_index, &repo.bus_id);
if (result) {
pr_devel("%s:%d read_bus_id(%u) failed\n", __func__, __LINE__,
repo.bus_index);
return result;
}
for (repo.dev_index = 0; ; repo.dev_index++) {
result = ps3_repository_find_device(&repo);
if (result == -ENODEV) {
result = 0;
Annotation
- Immediate include surface: `asm/lv1call.h`, `platform.h`.
- Detected declarations: `enum ps3_vendor_id`, `enum ps3_lpar_id`, `function _dump_field`, `function _dump_node_name`, `function _dump_node`, `function zero`, `function make_field`, `function read_node`, `function ps3_repository_read_bus_str`, `function ps3_repository_read_bus_id`.
- Atlas domain: Architecture Layer / arch/powerpc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.