* Warning: This function uses a static buffer. Don't call it more than once * from the same print statement! */
| 153 | * from the same print statement! |
| 154 | */ |
| 155 | const char *dev_path(const struct device *dev) |
| 156 | { |
| 157 | static char buffer[DEVICE_PATH_MAX]; |
| 158 | |
| 159 | buffer[0] = '\0'; |
| 160 | if (!dev) { |
| 161 | strcpy(buffer, "<null>"); |
| 162 | } else { |
| 163 | switch (dev->path.type) { |
| 164 | case DEVICE_PATH_NONE: |
| 165 | strcpy(buffer, "NONE"); |
| 166 | break; |
| 167 | case DEVICE_PATH_ROOT: |
| 168 | strcpy(buffer, "Root Device"); |
| 169 | break; |
| 170 | case DEVICE_PATH_PCI: |
| 171 | snprintf(buffer, sizeof(buffer), |
| 172 | "PCI: %02x:%02x:%02x.%01x", |
| 173 | dev->upstream->segment_group, |
| 174 | dev->upstream->secondary, |
| 175 | PCI_SLOT(dev->path.pci.devfn), |
| 176 | PCI_FUNC(dev->path.pci.devfn)); |
| 177 | break; |
| 178 | case DEVICE_PATH_PNP: |
| 179 | snprintf(buffer, sizeof(buffer), "PNP: %04x.%01x", |
| 180 | dev->path.pnp.port, dev->path.pnp.device); |
| 181 | break; |
| 182 | case DEVICE_PATH_I2C: |
| 183 | snprintf(buffer, sizeof(buffer), "I2C: %02x:%02x", |
| 184 | dev->upstream->secondary, |
| 185 | dev->path.i2c.device); |
| 186 | break; |
| 187 | case DEVICE_PATH_APIC: |
| 188 | snprintf(buffer, sizeof(buffer), "APIC: %02x", |
| 189 | dev->path.apic.apic_id); |
| 190 | break; |
| 191 | case DEVICE_PATH_IOAPIC: |
| 192 | snprintf(buffer, sizeof(buffer), "IOAPIC: %02x", |
| 193 | dev->path.ioapic.ioapic_id); |
| 194 | break; |
| 195 | case DEVICE_PATH_DOMAIN: |
| 196 | snprintf(buffer, sizeof(buffer), "DOMAIN: %08x", |
| 197 | dev->path.domain.domain_id); |
| 198 | break; |
| 199 | case DEVICE_PATH_CPU_CLUSTER: |
| 200 | snprintf(buffer, sizeof(buffer), "CPU_CLUSTER: %01x", |
| 201 | dev->path.cpu_cluster.cluster); |
| 202 | break; |
| 203 | case DEVICE_PATH_CPU: |
| 204 | snprintf(buffer, sizeof(buffer), |
| 205 | "CPU: %02x", dev->path.cpu.id); |
| 206 | break; |
| 207 | case DEVICE_PATH_CPU_BUS: |
| 208 | snprintf(buffer, sizeof(buffer), |
| 209 | "CPU_BUS: %02x", dev->path.cpu_bus.id); |
| 210 | break; |
| 211 | case DEVICE_PATH_GENERIC: |
| 212 | snprintf(buffer, sizeof(buffer), |