ACK: [PATCH 1/4] lib: add new PCI definitions
Alex Hung
alex.hung at canonical.com
Thu Oct 31 03:00:17 UTC 2013
On 10/25/2013 10:12 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Create common PCI definitions for various fwts tests
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/lib/include/fwts.h | 1 +
> src/lib/include/fwts_pci.h | 186 +++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 187 insertions(+)
> create mode 100644 src/lib/include/fwts_pci.h
>
> diff --git a/src/lib/include/fwts.h b/src/lib/include/fwts.h
> index ba1b312..dc1bccc 100644
> --- a/src/lib/include/fwts.h
> +++ b/src/lib/include/fwts.h
> @@ -79,5 +79,6 @@
> #include "fwts_json.h"
> #include "fwts_ioport.h"
> #include "fwts_release.h"
> +#include "fwts_pci.h"
>
> #endif
> diff --git a/src/lib/include/fwts_pci.h b/src/lib/include/fwts_pci.h
> new file mode 100644
> index 0000000..f006216
> --- /dev/null
> +++ b/src/lib/include/fwts_pci.h
> @@ -0,0 +1,186 @@
> +/*
> + * Copyright (C) 2013 Canonical
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> + *
> + */
> +
> +#ifndef __PCI_H__
> +#define __PCI_H__
> +
> +/*
> + * PCI specific definitions
> + */
> +#define FWTS_PCI_DEV_PATH "/sys/bus/pci/devices"
> +
> +#define FWTS_PCI_CAPABILITIES_LAST_ID (0x00)
> +#define FWTS_PCI_EXPRESS_CAP_ID (0x10)
> +
> +#define FWTS_PCI_CAPABILITIES_NEXT_POINTER (0x01)
> +#define FWTS_PCI_CAPABILITIES_DEV_CTRL (0x08)
> +
> +/* Offsets common on PCI type 0,1,2 config space header */
> +#define FWTS_PCI_CONFIG_VENDOR_ID (0x00)
> +#define FWTS_PCI_CONFIG_DEVICE_ID (0x02)
> +#define FWTS_PCI_CONFIG_COMMAND (0x04)
> +#define FWTS_PCI_CONFIG_STATUS (0x06)
> +#define FWTS_PCI_CONFIG_REVISION_ID (0x08)
> +#define FWTS_PCI_CONFIG_PROG_IF (0x09)
> +#define FWTS_PCI_CONFIG_SUBCLASS (0x0a)
> +#define FWTS_PCI_CONFIG_CLASS_CODE (0x0b)
> +#define FWTS_PCI_CONFIG_CACHE_LINE_SIZE (0x0c)
> +#define FWTS_PCI_CONFIG_LATENCY_TIMER (0x0d)
> +#define FWTS_PCI_CONFIG_HEADER_TYPE (0x0e)
> +#define FWTS_PCI_CONFIG_BIST (0x0f)
> +
> +/* Offsets in PCI Type 0 Non-Bridge config space header */
> +#define FWTS_PCI_CONFIG_TYPE0_BAR0 (0x10)
> +#define FWTS_PCI_CONFIG_TYPE0_BAR1 (0x14)
> +#define FWTS_PCI_CONFIG_TYPE0_BAR2 (0x18)
> +#define FWTS_PCI_CONFIG_TYPE0_BAR3 (0x1c)
> +#define FWTS_PCI_CONFIG_TYPE0_BAR4 (0x20)
> +#define FWTS_PCI_CONFIG_TYPE0_BAR5 (0x24)
> +#define FWTS_PCI_CONFIG_TYPE0_CARDBUS_CIS_POINTER (0x28)
> +#define FWTS_PCI_CONFIG_TYPE0_SUBSYSTEM_VENDOR_ID (0x2c)
> +#define FWTS_PCI_CONFIG_TYPE0_SUBSYSTEM_ID (0x2e)
> +#define FWTS_PCI_CONFIG_TYPE0_EXPENSION_ROM_ADDRESS (0x30)
> +#define FWTS_PCI_CONFIG_TYPE0_CAPABILITIES_POINTER (0x34)
> +#define FWTS_PCI_CONFIG_TYPE0_INTERRUPT_LINE (0x3c)
> +#define FWTS_PCI_CONFIG_TYPE0_INTERRUPT_PIN (0x3d)
> +#define FWTS_PCI_CONFIG_TYPE0_MIN_GRANT (0x3e)
> +#define FWTS_PCI_CONFIG_TYPE0_MAX_LATENCY (0x3f)
> +
> +/* Offsets in PCI Type 1 PCI-to-PCI bridge config space header */
> +#define FWTS_PCI_CONFIG_TYPE1_BAR0 (0x10)
> +#define FWTS_PCI_CONFIG_TYPE1_BAR1 (0x14)
> +#define FWTS_PCI_CONFIG_TYPE1_PRIMARY_BUS_NUMBER (0x18)
> +#define FWTS_PCI_CONFIG_TYPE1_SECONDARY_BUS_NUMBER (0x19)
> +#define FWTS_PCI_CONFIG_TYPE1_SUBORDINATE_BUS_NUMBER (0x1a)
> +#define FWTS_PCI_CONFIG_TYPE1_SECONDARY_LATENCY_TIMER (0x1b)
> +#define FWTS_PCI_CONFIG_TYPE1_IO_BASE (0x1c)
> +#define FWTS_PCI_CONFIG_TYPE1_IO_LIMIT (0x1d)
> +#define FWTS_PCI_CONFIG_TYPE1_SECONDARY_STATUS (0x1e)
> +#define FWTS_PCI_CONFIG_TYPE1_MEMORY_BASE (0x20)
> +#define FWTS_PCI_CONFIG_TYPE1_MEMORY_LIMIT (0x22)
> +#define FWTS_PCI_CONFIG_TYPE1_PREFETCHABLE_MEMORY_BASE (0x24)
> +#define FWTS_PCI_CONFIG_TYPE1_PREFETCHABLE_MEMORY_LIMIT (0x26)
> +#define FWTS_PCI_CONFIG_TYPE1_PREFETCABLE_BASE_UPPER32 (0x28)
> +#define FWTS_PCI_CONFIG_TYPE1_PREFETCABLE_LIMIT_UPPER32 (0x2c)
> +#define FWTS_PCI_CONFIG_TYPE1_IO_BASE_UPPER16 (0x30)
> +#define FWTS_PCI_CONFIG_TYPE1_IO_LIMIT_UPPER16 (0x32)
> +#define FWTS_PCI_CONFIG_TYPE1_CAPABILITY_POINTER (0x34)
> +#define FWTS_PCI_CONFIG_TYPE1_EXPANSION_ROM_ADDRESS (0x38)
> +#define FWTS_PCI_CONFIG_TYPE1_INTERRUPT_LINE (0x3c)
> +#define FWTS_PCI_CONFIG_TYPE1_INTERRUPT_PIN (0x3d)
> +#define FWTS_PCI_CONFIG_TYPE1_BRIDGE_CONTROL (0x3e)
> +
> +/* Offsets in PCI Type 2 PCI-to-CardBus bridge config space header */
> +#define FWTS_PCI_CONFIG_TYPE2_CARDBUS_BASE_ADDRESS (0x10)
> +#define FWTS_PCI_CONFIG_TYPE2_CAPABILITY_POINTER (0x14)
> +#define FWTS_PCI_CONFIG_TYPE2_SECONDARY_STATUS (0x16)
> +#define FWTS_PCI_CONFIG_TYPE2_PCI_BUS_NUMBER (0x18)
> +#define FWTS_PCI_CONFIG_TYPE2_CARDBUS_BUS_NUMBER (0x19)
> +#define FWTS_PCI_CONFIG_TYPE2_SUBORDINATE_BUS_NUMBER (0x1a)
> +#define FWTS_PCI_CONFIG_TYPE2_CARDBUS_LATENCY_TIMER (0x1b)
> +#define FWTS_PCI_CONFIG_TYPE2_MEMORY_BASE_ADDRESS0 (0x1c)
> +#define FWTS_PCI_CONFIG_TYPE2_MEMORY_LIMIT0 (0x20)
> +#define FWTS_PCI_CONFIG_TYPE2_MEMORY_BASE_ADDRESS1 (0x24)
> +#define FWTS_PCI_CONFIG_TYPE2_MEMORY_LIMIT1 (0x28)
> +#define FWTS_PCI_CONFIG_TYPE2_IO_BASE_ADDRESS0 (0x2c)
> +#define FWTS_PCI_CONFIG_TYPE2_IO_BASE_LIMIT0 (0x30)
> +#define FWTS_PCI_CONFIG_TYPE2_IO_BASE_ADDRESS1 (0x34)
> +#define FWTS_PCI_CONFIG_TYPE2_IO_BASE_LIMIT1 (0x38)
> +#define FWTS_PCI_CONFIG_TYPE2_INTERRUPT_LINE (0x3c)
> +#define FWTS_PCI_CONFIG_TYPE2_INTERRUPT_PIN (0x3d)
> +#define FWTS_PCI_CONFIG_TYPE2_BRIDGE_CONTROL (0x3e)
> +#define FWTS_PCI_CONFIG_TYPE2_SUBSYSTEM_DEVICE_ID (0x40)
> +#define FWTS_PCI_CONFIG_TYPE2_SUBSYSTEM_VENDOR_ID (0x42)
> +#define FWTS_PCI_CONFIG_TYPE2_LEGACY_MODE_BASE_ADDRESS (0x44)
> +
> +/* PCI config header types */
> +#define FWTS_PCI_CONFIG_HEADER_TYPE_NON_BRIDGE (0x00)
> +#define FWTS_PCI_CONFIG_HEADER_TYPE_PCI_BRIDGE (0x01)
> +#define FWTS_PCI_CONFIG_HEADER_TYPE_CARDBUS_BRIDGE (0x02)
> +
> +/* PCI config BAR types */
> +#define FWTS_PCI_CONFIG_BAR_MEM (0x00)
> +#define FWTS_PCI_CONFIG_BAR_IO (0x01)
> +#define FWTS_PCI_CONFIG_BAR_PREFETCHABLE (0x08)
> +
> +/* PCI config BAR address types */
> +#define FWTS_PCI_CONFIG_BAR_TYPE_ADDR_32BIT (0x00)
> +#define FWTS_PCI_CONFIG_BAR_TYPE_ADDR_16BIT (0x01)
> +#define FWTS_PCI_CONFIG_BAR_TYPE_ADDR_64BIT (0x02)
> +
> +/* PCI class codes */
> +#define FWTS_PCI_CLASS_CODE_HOST_BRIDGE (0x00)
> +#define FWTS_PCI_CLASS_CODE_MASS_STORAGE_CONTOLLER (0x01)
> +#define FWTS_PCI_CLASS_CODE_NETWORK_CONTROLLER (0x02)
> +#define FWTS_PCI_CLASS_CODE_DISPLAY_CONTROLLER (0x03)
> +#define FWTS_PCI_CLASS_CODE_MULTIMEDIA_CONTROLLER (0x04)
> +#define FWTS_PCI_CLASS_CODE_MEMORY_CONTROLLER (0x05)
> +#define FWTS_PCI_CLASS_CODE_BRIDGE_CONTROLLER (0x06)
> +#define FWTS_PCI_CLASS_CODE_SIMPLE_COMMS_CONTROLLER (0x07)
> +#define FWTS_PCI_CLASS_CODE_BASE_SYSTEM_PERIPHERALS (0x08)
> +#define FWTS_PCI_CLASS_CODE_INPUT_DEVICE (0x09)
> +#define FWTS_PCI_CLASS_CODE_DOCKING_STATION (0x0a)
> +#define FWTS_PCI_CLASS_CODE_PROCESSOR (0x0b)
> +#define FWTS_PCI_CLASS_CODE_SERIAL_BUS_CONTROLLER (0x0c)
> +#define FWTS_PCI_CLASS_CODE_WIRELESS_CONTROLLER (0x0d)
> +#define FWTS_PCI_CLASS_CODE_INTELLIGENT_IO_CONTROLLER (0x0e)
> +#define FWTS_PCI_CLASS_CODE_SATELLITE_COMMS_CONTROLLER (0x0f)
> +#define FWTS_PCI_CLASS_CODE_CRYPTO_CONTROLLER (0x10)
> +#define FWTS_PCI_CLASS_CODE_SIGNAL_PROC_CONTROLLER (0x11)
> +#define FWTS_PCI_CLASS_CODE_NO_CLASSICATION (0xff)
> +
> +/* Just a handful of sub-class codes */
> +#define FWTS_PCI_SUBCLASS_CODE_HOST_BRIDGE (0x00)
> +#define FWTS_PCI_SUBCLASS_CODE_PCI_TO_PCI_BRIDGE (0x04)
> +#define FWTS_PCI_SUBCLASS_CODE_OTHER_SYSTEM_PERIPHERAL (0x80)
> +#define FWTS_PCI_SUBCLASS_CODE_AUDIO_DEVICE (0x03)
> +
> +
> +/*
> + * PCI Express Capability Structure is defined in Section 7.8
> + * of PCI Express®i Base Specification Revision 2.0
> + */
> +typedef struct {
> + uint8_t pcie_cap_id;
> + uint8_t next_cap_point;
> + uint16_t pcie_cap_reg;
> + uint32_t device_cap;
> + uint16_t device_contrl;
> + uint16_t device_status;
> + uint32_t link_cap;
> + uint16_t link_contrl;
> + uint16_t link_status;
> + uint32_t slot_cap;
> + uint16_t slot_contrl;
> + uint16_t slot_status;
> + uint16_t root_contrl;
> + uint16_t root_cap;
> + uint32_t root_status;
> + uint32_t device_cap2;
> + uint16_t device_contrl2;
> + uint16_t device_status2;
> + uint32_t link_cap2;
> + uint16_t link_contrl2;
> + uint16_t link_status2;
> + uint32_t slot_cap2;
> + uint16_t slot_contrl2;
> + uint16_t slot_status2;
> +} __attribute__ ((packed)) fwts_pcie_capability;
> +
> +#endif
>
I noticed HEADER_TYPE can be 00, 01 and 02. As Bit 7 is used to identify
a multi-function device, we may need to be careful to mask BIt 7 when
using these defines.
Acked-by: Alex Hung <alex.hung at canonical.com>
--
Cheers,
Alex Hung
More information about the fwts-devel
mailing list