New upstream version 21.59
Tomasz Buchert
5 years ago
63 | 63 | static void hd_read_mmc(hd_data_t *hd_data); |
64 | 64 | static void hd_read_sdio(hd_data_t *hd_data); |
65 | 65 | static void hd_read_nd(hd_data_t *hd_data); |
66 | static void hd_read_visorbus(hd_data_t *hd_data); | |
66 | 67 | |
67 | 68 | void hd_scan_sysfs_pci(hd_data_t *hd_data) |
68 | 69 | { |
123 | 124 | |
124 | 125 | PROGRESS(15, 0, "nd"); |
125 | 126 | hd_read_nd(hd_data); |
127 | ||
128 | PROGRESS(16, 0, "visorbus"); | |
129 | hd_read_visorbus(hd_data); | |
126 | 130 | } |
127 | 131 | |
128 | 132 | |
2060 | 2064 | free_str_list(sf_bus); |
2061 | 2065 | } |
2062 | 2066 | |
2067 | ||
2068 | /* | |
2069 | * visorbus | |
2070 | */ | |
2071 | void hd_read_visorbus(hd_data_t *hd_data) | |
2072 | { | |
2073 | uint64_t ul0; | |
2074 | hd_t *hd; | |
2075 | str_list_t *sf_bus, *sf_bus_e; | |
2076 | char *sf_dev, *drv, *drv_name; | |
2077 | ||
2078 | sf_bus = read_dir("/sys/bus/visorbus/devices", 'l'); | |
2079 | ||
2080 | if(!sf_bus) { | |
2081 | ADD2LOG("sysfs: no such bus: visorbus\n"); | |
2082 | return; | |
2083 | } | |
2084 | ||
2085 | for(sf_bus_e = sf_bus; sf_bus_e; sf_bus_e = sf_bus_e->next) { | |
2086 | sf_dev = new_str(hd_read_sysfs_link("/sys/bus/visorbus/devices", sf_bus_e->str)); | |
2087 | ||
2088 | ADD2LOG( | |
2089 | " visorbus device: name = %s\n path = %s\n", | |
2090 | sf_bus_e->str, | |
2091 | hd_sysfs_id(sf_dev) | |
2092 | ); | |
2093 | ||
2094 | hd = add_hd_entry(hd_data, __LINE__, 0); | |
2095 | hd->vendor.id = MAKE_ID(TAG_PCI, 0xA0F1); /* Unisys */ | |
2096 | ||
2097 | drv_name = NULL; | |
2098 | drv = new_str(hd_read_sysfs_link(sf_dev, "driver")); | |
2099 | if(drv) { | |
2100 | drv_name = strrchr(drv, '/'); | |
2101 | if(drv_name) { | |
2102 | drv_name++; | |
2103 | ADD2LOG(" driver = \"%s\"\n", drv_name); | |
2104 | ||
2105 | if(!strcmp(drv_name,"visornic")) { | |
2106 | hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0002); | |
2107 | hd->base_class.id = bc_network; | |
2108 | } | |
2109 | else if(!strcmp(drv_name,"visorthba")) { | |
2110 | hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0003); | |
2111 | hd->base_class.id = bc_storage; | |
2112 | } | |
2113 | else { | |
2114 | hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0000); | |
2115 | hd->base_class.id = bc_other; | |
2116 | } | |
2117 | } | |
2118 | } | |
2119 | else { | |
2120 | hd->device.id = MAKE_ID(TAG_SPECIAL, 0x0001); | |
2121 | hd->base_class.id = bc_bridge; | |
2122 | } | |
2123 | ||
2124 | if(hd_attr_uint(get_sysfs_attr_by_path(sf_dev, "device"), &ul0, 0)) { | |
2125 | hd->device.id = MAKE_ID(TAG_SPECIAL, ul0 ); | |
2126 | ADD2LOG(" device = %lu\n", ul0); | |
2127 | } | |
2128 | ||
2129 | hd->sysfs_id = new_str(hd_sysfs_id(sf_dev)); | |
2130 | hd->sysfs_bus_id = new_str(sf_bus_e->str); | |
2131 | if(drv_name) add_str_list(&hd->drivers, drv_name); | |
2132 | ||
2133 | free_mem(sf_dev); | |
2134 | free_mem(drv); | |
2135 | } | |
2136 | ||
2137 | free_str_list(sf_bus); | |
2138 | } | |
2063 | 2139 | /** @} */ |
2064 | 2140 |