{
    "$schema": "http://redfish.dmtf.org/schemas/v1/redfish-schema.v1_2_0.json",
    "title": "#PCIeFunction.v1_0_2.PCIeFunction",
    "$ref": "#/definitions/PCIeFunction",
    "definitions": {
        "DeviceClass": {
            "type": "string",
            "enum": [
                "UnclassifiedDevice",
                "MassStorageController",
                "NetworkController",
                "DisplayController",
                "MultimediaController",
                "MemoryController",
                "Bridge",
                "CommunicationController",
                "GenericSystemPeripheral",
                "InputDeviceController",
                "DockingStation",
                "Processor",
                "SerialBusController",
                "WirelessController",
                "IntelligentController",
                "SatelliteCommunicationsController",
                "EncryptionController",
                "SignalProcessingController",
                "ProcessingAccelerators",
                "NonEssentialInstrumentation",
                "Coprocessor",
                "UnassignedClass",
                "Other"
            ],
            "enumDescriptions": {
                "UnclassifiedDevice": "An unclassified device.",
                "MassStorageController": "A mass storage controller.",
                "NetworkController": "A network controller.",
                "DisplayController": "A display controller.",
                "MultimediaController": "A multimedia controller.",
                "MemoryController": "A memory controller.",
                "Bridge": "A bridge.",
                "CommunicationController": "A communication controller.",
                "GenericSystemPeripheral": "A generic system peripheral.",
                "InputDeviceController": "An input device controller.",
                "DockingStation": "A docking station.",
                "Processor": "A processor.",
                "SerialBusController": "A serial bus controller.",
                "WirelessController": "A wireless controller.",
                "IntelligentController": "An intelligent controller.",
                "SatelliteCommunicationsController": "A satellite communications controller.",
                "EncryptionController": "An encryption controller.",
                "SignalProcessingController": "A signal processing controller.",
                "ProcessingAccelerators": "A processing accelerators.",
                "NonEssentialInstrumentation": "A non-essential instrumentation.",
                "Coprocessor": "A coprocessor.",
                "UnassignedClass": "An unassigned class.",
                "Other": "A other class. The function Device Class Id needs to be verified."
            }
        },
        "FunctionType": {
            "type": "string",
            "enum": [
                "Physical",
                "Virtual"
            ],
            "enumDescriptions": {
                "Physical": "A physical PCie function.",
                "Virtual": "A virtual PCIe function."
            }
        },
        "PCIeFunction": {
            "type": "object",
            "patternProperties": {
                "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                    "type": [
                        "array",
                        "boolean",
                        "number",
                        "null",
                        "object",
                        "string"
                    ],
                    "description": "This property shall specify a valid odata or Redfish property."
                }
            },
            "additionalProperties": false,
            "properties": {
                "@odata.context": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/context"
                },
                "@odata.id": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/id"
                },
                "@odata.type": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/type"
                },
                "Oem": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Oem",
                    "description": "This is the manufacturer/provider specific extension moniker used to divide the Oem object into sections.",
                    "longDescription": "The value of this string shall be of the format for the reserved word *Oem*."
                },
                "Id": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Id",
                    "readonly": true
                },
                "Description": {
                    "anyOf": [
                        {"$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Description"},
                        {"type": "null"}
                    ],
                    "readonly": true
                },
                "Name": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Name",
                    "readonly": true
                },
                "FunctionId": {
                    "type": [
                        "number",
                        "null"
                    ],
                    "readonly": true,
                    "description": "The the PCIe Function identifier.",
                    "longDescription": "The value of this property shall the PCIe device function number within a given PCIe device."
                },
                "FunctionType": {
                    "$ref": "#/definitions/FunctionType",
                    "readonly": true,
                    "description": "The type of the PCIe Function.",
                    "longDescription": "The value of this property shall be the function type of the PCIe device function such as Physical or Virtual."
                },
                "DeviceClass": {
                    "$ref": "#/definitions/DeviceClass",
                    "readonly": true,
                    "description": "The class for this PCIe Function.",
                    "longDescription": "The value of this property shall be the device class of the PCIe device function such as Storage, Network, Memory etc."
                },
                "DeviceId": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "pattern": "^0[xX](([a-fA-F]|[0-9]){2}){2}$",
                    "readonly": true,
                    "description": "The Device ID of this PCIe function.",
                    "longDescription": "The value of this property shall be the PCI Device ID of the PCIe device function."
                },
                "VendorId": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "pattern": "^0[xX](([a-fA-F]|[0-9]){2}){2}$",
                    "readonly": true,
                    "description": "The Vendor ID of this PCIe function.",
                    "longDescription": "The value of this property shall be the PCI Vendor ID of the PCIe device function."
                },
                "ClassCode": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "pattern": "^0[xX](([a-fA-F]|[0-9]){2}){3}$",
                    "readonly": true,
                    "description": "The Class Code of this PCIe function.",
                    "longDescription": "The value of this property shall be the PCI Class Code of the PCIe device function."
                },
                "RevisionId": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "pattern": "^0[xX](([a-fA-F]|[0-9]){2}){1}$",
                    "readonly": true,
                    "description": "The Revision ID of this PCIe function.",
                    "longDescription": "The value of this property shall be the PCI Revision ID of the PCIe device function."
                },
                "SubsystemId": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "pattern": "^0[xX](([a-fA-F]|[0-9]){2}){2}$",
                    "readonly": true,
                    "description": "The Subsystem ID of this PCIe function.",
                    "longDescription": "The value of this property shall be the PCI Subsystem ID of the PCIe device function."
                },
                "SubsystemVendorId": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "pattern": "^0[xX](([a-fA-F]|[0-9]){2}){2}$",
                    "readonly": true,
                    "description": "The Subsystem Vendor ID of this PCIe function.",
                    "longDescription": "The value of this property shall be the PCI Subsystem Vendor ID of the PCIe device function."
                },
                "Status": {
                    "anyOf": [
                        {"$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Status"},
                        {"type": "null"}
                    ]
                },
                "Links": {
                    "type": "object",
                    "patternProperties": {
                        "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message|Privileges)\\.[a-zA-Z_][a-zA-Z0-9_.]+$": {
                            "type": [
                                "array",
                                "boolean",
                                "number",
                                "null",
                                "object",
                                "string"
                            ],
                            "description": "This property shall specify a valid odata or Redfish property."
                        }
                    },
                    "additionalProperties": false,
                    "properties": {
                        "Oem": {
                            "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Oem",
                            "description": "Oem extension object.",
                            "longDescription": "This object represents the Oem property.  All values for resources described by this schema shall comply to the requirements as described in the Redfish specification."
                        },
                        "EthernetInterfaces@odata.count": {
                            "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/count"
                        },
                        "EthernetInterfaces@odata.navigationLink": {
                            "type": "string",
                            "format": "uri"
                        },
                        "EthernetInterfaces": {
                            "type": "array",
                            "items": {
                                "$ref": "http://redfish.dmtf.org/schemas/v1/EthernetInterface.json#/definitions/EthernetInterface"
                            },
                            "readonly": true,
                            "description": "An array of references to the ethernet interfaces which the PCIe device produces.",
                            "longDescription": "The value of this property shall reference a resource of type EthernetInterface that represents the network interfaces associated with this resource."
                        },
                        "Drives@odata.count": {
                            "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/count"
                        },
                        "Drives@odata.navigationLink": {
                            "type": "string",
                            "format": "uri"
                        },
                        "Drives": {
                            "type": "array",
                            "items": {
                                "$ref": "http://redfish.dmtf.org/schemas/v1/Drive.json#/definitions/Drive"
                            },
                            "readonly": true,
                            "description": "An array of references to the drives which the PCIe device produces.",
                            "longDescription": "The value of this property shall reference a resource of type Drive that represents the storage drives associated with this resource."
                        },
                        "StorageControllers@odata.count": {
                            "$ref": "http://redfish.dmtf.org/schemas/v1/odata.4.0.0.json#/definitions/count"
                        },
                        "StorageControllers@odata.navigationLink": {
                            "type": "string",
                            "format": "uri"
                        },
                        "StorageControllers": {
                            "type": "array",
                            "items": {
                                "$ref": "http://redfish.dmtf.org/schemas/v1/Storage.v1_0_0.json#/definitions/StorageController"
                            },
                            "readonly": true,
                            "description": "An array of references to the storage controllers which the PCIe device produces.",
                            "longDescription": "The value of this property shall reference a resource of type StorageController that represents the storage controllers associated with this resource."
                        },
                        "PCIeDevice": {
                            "anyOf": [
                                {"$ref": "http://redfish.dmtf.org/schemas/v1/PCIeDevice.json#/definitions/PCIeDevice"},
                                {"type": "null"}
                            ],
                            "readonly": true,
                            "description": "A reference to the PCIeDevice on which this function resides.",
                            "longDescription": "The value of this property shall be a reference to the resource that this function is a part of and shall reference a resource of type PCIeDevice."
                        }
                    },
                    "longDescription": "This type, as described by the Redfish Specification, shall contain references to resources that are related to, but not contained by (subordinate to), this resource.",
                    "description": "The links object contains the links to other resources that are related to this resource."
                }
            },
            "required": [
                "Id",
                "Name"
            ],
            "description": "This is the schema definition for the PCIeFunction resource.  It represents the properties of a PCIeFunction attached to a System."
        }
    },
    "copyright": "Copyright 2014-2017 Distributed Management Task Force, Inc. (DMTF). For the full DMTF copyright policy, see http://www.dmtf.org/about/policies/copyright"
}
