1 /*******************************************************************************
2 *
3 * Module Name: hwpci - Obtain PCI bus, device, and function numbers
4 *
5 ******************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2011, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
275 ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
276 "Input PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X\n",
277 PciId->Segment, PciId->Bus, PciId->Device, PciId->Function));
278
279 BusNumber = PciId->Bus;
280
281 /*
282 * Descend down the namespace tree, collecting PCI device, function,
283 * and bus numbers. BusNumber is only important for PCI bridges.
284 * Algorithm: As we descend the tree, use the last valid PCI device,
285 * function, and bus numbers that are discovered, and assign them
286 * to the PCI ID for the target device.
287 */
288 Info = ListHead;
289 while (Info)
290 {
291 Status = AcpiHwGetPciDeviceInfo (PciId, Info->Device,
292 &BusNumber, &IsBridge);
293 if (ACPI_FAILURE (Status))
294 {
295 return_ACPI_STATUS (Status);
296 }
297
298 Info = Info->Next;
299 }
300
301 ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
302 "Output PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X "
303 "Status %X BusNumber %X IsBridge %X\n",
304 PciId->Segment, PciId->Bus, PciId->Device, PciId->Function,
305 Status, BusNumber, IsBridge));
306
307 return_ACPI_STATUS (AE_OK);
308 }
309
310
311 /*******************************************************************************
312 *
313 * FUNCTION: AcpiHwDeletePciList
314 *
315 * PARAMETERS: ListHead - Device list created by
316 * AcpiHwBuildPciList
317 *
318 * RETURN: None
319 *
320 * DESCRIPTION: Free the entire PCI list.
321 *
322 ******************************************************************************/
323
324 static void
325 AcpiHwDeletePciList (
326 ACPI_PCI_DEVICE *ListHead)
327 {
|
1 /*******************************************************************************
2 *
3 * Module Name: hwpci - Obtain PCI bus, device, and function numbers
4 *
5 ******************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2014, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
275 ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
276 "Input PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X\n",
277 PciId->Segment, PciId->Bus, PciId->Device, PciId->Function));
278
279 BusNumber = PciId->Bus;
280
281 /*
282 * Descend down the namespace tree, collecting PCI device, function,
283 * and bus numbers. BusNumber is only important for PCI bridges.
284 * Algorithm: As we descend the tree, use the last valid PCI device,
285 * function, and bus numbers that are discovered, and assign them
286 * to the PCI ID for the target device.
287 */
288 Info = ListHead;
289 while (Info)
290 {
291 Status = AcpiHwGetPciDeviceInfo (PciId, Info->Device,
292 &BusNumber, &IsBridge);
293 if (ACPI_FAILURE (Status))
294 {
295 return (Status);
296 }
297
298 Info = Info->Next;
299 }
300
301 ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
302 "Output PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X "
303 "Status %X BusNumber %X IsBridge %X\n",
304 PciId->Segment, PciId->Bus, PciId->Device, PciId->Function,
305 Status, BusNumber, IsBridge));
306
307 return (AE_OK);
308 }
309
310
311 /*******************************************************************************
312 *
313 * FUNCTION: AcpiHwDeletePciList
314 *
315 * PARAMETERS: ListHead - Device list created by
316 * AcpiHwBuildPciList
317 *
318 * RETURN: None
319 *
320 * DESCRIPTION: Free the entire PCI list.
321 *
322 ******************************************************************************/
323
324 static void
325 AcpiHwDeletePciList (
326 ACPI_PCI_DEVICE *ListHead)
327 {
|