📄 repository.c
字号:
return result;}int ps3_repository_read_stor_dev_port(unsigned int bus_index, unsigned int dev_index, u64 *port){ return read_node(PS3_LPAR_ID_PME, make_first_field("bus", bus_index), make_field("dev", dev_index), make_field("port", 0), 0, port, 0);}int ps3_repository_read_stor_dev_blk_size(unsigned int bus_index, unsigned int dev_index, u64 *blk_size){ return read_node(PS3_LPAR_ID_PME, make_first_field("bus", bus_index), make_field("dev", dev_index), make_field("blk_size", 0), 0, blk_size, 0);}int ps3_repository_read_stor_dev_num_blocks(unsigned int bus_index, unsigned int dev_index, u64 *num_blocks){ return read_node(PS3_LPAR_ID_PME, make_first_field("bus", bus_index), make_field("dev", dev_index), make_field("n_blocks", 0), 0, num_blocks, 0);}int ps3_repository_read_stor_dev_num_regions(unsigned int bus_index, unsigned int dev_index, unsigned int *num_regions){ int result; u64 v1; result = read_node(PS3_LPAR_ID_PME, make_first_field("bus", bus_index), make_field("dev", dev_index), make_field("n_regs", 0), 0, &v1, 0); *num_regions = v1; return result;}int ps3_repository_read_stor_dev_region_id(unsigned int bus_index, unsigned int dev_index, unsigned int region_index, unsigned int *region_id){ int result; u64 v1; result = read_node(PS3_LPAR_ID_PME, make_first_field("bus", bus_index), make_field("dev", dev_index), make_field("region", region_index), make_field("id", 0), &v1, 0); *region_id = v1; return result;}int ps3_repository_read_stor_dev_region_size(unsigned int bus_index, unsigned int dev_index, unsigned int region_index, u64 *region_size){ return read_node(PS3_LPAR_ID_PME, make_first_field("bus", bus_index), make_field("dev", dev_index), make_field("region", region_index), make_field("size", 0), region_size, 0);}int ps3_repository_read_stor_dev_region_start(unsigned int bus_index, unsigned int dev_index, unsigned int region_index, u64 *region_start){ return read_node(PS3_LPAR_ID_PME, make_first_field("bus", bus_index), make_field("dev", dev_index), make_field("region", region_index), make_field("start", 0), region_start, 0);}int ps3_repository_read_stor_dev_info(unsigned int bus_index, unsigned int dev_index, u64 *port, u64 *blk_size, u64 *num_blocks, unsigned int *num_regions){ int result; result = ps3_repository_read_stor_dev_port(bus_index, dev_index, port); if (result) return result; result = ps3_repository_read_stor_dev_blk_size(bus_index, dev_index, blk_size); if (result) return result; result = ps3_repository_read_stor_dev_num_blocks(bus_index, dev_index, num_blocks); if (result) return result; result = ps3_repository_read_stor_dev_num_regions(bus_index, dev_index, num_regions); return result;}int ps3_repository_read_stor_dev_region(unsigned int bus_index, unsigned int dev_index, unsigned int region_index, unsigned int *region_id, u64 *region_start, u64 *region_size){ int result; result = ps3_repository_read_stor_dev_region_id(bus_index, dev_index, region_index, region_id); if (result) return result; result = ps3_repository_read_stor_dev_region_start(bus_index, dev_index, region_index, region_start); if (result) return result; result = ps3_repository_read_stor_dev_region_size(bus_index, dev_index, region_index, region_size); return result;}int ps3_repository_read_rm_size(unsigned int ppe_id, u64 *rm_size){ return read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("pu", 0), ppe_id, make_field("rm_size", 0), rm_size, 0);}int ps3_repository_read_region_total(u64 *region_total){ return read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("rgntotal", 0), 0, 0, region_total, 0);}/** * ps3_repository_read_mm_info - Read mm info for single pu system. * @rm_base: Real mode memory base address. * @rm_size: Real mode memory size. * @region_total: Maximum memory region size. */int ps3_repository_read_mm_info(u64 *rm_base, u64 *rm_size, u64 *region_total){ int result; u64 ppe_id; lv1_get_logical_ppe_id(&ppe_id); *rm_base = 0; result = ps3_repository_read_rm_size(ppe_id, rm_size); return result ? result : ps3_repository_read_region_total(region_total);}/** * ps3_repository_read_num_spu_reserved - Number of physical spus reserved. * @num_spu: Number of physical spus. */int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved){ int result; u64 v1; result = read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("spun", 0), 0, 0, &v1, 0); *num_spu_reserved = v1; return result;}/** * ps3_repository_read_num_spu_resource_id - Number of spu resource reservations. * @num_resource_id: Number of spu resource ids. */int ps3_repository_read_num_spu_resource_id(unsigned int *num_resource_id){ int result; u64 v1; result = read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("spursvn", 0), 0, 0, &v1, 0); *num_resource_id = v1; return result;}/** * ps3_repository_read_spu_resource_id - spu resource reservation id value. * @res_index: Resource reservation index. * @resource_type: Resource reservation type. * @resource_id: Resource reservation id. */int ps3_repository_read_spu_resource_id(unsigned int res_index, enum ps3_spu_resource_type* resource_type, unsigned int *resource_id){ int result; u64 v1; u64 v2; result = read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("spursv", 0), res_index, 0, &v1, &v2); *resource_type = v1; *resource_id = v2; return result;}int ps3_repository_read_boot_dat_address(u64 *address){ return read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("boot_dat", 0), make_field("address", 0), 0, address, 0);}int ps3_repository_read_boot_dat_size(unsigned int *size){ int result; u64 v1; result = read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("boot_dat", 0), make_field("size", 0), 0, &v1, 0); *size = v1; return result;}int ps3_repository_read_vuart_av_port(unsigned int *port){ int result; u64 v1; result = read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("vir_uart", 0), make_field("port", 0), make_field("avset", 0), &v1, 0); *port = v1; return result;}int ps3_repository_read_vuart_sysmgr_port(unsigned int *port){ int result; u64 v1; result = read_node(PS3_LPAR_ID_CURRENT, make_first_field("bi", 0), make_field("vir_uart", 0), make_field("port", 0), make_field("sysmgr", 0), &v1, 0); *port = v1; return result;}/** * ps3_repository_read_boot_dat_info - Get address and size of cell_ext_os_area. * address: lpar address of cell_ext_os_area * @size: size of cell_ext_os_area */int ps3_repository_read_boot_dat_info(u64 *lpar_addr, unsigned int *size){ int result; *size = 0; result = ps3_repository_read_boot_dat_address(lpar_addr); return result ? result : ps3_repository_read_boot_dat_size(size);}int ps3_repository_read_num_be(unsigned int *num_be){ int result; u64 v1; result = read_node(PS3_LPAR_ID_PME, make_first_field("ben", 0), 0, 0, 0, &v1, 0); *num_be = v1; return result;}int ps3_repository_read_be_node_id(unsigned int be_index, u64 *node_id){ return read_node(PS3_LPAR_ID_PME, make_first_field("be", be_index), 0, 0, 0, node_id, 0);}int ps3_repository_read_tb_freq(u64 node_id, u64 *tb_freq){ return read_node(PS3_LPAR_ID_PME, make_first_field("be", 0), node_id, make_field("clock", 0), 0, tb_freq, 0);}int ps3_repository_read_be_tb_freq(unsigned int be_index, u64 *tb_freq){ int result; u64 node_id; *tb_freq = 0; result = ps3_repository_read_be_node_id(0, &node_id); return result ? result : ps3_repository_read_tb_freq(node_id, tb_freq);}#if defined(DEBUG)int ps3_repository_dump_resource_info(const struct ps3_repository_device *repo){ int result = 0; unsigned int res_index; pr_debug(" -> %s:%d: (%u:%u)\n", __func__, __LINE__, repo->bus_index, repo->dev_index); for (res_index = 0; res_index < 10; res_index++) { enum ps3_interrupt_type intr_type; unsigned int interrupt_id; result = ps3_repository_read_dev_intr(repo->bus_index, repo->dev_index, res_index, &intr_type, &interrupt_id); if (result) { if (result != LV1_NO_ENTRY) pr_debug("%s:%d ps3_repository_read_dev_intr" " (%u:%u) failed\n", __func__, __LINE__, repo->bus_index, repo->dev_index); break; } pr_debug("%s:%d (%u:%u) intr_type %u, interrupt_id %u\n", __func__, __LINE__, repo->bus_index, repo->dev_index, intr_type, interrupt_id); } for (res_index = 0; res_index < 10; res_index++) { enum ps3_reg_type reg_type; u64 bus_addr; u64 len; result = ps3_repository_read_dev_reg(repo->bus_index, repo->dev_index, res_index, ®_type, &bus_addr, &len); if (result) { if (result != LV1_NO_ENTRY) pr_debug("%s:%d ps3_repository_read_dev_reg" " (%u:%u) failed\n", __func__, __LINE__, repo->bus_index, repo->dev_index); break; } pr_debug("%s:%d (%u:%u) reg_type %u, bus_addr %lxh, len %lxh\n", __func__, __LINE__, repo->bus_index, repo->dev_index, reg_type, bus_addr, len); } pr_debug(" <- %s:%d\n", __func__, __LINE__); return result;}static int dump_stor_dev_info(struct ps3_repository_device *repo){ int result = 0; unsigned int num_regions, region_index; u64 port, blk_size, num_blocks; pr_debug(" -> %s:%d: (%u:%u)\n", __func__, __LINE__, repo->bus_index, repo->dev_index); result = ps3_repository_read_stor_dev_info(repo->bus_index, repo->dev_index, &port, &blk_size, &num_blocks, &num_regions); if (result) { pr_debug("%s:%d ps3_repository_read_stor_dev_info" " (%u:%u) failed\n", __func__, __LINE__, repo->bus_index, repo->dev_index); goto out; } pr_debug("%s:%d (%u:%u): port %lu, blk_size %lu, num_blocks " "%lu, num_regions %u\n", __func__, __LINE__, repo->bus_index, repo->dev_index, port, blk_size, num_blocks, num_regions); for (region_index = 0; region_index < num_regions; region_index++) { unsigned int region_id; u64 region_start, region_size; result = ps3_repository_read_stor_dev_region(repo->bus_index, repo->dev_index, region_index, ®ion_id, ®ion_start, ®ion_size); if (result) { pr_debug("%s:%d ps3_repository_read_stor_dev_region" " (%u:%u) failed\n", __func__, __LINE__, repo->bus_index, repo->dev_index); break; } pr_debug("%s:%d (%u:%u) region_id %u, start %lxh, size %lxh\n", __func__, __LINE__, repo->bus_index, repo->dev_index, region_id, region_start, region_size); }out: pr_debug(" <- %s:%d\n", __func__, __LINE__); return result;}static int dump_device_info(struct ps3_repository_device *repo, unsigned int num_dev){ int result = 0; pr_debug(" -> %s:%d: bus_%u\n", __func__, __LINE__, repo->bus_index); for (repo->dev_index = 0; repo->dev_index < num_dev; repo->dev_index++) { result = ps3_repository_read_dev_type(repo->bus_index, repo->dev_index, &repo->dev_type); if (result) { pr_debug("%s:%d ps3_repository_read_dev_type" " (%u:%u) failed\n", __func__, __LINE__, repo->bus_index, repo->dev_index); break; } result = ps3_repository_read_dev_id(repo->bus_index, repo->dev_index, &repo->dev_id); if (result) { pr_debug("%s:%d ps3_repository_read_dev_id" " (%u:%u) failed\n", __func__, __LINE__, repo->bus_index, repo->dev_index); continue; } pr_debug("%s:%d (%u:%u): dev_type %u, dev_id %u\n", __func__, __LINE__, repo->bus_index, repo->dev_index, repo->dev_type, repo->dev_id); ps3_repository_dump_resource_info(repo); if (repo->bus_type == PS3_BUS_TYPE_STORAGE) dump_stor_dev_info(repo); } pr_debug(" <- %s:%d\n", __func__, __LINE__); return result;}int ps3_repository_dump_bus_info(void){ int result = 0; struct ps3_repository_device repo; pr_debug(" -> %s:%d\n", __func__, __LINE__); memset(&repo, 0, sizeof(repo)); for (repo.bus_index = 0; repo.bus_index < 10; repo.bus_index++) { unsigned int num_dev; result = ps3_repository_read_bus_type(repo.bus_index, &repo.bus_type); if (result) { pr_debug("%s:%d read_bus_type(%u) failed\n", __func__, __LINE__, repo.bus_index); break; } result = ps3_repository_read_bus_id(repo.bus_index, &repo.bus_id); if (result) { pr_debug("%s:%d read_bus_id(%u) failed\n", __func__, __LINE__, repo.bus_index); continue; } if (repo.bus_index != repo.bus_id) pr_debug("%s:%d bus_index != bus_id\n", __func__, __LINE__); result = ps3_repository_read_bus_num_dev(repo.bus_index, &num_dev); if (result) { pr_debug("%s:%d read_bus_num_dev(%u) failed\n", __func__, __LINE__, repo.bus_index); continue; } pr_debug("%s:%d bus_%u: bus_type %u, bus_id %u, num_dev %u\n", __func__, __LINE__, repo.bus_index, repo.bus_type, repo.bus_id, num_dev); dump_device_info(&repo, num_dev); } pr_debug(" <- %s:%d\n", __func__, __LINE__); return result;}#endif /* defined(DEBUG) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -