[PATCH 1/4] lib: add new PCI definitions

Colin King colin.king at canonical.com
Fri Oct 25 14:12:31 UTC 2013


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
-- 
1.8.3.2




More information about the fwts-devel mailing list